Plugin Directory

Changeset 3391029


Ignore:
Timestamp:
11/06/2025 10:49:00 AM (5 months ago)
Author:
fedata
Message:

Updates for v2.4.1

Location:
fast-events/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • fast-events/trunk/changelog.txt

    r3388376 r3391029  
    11== Changelog ==
     2
     3= 2.4.1 =
     4
     5* Change: Improved selection of personalization fields and layout fields.
     6* Change: Don't print the separator line in the qrcode block if there are no layout fields.
     7* Change: Amazon SES API extended with more regions.
     8* Change: Translation updates.
    29
    310= 2.4.0 =
  • fast-events/trunk/fast-events.php

    r3388376 r3391029  
    44 * Plugin URI: https://fast-events.eu/
    55 * Description: Sell online etickets wit a variety of payment options, mobile scanning, admin app, seating plans, online tracking for sports events and much more.
    6  * Version: 2.4.0
     6 * Version: 2.4.1
    77 * Requires at least: 6.4
    88 * Requires PHP: 8.0
  • fast-events/trunk/includes/class-fast-events.php

    r3388376 r3391029  
    1515 */
    1616class Fast_Events {
    17     public const FAST_EVENTS_VERSION = '2.4.0';
     17    public const FAST_EVENTS_VERSION = '2.4.1';
    1818    public const FE_ADMIN_VERSION    = 'v4.4';
    1919
     
    4242            'fevt_update_240_db_options',
    4343            'fevt_update_240_db_event_table',
     44            'fevt_update_admin',
     45        ),
     46        '2.4.1' => array(
     47            'fevt_update_241_db_event_table',
    4448            'fevt_update_admin',
    4549        ),
     
    964968                                                ',"x":40,"y":150,"rotate":0,"scale":100,"no_border":0,"types":{"Silver":' . $eticket_id . ',"Gold (Backstage)":' . $eticket_id . '}},"invoice":{"id":' . $invoice_id .
    965969                                                ',"vat":1,"name":{"x":27,"y":60},"invoiceno":{"x":127,"y":65},"line":{"x":25,"y":92,"w":158}}}',
    966                 'input_fields'               => '{"fields":[{"id":"v36c12","name":"Attendee","type":"text","value":"","min":"","max":"","required":1,"personalise":1},{"id":"v6a7f8","name":"Preference","type":"select","value":"Rock,Jazz,Classic,Pop","min":"","max":"","required":1,"personalise":1},{"id":"v71ba9","name":"Beverage","type":"select","value":"Beer,Wine,Whiskey","min":"","max":"","required":1,"personalise":1},{"id":"v59f29","name":"Entrance","type":"select","value":"North,West,East,South","min":"","max":"","required":1,"personalise":0}],"tickets":[{"name":"Silver","id":"v023b9","stock":"","sold":2,"price":"25.00","volume_price":[{"4":20},{"10":18.75},{"15":18.25}],"min":0,"max":50,"vat":"21","cnt":1,"remain":0,"personalise":"Attendee,Preference","layout":""},{"name":"Gold (Backstage)","id":"v1a311","stock":100,"sold":2,"price":"40.00","min":0,"max":50,"vat":"21","cnt":1,"remain":0,"personalise":"Attendee,Preference,Beverage","layout":"Entrance,Attendee,Preference,Beverage,Order-id"}],"submit":{"name":"' . __( 'Pay', 'fast-events' ) . '"},"unique_users":{"master_eventids":""},"user_group":{"id":0,"eventid":"","roles":"","rest_url":"","rest_header":""}}',
     970                'input_fields'               => '{"fields":[{"id":"v36c12","name":"Attendee","type":"text","value":"","min":"","max":"","required":1,"personalise":1},{"id":"v6a7f8","name":"Preference","type":"select","value":"Rock,Jazz,Classic,Pop","min":"","max":"","required":1,"personalise":1},{"id":"v71ba9","name":"Beverage","type":"select","value":"Beer,Wine,Whiskey","min":"","max":"","required":1,"personalise":1},{"id":"v59f29","name":"Entrance","type":"select","value":"North,West,East,South","min":"","max":"","required":1,"personalise":0}],"tickets":[{"name":"Silver","id":"v023b9","stock":"","sold":2,"price":"25.00","volume_price":[{"4":20},{"10":18.75},{"15":18.25}],"min":0,"max":50,"vat":"21","cnt":1,"remain":0,"personalise":"Attendee,Preference","layout":"Order-id,Name,Email"},{"name":"Gold (Backstage)","id":"v1a311","stock":100,"sold":2,"price":"40.00","min":0,"max":50,"vat":"21","cnt":1,"remain":0,"personalise":"Attendee,Preference,Beverage","layout":"Entrance,Attendee,Preference,Beverage,Order-id"}],"submit":{"name":"' . __( 'Pay', 'fast-events' ) . '"},"unique_users":{"master_eventids":""},"user_group":{"id":0,"eventid":"","roles":"","rest_url":"","rest_header":""}}',
    967971                'scan_keys'                  => '{"' . fast_events_util_func()->uniq_id() . '":{"tickets":"","entry":0,"location":"' . __( 'Main entrance', 'fast-events' ) . '","date_format":"l, j F H:i:s"},"' . fast_events_util_func()->uniq_id() . '":{"tickets":"Gold (Backstage)","entry":1,"location":"' . __( 'Backstage entrance', 'fast-events' ) . '","date_format":"l, j F H:i:s"}}',
    968972            )
     
    11431147                                                ',"x":40,"y":150,"rotate":0,"scale":100,"no_border":0,"types":{"Junior":' . $f2f_id . ',"Senior":' . $f2f_id . '}},"invoice":{"id":""' .
    11441148                                                ',"vat":1,"name":{"x":27,"y":60},"invoiceno":{"x":127,"y":65},"line":{"x":25,"y":92,"w":158}}}',
    1145                 'input_fields'               => '{"fields":[],"tickets":[{"name":"Junior","id":"v023b8","stock":100,"sold":1,"price":"25.00","min":0,"max":1,"vat":"21","cnt":1,"remain":0},' .
    1146                                                 '{"name":"Senior","id":"v1a312","stock":"","sold":0,"price":"30.00","min":0,"max":1,"vat":"21","cnt":1,"remain":0}],"submit":{"name":"' . __( 'Pay', 'fast-events' ) . '"},"unique_users":{"master_eventids":""},"user_group":{"id":0,"eventid":"","roles":"","rest_url":"","rest_header":""}}',
     1149                'input_fields'               => '{"fields":[],"tickets":[{"name":"Junior","id":"v023b8","stock":100,"sold":1,"price":"25.00","min":0,"max":1,"vat":"21","cnt":1,"remain":0,"personalise":"","layout":"Order-id,Name,Email"},' .
     1150                                                '{"name":"Senior","id":"v1a312","stock":"","sold":0,"price":"30.00","min":0,"max":1,"vat":"21","cnt":1,"remain":0,"personalise":"","layout":"Order-id,Name,Email"}],"submit":{"name":"' . __( 'Pay', 'fast-events' ) . '"},"unique_users":{"master_eventids":""},"user_group":{"id":0,"eventid":"","roles":"","rest_url":"","rest_header":""}}',
    11471151                'scan_keys'                  => '{"F3rdp7H9MaBoFonQ":{"tickets":"","entry":0,"location":"' . __( 'Start', 'fast-events' ) . '","date_format":"l, j F H:i"},"gHNduTedoHqXgBHJ":{"tickets":"","entry":1,"location":"' . __( 'Checkpoint', 'fast-events' ) . ' 1",' .
    11481152                                                '"date_format":"l, j F H:i"},"2MDzeidKn2AJtp24":{"tickets":"","entry":1,"location":"' . __( 'Checkpoint', 'fast-events' ) . ' 2","date_format":"l, j F H:i"},"VUtLaxncZtYxUV2J":' .
  • fast-events/trunk/includes/classes/class-fast-events-tickets.php

    r3176877 r3391029  
    8686     * If it's not empty it contains a comma-separated list of field names (max 6)
    8787     * The field names can be:
    88      * - Order      Order is
     88     * - Order-id   Order id
    8989     * - Name       The name of the person who ordered the tickets
    9090     * - Email      The emailaddress of the person who ordered the tickets
     
    133133     * @param string $author    The name of the author (SMTP Sender Name).
    134134     * @param string $pdf_info  JSON string of PDF page definition.
    135      * @param array  $layout    Associative array with ticket names(key) and fields to use in the qrcode info block (comma-separated)
    136      *                          If empty -> use the default qrcode info block.
     135     * @param array  $layout    Associative array with ticket names(key) and fields to use in the qrcode info block (comma-separated).
    137136     *
    138137     * @since 1.0
     
    184183     *
    185184     * @since 1.0
    186      * @since 1.7 Added scaling.
     185     * @since 1.7   Added scaling.
    187186     * @since 2.2.2 Selection of passe-partout templates per ticket.
    188187     *
     
    277276            $this->pdf->Cell( 30, 4, $result->qrcode, 0, 0, '', false, '', 1 );
    278277
    279             // If the laout is empty -> print the default info.
    280             if ( empty( $this->layout[ $result->ticket_type ] ) ) {
     278            // If the layout is the default info.
     279            if ( 'Order-id,Name,Email' === $this->layout[ $result->ticket_type ] ) {
    281280                $this->default_block( $result );
    282281                continue;
     
    387386     *
    388387     * @since 2.1.0
     388     * @since 2.4.1 Don't print seperator line if there are no layout fields.
    389389     */
    390390    private function personalised_block( stdClass $result, array $input ): void {
     
    435435
    436436        // Separator line.
    437         $this->pdf->SetFont( self::FONTNAME, '', 9 );
    438         $this->pdf->SetTextColor( 64 );
    439         $this->pdf->SetXY( $this->x + 40, $this->y + $pos[3] );
    440         $this->pdf->Line( $this->x + 40, $this->y + $pos[3], $this->x + 80, $this->y + $pos[3] );
     437        if ( ! empty( $this->layout[ $result->ticket_type ] ) ) {
     438            $this->pdf->SetFont( self::FONTNAME, '', 9 );
     439            $this->pdf->SetTextColor( 64 );
     440            $this->pdf->SetXY( $this->x + 40, $this->y + $pos[3] );
     441            $this->pdf->Line( $this->x + 40, $this->y + $pos[3], $this->x + 80, $this->y + $pos[3] );
     442        }
    441443
    442444        // Print the personalised data.
  • fast-events/trunk/includes/fevt-update-functions.php

    r3388376 r3391029  
    310310    }
    311311}
     312
     313/**
     314 * Update event table tickets (set the default layout fields if it's empty)
     315 *
     316 * @since 2.4.1
     317 */
     318function fevt_update_241_db_event_table(): void {
     319    global $wpdb;
     320
     321    $results = $wpdb->get_results( "SELECT id, input_fields FROM {$wpdb->prefix}fe_events" );
     322    if ( ! empty( $results ) ) {
     323        foreach ( $results as $result ) {
     324            $inp = json_decode( $result->input_fields );
     325
     326            // Convert tickets layout.
     327            if ( ! empty( $inp->tickets ) ) {
     328                foreach ( $inp->tickets as $index => $value ) {
     329                    if ( empty( $inp->tickets[ $index ]->layout ) ) {
     330                        $inp->tickets[ $index ]->layout = 'Order-id,Name,Email';
     331                    }
     332                }
     333            } elseif ( ! isset( $inp->tickets ) ) {
     334                $inp->tickets = array();
     335            }
     336
     337            $wpdb->update(
     338                $wpdb->prefix . 'fe_events',
     339                array( 'input_fields' => fast_events_util_func()->fast_events_json_encode( $inp ) ),
     340                array( 'id' => $result->id ),
     341            );
     342        }
     343    }
     344}
  • fast-events/trunk/includes/rest-api/class-fast-events-settings.php

    r3388376 r3391029  
    4444     * @since 2.3.0 Added 'captcha_provider' (0 = Google, 1 = Cloudflare)
    4545     * @since 2.4.0 Added SMTP2GO email provider.
     46     * @since 2.4.1 AWS SES regions is now a string
    4647     */
    4748    public function fast_events_settings_api_endpoints(): void {
     
    248249                    ),
    249250                    'amazon_region'            => array(
    250                         'required' => true,
    251                         'type'     => 'string',
    252                         'enum'     => array(
    253                             'eu-central-1',
    254                             'eu-west-1',
    255                             'eu-west-2',
    256                             'eu-west-3',
    257                             'eu-south-1',
    258                             'eu-north-1',
    259                             'us-east-1',
    260                             'us-east-2',
    261                             'us-west-1',
    262                             'us-west-2',
    263                         ),
     251                        'required'          => true,
     252                        'type'              => 'string',
     253                        'sanitize_callback' => 'sanitize_text_field',
    264254                    ),
    265255                    'amazon_access_key'        => array(
  • fast-events/trunk/includes/rest-api/public-api/class-fast-events-admin-ticket-types.php

    r3388376 r3391029  
    595595     *
    596596     * @since 2.1.0
     597     * @since 2.4.1 For layouts: handle empty fields
    597598     *
    598599     * @param string $fields  Comma-separated list of input field names.
     
    615616                }
    616617            } else {
    617                 foreach ( $this->inp_fields as $inp ) {
    618                     if ( $inp->name === $item || 'Order-id' === $item || 'Name' === $item || 'Email' === $item ) {
    619                         continue 2;
     618                if ( empty( $this->inp_fields ) ) {
     619                    if ( 'Order-id' === $item || 'Name' === $item || 'Email' === $item ) {
     620                        continue;
     621                    }
     622                } else {
     623                    foreach ( $this->inp_fields as $inp ) {
     624                        if ( $inp->name === $item || 'Order-id' === $item || 'Name' === $item || 'Email' === $item ) {
     625                            continue 2;
     626                        }
    620627                    }
    621628                }
  • fast-events/trunk/readme.txt

    r3388376 r3391029  
    55* Requires PHP: 8.0
    66* Tested up to: 6.9
    7 * Stable tag: 2.4.0
     7* Stable tag: 2.4.1
    88* Donate link: https://docs.fast-events.eu/en/latest/misc/donate.html
    99* License: GPLv3 or later
     
    1616= Any event type =
    1717
    18 Use Fast Events for any type of event (sport events, festivals, congresses, concerts, seminars, your local party, …)
    19 
    20 From selling 1 ticket type with a single entrance scan to an event with multiple tickets, multiple entrances and multiple scans.
    21 
    22 If you wish, you can take advantage of volume pricing by ticket type or the many discount voucher options.
    23 
    24 Ideal for sporting events with multiple scan checkpoints along the route and a final check to ensure all checkpoints have been scanned.
     18Use Fast Events for any kind of event (sport events, festivals, congresses, concerts, seminars, your local party, …)
     19
     20From selling a single‑ticket type with one entrance scan to managing events with multiple ticket types, several entrances, and multiple scans.
     21
     22If you wish, you can take advantage of volume pricing by ticket type or use the many discount voucher options.
     23
     24Ideal for sporting events that have multiple scan checkpoints along the route and a final check to confirm every checkpoint has been scanned.
    2525
    2626Take a look at the [examples](https://docs.fast-events.eu/en/latest/usage/examples.html) to get an idea.
     
    2828= Ticket personalisation =
    2929
    30 A unique ticket personalisation module to personalise tickets, share tickets, display order information and generate invoices if required.
    31 
    32 Define order or ticket level input fields and assign them to ticket types.
    33 
    34 Embed the ticket personalisation module into a page using a WordPress shortcode.
     30A unique ticket personalisation module that lets you personalise tickets, share them, display order information and generate invoices if required.
     31
     32Define order-level or ticket-level input fields and assign them to specific ticket types.
     33
     34Embed the ticket personalisation module on a page using a WordPress shortcode.
    3535
    3636= Real-time scanning =
     
    3838No need for expensive scanning equipment. Just use our free [Android](https://play.google.com/store/apps/details?id=nl.fe_data.scanner) and [IOS](https://apps.apple.com/app/fe-scan/id1496549803) app to scan the tickets in real-time at the entrance.
    3939
    40 No limit on the number of scan applications running simultaneously.
     40There’s no limit to the number of scanning applications that can run simultaneously.
    4141
    4242Staged scans, temporarily leave and re-enter(e.g. to smoke) and exit scans are possible and error messages can be tailored to your own event.
     
    4444= PDF e-tickets =
    4545
    46 Simply define your own e-tickets in your favourite word processor (Word, LibreOffice, …). Upload the PDF file to WordPress via the plugin's admin interface and tell Fast Events where to print the QR code block.
    47 
    48 Use the default layout or specify a custom layout with personalisation fields or order information.
     46Simply define your own e-tickets in your favourite word processor (Word, LibreOffice, …). Then upload the PDF-file to WordPress through the plugin's admin interface and specify where Fast Events should place the QR‑code block.
     47
     48Use the default layout or specify a custom layout that includes personalisation fields or order information.
    4949
    5050= Tracking =
     
    5656= Payouts next day =
    5757
    58 No fees per ticket. The only costs are the transaction costs of an order. For iDEAL (Netherlands) it is EUR 0.32 (ex VAT) per transaction.
    59 It does not matter how many tickets are ordered in the transaction, it’s always EUR 0.29 (in NL) for an iDEAL payment.
     58There are no fees per ticket. The only cost is the transaction fee for each order. For iDEAL (Netherlands) the fee is € 0.32 (ex VAT) per transaction.
     59It does not matter how many tickets are included in the transaction, the iDEAL charge remains € 0.32 (in NL).
    6060You can find [here](https://docs.fast-events.eu/en/latest/getting-started/introduction.html#payouts-next-day) more information.
    6161
     
    7979= Saas mode =
    8080
    81 Host multiple organisations on your platform each with their own events. They can use your ticketing platform as sub-merchants.
    82 
    83 Add (sub)accounts in the FE Admin App and assign selected events to users and where necessary restrict functionality.
    84 
    85 Use flexible application fees, which will automatically be transferred to you.
     81Host multiple organisations on your platform, each with their own events. They can operate as sub‑merchants using your ticketing system.
     82
     83Add (sub)accounts in the FE Admin app, assign selected events to those users, and, where necessary, restrict their functionality.
     84
     85Use flexible application fees that are automatically transferred to you.
    8686
    8787= REST API =
     
    9090This allows Fast Events data to be created, read, updated, and deleted using requests in JSON format and using WordPress REST API application passwords to grant access.
    9191
    92 But you could also create you own scan app by using the scan endpoint
    93 
    94 Fine grained access control is possible for individual endpoints by using the Accounts tool of the FE Admin App.
     92But you could also create you own scanning app by using the scan endpoint.
     93
     94Fine‑grained access control is available for individual endpoints via the Accounts tool in the FE Admin app.
    9595
    9696= Webhooks =
     
    9898Fast Events offers [Webhooks](https://docs.fast-events.eu/en/latest/advanced/webhooks.html) to sent notifications to a URL of your choice.
    9999
    100 You can configure it on a per-event basis and choose what type of notifications you allow to be sent.
     100You can configure it per event and choose which types of notifications are allowed to be sent.
    101101
    102102Webhooks make it easy for third-party applications to integrate with Fast Events.
     
    190190== Changelog ==
    191191
    192 = 2.4.0 =
    193 
    194 * New: Added a flag to ticket types showing the remaining tickets in the order form.
    195 * New: Added SMTP2GO email provider.
    196 * New: Added new scan-levels: you can temporarily leave the event (e.g. to smoke) and return a little later using levels 7 (temporarily leave) and 8 (re-enter).
    197 * Change: This version requires Management Interface 4.4 or higher.
    198 * Change: action-scheduler updated to the latest version (3.9.3).
    199 * Change: Upgrade internal components.
    200 * Change: Upgrade FE-Admin to the latest version (4.4.0: API level 8).
    201 
    202 
     192= 2.4.1 =
     193
     194* Change: Improved selection of personalization fields and layout fields.
     195* Change: Don't print the separator line in the qrcode block if there are no layout fields.
     196* Change: Amazon SES API extended with more regions.
     197* Change: Translation updates.
    203198
    204199[See changelog for all versions](https://plugins.trac.wordpress.org/browser/fast-events/trunk/changelog.txt).
  • fast-events/trunk/templates/settings.php

    r3388376 r3391029  
    1414 *              - Moved alert inside form.
    1515 * @since 2.4.0 - Added SMTP2GO email provider.
     16 * @since 2.4.1 - Sorted the email providers.
     17 *              - 'amazon_region' is now a string. Regions are defined here: https://docs.aws.amazon.com/general/latest/gr/ses.html
    1618 */
    1719
     
    5355                <?php
    5456                esc_html_e(
    55                     'The "Fast Events" plugin is using the Dutch payment Provider Mollie for all payments. With Mollie there are no periodic recurring costs, you only pay for successful transaction and no fees per ticket.',
     57                    'The "Fast Events" plugin uses the Dutch payment provider Mollie for all transactions. With Mollie there are no recurring fees — you only pay for successful transactions, and there is no fee per ticket.',
    5658                    'fast-events'
    5759                );
    58                 esc_html_e( 'Use the button below to create your free Mollie account.', 'fast-events' );
     60                esc_html_e( 'Click the button below to create your free Mollie account.', 'fast-events' );
    5961                ?>
    6062            </p>
     
    291293                        </div>
    292294
     295                        <!-- Amazon SES API configuration -->
     296                        <div id="fe-settings-amazon" style="<?php echo 8 !== $options['email_type'] ? 'display:none' : ''; ?>">
     297                            <div class="mb-3 row">
     298                                <label for="amazon_region" class="col-sm-3 col-form-label text-right">Amazon region</label>
     299                                <div class="col-sm-9">
     300                                    <input type="text" name="amazon_region" id="amazon_region" maxlength="50" class="form-control" value='<?php echo esc_html( $options['amazon_region'] ); ?>'>
     301                                </div>
     302                            </div>
     303                            <div class="mb-3 row">
     304                                <label for="amazon_access_key" class="col-sm-3 col-form-label text-right">Amazon access key</label>
     305                                <div class="col-sm-9">
     306                                    <input type="text" name="amazon_access_key" id="amazon_access_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['amazon_access_key'] ); ?>'>
     307                                </div>
     308                            </div>
     309                            <div class="mb-3 row">
     310                                <label for="amazon_secret_key" class="col-sm-3 col-form-label text-right">Amazon secret key</label>
     311                                <div class="col-sm-9">
     312                                    <input type="text" name="amazon_secret_key" id="amazon_secret_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['amazon_secret_key'] ); ?>'>
     313                                </div>
     314                            </div>
     315                        </div>
     316
     317                        <!-- Brevo API configuration -->
     318                        <div id="fe-settings-sendinblue" style="<?php echo 6 !== $options['email_type'] ? 'display:none' : ''; ?>">
     319                            <div class="mb-3 row">
     320                                <label for="sendinblue_server" class="col-sm-3 col-form-label text-right">Brevo server</label>
     321                                <div class="col-sm-9">
     322                                    <input type="text" name="sendinblue_server" id="sendinblue_server" maxlength="100" class="form-control" value='<?php echo esc_html( $options['sendinblue_server'] ); ?>'>
     323                                </div>
     324                            </div>
     325                            <div class="mb-3 row">
     326                                <label for="sendinblue_api_key" class="col-sm-3 col-form-label text-right">Brevo API key</label>
     327                                <div class="col-sm-9">
     328                                    <input type="text" name="sendinblue_api_key" id="sendinblue_api_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['sendinblue_api_key'] ); ?>'>
     329                                </div>
     330                            </div>
     331                        </div>
     332
    293333                        <!-- Mailgun API configuration -->
    294334                        <div id="fe-settings-mailgun" style="<?php echo 2 !== $options['email_type'] ? 'display:none' : ''; ?>">
     
    355395                        </div>
    356396
    357                         <!-- Brevo API configuration -->
    358                         <div id="fe-settings-sendinblue" style="<?php echo 6 !== $options['email_type'] ? 'display:none' : ''; ?>">
    359                             <div class="mb-3 row">
    360                                 <label for="sendinblue_server" class="col-sm-3 col-form-label text-right">Brevo server</label>
    361                                 <div class="col-sm-9">
    362                                     <input type="text" name="sendinblue_server" id="sendinblue_server" maxlength="100" class="form-control" value='<?php echo esc_html( $options['sendinblue_server'] ); ?>'>
    363                                 </div>
    364                             </div>
    365                             <div class="mb-3 row">
    366                                 <label for="sendinblue_api_key" class="col-sm-3 col-form-label text-right">Brevo API key</label>
    367                                 <div class="col-sm-9">
    368                                     <input type="text" name="sendinblue_api_key" id="sendinblue_api_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['sendinblue_api_key'] ); ?>'>
     397                        <!-- SMTP2GO API configuration -->
     398                        <div id="fe-settings-smtp2go" style="<?php echo 9 !== $options['email_type'] ? 'display:none' : ''; ?>">
     399                            <div class="mb-3 row">
     400                                <label for="smtp2go_server" class="col-sm-3 col-form-label text-right">SMTP2GO server</label>
     401                                <div class="col-sm-9">
     402                                    <input type="text" name="smtp2go_server" id="smtp2go_server" maxlength="100" class="form-control" value='<?php echo esc_html( $options['smtp2go_server'] ); ?>'>
     403                                </div>
     404                            </div>
     405                            <div class="mb-3 row">
     406                                <label for="smtp2go_api_key" class="col-sm-3 col-form-label text-right">SMTP2GO API key</label>
     407                                <div class="col-sm-9">
     408                                    <input type="text" name="smtp2go_api_key" id="smtp2go_api_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['smtp2go_api_key'] ); ?>'>
    369409                                </div>
    370410                            </div>
     
    383423                                <div class="col-sm-9">
    384424                                    <input type="text" name="sparkpost_api_key" id="sparkpost_api_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['sparkpost_api_key'] ); ?>'>
    385                                 </div>
    386                             </div>
    387                         </div>
    388 
    389                         <!-- SMTP2GO API configuration -->
    390                         <div id="fe-settings-smtp2go" style="<?php echo 9 !== $options['email_type'] ? 'display:none' : ''; ?>">
    391                             <div class="mb-3 row">
    392                                 <label for="smtp2go_server" class="col-sm-3 col-form-label text-right">SMTP2GO server</label>
    393                                 <div class="col-sm-9">
    394                                     <input type="text" name="smtp2go_server" id="smtp2go_server" maxlength="100" class="form-control" value='<?php echo esc_html( $options['smtp2go_server'] ); ?>'>
    395                                 </div>
    396                             </div>
    397                             <div class="mb-3 row">
    398                                 <label for="smtp2go_api_key" class="col-sm-3 col-form-label text-right">SMTP2GO API key</label>
    399                                 <div class="col-sm-9">
    400                                     <input type="text" name="smtp2go_api_key" id="smtp2go_api_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['smtp2go_api_key'] ); ?>'>
    401                                 </div>
    402                             </div>
    403                         </div>
    404 
    405                         <!-- Amazon SES API configuration -->
    406                         <div id="fe-settings-amazon" style="<?php echo 8 !== $options['email_type'] ? 'display:none' : ''; ?>">
    407                             <div class="mb-3 row">
    408                                 <label for="amazon_region" class="col-sm-3 col-form-label text-right">Amazon region</label>
    409                                 <div class="col-sm-9">
    410                                     <select name="amazon_region" id="amazon_region" class="form-control">
    411                                         <option value="eu-central-1"<?php echo 'eu-central-1' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (Frankfurt)</option>
    412                                         <option value="eu-west-1"<?php echo 'eu-west-1' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (Ireland)</option>
    413                                         <option value="eu-west-2"<?php echo 'eu-west-2' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (London)</option>
    414                                         <option value="eu-south-1"<?php echo 'eu-south-1' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (Milan)</option>
    415                                         <option value="eu-west-3"<?php echo 'eu-west-3' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (Paris)</option>
    416                                         <option value="eu-north-1"<?php echo 'eu-north-1' === $options['amazon_region'] ? ' selected' : ''; ?>>Europe (Stockholm)</option>
    417                                         <option value="us-east-2"<?php echo 'us-east-2' === $options['amazon_region'] ? ' selected' : ''; ?>>US East (Ohio)</option>
    418                                         <option value="us-east-1"<?php echo 'us-east-1' === $options['amazon_region'] ? ' selected' : ''; ?>>US East (N. Virginia)</option>
    419                                         <option value="us-west-1"<?php echo 'us-west-1' === $options['amazon_region'] ? ' selected' : ''; ?>>US West (N. California)</option>
    420                                         <option value="us-west-2"<?php echo 'us-west-2' === $options['amazon_region'] ? ' selected' : ''; ?>>US West (Oregon)</option>
    421                                     </select>
    422                                 </div>
    423                             </div>
    424                             <div class="mb-3 row">
    425                                 <label for="amazon_access_key" class="col-sm-3 col-form-label text-right">Amazon access key</label>
    426                                 <div class="col-sm-9">
    427                                     <input type="text" name="amazon_access_key" id="amazon_access_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['amazon_access_key'] ); ?>'>
    428                                 </div>
    429                             </div>
    430                             <div class="mb-3 row">
    431                                 <label for="amazon_secret_key" class="col-sm-3 col-form-label text-right">Amazon secret key</label>
    432                                 <div class="col-sm-9">
    433                                     <input type="text" name="amazon_secret_key" id="amazon_secret_key" maxlength="100" class="form-control" value='<?php echo esc_html( $options['amazon_secret_key'] ); ?>'>
    434425                                </div>
    435426                            </div>
Note: See TracChangeset for help on using the changeset viewer.