Plugin Directory

Changeset 3494846


Ignore:
Timestamp:
03/30/2026 05:41:05 PM (4 days ago)
Author:
bestwebsoft
Message:

1.3.3

Location:
profile-extra-fields
Files:
213 added
14 edited

Legend:

Unmodified
Added
Removed
  • profile-extra-fields/trunk/bws_menu/bws_functions.php

    r3112312 r3494846  
    22/**
    33 * @package BWS Menu
    4  * @version 2.4.3
     4 * @version 2.4.4
    55 * Main functions
    66 */
     
    785785        $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
    786786
    787         wp_enqueue_style( 'bws-admin-css', bws_menu_url( 'css/general_style.css' ), array(), '2.4.2' );
     787        wp_enqueue_style( 'bws-admin-css', bws_menu_url( 'css/general_style.css' ), array(), '2.4.4' );
    788788        wp_enqueue_script( 'bws-admin-scripts', bws_menu_url( 'js/general_script.js' ), array( 'jquery', 'jquery-ui-tooltip' ) );
    789789
     
    12001200                    <div id="bws_shortcode_content">
    12011201                        <h4><?php esc_html_e( 'Shortcode settings', 'bestwebsoft' ); ?></h4>
    1202                         <?php echo wp_kses_post( apply_filters( 'bws_shortcode_button_content', '' ) ); ?>
     1202                        <?php
     1203                        $ws_shortcode_button_content = apply_filters( 'bws_shortcode_button_content', '' );
     1204                        if ( ! empty( $ws_shortcode_button_content ) ) {
     1205                            echo wp_kses_post( $ws_shortcode_button_content );
     1206                        }
     1207                        ?>
    12031208                    </div>
    12041209                    <div class="clear"></div>
  • profile-extra-fields/trunk/bws_menu/bws_menu.php

    r3112312 r3494846  
    66/**
    77 * Function for displaying BestWebSoft menu
    8  * Version: 2.4.3
     8 * Version: 2.4.4
    99 */
    1010if ( ! function_exists( 'bws_admin_enqueue_scripts' ) ) {
  • profile-extra-fields/trunk/bws_menu/class-bws-settings.php

    r3112312 r3494846  
    388388                }
    389389                /* check demo data */
     390            } elseif ( isset( $_POST['bws_pro_reset_custom_code'] ) && check_admin_referer( $this->plugin_basename, 'bws_nonce_name' ) ) {
     391                $this->get_custom_code( true );
    390392            } else {
    391393                $demo_result = ! empty( $this->demo_data ) ? $this->demo_data->bws_handle_demo_data() : false;
     
    444446            }
    445447            ?>
    446             ><p><strong><?php echo wp_kses_post( $save_results['message'] ); ?></strong></p></div>
     448            ><p><strong><?php echo ! empty( $save_results['message'] ) ? wp_kses_post( $save_results['message'] ) : ''; ?></strong></p></div>
    447449            <div class="updated bws-notice inline"
    448450            <?php
     
    451453            }
    452454            ?>
    453             ><p><strong><?php echo wp_kses_post( $save_results['notice'] ); ?></strong></p></div>
     455            ><p><strong><?php echo ! empty( $save_results['notice'] ) ? wp_kses_post( $save_results['notice'] ) : ''; ?></strong></p></div>
    454456            <div class="error inline"
    455457            <?php
     
    458460            }
    459461            ?>
    460             ><p><strong><?php echo wp_kses_post( $save_results['error'] ); ?></strong></p></div>
     462            ><p><strong><?php echo ! empty( $save_results['error'] ) ? wp_kses_post( $save_results['error'] ) : ''; ?></strong></p></div>
    461463            <?php
    462464        }
     
    478480         * @access private
    479481         */
    480         private function get_custom_code() {
     482        private function get_custom_code( $flag_remove = false ) {
    481483            global $bstwbsftwppdtplgns_options, $wp_filesystem;
    482484
     
    509511                $real_file = $folder . '/' . $file;
    510512
     513                if ( true === $flag_remove && $wp_filesystem->exists( $real_file ) ) {
     514                    $wp_filesystem->delete( $real_file, false, 'f' );
     515                }
     516
    511517                if ( $wp_filesystem->exists( $real_file ) ) {
    512518                    update_recently_edited( $real_file );
     
    516522                        $this->custom_code_args[ "is_{$extension}_active" ] = true;
    517523                    }
    518                     if ( is_writeable( $real_file ) ) {
     524                    if ( $wp_filesystem->is_writable( $real_file ) ) {
    519525                        $this->custom_code_args[ "{$extension}_writeable" ] = true;
    520526                    }
     
    522528                    $this->custom_code_args[ "{$extension}_writeable" ] = true;
    523529                    if ( 'php' === $extension ) {
    524                         $this->custom_code_args[ "content_{$extension}" ] = '<?php' . "\n" . "if ( ! defined( 'ABSPATH' ) ) exit;" . "\n" . "if ( ! defined( 'BWS_GLOBAL' ) ) exit;" . "\n\n" . '/* Start your code here */' . "\n";
     530                        $this->custom_code_args[ "content_{$extension}" ] = '<?php' . PHP_EOL . "if ( ! defined( 'ABSPATH' ) || ! defined( 'BWS_GLOBAL' ) ) exit;" . PHP_EOL . PHP_EOL . '/* Start your code here */' . PHP_EOL;
    525531                    }
    526532                }
     
    553559                            <?php
    554560                            if ( ! current_user_can( 'edit_plugins' ) ) {
    555                                 echo '<p>' . esc_html__( 'You do not have sufficient permissions to edit plugins for this site.', 'bestwebsoft' ) . '</p>';
     561                                echo '<p>' . esc_html__( 'You do not have sufficient permissions to edit plugins for this site.', 'bestwebsoft' ) . '</p></div></div></div>';
    556562                                return;
    557563                            }
     
    616622                        <div class="clear"></div>
    617623                    </div>
     624                </div>
     625                <div class="inline" style="margin-top: 15px;">
     626                    <input type="submit" class="button button-primary" name="bws_pro_reset_custom_code" value="<?php esc_html_e( 'Erase all custom code', 'bestwebsoft' ); ?>" onclick="return confirm( '<?php esc_html_e( 'Are you sure you want to delete all custom code?', 'bestwebsoft' ); ?>' );" />
    618627                </div>
    619628                <?php
     
    13951404        if ( isset( $_REQUEST['bws_ajax_nonce'] ) ) {
    13961405
    1397             wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['bws_ajax_nonce'] ) ), 'bws_ajax_nonce' );
     1406            check_ajax_referer( 'bws_ajax_nonce', sanitize_text_field( wp_unslash( $_REQUEST['bws_ajax_nonce'] ) ) );
    13981407
    13991408            $basename = isset( $_REQUEST['plugin'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['plugin'] ) ) : '';
  • profile-extra-fields/trunk/bws_menu/css/general_style.css

    r2975179 r3494846  
    5555    margin-top: 6px;
    5656}
     57#adminmenu #toplevel_page_adblock-detector-by-bestwebsoft .wp-menu-image:before {
     58    content: "\e994";
     59    font-family: 'bwsicons' !important;
     60}
    5761/* general styles */
    5862.bws_info {
     
    7478    border-right: 4px solid #ffba00;
    7579}
     80@media screen and (max-width: 1600px) {
     81    .bws_info {
     82      max-width: 400px;
     83      display: inline-block;
     84      vertical-align: middle;
     85    }
     86    .form-table td {
     87      vertical-align: top;
     88    }
     89}
     90@media screen and (max-width: 1350px) {
     91    label > .bws_info  {
     92        display: block;
     93    }
     94    .bws_info {
     95        vertical-align: text-top;
     96    }
     97}
     98
    7699/*
    77100* styles for rate-support div on the settings page
  • profile-extra-fields/trunk/bws_menu/deactivation-form.php

    r3112312 r3494846  
    358358        if ( isset( $_REQUEST['bws_ajax_nonce'] ) ) {
    359359
    360             wp_verify_nonce( sanitize_text_field( wp_unslash( $_REQUEST['bws_ajax_nonce'] ) ), 'bws_ajax_nonce' );
     360            check_ajax_referer( 'bws_ajax_nonce', sanitize_text_field( wp_unslash( $_REQUEST['bws_ajax_nonce'] ) ) );
    361361
    362362            $reason_id = isset( $_REQUEST['reason_id'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['reason_id'] ) ) : '';
  • profile-extra-fields/trunk/bws_menu/fonts/bwsicons.svg

    r2975179 r3494846  
    66<![CDATA[
    77{
    8     "fontFamily": "icomoon",
     8    "fontFamily": "bwsicons",
    99    "majorVersion": 1,
    1010    "minorVersion": 0,
    1111    "version": "Version 1.0",
    12     "fontId": "icomoon",
    13     "psName": "icomoon",
     12    "fontId": "bwsicons",
     13    "psName": "bwsicons",
    1414    "subFamily": "Regular",
    15     "fullName": "icomoon",
     15    "fullName": "bwsicons",
    1616    "description": "Font generated by IcoMoon."
    1717}
     
    2020</metadata>
    2121<defs>
    22 <font id="icomoon" horiz-adv-x="1024">
     22<font id="bwsicons" horiz-adv-x="1024">
    2323<font-face units-per-em="1024" ascent="960" descent="-64" />
    2424<missing-glyph horiz-adv-x="1024" />
     
    8686<glyph unicode="&#xe992;" glyph-name="Columns" data-tags="Columns" d="M249.6 817.2v-738.4h-128v738.4h128zM467.2 817.2v-738.4h-128v738.4h128zM684.8 817.2v-738.4h-128v738.4h128zM902.4 817.2v-738.4h-128v738.4h128z" />
    8787<glyph unicode="&#xe993;" glyph-name="GPTAi" data-tags="GPT Ai" d="M409.919 184.994l329.81-142.572h-659.627l329.81 142.572zM409.919 737.754l400.483-702.805-400.483 173.731-400.483-173.731 400.483 702.805zM809.819 784.196l102.953 103.537 101.792-102.365-102.953-103.537-101.792 102.365zM810.403 753.518l102.088-97.994 102.088 97.994v-718.601h-204.17v718.601z" />
     88<glyph unicode="&#xe994;" glyph-name="AdBock-Detector" data-tags="AdBock Detector" d="M463.97 833.512c-12.177-12.091-17.25-21.663-17.25-32.747v-15.114l-25.368 3.023c-28.92 3.527-45.156-4.534-60.884-30.228-9.133-14.61-10.148-25.693-10.148-118.392v-102.774l-17.25 10.58c-23.847 14.61-41.605 13.602-59.362-4.534l-15.221-15.114 1.522-134.514c2.537-151.641 4.566-163.731 39.068-216.631 23.846-36.779 60.884-67.007 100.459-82.621 26.89-10.583 39.068-12.094 137.499-13.605 105.532-1.511 108.067-1.511 134.452 10.578 30.949 14.107 55.808 37.282 71.029 65.998 11.165 20.152 11.165 25.192 12.686 272.553 1.014 165.246 0 257.944-3.554 270.035-3.042 9.572-11.16 23.175-18.77 30.228-10.653 10.076-17.756 12.091-42.62 11.587l-29.428-0.504-2.535 25.189c-2.028 20.656-5.075 28.213-18.775 40.304-15.221 13.602-19.277 14.61-44.648 12.595-26.887-2.519-29.428-1.511-45.155 14.61-14.714 14.61-20.291 16.625-42.615 16.625-22.834 0-27.907-2.015-43.129-17.129zM524.855 814.871l13.193-10.076 1.014-152.146 1.521-152.146h25.366l2.54 138.543c1.521 76.073 4.563 141.567 6.596 145.093 7.103 10.076 43.127 7.557 49.212-3.527 3.047-6.046 5.075-63.982 5.075-153.657 0-78.592 1.521-146.604 3.042-151.139 3.554-8.564 19.789-11.084 24.864-3.526 1.521 2.519 3.042 46.349 3.042 97.232 0 97.233 4.061 133.506 15.221 140.559 13.193 8.565 37.038 3.023 43.634-10.58 8.117-15.618 9.639-486.162 1.521-513.87-6.596-23.681-31.963-53.402-56.822-65.998-18.775-9.574-27.399-10.076-127.354-8.565-97.92 1.511-109.589 3.022-131.914 12.596-52.259 24.183-95.386 79.599-110.099 142.068-7.103 28.717-9.133 246.861-2.537 256.937 8.625 14.61 37.546-4.030 52.766-33.25 3.044-6.046 5.581-37.279 5.581-73.049 0-65.496 3.044-76.576 18.265-73.554 9.133 1.511 9.64 11.080 12.177 202.021 2.537 191.442 3.044 201.014 12.177 208.067 12.684 9.068 28.92 9.068 41.604 0 9.133-6.549 9.64-15.114 11.162-136.529 1.522-111.842 2.537-129.475 9.64-131.994 19.28-7.557 21.31 8.564 21.817 168.771 0 84.134 1.522 155.673 3.044 158.192 3.044 4.534 20.297 13.099 27.907 13.603 2.028 0.504 9.131-4.030 16.742-10.076zM463.761 714.725c-100.293-22.541-179.13-97.678-204.578-195.356-9.98-39.071-9.48-108.7 0.499-143.263 8.981-30.556 28.94-72.629 40.916-86.155 6.986-8.013 6.986-9.519 0-16.528-6.486-6.512-9.98-7.014-18.961-2.003-10.479 5.508-17.464 0-109.275-92.17l-97.798-98.18v-25.043c0-21.539 2.495-27.051 16.466-41.074 13.971-14.028 19.46-16.533 40.916-16.533h24.948l97.798 98.18c86.821 87.159 97.299 99.179 92.31 108.196-3.992 7.516-3.493 12.522 1.497 19.536 6.486 8.515 7.983 9.017 16.466 1.501 13.472-12.522 55.385-32.559 85.823-41.571 34.429-10.021 103.788-10.523 142.705-0.502 94.805 25.043 171.147 104.692 194.6 203.368 45.404 194.355-129.735 371.177-324.332 327.598zM585.012 682.667c45.404-12.022 76.343-30.055 110.771-65.62 59.874-61.111 81.831-140.756 62.37-224.909-20.455-87.159-91.812-159.292-179.627-181.333-13.471-3.504-43.411-5.006-71.854-3.504-42.911 2.003-52.89 4.509-86.321 20.54-51.893 25.043-91.811 65.118-116.759 117.213-17.464 35.562-18.961 43.078-20.957 91.663-1.497 44.583-0.499 57.607 8.982 85.157 41.913 125.228 167.155 194.354 293.396 160.793zM326.045 243.364c-2.994-3.504-7.485-5.508-10.478-4.007-2.495 1.506-1.996 6.010 1.497 10.021 2.994 3.504 7.485 5.508 10.479 4.007 2.494-1.506 1.996-6.010-1.497-10.021zM323.525 914.532h391.863l277.216-273.236v-386.593l-277.216-273.234h-391.863l-277.215 273.234v386.593l277.215 273.236zM333.716 889.677l-262.551-258.782v-365.794l262.55-258.779h371.483l262.552 258.779v365.794l-262.552 258.782h-371.482z" />
    8889</font></defs></svg>
  • profile-extra-fields/trunk/bws_menu/product_list.php

    r3112312 r3494846  
    1919    'security'    => array( 'name' => __( 'Security', 'bestwebsoft' ) ),
    2020    'seo'         => array( 'name' => __( 'SEO', 'bestwebsoft' ) ),
    21     'smm'         => array( 'name' => __( 'SMM', 'bestwebsoft' ) ),
    2221);
    2322
    2423$bws_plugins = array(
     24    'adblock-detector-by-bestwebsoft/adblock-detector-by-bestwebsoft.php'                       => array(
     25        'category'     => array( 'ecommerce' ),
     26        'name'         => 'Adblocker Detector',
     27        'description'  => __( 'Detects adblocks and displays a non-closable popup banner asking users to turn off their adblocker.', 'bestwebsoft' ),
     28        'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/adblock-detector/?k=04387cfc31fc8b9553e4741392762231&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
     29        'settings'     => 'admin.php?page=adblock-detector-by-bestwebsoft.php',
     30        'pro_version'  => 'adblock-detector-pro/adblock-detector-pro.php',
     31        'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/adblock-detector/buy/?k=9b3222b005340035eaead38a7a495a0d&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
     32        'pro_settings' => 'admin.php?page=adblock-detector-pro.php',
     33        'icon'         => bws_menu_url( 'icons/plugins/' ) . 'adblock-detector-by-bestwebsoft.png',
     34        'install_url'  => 'https://bestwebsoft.com/products/wordpress/plugins/adblock-detector/',
     35    ),
    2536    'bike-rental/bike-rental.php'                       => array(
    2637        'category'     => array( 'ecommerce' ),
     
    4556        'pro_settings' => 'admin.php?page=captcha_pro.php',
    4657    ),
    47     'bws-car-rental/bws-car-rental.php'                 => array(
    48         'category'     => array( 'ecommerce' ),
    49         'name'         => 'Car Rental V2',
    50         'description'  => __( 'Create your own rental website for car renting and booking.', 'bestwebsoft' ),
    51         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/car-rental-v2/?k=ca43df54beefae7128a7005bce0ec651&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    52         'settings'     => 'admin.php?page=bws-car-rental-settings',
    53         'pro_version'  => 'bws-car-rental-pro/bws-car-rental-pro.php',
    54         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/car-rental-v2/buy/?k=63cac1b736047a3f5a2f5a7c5336f3c4&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    55         'pro_settings' => 'edit.php?post_type=bws_bkng_products&page=bws-car-rental-pro-settings',
    56         'icon'         => '//ps.w.org/car-rental/assets/icon-128x128.png',
    57         'install_url'  => 'https://bestwebsoft.com/products/wordpress/plugins/car-rental-v2/',
    58     ),
    59     'columns-bws/columns-bws.php'                       => array(
    60         'category'    => array( 'content' ),
    61         'name'        => 'Columns',
    62         'description' => __( 'Add columns with custom content to WordPress website pages, posts, widgets, etc.', 'bestwebsoft' ),
    63         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/columns/?k=6d2cddc059a04e4d528cec14de47fb1e&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    64         'settings'    => 'admin.php?page=columns-settings.php',
    65     ),
    6658    'contact-form-plugin/contact_form.php'              => array(
    6759        'category'     => array( 'marketing', 'recommended' ),
     
    7466        'pro_settings' => 'admin.php?page=contact_form_pro.php',
    7567    ),
    76     'contact-form-multi/contact-form-multi.php'         => array(
    77         'category'     => array( 'marketing', 'recommended' ),
    78         'name'         => 'Contact Form Multi',
    79         'description'  => __( 'Add unlimited number of contact forms to WordPress website.', 'bestwebsoft' ),
    80         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/contact-form-multi/?k=83cdd9e72a9f4061122ad28a67293c72&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    81         'settings'     => '',
    82         'pro_version'  => 'contact-form-multi-pro/contact-form-multi-pro.php',
    83         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/contact-form-multi/buy/?k=fde3a18581c143654f060c398b07e8ac&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    84         'pro_settings' => '',
    85     ),
    86     'contact-form-to-db/contact_form_to_db.php'         => array(
    87         'category'     => array( 'admin-tools', 'recommended' ),
    88         'name'         => 'Contact Form to DB',
    89         'description'  => __( 'Save and manage Contact Form messages. Never lose important data.', 'bestwebsoft' ),
    90         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/contact-form-to-db/?k=ba3747d317c2692e4136ca096a8989d6&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    91         'settings'     => 'admin.php?page=contact_form_to_db.php',
    92         'pro_version'  => 'contact-form-to-db-pro/contact_form_to_db_pro.php',
    93         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/contact-form-to-db/buy/?k=6ce5f4a9006ec906e4db643669246c6a&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    94         'pro_settings' => 'admin.php?page=contact_form_to_db_pro.php',
    95     ),
    96     'custom-admin-page/custom-admin-page.php'           => array(
    97         'category'     => array( 'admin-tools' ),
    98         'name'         => 'Custom Admin Page',
    99         'description'  => __( 'Add unlimited custom pages to WordPress admin dashboard.', 'bestwebsoft' ),
    100         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/custom-admin-page/?k=9ac03f16c25e845e8e055a221c3e1467&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    101         'settings'     => 'edit.php?post_type=bws-admin_page&page=custom-admin-page.php',
    102         'pro_version'  => 'custom-admin-page-pro/custom-admin-page-pro.php',
    103         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/custom-admin-page/buy/?k=b986f456dba092b537f1a7755a363be9&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    104         'pro_settings' => 'edit.php?post_type=bws-admin_page&page=custom-admin-page-pro.php',
    105     ),
    10668    'custom-search-plugin/custom-search-plugin.php'     => array(
    10769        'category'     => array( 'navigation' ),
     
    11476        'pro_settings' => 'admin.php?page=custom_search_pro.php',
    11577    ),
    116     'donate-button/donate.php'                          => array(
    117         'category'    => array( 'ecommerce' ),
    118         'name'        => 'Donate',
    119         'description' => __( 'Add PayPal and 2CO donate buttons to receive charity payments.', 'bestwebsoft' ),
    120         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/donate/?k=a8b2e2a56914fb1765dd20297c26401b&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    121         'settings'    => 'admin.php?page=donate.php',
    122     ),
    12378    'error-log-viewer/error-log-viewer.php'             => array(
    12479        'category'    => array( 'admin-tools' ),
     
    12782        'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/error-log-viewer/?k=da0de8bd2c7a0b2fea5df64d55a368b3&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    12883        'settings'    => 'admin.php?page=rrrlgvwr.php&tab=settings',
    129     ),
    130     'facebook-button-plugin/facebook-button-plugin.php' => array(
    131         'category'     => array( 'smm' ),
    132         'name'         => 'Like & Share',
    133         'description'  => __( 'Add Facebook Follow, Like, and Share buttons to WordPress posts, pages, and widgets.', 'bestwebsoft' ),
    134         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/facebook-like-button/?k=05ec4f12327f55848335802581467d55&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    135         'settings'     => 'admin.php?page=facebook-button-plugin.php',
    136         'pro_version'  => 'facebook-button-pro/facebook-button-pro.php',
    137         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/facebook-like-button/buy/?k=8da168e60a831cfb3525417c333ad275&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    138         'pro_settings' => 'admin.php?page=facebook-button-pro.php',
    13984    ),
    14085    'gallery-plugin/gallery-plugin.php'                 => array(
     
    158103        'pro_settings' => 'admin.php?page=google-2-step-verification-pro.php',
    159104    ),
    160     'bws-adsense/bws-adsense.php'                       => array(
    161         'category'     => array( 'marketing' ),
    162         'name'         => 'AdS',
    163         'description'  => __( 'Add Adsense ads to WordPress website pages, posts, custom posts, search results, categories, tags, and widgets.', 'bestwebsoft' ),
    164         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/google-adsense/?k=9d719e415eee289845b00843e8847bc9&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    165         'settings'     => 'admin.php?page=bws-adsense.php',
    166         'pro_version'  => 'adsense-pro/adsense-pro.php',
    167         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/google-adsense/buy/?k=60e3979921e354feb0347e88e7d7b73d&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    168         'pro_settings' => 'admin.php?page=adsense-pro.php',
    169     ),
    170     'bws-google-analytics/bws-google-analytics.php'     => array(
    171         'category'     => array( 'admin-tools' ),
    172         'name'         => 'Analytics',
    173         'description'  => __( 'Add Google Analytics code to WordPress website and track basic stats.', 'bestwebsoft' ),
    174         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/bws-google-analytics/?k=261c74cad753fb279cdf5a5db63fbd43&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    175         'settings'     => 'admin.php?page=bws-google-analytics.php',
    176         'pro_version'  => 'bws-google-analytics-pro/bws-google-analytics-pro.php',
    177         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/bws-google-analytics/buy/?k=83796e84fec3f70ecfcc8894a73a6c4a&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    178         'pro_settings' => 'admin.php?page=bws-google-analytics-pro.php',
    179     ),
    180105    'google-captcha/google-captcha.php'                 => array(
    181106        'category'     => array( 'security', 'recommended' ),
     
    188113        'pro_settings' => 'admin.php?page=google-captcha-pro.php',
    189114    ),
    190     'bws-google-maps/bws-google-maps.php'               => array(
    191         'category'     => array( 'content' ),
    192         'name'         => 'Maps',
    193         'description'  => __( 'Add customized Google maps to WordPress posts, pages and widgets.', 'bestwebsoft' ),
    194         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/bws-google-maps/?k=d8fac412d7359ebaa4ff53b46572f9f7&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    195         'settings'     => 'admin.php?page=bws-google-maps.php',
    196         'pro_version'  => 'bws-google-maps-pro/bws-google-maps-pro.php',
    197         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/bws-google-maps/buy/?k=117c3f9fc17f2c83ef430a8a9dc06f56&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    198         'pro_settings' => 'admin.php?page=bws-google-maps-pro.php',
    199     ),
    200115    'google-sitemap-plugin/google-sitemap-plugin.php'   => array(
    201116        'category'     => array( 'seo', 'recommended' ),
     
    208123        'pro_settings' => 'admin.php?page=google-sitemap-pro.php',
    209124    ),
    210     'google-shortlink/google-shortlink.php'             => array(
    211         'category'    => array( 'seo' ),
    212         'name'        => 'Shortlink',
    213         'description' => __( 'Replace external WordPress website links with Google shortlinks and track click stats.', 'bestwebsoft' ),
    214         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/google-shortlink/?k=afcf3eaed021bbbbeea1090e16bc22db&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    215         'settings'    => 'admin.php?page=gglshrtlnk_options',
    216     ),
    217     'gpt-ai-content-creator/gpt-ai-content-creator.php' => array(
    218         'category'     => array( 'content', 'recommended' ),
    219         'name'         => 'GPT AI Content Creator',
    220         'description'  => __( 'Create Content with GPT.', 'bestwebsoft' ),
    221         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/gpt-ai-content-creator/?k=f1ef1b7d7d05f93c570b940cc9acfe15&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    222         'settings'     => 'admin.php?page=gpt-ai-content-creator.php',
    223         'icon'         => bws_menu_url( 'icons/plugins/' ) . 'gpt-ai-content-creator.png',
    224         'pro_version'  => 'gpt-ai-content-creator-pro/gpt-ai-content-creator-pro.php',
    225         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/gpt-ai-content-creator/buy/?k=8b19619d4a36f8b42c5d4fbcbd9775bb&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    226         'pro_settings' => 'admin.php?page=gpt-ai-content-creator-pro.php',
    227     ),
    228     'htaccess/htaccess.php'                             => array(
     125    'htaccess/htaccess.php'                            => array(
    229126        'category'     => array( 'security' ),
    230127        'name'         => 'Htaccess',
     
    235132        'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/htaccess/buy/?k=59e9209a32864be534fda77d5e591c15&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    236133        'pro_settings' => 'admin.php?page=htaccess-pro.php',
    237     ),
    238     'job-board/job-board.php'                           => array(
    239         'category'    => array( 'ecommerce' ),
    240         'name'        => 'Job Board',
    241         'description' => __( 'Create your personal job board and listing WordPress website. Search jobs, submit CV/resumes, choose candidates.', 'bestwebsoft' ),
    242         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/job-board/?k=b0c504c9ce6edd6692e04222af3fed6f&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    243         'settings'    => 'admin.php?page=job-board.php',
    244134    ),
    245135    'limit-attempts/limit-attempts.php'                 => array(
     
    253143        'pro_settings' => 'admin.php?page=limit-attempts-pro.php',
    254144    ),
    255     'bws-linkedin/bws-linkedin.php'                     => array(
    256         'category'     => array( 'smm' ),
    257         'name'         => 'LinkedIn',
     145    'bws-login-register/bws-login-register.php'         => array(
     146        'category'     => array( 'admin-tools', 'navigation' ),
     147        'name'         => 'Login & Register Form',
    258148        'description'  => __( 'Add LinkedIn Share and Follow buttons to WordPress posts, pages and widgets. 5 plugins included – profile, insider, etc.', 'bestwebsoft' ),
    259         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/linkedin/?k=d63c7319622ccc5f589dd2d545c1d77c&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    260         'settings'     => 'admin.php?page=linkedin.php',
    261         'pro_version'  => 'bws-linkedin-pro/bws-linkedin-pro.php',
    262         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/linkedin/buy/?k=41dcc36192994408d24b103a02134567&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    263         'pro_settings' => 'admin.php?page=linkedin-pro.php',
     149        'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/login-and-register/?k=7d503ba164eca02ddf5b2c4942cbb953&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
     150        'settings'     => 'admin.php?page=login-register-form.php',
     151        'pro_version'  => 'bws-login-register-pro/bws-login-register-pro.php',
     152        'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/login-and-register/buy/?k=df2a23c0abf357439d325bf3953deaf8&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
     153        'pro_settings' => 'admin.php?page=bws-login-register-pro.php',
    264154    ),
    265155    'multilanguage/multilanguage.php'                   => array(
     
    293183        'pro_settings' => 'admin.php?page=pdf-print-pro.php',
    294184    ),
    295     'bws-pinterest/bws-pinterest.php'                   => array(
    296         'category'     => array( 'smm' ),
    297         'name'         => 'Pinterest',
    298         'description'  => __( 'Add Pinterest Follow, Pin It buttons and profile widgets (Pin, Board, Profile) to WordPress posts, pages and widgets.', 'bestwebsoft' ),
    299         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/pinterest/?k=504107b6213f247a67fe7ffb94e97c78&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    300         'settings'     => 'admin.php?page=pinterest.php',
    301         'pro_version'  => 'bws-pinterest-pro/bws-pinterest-pro.php',
    302         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/pinterest/buy/?k=ab0069edd1914a3ca8f541bfd88bb0bb&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    303         'pro_settings' => 'admin.php?page=pinterest-pro.php',
    304     ),
    305     'portfolio/portfolio.php'                           => array(
    306         'category'     => array( 'content', 'recommended' ),
    307         'name'         => 'Portfolio',
    308         'description'  => __( 'Create your personal portfolio WordPress website. Manage and showcase past projects to get more clients.', 'bestwebsoft' ),
    309         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/portfolio/?k=1249a890c5b7bba6bda3f528a94f768b&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    310         'settings'     => 'admin.php?page=portfolio.php',
    311         'pro_version'  => 'portfolio-pro/portfolio-pro.php',
    312         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/portfolio/buy/?k=2cc716026197d36538a414b728e49fdd&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    313         'pro_settings' => 'admin.php?page=portfolio-pro.php',
    314     ),
    315     'post-to-csv/post-to-csv.php'                       => array(
    316         'category'     => array( 'admin-tools' ),
    317         'name'         => 'Post to CSV',
    318         'description'  => __( 'Export WordPress posts to CSV file format easily. Configure data order.', 'bestwebsoft' ),
    319         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/post-to-csv/?k=653aa55518ae17409293a7a894268b8f&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    320         'settings'     => 'admin.php?page=post-to-csv.php',
    321         'pro_version'  => 'post-to-csv-pro/post-to-csv-pro.php',
    322         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/post-to-csv/buy/?k=b6521601d1579ed9c556ba98234f2d8f&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    323         'pro_settings' => 'admin.php?page=post-to-csv-pro.php',
    324     ),
    325185    'profile-extra-fields/profile-extra-fields.php'     => array(
    326186        'category'     => array( 'admin-tools' ),
     
    333193        'pro_settings' => 'admin.php?page=profile-extra-fields-pro.php',
    334194    ),
    335     'promobar/promobar.php'                             => array(
    336         'category'     => array( 'marketing' ),
    337         'name'         => 'PromoBar',
    338         'description'  => __( 'Add and display HTML advertisement banner on WordPress website. Customize bar styles and appearance.', 'bestwebsoft' ),
    339         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/promobar/?k=619eac2232d9cfa382c4e678c3b14766&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    340         'settings'     => 'admin.php?page=promobar.php',
    341         'pro_version'  => 'promobar-pro/promobar-pro.php',
    342         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/promobar/buy/?k=a9b09708502f12a1483532ba12fe2103&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    343         'pro_settings' => 'admin.php?page=promobar-pro.php',
    344     ),
    345195    'quotes-and-tips/quotes-and-tips.php'               => array(
    346196        'category'    => array( 'content' ),
     
    349199        'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/quotes-and-tips/?k=5738a4e85a798c4a5162240c6515098d&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    350200        'settings'    => 'admin.php?page=quotes-and-tips.php',
    351     ),
    352     'rating-bws/rating-bws.php'                         => array(
    353         'category'     => array( 'marketing' ),
    354         'name'         => 'Rating',
    355         'description'  => __( 'Add rating plugin to your WordPress website to receive feedback from your customers.', 'bestwebsoft' ),
    356         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/rating/?k=c00e0824bb999735a3224616ef51f4c5&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    357         'settings'     => 'admin.php?page=rating.php',
    358         'pro_version'  => 'rating-bws-pro/rating-bws-pro.php',
    359         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/rating/buy/?k=ba459f3115edb7be610e8d6f8e05df6c&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    360         'pro_settings' => 'admin.php?page=rating-bws-pro.php',
    361     ),
    362     'realty/realty.php'                                 => array(
    363         'category'     => array( 'ecommerce' ),
    364         'name'         => 'Realty',
    365         'description'  => __( 'Create your personal real estate WordPress website. Sell, rent and buy properties. Add, search and browse listings easily.', 'bestwebsoft' ),
    366         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/realty/?k=d55de979dbbbb7af0b2ff1d7f43884fa&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    367         'settings'     => 'admin.php?page=realty_settings',
    368         'pro_version'  => 'realty-pro/realty-pro.php',
    369         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/realty/buy/?k=c7791f0a72acfb36f564a614dbccb474&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    370         'pro_settings' => 'admin.php?page=realty_pro_settings',
    371     ),
    372     'relevant/related-posts-plugin.php'                 => array(
    373         'category'    => array( 'marketing', 'recommended' ),
    374         'name'        => 'Relevant - Related, Featured, Latest, and Popular Posts',
    375         'description' => __( 'Add related, featured, latest, and popular posts to your WordPress website. Connect your blog readers with a relevant content.', 'bestwebsoft' ),
    376         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/related-posts/?k=73fb737037f7141e66415ec259f7e426&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    377         'settings'    => 'admin.php?page=related-posts-plugin.php',
    378     ),
    379     'sender/sender.php'                                 => array(
    380         'category'     => array( 'marketing', 'recommended' ),
    381         'name'         => 'Sender',
    382         'description'  => __( 'Send bulk email messages to WordPress users. Custom templates, advanced settings and detailed reports.', 'bestwebsoft' ),
    383         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/sender/?k=89c297d14ba85a8417a0f2fc05e089c7&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    384         'settings'     => 'admin.php?page=sndr_settings',
    385         'pro_version'  => 'sender-pro/sender-pro.php',
    386         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/sender/buy/?k=dc5d1a87bdc8aeab2de40ffb99b38054&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    387         'pro_settings' => 'admin.php?page=sndrpr_settings',
    388     ),
    389     'slider-bws/slider-bws.php'                         => array(
    390         'category'    => array( 'content' ),
    391         'name'        => 'Slider',
    392         'description' => __( 'The best responsive slider plugin for your WordPress website. Create beautifully animated slides just in a few clicks.', 'bestwebsoft' ),
    393         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/slider/?k=02acebf8531b2995e7de8474ae28e290&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    394         'settings'    => 'admin.php?page=slider-settings.php',
    395     ),
    396     'bws-smtp/bws-smtp.php'                             => array(
    397         'category'    => array( 'admin-tools' ),
    398         'name'        => 'SMTP',
    399         'description' => __( 'Configure SMTP server to receive email messages from WordPress to Gmail, Yahoo, Hotmail and other services.', 'bestwebsoft' ),
    400         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/smtp/?k=0546419f962704429ad2d9b88567752f&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    401         'settings'    => 'admin.php?page=bwssmtp_settings',
    402     ),
    403     'social-buttons-pack/social-buttons-pack.php'       => array(
    404         'category'     => array( 'smm', 'recommended' ),
    405         'name'         => 'Social Buttons Pack',
    406         'description'  => __( 'Add social media buttons and widgets to WordPress posts, pages and widgets. FB, Twitter, Pinterest, LinkedIn.', 'bestwebsoft' ),
    407         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/social-buttons-pack/?k=b6440fad9f54274429e536b0c61b42da&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    408         'settings'     => 'admin.php?page=social-buttons.php',
    409         'pro_version'  => 'social-buttons-pack-pro/social-buttons-pack-pro.php',
    410         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/social-buttons-pack/buy/?k=e7059cacde0d275b224a5d995c9160fd&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    411         'pro_settings' => 'admin.php?page=social-buttons-pro.php',
    412     ),
    413     'social-login-bws/social-login-bws.php'             => array(
    414         'category'    => array( 'smm' ),
    415         'name'        => 'Social Login',
    416         'description' => __( 'Add social media login, registration, and commenting to your WordPress website.', 'bestwebsoft' ),
    417         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/social-login/?k=62817c9c94f24129e40894e1d9c3f49d&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    418         'settings'    => 'admin.php?page=social-login.php',
    419     ),
    420     'subscriber/subscriber.php'                         => array(
    421         'category'     => array( 'marketing', 'recommended' ),
    422         'name'         => 'Subscriber',
    423         'description'  => __( 'Add email newsletter sign up form to WordPress posts, pages and widgets. Collect data and subscribe your users.', 'bestwebsoft' ),
    424         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/subscriber/?k=a4ecc1b7800bae7329fbe8b4b04e9c88&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    425         'settings'     => 'admin.php?page=subscriber.php',
    426         'pro_version'  => 'subscriber-pro/subscriber-pro.php',
    427         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/subscriber/buy/?k=02dbb8b549925d9b74e70adc2a7282e4&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    428         'pro_settings' => 'admin.php?page=subscriber-pro.php',
    429     ),
    430     'bws-testimonials/bws-testimonials.php'             => array(
    431         'category'    => array( 'marketing', 'recommended' ),
    432         'name'        => 'Testimonials',
    433         'description' => __( 'Add testimonials and feedbacks from your customers to WordPress website posts, pages, and widgets.', 'bestwebsoft' ),
    434         'link'        => 'https://bestwebsoft.com/products/wordpress/plugins/testimonials/?k=3fe4bb89dc901c98e43a113e08f8db73&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    435         'settings'    => 'admin.php?page=testimonials.php',
    436         'pro_version'  => 'bws-testimonials-pro/bws-testimonials-pro.php',
    437         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/testimonials/buy/?k=3fe4bb89dc901c98e43a113e08f8db73&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    438         'pro_settings' => 'edit.php?post_type=bws-testimonial&page=testimonials-ro.php',
    439     ),
    440     'timesheet/timesheet.php'                           => array(
    441         'category'     => array( 'admin-tools' ),
    442         'name'         => 'Timesheet',
    443         'description'  => __( 'Best timesheet plugin for WordPress. Track employee time, streamline attendance and generate reports.', 'bestwebsoft' ),
    444         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/timesheet/?k=06a58bb78c17a43df01825925f05a5c1&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    445         'settings'     => 'admin.php?page=timesheet_settings',
    446         'pro_version'  => 'timesheet-pro/timesheet-pro.php',
    447         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/timesheet/buy/?k=a448ce4cab0d365b7774c9bc3903b851&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    448         'pro_settings' => 'admin.php?page=timesheet_pro_settings',
    449     ),
    450     'twitter-plugin/twitter.php'                        => array(
    451         'category'     => array( 'smm' ),
    452         'name'         => 'Twitter',
    453         'description'  => __( 'Add Twitter Follow, Tweet, Hashtag, and Mention buttons to WordPress posts and pages.', 'bestwebsoft' ),
    454         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/twitter/?k=f8cb514e25bd7ec4974d64435c5eb333&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    455         'settings'     => 'admin.php?page=twitter.php',
    456         'pro_version'  => 'twitter-pro/twitter-pro.php',
    457         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/twitter/buy/?k=63ecbf0cc9cebf060b5a3c9362299700&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    458         'pro_settings' => 'admin.php?page=twitter-pro.php',
    459201    ),
    460202    'updater/updater.php'                               => array(
     
    478220        'pro_settings' => 'admin.php?page=user-role-pro.php',
    479221    ),
    480     'visitors-online/visitors-online.php'               => array(
    481         'category'     => array( 'admin-tools' ),
    482         'name'         => 'Visitors Online',
    483         'description'  => __( 'Display live count of online visitors who are currently browsing your WordPress website.', 'bestwebsoft' ),
    484         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/visitors-online/?k=93c28013a4f830671b3bba9502ed5177&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    485         'settings'     => 'admin.php?page=visitors-online.php',
    486         'pro_version'  => 'visitors-online-pro/visitors-online-pro.php',
    487         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/visitors-online/buy/?k=f9a746075ff8a0a6cb192cb46526afd2&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    488         'pro_settings' => 'admin.php?page=visitors-online-pro.php',
    489     ),
    490     'zendesk-help-center/zendesk-help-center.php'       => array(
    491         'category'     => array( 'admin-tools' ),
    492         'name'         => 'Help Center',
    493         'description'  => __( 'Backup and export Zendesk Help Center content automatically to your WordPress website database.', 'bestwebsoft' ),
    494         'link'         => 'https://bestwebsoft.com/products/wordpress/plugins/zendesk-help-center/?k=2a5fd2f4b2f4bde46f2ca44b8d15846d&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    495         'settings'     => 'admin.php?page=zendesk_hc.php',
    496         'pro_version'  => 'zendesk-help-center-pro/zendesk-help-center-pro.php',
    497         'purchase'     => 'https://bestwebsoft.com/products/wordpress/plugins/zendesk-help-center/buy/?k=45199e4538b5befe4d9566868a61a3aa&pn=' . $bws_plugin_info['id'] . '&v=' . $bws_plugin_info['version'] . '&wp_v=' . $wp_version,
    498         'pro_settings' => 'admin.php?page=zendesk_hc_pro.php',
    499     ),
    500222);
    501223
  • profile-extra-fields/trunk/includes/class-prflxtrflds-settings.php

    r3312528 r3494846  
    6464                $this->options['user_section_profile_title'] = isset( $_POST['prflxtrflds_user_section_profile_title'] ) ? sanitize_text_field( wp_unslash( $_POST['prflxtrflds_user_section_profile_title'] ) ) : $this->options['user_section_profile_title'];
    6565                $this->options['user_section_car_title']     = isset( $_POST['prflxtrflds_user_section_car_title'] ) ? sanitize_text_field( wp_unslash( $_POST['prflxtrflds_user_section_car_title'] ) ) : $this->options['user_section_car_title'];
     66               
     67                $this->options['notify_admin_register'] = isset( $_POST['prflxtrflds_notify_admin_register'] ) ? 1 : 0;
     68                $this->options['notify_user_register']  = isset( $_POST['prflxtrflds_notify_user_register'] ) ? 1 : 0;
     69               
     70                $this->options['notify_admin_register_subject'] = isset( $_POST['prflxtrflds_notify_admin_register_subject'] ) ? wp_kses_post( wp_unslash( $_POST['prflxtrflds_notify_admin_register_subject'] ) ) : $this->options['notify_admin_register_subject'];
     71                $this->options['notify_admin_register_message'] = isset( $_POST['prflxtrflds_notify_admin_register_message'] ) ? wp_kses_post( wp_unslash( $_POST['prflxtrflds_notify_admin_register_message'] ) ) : $this->options['notify_admin_register_message'];
     72
     73                $this->options['notify_user_register_subject'] = isset( $_POST['prflxtrflds_notify_user_register_subject'] ) ? wp_kses_post( wp_unslash( $_POST['prflxtrflds_notify_user_register_subject'] ) ) : $this->options['notify_user_register_subject'];
     74                $this->options['notify_user_register_message'] = isset( $_POST['prflxtrflds_notify_user_register_message'] ) ? wp_kses_post( wp_unslash( $_POST['prflxtrflds_notify_user_register_message'] ) ) : $this->options['notify_user_register_message'];
    6675
    6776                update_option( 'prflxtrflds_options', $this->options );
     
    99108                        </label>
    100109                    </td>
    101                 </tr>                           
     110                </tr>
    102111            </table>
    103112            <?php wp_nonce_field( 'prflxtrflds_settings_action', 'prflxtrflds_settings_nonce_field' ); ?>
     
    144153                                </td>
    145154                            </tr>
     155                            <tr valign="top">
     156                                <th scope="row"><?php esc_html_e( 'Admin Notification — Profile Updated', 'profile-extra-fields' ); ?> </th>
     157                                <td>
     158                                    <label>
     159                                        <input type="checkbox" value="1" disabled="disabled" />
     160                                        <span class="bws_info"><?php esc_html_e( 'Allows you to receive an email when a user\'s profile is updated', 'profile-extra-fields' ); ?></span>
     161                                    </label>
     162                                </td>
     163                            </tr>
     164                            <tr valign="top">
     165                                <th scope="row"><?php esc_html_e( 'Profile Updated Subject', 'profile-extra-fields' ); ?> </th>
     166                                <td>
     167                                    <label>
     168                                        <input class="regular-text" type="text" disabled="disabled" value="<?php echo esc_html( $this->options['notify_admin_update_subject'] ); ?>" />
     169                                    </label>
     170                                </td>
     171                            </tr>
     172                            <tr valign="top" class="prflxtrflds_notify_admin_update">
     173                                <th scope="row"><?php esc_html_e( 'Profile Updated Message', 'profile-extra-fields' ); ?> </th>
     174                                <td>
     175                                    <label>
     176                                        <textarea disabled="disabled" rows="7"><?php echo esc_html( $this->options['notify_admin_update_message'] ); ?></textarea>
     177                                        <span class="bws_info"><?php esc_html_e( 'You can use the following shortcodes in your message', 'profile-extra-fields' ); ?>: <code>{username}</code>, <code>{email}</code>, <code>{dashboardurl}</code></span>
     178                                    </label>
     179                                </td>
     180                            </tr>
     181                            <tr valign="top">
     182                                <th scope="row"><?php esc_html_e( 'User Notification — Profile Updated', 'profile-extra-fields' ); ?> </th>
     183                                <td>
     184                                    <label>
     185                                        <input type="checkbox" disabled="disabled" value="1" />
     186                                        <span class="bws_info"><?php esc_html_e( 'Allows the user to receive an email upon successful profile update', 'profile-extra-fields' ); ?></span>
     187                                    </label>
     188                                </td>
     189                            </tr>
     190                            <tr valign="top" class="prflxtrflds_notify_user_update">
     191                                <th scope="row"><?php esc_html_e( 'Profile Updated Subject', 'profile-extra-fields' ); ?> </th>
     192                                <td>
     193                                    <label>
     194                                        <input class="regular-text" type="text" disabled="disabled" value="<?php echo esc_html( $this->options['notify_user_update_subject'] ); ?>" />
     195                                    </label>
     196                                </td>
     197                            </tr>
     198                            <tr valign="top" class="prflxtrflds_notify_user_update">
     199                                <th scope="row"><?php esc_html_e( 'Profile Updated Message', 'profile-extra-fields' ); ?> </th>
     200                                <td>
     201                                    <label>
     202                                        <textarea disabled="disabled" rows="7"><?php echo esc_html( $this->options['notify_user_update_message'] ); ?></textarea>
     203                                        <span class="bws_info"><?php esc_html_e( 'You can use the following shortcodes in your message', 'profile-extra-fields' ); ?>: <code>{username}</code>, <code>{loginurl}</code></span>
     204                                    </label>
     205                                </td>
     206                            </tr>
    146207                        </table>
    147208                    </div>
     
    150211                <?php
    151212            }
     213            ?>
     214            <table class="form-table ">
     215                <tr valign="top">
     216                    <th scope="row"><?php esc_html_e( 'Admin Notification — New User Registration', 'profile-extra-fields' ); ?> </th>
     217                    <td>
     218                        <label>
     219                            <input type="checkbox" id="prflxtrflds_notify_admin_register" name="prflxtrflds_notify_admin_register" <?php checked( 1, $this->options['notify_admin_register'] ); ?> value="1" />
     220                            <span class="bws_info"><?php esc_html_e( 'Allows you to replace the default email when registering a user', 'profile-extra-fields' ); ?></span>
     221                        </label>
     222                    </td>
     223                </tr>
     224                <tr valign="top" class="prflxtrflds_notify_admin_register">
     225                    <th scope="row"><?php esc_html_e( 'New User Registration Subject', 'profile-extra-fields' ); ?> </th>
     226                    <td>
     227                        <label>
     228                            <input class="regular-text" type="text" name="prflxtrflds_notify_admin_register_subject" value="<?php echo esc_html( $this->options['notify_admin_register_subject'] ); ?>" />
     229                        </label>
     230                    </td>
     231                </tr>
     232                <tr valign="top" class="prflxtrflds_notify_admin_register">
     233                    <th scope="row"><?php esc_html_e( 'New User Registration Message', 'profile-extra-fields' ); ?> </th>
     234                    <td>
     235                        <label>
     236                            <textarea name="prflxtrflds_notify_admin_register_message" rows="7"><?php echo esc_html( $this->options['notify_admin_register_message'] ); ?></textarea>
     237                            <span class="bws_info"><?php esc_html_e( 'You can use the following shortcodes in your message', 'profile-extra-fields' ); ?>: <code>{username}</code>, <code>{email}</code>, <code>{date}</code>, <code>{profile_extra_fields}</code>, <code>{dashboardurl}</code></span>
     238                        </label>
     239                    </td>
     240                </tr>
     241                <tr valign="top">
     242                    <th scope="row"><?php esc_html_e( 'User Notification — Registration Successful', 'profile-extra-fields' ); ?> </th>
     243                    <td>
     244                        <label>
     245                            <input type="checkbox" id="prflxtrflds_notify_user_register" name="prflxtrflds_notify_user_register" <?php checked( 1, $this->options['notify_user_register'] ); ?> value="1" />
     246                            <span class="bws_info"><?php esc_html_e( 'Allows the user to receive an email upon successful registration', 'profile-extra-fields' ); ?></span>
     247                        </label>
     248                    </td>
     249                </tr>
     250                <tr valign="top" class="prflxtrflds_notify_user_register">
     251                    <th scope="row"><?php esc_html_e( 'Registration Successful Subject', 'profile-extra-fields' ); ?> </th>
     252                    <td>
     253                        <label>
     254                            <input class="regular-text" type="text" name="prflxtrflds_notify_user_register_subject" value="<?php echo esc_html( $this->options['notify_user_register_subject'] ); ?>" />
     255                        </label>
     256                    </td>
     257                </tr>
     258                <tr valign="top" class="prflxtrflds_notify_user_register">
     259                    <th scope="row"><?php esc_html_e( 'Registration Successful Message', 'profile-extra-fields' ); ?> </th>
     260                    <td>
     261                        <label>
     262                            <textarea name="prflxtrflds_notify_user_register_message" rows="7"><?php echo esc_html( $this->options['notify_user_register_message'] ); ?></textarea>
     263                            <span class="bws_info"><?php esc_html_e( 'You can use the following shortcodes in your message', 'profile-extra-fields' ); ?>: <code>{username}</code>, <code>{loginurl}</code></span>
     264                        </label>
     265                    </td>
     266                </tr>
     267            </table>
     268            <?php
    152269        }
    153270
  • profile-extra-fields/trunk/js/script.js

    r2638642 r3494846  
    22    $( document ).ready(
    33        function() {
    4                 /* Show trash icon */
    5                 $( '.prflxtrflds-value-delete input' ).addClass( 'prflxtrflds-value-delete-check' );
    6                 $( '.prflxtrflds-value-delete label' ).click(
    7                     function() {
    8                         /* clear value */
    9                         $( this ).parent().parent().children( 'input.prflxtrflds-add-options-input' ).val( '' );
    10                         /* hide field */
    11                         $( this ).parent().parent().hide();
    12 
    13                         if ( 'function' == typeof bws_show_settings_notice ) {
    14                             bws_show_settings_notice();
    15                         }
    16                     }
    17                 );
    18                 /* Add additional fields for checkbox, radio, select */
    19                 $( '#prflxtrflds-add-field' ).click(
    20                     function() {
    21                         /* Clone previous input */
    22                         var lastfield = $( '.prflxtrflds-drag-values' ).last().clone( true );
    23                         /* remove hidden input */
    24                         lastfield.children( 'input.hidden' ).remove();
    25                         /* clear textfield */
    26                         lastfield.children( 'input.prflxtrflds-add-options-input' ).val( '' );
    27                         /* Insert field before button */
    28                         lastfield.clone( true ).removeClass( 'hide-if-js' ).show().insertAfter( $( '.prflxtrflds-drag-values' ).last() );
    29                     }
    30                 );
    31                 /* Show fields for diffrent field type */
    32                 $( '#prflxtrflds-select-type' ).on(
    33                     'change',
    34                     function() {
    35                         type_value = $( this ).val();
    36                         $( '.prflxtrflds-fields-container, .prflxtrflds-pattern, .prflxtrflds-time-format, .prflxtrflds-date-format, .prflxtrflds-maxlength, .prflxtrflds-rows, .prflxtrflds-cols, .prflxtrflds-selected-extensions' ).hide();
    37                         $( '.prflxtrflds-fields-edit-table' ).show();
    38 
    39                         if ( '3' == type_value || '4' == type_value || '5' == type_value ) {
    40                               $( '.prflxtrflds-fields-container' ).show();
    41                         } else if ( '10' == type_value ) {
    42                             $( '.prflxtrflds-pattern' ).show();
    43                         } else if ( '12' == type_value ) {
    44                             $( '.prflxtrflds-selected-extensions' ).show();
    45                         } else {
    46                             if ( '6' == type_value || '8' == type_value ) {
    47                                 $( '.prflxtrflds-date-format' ).show();
    48                             }
    49                             if ( '7' == type_value || '8' == type_value ) {
    50                                 $( '.prflxtrflds-time-format' ).show();
    51                             }
    52                             if ( '1' == type_value || '9' == type_value || '11' == type_value ) {
    53                                 $( '.prflxtrflds-maxlength' ).show();
    54                             }
    55                             if ( '2' == type_value ) {
    56                                 $( '.prflxtrflds-rows, .prflxtrflds-cols, .prflxtrflds-maxlength' ).show();
    57                             }
    58                         }
    59                     }
    60                 ).trigger( 'change' );
    61 
    62                 $( "input[name='prflxtrflds_date_format']" ).click(
    63                     function(){
    64                         if ( "prflxtrflds_date_format_custom_radio" != $( this ).attr( "id" ) ) {
    65                             $( "input[name='prflxtrflds_date_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).text() );
    66                         }
    67                     }
    68                 );
    69                 $( "input[name='prflxtrflds_date_format_custom']" ).focus(
    70                     function(){
    71                         $( '#prflxtrflds_date_format_custom_radio' ).prop( 'checked', true );
    72                     }
    73                 );
    74 
    75                 $( "input[name='prflxtrflds_time_format']" ).click(
    76                     function(){
    77                         if ( "prflxtrflds_time_format_custom_radio" != $( this ).attr( "id" ) ) {
    78                             $( "input[name='prflxtrflds_time_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).text() );
    79                         }
    80                     }
    81                 );
    82                 $( "input[name='prflxtrflds_time_format_custom']" ).focus(
    83                     function(){
    84                         $( '#prflxtrflds_time_format_custom_radio' ).prop( 'checked', true );
    85                     }
    86                 );
    87                 $( "input[name='prflxtrflds_date_format_custom'], input[name='prflxtrflds_time_format_custom']" ).change(
    88                     function() {
    89                         var format = $( this );
    90                         format.siblings( '.spinner' ).addClass( 'is-active' );
    91                         $.post(
    92                             ajaxurl,
    93                             {
    94                                 action: 'prflxtrflds_date_format_custom' == format.attr( 'name' ) ? 'date_format' : 'time_format',
    95                                 date : format.val()
    96                             },
    97                             function( d ) { format.siblings( '.spinner' ).removeClass( 'is-active' ); format.siblings( '.example' ).text( d ); }
    98                         );
    99                     }
    100                 );
     4            /* Show trash icon */
     5            $( '.prflxtrflds-value-delete input' ).addClass( 'prflxtrflds-value-delete-check' );
     6            $( '.prflxtrflds-value-delete label' ).click(
     7                function() {
     8                    /* clear value */
     9                    $( this ).parent().parent().children( 'input.prflxtrflds-add-options-input' ).val( '' );
     10                    /* hide field */
     11                    $( this ).parent().parent().hide();
     12
     13                    if ( 'function' == typeof bws_show_settings_notice ) {
     14                        bws_show_settings_notice();
     15                    }
     16                }
     17            );
     18            /* Add additional fields for checkbox, radio, select */
     19            $( '#prflxtrflds-add-field' ).click(
     20                function() {
     21                    /* Clone previous input */
     22                    var lastfield = $( '.prflxtrflds-drag-values' ).last().clone( true );
     23                    /* remove hidden input */
     24                    lastfield.children( 'input.hidden' ).remove();
     25                    /* clear textfield */
     26                    lastfield.children( 'input.prflxtrflds-add-options-input' ).val( '' );
     27                    /* Insert field before button */
     28                    lastfield.clone( true ).removeClass( 'hide-if-js' ).show().insertAfter( $( '.prflxtrflds-drag-values' ).last() );
     29                }
     30            );
     31            /* Show fields for diffrent field type */
     32            $( '#prflxtrflds-select-type' ).on(
     33                'change',
     34                function() {
     35                    type_value = $( this ).val();
     36                    $( '.prflxtrflds-fields-container, .prflxtrflds-pattern, .prflxtrflds-time-format, .prflxtrflds-date-format, .prflxtrflds-maxlength, .prflxtrflds-rows, .prflxtrflds-cols, .prflxtrflds-selected-extensions' ).hide();
     37                    $( '.prflxtrflds-fields-edit-table' ).show();
     38
     39                    if ( '3' == type_value || '4' == type_value || '5' == type_value ) {
     40                          $( '.prflxtrflds-fields-container' ).show();
     41                    } else if ( '10' == type_value ) {
     42                        $( '.prflxtrflds-pattern' ).show();
     43                    } else if ( '12' == type_value ) {
     44                        $( '.prflxtrflds-selected-extensions' ).show();
     45                    } else {
     46                        if ( '6' == type_value || '8' == type_value ) {
     47                            $( '.prflxtrflds-date-format' ).show();
     48                        }
     49                        if ( '7' == type_value || '8' == type_value ) {
     50                            $( '.prflxtrflds-time-format' ).show();
     51                        }
     52                        if ( '1' == type_value || '9' == type_value || '11' == type_value ) {
     53                            $( '.prflxtrflds-maxlength' ).show();
     54                        }
     55                        if ( '2' == type_value ) {
     56                            $( '.prflxtrflds-rows, .prflxtrflds-cols, .prflxtrflds-maxlength' ).show();
     57                        }
     58                    }
     59                }
     60            ).trigger( 'change' );
     61
     62            $( "input[name='prflxtrflds_date_format']" ).click(
     63                function(){
     64                    if ( "prflxtrflds_date_format_custom_radio" != $( this ).attr( "id" ) ) {
     65                        $( "input[name='prflxtrflds_date_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).text() );
     66                    }
     67                }
     68            );
     69            $( "input[name='prflxtrflds_date_format_custom']" ).focus(
     70                function(){
     71                    $( '#prflxtrflds_date_format_custom_radio' ).prop( 'checked', true );
     72                }
     73            );
     74
     75            $( "input[name='prflxtrflds_time_format']" ).click(
     76                function(){
     77                    if ( "prflxtrflds_time_format_custom_radio" != $( this ).attr( "id" ) ) {
     78                        $( "input[name='prflxtrflds_time_format_custom']" ).val( $( this ).val() ).siblings( '.example' ).text( $( this ).parent( 'label' ).text() );
     79                    }
     80                }
     81            );
     82            $( "input[name='prflxtrflds_time_format_custom']" ).focus(
     83                function(){
     84                    $( '#prflxtrflds_time_format_custom_radio' ).prop( 'checked', true );
     85                }
     86            );
     87            $( "input[name='prflxtrflds_date_format_custom'], input[name='prflxtrflds_time_format_custom']" ).change(
     88                function() {
     89                    var format = $( this );
     90                    format.siblings( '.spinner' ).addClass( 'is-active' );
     91                    $.post(
     92                        ajaxurl,
     93                        {
     94                            action: 'prflxtrflds_date_format_custom' == format.attr( 'name' ) ? 'date_format' : 'time_format',
     95                            date : format.val()
     96                        },
     97                        function( d ) { format.siblings( '.spinner' ).removeClass( 'is-active' ); format.siblings( '.example' ).text( d ); }
     98                    );
     99                }
     100            );
    101101
    102102                /* Sortable table settings */
     
    152152            }
    153153
    154                 /* Disable select if field unchecked after render page */
    155                 $( '.prflxtrflds-available-fields' ).each(
    156                     function() {
    157                         if ( ! this.checked ) {
    158                             $( this ).parent().next().children( 'select' ).prop( 'disabled', 'disabled' );
    159                         }
    160                     }
    161                 );
    162                 /* Dynamic enable or disable select */
    163                 $( '.prflxtrflds-available-fields' ).change(
    164                     function() {
    165                         if ( this.checked ) {
    166                             $( this ).parent().next().children( 'select' ).prop( 'disabled', false );
    167                         } else {
    168                             $( this ).parent().next().children( 'select' ).prop( 'disabled', 'disabled' );
    169                         }
    170                     }
    171                 );
    172 
    173                 $( '[id*=prflxtrflds-show-in-]' ).on(
    174                     'click',
    175                     function() {
    176                         if ( $( this ).is( ':checked' ) ) {
    177                               $( '.' + this.id ).show();
    178                         } else {
    179                             $( '.' + this.id ).hide().find( '[type="checkbox"]' ).prop( 'checked', false );
    180                         }
    181                     }
    182                 );
    183 
    184                 $( '[id*=prflxtrflds-show-in-]' ).each(
    185                     function() {
    186                         if ( $( this ).is( ':checked' ) ) {
    187                               $( '.' + this.id ).show();
    188                         } else {
    189                             $( '.' + this.id ).hide();
    190                         }
    191                     }
    192                 );
    193 
    194                 /* Make inputs always send value */
    195                 $( '.prflxtrflds-hidden-checkbox' ).each(
    196                     function( i, e ) {
    197                         e.disabled = $( '[type="checkbox"][name="' + e.name + '"]' ).prop( 'checked' );
    198 
    199                         $( '[name="' + e.name + '"]' ).change(
    200                             function( e ) {
    201                                 $( '[type="hidden"][name="' + e.target.name + '"]' ).prop( 'disabled', e.target.checked );
    202                             }
    203                         );
    204                     }
    205                 );
    206 
    207                 /* Show 'select all' checkbox if js enabled */
    208                 $( '#prflxtrflds-div-select-all' ).show();
    209 
    210                 $( '.prflxtrflds-checkboxes-select-all-in-roles' ).on(
    211                     'click',
    212                     function() {
    213                         var $parent        = $( this ).closest( 'td' ),
    214                         $child_cb          = $parent.find( '.prflxtrflds-checkboxes-in-roles' ),
    215                         $child_cb_disabled = $parent.find( '.prflxtrflds-checkboxes-in-roles' ).filter( ':disabled' );
    216                         if ( $( this ).is( ':checked' ) ) {
    217                               $child_cb.prop( 'checked', true ).trigger( 'change' );
    218                               $child_cb_disabled.removeAttr( 'checked' ).trigger( 'change' );
    219                         } else {
    220                             $child_cb.removeAttr( 'checked' ).trigger( 'change' );
    221                         }
    222                     }
    223                 );
    224 
    225                 $( '.prflxtrflds-checkboxes-in-roles' ).on(
    226                     'change',
    227                     function() {
    228                         var $parent = $( this ).closest( 'td' ),
    229                         $cb_all     = $parent.find( '.prflxtrflds-checkboxes-select-all-in-roles' ),
    230 
    231                         $checkboxes         = $parent.find( '.prflxtrflds-checkboxes-in-roles' ).filter( ':enabled' ),
    232                         $enabled_checkboxes = $checkboxes.filter( ':checked' );
    233 
    234                         if ( $checkboxes.length > 0 && $checkboxes.length == $enabled_checkboxes.length ) {
    235                               $cb_all.prop( 'checked', true );
    236                               $cb_all.removeAttr( 'disabled' );
    237                         } else {
    238                             $cb_all.removeAttr( 'checked' );
    239                             $cb_all.removeAttr( 'disabled' );
    240                         }
    241                     }
    242                 ).trigger( 'change' );
    243 
    244                 $( '.prflxtrflds-checkboxes-available' ).on(
    245                     'change',
    246                     function() {
    247                         var $parent = $( this ).closest( 'td' ),
    248                         role_id     = $( this ).data( 'prflxtrflds-role-id' ),
    249                         checkboxes  = $( '.prflxtrflds-checkboxes-editable[data-prflxtrflds-role-id="' + role_id + '"], .prflxtrflds-checkboxes-visible[data-prflxtrflds-role-id="' + role_id + '"]' );
    250                         if ( $( this ).is( ':checked' ) ) {
    251                               checkboxes.removeAttr( 'checked' ).trigger( 'change' );
    252                               checkboxes.removeAttr( 'disabled' ).trigger( 'change' );
    253                         } else {
    254                             checkboxes.prop( 'disabled', true ).trigger( 'change' );
    255                             checkboxes.removeAttr( 'checked' ).trigger( 'change' );
    256                         }
    257                     }
    258                 );
    259 
    260                 var table = $( 'table.toplevel_page_profile-extra-fields' );
     154            /* Disable select if field unchecked after render page */
     155            $( '.prflxtrflds-available-fields' ).each(
     156                function() {
     157                    if ( ! this.checked ) {
     158                        $( this ).parent().next().children( 'select' ).prop( 'disabled', 'disabled' );
     159                    }
     160                }
     161            );
     162            /* Dynamic enable or disable select */
     163            $( '.prflxtrflds-available-fields' ).change(
     164                function() {
     165                    if ( this.checked ) {
     166                        $( this ).parent().next().children( 'select' ).prop( 'disabled', false );
     167                    } else {
     168                        $( this ).parent().next().children( 'select' ).prop( 'disabled', 'disabled' );
     169                    }
     170                }
     171            );
     172
     173            $( '[id*=prflxtrflds-show-in-]' ).on(
     174                'click',
     175                function() {
     176                    if ( $( this ).is( ':checked' ) ) {
     177                          $( '.' + this.id ).show();
     178                    } else {
     179                        $( '.' + this.id ).hide().find( '[type="checkbox"]' ).prop( 'checked', false );
     180                    }
     181                }
     182            );
     183
     184            $( '[id*=prflxtrflds-show-in-]' ).each(
     185                function() {
     186                    if ( $( this ).is( ':checked' ) ) {
     187                          $( '.' + this.id ).show();
     188                    } else {
     189                        $( '.' + this.id ).hide();
     190                    }
     191                }
     192            );
     193
     194            /* Make inputs always send value */
     195            $( '.prflxtrflds-hidden-checkbox' ).each(
     196                function( i, e ) {
     197                    e.disabled = $( '[type="checkbox"][name="' + e.name + '"]' ).prop( 'checked' );
     198
     199                    $( '[name="' + e.name + '"]' ).change(
     200                        function( e ) {
     201                            $( '[type="hidden"][name="' + e.target.name + '"]' ).prop( 'disabled', e.target.checked );
     202                        }
     203                    );
     204                }
     205            );
     206
     207            /* Show 'select all' checkbox if js enabled */
     208            $( '#prflxtrflds-div-select-all' ).show();
     209
     210            $( '.prflxtrflds-checkboxes-select-all-in-roles' ).on(
     211                'click',
     212                function() {
     213                    var $parent        = $( this ).closest( 'td' ),
     214                    $child_cb          = $parent.find( '.prflxtrflds-checkboxes-in-roles' ),
     215                    $child_cb_disabled = $parent.find( '.prflxtrflds-checkboxes-in-roles' ).filter( ':disabled' );
     216                    if ( $( this ).is( ':checked' ) ) {
     217                          $child_cb.prop( 'checked', true ).trigger( 'change' );
     218                          $child_cb_disabled.removeAttr( 'checked' ).trigger( 'change' );
     219                    } else {
     220                        $child_cb.removeAttr( 'checked' ).trigger( 'change' );
     221                    }
     222                }
     223            );
     224
     225            $( '.prflxtrflds-checkboxes-in-roles' ).on(
     226                'change',
     227                function() {
     228                    var $parent = $( this ).closest( 'td' ),
     229                    $cb_all     = $parent.find( '.prflxtrflds-checkboxes-select-all-in-roles' ),
     230
     231                    $checkboxes         = $parent.find( '.prflxtrflds-checkboxes-in-roles' ).filter( ':enabled' ),
     232                    $enabled_checkboxes = $checkboxes.filter( ':checked' );
     233
     234                    if ( $checkboxes.length > 0 && $checkboxes.length == $enabled_checkboxes.length ) {
     235                          $cb_all.prop( 'checked', true );
     236                          $cb_all.removeAttr( 'disabled' );
     237                    } else {
     238                        $cb_all.removeAttr( 'checked' );
     239                        $cb_all.removeAttr( 'disabled' );
     240                    }
     241                }
     242            ).trigger( 'change' );
     243
     244            $( '.prflxtrflds-checkboxes-available' ).on(
     245                'change',
     246                function() {
     247                    var $parent = $( this ).closest( 'td' ),
     248                    role_id     = $( this ).data( 'prflxtrflds-role-id' ),
     249                    checkboxes  = $( '.prflxtrflds-checkboxes-editable[data-prflxtrflds-role-id="' + role_id + '"], .prflxtrflds-checkboxes-visible[data-prflxtrflds-role-id="' + role_id + '"]' );
     250                    if ( $( this ).is( ':checked' ) ) {
     251                          checkboxes.removeAttr( 'checked' ).trigger( 'change' );
     252                          checkboxes.removeAttr( 'disabled' ).trigger( 'change' );
     253                    } else {
     254                        checkboxes.prop( 'disabled', true ).trigger( 'change' );
     255                        checkboxes.removeAttr( 'checked' ).trigger( 'change' );
     256                    }
     257                }
     258            );
     259
     260            var table = $( 'table.toplevel_page_profile-extra-fields' );
    261261            if ( table.length > 1 ) {
    262262                table.wrap( '<div class="postbox prflxtrflds-table-wrap"><div class="inside"></div></div>' );
     
    284284                    );
    285285            }
     286
     287            $( '#prflxtrflds_notify_admin_register' ).on(
     288                'change',
     289                function() {
     290                    if ( this.checked ) {
     291                        $( '.prflxtrflds_notify_admin_register' ).show();
     292                    } else {
     293                        $( '.prflxtrflds_notify_admin_register' ).hide();
     294                    }
     295                }
     296            ).trigger( 'change' );
     297
     298            $( '#prflxtrflds_notify_user_register' ).on(
     299                'change',
     300                function() {
     301                    if ( this.checked ) {
     302                        $( '.prflxtrflds_notify_user_register' ).show();
     303                    } else {
     304                        $( '.prflxtrflds_notify_user_register' ).hide();
     305                    }
     306                }
     307            ).trigger( 'change' );
    286308        }
    287309    );
  • profile-extra-fields/trunk/profile-extra-fields.php

    r3317011 r3494846  
    77Text Domain: profile-extra-fields
    88Domain Path: /languages
    9 Version: 1.3.2
     9Version: 1.3.3
    1010Author URI: https://bestwebsoft.com/
    1111License: GPLv3 or later
     
    419419        /** Create array with default options */
    420420        return array(
    421             'plugin_option_version'      => $prflxtrflds_plugin_info['Version'],
    422             'display_settings_notice'    => 1,
    423             'suggest_feature_banner'     => 1,
    424             'sort_sequence'              => 'ASC',
    425             'available_fields'           => array(),
    426             'available_values'           => array(),
    427             'show_empty_columns'         => 0,
    428             'show_id'                    => 1,
    429             'header_table'               => 'columns', /*rows */
    430             'empty_value'                => __( 'The field is empty', 'profile-extra-fields' ),
    431             'not_available_message'      => __( 'N/A', 'profile-extra-fields' ),
    432             'shortcode_debug'            => 1,
    433             'display_user_name'          => 'username',
    434             'user_section_profile_title' => __( 'Profile Extra Fields', 'profile-extra-fields' ),
    435             'user_section_car_title'     => __( 'Car Rental V2 Extra Fields', 'profile-extra-fields' ),
     421            'plugin_option_version'         => $prflxtrflds_plugin_info['Version'],
     422            'display_settings_notice'       => 1,
     423            'suggest_feature_banner'        => 1,
     424            'sort_sequence'                 => 'ASC',
     425            'available_fields'              => array(),
     426            'available_values'              => array(),
     427            'show_empty_columns'            => 0,
     428            'show_id'                       => 1,
     429            'header_table'                  => 'columns', /*rows */
     430            'empty_value'                   => __( 'The field is empty', 'profile-extra-fields' ),
     431            'not_available_message'         => __( 'N/A', 'profile-extra-fields' ),
     432            'shortcode_debug'               => 1,
     433            'display_user_name'             => 'username',
     434            'user_section_profile_title'    => __( 'Profile Extra Fields', 'profile-extra-fields' ),
     435            'user_section_car_title'        => __( 'Car Rental V2 Extra Fields', 'profile-extra-fields' ),
     436            'notify_admin_register'         => 0,//wp_new_user_notification_email_admin
     437            'notify_user_register'          => 0,
     438            'notify_admin_register_subject' => __( 'New User Registration on Your Website', 'profile-extra-fields' ),
     439            'notify_admin_register_message' => __( 'Hello,
     440
     441A new user has registered on your website.
     442
     443User Details:
     444
     445Username: {username}
     446
     447Email: {email}
     448
     449Registration Date: {date}
     450
     451{profile_extra_fields}
     452
     453You can view and manage this user in your WordPress dashboard {dashboardurl}.', 'profile-extra-fields' ),
     454            'notify_admin_update_subject'   => __( 'User Profile Updated', 'profile-extra-fields' ),
     455            'notify_admin_update_message'   => __( 'Hello,
     456
     457A user has updated their profile on your website.
     458
     459User Details:
     460
     461Username: {username}
     462
     463Email: {email}
     464
     465You may review the updated information in your WordPress dashboard {dashboardurl}.', 'profile-extra-fields' ),
     466            'notify_user_register_subject'  => __( 'Welcome! Your Registration is Complete', 'profile-extra-fields' ),
     467            'notify_user_register_message'  => __( 'Hello {username},
     468
     469Thank you for registering on our website.
     470
     471Your account has been successfully created, and you can now log in using your credentials.
     472
     473To set your password, visit the following address: {loginurl}
     474
     475If you have any questions, feel free to contact us.', 'profile-extra-fields' ),
     476            'notify_user_update_subject'    => __( 'Your Profile Has Been Updated', 'profile-extra-fields' ),
     477            'notify_user_update_message'    => __( 'Hello {username},
     478
     479This is a confirmation that your profile information has been successfully updated.
     480
     481If you did not make these changes, please contact us immediately or change your password {loginurl}.', 'profile-extra-fields' ),
    436482        );
    437483    }
     
    54715517     *
    54725518     * @param array $wp_new_user_notification_email_admin Email array for admin.
     5519     * @param object $user User object.
     5520     * @param string $blogname Blog name.
    54735521     */
    5474     function prflxtrflds_wp_new_user_notification_email_admin( $wp_new_user_notification_email_admin ) {
     5522    function prflxtrflds_wp_new_user_notification_email_admin( $wp_new_user_notification_email_admin, $user, $blogname ) {
     5523        global $prflxtrflds_options;
     5524        $prflxtrflds_field_message = '';
     5525
    54755526        if ( isset( $_POST['prflxtrflds_field_name'], $_POST['prflxtrflds_user_field_value'] ) ) {
    5476             $wp_new_user_notification_email_admin['message'] .= "\r\n";
    54775527            $prflxtrflds_field_name                           = array_map( 'sanitize_text_field', array_map( 'wp_unslash', $_POST['prflxtrflds_field_name'] ) );
    54785528            foreach ( $prflxtrflds_field_name as $key => $name ) {
    54795529                $value = isset( $_POST['prflxtrflds_user_field_value'][ $key ] ) ? ( is_array( $_POST['prflxtrflds_user_field_value'][ $key ] ) ? implode( ',', array_map( 'sanitize_text_field', array_map( 'wp_unslash', $_POST['prflxtrflds_user_field_value'][ $key ] ) ) ) : sanitize_text_field( wp_unslash( $_POST['prflxtrflds_user_field_value'][ $key ] ) ) ) : '';
    5480                 $wp_new_user_notification_email_admin['message'] .= $name . ': ' . $value . "\r\n\r\n";
     5530                $prflxtrflds_field_message .= $name . ': ' . $value . "\r\n\r\n";
     5531            }
     5532        }
     5533
     5534        if ( isset( $prflxtrflds_options['notify_admin_register'] ) && 1 === $prflxtrflds_options['notify_admin_register'] ) {
     5535            if ( ! empty( $prflxtrflds_options['notify_admin_register_subject'] ) ) {
     5536                $wp_new_user_notification_email_admin['subject'] = $prflxtrflds_options['notify_admin_register_subject'];
     5537            }
     5538            if ( ! empty( $prflxtrflds_options['notify_admin_register_message'] ) ) {
     5539                $wp_new_user_notification_email_admin['message'] = $prflxtrflds_options['notify_admin_register_message'];
     5540                $wp_new_user_notification_email_admin['message'] = str_replace( array( '{username}', '{email}', '{date}', '{profile_extra_fields}', '{dashboardurl}' ), array( $user->user_login, $user->user_email, wp_date( get_option( 'date_format' ), admin_url() ), $prflxtrflds_field_message ), $wp_new_user_notification_email_admin['message'] );
     5541            }
     5542        } else {
     5543            if ( isset( $_POST['prflxtrflds_field_name'], $_POST['prflxtrflds_user_field_value'] ) ) {
     5544                $wp_new_user_notification_email_admin['message'] .= "\r\n" . $prflxtrflds_field_message . "\r\n";
    54815545            }
    54825546        }
    54835547
    54845548        return $wp_new_user_notification_email_admin;
     5549    }
     5550}
     5551
     5552if ( ! function_exists( 'prflxtrflds_wp_new_user_notification_email_user' ) ) {
     5553    /**
     5554     * Email message to new user
     5555     *
     5556     * @param array $wp_new_user_notification_email Email array for user.
     5557     * @param object $user User object.
     5558     * @param string $blogname Blog name.
     5559     */
     5560    function prflxtrflds_wp_new_user_notification_email_user( $wp_new_user_notification_email, $user, $blogname ) {
     5561        global $prflxtrflds_options;
     5562
     5563        if ( isset( $prflxtrflds_options['notify_user_register'] ) && 1 === $prflxtrflds_options['notify_user_register'] ) {
     5564            if ( ! empty( $prflxtrflds_options['notify_user_register_subject'] ) ) {
     5565                $wp_new_user_notification_email['subject'] = $prflxtrflds_options['notify_user_register_subject'];
     5566            }
     5567            if ( ! empty( $prflxtrflds_options['notify_user_register_message'] ) ) {
     5568                $key = get_password_reset_key( $user );
     5569                if ( ! is_wp_error( $key ) ) {
     5570                    $login_url = network_site_url( 'wp-login.php?login=' . rawurlencode( $user->user_login ) . "&key=$key&action=rp", 'login' ) . "\r\n\r\n" . wp_login_url();
     5571
     5572                    $wp_new_user_notification_email['message'] = $prflxtrflds_options['notify_user_register_message'];
     5573                    $wp_new_user_notification_email['message'] = str_replace( array( '{username}', '{loginurl}' ), array( $user->user_login, $login_url ), $wp_new_user_notification_email['message'] );
     5574                }
     5575            }
     5576        }
     5577
     5578        return $wp_new_user_notification_email;
    54855579    }
    54865580}
     
    55815675add_filter( 'user_profile_update_errors', 'prflxtrflds_create_user_error' );
    55825676/** Adding fields to the admin email after registering a new user */
    5583 add_filter( 'wp_new_user_notification_email_admin', 'prflxtrflds_wp_new_user_notification_email_admin' );
     5677add_filter( 'wp_new_user_notification_email_admin', 'prflxtrflds_wp_new_user_notification_email_admin', 10, 3 );
     5678add_filter( 'wp_new_user_notification_email', 'prflxtrflds_wp_new_user_notification_email_user', 10, 3 );
    55845679/** Save order through ajax */
    55855680add_action( 'wp_ajax_prflxtrflds_table_order', 'prflxtrflds_table_order' );
  • profile-extra-fields/trunk/readme.txt

    r3317011 r3494846  
    44Tags: add fields WordPress, add extra fields, custom fields, woocommerce extra fields, woocommerce additional fields
    55Requires at least: 5.6
    6 Tested up to: 6.8
    7 Stable tag: 1.3.2
     6Tested up to: 6.9
     7Stable tag: 1.3.3
    88License: GPLv3 or later
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
     
    2424= Free Features =
    2525
    26 * Add unlimited custom fields to WordPress user profiles
    27 * Display extra user data with a shortcode:
    28     * All users
    29     * Logged-in user
    30     * Specific user role
    31     * Specific user ID
    32     * Current user
    33 * Display selected fields via shortcode
    34 * Show fields in the registration form
    35 * Export all user data to a CSV file
    36 * Customize shortcode output:
    37     * Table layout: rows or columns
    38     * Sort by username: ASC / DESC
    39     * Show empty fields
    40     * Show user ID
    41     * Display field shortcodes with values
    42 * Customize validation messages:
    43     * For required fields
    44     * For unavailable fields
    45 * Enable debug mode for troubleshooting
    46 * Choose from various field types:
    47     * Text, Textarea, Checkbox, Radiobutton
    48     * Dropdown, Date, Time, Date & Time
    49     * Number, Phone, URL
    50 * Field customization:
    51     * Field name and description
    52     * Max length for text/number
    53     * Required symbol and setting
    54     * Set field order (drag & drop)
    55     * Choose date/time/phone format
    56     * Limit field visibility to specific roles
    57 * Front-end form to edit user data
    58 * Compatible with the latest WordPress version
    59 * Lightweight, fast, and easy to set up
    60 * Translation-ready and RTL support
     26* Add unlimited number of extra fields
     27* Use shortcode to display user data on your page or post:
     28    * All users data
     29    * Logged in user data
     30    * Certain user role data
     31    * Certain user data
     32    * Current user data
    6133* Compatible with [Car Rental V2](https://bestwebsoft.com/products/wordpress/plugins/car-rental-v2/?k=a8f05dd9a324c003f22923d43eb75eea)
     34* Display profile extra fields in user registration form
     35* Display certain fields via the shortcode
     36* Export all user data to a CSV file
     37* User data shortcode settings:
     38    * Choose user data rotation on page or post
     39        * Rows
     40        * Columns
     41    * Sort user data by user name in the table:
     42        * ASC (ascending order from lowest to highest values)
     43        * DESC (descending order from highest to lowest values)
     44    * Show empty fields if user missed them
     45    * Show user ID in the table
     46    * Display the shortcode with the field value
     47    * Customize validation message for:
     48        * Empty fields
     49        * Unavailable fields
     50    * Enable or disable debug mode
     51* Choose extra field type:
     52    * Text
     53    * Textarea
     54    * Checkbox
     55    * Radiobutton
     56    * Dropdown list
     57    * Date
     58    * Time
     59    * Date and time
     60    * Number
     61    * Phone number
     62    * URL
     63* Customize extra fields:
     64    * Name
     65    * Description
     66* Set the max length for text or number in the appropriate fields
     67* Set the required symbol
     68* Make any field required
     69* Set the fields order
     70* Choose date and time formats for the corresponding field types
     71* Set the phone number format for the corresponding field type
     72* Drag and drop fields to change their order in the list
     73* Make extra fields available for certain user roles
     74* Display user data edit form on the front pages
     75* Notify user and admin about User Registration
     76* Compatible with latest WordPress version
     77* Incredibly simple settings for fast setup without modifying code
     78* Detailed step-by-step documentation and videos
     79* Multilingual and RTL ready
    6280
    6381> **Pro Features**
     
    7492> * Integration with [Subscriber plugin](https://bestwebsoft.com/products/wordpress/plugins/subscriber/?k=fb814b406c52fdf3d8c48b9a342aaa69)
    7593> * Add custom code from plugin settings
     94> * Notify user and admin about Profile Updated
    7695> * Bulk import values for:
    7796>   * Checkbox
     
    183202== Changelog ==
    184203
     204= V1.3.3 - 27.03.2026 =
     205* Update : All functionality was updated for WordPress 6.9.4.
     206* NEW : Notify user and admin about new user registration.
     207* Pro : Notify user and admin about user profile updated.
     208
    185209= V1.3.2 - 24.06.2025 =
    186210* Update : Compatibility with BWS Login Form has been added.
     
    342366== Upgrade Notice ==
    343367
     368= V1.3.3 =
     369* The compatibility with new WordPress version updated.
     370* New features added.
     371
    344372= V1.3.2 =
    345373* New features added.
Note: See TracChangeset for help on using the changeset viewer.