diff --git a/classes/controllers/FrmAddonsController.php b/classes/controllers/FrmAddonsController.php index 6956970b57..0493fd7cd0 100644 --- a/classes/controllers/FrmAddonsController.php +++ b/classes/controllers/FrmAddonsController.php @@ -984,11 +984,7 @@ protected static function uninstall_plugin( $plugin ) { self::deactivate_plugin( $plugin, true ); $result = delete_plugins( array( $plugin ) ); - if ( is_wp_error( $result ) ) { - return $result; - } - - return true; + return is_wp_error( $result ) ? $result : true; } /** @@ -1267,11 +1263,7 @@ private static function get_activating_page() { return 'settings'; } - if ( str_contains( $referer, 'frm_action=edit' ) ) { - return 'form_builder'; - } - - return ''; + return str_contains( $referer, 'frm_action=edit' ) ? 'form_builder' : ''; } /** diff --git a/classes/controllers/FrmDashboardController.php b/classes/controllers/FrmDashboardController.php index dacab13dea..8ae2c713f2 100644 --- a/classes/controllers/FrmDashboardController.php +++ b/classes/controllers/FrmDashboardController.php @@ -526,11 +526,7 @@ private static function get_dashboard_options( $option_name = null ) { return array(); } - if ( null !== $option_name ) { - return $options[ $option_name ]; - } - - return $options; + return null !== $option_name ? $options[ $option_name ] : $options; } /** diff --git a/classes/controllers/FrmDeactivationFeedbackController.php b/classes/controllers/FrmDeactivationFeedbackController.php index d87b94a07c..6df591e6e7 100644 --- a/classes/controllers/FrmDeactivationFeedbackController.php +++ b/classes/controllers/FrmDeactivationFeedbackController.php @@ -39,11 +39,7 @@ private static function feedback_is_expired() { $expired_date = strtotime( $feedback_expired ); - if ( ! $expired_date ) { - return true; - } - - return $expired_date < time(); + return $expired_date ? $expired_date < time() : true; } /** diff --git a/classes/controllers/FrmFieldsController.php b/classes/controllers/FrmFieldsController.php index bd78bf3d37..2b7938090d 100644 --- a/classes/controllers/FrmFieldsController.php +++ b/classes/controllers/FrmFieldsController.php @@ -936,11 +936,7 @@ public static function pull_custom_error_body_from_custom_html( $form, $field, $ '', ); - if ( in_array( $error_body, $default_html, true ) ) { - return false; - } - - return $error_body; + return in_array( $error_body, $default_html, true ) ? false : $error_body; } /** diff --git a/classes/controllers/FrmFormActionsController.php b/classes/controllers/FrmFormActionsController.php index 2378f86c77..0f88f5cfbe 100644 --- a/classes/controllers/FrmFormActionsController.php +++ b/classes/controllers/FrmFormActionsController.php @@ -801,10 +801,7 @@ public static function limit_by_type( $where ) { * @return bool|null */ public static function prevent_wpml_translations( $null, $post_type ) { - if ( self::$action_post_type === $post_type ) { - return false; - } - return $null; + return self::$action_post_type === $post_type ? false : $null; } } diff --git a/classes/controllers/FrmXMLController.php b/classes/controllers/FrmXMLController.php index 3c02700f16..8b25cd3f85 100644 --- a/classes/controllers/FrmXMLController.php +++ b/classes/controllers/FrmXMLController.php @@ -143,12 +143,7 @@ private static function validate_xml_url( $url ) { */ private static function get_posted_form() { $form = FrmAppHelper::get_param( 'form', '', 'post', 'wp_unslash' ); - - if ( ! $form ) { - return $form; - } - - return json_decode( $form, true ); + return $form ? json_decode( $form, true ) : $form; } /** diff --git a/classes/helpers/FrmAppHelper.php b/classes/helpers/FrmAppHelper.php index f6eda592c6..e0cdedf5ea 100644 --- a/classes/helpers/FrmAppHelper.php +++ b/classes/helpers/FrmAppHelper.php @@ -203,11 +203,7 @@ private static function pull_medium_from_link( $link ) { $query_args = wp_parse_args( $parsed['query'] ); - if ( empty( $query_args['utm_medium'] ) ) { - return ''; - } - - return $query_args['utm_medium']; + return empty( $query_args['utm_medium'] ) ? '' : $query_args['utm_medium']; } /** @@ -2282,11 +2278,7 @@ public static function current_user_can( $role ) { $role = 'administrator'; } - if ( ! is_user_logged_in() ) { - return false; - } - - return current_user_can( $role ); + return is_user_logged_in() ? current_user_can( $role ) : false; } /** @@ -5004,11 +4996,7 @@ public static function is_valid_utf8( $string ) { } // As of WP 6.9, seems_utf8 is deprecated. - if ( function_exists( 'seems_utf8' ) ) { - return seems_utf8( $string ); - } - - return false; + return function_exists( 'seems_utf8' ) ? seems_utf8( $string ) : false; } /** diff --git a/classes/helpers/FrmCSVExportHelper.php b/classes/helpers/FrmCSVExportHelper.php index 548fec8a6c..92c0cccd1e 100644 --- a/classes/helpers/FrmCSVExportHelper.php +++ b/classes/helpers/FrmCSVExportHelper.php @@ -482,11 +482,7 @@ private static function is_the_child_of_a_repeater( $field ) { $section_id = $field->field_options['in_section']; $section = FrmField::getOne( $section_id ); - if ( ! $section ) { - return false; - } - - return FrmField::is_repeating_field( $section ); + return $section && FrmField::is_repeating_field( $section ); } /** diff --git a/classes/helpers/FrmEmailSummaryHelper.php b/classes/helpers/FrmEmailSummaryHelper.php index b3e4b26ffb..5a6b3faeae 100644 --- a/classes/helpers/FrmEmailSummaryHelper.php +++ b/classes/helpers/FrmEmailSummaryHelper.php @@ -212,11 +212,7 @@ private static function get_renewal_date() { * @return DateTime|false */ private static function get_date_obj( $date ) { - if ( $date instanceof DateTime ) { - return $date; - } - - return date_create( $date ); + return $date instanceof DateTime ? $date : date_create( $date ); } /** @@ -236,11 +232,7 @@ private static function get_date_diff( $date1, $date2 ) { $date2 = self::get_date_obj( $date2 ); - if ( ! $date2 ) { - return false; - } - - return date_diff( $date1, $date2 )->days; + return $date2 ? date_diff( $date1, $date2 )->days : false; } /** diff --git a/classes/helpers/FrmFieldGdprHelper.php b/classes/helpers/FrmFieldGdprHelper.php index 1dbd8adadb..233eb34bec 100644 --- a/classes/helpers/FrmFieldGdprHelper.php +++ b/classes/helpers/FrmFieldGdprHelper.php @@ -73,9 +73,6 @@ public static function add_gdpr_field( $fields ) { * @return string */ public static function get_gdpr_field_class( $field_type = '' ) { - if ( self::FIELD_TYPE === $field_type ) { - return self::FIELD_CLASS; - } - return ''; + return self::FIELD_TYPE === $field_type ? self::FIELD_CLASS : ''; } } diff --git a/classes/helpers/FrmFormsHelper.php b/classes/helpers/FrmFormsHelper.php index 9860eb0bba..dd2ab48483 100644 --- a/classes/helpers/FrmFormsHelper.php +++ b/classes/helpers/FrmFormsHelper.php @@ -999,11 +999,7 @@ public static function get_form_style_class( $form = false ) { $class = ' with_frm_style'; if ( ! $style ) { - if ( FrmAppHelper::is_admin_page( 'formidable-entries' ) ) { - return $class; - } - - return null; + return FrmAppHelper::is_admin_page( 'formidable-entries' ) ? $class : null; } // If submit button needs to be inline or centered. diff --git a/classes/helpers/FrmStylesHelper.php b/classes/helpers/FrmStylesHelper.php index e50046efb7..d411e7113f 100644 --- a/classes/helpers/FrmStylesHelper.php +++ b/classes/helpers/FrmStylesHelper.php @@ -1153,10 +1153,6 @@ public static function get_bottom_value( $value ) { $parts = explode( ' ', $value ); - if ( count( $parts ) < 3 ) { - return $parts[0]; - } - - return $parts[2]; + return count( $parts ) < 3 ? $parts[0] : $parts[2]; } } diff --git a/classes/models/FrmCreateFile.php b/classes/models/FrmCreateFile.php index d0a861e83a..2dab91f4d1 100644 --- a/classes/models/FrmCreateFile.php +++ b/classes/models/FrmCreateFile.php @@ -141,10 +141,7 @@ public function combine_files( $file_names ) { * @return string */ public function get_file_contents() { - if ( $this->has_permission ) { - return $this->get_contents(); - } - return ''; + return $this->has_permission ? $this->get_contents() : ''; } /** diff --git a/classes/models/FrmInbox.php b/classes/models/FrmInbox.php index a1f2fdb5bf..50f21b9815 100644 --- a/classes/models/FrmInbox.php +++ b/classes/models/FrmInbox.php @@ -229,11 +229,7 @@ private function within_valid_timeframe( $message ) { * @return bool */ private function has_started( $message ) { - if ( empty( $message['starts'] ) ) { - return true; - } - - return $message['starts'] <= time(); + return empty( $message['starts'] ) ? true : $message['starts'] <= time(); } /** diff --git a/classes/models/FrmMigrate.php b/classes/models/FrmMigrate.php index df718be04c..554ce68d50 100644 --- a/classes/models/FrmMigrate.php +++ b/classes/models/FrmMigrate.php @@ -166,12 +166,7 @@ private function check_that_tables_exist() { */ public function collation() { global $wpdb; - - if ( ! $wpdb->has_cap( 'collation' ) ) { - return ''; - } - - return $wpdb->get_charset_collate(); + return $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : ''; } /** diff --git a/classes/models/FrmSpamCheck.php b/classes/models/FrmSpamCheck.php index 3c3967a1d4..5a86677cf9 100644 --- a/classes/models/FrmSpamCheck.php +++ b/classes/models/FrmSpamCheck.php @@ -39,11 +39,7 @@ public function is_spam() { $is_spam = $this->check(); - if ( ! $is_spam ) { - return false; - } - - return $this->get_spam_message(); + return $is_spam ? $this->get_spam_message() : false; } /** diff --git a/classes/models/FrmSpamCheckDenylist.php b/classes/models/FrmSpamCheckDenylist.php index bbff43551a..38a4307ed9 100644 --- a/classes/models/FrmSpamCheckDenylist.php +++ b/classes/models/FrmSpamCheckDenylist.php @@ -156,11 +156,7 @@ protected function get_denylist_ips() { * @return bool */ public function check() { - if ( $this->check_ip() ) { - return true; - } - - return $this->check_values(); + return $this->check_ip() ? true : $this->check_values(); } /** diff --git a/classes/models/fields/FrmFieldType.php b/classes/models/fields/FrmFieldType.php index 1cc0934615..26f4ece1c7 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -120,10 +120,7 @@ public function __construct( $field = 0, $type = '' ) { * @return string */ public function __get( $key ) { - if ( property_exists( $this, $key ) ) { - return $this->{$key}; - } - return ''; + return property_exists( $this, $key ) ? $this->{$key} : ''; } /** diff --git a/classes/views/styles/components/FrmSliderStyleComponent.php b/classes/views/styles/components/FrmSliderStyleComponent.php index 90512482ce..545d0a452c 100644 --- a/classes/views/styles/components/FrmSliderStyleComponent.php +++ b/classes/views/styles/components/FrmSliderStyleComponent.php @@ -161,11 +161,7 @@ private function detect_unit_measurement( $value = null ) { return 'em'; } - if ( preg_match( '/px$/', $value ) ) { - return 'px'; - } - - return ''; + return preg_match( '/px$/', $value ) ? 'px' : ''; } /** diff --git a/phpcs-sniffs/Formidable/Sniffs/CodeAnalysis/SimplifyIfReturnSniff.php b/phpcs-sniffs/Formidable/Sniffs/CodeAnalysis/SimplifyIfReturnSniff.php new file mode 100644 index 0000000000..e79a0918f2 --- /dev/null +++ b/phpcs-sniffs/Formidable/Sniffs/CodeAnalysis/SimplifyIfReturnSniff.php @@ -0,0 +1,258 @@ +getTokens(); + + // Make sure this if has a scope (curly braces). + if ( ! isset( $tokens[ $stackPtr ]['scope_opener'] ) || ! isset( $tokens[ $stackPtr ]['scope_closer'] ) ) { + return; + } + + $scopeOpener = $tokens[ $stackPtr ]['scope_opener']; + $scopeCloser = $tokens[ $stackPtr ]['scope_closer']; + + // Check if the if block contains only a single return statement. + $firstStatement = $phpcsFile->findNext( T_WHITESPACE, $scopeOpener + 1, $scopeCloser, true ); + + if ( false === $firstStatement || $tokens[ $firstStatement ]['code'] !== T_RETURN ) { + return; + } + + // Find the semicolon ending the return inside the if. + $returnEnd = $phpcsFile->findNext( T_SEMICOLON, $firstStatement + 1, $scopeCloser ); + + if ( false === $returnEnd ) { + return; + } + + // Check there's nothing else in the if block after the return. + $afterReturn = $phpcsFile->findNext( T_WHITESPACE, $returnEnd + 1, $scopeCloser, true ); + + if ( false !== $afterReturn ) { + return; + } + + // Now check what comes after the if block. + $afterIf = $phpcsFile->findNext( T_WHITESPACE, $scopeCloser + 1, null, true ); + + if ( false === $afterIf ) { + return; + } + + // Check for else/elseif - skip these. + if ( in_array( $tokens[ $afterIf ]['code'], array( T_ELSE, T_ELSEIF ), true ) ) { + return; + } + + // Must be followed by a return statement. + if ( $tokens[ $afterIf ]['code'] !== T_RETURN ) { + return; + } + + // Find the semicolon ending this return. + $secondReturnEnd = $phpcsFile->findNext( T_SEMICOLON, $afterIf + 1 ); + + if ( false === $secondReturnEnd ) { + return; + } + + // Check if the return values are simple. + if ( ! $this->isSimpleReturn( $phpcsFile, $firstStatement, $returnEnd ) ) { + return; + } + + if ( ! $this->isSimpleReturn( $phpcsFile, $afterIf, $secondReturnEnd ) ) { + return; + } + + // Check if the condition is simple (no && or ||). + if ( ! $this->isSimpleCondition( $phpcsFile, $stackPtr ) ) { + return; + } + + // Get the condition and return values to check line length. + $conditionStart = $phpcsFile->findNext( T_OPEN_PARENTHESIS, $stackPtr + 1 ); + $conditionEnd = $tokens[ $conditionStart ]['parenthesis_closer']; + $condition = trim( $phpcsFile->getTokensAsString( $conditionStart + 1, $conditionEnd - $conditionStart - 1 ) ); + + $firstReturnValue = trim( $phpcsFile->getTokensAsString( $firstStatement + 1, $returnEnd - $firstStatement - 1 ) ); + $secondReturnValue = trim( $phpcsFile->getTokensAsString( $afterIf + 1, $secondReturnEnd - $afterIf - 1 ) ); + + // Check if condition starts with ! and flip if so. + $isNegated = false; + $firstNonWs = $phpcsFile->findNext( T_WHITESPACE, $conditionStart + 1, $conditionEnd, true ); + + if ( false !== $firstNonWs && $tokens[ $firstNonWs ]['code'] === T_BOOLEAN_NOT ) { + $isNegated = true; + // Get condition without the leading ! + $condition = trim( $phpcsFile->getTokensAsString( $firstNonWs + 1, $conditionEnd - $firstNonWs - 1 ) ); + // Swap the return values. + $temp = $firstReturnValue; + $firstReturnValue = $secondReturnValue; + $secondReturnValue = $temp; + } + + // Build the ternary to check length. + $ternary = 'return ' . $condition . ' ? ' . $firstReturnValue . ' : ' . $secondReturnValue . ';'; + + // Skip if the ternary would be over 75 characters. + if ( strlen( $ternary ) > 75 ) { + return; + } + + // We found a pattern that can be simplified. + $fix = $phpcsFile->addFixableError( + 'This if-return pattern can be simplified to a ternary return statement.', + $stackPtr, + 'SimplifiableIfReturn' + ); + + if ( true === $fix ) { + $phpcsFile->fixer->beginChangeset(); + + // Remove everything from the if to the second return's semicolon. + for ( $i = $stackPtr; $i <= $secondReturnEnd; $i++ ) { + $phpcsFile->fixer->replaceToken( $i, '' ); + } + + // Insert the ternary at the if's position. + $phpcsFile->fixer->addContent( $stackPtr, $ternary ); + + $phpcsFile->fixer->endChangeset(); + } + } + + /** + * Check if a return statement is simple (short expression). + * + * @param File $phpcsFile The file being scanned. + * @param int $returnStart The position of the return token. + * @param int $returnEnd The position of the semicolon. + * + * @return bool + */ + private function isSimpleReturn( File $phpcsFile, $returnStart, $returnEnd ) { + $tokens = $phpcsFile->getTokens(); + + // Count non-whitespace tokens in the return value. + $tokenCount = 0; + $hasComplex = false; + + for ( $i = $returnStart + 1; $i < $returnEnd; $i++ ) { + if ( $tokens[ $i ]['code'] === T_WHITESPACE ) { + continue; + } + + ++$tokenCount; + + // Check for complex constructs that shouldn't be in a ternary. + $complexTokens = array( + T_CLOSURE, + T_FUNCTION, + T_CLASS, + T_ARRAY, // array() syntax - could be long. + T_OPEN_SHORT_ARRAY, // [] syntax - could be long. + ); + + if ( in_array( $tokens[ $i ]['code'], $complexTokens, true ) ) { + $hasComplex = true; + break; + } + } + + // Allow returns with up to ~10 tokens (simple expressions). + return ! $hasComplex && $tokenCount <= 10; + } + + /** + * Check if the if condition is simple. + * + * @param File $phpcsFile The file being scanned. + * @param int $ifPtr The position of the if token. + * + * @return bool + */ + private function isSimpleCondition( File $phpcsFile, $ifPtr ) { + $tokens = $phpcsFile->getTokens(); + + // Find the opening parenthesis of the if condition. + $openParen = $phpcsFile->findNext( T_OPEN_PARENTHESIS, $ifPtr + 1 ); + + if ( false === $openParen || ! isset( $tokens[ $openParen ]['parenthesis_closer'] ) ) { + return false; + } + + $closeParen = $tokens[ $openParen ]['parenthesis_closer']; + + // Count non-whitespace tokens in the condition. + $tokenCount = 0; + $hasComplex = false; + + for ( $i = $openParen + 1; $i < $closeParen; $i++ ) { + if ( $tokens[ $i ]['code'] === T_WHITESPACE ) { + continue; + } + + ++$tokenCount; + + // Check for complex constructs. + $complexTokens = array( + T_CLOSURE, + T_FUNCTION, + T_CLASS, + T_BOOLEAN_AND, // && - multiple conditions. + T_BOOLEAN_OR, // || - multiple conditions. + T_LOGICAL_AND, // and. + T_LOGICAL_OR, // or. + ); + + if ( in_array( $tokens[ $i ]['code'], $complexTokens, true ) ) { + $hasComplex = true; + break; + } + } + + // Allow conditions with up to ~15 tokens (simple expressions). + return ! $hasComplex && $tokenCount <= 15; + } +} diff --git a/phpcs.xml b/phpcs.xml index d61a6d12e5..6ab43fb13e 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -289,4 +289,5 @@ + diff --git a/square/controllers/FrmSquareLiteEventsController.php b/square/controllers/FrmSquareLiteEventsController.php index 6825406da4..318ee92600 100644 --- a/square/controllers/FrmSquareLiteEventsController.php +++ b/square/controllers/FrmSquareLiteEventsController.php @@ -99,11 +99,7 @@ private function should_skip_event( $event_id ) { $option = get_option( self::$events_to_skip_option_name ); - if ( ! is_array( $option ) ) { - return false; - } - - return in_array( $event_id, $option, true ); + return is_array( $option ) && in_array( $event_id, $option, true ); } /** diff --git a/stripe/controllers/FrmStrpLiteActionsController.php b/stripe/controllers/FrmStrpLiteActionsController.php index 65105a2e83..13ed6fba3e 100644 --- a/stripe/controllers/FrmStrpLiteActionsController.php +++ b/stripe/controllers/FrmStrpLiteActionsController.php @@ -30,11 +30,7 @@ public static function maybe_show_card( $callback, $field = false ) { $form_id = is_object( $field ) ? $field->form_id : $field['form_id']; $actions = self::get_actions_before_submit( $form_id ); - if ( ! $actions ) { - return $callback; - } - - return self::class . '::show_card'; + return $actions ? self::class . '::show_card' : $callback; } /** diff --git a/stripe/controllers/FrmStrpLiteEventsController.php b/stripe/controllers/FrmStrpLiteEventsController.php index c40e67c699..9b3e6a8b90 100644 --- a/stripe/controllers/FrmStrpLiteEventsController.php +++ b/stripe/controllers/FrmStrpLiteEventsController.php @@ -502,11 +502,7 @@ private function should_skip_event( $event_id ) { $option = get_option( self::$events_to_skip_option_name ); - if ( ! is_array( $option ) ) { - return false; - } - - return in_array( $event_id, $option, true ); + return is_array( $option ) && in_array( $event_id, $option, true ); } /** diff --git a/stripe/helpers/FrmStrpLiteConnectHelper.php b/stripe/helpers/FrmStrpLiteConnectHelper.php index c0148436b0..79f041a6c6 100644 --- a/stripe/helpers/FrmStrpLiteConnectHelper.php +++ b/stripe/helpers/FrmStrpLiteConnectHelper.php @@ -706,11 +706,7 @@ public static function get_customer_id( $options ) { return ! empty( self::$latest_error_from_stripe_connect ) ? self::$latest_error_from_stripe_connect : false; } - if ( empty( $data->customer_id ) ) { - return false; - } - - return $data->customer_id; + return empty( $data->customer_id ) ? false : $data->customer_id; } /** @@ -762,11 +758,7 @@ public static function create_intent( $new_charge ) { $data = self::post_with_authenticated_body( 'create_intent', compact( 'new_charge' ) ); $success = false !== $data; - if ( ! $success ) { - return false; - } - - return $data; + return $success ? $data : false; } /** @@ -828,11 +820,7 @@ public static function get_customer_subscriptions() { $customer_id = get_user_meta( $user_id, $meta_name, true ); $data = self::post_with_authenticated_body( 'get_customer_subscriptions', compact( 'customer_id' ) ); - if ( false === $data ) { - return false; - } - - return $data->subscriptions; + return false === $data ? false : $data->subscriptions; } /** diff --git a/stripe/helpers/FrmTransLiteAppHelper.php b/stripe/helpers/FrmTransLiteAppHelper.php index c10fc6c254..9ba2c7dba0 100755 --- a/stripe/helpers/FrmTransLiteAppHelper.php +++ b/stripe/helpers/FrmTransLiteAppHelper.php @@ -376,10 +376,7 @@ public static function format_the_date( $date, $format = '' ) { * @return int */ public static function get_user_id_for_current_payment() { - if ( is_user_logged_in() ) { - return get_current_user_id(); - } - return 0; + return is_user_logged_in() ? get_current_user_id() : 0; } /** diff --git a/stripe/models/FrmStrpLiteAuth.php b/stripe/models/FrmStrpLiteAuth.php index 8232a498cb..a9fcd3618b 100644 --- a/stripe/models/FrmStrpLiteAuth.php +++ b/stripe/models/FrmStrpLiteAuth.php @@ -612,11 +612,7 @@ private static function get_statement_descriptor() { $name = self::strip_special_characters_from_statement_descriptor( $name ); - if ( ! self::statement_descriptor_is_valid( $name ) ) { - return false; - } - - return $name; + return self::statement_descriptor_is_valid( $name ) ? $name : false; } /**