_( 'Text' ), 'numeric' => _( 'Number' ), 'date' => _( 'Date' ), 'textarea' => _( 'Long Text' ), 'files' => _( 'Files' ) ) * ); * * @uses DrawHeader() * @uses MakeFieldType() * * @param string $table DB Table name, without trailing / plural 'S'. * @param string $title Form Title. * @param array $RET Field or Field Category Data. * @param array $extra_category_fields Extra fields for Field Category. * @param array $type_options Associative array of Field Types (optional). Defaults to null. * * @return string Field or Field Category Form HTML */ function GetFieldsForm( $table, $title, $RET, $extra_category_fields = array(), $type_options = null ) { // Please add your TABLE here. /*$allowed_tables = array( 'STUDENT', 'ADDRESS', 'PEOPLE', 'STAFF', 'SCHOOL', );*/ $id = issetVal( $RET['ID'] ); $category_id = issetVal( $RET['CATEGORY_ID'] ); if ( empty( $table ) || ( empty( $id ) && empty( $category_id ) ) ) { return ''; } $new = $id === 'new' || $category_id === 'new'; $form = '
'; return $form; } /** * Outputs Fields or Field Categories Menu * * @example FieldsMenuOutput( $fields_RET, $_REQUEST['id'], $_REQUEST['category_id'] ); * @example FieldsMenuOutput( $categories_RET, $_REQUEST['category_id'] ); * @example FieldsMenuOutput( $school_fields_RET, $_REQUEST['id'], false ); * * @uses ListOutput() * * @param array $RET Field Categories (ID, TITLE, SORT_ORDER columns) or Fields (+ TYPE column) RET. * @param string $id Field Category ID or Field ID. * @param string $category_id Field Category ID. Set to false to disable Categories (optional). Defaults to '0'. */ function FieldsMenuOutput( $RET, $id, $category_id = '0' ) { if ( $RET && $id && $id !== 'new' ) { foreach ( (array) $RET as $key => $value ) { if ( $value['ID'] == $id ) { $RET[ $key ]['row_color'] = Preferences( 'HIGHLIGHT' ); } } } $LO_options = array( 'save' => false, 'search' => false, 'responsive' => false ); $LO_columns = array( 'TITLE' => ( $category_id || $category_id === false ? _( 'Field' ) : _( 'Category' ) ), 'SORT_ORDER' => _( 'Sort Order' ), ); if ( $category_id || $category_id === false ) { $LO_columns['TYPE'] = _( 'Data Type' ); } $LO_link = array(); $LO_link['TITLE']['link'] = PreparePHP_SELF( array(), array( 'category_id', 'id', 'table', 'ML_tables' ) ); if ( $category_id ) { $LO_link['TITLE']['link'] .= '&category_id=' . $category_id; } $LO_link['TITLE']['variables'] = array( ( ! $category_id && $category_id !== false ? 'category_id' : 'id' ) => 'ID' ); $LO_link['add']['link'] = PreparePHP_SELF( array(), array( 'category_id', 'id', 'table', 'ML_tables' ) ) . '&category_id='; $LO_link['add']['link'] .= $category_id || $category_id === false ? $category_id . '&id=new' : 'new'; $RET = ParseMLArray( $RET, 'TITLE' ); if ( ! $category_id && $category_id !== false ) { ListOutput( $RET, $LO_columns, 'Field Category', 'Field Categories', $LO_link, array(), $LO_options ); } else { ListOutput( $RET, $LO_columns, 'Field', 'Fields', $LO_link, array(), $LO_options ); } } /** * Make Field Type * * @example MakeFieldType( 'column' ); * * @see Can be called through DBGet()'s functions parameter * * @since 4.6 Add Files type. * * @param string $value Field Type value. * @param string $column 'TYPE' (optional). Defaults to ''. * * @return string Translated Field type */ function MakeFieldType( $value, $column = '' ) { $type_options = array( 'select' => _( 'Pull-Down' ), 'autos' => _( 'Auto Pull-Down' ), 'exports' => _( 'Export Pull-Down' ), 'multiple' => _( 'Select Multiple from Options' ), 'text' => _( 'Text' ), 'textarea' => _( 'Long Text' ), 'radio' => _( 'Checkbox' ), 'numeric' => _( 'Number' ), 'date' => _( 'Date' ), 'files' => _( 'Files' ), ); return isset( $type_options[ $value ] ) ? $type_options[ $value ] : $value; } /** * Filter Custom (Textarea / Long text) fields' MarkDown * Use before inserting/updating Fields. * * @example $_REQUEST['staff'] = FilterCustomFieldsMarkdown( 'STAFF_FIELDS', 'staff' ); * * @since 4.4 Do not check allowed tables, sanitize table name instead. * @since 6.0 Add $request_index_3 param. * * @uses SanitizeMarkDown() * * @param string $table Custom fields TABLE name. * @param string $request_index $_REQUEST var array values index. * @param string $request_index_2 $_REQUEST var array values index #2. * @param string $request_index_3 $_REQUEST var array values index #3. * * @return array $request_values with MarkDown filtered. */ function FilterCustomFieldsMarkdown( $table, $request_index, $request_index_2 = '', $request_index_3 = '' ) { // Please add your TABLE here. /*$allowed_tables = array( 'CUSTOM_FIELDS', 'ADDRESS_FIELDS', 'PEOPLE_FIELDS', 'STAFF_FIELDS', 'SCHOOL_FIELDS', );*/ if ( $request_index_2 === '' ) { $request_values = issetVal( $_REQUEST[ $request_index ] ); $post_values = issetVal( $_POST[ $request_index ] ); } elseif ( $request_index_3 === '' ) { $request_values = issetVal( $_REQUEST[ $request_index ][ $request_index_2 ] ); $post_values = issetVal( $_POST[ $request_index ][ $request_index_2 ] ); } else { $request_values = issetVal( $_REQUEST[ $request_index ][ $request_index_2 ][ $request_index_3 ] ); $post_values = issetVal( $_POST[ $request_index ][ $request_index_2 ][ $request_index_3 ] ); } if ( ! $table /*|| ! in_array( (string) $table, $allowed_tables )*/ ) { return $request_values; } // Sanitize table name: only alphanumeric & underscore characters. $table = preg_replace( "/[^a-zA-Z0-9_]+/", '', $table ); // FJ textarea fields MarkDown sanitize. $textarea_RET = DBGet( "SELECT ID FROM " . DBEscapeIdentifier( $table ) . " WHERE TYPE='textarea'" ); if ( ! $textarea_RET ) { return $request_values; } require_once 'ProgramFunctions/MarkDownHTML.fnc.php'; foreach ( (array) $textarea_RET as $textarea ) { $custom_index = 'CUSTOM_' . $textarea['ID']; if ( isset( $post_values[ $custom_index ] ) && ! empty( $post_values[ $custom_index ] ) ) { $request_values[ $custom_index ] = SanitizeMarkDown( $post_values[ $custom_index ] ); } } return $request_values; } /** * Check Required Custom Fields for empty values. * Use before inserting/updating Fields. * * @example $required_error = $required_error || CheckRequiredCustomFields( 'CUSTOM_FIELDS', $_REQUEST['students'] ); * * @param string $table Custom fields TABLE name. * @param string $request_values $_REQUEST var array of fields values. * * @return boolean true if one Required Custom field is empty, else false. */ function CheckRequiredCustomFields( $table, $request_values ) { // Please add your TABLE here. /*$allowed_tables = array( 'CUSTOM_FIELDS', 'ADDRESS_FIELDS', 'PEOPLE_FIELDS', 'STAFF_FIELDS', 'SCHOOL_FIELDS', );*/ if ( empty( $table ) ) { return false; } $required_RET = DBGet( "SELECT ID FROM " . DBEscapeIdentifier( $table ) . " WHERE REQUIRED='Y'" ); foreach ( (array) $required_RET as $required ) { if ( isset( $request_values['CUSTOM_' . $required['ID'] ] ) && empty( $request_values[ 'CUSTOM_' . $required['ID'] ] ) && $request_values[ 'CUSTOM_' . $required['ID'] ] !== '0' ) { return true; } } return false; }