get_results( "SHOW COLUMNS FROM {$wpdb->prefix}easymail_subscribers" ); $existing = array(); foreach ( $fields as $field ) $existing[] = $field->Field; foreach( $alo_em_cf as $key => $value ) { // Create db column if missing if ( !in_array( $key, $existing ) ) { $wpdb->query("ALTER TABLE {$wpdb->prefix}easymail_subscribers ADD `".$key."` ". $value['sql_attr']); } // Create index if required if ( $value['sql_key'] && !$wpdb->get_row("SHOW INDEX FROM {$wpdb->prefix}easymail_subscribers WHERE Column_name = '".$key."';" ) ) { $wpdb->query("ALTER TABLE {$wpdb->prefix}easymail_subscribers ADD INDEX ( `".$key."` )"); } } // Get fields again, after previpus installation $fields = $wpdb->get_results( "SHOW COLUMNS FROM {$wpdb->prefix}easymail_subscribers" ); $existing = array(); foreach ( $fields as $field ) $existing[] = $field->Field; foreach( $alo_em_cf as $key => $value ) { // Create index if required if ( in_array( $key, $existing ) && $value['sql_key'] && !$wpdb->get_row("SHOW INDEX FROM {$wpdb->prefix}easymail_subscribers WHERE Column_name = '".$key."';" ) ) { $wpdb->query("ALTER TABLE {$wpdb->prefix}easymail_subscribers ADD INDEX ( `".$key."` )"); } } } } add_action( 'init', 'alo_em_install_custom_fields' ); /** * Prepare and return the custom field array built by filters * * @return arr|false */ function alo_easymail_get_custom_fields () { $fields = false; $fields = apply_filters ( 'alo_easymail_newsletter_set_custom_fields', $fields ); if ( !empty($fields) && is_array($fields) ) { foreach ( $fields as $key => $value ) { // Defaults for each field $defaults = array( 'humans_name' => $key, 'sql_attr' => "VARCHAR(100) DEFAULT NULL", 'sql_key' => false, 'input_type' => "text", 'input_options' => false, 'input_mandatory'=>false, 'input_validation'=> false, 'input_attr' => "" ); $fields[$key] = wp_parse_args( $value, $defaults ); } } else { $fields = false; } return $fields; } /** * Get the edit html of a custom field * * @param str the field key * @param arr the field array * @param str the name of html element * @param str the preset value * @param bol edit or view * @param str js when input is blured (or changed) * @return html */ function alo_easymail_custom_field_html ( $key, $field, $input_name="", $value="", $edit=false, $js_onblur="" ) { if ( empty($key) || empty($field) ) return ""; $field_id = empty($input_name) ? "alo_em_".$key : $input_name; $input = ""; if (isset($field['input_type']) ) { switch ( $field['input_type'] ) { case 'select': if ( $edit ) { $input .= "\n"; } else { $input .= isset($field['input_options'][$value]) ? esc_html($field['input_options'][$value]) : esc_html($value); } break; case 'checkbox': if ( $edit ) { $checked = $value == 1 ? "checked=\"checked\"" : ""; $input .= "\n"; } else { $input .= "\n"; } break; case 'textarea': if ( $edit ) { $input .= "\n"; } else { $input .= esc_html($value); } break; default: case 'text': if ( $edit ) { $input .= "\n"; } else { $input .= esc_html($value); } break; } } return $input; } /* EOF */