/** * 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 delete_record(). I also check to ensure that delete * properly chains into the files table when needed. * */ public function test_delete_record() { global $DB; $courseid = $this->testcourseid; // Delete a record where nobody else is using that file. $sectionname = "Topic 3"; $si = new section_icon($courseid, $sectionname); $fileid = $this->fileids[self::SECTION3_COURSE_FILE_ID_INDEX]; $si->delete_record(); // Now check to ensure that it is gone. $params = array($courseid, $sectionname); $query = "SELECT * FROM {nurs_navigation} WHERE courseid = ? AND sectionname = ?"; $record = $DB->get_record_sql($query, $params, IGNORE_MULTIPLE); $this->assertFalse((bool) $record); // And the entry from the files table. $record = $DB->get_records('files', array('itemid' => $fileid)); $this->assertTrue((bool) (count($record) == 0)); // Delete a record with a shared file. $sectionname = "Craig's Resources"; $si = new section_icon($courseid, $sectionname); $fileid = $this->fileids[self::SECTION1_GLOBAL_FILE_ID_INDEX]; $si->delete_record(); // Ensure that the navigation entry is gone. $params = array($courseid, $sectionname); $query = "SELECT * FROM {nurs_navigation} WHERE courseid = ? AND sectionname = ?"; $record = $DB->get_record_sql($query, $params, IGNORE_MULTIPLE); $this->assertFalse((bool) $record); // But the files table entry remains. $record = $DB->get_records('files', array('itemid' => $fileid)); $this->assertTrue((bool) (count($record) > 0)); }