Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a23b069
Add/remove some shortcodes contextually
AbdiTolesa Oct 16, 2024
cbba449
Simplify solution
AbdiTolesa Oct 16, 2024
fd6a263
Correct a check for form settings page
AbdiTolesa Oct 16, 2024
337021f
Document new functions
AbdiTolesa Oct 16, 2024
d73e57d
Fix code alignment
AbdiTolesa Oct 16, 2024
94da727
Fix PHPCS error
AbdiTolesa Oct 16, 2024
f07497e
Improve code clarity
AbdiTolesa Oct 16, 2024
deecf6a
Get contextual shortcodes from PHP
AbdiTolesa Oct 21, 2024
54054bf
Comment new function
AbdiTolesa Oct 21, 2024
f512f6f
Remove code mixed from other PR
AbdiTolesa Oct 21, 2024
1614aab
Rename function
AbdiTolesa Oct 21, 2024
a77ab14
Refactor new code
AbdiTolesa Oct 21, 2024
59458f1
Organize new code together
AbdiTolesa Oct 21, 2024
1eb532c
Reuse existing function
AbdiTolesa Oct 21, 2024
d5826b0
Reduce repeated code
AbdiTolesa Oct 23, 2024
8a62441
Implement contextual shortcode for more shortcodes
AbdiTolesa Nov 11, 2024
a52a38b
Align variables in JSDoc
AbdiTolesa Nov 11, 2024
db0549e
Consider search results
AbdiTolesa Nov 11, 2024
ad25f2e
Simplify logic
AbdiTolesa Nov 11, 2024
dbd0f28
Refactor code to make some lines reusable
AbdiTolesa Nov 11, 2024
3d9735a
Fix PHPCS errors
AbdiTolesa Nov 11, 2024
a05a8a9
Fix PHPCS errors
AbdiTolesa Nov 11, 2024
ec6e099
Remove some change log entries
Crabcyborg Nov 12, 2024
c221f0b
Swap tags
Crabcyborg Nov 12, 2024
2452898
Merge branch 'master' into issue-829-show_some_shortcode_items_condit…
Crabcyborg Nov 12, 2024
fd99d5a
Merge branch 'master' into issue-829-show_some_shortcode_items_condit…
Crabcyborg Nov 12, 2024
5bb1a40
Incorporate review feedbacks
AbdiTolesa Nov 13, 2024
60d6416
Merge branch 'issue-829-show_some_shortcode_items_conditionally' of h…
AbdiTolesa Nov 13, 2024
86660bc
Comment functions
AbdiTolesa Nov 13, 2024
53bf322
Align equal sign
AbdiTolesa Nov 13, 2024
b67d637
Reduce repeated code
AbdiTolesa Nov 13, 2024
4acc6e5
Reduce repeated code
AbdiTolesa Nov 13, 2024
4fafd12
Reduce repeated code
AbdiTolesa Nov 13, 2024
a4a6949
Delete code not needed
AbdiTolesa Nov 13, 2024
dc7efc7
Delete more code
AbdiTolesa Nov 13, 2024
e361a8c
Fix potential bug
AbdiTolesa Nov 20, 2024
de09eaf
Support form_name shortcode in more places
AbdiTolesa Nov 20, 2024
0ab4f89
Support form_name shortcode in more places
AbdiTolesa Nov 20, 2024
d84fe3f
Add form_name to the list of shortcodes
AbdiTolesa Nov 21, 2024
115508e
Fix potential bug
AbdiTolesa Nov 21, 2024
63a5d56
Use FrmForm::getName to get form name from form id
AbdiTolesa Nov 21, 2024
8cb313a
Improve code readability
AbdiTolesa Nov 21, 2024
096ec74
Fix PHPCS error
AbdiTolesa Nov 21, 2024
efbc827
Change approach to form name shortcode
AbdiTolesa Nov 26, 2024
18008a4
Merge branch 'master' into issue-829-show_some_shortcode_items_condit…
Crabcyborg Nov 27, 2024
a139106
Merge branch 'master' into issue-829-show_some_shortcode_items_condit…
Crabcyborg Dec 3, 2024
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
9 changes: 2 additions & 7 deletions classes/controllers/FrmFormsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -1654,19 +1654,14 @@ private static function get_shortcode_helpers( $settings_tab ) {
'' => '',
'siteurl' => __( 'Site URL', 'formidable' ),
'sitename' => __( 'Site Name', 'formidable' ),
'form_name' => __( 'Form Name', 'formidable' ),
);

$entry_shortcodes = array_merge( FrmShortcodeHelper::get_contextual_shortcode_values(), $entry_shortcodes );
if ( ! FrmAppHelper::pro_is_installed() ) {
unset( $entry_shortcodes['post_id'] );
}

if ( $settings_tab ) {
$entry_shortcodes['default-message'] = __( 'Default Msg', 'formidable' );
$entry_shortcodes['default-html'] = __( 'Default HTML', 'formidable' );
$entry_shortcodes['default-plain'] = __( 'Default Plain', 'formidable' );
$entry_shortcodes['form_name'] = __( 'Form Name', 'formidable' );
}

/**
* Use this hook to add or remove buttons in the helpers section
* in the customization panel
Expand Down
1 change: 1 addition & 0 deletions classes/helpers/FrmFieldsHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -913,6 +913,7 @@ public static function allowed_shortcodes( $fields = array() ) {
'updated[-|_]at',
'updated[-|_]by',
'parent[-|_]id',
'form_name',
);

foreach ( $fields as $field ) {
Expand Down
49 changes: 49 additions & 0 deletions classes/helpers/FrmShortcodeHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,55 @@ public static function get_shortcode_attribute_array( $text ) {
return $atts;
}

/**
* Returns shortcodes that are shown/hidden based on the context.
*
* @since x.x
* @return array
*/
public static function get_contextual_shortcodes() {
return array(
'address' => array(
'admin_email' => __( 'Admin email', 'formidable' ),
'default-from-email' => __( 'Default from email', 'formidable' ),
'default-email' => __( 'Default email', 'formidable' ),
),
'body' => array(
'default-message' => __( 'Default Msg', 'formidable' ),
'default-html' => __( 'Default HTML', 'formidable' ),
'default-plain' => __( 'Default Plain', 'formidable' ),
),
);
Comment thread
AbdiTolesa marked this conversation as resolved.
}
Comment thread
AbdiTolesa marked this conversation as resolved.

/**
* Get contextual shortcodes.
*
* @since x.x
*
* @return array
*/
public static function get_contextual_shortcode_values() {
$contextual_shortcodes = self::get_contextual_shortcodes();
return array_merge( $contextual_shortcodes['address'], $contextual_shortcodes['body'] );
}

/**
* Get flattened format of contextual shortcodes.
*
* @since x.x
*
* @return array
*/
public static function get_contextual_codes() {
$contextual_shortcodes = self::get_contextual_shortcodes();
$result = array();
foreach ( $contextual_shortcodes as $type => $shortcodes ) {
$result[ $type ] = array_keys( $shortcodes );
}
return $result;
}

/**
* Get the name of the shortcode from the regEx
*
Expand Down
3 changes: 2 additions & 1 deletion classes/views/frm-forms/mb_insert_fields.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
if ( ! defined( 'ABSPATH' ) ) {
die( 'You are not allowed to call this page directly.' );
}
$data_attrs = array( 'data-contextual-shortcodes' => FrmAppHelper::maybe_json_encode( FrmShortcodeHelper::get_contextual_codes() ) );
?>
<div id="frm_adv_info" class="postbox frm-dropdown-menu">
<div id="frm_adv_info" class="postbox frm-dropdown-menu" <?php FrmAppHelper::array_to_html_params( $data_attrs, true ); ?>>
Comment thread
Crabcyborg marked this conversation as resolved.
<div class="inside">
<?php FrmFormsController::mb_tags_box( $id ); ?>
</div>
Expand Down
7 changes: 6 additions & 1 deletion classes/views/shared/mb_adv_info.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@
</div>
<ul class="frm_code_list frm-full-hover">
<?php
$contextual_codes = FrmShortcodeHelper::get_contextual_codes();
foreach ( $entry_shortcodes as $skey => $sname ) {
if ( ! $skey ) {
echo '<li class="clear frm_block"></li>';
Expand All @@ -210,6 +211,10 @@
$classes .= in_array( $skey, array( 'siteurl', 'sitename', 'entry_count' ), true ) ? ' show_before_content show_after_content' : '';
$classes .= strpos( $skey, 'default-' ) === 0 ? ' hide_frm_not_email_subject' : '';

if ( in_array( $skey, array_keys( $contextual_codes ), true ) ) {
$classes .= ' frm_hidden';
}

FrmFormsHelper::insert_code_html(
array(
'code' => $skey,
Expand All @@ -219,7 +224,7 @@
);

unset( $skey, $sname, $classes );
}
}//end foreach

foreach ( $advanced_helpers as $helper_type => $helper ) {
if ( 'user_id' === $helper_type && ! isset( $uid ) ) {
Expand Down
100 changes: 98 additions & 2 deletions js/formidable_admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ function frmAdminBuildJS() {
const { tag, div, span, a, svg, img } = frmDom;
const { onClickPreventDefault } = frmDom.util;
const { doJsonFetch, doJsonPost } = frmDom.ajax;
frmAdminJs.contextualShortcodes = getContextualShortcodes();
const icons = {
Comment thread
AbdiTolesa marked this conversation as resolved.
save: svg({ href: '#frm_save_icon' }),
drag: svg({ href: '#frm_drag_icon', classList: [ 'frm_drag_icon', 'frm-drag' ] })
Expand Down Expand Up @@ -8446,9 +8447,104 @@ function frmAdminBuildJS() {
jQuery( tinymce.get( input.id ) ).trigger( 'focus' );
}
}
showOrHideContextualShortcodes( input );
}
}

/**
* Returns true if a shortcode could be shown in the search result.
*
* @since x.x
*
* @param {HTMLElement} item
* @returns {Boolean}
*/
function checkContextualShortcode( item ) {
if ( frmAdminJs.contextualShortcodes.length === 0 ) {
return true;
}
return ! isContextualShortcode( item ) || canShowContextualShortcode( item );
}

/**
* Returns true if a shortcode is contextual to fields.
*
* @since x.x
*
* @param {HTMLElement} item
* @returns {Boolean}
*/
function isContextualShortcode( item ) {
const shortcode = item.querySelector( 'a' ).dataset.code;
return frmAdminJs.contextualShortcodes.address.includes( shortcode ) || frmAdminJs.contextualShortcodes.body.includes( shortcode );
}

/**
* @since x.x
*
* @param {HTMLElement} item
* @returns {Boolean}
*/
function canShowContextualShortcode( item ) {
const shortcode = item.querySelector( 'a' ).dataset.code;
const inputId = document.getElementById( 'frm_adv_info' ).dataset.fills;
const input = document.getElementById( inputId );
const contextualShortcodes = frmAdminJs.contextualShortcodes;
if ( contextualShortcodes.address.includes( shortcode ) ) {
return input.matches( contextualShortcodes.addressSelector );
}
return input.matches( contextualShortcodes.bodySelector );
}

/**
* @since x.x
*
* @param {HTMLElement} input
* @returns {Void}
*/
function showOrHideContextualShortcodes( input ) {
[ 'address', 'body' ].forEach( type => {
toggleContextualShortcodes( input, type );
});
}

/**
* @since x.x
*
* @param {HTMLElement} input
* @param {string} type
*
* @returns {Void}
*/
function toggleContextualShortcodes( input, type ) {
let selector, contextualShortcodes;
selector = frmAdminJs.contextualShortcodes[ type + 'Selector' ];
contextualShortcodes = frmAdminJs.contextualShortcodes[ type ];
let shouldShowShortcodes = input.matches( selector );
for ( let shortcode of contextualShortcodes ) {
const shortcodeLi = document.querySelector( '#frm-adv-info-tab .frm_code_list [data-code="' + shortcode + '"]' )?.closest( 'li');
shortcodeLi?.classList.toggle( 'frm_hidden', ! shouldShowShortcodes );
}
}

/**
* Returns shortcodes that are contextual to the current input field.
*
* @since x.x
*
* @returns {Array}
*/
function getContextualShortcodes() {
let contextualShortcodes = document.getElementById( 'frm_adv_info' )?.dataset.contextualShortcodes;
if ( ! contextualShortcodes) {
return [];
}
contextualShortcodes = JSON.parse( contextualShortcodes );
contextualShortcodes.addressSelector = '[id^=email_to], [id^=from_], [id^=cc], [id^=bcc]';
contextualShortcodes.bodySelector = '[id^=email_message_]';
return contextualShortcodes;
}

function fieldUpdated() {
if ( ! fieldsUpdated ) {
fieldsUpdated = 1;
Expand Down Expand Up @@ -9454,12 +9550,12 @@ function frmAdminBuildJS() {

const itemCanBeShown = ! ( getExportOption() === 'xml' && items[i].classList.contains( 'frm-is-repeater' ) );
if ( searchText === '' ) {
if ( itemCanBeShown ) {
if ( itemCanBeShown && checkContextualShortcode( items[i] ) ) {
items[i].classList.remove( 'frm_hidden' );
}
items[i].classList.remove( 'frm-search-result' );
} else if ( ( regEx && new RegExp( searchText ).test( innerText ) ) || innerText.indexOf( searchText ) >= 0 || textMatchesPlural( innerText, searchText ) ) {
if ( itemCanBeShown ) {
if ( itemCanBeShown && checkContextualShortcode( items[i] ) ) {
items[i].classList.remove( 'frm_hidden' );
}
items[i].classList.add( 'frm-search-result' );
Expand Down