'field',
'plural' => 'fields',
'ajax' => false,
) );
$this->field_types = accua_forms_fields_get_types();
}
function get_columns() {
return array(
'cb' => '',
'name' => __( 'Label', 'contact-forms' ),
'slug' => __( 'Slug', 'contact-forms' ),
'type' => __( 'Type', 'contact-forms' ),
'forms' => __( 'Forms', 'contact-forms' ),
'description' => __( 'Description', 'contact-forms' ),
);
}
function get_sortable_columns() {
return array(
'name' => array( 'name', false ),
'slug' => array( 'slug', false ),
'type' => array( 'type', false ),
'forms' => array( 'forms', false ),
);
}
function get_bulk_actions() {
return array(
'delete' => __( 'Delete', 'contact-forms' ),
);
}
function column_cb( $item ) {
return sprintf(
'',
esc_attr( $item['slug'] )
);
}
function column_default( $item, $column_name ) {
if ( isset( $item[ $column_name ] ) ) {
return esc_html( $item[ $column_name ] );
}
return '';
}
function column_name( $item ) {
$edit_url = admin_url( 'admin.php?page=accua_forms_fields&edit-fid=' . urlencode( $item['slug'] ) );
$delete_url = wp_nonce_url(
admin_url( 'admin.php?page=accua_forms_fields&delete-fid=' . urlencode( $item['slug'] ) ),
'delete_form_field_' . $item['slug']
);
$actions = array(
'edit' => sprintf(
'%s',
esc_url( $edit_url ),
esc_html__( 'Edit', 'contact-forms' )
),
'delete' => sprintf(
'%s',
esc_url( $delete_url ),
esc_js( __( 'Are you sure you want to delete this field?', 'contact-forms' ) ),
esc_html__( 'Delete', 'contact-forms' )
),
);
return sprintf(
'%s%s',
esc_url( $edit_url ),
esc_html( $item['name'] ),
$this->row_actions( $actions )
);
}
function column_type( $item ) {
$type_key = $item['type'];
if ( isset( $this->field_types[ $type_key ] ) ) {
return esc_html( $this->field_types[ $type_key ] );
}
return esc_html( $type_key );
}
function column_forms( $item ) {
$count = $item['forms'];
if ( $count > 0 ) {
return '' . (int) $count . '';
}
return '0';
}
function prepare_items() {
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array( $columns, $hidden, $sortable );
$avail_fields = get_option( 'accua_forms_avail_fields', array() );
$saved_forms = get_option( 'accua_forms_saved_forms', array() );
// Count how many forms use each field
$field_usage = array();
foreach ( $saved_forms as $form ) {
if ( ! empty( $form['fields'] ) && is_array( $form['fields'] ) ) {
foreach ( array_keys( $form['fields'] ) as $field_slug ) {
if ( ! isset( $field_usage[ $field_slug ] ) ) {
$field_usage[ $field_slug ] = 0;
}
$field_usage[ $field_slug ]++;
}
}
}
$data = array();
foreach ( $avail_fields as $id => $field ) {
$data[] = array(
'slug' => $id,
'name' => $field['name'] ?? $field['label'] ?? $id,
'type' => $field['type'] ?? '',
'forms' => $field_usage[ $id ] ?? 0,
'description' => $field['description'] ?? '',
);
}
// Sorting
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only sort parameter
$orderby = isset( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : 'slug';
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only sort parameter
$order = isset( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : 'asc';
$valid_columns = array( 'name', 'slug', 'type', 'forms' );
if ( ! in_array( $orderby, $valid_columns, true ) ) {
$orderby = 'slug';
}
$order_asc = ( 'desc' !== strtolower( $order ) );
usort( $data, function ( $a, $b ) use ( $orderby, $order_asc ) {
if ( $orderby === 'forms' ) {
$result = $a['forms'] - $b['forms'];
} else {
$result = strcasecmp( $a[ $orderby ], $b[ $orderby ] );
}
return $order_asc ? $result : -$result;
} );
$this->items = $data;
}
protected function get_default_primary_column_name() {
return 'name';
}
}