/** * This function processes the submitted form for all of the sections. Most of the work * is completed via using the section_icon class and its associated routines. The data * is pulled from the form, a check is made to see if any boxes are ticked, then the * desired result is processed. Any draft files that need to be saved are saved in this * function. * * TODO: some logic should be added to outright delete a settings record if it has neither * a disable flag or custom label associated with it. * */ function process_form($courseid, $blockid, &$submittedform, &$sectionheaders, $numberofsections) { global $DB; for ($i = 0; $i < $numberofsections; $i++) { $filepickername = 'fileinfo_' . "{$i}"; $hiddenidname = 'hiddenid_' . "{$i}"; $masterupdatename = 'masterid_' . "{$i}"; $deleteiconname = 'deleteid_' . "{$i}"; $noiconname = 'noicon_' . "{$i}"; $newcourseid = $courseid; $customlabelfield = 'customlabelfield_' . "{$i}"; $customlabelcheckbox = 'customlbelcheckbox_' . "{$i}"; $si = new section_icon($courseid, $sectionheaders[$i]); // Update master via using courseid 0. if (!isset($submittedform->{$masterupdatename})) { // Use courseid of 1 so we get the correct context. $newcourseid = 1; $context = context_course::instance($newcourseid); } else { // Save block context instead of the course context for course-specific records. $context = context_block::instance($blockid); } // Check for delete first. if (isset($submittedform->{$deleteiconname})) { $si->delete_record(); continue; } $draftitemid = file_get_submitted_draft_itemid($filepickername); $itemid = get_unused_file_id(); file_save_draft_area_files($draftitemid, $context->id, BNN_BLOCK_SAVE_COMPONENT, BNN_BLOCK_SAVE_AREA, $itemid, array('subdirs' => 0, 'maxbytes' => BNN_MAX_BYTES, 'maxfiles' => BNN_MAX_FILES)); // Only update if the user uploaded a file. if (check_draft_id($draftitemid)) { $si->update_icon_record($newcourseid, $itemid); } // The other IFs are separate cases because the user can do multiple things at once. if ($submittedform->{$noiconname} != $si->get_icon_disable()) { $si->update_disableicon($submittedform->{$noiconname}); } if ($submittedform->{$customlabelcheckbox} == true) { // Only write label if different from existing label. if ($si->get_custom_label() != $submittedform->{$customlabelfield}) { $si->update_label($submittedform->{$customlabelfield}); } } else { // Only write a null if the record exists and is not already null. if ($si->settings_exists() && $si->get_custom_label() != null) { $si->update_label(null); } } } }
/** * This method tests the constructor. I then use the exists() and * master_exists() methods to make sure that the proper records were * grabbed from the DB. * */ public function test_constructor() { $courseid = $this->testcourseid; // Test Craig's Resources first (no settings). $sectionname = "Craig's Resources"; $si = new section_icon($courseid, $sectionname); $this->assertTrue((bool) $si->exists()); $this->assertTrue((bool) $si->master_exists()); $this->assertFalse((bool) $si->settings_exists()); // And also another section with a course-specific record (has settings). $sectionname = "Some Other Section"; $si = new section_icon($courseid, $sectionname); $this->assertTrue((bool) $si->exists()); $this->assertTrue((bool) $si->master_exists()); $this->assertTrue((bool) $si->settings_exists()); // Topic 4 has no course specific record (has settings). $sectionname = "Topic 4"; $si = new section_icon($courseid, $sectionname); $this->assertFalse((bool) $si->exists()); $this->assertTrue((bool) $si->master_exists()); $this->assertFalse((bool) $si->settings_exists()); // Now try a new course altogether. $courseid = 9999; $sectionname = "Craig's Resources"; $si = new section_icon($courseid, $sectionname); $this->assertFalse((bool) $si->exists()); $this->assertTrue((bool) $si->master_exists()); // Now try a section that does not exist. $sectionname = "This section does not exist"; $si = new section_icon($courseid, $sectionname); $this->assertFalse((bool) $si->exists()); $this->assertFalse((bool) $si->master_exists()); $this->assertFalse((bool) $si->settings_exists()); }