between 2017 AND 2022 * "0,2017" --> all <= 2017 * "2017,0" --> all >= 2017 * * @param string $input Start and end value separated by comma * @param string $column database column * @return string * @since 9.0.0 */ public static function generate_between_clause ($input, $column) { // Return if there is nothing to do if ($input === '') { return; } $array = explode(",", $input); // we need an array length of two if ( count($array) != 2 ) { return; } $start = esc_sql( trim($array[0])); $end = esc_sql( trim($array[1])); $element = esc_sql( trim($column) ); if ( $start == '0' ) { return "$element <= '$end'"; } if ( $end == '0' ) { return "$element >= '$start'"; } return "$element BETWEEN '$start' AND '$end'"; } /** * Sets clause parts from the $parts[] array together to one clause string * * Example: * $where = array(); * $where[] = tp_db_helpers::where_clause_part('1,2,3', "u.id", "OR", "="); * $where[] = tp_db_helpers::where_clause_part('Max', "u.user", "OR", "="); * echo tp_db_helpers::compose_clause($where); * * @param array $parts An array of where parts. Each element should be generated by the where_clause_part() method * @param string $connector Can be used to change the logical connector between the clause parts. Default: AND * @para, string $clause_part The SQL code word for the part Default: WHERE. Optional: GROUP BY * @return string * @since 8.0.0 */ public static function compose_clause( $parts = array(), $connector = 'AND', $clause_part = 'WHERE' ) { // If there is nothing to do if ( empty( $parts ) ) { return ''; } // Set all parts together to one WHERE clause $where = ''; foreach ( $parts as $row ) { if ( empty( $row ) ) { continue; } $where = ( $where != '' ) ? $where . " $connector ( $row )" : " ( $row ) "; } if ( $where === '' ) { return; } return " $clause_part $where"; } /** * Prepares and adds meta data * @param int $id An user ID, publication ID or course ID * @param array $fields An associative array of field data (keys: variable, value) * @param array $post The $_POST array * @param string $table students, courses or publications * @since 5.0.0 */ public static function prepare_meta_data ($id, $fields, $post, $table) { foreach ($fields as $row) { if ( !isset( $post[$row['variable']] ) && !isset( $post[$row['variable'] . '_day'] ) ) { continue; } $column_info = TP_DB_Helpers::extract_column_data($row['value']); // For DATE fields if ( $column_info['type'] === 'DATE' ) { $day = intval( $post[$row['variable'] . '_day'] ); $day2 = ( $day < 10 ) ? '0' . $day : $day; $value = $post[$row['variable'] . '_year'] . '-' . $post[$row['variable'] . '_month'] . '-' . $day2; } // For CHECKBOX fields else if ( $column_info['type'] === 'CHECKBOX' ) { $max = count($post[$row['variable']]); $val = ''; for ( $i = 0; $i < $max; $i++ ) { $val = ( $val === '' ) ? '{' . $post[$row['variable']][$i] . '}' : $val . ',{' . $post[$row['variable']][$i] . '}'; } $value = $val; } // For all other fields else { $value = $post[$row['variable']]; } // Add to database if ( $table === 'students' ){ TP_Students::add_student_meta( $id, $row['variable'], htmlspecialchars($value) ); } else if ( $table === 'courses' ) { TP_Courses::add_course_meta($id, $row['variable'], $value); } else { TP_Publications::add_pub_meta($id, $row['variable'], $value); } } } /** * Register a new table column in teachpress * @param string $table * @param string $column * @param array $data * @since 5.0.0 */ public static function register_column ($table, $column, $data) { $value = 'name = {' . $column. '}, title = {' . $data['title'] . '}, type = {' . $data['type'] . '}, required = {' . $data['required'] . '}, min = {' . $data['min'] . '}, max = {' . $data['max'] . '}, step = {' . $data['step'] . '}, visibility = {' . $data['visibility'] . '}'; TP_Options::add_option($column, $value, $table); } /** * Returns the indexes of a given table * @param string $db_name * @return array * @since 7.0.0 */ public static function get_db_index ($db_name) { global $wpdb; return $wpdb->get_results("SHOW INDEX FROM " . $db_name, ARRAY_A); } /** * Validates qualifiers for order or limit clauses. Returns the default if the input contains not allowed chars * @param string $input * @param string $default * @return string * @since 9.0.8 */ public static function validate_qualifier ($input, $default = '') { if ( preg_match("#^[a-zA-Z0-9 \.,`_\]]+$#", $input) ) { return $input; } else { return $default; } } }