/** * Show the form for editing the specific courses a user can access based on what level that they have access to. * @param PageBuilder $page The page rendering object. * @param Array $levelDetails The list of level details */ private function showMembershipMappingLevels_specificLevel($page, $levelDetails) { // Show a nice summary of what level is being edited. printf('<div id="wpcw_member_level_name_title">%s</div>', sprintf(__('Editing permissions for <b>%s</b> level with <b>%s</b>:', 'wp_courseware'), $levelDetails['name'], $this->extensionName)); // Get a list of course IDs that exist $courses = WPCW_courses_getCourseList(false); // Get list of courses already associated with level. $courseListInDB = $this->getCourseAccessListForLevel($levelDetails['id']); // Create the summary URL to return $summaryURL = admin_url('admin.php?page=' . $this->extensionID); // Update form... $form = new FormBuilder('wpcw_member_levels_edit'); $form->setSubmitLabel(__('Save Changes', 'wp_courseware')); // Create list of courses using checkboxes (max of 2 columns) $elem = new FormElement('level_courses', __('Courses user can access at this level', 'wp_courseware'), false); $elem->setTypeAsCheckboxList($courses); $elem->checkboxListCols = 2; $form->addFormElement($elem); // Normally would check for errors too, but there's not a lot to check here. if ($form->formSubmitted()) { if ($form->formValid()) { $mapplingList = $form->getValue('level_courses'); global $wpdb, $wpcwdb; $wpdb->show_errors(); // Remove all previous level mappings (as some will have been removed) $wpdb->query($wpdb->prepare("\n\t\t\t\t\t\tDELETE \n\t\t\t\t\t\tFROM {$wpcwdb->map_member_levels} \n\t\t\t\t\t\tWHERE member_level_id = %s\n\t\t\t\t\t", $levelDetails['id'])); // Add all of the new mappings the user has chosen. if ($mapplingList && count($mapplingList) > 0) { foreach ($mapplingList as $courseID => $itemState) { $wpdb->query($wpdb->prepare("\n\t\t\t\t\t\t\t\tINSERT INTO {$wpcwdb->map_member_levels} \n\t\t\t\t\t\t\t\t(course_id, member_level_id) \n\t\t\t\t\t\t\t\tVALUES (%d, %s)\n\t\t\t\t\t\t\t", $courseID, $levelDetails['id'])); } } // Show a success message. $page->showMessage(__('Level and course permissions successfully updated.', 'wp_courseware') . '<br/><br/>' . sprintf(__('Want to return to the <a href="%s">Course Access Settings summary</a>?', 'wp_courseware'), $summaryURL)); } // if ($form->formValid()) } else { $form->setDefaultValues(array('level_courses' => $courseListInDB)); } // Show the form echo $form->toString(); printf('<a href="%s" class="button-secondary">%s</a>', $summaryURL, __('« Return to Course Access Settings summary', 'wp_courseware')); }
/** * Convert an array of details into a form element. * @param String $fieldName The name of the form element * @param Array $fieldDetails The list of details for the form element. */ protected function createElementObject($fieldName, $fieldDetails) { // Extract fields $label = $this->formObj->getArrayValue($fieldDetails, 'label'); $type = $this->formObj->getArrayValue($fieldDetails, 'type'); // Required 'true' or true are valid $required = $this->formObj->getArrayValue($fieldDetails, 'required'); $required = $required == 'true' || $required == '1'; // Start creating form element if anything other than a break. $elem = false; if ($type != 'break') { $elem = new FormElement($fieldName, $label, $required); } // Handle specific types switch ($type) { // Text Area case 'textarea': $rows = $this->formObj->getArrayValue($fieldDetails, 'rows') + 0; if ($rows == 0) { $rows = 5; } $elem->setTypeAsTextArea($rows, 70); break; // Select/Dropdown // Select/Dropdown case 'select': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsComboBox($options); break; // Radio Buttons // Radio Buttons case 'radio': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsRadioButtons($options); break; // Checkbox // Checkbox case 'checkbox': $label = false; if (isset($fieldDetails['extralabel'])) { $label = $fieldDetails['extralabel']; } $elem->setTypeAsCheckbox($label); break; // Checkbox List // Checkbox List case 'checkboxlist': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsCheckboxList($options); break; // Merged Fields - process each sub element // Merged Fields - process each sub element case 'merge': $elementList = array(); if (!empty($fieldDetails['merge'])) { foreach ($fieldDetails['merge'] as $fieldName => $fieldDetails) { $elementList[] = $this->createElementObject($fieldName, $fieldDetails); } } $elem->setTypeAsMergedElements($elementList); break; // File upload // File upload case 'uploadfile': $elem->setTypeAsUploadFile($this->formObj->getArrayValue($fieldDetails, 'show_existing'), $this->formObj->getArrayValue($fieldDetails, 'valid_if_value')); break; // Custom HTML // Custom HTML case 'custom': $elem->setTypeAsCustom($this->formObj->getArrayValue($fieldDetails, 'html')); break; // Hidden field // Hidden field case 'hidden': $elem->setTypeAsHidden(); break; // Section break // Section break case 'break': $this->formObj->addBreak($fieldName, $this->formObj->getArrayValue($fieldDetails, 'html')); break; // Text box // Text box default: break; } // Add optional fields if ($type != 'break') { // Element description if ($desc = $this->formObj->getArrayValue($fieldDetails, 'desc')) { $elem->description = $desc; } // Extra CSS if ($cssclass = $this->formObj->getArrayValue($fieldDetails, 'cssclass')) { $elem->cssclass = $cssclass; } // Add extra HTML if provided. $extraHTML = $this->formObj->getArrayValue($fieldDetails, 'extrahtml'); if ($extraHTML) { $elem->afterFormElementHTML = $extraHTML; } // Add custom error message if there is one $elem->errorMessage = $this->formObj->getArrayValue($fieldDetails, 'errormsg'); // Validation rules if (isset($fieldDetails['validate']) && is_array($fieldDetails['validate'])) { // Is it a custom function? If so, get the function name. if ($this->formObj->getArrayValue($fieldDetails['validate'], 'type') == 'function') { $elem->validationFn = $this->formObj->getArrayValue($fieldDetails['validate'], 'fname'); $elem->errorMessage = $this->formObj->getArrayValue($fieldDetails['validate'], 'error'); } else { $elem->setValidationRules($fieldDetails['validate']); } } // See if there are any suffix items? If so, parse them. // See wiki for documentation on how to structure this. if (!empty($fieldDetails['suffix_subitems'])) { $suffixItems = array(); // suffix_subitems contains a list of 'position' => array(fieldName => fieldDetails) foreach ($fieldDetails['suffix_subitems'] as $position => $elementDetails) { $suffixItems[$position] = array(); // Need to process each field now we know the position. foreach ($elementDetails as $fieldName => $fieldDetails) { // Add the position of this item (in order), with the object for this element. $suffixItems[$position][] = $this->createElementObject($fieldName, $fieldDetails); } } // Update the form element with the subitems $elem->setSuffixItems($suffixItems); } } return $elem; }
/** * Convert an array of details into a form element. * @param String $fieldName The name of the form element * @param Array $fieldDetails The list of details for the form element. */ protected function createElementObject($fieldName, $fieldDetails) { // Extract fields $label = $this->formObj->getArrayValue($fieldDetails, 'label'); $type = $this->formObj->getArrayValue($fieldDetails, 'type'); // Required 'true' or true are valid $required = $this->formObj->getArrayValue($fieldDetails, 'required'); $required = $required == 'true' || $required == '1'; // Start creating form element if anything other than a break. $elem = false; if ($type != 'break') { $elem = new FormElement($fieldName, $label, $required); } // Handle specific types switch ($type) { // Text Area case 'textarea': $rows = $this->formObj->getArrayValue($fieldDetails, 'rows') + 0; if ($rows == 0) { $rows = 5; } $elem->setTypeAsTextArea($rows, 70); break; // Select/Dropdown // Select/Dropdown case 'select': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsComboBox($options); break; // Radio Buttons // Radio Buttons case 'radio': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsRadioButtons($options); break; // Checkbox // Checkbox case 'checkbox': $label = false; if (isset($fieldDetails['extralabel'])) { $label = $fieldDetails['extralabel']; } $elem->setTypeAsCheckbox($label); break; // Checkbox List // Checkbox List case 'checkboxlist': $options = false; if (isset($fieldDetails['data']) && is_array($fieldDetails['data'])) { $options = $fieldDetails['data']; } $elem->setTypeAsCheckboxList($options); break; // Merged Fields - process each sub element // Merged Fields - process each sub element case 'merge': $elementList = array(); if (!empty($fieldDetails['merge'])) { foreach ($fieldDetails['merge'] as $fieldName => $fieldDetails) { $elementList[] = $this->createElementObject($fieldName, $fieldDetails); } } $elem->setTypeAsMergedElements($elementList); break; // Custom HTML // Custom HTML case 'custom': $elem->setTypeAsCustom($this->formObj->getArrayValue($fieldDetails, 'html')); break; // Hidden field // Hidden field case 'hidden': $elem->setTypeAsHidden(); break; // Section break // Section break case 'break': $this->formObj->addBreak($fieldName, $this->formObj->getArrayValue($fieldDetails, 'html')); break; // Text box // Text box default: break; } // Add optional fields if ($type != 'break') { // Element description if ($desc = $this->formObj->getArrayValue($fieldDetails, 'desc')) { $elem->description = $desc; } // Extra CSS if ($cssclass = $this->formObj->getArrayValue($fieldDetails, 'cssclass')) { $elem->cssclass = $cssclass; } // Add extra HTML if provided. $extraHTML = $this->formObj->getArrayValue($fieldDetails, 'extrahtml'); if ($extraHTML) { $elem->afterFormElementHTML = $extraHTML; } // Validation rules if (isset($fieldDetails['validate']) && is_array($fieldDetails['validate'])) { // Is it a custom function? If so, get the function name. if ($this->formObj->getArrayValue($fieldDetails['validate'], 'type') == 'function') { $elem->validationFn = $this->formObj->getArrayValue($fieldDetails['validate'], 'fname'); $elem->errorMessage = $this->formObj->getArrayValue($fieldDetails['validate'], 'error'); } else { $elem->setValidationRules($fieldDetails['validate']); } } } return $elem; }