Plugin Directory

Changeset 3776120


Ignore:
Timestamp:
10/30/2026 10:31:55 PM (44 hours ago)
Author:
mehdituran
Message:

Release 1.0.4: fix Upgrade to Pro links, subscription wording, Pro detection by file name, stable backup order, English messages

Location:
jetprayer
Files:
14 edited
1 copied

Legend:

Unmodified
Added
Removed
  • jetprayer/tags/1.0.4/admin/js/admin.js

    r3583236 r3776120  
    929929                                                year
    930930                                  )
    931                                 : `${ monthName } ${ year } içindeki seçilen ${ activeDatesToDelete.length } günü siler.`;
     931                                : `Deletes the selected ${ activeDatesToDelete.length } days inside ${ monthName } ${ year }.`;
    932932                        const descYear = i18n.deleteYearDesc
    933933                                ? sprintf( i18n.deleteYearDesc, year, city, country )
    934                                 : `${ city }, ${ country } için ${ year } yılına ait tüm verileri (365 günü) temizler.`;
     934                                : `Clears all timings (365 days) for the year ${ year } for ${ city }, ${ country }.`;
    935935                        $( '#jp-delete-selected-desc' ).text( descSelected );
    936936                        $( '#jp-delete-year-desc' ).text( descYear );
  • jetprayer/tags/1.0.4/admin/partials/admin-page.php

    r3584599 r3776120  
    986986                                        <h2><?php esc_html_e( 'Unlock the Full Power of JetPrayer Pro', 'jetprayer' ); ?></h2>
    987987                                        <p>
    988                                                 <?php esc_html_e( 'Upgrade to the Pro edition today to unlock advanced location detection, complete visual style controls, bulk data maintenance tools, custom prayer labels, and direct priority email support.', 'jetprayer' ); ?>
     988                                                <?php esc_html_e( 'Upgrade to the Pro edition today to unlock advanced location detection, complete visual style controls, bulk data maintenance tools, custom prayer labels, and priority support.', 'jetprayer' ); ?>
    989989                                        </p>
    990                                         <a href="https://jetreader.lemonsqueezy.com/" target="_blank" class="jp-pro-cta-btn">
     990                                        <a href="https://rikny.lemonsqueezy.com/checkout/buy/f89fbc67-21c7-44fc-ad60-7b1d4df95b2b" target="_blank" class="jp-pro-cta-btn">
    991991                                                <span class="dashicons dashicons-cart jp-vertical-align-middle"></span>
    992992                                                <?php esc_html_e( 'Upgrade to Pro Now', 'jetprayer' ); ?>
    … …  
    10581058                                        <h3><?php esc_html_e( 'Premium Customer Support', 'jetprayer' ); ?></h3>
    10591059                                        <p>
    1060                                                 <?php esc_html_e( 'Receive direct priority email support from the plugin developers to help with any layout customization questions, technical queries, or configuration issues.', 'jetprayer' ); ?>
     1060                                                <?php esc_html_e( 'Receive priority support from the plugin developers to help with any layout customization questions, technical queries, or configuration issues.', 'jetprayer' ); ?>
    10611061                                        </p>
    10621062                                </div>
    … …  
    11091109                                                        <td class="jp-pro-feature-col"><?php esc_html_e( 'Technical Support', 'jetprayer' ); ?></td>
    11101110                                                        <td class="jp-pro-free-col"><?php esc_html_e( 'Community forums', 'jetprayer' ); ?></td>
    1111                                                         <td class="jp-pro-val-col"><span class="jp-pro-check-icon">&#10004;</span> <?php esc_html_e( 'Direct priority email support', 'jetprayer' ); ?></td>
     1111                                                        <td class="jp-pro-val-col"><span class="jp-pro-check-icon">&#10004;</span> <?php esc_html_e( 'Priority support', 'jetprayer' ); ?></td>
    11121112                                                </tr>
    11131113                                        </tbody>
    … …  
    11181118                        <div class="jp-pro-footer-cta">
    11191119                                <h3><?php esc_html_e( 'Ready to Supercharge Your Website?', 'jetprayer' ); ?></h3>
    1120                                 <p><?php esc_html_e( 'Get lifetime access to JetPrayer Pro with all advanced features and direct premium support.', 'jetprayer' ); ?></p>
    1121                                 <a href="https://jetreader.lemonsqueezy.com/" target="_blank" class="jp-pro-footer-btn">
     1120                                <p><?php esc_html_e( 'Subscribe monthly or yearly to unlock every JetPrayer Pro feature, new releases and priority support.', 'jetprayer' ); ?></p>
     1121                                <a href="https://rikny.lemonsqueezy.com/checkout/buy/f89fbc67-21c7-44fc-ad60-7b1d4df95b2b" target="_blank" class="jp-pro-footer-btn">
    11221122                                        <span class="dashicons dashicons-star-filled jp-vertical-align-middle" style="color: #f59e0b;"></span>
    11231123                                        <?php esc_html_e( 'Get JetPrayer Pro Now', 'jetprayer' ); ?>
  • jetprayer/tags/1.0.4/includes/class-jetprayer-api.php

    r3582982 r3776120  
    6464                $method    = isset( $settings['method'] ) && '' !== $settings['method'] ? intval( $settings['method'] ) : null;
    6565                if ( null === $method ) {
    66                         return new WP_Error( 'invalid_method', __( 'Lütfen geçerli bir hesaplama yöntemi seçin. / Please select a valid calculation method.', 'jetprayer' ) );
     66                        return new WP_Error( 'invalid_method', __( 'Please select a valid calculation method.', 'jetprayer' ) );
    6767                }
    6868                $school    = isset( $settings['school'] ) ? intval( $settings['school'] ) : 0;
  • jetprayer/tags/1.0.4/includes/class-jetprayer-rest.php

    r3583236 r3776120  
    329329                                return new WP_REST_Response( array(
    330330                                        'success' => false,
    331                                         'message' => __( 'Senkronizasyon limiti aşıldı. Lütfen tekrar senkronize etmeden önce 1 dakika bekleyin. / Rate limit exceeded. Please wait 1 minute before syncing again.', 'jetprayer' ),
     331                                        'message' => __( 'Rate limit exceeded. Please wait 1 minute before syncing again.', 'jetprayer' ),
    332332                                ), 429 );
    333333                        }
    … …  
    651651                                while ( true ) {
    652652                                        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    653                                         $rows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table_name} LIMIT %d OFFSET %d", $chunk_size, $offset ), ARRAY_A );
     653                                        $rows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table_name} ORDER BY id ASC LIMIT %d OFFSET %d", $chunk_size, $offset ), ARRAY_A );
    654654                                        if ( empty( $rows ) ) {
    655655                                                break;
  • jetprayer/tags/1.0.4/jetprayer.php

    r3592293 r3776120  
    44 * Plugin URI:   https://rikny.com
    55 * Description:  A performance-optimized, secure, and robust WordPress plugin that displays Islamic prayer times using local caching to avoid external API calls. Features gorgeous grids, sliders, tickers, and modals.
    6  * Version:      1.0.3
     6 * Version:      1.0.4
    77 * Author:       Mehdi Turan
    88 * Author URI:   https://www.linkedin.com/in/mehdituran/
    … …  
    2525// file was already include()'d in this request. We also catch the edge case
    2626// where Pro is listed in active_plugins but its file hasn't been loaded yet.
    27 if ( class_exists( 'JetPrayer_License' ) || in_array( 'jetprayer-pro/jetprayer-pro.php', (array) get_option( 'active_plugins', array() ), true ) ) {
     27// Pro is matched by its main file name rather than a fixed folder, because a
     28// zip uploaded under another name (e.g. jetprayer-pro_v1.0.1/) installs into
     29// a folder named after the zip.
     30$jetprayer_pro_basename = '';
     31foreach ( (array) get_option( 'active_plugins', array() ) as $jetprayer_active_plugin ) {
     32        if ( 'jetprayer-pro.php' === basename( $jetprayer_active_plugin ) ) {
     33                $jetprayer_pro_basename = $jetprayer_active_plugin;
     34                break;
     35        }
     36}
     37if ( class_exists( 'JetPrayer_License' ) || '' !== $jetprayer_pro_basename ) {
    2838        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    29         if ( is_plugin_active( 'jetprayer-pro/jetprayer-pro.php' ) ) {
     39        if ( '' !== $jetprayer_pro_basename && is_plugin_active( $jetprayer_pro_basename ) ) {
    3040                deactivate_plugins( plugin_basename( __FILE__ ) );
    3141                set_transient( 'jetprayer_free_activation_blocked_pro_active', true, 30 );
    … …  
    3848
    3949// Define plugin constants
    40 define( 'JETPRAYER_VERSION', '1.0.3' );
     50define( 'JETPRAYER_VERSION', '1.0.4' );
    4151define( 'JETPRAYER_PATH', plugin_dir_path( __FILE__ ) );
    4252define( 'JETPRAYER_URL', plugin_dir_url( __FILE__ ) );
  • jetprayer/tags/1.0.4/readme.txt

    r3592293 r3776120  
    44Requires at least: 6.2
    55Tested up to: 7.0
    6 Stable tag: 1.0.3
     6Stable tag: 1.0.4
    77Requires PHP: 7.4
    88License: GPLv2 or later
    … …  
    100100== Changelog ==
    101101
     102= 1.0.4 =
     103*   Fixed the "Upgrade to Pro" buttons, which pointed to a store page that no longer exists.
     104*   Corrected the Pro upgrade text: Pro is a monthly or yearly subscription, not lifetime access.
     105*   JetPrayer Pro is now detected by its main file even when it is installed in a differently named folder, so the free/Pro coexistence and uninstall data-safety guards always work.
     106*   Full backups now export rows in a stable order, so no rows are skipped or duplicated.
     107*   Remaining Turkish admin messages are now in English.
     108
    102109= 1.0.3 =
    103110*   Fixed critical compatibility bug: activating JetPrayer (free) while JetPrayer Pro is active no longer causes a PHP fatal error — the free version now auto-deactivates itself and shows a clear admin notice via Pro.
  • jetprayer/tags/1.0.4/uninstall.php

    r3592293 r3776120  
    2121// is not active; otherwise leave the DB alone — the folder is removed by
    2222// WordPress regardless, which is all that is needed to hide it from the list.
    23 $jetprayer_pro_active = in_array(
    24         'jetprayer-pro/jetprayer-pro.php',
    25         (array) get_option( 'active_plugins', array() ),
    26         true
    27 );
     23// Matched by main file name, not folder: Pro may live in a folder named
     24// after its zip (e.g. jetprayer-pro_v1.0.1/).
     25$jetprayer_pro_active = false;
     26foreach ( (array) get_option( 'active_plugins', array() ) as $jetprayer_active_plugin ) {
     27        if ( 'jetprayer-pro.php' === basename( $jetprayer_active_plugin ) ) {
     28                $jetprayer_pro_active = true;
     29                break;
     30        }
     31}
    2832
    2933$jetprayer_options = array(
  • jetprayer/trunk/admin/js/admin.js

    r3583236 r3776120  
    929929                                                year
    930930                                  )
    931                                 : `${ monthName } ${ year } içindeki seçilen ${ activeDatesToDelete.length } günü siler.`;
     931                                : `Deletes the selected ${ activeDatesToDelete.length } days inside ${ monthName } ${ year }.`;
    932932                        const descYear = i18n.deleteYearDesc
    933933                                ? sprintf( i18n.deleteYearDesc, year, city, country )
    934                                 : `${ city }, ${ country } için ${ year } yılına ait tüm verileri (365 günü) temizler.`;
     934                                : `Clears all timings (365 days) for the year ${ year } for ${ city }, ${ country }.`;
    935935                        $( '#jp-delete-selected-desc' ).text( descSelected );
    936936                        $( '#jp-delete-year-desc' ).text( descYear );
  • jetprayer/trunk/admin/partials/admin-page.php

    r3584599 r3776120  
    986986                                        <h2><?php esc_html_e( 'Unlock the Full Power of JetPrayer Pro', 'jetprayer' ); ?></h2>
    987987                                        <p>
    988                                                 <?php esc_html_e( 'Upgrade to the Pro edition today to unlock advanced location detection, complete visual style controls, bulk data maintenance tools, custom prayer labels, and direct priority email support.', 'jetprayer' ); ?>
     988                                                <?php esc_html_e( 'Upgrade to the Pro edition today to unlock advanced location detection, complete visual style controls, bulk data maintenance tools, custom prayer labels, and priority support.', 'jetprayer' ); ?>
    989989                                        </p>
    990                                         <a href="https://jetreader.lemonsqueezy.com/" target="_blank" class="jp-pro-cta-btn">
     990                                        <a href="https://rikny.lemonsqueezy.com/checkout/buy/f89fbc67-21c7-44fc-ad60-7b1d4df95b2b" target="_blank" class="jp-pro-cta-btn">
    991991                                                <span class="dashicons dashicons-cart jp-vertical-align-middle"></span>
    992992                                                <?php esc_html_e( 'Upgrade to Pro Now', 'jetprayer' ); ?>
    … …  
    10581058                                        <h3><?php esc_html_e( 'Premium Customer Support', 'jetprayer' ); ?></h3>
    10591059                                        <p>
    1060                                                 <?php esc_html_e( 'Receive direct priority email support from the plugin developers to help with any layout customization questions, technical queries, or configuration issues.', 'jetprayer' ); ?>
     1060                                                <?php esc_html_e( 'Receive priority support from the plugin developers to help with any layout customization questions, technical queries, or configuration issues.', 'jetprayer' ); ?>
    10611061                                        </p>
    10621062                                </div>
    … …  
    11091109                                                        <td class="jp-pro-feature-col"><?php esc_html_e( 'Technical Support', 'jetprayer' ); ?></td>
    11101110                                                        <td class="jp-pro-free-col"><?php esc_html_e( 'Community forums', 'jetprayer' ); ?></td>
    1111                                                         <td class="jp-pro-val-col"><span class="jp-pro-check-icon">&#10004;</span> <?php esc_html_e( 'Direct priority email support', 'jetprayer' ); ?></td>
     1111                                                        <td class="jp-pro-val-col"><span class="jp-pro-check-icon">&#10004;</span> <?php esc_html_e( 'Priority support', 'jetprayer' ); ?></td>
    11121112                                                </tr>
    11131113                                        </tbody>
    … …  
    11181118                        <div class="jp-pro-footer-cta">
    11191119                                <h3><?php esc_html_e( 'Ready to Supercharge Your Website?', 'jetprayer' ); ?></h3>
    1120                                 <p><?php esc_html_e( 'Get lifetime access to JetPrayer Pro with all advanced features and direct premium support.', 'jetprayer' ); ?></p>
    1121                                 <a href="https://jetreader.lemonsqueezy.com/" target="_blank" class="jp-pro-footer-btn">
     1120                                <p><?php esc_html_e( 'Subscribe monthly or yearly to unlock every JetPrayer Pro feature, new releases and priority support.', 'jetprayer' ); ?></p>
     1121                                <a href="https://rikny.lemonsqueezy.com/checkout/buy/f89fbc67-21c7-44fc-ad60-7b1d4df95b2b" target="_blank" class="jp-pro-footer-btn">
    11221122                                        <span class="dashicons dashicons-star-filled jp-vertical-align-middle" style="color: #f59e0b;"></span>
    11231123                                        <?php esc_html_e( 'Get JetPrayer Pro Now', 'jetprayer' ); ?>
  • jetprayer/trunk/includes/class-jetprayer-api.php

    r3582982 r3776120  
    6464                $method    = isset( $settings['method'] ) && '' !== $settings['method'] ? intval( $settings['method'] ) : null;
    6565                if ( null === $method ) {
    66                         return new WP_Error( 'invalid_method', __( 'Lütfen geçerli bir hesaplama yöntemi seçin. / Please select a valid calculation method.', 'jetprayer' ) );
     66                        return new WP_Error( 'invalid_method', __( 'Please select a valid calculation method.', 'jetprayer' ) );
    6767                }
    6868                $school    = isset( $settings['school'] ) ? intval( $settings['school'] ) : 0;
  • jetprayer/trunk/includes/class-jetprayer-rest.php

    r3583236 r3776120  
    329329                                return new WP_REST_Response( array(
    330330                                        'success' => false,
    331                                         'message' => __( 'Senkronizasyon limiti aşıldı. Lütfen tekrar senkronize etmeden önce 1 dakika bekleyin. / Rate limit exceeded. Please wait 1 minute before syncing again.', 'jetprayer' ),
     331                                        'message' => __( 'Rate limit exceeded. Please wait 1 minute before syncing again.', 'jetprayer' ),
    332332                                ), 429 );
    333333                        }
    … …  
    651651                                while ( true ) {
    652652                                        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    653                                         $rows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table_name} LIMIT %d OFFSET %d", $chunk_size, $offset ), ARRAY_A );
     653                                        $rows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table_name} ORDER BY id ASC LIMIT %d OFFSET %d", $chunk_size, $offset ), ARRAY_A );
    654654                                        if ( empty( $rows ) ) {
    655655                                                break;
  • jetprayer/trunk/jetprayer.php

    r3592293 r3776120  
    44 * Plugin URI:   https://rikny.com
    55 * Description:  A performance-optimized, secure, and robust WordPress plugin that displays Islamic prayer times using local caching to avoid external API calls. Features gorgeous grids, sliders, tickers, and modals.
    6  * Version:      1.0.3
     6 * Version:      1.0.4
    77 * Author:       Mehdi Turan
    88 * Author URI:   https://www.linkedin.com/in/mehdituran/
    … …  
    2525// file was already include()'d in this request. We also catch the edge case
    2626// where Pro is listed in active_plugins but its file hasn't been loaded yet.
    27 if ( class_exists( 'JetPrayer_License' ) || in_array( 'jetprayer-pro/jetprayer-pro.php', (array) get_option( 'active_plugins', array() ), true ) ) {
     27// Pro is matched by its main file name rather than a fixed folder, because a
     28// zip uploaded under another name (e.g. jetprayer-pro_v1.0.1/) installs into
     29// a folder named after the zip.
     30$jetprayer_pro_basename = '';
     31foreach ( (array) get_option( 'active_plugins', array() ) as $jetprayer_active_plugin ) {
     32        if ( 'jetprayer-pro.php' === basename( $jetprayer_active_plugin ) ) {
     33                $jetprayer_pro_basename = $jetprayer_active_plugin;
     34                break;
     35        }
     36}
     37if ( class_exists( 'JetPrayer_License' ) || '' !== $jetprayer_pro_basename ) {
    2838        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    29         if ( is_plugin_active( 'jetprayer-pro/jetprayer-pro.php' ) ) {
     39        if ( '' !== $jetprayer_pro_basename && is_plugin_active( $jetprayer_pro_basename ) ) {
    3040                deactivate_plugins( plugin_basename( __FILE__ ) );
    3141                set_transient( 'jetprayer_free_activation_blocked_pro_active', true, 30 );
    … …  
    3848
    3949// Define plugin constants
    40 define( 'JETPRAYER_VERSION', '1.0.3' );
     50define( 'JETPRAYER_VERSION', '1.0.4' );
    4151define( 'JETPRAYER_PATH', plugin_dir_path( __FILE__ ) );
    4252define( 'JETPRAYER_URL', plugin_dir_url( __FILE__ ) );
  • jetprayer/trunk/readme.txt

    r3592293 r3776120  
    44Requires at least: 6.2
    55Tested up to: 7.0
    6 Stable tag: 1.0.3
     6Stable tag: 1.0.4
    77Requires PHP: 7.4
    88License: GPLv2 or later
    … …  
    100100== Changelog ==
    101101
     102= 1.0.4 =
     103*   Fixed the "Upgrade to Pro" buttons, which pointed to a store page that no longer exists.
     104*   Corrected the Pro upgrade text: Pro is a monthly or yearly subscription, not lifetime access.
     105*   JetPrayer Pro is now detected by its main file even when it is installed in a differently named folder, so the free/Pro coexistence and uninstall data-safety guards always work.
     106*   Full backups now export rows in a stable order, so no rows are skipped or duplicated.
     107*   Remaining Turkish admin messages are now in English.
     108
    102109= 1.0.3 =
    103110*   Fixed critical compatibility bug: activating JetPrayer (free) while JetPrayer Pro is active no longer causes a PHP fatal error — the free version now auto-deactivates itself and shows a clear admin notice via Pro.
  • jetprayer/trunk/uninstall.php

    r3592293 r3776120  
    2121// is not active; otherwise leave the DB alone — the folder is removed by
    2222// WordPress regardless, which is all that is needed to hide it from the list.
    23 $jetprayer_pro_active = in_array(
    24         'jetprayer-pro/jetprayer-pro.php',
    25         (array) get_option( 'active_plugins', array() ),
    26         true
    27 );
     23// Matched by main file name, not folder: Pro may live in a folder named
     24// after its zip (e.g. jetprayer-pro_v1.0.1/).
     25$jetprayer_pro_active = false;
     26foreach ( (array) get_option( 'active_plugins', array() ) as $jetprayer_active_plugin ) {
     27        if ( 'jetprayer-pro.php' === basename( $jetprayer_active_plugin ) ) {
     28                $jetprayer_pro_active = true;
     29                break;
     30        }
     31}
    2832
    2933$jetprayer_options = array(
Note: See TracChangeset for help on using the changeset viewer.