Fix issue#129 - Notify error for empty acronym or description
authorBarry Oosthuizen <barry.oosthuizen@nottingham.ac.uk>
Wed, 22 Jul 2015 10:57:46 +0000 (11:57 +0100)
committerBarry Oosthuizen <barry.oosthuizen@nottingham.ac.uk>
Wed, 22 Jul 2015 10:59:47 +0000 (11:59 +0100)
lang/en/attendance.php
locallib.php
preferences.php
renderables.php
renderer.php

index 2a16291..cfc32d1 100644 (file)
@@ -103,6 +103,8 @@ $string['downloadtext'] = 'Download in text format';
 $string['donotusepaging'] = 'Do not use paging';
 $string['duration'] = 'Duration';
 $string['editsession'] = 'Edit Session';
+$string['emptyacronym'] = 'Empty acronyms are not allowed. Status record not updated.';
+$string['emptydescription'] = 'Empty descriptions are not allowed. Status record not updated.';
 $string['edituser'] = 'Edit user';
 $string['endtime'] = 'Session end time';
 $string['endofperiod'] = 'End of period';
@@ -297,4 +299,4 @@ $string['attendance_already_submitted'] = 'You may not self register attendance
 $string['lowgrade'] = 'Low grade';
 $string['submitattendance'] = 'Submit attendance';
 $string['attendancenotset'] = 'You must set your attendance';
-$string['export'] = 'Export';
\ No newline at end of file
+$string['export'] = 'Export';
index 122159b..e6808c3 100644 (file)
@@ -1596,6 +1596,10 @@ class attendance {
     public function update_status($status, $acronym, $description, $grade, $visible) {
         global $DB;
 
+        if (empty($acronym) || empty($description)) {
+            return array('acronym' => $acronym, 'description' => $description);
+        }
+
         $updated = array();
 
         if ($acronym) {
index 57b53ea..876f595 100644 (file)
@@ -55,6 +55,8 @@ $PAGE->set_cacheable(true);
 $PAGE->set_button($OUTPUT->update_module_button($cm->id, 'attendance'));
 $PAGE->navbar->add(get_string('settings', 'attendance'));
 
+$errors = array();
+
 switch ($att->pageparams->action) {
     case att_preferences_page_params::ACTION_ADD:
         $newacronym         = optional_param('newacronym', null, PARAM_TEXT);
@@ -112,7 +114,7 @@ switch ($att->pageparams->action) {
 
         foreach ($acronym as $id => $v) {
             $status = $statuses[$id];
-            $att->update_status($status, $acronym[$id], $description[$id], $grade[$id], null);
+            $errors[$id] = $att->update_status($status, $acronym[$id], $description[$id], $grade[$id], null);
         }
         if ($att->grade > 0) {
             att_update_all_users_grades($att->id, $att->course, $att->context, $cm);
@@ -122,7 +124,7 @@ switch ($att->pageparams->action) {
 
 $output = $PAGE->get_renderer('mod_attendance');
 $tabs = new attendance_tabs($att, attendance_tabs::TAB_PREFERENCES);
-$prefdata = new attendance_preferences_data($att);
+$prefdata = new attendance_preferences_data($att, array_filter($errors));
 $setselector = new attendance_set_selector($att, $maxstatusset);
 
 // Output starts here.
index 8b04082..d6fef01 100644 (file)
@@ -548,8 +548,11 @@ class attendance_preferences_data implements renderable {
 
     private $att;
 
-    public function __construct(attendance $att) {
+    public $errors;
+
+    public function __construct(attendance $att, $errors) {
         $this->statuses = $att->get_statuses(false);
+        $this->errors = $errors;
 
         foreach ($this->statuses as $st) {
             $st->haslogs = att_has_logs_for_status ($st->id);
index 3aea268..f404a2c 100644 (file)
@@ -963,10 +963,21 @@ class mod_attendance_renderer extends plugin_renderer_base {
 
         $i = 1;
         foreach ($prefdata->statuses as $st) {
+            $emptyacronym = '';
+            $emptydescription = '';
+            if (array_key_exists($st->id, $prefdata->errors)) {
+                if (empty($prefdata->errors[$st->id]['acronym'])) {
+                    $emptyacronym = $this->construct_notice(get_string('emptyacronym', 'mod_attendance'), 'notifyproblem');
+                }
+                if (empty($prefdata->errors[$st->id]['description'])) {
+                    $emptydescription = $this->construct_notice(get_string('emptydescription', 'mod_attendance') , 'notifyproblem');
+                }
+            }
+
             $table->data[$i][] = $i;
-            $table->data[$i][] = $this->construct_text_input('acronym['.$st->id.']', 2, 2, $st->acronym);
-            $table->data[$i][] = $this->construct_text_input('description['.$st->id.']', 30, 30, $st->description);
-            $table->data[$i][] = $this->construct_text_input('grade['.$st->id.']', 4, 4, format_float($st->grade));
+            $table->data[$i][] = $this->construct_text_input('acronym['.$st->id.']', 2, 2, $st->acronym) . $emptyacronym;
+            $table->data[$i][] = $this->construct_text_input('description['.$st->id.']', 30, 30, $st->description) . $emptydescription;
+            $table->data[$i][] = $this->construct_text_input('grade['.$st->id.']', 4, 4, $st->grade);
             $table->data[$i][] = $this->construct_preferences_actions_icons($st, $prefdata);
 
             $i++;
@@ -1040,6 +1051,18 @@ class mod_attendance_renderer extends plugin_renderer_base {
         return html_writer::empty_tag('input', $attributes);
     }
 
+    /**
+     * Construct a notice message
+     * 
+     * @param string $text
+     * @param string $class
+     * @return string
+     */
+    private function construct_notice($text, $class = 'notifymessage') {
+        $attributes = array('class' => $class);
+        return html_writer::tag('p', $text, $attributes);
+    }
+
     // Show different picture if it is a temporary user.
     protected function user_picture($user, array $opts = null) {
         if ($user->type == 'temporary') {