Plugin Directory

Changeset 3480862


Ignore:
Timestamp:
03/12/2026 06:53:41 AM (2 weeks ago)
Author:
satollo
Message:

Version 9.1.7

Location:
newsletter
Files:
16 edited
1 copied

Legend:

Unmodified
Added
Removed
  • newsletter/tags/9.1.7/classes/Newsletter/News.php

    r3466966 r3480862  
    2626
    2727        $news = json_decode(wp_remote_retrieve_body($response), true);
    28         error_log(wp_remote_retrieve_body($response));
    2928
    3029        // Firewall returns an invalid response
  • newsletter/tags/9.1.7/includes/controls.php

    r3401857 r3480862  
    716716    function page($name = 'page', $first = null, $language = '', $show_id = false) {
    717717
    718         $front_page_id = (int)get_option('page_on_front');
    719         $blog_page_id = (int)get_option('page_for_posts');
     718        $front_page_id = (int) get_option('page_on_front');
     719        $blog_page_id = (int) get_option('page_for_posts');
    720720        $args = array(
    721721            'post_type' => 'page',
    722722            // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
    723             'posts_per_page' => 1500,
    724             'offset' => 0,
     723            'posts_per_page' => 50,
     724            //'offset' => 0,
    725725            'orderby' => 'post_title',
    726726            'order' => 'ASC',
    727727            'post_status' => 'any',
    728             'suppress_filters' => true
     728            'suppress_filters' => false,
     729            'ignore_sticky_posts' => 1
    729730        );
    730731
    731         $pages = get_posts($args);
     732        $paged = 1;
    732733        $options = [];
    733         foreach ($pages as $page) {
    734             /* @var $page WP_Post */
    735             $label = $page->post_title;
    736             if ($page->post_status != 'publish') {
    737                 $label .= ' (' . $page->post_status . ')';
    738             }
    739             if ($show_id) {
    740                 $label .= ' [#' . $page->ID . ']';
    741             }
    742 
    743             if ($page->ID == $front_page_id) {
    744                 $label .= ' (front page)';
    745             } elseif ($page->ID == $blog_page_id) {
    746                 $label .= ' (post list page)';
    747             }
    748 
    749             $options[$page->ID] = $label;
     734
     735        while (true) {
     736            $args['paged'] = $paged;
     737            $paged++;
     738
     739            $pages = get_posts($args);
     740
     741            if (!$pages) {
     742                break;
     743            }
     744
     745            if ($paged == 30) {
     746                break;
     747            }
     748
     749            foreach ($pages as $page) {
     750                /* @var $page WP_Post */
     751                $label = $page->post_title;
     752                if ($page->post_status != 'publish') {
     753                    $label .= ' (' . $page->post_status . ')';
     754                }
     755                if ($show_id) {
     756                    $label .= ' [#' . $page->ID . ']';
     757                }
     758
     759                if ($page->ID == $front_page_id) {
     760                    $label .= ' (front page)';
     761                } elseif ($page->ID == $blog_page_id) {
     762                    $label .= ' (post list page)';
     763                }
     764
     765                $options[$page->ID] = $label;
     766            }
     767            unset($pages);
     768            gc_collect_cycles();
    750769        }
    751770        $this->select($name, $options, $first);
     
    11991218    }
    12001219
    1201 
    12021220    /**
    12031221     * Creates a button with "delete" action.
     
    13631381                <ul>
    13641382                    <li><a href = "#tabs-a">Default</a></li>
    1365                     <?php foreach ($languages as $key => $value) {
    1366                         ?>
     1383            <?php foreach ($languages as $key => $value) {
     1384                ?>
    13671385                        <li><a href="#tabs-a-<?php echo esc_attr($key) ?>"><?php echo esc_html($value) ?></a></li>
    13681386                    <?php } ?>
     
    13701388
    13711389                <div id="tabs-a">
    1372                     <?php $this->wp_editor('confirmation_text'); ?>
     1390            <?php $this->wp_editor('confirmation_text'); ?>
    13731391                </div>
    1374                 <?php foreach ($languages as $key => $value) { ?>
     1392                    <?php foreach ($languages as $key => $value) { ?>
    13751393                    <div id="tabs-a-<?php echo esc_attr($key) ?>">
    1376                         <?php $this->wp_editor($key . '_confirmation_text', $settings); ?>
     1394                    <?php $this->wp_editor($key . '_confirmation_text', $settings); ?>
    13771395                    </div>
    1378                 <?php } ?>
     1396                    <?php } ?>
    13791397            </div>
    1380         <?php } else { ?>
     1398            <?php } else { ?>
    13811399            <?php $this->wp_editor('confirmation_text', $settings); ?>
    13821400        <?php } ?>
  • newsletter/tags/9.1.7/plugin.php

    r3473322 r3480862  
    55  Plugin URI: https://www.thenewsletterplugin.com
    66  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
    7   Version: 9.1.6
     7  Version: 9.1.7
    88  Author: Stefano Lissa & The Newsletter Team
    99  Author URI: https://www.thenewsletterplugin.com
     
    3131 */
    3232
    33 define('NEWSLETTER_VERSION', '9.1.6');
     33define('NEWSLETTER_VERSION', '9.1.7');
    3434
    3535global $wpdb, $newsletter;
  • newsletter/tags/9.1.7/readme.txt

    r3473322 r3480862  
    22Tags: newsletter, subscription, email marketing, welcome email, signup forms
    33Tested up to: 6.9.1
    4 Stable tag: 9.1.6
     4Stable tag: 9.1.7
    55Contributors: satollo,webagile
    66License: GPLv2 or later
     
    178178
    179179== Changelog ==
     180
     181= 9.1.7 =
     182
     183* Removed a debug log ending on the php error log
     184* Improved the main settings for sites with big number of pages
     185* Added "newsletter_user_saved" event on admin saving
     186* Improved the scheduler help page
    180187
    181188= 9.1.6 =
  • newsletter/tags/9.1.7/system/delivery.php

    r3470911 r3480862  
    689689
    690690                                            </td>
     691
    691692                                        </tr>
    692693                                    <?php } ?>
  • newsletter/tags/9.1.7/system/scheduler.php

    r3442382 r3480862  
    1212if ($controls->is_action('reset')) {
    1313    $this->reset_cron_stats();
    14     $controls->add_message_done();
     14    $controls->add_message('Statistics reset, now wait at least one hour to see new valid data');
    1515}
    1616
     
    5959
    6060    <div id="tnp-heading">
    61 
    62 <!--        <h2><?php esc_html_e('System', 'newsletter') ?></h2>-->
    6361        <?php include __DIR__ . '/nav.php' ?>
    64 
    6562    </div>
    6663
     
    7269        <form method="post" action="">
    7370            <?php $controls->init(); ?>
     71
     72            <p><?php $controls->btn('reset', __('Reset statistics', 'newsletter'), ['confirm' => true, 'secondary' => true]); ?></p>
    7473
    7574
     
    184183                                </td>
    185184                            </tr>
     185
     186                            <tr>
     187                                <td>Scheduler working?</td>
     188                                <td class="status">&nbsp;</td>
     189                                <td>
     190                                    <?php echo get_transient('doing_cron') ? 'Yes':'No'; ?>
     191                                </td>
     192                            </tr>
     193
    186194                        </table>
    187195                    </div>
     
    241249                            </script>
    242250
    243                             <p><?php $controls->button_reset() ?></p>
    244 
    245 
    246251                        <?php } ?>
    247252                    </div>
     
    456461                                </td>
    457462                            </tr>
     463
     464                            <?php
     465                            if (is_plugin_active('litespeed-cache/litespeed-cache.php')) {
     466                                ?>
     467                                <tr>
     468                                    <td>LiteSpeed Cache plugin</td>
     469                                    <td class="status">
     470                                        <?php $this->condition_flag(2); ?>
     471                                    </td>
     472                                    <td>
     473                                        If the Object Cache is active check if the Redis or Memcached parameters are set correctly and
     474                                        the connection is ok, otherwise the scheduler will suffer serious problems (skipped jobs and
     475                                        execution of only one job per run).
     476                                    </td>
     477                                </tr>
     478                            <?php } ?>
     479
    458480                        </table>
    459481                    </div>
  • newsletter/tags/9.1.7/system/system-admin.php

    r3408191 r3480862  
    1212    const JOB_SKIPPED = 3;
    1313    const JOB_FAR_FUTURE = 4;
    14 
    1514
    1615    /**
     
    122121        // If the job is scheduled in the future but too far (yes, we saw even that one...)
    123122        // Should never happen since there is a check and a fix on NewsletterAdmin
    124         if ($x > time() + NEWSLETTER_CRON_INTERVAL*2) {
     123        if ($x > time() + NEWSLETTER_CRON_INTERVAL * 2) {
    125124            return self::JOB_FAR_FUTURE;
    126125        }
     
    130129        // that make the scheduler loop to end prematurely.
    131130        $calls = $this->get_option_array('newsletter_diagnostic_cron_calls');
    132         if (!empty($calls)) {
     131        if (!empty($calls) && !get_transient('doing_cron')) {
    133132            $last = end($calls);
    134133            if ($last > $x + 300) {
     
    137136        }
    138137
    139         if (time() - $x > NEWSLETTER_CRON_INTERVAL*3) {
    140             return self::JOB_LATE;
    141         }
     138        // If the stats have been reset, we don't know
     139        if (!empty($calls)) {
     140            if (time() - $x > NEWSLETTER_CRON_INTERVAL * 3) {
     141                return self::JOB_LATE;
     142            }
     143        }
     144
    142145        return self::JOB_OK;
    143146    }
     
    182185
    183186            $send_mean = $delta / $send_calls[$i][2];
    184             $send_speed = $send_calls[$i][2]/$delta;
     187            $send_speed = $send_calls[$i][2] / $delta;
    185188            $stats->means[] = $send_mean;
    186189            $stats->sizes[] = $send_calls[$i][2];
     
    327330        update_option('newsletter_system_warnings', [], false);
    328331    }
    329 
    330332}
    331333
     
    365367    var $sizes = [];
    366368    var $speeds = [];
    367 
    368369}
    369 
  • newsletter/tags/9.1.7/users/edit.php

    r3473322 r3480862  
    5959        }
    6060
    61         $user = $this->save_user($controls->data);
    62         $this->add_user_log($user, 'edit');
     61        $new_user = $this->save_user($controls->data);
     62
    6363        //$this->save_user_meta($id, 'ip', $controls->data['ip']);
    64         if ($user === false) {
    65             $controls->errors = esc_html__('Error. Check the log files.', 'newsletter');
     64
     65        if ($new_user === false) {
     66            $controls->errors = esc_html__('Database error. Check the log files.', 'newsletter');
    6667        } else {
     68            $this->add_user_log($new_user, 'edit');
     69
     70            do_action('newsletter_user_saved', $new_user, $old_user, 'admin');
     71            $user = $new_user;
     72
    6773            $controls->add_toast_saved();
    6874            $controls->data = (array) $user;
  • newsletter/trunk/classes/Newsletter/News.php

    r3466966 r3480862  
    2626
    2727        $news = json_decode(wp_remote_retrieve_body($response), true);
    28         error_log(wp_remote_retrieve_body($response));
    2928
    3029        // Firewall returns an invalid response
  • newsletter/trunk/includes/controls.php

    r3401857 r3480862  
    716716    function page($name = 'page', $first = null, $language = '', $show_id = false) {
    717717
    718         $front_page_id = (int)get_option('page_on_front');
    719         $blog_page_id = (int)get_option('page_for_posts');
     718        $front_page_id = (int) get_option('page_on_front');
     719        $blog_page_id = (int) get_option('page_for_posts');
    720720        $args = array(
    721721            'post_type' => 'page',
    722722            // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page
    723             'posts_per_page' => 1500,
    724             'offset' => 0,
     723            'posts_per_page' => 50,
     724            //'offset' => 0,
    725725            'orderby' => 'post_title',
    726726            'order' => 'ASC',
    727727            'post_status' => 'any',
    728             'suppress_filters' => true
     728            'suppress_filters' => false,
     729            'ignore_sticky_posts' => 1
    729730        );
    730731
    731         $pages = get_posts($args);
     732        $paged = 1;
    732733        $options = [];
    733         foreach ($pages as $page) {
    734             /* @var $page WP_Post */
    735             $label = $page->post_title;
    736             if ($page->post_status != 'publish') {
    737                 $label .= ' (' . $page->post_status . ')';
    738             }
    739             if ($show_id) {
    740                 $label .= ' [#' . $page->ID . ']';
    741             }
    742 
    743             if ($page->ID == $front_page_id) {
    744                 $label .= ' (front page)';
    745             } elseif ($page->ID == $blog_page_id) {
    746                 $label .= ' (post list page)';
    747             }
    748 
    749             $options[$page->ID] = $label;
     734
     735        while (true) {
     736            $args['paged'] = $paged;
     737            $paged++;
     738
     739            $pages = get_posts($args);
     740
     741            if (!$pages) {
     742                break;
     743            }
     744
     745            if ($paged == 30) {
     746                break;
     747            }
     748
     749            foreach ($pages as $page) {
     750                /* @var $page WP_Post */
     751                $label = $page->post_title;
     752                if ($page->post_status != 'publish') {
     753                    $label .= ' (' . $page->post_status . ')';
     754                }
     755                if ($show_id) {
     756                    $label .= ' [#' . $page->ID . ']';
     757                }
     758
     759                if ($page->ID == $front_page_id) {
     760                    $label .= ' (front page)';
     761                } elseif ($page->ID == $blog_page_id) {
     762                    $label .= ' (post list page)';
     763                }
     764
     765                $options[$page->ID] = $label;
     766            }
     767            unset($pages);
     768            gc_collect_cycles();
    750769        }
    751770        $this->select($name, $options, $first);
     
    11991218    }
    12001219
    1201 
    12021220    /**
    12031221     * Creates a button with "delete" action.
     
    13631381                <ul>
    13641382                    <li><a href = "#tabs-a">Default</a></li>
    1365                     <?php foreach ($languages as $key => $value) {
    1366                         ?>
     1383            <?php foreach ($languages as $key => $value) {
     1384                ?>
    13671385                        <li><a href="#tabs-a-<?php echo esc_attr($key) ?>"><?php echo esc_html($value) ?></a></li>
    13681386                    <?php } ?>
     
    13701388
    13711389                <div id="tabs-a">
    1372                     <?php $this->wp_editor('confirmation_text'); ?>
     1390            <?php $this->wp_editor('confirmation_text'); ?>
    13731391                </div>
    1374                 <?php foreach ($languages as $key => $value) { ?>
     1392                    <?php foreach ($languages as $key => $value) { ?>
    13751393                    <div id="tabs-a-<?php echo esc_attr($key) ?>">
    1376                         <?php $this->wp_editor($key . '_confirmation_text', $settings); ?>
     1394                    <?php $this->wp_editor($key . '_confirmation_text', $settings); ?>
    13771395                    </div>
    1378                 <?php } ?>
     1396                    <?php } ?>
    13791397            </div>
    1380         <?php } else { ?>
     1398            <?php } else { ?>
    13811399            <?php $this->wp_editor('confirmation_text', $settings); ?>
    13821400        <?php } ?>
  • newsletter/trunk/plugin.php

    r3473322 r3480862  
    55  Plugin URI: https://www.thenewsletterplugin.com
    66  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
    7   Version: 9.1.6
     7  Version: 9.1.7
    88  Author: Stefano Lissa & The Newsletter Team
    99  Author URI: https://www.thenewsletterplugin.com
     
    3131 */
    3232
    33 define('NEWSLETTER_VERSION', '9.1.6');
     33define('NEWSLETTER_VERSION', '9.1.7');
    3434
    3535global $wpdb, $newsletter;
  • newsletter/trunk/readme.txt

    r3473322 r3480862  
    22Tags: newsletter, subscription, email marketing, welcome email, signup forms
    33Tested up to: 6.9.1
    4 Stable tag: 9.1.6
     4Stable tag: 9.1.7
    55Contributors: satollo,webagile
    66License: GPLv2 or later
     
    178178
    179179== Changelog ==
     180
     181= 9.1.7 =
     182
     183* Removed a debug log ending on the php error log
     184* Improved the main settings for sites with big number of pages
     185* Added "newsletter_user_saved" event on admin saving
     186* Improved the scheduler help page
    180187
    181188= 9.1.6 =
  • newsletter/trunk/system/delivery.php

    r3470911 r3480862  
    689689
    690690                                            </td>
     691
    691692                                        </tr>
    692693                                    <?php } ?>
  • newsletter/trunk/system/scheduler.php

    r3442382 r3480862  
    1212if ($controls->is_action('reset')) {
    1313    $this->reset_cron_stats();
    14     $controls->add_message_done();
     14    $controls->add_message('Statistics reset, now wait at least one hour to see new valid data');
    1515}
    1616
     
    5959
    6060    <div id="tnp-heading">
    61 
    62 <!--        <h2><?php esc_html_e('System', 'newsletter') ?></h2>-->
    6361        <?php include __DIR__ . '/nav.php' ?>
    64 
    6562    </div>
    6663
     
    7269        <form method="post" action="">
    7370            <?php $controls->init(); ?>
     71
     72            <p><?php $controls->btn('reset', __('Reset statistics', 'newsletter'), ['confirm' => true, 'secondary' => true]); ?></p>
    7473
    7574
     
    184183                                </td>
    185184                            </tr>
     185
     186                            <tr>
     187                                <td>Scheduler working?</td>
     188                                <td class="status">&nbsp;</td>
     189                                <td>
     190                                    <?php echo get_transient('doing_cron') ? 'Yes':'No'; ?>
     191                                </td>
     192                            </tr>
     193
    186194                        </table>
    187195                    </div>
     
    241249                            </script>
    242250
    243                             <p><?php $controls->button_reset() ?></p>
    244 
    245 
    246251                        <?php } ?>
    247252                    </div>
     
    456461                                </td>
    457462                            </tr>
     463
     464                            <?php
     465                            if (is_plugin_active('litespeed-cache/litespeed-cache.php')) {
     466                                ?>
     467                                <tr>
     468                                    <td>LiteSpeed Cache plugin</td>
     469                                    <td class="status">
     470                                        <?php $this->condition_flag(2); ?>
     471                                    </td>
     472                                    <td>
     473                                        If the Object Cache is active check if the Redis or Memcached parameters are set correctly and
     474                                        the connection is ok, otherwise the scheduler will suffer serious problems (skipped jobs and
     475                                        execution of only one job per run).
     476                                    </td>
     477                                </tr>
     478                            <?php } ?>
     479
    458480                        </table>
    459481                    </div>
  • newsletter/trunk/system/system-admin.php

    r3408191 r3480862  
    1212    const JOB_SKIPPED = 3;
    1313    const JOB_FAR_FUTURE = 4;
    14 
    1514
    1615    /**
     
    122121        // If the job is scheduled in the future but too far (yes, we saw even that one...)
    123122        // Should never happen since there is a check and a fix on NewsletterAdmin
    124         if ($x > time() + NEWSLETTER_CRON_INTERVAL*2) {
     123        if ($x > time() + NEWSLETTER_CRON_INTERVAL * 2) {
    125124            return self::JOB_FAR_FUTURE;
    126125        }
     
    130129        // that make the scheduler loop to end prematurely.
    131130        $calls = $this->get_option_array('newsletter_diagnostic_cron_calls');
    132         if (!empty($calls)) {
     131        if (!empty($calls) && !get_transient('doing_cron')) {
    133132            $last = end($calls);
    134133            if ($last > $x + 300) {
     
    137136        }
    138137
    139         if (time() - $x > NEWSLETTER_CRON_INTERVAL*3) {
    140             return self::JOB_LATE;
    141         }
     138        // If the stats have been reset, we don't know
     139        if (!empty($calls)) {
     140            if (time() - $x > NEWSLETTER_CRON_INTERVAL * 3) {
     141                return self::JOB_LATE;
     142            }
     143        }
     144
    142145        return self::JOB_OK;
    143146    }
     
    182185
    183186            $send_mean = $delta / $send_calls[$i][2];
    184             $send_speed = $send_calls[$i][2]/$delta;
     187            $send_speed = $send_calls[$i][2] / $delta;
    185188            $stats->means[] = $send_mean;
    186189            $stats->sizes[] = $send_calls[$i][2];
     
    327330        update_option('newsletter_system_warnings', [], false);
    328331    }
    329 
    330332}
    331333
     
    365367    var $sizes = [];
    366368    var $speeds = [];
    367 
    368369}
    369 
  • newsletter/trunk/users/edit.php

    r3473322 r3480862  
    5959        }
    6060
    61         $user = $this->save_user($controls->data);
    62         $this->add_user_log($user, 'edit');
     61        $new_user = $this->save_user($controls->data);
     62
    6363        //$this->save_user_meta($id, 'ip', $controls->data['ip']);
    64         if ($user === false) {
    65             $controls->errors = esc_html__('Error. Check the log files.', 'newsletter');
     64
     65        if ($new_user === false) {
     66            $controls->errors = esc_html__('Database error. Check the log files.', 'newsletter');
    6667        } else {
     68            $this->add_user_log($new_user, 'edit');
     69
     70            do_action('newsletter_user_saved', $new_user, $old_user, 'admin');
     71            $user = $new_user;
     72
    6773            $controls->add_toast_saved();
    6874            $controls->data = (array) $user;
Note: See TracChangeset for help on using the changeset viewer.