# contact-forms/2.2.32/admin/class-fields-list-table.php

Contact Forms by Cimatti, version 2.2.32. 166 lines.

- Page: https://pluginprobe.com/plugins/contact-forms/2.2.32/code/admin/class-fields-list-table.php
- Raw: https://pluginprobe.com/plugins/contact-forms/2.2.32/raw/admin/class-fields-list-table.php
- Modified: 2026-07-13T10:04:36+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/contact-forms/2.2.32/code/admin/class-fields-list-table.php#L10-L20`.

```php
<?php
if ( ! defined( 'ABSPATH' ) ) exit;

if ( ! class_exists( 'WP_List_Table' ) ) {
	require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}

class Accua_Forms_Fields_List_Table extends WP_List_Table {

	private $field_types = array();

	function __construct() {
		parent::__construct( array(
			'singular' => 'field',
			'plural'   => 'fields',
			'ajax'     => false,
		) );
		$this->field_types = accua_forms_fields_get_types();
	}

	function get_columns() {
		return array(
			'cb'          => '<input type="checkbox" />',
			'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(
			'<input type="checkbox" name="fields[]" value="%s" />',
			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(
				'<a href="%s">%s</a>',
				esc_url( $edit_url ),
				esc_html__( 'Edit', 'contact-forms' )
			),
			'delete' => sprintf(
				'<a href="%s" class="delete-tag" onclick="return confirm(\'%s\');">%s</a>',
				esc_url( $delete_url ),
				esc_js( __( 'Are you sure you want to delete this field?', 'contact-forms' ) ),
				esc_html__( 'Delete', 'contact-forms' )
			),
		);
		return sprintf(
			'<strong><a class="row-title" href="%s">%s</a></strong>%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 '<span>' . (int) $count . '</span>';
		}
		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';
	}
}

```
