Plugin Directory


Ignore:
Timestamp:
10/14/2026 04:54:36 PM (2 weeks ago)
Author:
formidableforms
Message:

Update to version 7.0 from GitHub

File:
1 edited

Legend:

Unmodified
Added
Removed
  • formidable/trunk/classes/models/FrmEntryMeta.php

    r3688662 r3746820  
    55
    66class FrmEntryMeta {
     7
     8        /**
     9         * Whether every entry meta write exposes the synchronization hooks.
     10         *
     11         * @since 7.0
     12         *
     13         * @return bool
     14         */
     15        public static function supports_entry_meta_change_hooks() {
     16                return true;
     17        }
     18
     19        /**
     20         * Notify integrations before changing entry metadata.
     21         *
     22         * @since 7.0
     23         *
     24         * @param int $entry_id Entry ID.
     25         * @param int $field_id Field ID.
     26         *
     27         * @return void
     28         */
     29        private static function before_meta_change( $entry_id, $field_id ) {
     30                do_action( 'frm_before_entry_meta_change', $entry_id, $field_id );
     31        }
    732
    833        /**
    … …  
    3459
    3560                self::set_value_before_save( $new_values, $field );
    36                 $new_values    = apply_filters( 'frm_add_entry_meta', $new_values );
     61                $new_values = apply_filters( 'frm_add_entry_meta', $new_values );
     62                $entry_id   = $new_values['item_id'];
     63                $field_id   = $new_values['field_id'];
     64                self::before_meta_change( $entry_id, $field_id );
    3765                $query_results = $wpdb->insert( $wpdb->prefix . 'frm_item_metas', $new_values );
    3866
    3967                if ( $query_results ) {
     68                        $meta_id = $wpdb->insert_id;
    4069                        self::clear_cache();
    4170                        wp_cache_delete( $entry_id, 'frm_entry' );
    42                         return $wpdb->insert_id;
    43                 }
    44 
     71                        /**
     72                         * Fires after an entry meta value is inserted, updated, or deleted.
     73                         *
     74                         * @since 7.0
     75                         *
     76                         * @param int $entry_id Entry ID.
     77                         * @param int $field_id Field ID.
     78                         */
     79                        do_action( 'frm_after_entry_meta_change', $entry_id, $field_id );
     80                        return $meta_id;
     81                }
     82
     83                do_action( 'frm_entry_meta_write_failed', $entry_id, $field_id );
    4584                return 0;
    4685        }
    … …  
    83122                self::clear_cache();
    84123
    85                 return $wpdb->update( $wpdb->prefix . 'frm_item_metas', array( 'meta_value' => $meta_value ), $where_values );
     124                self::before_meta_change( $entry_id, $field_id );
     125                $result = $wpdb->update( $wpdb->prefix . 'frm_item_metas', array( 'meta_value' => $meta_value ), $where_values );
     126
     127                if ( false === $result ) {
     128                        do_action( 'frm_entry_meta_write_failed', $entry_id, $field_id );
     129                } else {
     130                        do_action( 'frm_after_entry_meta_change', $entry_id, $field_id );
     131                }
     132
     133                return $result;
    86134        }
    87135
    … …  
    200248                FrmDb::get_where_clause_and_values( $where );
    201249
     250                foreach ( $field_ids_to_remove as $field_id ) {
     251                        self::before_meta_change( $entry_id, $field_id );
     252                }
     253
    202254                // Delete any leftovers
    203255                $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'frm_item_metas ' . $where['where'], $where['values'] ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, SlevomatCodingStandard.Files.LineLength.LineTooLong
    204256                self::clear_cache();
     257
     258                foreach ( $field_ids_to_remove as $field_id ) {
     259                        do_action( 'frm_after_entry_meta_change', $entry_id, $field_id );
     260                }
    205261        }
    206262
    … …  
    240296                self::clear_cache();
    241297
    242                 return $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}frm_item_metas WHERE field_id=%d AND item_id=%d", $field_id, $entry_id ) );
     298                self::before_meta_change( $entry_id, $field_id );
     299                $result = $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE field_id = %d AND item_id = %d', $wpdb->prefix . 'frm_item_metas', $field_id, $entry_id ) );
     300
     301                if ( false === $result ) {
     302                        do_action( 'frm_entry_meta_write_failed', $entry_id, $field_id );
     303                } else {
     304                        do_action( 'frm_after_entry_meta_change', $entry_id, $field_id );
     305                }
     306
     307                return $result;
    243308        }
    244309
    … …  
    501566
    502567        /**
     568         * Get the entry status to query when a numeric is_draft value is requested.
     569         *
     570         * @since 7.0
     571         *
     572         * @param int|string $is_draft
     573         *
     574         * @return int
     575         */
     576        private static function get_numeric_draft_status( $is_draft ) {
     577                $is_draft = absint( $is_draft );
     578
     579                if ( FrmSpamEntriesHelper::SPAM_ENTRY_STATUS === $is_draft || class_exists( 'FrmAbandonmentHooksController', false ) ) {
     580                        return $is_draft;
     581                }
     582
     583                return FrmEntriesHelper::DRAFT_ENTRY_STATUS;
     584        }
     585
     586        /**
    503587         * @param array|string $where
    504588         * @param string       $order_by
    … …  
    544628                                $where['e.is_draft'] = 0;
    545629                        } elseif ( is_numeric( $args['is_draft'] ) ) {
    546                                 $where['e.is_draft'] = class_exists( 'FrmAbandonmentHooksController', false ) ? absint( $args['is_draft'] ) : 1;
    547                         } elseif ( 'both' === $args['is_draft'] && class_exists( 'FrmAbandonmentHooksController', false ) ) {
    548                                 $where['e.is_draft'] = array( 0, 1 );
     630                                $where['e.is_draft'] = self::get_numeric_draft_status( $args['is_draft'] );
     631                        } elseif ( 'both' === $args['is_draft'] ) {
     632                                // Submitted and draft entries. Spam is left out.
     633                                $where['e.is_draft'] = array( (string) FrmEntriesHelper::SUBMITTED_ENTRY_STATUS, (string) FrmEntriesHelper::DRAFT_ENTRY_STATUS );
    549634                        } elseif ( str_contains( $args['is_draft'], ',' ) ) {
    550635                                $is_draft = array_reduce(
    … …  
    582667                if ( ! $args['is_draft'] ) {
    583668                        $draft_where = $wpdb->prepare( ' AND e.is_draft=%d', 0 );
    584                 } elseif ( $args['is_draft'] == 1 ) { // phpcs:ignore Universal.Operators.StrictComparisons
    585                         $draft_where = $wpdb->prepare( ' AND e.is_draft=%d', 1 );
     669                } elseif ( is_numeric( $args['is_draft'] ) ) {
     670                        $draft_where = $wpdb->prepare( ' AND e.is_draft=%d', self::get_numeric_draft_status( $args['is_draft'] ) );
     671                } elseif ( 'both' === $args['is_draft'] ) {
     672                        $draft_where = $wpdb->prepare( ' AND e.is_draft IN (%d, %d)', FrmEntriesHelper::SUBMITTED_ENTRY_STATUS, FrmEntriesHelper::DRAFT_ENTRY_STATUS );
     673                } elseif ( 'all' !== $args['is_draft'] ) {
     674                        $draft_where = $wpdb->prepare( ' AND ( e.is_draft!=%d OR e.is_draft IS NULL )', FrmSpamEntriesHelper::SPAM_ENTRY_STATUS );
    586675                }
    587676
Note: See TracChangeset for help on using the changeset viewer.