Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Modified block to use mform

Calendar selector used a fairly hacky YUI2in3 implementation, using
formslib allows the datetimeselector to be used which has a built
in calendar selector.
  • Loading branch information...
commit afb1cb9e2d1dd2f4205d5d338ba629696b5188be 1 parent a97c516
Mark Johnson authored
View
264 block_course_appointments.php
@@ -25,7 +25,7 @@
*/
@require_once($CFG->libdir.'/sms/smslib.php');
-require_once($CFG->libdir.'/bennu/bennu.class.php');
+require_once($CFG->dirroot.'/blocks/course_appointments/course_appointments_form.php');
/**
* Course Appointments block class
*
@@ -126,8 +126,10 @@ public function get_content() {
$this->display_errors($SESSION->course_appointments['errors']);
}
- $this->content->text .= $this->build_form($coursecontext);
- unset($SESSION->course_appointments);
+ $url = new moodle_url('/blocks/course_appointments/process.php');
+ $mform = new course_appointments_form($url->out(), array('coursecontext' => $coursecontext));
+ $form = $mform->display();
+ $this->content->text .= $form;
}
$this->content->footer = '';
@@ -145,262 +147,6 @@ public function get_content() {
}
/**
- * Generates the HTML for the appointment booking form.
- *
- * Gets a list of students enrolled on the course. Then generates the HTML for a select
- * list containing students, a date field with a button to launch a calendar selector,
- * select lists for the appointment time, and an option to notify the student by SMS.
- *
- * @param $coursecontext Context object for the course we can get current users.
- * @return string HTML for the form.
- */
- public function build_form($coursecontext) {
- global $CFG, $COURSE, $SESSION, $DB, $OUTPUT;
- $cap = 'block/course_appointments:bookable';
- $students = get_users_by_capability($coursecontext, $cap);
- $url = new moodle_url('/blocks/course_appointments/process.php');
- $studentlist = array();
-
- foreach ($students as $student) {
- $studentlist[$student->id] = fullname($student);
- }
-
- $hours = range(0, 23);
- $minutes = range(0, 59);
- foreach (array('hours', 'minutes') as $array) {
- foreach (${$array} as $k => $v) {
- ${$array}[$k] = str_pad($v, 2, '0', STR_PAD_LEFT);
- }
- }
- $selected_student = null;
- $selected_date = null;
- $selected_time = array('hours' => '', 'minutes' => '');
- $checked = '';
-
- if (isset($SESSION->course_appointments['appointment_student'])) {
- $selected_student = $SESSION->course_appointments['appointment_student'];
- }
- if (isset($SESSION->course_appointments['appointment_date'])) {
- $selected_date = $SESSION->course_appointments['appointment_date'];
- } else {
- $selected_date = date('d M Y');
- }
- if (isset($SESSION->course_appointments['appointment_time_hours'])) {
- $selected_time['hours'] = $SESSION->course_appointments['appointment_time_hours'];
- } else {
- $selected_time['hours'] = date('H');
- }
- if (isset($SESSION->course_appointments['appointment_time_minutes'])) {
- $selected_time['minutes'] = $SESSION->course_appointments['appointment_time_minutes'];
- } else {
- $selected_time['minutes'] = date('i');
- }
- if (isset($SESSION->course_appointments['appointment_notify'])
- && $SESSION->course_appointments['appointment_notify'] == 1) {
- $checked = 'checked';
- }
-
- $formattrs = array(
- 'id' => "block_courseappointments_form",
- 'action' => $url,
- 'method' => "post"
- );
- $form = html_writer::start_tag('form', $formattrs);
- $inputattrs = array(
- 'type' => "hidden",
- 'name' => "courseid",
- 'value' => $COURSE->id
- );
- $form .= html_writer::empty_tag('input', $inputattrs);
- $form .= html_writer::start_tag('div', array('class' => "formrow"));
- $labelattrs = array('for' => "appointment_student");
- $form .= html_writer::tag('label', get_string('students'), $labelattrs);
- $form .= html_writer::select($studentlist, 'appointment_student', $selected_student);
- $form .= html_writer::end_tag('div');
-
- $rowattrs = array('class' => "formrow", 'id' => "block_courseappointments_daterow");
- $form .= html_writer::start_tag('div', $rowattrs);
- $form .= html_writer::tag('label', get_string('date'), array('for' => "date"));
- $inputattrs = array(
- 'type' => "text",
- 'id' => "block_courseappointments_appointmentdate",
- 'name' => "appointment_date",
- 'value' => $selected_date
- );
- $form .= html_writer::empty_tag('input', $inputattrs);
- $buttonattrs = array(
- 'type' => "button",
- 'id' => "block_courseappointments_show",
- 'title' => "Show Calendar"
- );
- $form .= html_writer::start_tag('button', $buttonattrs);
- $imgattrs = array(
- 'src' => $OUTPUT->pix_url('i/calendar'),
- 'alt' => "Calendar"
- );
- $form .= html_writer::empty_tag('img', $imgattrs);
- $form .= html_writer::end_tag('button');
- $form .= html_writer::end_tag('div');
-
- $divattrs = array('id' => "block_courseappointments_calendarcontainer");
- $form .= html_writer::tag('div', '', $divattrs);
-
- $form .= html_writer::start_tag('div', array('class' => "formrow"));
- $form .= html_writer::tag('label',
- get_string('time'),
- array('for' => "appointment_time_hours"));
- $form .= html_writer::select($hours,
- 'appointment_time_hours',
- $selected_time['hours'],
- array());
- $form .= ':';
- $form .= html_writer::select($minutes,
- 'appointment_time_minutes',
- $selected_time['minutes'],
- array());
- $form .= html_writer::end_tag('div');
-
- $form .= html_writer::start_tag('div', array('class' => "formrow"));
- $form .= html_writer::tag('label',
- get_string('notifystudent', 'block_course_appointments'),
- array('for' => "appointment_notify"));
- $inputattrs = array('type' => "hidden", 'name' => "appointment_notify", 'value' => "0");
- $form .= html_writer::empty_tag('input', $inputattrs);
- $inputattrs = array(
- 'type' => "checkbox",
- 'name' => "appointment_notify",
- 'value' => "1",
- 'checked' => $checked
- );
- $form .= html_writer::empty_tag('input', $inputattrs);
- $form .= html_writer::end_tag('div');
-
- $submitattrs = array(
- 'type' => "submit",
- 'name' => "appointment_submit",
- 'value' => get_string('book', 'block_course_appointments')
- );
- $form .= html_writer::empty_tag('input', $submitattrs);
- $form .= html_writer::end_tag('form');
- return $form;
- }
-
- /**
- * Reads in POSTed data from the form, validates it and stores it for processing
- *
- * Reads studentid, date and time from the form, checks that the student exists,
- * converst the date and time to unix time, and checks that it's valid and not in the past.
- * Returns an error message for each error encountered, or false otherwise.
- * Validated data is stored in {@see $student} and {@see $timestamp} for
- * easy access by {@see process_form()}.
- * Raw data is stored in the user's session in case it needs redisplaying on the form.
- *
- * @return array|bool Array of error messages, or false if none.
- */
- public function validate_form() {
- global $SESSION, $DB;
- $studentid = optional_param('appointment_student', 0, PARAM_INT);
- $SESSION->course_appointments['appointment_student'] = $studentid;
- $datestring = optional_param('appointment_date', 0, PARAM_TEXT);
- $SESSION->course_appointments['appointment_date'] = $datestring;
- $hours = optional_param('appointment_time_hours', 0, PARAM_TEXT);
- $SESSION->course_appointments['appointment_time_hours'] = $hours;
- $mins = optional_param('appointment_time_minutes', 0, PARAM_TEXT);
- $SESSION->course_appointments['appointment_time_mins'] = $mins;
- $this->timestamp = strtotime($datestring.' '.$hours.':'.$mins);
- $errors = array();
-
- if (empty($studentid)) {
- $errors[] = get_string('nostudent', 'block_course_appointments');
- } else {
- if (!$this->student = $DB->get_record('user', array('id' => $studentid))) {
- $errors[] = get_string('studentdoesntexist', 'block_course_appointments');
- }
- }
-
- if (empty($datestring)) {
- $errors[] = get_string('nodate', 'block_course_appointments');
- }
-
- if (empty($this->timestamp) || $this->timestamp == -1) {
- $errors[] = get_string('invaliddate', 'block_course_appointments');
- } else if ($this->timestamp < time()) {
- $errors[] = get_string('pastdate', 'block_course_appointments');
- }
-
- if (empty($errors)) {
- return false;
- } else {
- return $errors;
- }
- }
-
- /**
- * Processes the validated data and inserts appointments into the database.
- *
- * Takes the validated student record and appointment timestamp from the object's properties.
- * Generates an unique UUID, and edits it so it can be used to identify the two appointmetns
- * as linked, and inserts a user event into the database for both the student and the teacher
- * (current user). Then clears the session data for the block so the data isn't redisplayed
- * in the form.
- * If the notify checkbox was ticked, an email and SMS wil also be sent to the student.
- *
- */
- public function process_form() {
- global $USER, $COURSE, $CFG, $SESSION, $DB;
- global $sms;
- $notify = optional_param('appointment_notify', 0, PARAM_INT);
- $names = new stdClass;
- $names->student = fullname($this->student);
- $names->teacher = fullname($USER);
- $uuid = Bennu::generate_guid();
- $appointment = new stdClass;
- $appointment->name = get_string('entryname', 'block_course_appointments', $names->student);
- $appointment->description = get_string('entrydescription',
- 'block_course_appointments',
- $names);
- $appointment->userid = $USER->id;
- $appointment->timestart = $this->timestamp;
-
- // To identify the two appointments as linked, we use the same UUID for both, but replace
- // the dashes with T (for Teacher) and S (For student). Since neither character is
- // Hexadecimal, they wont occur in any generated UUID.
- $appointment->uuid = str_replace('-', 'T', $uuid);
- $appointment->format = 1;
- $DB->insert_record('event', $appointment);
- $appointment->name = get_string('entryname', 'block_course_appointments', $names->teacher);
- $appointment->userid = $this->student->id;
- $appointment->uuid = str_replace('-', 'S', $uuid);
- $DB->insert_record('event', $appointment);
- $names->date = date('d/m/Y', $this->timestamp);
- $names->time = date('H:i', $this->timestamp);
- $notified = false;
- if ($notify) {
- $subject = get_string('notifysubject', 'block_course_appointments', $names->teacher);
- $message = get_string('notifytext', 'block_course_appointments', $names);
- $notified = email_to_user($this->student, $USER, $subject, $message);
- if (class_exists('SMS')) {
- $sms = SMS::Loader($CFG);
- if ($sms->format_number($this->student->phone2)) {
- $message = get_string('notifysms', 'block_course_appointments', $names);
- $sent = $sms->send_message(array($this->student->phone2), $message);
- // Create a list of users to whom the message failed to send
- foreach ($sent->responses as $response) {
- if ($response->code == 1) {
- $notified = true;
- }
- }
- }
- }
- }
- $SESSION->course_appointments = array();
- if ($notify && !$notified) {
- $SESSION->course_appointments['errors'][] = get_string('notnotified',
- 'block_course_appointments');
- }
- }
-
- /**
* Formats the error messages as HTML.
*
* @param $errors error messages generated by {@see validate_form()}
View
147 course_appointments_form.php
@@ -0,0 +1,147 @@
+<?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/>.
+
+
+/**
+ * Defines the form for making appointments
+ *
+ * @package block_course_appointments
+ * @author Mark Johnson <mark.johnson@tauntons.ac.uk>
+ * @copyright 2010 Tauntons College, UK
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+if (!defined('MOODLE_INTERNAL')) {
+ die();
+}
+require_once($CFG->libdir.'/formslib.php');
+require_once($CFG->libdir.'/bennu/bennu.class.php');
+
+class course_appointments_form extends moodleform {
+
+ public function definition() {
+ $mform = $this->_form;
+ $coursecontext = $this->_customdata['coursecontext'];
+ $cap = 'block/course_appointments:bookable';
+ $students = get_users_by_capability($coursecontext, $cap);
+ $studentlist = array();
+ foreach ($students as $student) {
+ $studentlist[$student->id] = fullname($student);
+ }
+
+
+ $mform->addElement('hidden', 'courseid', $coursecontext->instanceid);
+
+ $mform->addElement('select',
+ 'student',
+ get_string('student', 'block_course_appointments'),
+ $studentlist);
+ $mform->addRule('student', null, 'required', null, 'client');
+
+ $years = array('startyear' => date('Y'), 'stopyear' => date('Y')+1, 'optional' => false);
+ $mform->addElement('date_time_selector',
+ 'date',
+ get_string('datetime', 'block_course_appointments'),
+ $years);
+ $mform->addRule('date', null, 'required', null, 'client');
+ $mform->addElement('checkbox',
+ 'notify',
+ get_string('notifystudent', 'block_course_appointments'));
+ $mform->addElement('submit', 'book', get_string('book', 'block_course_appointments'));
+
+ }
+
+ public function validate($data) {
+ if (empty($data['date']) || $data['date'] == -1) {
+ $errors['date'] = get_string('invaliddate', 'block_course_appointments');
+ } else if ($data['date'] < time()) {
+ $errors['date'] = get_string('pastdate', 'block_course_appointments');
+ }
+ return $errors;
+ }
+
+ /**
+ * Generate the HTML for the form, capture it in an output buffer, then return it
+ *
+ * @return string
+ */
+ public function display() {
+ //finalize the form definition if not yet done
+ if (!$this->_definition_finalized) {
+ $this->_definition_finalized = true;
+ $this->definition_after_data();
+ }
+ ob_start();
+ $this->_form->display();
+ $form = ob_get_clean();
+
+ return $form;
+ }
+
+ public function process($data) {
+ global $USER, $COURSE, $CFG, $DB;
+ global $sms;
+ $student = $DB->get_record('user', array('id' => $data->student));
+ $names = new stdClass;
+ $names->student = fullname($student);
+ $names->teacher = fullname($USER);
+ $uuid = Bennu::generate_guid();
+ $appointment = new stdClass;
+ $appointment->name = get_string('entryname', 'block_course_appointments', $names->student);
+ $appointment->description = get_string('entrydescription',
+ 'block_course_appointments',
+ $names);
+ $appointment->userid = $USER->id;
+ $appointment->timestart = $data->date;
+
+ // To identify the two appointments as linked, we use the same UUID for both, but replace
+ // the dashes with T (for Teacher) and S (For student). Since neither character is
+ // Hexadecimal, they wont occur in any generated UUID.
+ $appointment->uuid = str_replace('-', 'T', $uuid);
+ $appointment->format = 1;
+ $DB->insert_record('event', $appointment);
+ $appointment->name = get_string('entryname', 'block_course_appointments', $names->teacher);
+ $appointment->userid = $data->student;
+ $appointment->uuid = str_replace('-', 'S', $uuid);
+ $DB->insert_record('event', $appointment);
+ $names->date = date('d/m/Y', $data->date);
+ $names->time = date('H:i', $data->date);
+ $notified = false;
+ if ($data->notify) {
+ $subject = get_string('notifysubject', 'block_course_appointments', $names->teacher);
+ $message = get_string('notifytext', 'block_course_appointments', $names);
+ $notified = email_to_user($student, $USER, $subject, $message);
+ if (class_exists('SMS')) {
+ $sms = SMS::Loader($CFG);
+ if ($sms->format_number($student->phone2)) {
+ $message = get_string('notifysms', 'block_course_appointments', $names);
+ $sent = $sms->send_message(array($student->phone2), $message);
+ // Create a list of users to whom the message failed to send
+ foreach ($sent->responses as $response) {
+ if ($response->code == 1) {
+ $notified = true;
+ }
+ }
+ }
+ }
+ }
+ $SESSION->course_appointments = array();
+ if ($data->notify && !$notified) {
+ $SESSION->course_appointments['errors'][] = get_string('notnotified',
+ 'block_course_appointments');
+ }
+ }
+}
View
4 lang/en/block_course_appointments.php
@@ -27,13 +27,14 @@
$string['pluginname'] = 'Appointments';
$string['pluginnameplural'] = 'Appointments';
$string['book'] = 'Book';
+$string['datetime'] = 'Date/Time';
$string['entrydescription'] = 'Meeting between {$a->student} and {$a->teacher}';
$string['entryname'] = 'Meeting with {$a}';
$string['invaliddate'] = 'The date and time selected was invalid';
$string['nostudent'] = 'No Student was selected';
$string['nodate'] = 'No Date was selected';
$string['notnotified'] = 'The student could not be notified';
-$string['notifystudent'] = 'Notify Student';
+$string['notifystudent'] = 'Notify Student?';
$string['notifysubject'] = 'Appointment to see {$a}';
$string['notifytext'] = 'Hi {$a->student}
{$a->teacher} has booked an appointment to see you on {$a->date} at {$a->time}.
@@ -43,3 +44,4 @@
$string['remindsms'] = 'Don\'t forget your appointment with {$a->name} at {$a->time} today.';
$string['pastdate'] = 'The time and date selected is in the past';
$string['studentdoesntexist'] = 'The selected student doesn\'t exist';
+$string['student'] = 'Student';
View
122 module.js
@@ -1,122 +0,0 @@
-// 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/>.
-
-
-/**
- * Defines the Javascript module for the course appointments block
- *
- * @package block_course_appointments
- * @author Mark Johnson <mark.johnson@tauntons.ac.uk>
- * @copyright 2010 Tauntons College, UK
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-M.block_course_appointments = {
-
- /**
- * Stores the calendar instance for access between runs of showcalendar()
- * @var {Object} cal
- */
- cal: false,
-
- /**
- * Stores the node for the date field so we can access and set the currently
- * selected date.
- *
- * @var {Object} appointmentdate
- */
- appointmentdate: {},
-
- /**
- * Module init function. Gets the button and date fields, and attaches event
- * listers to them.
- *
- * @param {Object} Y
- */
- init: function(Y) {
- Y.one('body').addClass('yui-skin-sam');
- var show = Y.one('#block_courseappointments_show');
- this.appointmentdate = Y.one('#block_courseappointments_appointmentdate');
- Y.on('click', this.showcalendar, Array(show, this.appointmentdate));
- Y.on('focus', this.showcalendar, this.appointmentdate);
- },
-
- /**
- * Responds to click events on the calendar button or date field, and displays the calendar.
- *
- * @param {Object} e
- */
- showcalendar: function(e){
- // This is a tad ugly. However YUI3 Doesn't have a calendar widget, so we need to use YUI2.
-
- YUI().use('yui2-calendar', function(Y){
- // Set up access to the YUI2 namespace, the block and the currently seelected date.
- var YAHOO = Y.YUI2;
- var now = new Date();
- block = M.block_course_appointments;
- var selected = new Date(block.appointmentdate.value);
- // If this is the first time the event has run, we'll need to build and render the
- // calendar.
- if (!block.cal) {
- // Set up the Calendar
- block.cal = new YAHOO.widget.Calendar('block_courseappointments_calendarcontainer', {
- iframe: false, // Turn iframe off, since container has iframe support.
- // Enable, to demonstrate how we handle changing height, using changeContent
- hide_blank_weeks: true,
- mindate: now,
- selected: (selected.getMonth() + 1) + '/' + selected.getDate() + '/' + selected.getFullYear()
- });
- // Add an event listener to set the value of the date field and hide the calendar,
- // when a date is selected.
- block.cal.selectEvent.subscribe(function(){
- if (block.cal.getSelectedDates().length > 0) {
-
- var selDate = block.cal.getSelectedDates()[0];
-
- // Pretty Date Output, using Calendar's Loblock.cale values: Friday,
- // 8 February 2008
- var dStr = selDate.getDate();
- var mStr = block.cal.cfg.getProperty("MONTHS_SHORT")[selDate.getMonth()];
- var yStr = selDate.getFullYear();
- block.appointmentdate.setAttribute('value', dStr + ' ' + mStr + ' ' + yStr);
- }
- else {
- block.appointmentdate.setAttribute('value', '');
- }
- block.cal.hide();
- });
- // The calendar's container is absolutely positioned so that it overlays the
- // block itself. This causes a bit of an issue if the calendar overflows the block
- // region, so we'll extend the region to make sure it fits.
- block.cal.renderEvent.subscribe(function(){
- var region = Y.one('.block_course_appointments').ancestor('.region-content');
- region.setStyle('height', parseInt(region.getStyle('height').replace('px', '')) + 185);
- });
- block.cal.render();
- } else {
- // If we've already rendered the calendar, we just need to display it.
- block.cal.show();
- }
- // Add an event listener to the document to hide the calendar if the user clicks
- // outside the calendar's container, or the form row with the date controls on.
- Y.on('click', function(e){
- if (e.target.ancestor('#block_courseappointments_calendarcontainer', true) == null &&
- e.target.ancestor('#block_courseappointments_daterow', true) == null) {
- M.block_course_appointments.cal.hide();
- }
- }, document);
- });
- }
-}
View
14 process.php
@@ -31,19 +31,17 @@
*/
require_once('../../config.php');
-require_login();
+@require_once($CFG->libdir.'/sms/smslib.php');
+require_once($CFG->dirroot.'/blocks/course_appointments/course_appointments_form.php');
+require_login($SITE);
$courseid = required_param('courseid', PARAM_INT);
$coursecontext = get_context_instance(CONTEXT_COURSE, $courseid);
require_capability('block/course_appointments:book', $coursecontext);
block_load_class('course_appointments');
$block = new block_course_appointments();
-$SESSION->course_appointments = array();
+$form = new course_appointments_form(null, array('coursecontext' => $coursecontext));
-if (isset($_POST['appointment_submit'])) {
- if ($errors = $block->validate_form()) {
- $SESSION->course_appointments['errors'] = $errors;
- } else {
- $block->process_form();
- }
+if ($data = $form->get_data()) {
+ $form->process($data);
}
redirect($CFG->wwwroot.'/course/view.php?id='.$courseid, '', 0);
View
41 styles.css
@@ -19,37 +19,40 @@ Copyright 2011 Tauntons College, UK
Licence: http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
-#block_courseappointments_calendarcontainer {
- font-size: 9pt;
- position: absolute;
+.block_course_appointments .mform fieldset {
+ margin: 0px;
+ padding: 0px;
}
-.yui-skin-sam .yui-calcontainer .title {
- background:url(../../lib/yui/assets/skins/sam/sprite.png) repeat-x 0 0;
+.block_course_appointments .mform fieldset > div {
+ margin: .2em 0em;
}
-.yui-skin-sam .yui-calcontainer .calclose {
- background:url(../../lib/yui/assets/skins/sam/sprite.png) no-repeat 0 -300px;
+.block_course_appointments .mform .fitem .fitemtitle {
+ width: 60%;
+ text-align: left;
}
-/* NAVBAR LEFT ARROW */
-.yui-skin-sam .yui-calendar .calnavleft {
- background:url(../../lib/yui/assets/skins/sam/sprite.png) no-repeat 0 -450px;
+.block_course_appointments .mform .fitem.required .felement,
+.block_course_appointments .mform .fitem .felement.fsubmit,
+.block_course_appointments .mform .fitem.required .fitemtitle {
+ text-align: left;
+ width: 100%;
+ margin-left: 0px;
}
-/* NAVBAR RIGHT ARROW */
-.yui-skin-sam .yui-calendar .calnavright {
- background:url(../../lib/yui/assets/skins/sam/sprite.png) no-repeat 0 -500px;
+.block_course_appointments .mform .fitem.required .fitemtitle {
+ float: none;
}
-#block_courseappointments_appointmentdate {
- width: 50%;
+.block_course_appointments .fdescription.required {
+ display: none;
}
-.block_course_appointments button {
- padding:0px;
+.block_course_appointments fieldset > select + label + select {
+ width: 4em;
}
-.block_course_appointments .errors {
- color: #f33;
+.block_course_appointments fieldset > select + label + select + label + select {
+ width: auto;
}
Please sign in to comment.
Something went wrong with that request. Please try again.