| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252 |
- <?php
- defined('ABSPATH') || exit;
- @include_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
- $module = Newsletter::instance();
- $controls = new NewsletterControls();
- /* @var $wpdb wpdb */
- $wp_cron_calls = get_option('newsletter_diagnostic_cron_calls', array());
- $total = 0;
- $wp_cron_calls_max = 0;
- $wp_cron_calls_min = 0;
- $wp_cron_calls_avg = 0;
- if (count($wp_cron_calls) > 20) {
-
- for ($i = 1; $i < count($wp_cron_calls); $i++) {
- $diff = $wp_cron_calls[$i] - $wp_cron_calls[$i - 1];
- $total += $diff;
- if ($wp_cron_calls_min == 0 || $wp_cron_calls_min > $diff) {
- $wp_cron_calls_min = $diff;
- }
- if ($wp_cron_calls_max < $diff) {
- $wp_cron_calls_max = $diff;
- }
- }
- $wp_cron_calls_avg = (int) ($total / (count($wp_cron_calls) - 1));
- }
- if ($controls->is_action('delete_logs')) {
- $files = glob(WP_CONTENT_DIR . '/logs/newsletter/*.txt');
- foreach ($files as $file) {
- if (is_file($file))
- unlink($file);
- }
- $secret = NewsletterModule::get_token(8);
- update_option('newsletter_logger_secret', $secret);
- $controls->messages = 'Logs deleted';
- }
- if ($controls->is_action('reschedule')) {
- wp_clear_scheduled_hook('newsletter');
- wp_schedule_event(time() + 30, 'newsletter', 'newsletter');
- $controls->add_message_done();
- }
- if ($controls->is_action('trigger')) {
- Newsletter::instance()->hook_newsletter();
- $controls->messages = 'Triggered';
- }
- if ($controls->is_action('conversion')) {
- $this->logger->info('Maybe convert to utf8mb4');
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
- if (function_exists('maybe_convert_table_to_utf8mb4')) {
- maybe_convert_table_to_utf8mb4(NEWSLETTER_EMAILS_TABLE);
- maybe_convert_table_to_utf8mb4(NEWSLETTER_USERS_TABLE);
- $controls->messages = 'Done.';
- } else {
- $controls->errors = 'Table conversion function not available';
- }
- Newsletter::instance()->hook_newsletter();
- $controls->messages = 'Triggered';
- }
- if ($controls->is_action('test')) {
- if (!NewsletterModule::is_email($controls->data['test_email'])) {
- $controls->errors = 'The test email address is not set or is not correct.';
- }
- if (empty($controls->errors)) {
- $options = $controls->data;
- if ($controls->data['test_email'] == $module->options['sender_email']) {
- $controls->messages .= '<strong>Warning:</strong> you are using as test email the same address configured as sender in main configuration. Test can fail because of that.<br>';
- }
- $message = new TNP_Mailer_Message();
- $message->body = '<p>This is an <b>HTML</b> test email sent using the sender data set on Newsletter main setting. <a href="https://www.thenewsletterplugin.com">This is a link to an external site</a>.</p>';
- $message->body_text = 'This is a textual test email part sent using the sender data set on Newsletter main setting.';
- $message->to = $controls->data['test_email'];
- $message->subject = 'Newsletter test email at ' . date(DATE_ISO8601);
- $message->from = $module->options['sender_email'];
- $message->from_name = $module->options['sender_name'];
-
- $r = $module->deliver($message);
- if (!is_wp_error($r)) {
- $options['mail'] = 1;
- $controls->messages .= '<strong>SUCCESS</strong><br>';
- } else {
- $options['mail'] = 0;
- $options['mail_error'] = $r->get_error_message();
- $controls->errors .= '<strong>FAILED</strong> (' . $r->get_error_message() . ')<br>';
- if (!empty($module->options['return_path'])) {
- $controls->errors .= '- Try to remove the return path on main settings.<br>';
- }
- $controls->errors .= '<a href="https://www.thenewsletterplugin.com/documentation/email-sending-issues" target="_blank"><strong>' . __('Read more', 'newsletter') . '</strong></a>.';
- $parts = explode('@', $module->options['sender_email']);
- $sitename = strtolower($_SERVER['SERVER_NAME']);
- if (substr($sitename, 0, 4) == 'www.') {
- $sitename = substr($sitename, 4);
- }
- if (strtolower($sitename) != strtolower($parts[1])) {
- $controls->errors .= '- Try to set on main setting a sender address with the same domain of your blog: ' . $sitename . ' (you are using ' . $module->options['sender_email'] . ')<br>';
- }
- }
- $module->save_options($options, 'status');
- }
- }
- $options = $module->get_options('status');
- // Compute the number of newsletters ongoing and other stats
- $emails = $wpdb->get_results("select * from " . NEWSLETTER_EMAILS_TABLE . " where status='sending' and send_on<" . time() . " order by id asc");
- $total = 0;
- $queued = 0;
- foreach ($emails as $email) {
- $total += $email->total;
- $queued += $email->total - $email->sent;
- }
- $speed = Newsletter::$instance->options['scheduler_max'];
- ?>
- <div class="wrap tnp-main-status" id="tnp-wrap">
- <?php include NEWSLETTER_DIR . '/tnp-header.php'; ?>
- <div id="tnp-heading">
- <h2><?php _e('System Status', 'newsletter') ?></h2>
- </div>
- <div id="tnp-body">
- <form method="post" action="">
- <?php $controls->init(); ?>
- <h3>General checks</h3>
- <table class="widefat" id="tnp-status-table">
- <thead>
- <tr>
- <th>Parameter</th>
- <th><?php _e('Status', 'newsletter') ?></th>
- <th>Action</th>
- </tr>
- </thead>
- <tbody>
- <?php
- $method = '';
- if (function_exists('get_filesystem_method')) {
- $method = get_filesystem_method(array(), WP_PLUGIN_DIR);
- }
- ?>
- <tr>
- <td>Add-ons installable</td>
- <td>
- <?php if (empty($method)) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else if ($method == 'direct') { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <span class="tnp-ko">KO</span>
- <?php } ?>
- </td>
- <td>
- <?php if (empty($method)) { ?>
- No able to check, just try the add-ons manager one click install
- <?php } else if ($method == 'direct') { ?>
- The add-ons manager can install our add-ons
- <?php } else { ?>
- The plugins dir could be read-only, you can install add-ons uploading the package from the
- plugins panel (or uploading them directly via FTP). This is unusual you should ask te provider
- about file and folder permissions.
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Delivering</td>
- <td>
-
- </td>
- <td>
- <?php if (count($emails)) { ?>
- Delivering <?php echo count($emails) ?> newsletters to about <?php echo $queued ?> recipients.
- At speed of <?php echo $speed ?> emails per hour it will take <?php printf('%.1f', $queued / $speed) ?> hours to finish.
- <?php } else { ?>
- Nothing delivering right now
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Mailer</td>
- <td>
-
- </td>
- <td>
- <?php
- $mailer = Newsletter::instance()->get_mailer();
- $name = 'Unknown';
- if (is_object($mailer)) {
- if (method_exists($mailer, 'get_description')) {
- $name = $mailer->get_description();
- } else {
- $name = get_class($mailer);
- }
- }
- ?>
-
- <?php echo esc_html($name) ?>
- </td>
- </tr>
-
- <tr>
- <td>Mailing</td>
- <td>
- <?php if (empty($options['mail'])) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (empty($options['mail'])) { ?>
- <?php if (empty($options['mail_error'])) { ?>
- A test has never run.
- <?php } else { ?>
- Last test failed with error "<?php echo esc_html($options['mail_error']) ?>".
- <?php } ?>
- <?php } else { ?>
- Last test was successful. If you didn't receive the test email:
- <ol>
- <li>If you set the Newsletter SMTP, do a test from that panel</li>
- <li>If you're using a integration extension do a test from its configuration panel</li>
- <li>If previous points do not apply to you, ask for support to your provider reporting the emails from your blog are not delivered</li>
- </ol>
- <?php } ?>
- <br>
- <a href="https://www.thenewsletterplugin.com/documentation/email-sending-issues" target="_blank">Read more to solve your issues, if any</a>.
- <br>
- Email: <?php $controls->text_email('test_email') ?> <?php $controls->button('test', __('Send a test message')) ?>
- </td>
- </tr>
-
- <?php if (ini_get('opcache.validate_timestamps') === '0') { ?>
-
- <tr>
- <td>
- Opcache
- </td>
-
- <td>
- <span class="tnp-ko">KO</span>
- </td>
-
- <td>
- You have the PHP opcache active with file validation disable so every blog plugins update needs a webserver restart!
- </td>
- </tr>
- <?php } ?>
-
- <?php
- $return_path = $module->options['return_path'];
- if (!empty($return_path)) {
- list($return_path_local, $return_path_domain) = explode('@', $return_path);
- }
- $sender = $module->options['sender_email'];
- if (!empty($sender)) {
- list($sender_local, $sender_domain) = explode('@', $sender);
- }
- ?>
- <tr>
- <td>Return path</td>
- <td>
- <?php if (empty($return_path)) { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <?php if ($sender_domain != $return_path_domain) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- <?php } ?>
- </td>
- <td>
- <?php if (!empty($return_path)) { ?>
- Some providers require the return path domain <code><?php echo esc_html($return_path_domain) ?></code> to be identical
- to the sender domain <code><?php echo esc_html($sender_domain) ?></code>. See the main settings.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Blog Charset</td>
- <td>
- <?php if (get_option('blog_charset') == 'UTF-8') { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <span class="tnp-ko">KO</span>
- <?php } ?>
- </td>
- <td>
- Charset: <?php echo esc_html(get_option('blog_charset')) ?>
- <br>
- <?php if (get_option('blog_charset') == 'UTF-8') { ?>
- <?php } else { ?>
- Your blog charset is <?php echo esc_html(get_option('blog_charset')) ?> but it is recommended to use
- the <code>UTF-8</code> charset but the <a href="https://codex.wordpress.org/Converting_Database_Character_Sets" target="_blank">conversion</a>
- could be tricky. If you're not experiencing problem, leave things as is.
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>PHP version</td>
- <td>
- <?php if (version_compare(phpversion(), '5.3', '<')) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- Your PHP version is <?php echo phpversion() ?><br>
- <?php if (version_compare(phpversion(), '5.3', '<')) { ?>
- Newsletter plugin works correctly with PHP version 5.3 or greater. Ask your provider to upgrade your PHP. Your version is
- unsupported even by the PHP community.
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Curl version</td>
- <td>
- <?php if (!function_exists('curl_version')) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!function_exists('curl_version')) { ?>
- cUrl is not available, ask the provider to install it and activate the PHP cUrl library
- <?php
- } else {
- $version = curl_version();
- echo 'Version: ' . $version['version'] . '<br>';
- echo 'SSL Version: ' . $version['ssl_version'] . '<br>';
- }
- ?>
- </td>
- </tr>
-
- <?php
- $value = (int) ini_get('max_execution_time');
- $res = true;
- if ($value != 0 && $value < NEWSLETTER_CRON_INTERVAL) {
- $res = set_time_limit(NEWSLETTER_CRON_INTERVAL);
- }
- ?>
- <tr>
- <td>Addons update</td>
- <td>
- <?php if (NEWSLETTER_EXTENSION_UPDATE) { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!NEWSLETTER_EXTENSION_UPDATE) { ?>
- Newsletter Addons update is disabled (probably in your <code>wp-config.php</code> file)
- <?php } else { ?>
- Newsletter Addons can be updated
- <?php } ?>
- </td>
- </tr>
- <?php
- $value = (int) ini_get('max_execution_time');
- $res = true;
- if ($value != 0 && $value < NEWSLETTER_CRON_INTERVAL) {
- $res = set_time_limit(NEWSLETTER_CRON_INTERVAL);
- }
- ?>
- <tr>
- <td>PHP execution time limit</td>
- <td>
- <?php if ($res) { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <span class="tnp-ko">KO</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!$res) { ?>
- Your PHP execution time limit is <?php echo $value ?> seconds and cannot be changed or
- is too lower to grant the maximum delivery rate of Newsletter.
- <?php } else { ?>
- Your PHP execution time limit is <?php echo $value ?> seconds and can be eventually changed by Newsletter<br>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Home URL</td>
- <td>
- <?php if (strpos(home_url('/'), 'http') !== 0) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- Value: <?php echo home_url('/'); ?>
- <br>
- <?php if (strpos(home_url('/'), 'http') !== 0) { ?>
- Your home URL is not absolute, emails require absolute URLs.
- Probably you have a protocol agnostic plugin installed to manage both HTTPS and HTTP in your
- blog.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>WP_CONTENT_URL</td>
- <td>
- <?php if (strpos(WP_CONTENT_URL, 'http') !== 0) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- Value: <?php echo WP_CONTENT_URL; ?>
- <br>
- <?php if (strpos(WP_CONTENT_URL, 'http') !== 0) { ?>
- Your content URL is not absolute, emails require absolute URLs when they have images inside.
- Newsletter tries to deal with this problem but when a problem with images persists, you should try to remove
- from your wp-config.php the WP_CONTENT_URL define and check again.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>Database Charset</td>
- <td>
- <?php if ($wpdb->charset != 'utf8mb4') { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- Charset: <?php echo $wpdb->charset; ?>
- <br>
- <?php if ($wpdb->charset != 'utf8mb4') { ?>
- The recommended charset for your database is <code>utf8mb4</code> to avoid possible saving errors when you use emoji.
- Read the WordPress Codex <a href="https://codex.wordpress.org/Converting_Database_Character_Sets" target="_blank">conversion
- instructions</a> (skilled technicia required).
- <?php } else { ?>
- If you experience newsletter saving database error
- <?php $controls->button('conversion', 'Try tables upgrade')?>
- <?php } ?>
- </td>
- </tr>
- <?php $wait_timeout = $wpdb->get_var("select @@wait_timeout"); ?>
- <tr>
- <td>Database wait timeout</td>
- <td>
- <?php if ($wait_timeout < 30) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- Your database wait timeout is <?php echo $wait_timeout; ?> seconds<br>
- <?php if ($wait_timeout < 30) { ?>
- That value is low and could produce database connection errors while sending emails or during long import
- sessions. Ask the provider to raise it at least to 60 seconds.
- <?php } ?>
- </td>
- </tr>
- <?php
- $res = $wpdb->query("drop table if exists {$wpdb->prefix}newsletter_test");
- $res = $wpdb->query("create table if not exists {$wpdb->prefix}newsletter_test (id int(20))");
- ?>
- <tr>
- <td>Database table creation</td>
- <td>
- <?php if ($res === false) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($res === false) { ?>
- Check the privileges of the user you use to connect to the database, it seems it cannot create tables.<br>
- (<?php echo esc_html($wpdb->last_error) ?>)
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <?php
- $res = $wpdb->query("alter table {$wpdb->prefix}newsletter_test add column id1 int(20)");
- ?>
- <tr>
- <td>Database table change</td>
- <td>
- <?php if ($res === false) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($res === false) { ?>
- Check the privileges of the user you use to connect to the database, it seems it cannot change the tables. It's require to update the
- plugin.<br>
- (<?php echo esc_html($wpdb->last_error) ?>)
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <?php
- // Clean up
- $res = $wpdb->query("drop table if exists {$wpdb->prefix}newsletter_test");
- ?>
- <?php
- set_transient('newsletter_transient_test', 1, 300);
- delete_transient('newsletter_transient_test');
- $res = get_transient('newsletter_transient_test');
- ?>
- <tr>
- <td>WordPress transients</td>
- <td>
- <?php if ($res !== false) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($res !== false) { ?>
- Transients cannot be delete. This can block the delivery engine. Usually it is due to a not well coded plugin installed.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <?php
- $time = wp_next_scheduled('newsletter');
- $res = true;
- if ($time === false) {
- $res = false;
- }
- $delta = $time - time();
- if ($delta <= -600) {
- $res = false;
- }
- ?>
- <tr>
- <td>Newsletter schedule timing</td>
- <td>
- <?php if ($res === false) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($time === false) { ?>
- No next execution is planned.
- <?php $controls->button('reschedule', 'Reset') ?>
- <?php } else if ($delta <= -600) { ?>
- The scheduler is very late: <?php echo $delta ?> seconds (<a href="https://www.thenewsletterplugin.com/plugins/newsletter/newsletter-delivery-engine" target="_blank">read more</a>)
- <?php $controls->button('trigger', 'Trigger') ?>
- <?php } else { ?>
- Next execution is planned in <?php echo $delta ?> seconds (negative values are ok).
- <?php } ?>
- </td>
- </tr>
- <?php
- $schedules = wp_get_schedules();
- $res = false;
- if (!empty($schedules)) {
- foreach ($schedules as $key => $data) {
- if ($key == 'newsletter') {
- $res = true;
- break;
- }
- }
- }
- ?>
- <tr>
- <td>
- Newsletter schedule
- </td>
- <td>
- <?php if ($res === false) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($res === false) { ?>
- The Newsletter schedule is not present probably another plugin is interfering with the starndard WordPress schuling system.<br>
- <?php } else { ?>
- <?php } ?>
- WordPress registered schedules:<br>
- <?php
- if (!empty($schedules)) {
- foreach ($schedules as $key => $data) {
- echo esc_html($key . ' - ' . $data['interval']) . ' seconds<br>';
- }
- }
- ?>
- </td>
- </tr>
- <tr>
- <td>
- WordPress scheduler auto trigger
- </td>
- <td>
- <?php if (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (defined('DISABLE_WP_CRON') && DISABLE_WP_CRON) { ?>
- The constant DISABLE_WP_CRON is set to true (probably in wp-config.php). That disables the scheduler auto triggering and it's
- good ONLY if you setup an external trigger.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>
- Alternate cron
- </td>
- <td>
-
- </td>
- <td>
- <?php if (defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) { ?>
- Using the alternate cron trigger.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <tr>
- <td>
- Cron calls
- </td>
- <td>
- <?php if ($wp_cron_calls_avg > NEWSLETTER_CRON_INTERVAL * 1.1) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($wp_cron_calls_avg > NEWSLETTER_CRON_INTERVAL * 1.1) { ?>
- The blog cron system is NOT triggered enough often.
- <?php } else { ?>
- <?php } ?>
- <br>
- Trigger interval: average <?php echo $wp_cron_calls_avg ?> s, max <?php echo $wp_cron_calls_max ?> s, min <?php echo $wp_cron_calls_min ?> s
- </td>
- </tr>
- <?php
- $res = true;
- $response = wp_remote_post(home_url('/') . '?na=test');
- if (is_wp_error($response)) {
- $res = false;
- $message = $response->get_error_message();
- } else {
- if (wp_remote_retrieve_response_code($response) != 200) {
- $res = false;
- $message = wp_remote_retrieve_response_message($response);
- }
- }
- ?>
- <tr>
- <td>
- Action call
- </td>
- <td>
- <?php if (!$res) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!$res) { ?>
- The blog is not responding to Newsletter URLs: ask the provider or your IT consultant to check this problem. Report the URL and error below<br>
- Error: <?php echo esc_html($message) ?><br>
- <?php } else { ?>
- <?php } ?>
- Url: <?php echo esc_html(home_url('/') . '?na=test') ?><br>
- </td>
- </tr>
- <?php
- $res = true;
- $response = wp_remote_get(site_url('/wp-cron.php') . '?' . time());
- if (is_wp_error($response)) {
- $res = false;
- $message = $response->get_error_message();
- } else {
- if (wp_remote_retrieve_response_code($response) != 200) {
- $res = false;
- $message = wp_remote_retrieve_response_message($response);
- }
- }
- ?>
- <tr>
- <td>
- WordPress scheduler auto trigger call
- </td>
- <td>
- <?php if (!$res) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!$res) { ?>
- The blog cannot autotrigger the internal scheduler, if an external trigger is used this could not be a real problem.<br>
- Error: <?php echo esc_html($message) ?><br>
- <?php } else { ?>
- <?php } ?>
- Url: <?php echo esc_html(site_url('/wp-cron.php')) ?><br>
- </td>
- </tr>
- <?php
- $res = true;
- $response = wp_remote_get('http://www.thenewsletterplugin.com/wp-content/versions/all.txt');
- if (is_wp_error($response)) {
- $res = false;
- $message = $response->get_error_message();
- } else {
- if (wp_remote_retrieve_response_code($response) != 200) {
- $res = false;
- $message = wp_remote_retrieve_response_message($response);
- }
- }
- ?>
- <tr>
- <td>
- Extension version check
- </td>
- <td>
- <?php if (!$res) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!$res) { ?>
- The blog cannot contact www.thenewsletterplugin.com to check the license or the extension versions.<br>
- Error: <?php echo esc_html($message) ?><br>
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
-
- <tr>
- <td>
- Addons update
- </td>
- <td>
- <?php if (NEWSLETTER_EXTENSION_UPDATE) { ?>
- <span class="tnp-ok">OK</span>
- <?php } else { ?>
- <span class="tnp-ko">KO</span>
- <?php } ?>
- </td>
- <td>
- <?php if (!NEWSLETTER_EXTENSION_UPDATE) { ?>
- Addons update has been disabled.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <?php
- // Send calls stats
- $send_calls = get_option('newsletter_diagnostic_send_calls', array());
- if (count($send_calls)) {
- $send_max = 0;
- $send_min = PHP_INT_MAX;
- $send_total_time = 0;
- $send_total_emails = 0;
- $send_completed = 0;
- for ($i = 0; $i < count($send_calls); $i++) {
- if (empty($send_calls[$i][2]))
- continue;
- $delta = $send_calls[$i][1] - $send_calls[$i][0];
- $send_total_time += $delta;
- $send_total_emails += $send_calls[$i][2];
- $send_mean = $delta / $send_calls[$i][2];
- if ($send_min > $send_mean) {
- $send_min = $send_mean;
- }
- if ($send_max < $send_mean) {
- $send_max = $send_mean;
- }
- if (isset($send_calls[$i][3])) {
- $send_completed++;
- }
- }
- $send_mean = $send_total_time / $send_total_emails;
- ?>
- <tr>
- <td>
- Send details
- </td>
- <td>
- <?php if ($send_mean > 1) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($send_mean > 1) { ?>
- <strong>Sending an email is taking more than 1 second, rather slow.</strong>
- <a href="https://www.thenewsletterplugin.com/documentation/status-panel#status-performance" target="_blank">Read more</a>.
- <?php } ?>
- Average time to send an email: <?php echo sprintf("%.2f", $send_mean) ?> seconds<br>
- <?php if ($send_mean > 0) { ?>
- Max speed: <?php echo sprintf("%.2f", 1.0 / $send_mean * 3600) ?> emails per hour<br>
- <?php } ?>
- Max mean time measured: <?php echo sprintf("%.2f", $send_max) ?> seconds<br>
- Min mean time measured: <?php echo sprintf("%.2f", $send_min) ?> seconds<br>
- Total email in the sample: <?php echo $send_total_emails ?><br>
- Runs in the sample: <?php echo count($send_calls); ?><br>
- Runs prematurely interrupted: <?php echo sprintf("%.2f", (count($send_calls) - $send_completed) * 100.0 / count($send_calls)) ?>%<br>
- </td>
- </tr>
- <?php
- }
- ?>
-
- <tr>
- <td>
- Cron warnings
- </td>
- <td>
- <?php if (defined('NEWSLETTER_CRON_WARNINGS') && !NEWSLETTER_CRON_WARNINGS) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (defined('NEWSLETTER_CRON_WARNINGS') && !NEWSLETTER_CRON_WARNINGS) { ?>
- Scheduler warnings are disabled in your wp-config.php with the constant <code>NEWSLETTER_CRON_WARNINGS</code> set to true.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
-
- <tr>
- <td>
- WordPress debug mode
- </td>
- <td>
- <?php if (defined('WP_DEBUG') && WP_DEBUG) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if (defined('WP_DEBUG') && WP_DEBUG) { ?>
- WordPress is in debug mode it is not recommended on a production system. See the constant WP_DEBUG inside the wp-config.php.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- <?php /*
- $memory = intval(WP_MEMORY_LIMIT);
- if (false !== strpos(WP_MEMORY_LIMIT, 'G'))
- $memory *= 1024;
- ?>
- <tr>
- <td>
- PHP memory limit
- </td>
- <td>
- <?php if ($memory < 64) { ?>
- <span class="tnp-ko">MAYBE</span>
- <?php } else if ($memory < 128) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- WordPress WP_MEMORY_LIMIT is set to <?php echo $memory ?> megabyte but your PHP setting could allow more than that.
- Anyway we suggest to set the value to at least 64M.
- <a href="https://www.thenewsletterplugin.com/documentation/status-panel#status-memory" target="_blank">Read more</a>.
- <?php if ($memory < 64) { ?>
- This value is too low you should increase it adding <code>define('WP_MEMORY_LIMIT', '64M');</code> to your <code>wp-config.php</code>.
- <a href="https://www.thenewsletterplugin.com/documentation/status-panel#status-memory" target="_blank">Read more</a>.
- <?php } else if ($memory < 128) { ?>
- The value should be fine, it depends on how many plugins you're running and how many resource are required by your theme.
- Blank pages may happen with low memory problems. Eventually increase it adding <code>define('WP_MEMORY_LIMIT', '128M');</code>
- to your <code>wp-config.php</code>.
- <a href="https://www.thenewsletterplugin.com/documentation/status-panel#status-memory" target="_blank">Read more</a>.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- */ ?>
- <?php
- $ip = gethostbyname($_SERVER['HTTP_HOST']);
- $name = gethostbyaddr($ip);
- $res = true;
- if (strpos($name, '.secureserver.net') !== false) {
- //$smtp = get_option('newsletter_main_smtp');
- //if (!empty($smtp['enabled']))
- $res = false;
- $message = 'If you\'re hosted with GoDaddy, be sure to set their SMTP (relay-hosting.secureserver.net, without username and password) to send emails
- on Newsletter SMTP panel.
- Remember they limits you to 250 emails per day. Open them a ticket for more details.';
- }
- if (strpos($name, '.aruba.it') !== false) {
- $res = false;
- $message = 'If you\'re hosted with Aruba consider to use an external SMTP (Sendgrid, Mailjet, Mailgun, Amazon SES, Elasticemail, Sparkpost, ...)
- since their mail service is not good. If you have your personal email with them, you can try to use the SMTP of your
- pesonal account. Ask the support for the SMTP parameters and configure them on Newsletter SMTP panel.';
- }
- ?>
- <tr>
- <td>Your Server</td>
- <td>
- <?php if ($res === false) { ?>
- <span class="tnp-maybe">MAYBE</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- <?php if ($res === false) { ?>
- <?php echo $message ?>
- <?php } else { ?>
- <?php } ?>
- IP: <?php echo $ip ?><br>
- Name: <?php echo $name ?><br>
- </td>
- </tr>
- <?php
- wp_mkdir_p(NEWSLETTER_LOG_DIR);
- $res = is_dir(NEWSLETTER_LOG_DIR) && is_writable(NEWSLETTER_LOG_DIR);
- if ($res) {
- @file_put_contents(NEWSLETTER_LOG_DIR . '/test.txt', "");
- $res = is_file(NEWSLETTER_LOG_DIR . '/test.txt');
- if ($res) {
- @unlink(NEWSLETTER_LOG_DIR . '/test.txt');
- }
- }
- ?>
- <tr>
- <td>
- Log folder
- </td>
- <td>
- <?php if (!$res) { ?>
- <span class="tnp-ko">KO</span>
- <?php } else { ?>
- <span class="tnp-ok">OK</span>
- <?php } ?>
- </td>
- <td>
- The log folder is <?php echo esc_html(NEWSLETTER_LOG_DIR) ?><br>
- <?php if (!$res) { ?>
- Cannot create the folder or it is not writable.
- <?php } else { ?>
- <?php } ?>
- </td>
- </tr>
- </tbody>
- </table>
- <h3>General parameters</h3>
- <table class="widefat" id="tnp-parameters-table">
- <thead>
- <tr>
- <th>Parameter</th>
- <th>Value</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Newsletter version</td>
- <td>
- <?php echo NEWSLETTER_VERSION ?>
- </td>
- </tr>
- <tr>
- <td>NEWSLETTER_MAX_EXECUTION_TIME</td>
- <td>
- <?php
- if (defined('NEWSLETTER_MAX_EXECUTION_TIME')) {
- echo NEWSLETTER_MAX_EXECUTION_TIME . ' (seconds)';
- } else {
- echo 'Not set';
- }
- ?>
- </td>
- </tr>
- <tr>
- <td>NEWSLETTER_CRON_INTERVAL</td>
- <td>
- <?php echo NEWSLETTER_CRON_INTERVAL . ' (seconds)'; ?>
- </td>
- </tr>
-
-
- <?php /*
- <tr>
- <td>WordPress plugin url</td>
- <td>
- <?php echo WP_PLUGIN_URL; ?>
- <br>
- Filters:
- <?php
- if (isset($wp_filter))
- $filters = $wp_filter['plugins_url'];
- if (!isset($filters) || !is_array($filters))
- echo 'no filters attached to "plugin_urls"';
- else {
- echo '<ul>';
- foreach ($filters as &$filter) {
- foreach ($filter as &$entry) {
- echo '<li>';
- if (is_array($entry['function']))
- echo esc_html(get_class($entry['function'][0]) . '->' . $entry['function'][1]);
- else
- echo esc_html($entry['function']);
- echo '</li>';
- }
- }
- echo '</ul>';
- }
- ?>
- <p class="description">
- This value should contains the full URL to your plugin folder. If there are filters
- attached, the value can be different from the original generated by WordPress and sometime worng.
- </p>
- </td>
- </tr>
- */ ?>
- <tr>
- <td>Absolute path</td>
- <td>
- <?php echo esc_html(ABSPATH); ?>
- </td>
- </tr>
- <tr>
- <td>Tables Prefix</td>
- <td>
- <?php echo $wpdb->prefix; ?>
- </td>
- </tr>
- </tbody>
- </table>
- <h3>Log files</h3>
- <ul class="tnp-log-files">
- <?php
- $files = glob(WP_CONTENT_DIR . '/logs/newsletter/*.txt'); // get all file names
- foreach ($files as $file) { // iterate files
- echo '<li><a href="' . WP_CONTENT_URL . '/logs/newsletter/' . basename($file) . '" target="_blank">' . basename($file) . '</a>';
- echo ' <span class="tnp-log-size">(' . size_format(filesize($file)) . ')</span>';
- echo '</li>';
- }
- ?>
- </ul>
- <?php $controls->button('delete_logs', 'Delete all'); ?>
- <?php if (isset($_GET['debug'])) { ?>
- <h3>Database Tables</h3>
- <h4><?php echo $wpdb->prefix ?>newsletter</h4>
- <?php
- $rs = $wpdb->get_results("describe {$wpdb->prefix}newsletter");
- ?>
- <table class="tnp-db-table">
- <thead>
- <tr>
- <th>Field</th>
- <th>Type</th>
- <th>Null</th>
- <th>Key</th>
- <th>Default</th>
- <th>Extra</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($rs as $r) { ?>
- <tr>
- <td><?php echo esc_html($r->Field) ?></td>
- <td><?php echo esc_html($r->Type) ?></td>
- <td><?php echo esc_html($r->Null) ?></td>
- <td><?php echo esc_html($r->Key) ?></td>
- <td><?php echo esc_html($r->Default) ?></td>
- <td><?php echo esc_html($r->Extra) ?></td>
- </tr>
- <?php } ?>
- </tbody>
- </table>
- <h4><?php echo $wpdb->prefix ?>newsletter_emails</h4>
- <?php
- $rs = $wpdb->get_results("describe {$wpdb->prefix}newsletter_emails");
- ?>
- <table class="tnp-db-table">
- <thead>
- <tr>
- <th>Field</th>
- <th>Type</th>
- <th>Null</th>
- <th>Key</th>
- <th>Default</th>
- <th>Extra</th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($rs as $r) { ?>
- <tr>
- <td><?php echo esc_html($r->Field) ?></td>
- <td><?php echo esc_html($r->Type) ?></td>
- <td><?php echo esc_html($r->Null) ?></td>
- <td><?php echo esc_html($r->Key) ?></td>
- <td><?php echo esc_html($r->Default) ?></td>
- <td><?php echo esc_html($r->Extra) ?></td>
- </tr>
- <?php } ?>
- </tbody>
- </table>
- <h3>Extensions</h3>
- <pre style="font-size: 11px; font-family: monospace; background-color: #efefef; color: #444"><?php echo esc_html(print_r(get_option('newsletter_extension_versions'), true)); ?></pre>
- <h3>Update plugins data</h3>
- <pre style="font-size: 11px; font-family: monospace; background-color: #efefef; color: #444"><?php echo esc_html(print_r(get_site_transient('update_plugins'), true)); ?></pre>
- <?php } ?>
- </div>
- <?php include NEWSLETTER_DIR . '/tnp-footer.php'; ?>
- </div>
|