Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4042358
Temp commit
truongwp Dec 30, 2025
af5226a
Add forms list settings
truongwp Jan 13, 2026
76a715b
Move Pro columns to Pro
truongwp Jan 13, 2026
ade05d5
Fix JS error of forms list settings
truongwp Jan 28, 2026
24151a2
Completed the forms list settings
truongwp Feb 3, 2026
cc596c2
Improve styling of forms list settings
truongwp Feb 3, 2026
3be6c58
Show form description
truongwp Feb 3, 2026
807b3a0
Merge branch 'master' into redesigned-forms-table
truongwp Feb 4, 2026
53a9e94
Fix typo
truongwp Feb 6, 2026
555d8f2
Fix Rector
truongwp Feb 6, 2026
52a53b8
Fix eslint
truongwp Feb 6, 2026
f3cbfd0
Fix PHPCS
truongwp Feb 6, 2026
7e4c261
Fix PHP CS Fixer
truongwp Feb 6, 2026
184738d
Fix PHPCS
truongwp Feb 10, 2026
8a65f76
Update js/admin/forms-list.js
truongwp Feb 10, 2026
942927e
Update js/admin/forms-list.js
truongwp Feb 10, 2026
5b2df14
Move use strict to global scope
truongwp Feb 10, 2026
417981f
Fix Eslint
truongwp Feb 10, 2026
758a889
Move HTML to a view file
truongwp Feb 10, 2026
ecdf1ee
Temp commit
truongwp Mar 4, 2026
bac5bab
Improve the forms list dropdown
truongwp Mar 4, 2026
8f91df4
Fix show desc not work
truongwp Mar 4, 2026
45fa63a
Merge branch 'master' into redesigned-forms-table
Crabcyborg Mar 16, 2026
2844cc8
Run stylelint and eslint fixes
Crabcyborg Mar 16, 2026
b02b0ba
Merge branch 'master' into redesigned-forms-table
Crabcyborg Mar 16, 2026
d93cdf0
Use double quotes (consistency)
Crabcyborg Mar 16, 2026
9c8aee0
Make the forms list columns setting work with screen options disabled
truongwp Mar 17, 2026
8056141
Merge branch 'redesigned-forms-table' of github.com:Strategy11/formid…
truongwp Mar 17, 2026
52ba979
Make show form desc and forms per page work without Screen Options
truongwp Mar 17, 2026
201e4df
Fix DeepScan
truongwp Mar 17, 2026
ec543f2
Merge branch 'master' into redesigned-forms-table
truongwp Mar 18, 2026
5860232
Fix eslint and Psalm
truongwp Mar 18, 2026
1e37371
Escape the form desc
truongwp Mar 18, 2026
cc4e20e
Use FrmAppHelper::kses
truongwp Mar 18, 2026
4d90a89
Fix PHP CS Fixer
truongwp Mar 18, 2026
e998061
Use Frm settings icon instead of dashicon
truongwp Mar 23, 2026
ae3f4dc
Improve styling of columns setting dropdown
truongwp Mar 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions classes/controllers/FrmAppController.php
Original file line number Diff line number Diff line change
Expand Up @@ -730,9 +730,20 @@ public static function admin_js() {

wp_register_script( 'formidable_admin', $plugin_url . '/js/formidable_admin.js', self::get_admin_js_dependencies(), $version, true );

wp_register_script(
'formidable_forms_list',
$plugin_url . '/js/admin/forms-list.js',
array(
'formidable_dom',
),
$version,
true
);

if ( FrmAppHelper::on_form_listing_page() ) {
// For the existing page dropdown in the Form embed modal.
wp_enqueue_script( 'jquery-ui-autocomplete' );
wp_enqueue_script( 'formidable_forms_list' );
}

wp_register_script( 'bootstrap-multiselect', $plugin_url . '/js/bootstrap-multiselect.js', array( 'jquery', 'bootstrap_tooltip', 'popper' ), '2.0', true );
Expand Down
69 changes: 69 additions & 0 deletions classes/controllers/FrmFormsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ public static function maybe_load_listing_hooks() {
add_filter( 'manage_toplevel_page_formidable_sortable_columns', 'FrmFormsController::get_sortable_columns' );
}

/**
* Runs on admin head of the formidable forms page.
*
* @since x.x This adds screen options.
*
* @return void
*/
public static function head() {
if ( wp_is_mobile() ) {
wp_enqueue_script( 'jquery-touch-punch' );
Expand Down Expand Up @@ -1243,6 +1250,13 @@ public static function get_columns( $columns ) {

$columns['created_at'] = esc_html__( 'Date', 'formidable' );

if ( 'trash' !== FrmAppHelper::simple_get( 'form_type' ) ) {
$columns['settings'] = '<div class="frm-forms-list-settings-btn-wrapper"><a href="#" class="frm-forms-list-settings-btn">';
$columns['settings'] .= FrmAppHelper::icon_by_class( 'frmfont frm_settings_icon', array( 'echo' => false ) );
$columns['settings'] .= ( '<span class="screen-reader-text">' . esc_html__( 'List settings', 'formidable' ) . '</span>' );
$columns['settings'] .= '</a></div>';
}

add_screen_option(
'per_page',
array(
Expand Down Expand Up @@ -1301,6 +1315,9 @@ public static function hidden_columns( $hidden_columns ) {
* @return mixed
*/
public static function save_per_page( $save, $option, $value ) {
// phpcs:ignore WordPress.Security.NonceVerification.Missing
update_user_option( get_current_user_id(), 'frm_forms_show_desc', ! empty( $_POST['frm_forms_show_desc'] ) );

if ( $option === 'formidable_page_formidable_per_page' ) {
return (int) $value;
}
Expand Down Expand Up @@ -3694,6 +3711,58 @@ function () {
);
}

/**
* Prints necessary templates for the forms list page.
*
* @since x.x
*
* @return void
*/
public static function print_forms_list_templates() {
if ( ! FrmAppHelper::on_form_listing_page() ) {
return;
}

$screen = get_current_screen();

if ( ! $screen ) {
return;
}

$columns = get_column_headers( $screen );
$hidden = get_hidden_columns( $screen );
$skip_cols = array( 'cb', 'name', 'settings' );
$per_page = get_user_option( 'formidable_page_formidable_per_page' );
$show_screen_options = $screen->show_screen_options();

if ( $per_page < 1 ) {
$per_page = 20;
}

include FrmAppHelper::plugin_path() . '/classes/views/frm-forms/forms-list-settings.php';
}

/**
* Adds custom screen options.
*
* @since x.x
*
* @param string $settings_html Settings HTML.
*
* @return string
*/
public static function add_screen_options( $settings_html ) {
if ( ! FrmAppHelper::on_form_listing_page() ) {
return $settings_html;
}

$show_desc = get_user_option( 'frm_forms_show_desc' );
return $settings_html . '<p>
<label for="frm-forms-show-desc">' . esc_html__( 'Show form description', 'formidable' ) . '</label>
<input type="checkbox" name="frm_forms_show_desc" id="frm-forms-show-desc" value="1" ' . checked( $show_desc, '1', false ) . ' />
</p>';
}

/**
* @deprecated 4.0
*
Expand Down
2 changes: 2 additions & 0 deletions classes/controllers/FrmHooksController.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,9 @@ public static function load_admin_hooks() {
add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields' );

add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 );
add_filter( 'screen_settings', 'FrmFormsController::add_screen_options' );
add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' );
add_action( 'admin_footer', 'FrmFormsController::print_forms_list_templates' );

// Elementor.
add_action( 'elementor/editor/footer', 'FrmElementorController::admin_init' );
Expand Down
30 changes: 26 additions & 4 deletions classes/helpers/FrmFormsListHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,15 @@ public function single_row( $item, $style = '' ) {
$class .= ' column-primary';
}

$class = 'class="' . esc_attr( $class ) . '"';
$data_colname = ' data-colname="' . esc_attr( $column_display_name ) . '"';
$attributes = $class . $style . $data_colname;
$class = 'class="' . esc_attr( $class ) . '"';

if ( 'settings' === $column_name ) {
$data_colname = ' data-colname="' . esc_attr( trim( strip_tags( $column_display_name ) ) ) . '"';
} else {
$data_colname = ' data-colname="' . esc_attr( $column_display_name ) . '"';
}

$attributes = $class . $style . $data_colname;

switch ( $column_name ) {
case 'cb':
Expand All @@ -299,7 +305,12 @@ public function single_row( $item, $style = '' ) {
$val = $item->{$column_name};
break;
case 'name':
$val = $this->get_form_name( $item, $actions, $edit_link, $mode );
$val = $this->get_form_name( $item, $actions, $edit_link, $mode );

if ( get_user_option( 'frm_forms_show_desc' ) && ! empty( $item->description ) ) {
$val .= '<p class="frm_form_desc">' . nl2br( FrmAppHelper::kses( $item->description ) ) . '</p>';
}

$val .= $action_links;
break;
case 'created_at':
Expand Down Expand Up @@ -411,6 +422,17 @@ protected function column_views( $form ) {
// phpcs:enable Generic.WhiteSpace.ScopeIndent
}

/**
* Get the HTML for the Settings column in the form list.
*
* @since x.x
*
* @return string
*/
protected function column_settings() {
return '&nbsp;';
}

/**
* @param array $actions
* @param object $item
Expand Down
102 changes: 102 additions & 0 deletions classes/views/frm-forms/forms-list-settings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?php
/**
* Template for the forms list settings
*
* @since x.x
*
* @package Formidable
*
* @var int $per_page
* @var array $columns
* @var array $hidden
* @var array $skip_cols
* @var bool $show_screen_options
* @var WP_Screen $screen
*/

if ( ! defined( 'ABSPATH' ) ) {
die( 'You are not allowed to call this page directly.' );
}
?>
<div id="frm-forms-list-settings" class="frm_hidden frm-p-2xs">
<div class="frm-collapsible-box">
<a href="#" class="frm-collapsible-box__btn">
<?php
esc_html_e( 'Columns', 'formidable' );
FrmAppHelper::icon_by_class( 'frmfont frm_arrowup6_icon' );
?>
</a>

<?php
$attrs = array(
'class' => 'frm-collapsible-box__content',
);

if ( ! $show_screen_options ) {
$attrs['id'] = 'adv-settings';
wp_nonce_field( 'screen-options-nonce', 'screenoptionnonce', false );
}
?>
<div <?php FrmAppHelper::array_to_html_params( $attrs, true ); ?>>
<div class="frm-forms-list-column-checkboxes">
<?php
foreach ( $columns as $key => $label ) {
if ( in_array( $key, $skip_cols, true ) ) {
continue;
}

$is_hidden = in_array( $key, $hidden, true );
?>
<label>
<input
type="checkbox"
class="hide-column-tog"
value="<?php echo esc_attr( $key ); ?>"
data-wp-column-input-id="<?php echo esc_attr( $key ); ?>-hide"
<?php checked( ! $is_hidden ); ?>
/>
<?php echo esc_html( $label ); ?>
</label>
<?php
}//end foreach
?>
</div>
</div>
</div>

<hr />

<div class="frm-flex frm-items-center frm-justify-between frm-mb-sm frm-pt-2xs">
<label for="frm-forms-list-show-desc"><?php esc_html_e( 'Form description', 'formidable' ); ?></label>
<?php
FrmHtmlHelper::toggle(
'frm-forms-list-show-desc',
'frm_forms_show_desc',
array(
'echo' => true,
'checked' => intval( get_user_option( 'frm_forms_show_desc' ) ) === 1,
'input_html' => array(
'data-wp-screen-option-id' => 'frm-forms-show-desc',
),
)
);
?>
</div>

<div class="frm-flex frm-items-center frm-justify-between frm-mb-sm">
<label for="frm-forms-list-per-page"><?php esc_html_e( 'Items per page', 'formidable' ); ?></label>
<input
type="number"
id="frm-forms-list-per-page"
value="<?php echo intval( $per_page ); ?>"
min="1"
data-wp-screen-option-id="formidable_page_formidable_per_page"
/>
</div>

<hr />

<div style="text-align: right;" class="frm-pt-2xs frm-pb-xs">
<button type="button" class="frm-button-primary button-primary" id="frm-save-forms-list-settings-btn"><?php esc_html_e( 'Apply', 'formidable' ); ?></button>
</div>
</div>
2 changes: 1 addition & 1 deletion css/frm_admin.css

Large diffs are not rendered by default.

Loading
Loading