Version Description
Download this release
Release Info
Developer | mitchoyoshitaka |
Plugin | Yet Another Related Posts Plugin (YARPP) |
Version | 4.0.6b3 |
Comparing to | |
See all releases |
Code changes from version 4.0.6b2 to 4.0.6b3
- class-cache.php +2 -2
- class-core.php +70 -16
- options-meta-boxes.php +4 -4
- options.php +23 -29
- readme.txt +2 -0
- yarpp.php +4 -4
class-cache.php
CHANGED
@@ -162,9 +162,9 @@ abstract class YARPP_Cache {
|
|
162 |
|
163 |
$newsql .= 'ROUND(0';
|
164 |
|
165 |
-
if ((int)
|
166 |
$newsql .= " + (MATCH (post_content) AGAINST ('".$wpdb->escape($keywords['body'])."')) * ". absint($weight['body']);
|
167 |
-
if ((int)
|
168 |
$newsql .= " + (MATCH (post_title) AGAINST ('".$wpdb->escape($keywords['title'])."')) * ". absint($weight['title']);
|
169 |
|
170 |
// Build tax criteria query parts based on the weights
|
162 |
|
163 |
$newsql .= 'ROUND(0';
|
164 |
|
165 |
+
if ( isset($weight['body']) && (int) $weight['body'] )
|
166 |
$newsql .= " + (MATCH (post_content) AGAINST ('".$wpdb->escape($keywords['body'])."')) * ". absint($weight['body']);
|
167 |
+
if ( isset($weight['body']) && (int) $weight['title'] )
|
168 |
$newsql .= " + (MATCH (post_title) AGAINST ('".$wpdb->escape($keywords['title'])."')) * ". absint($weight['title']);
|
169 |
|
170 |
// Build tax criteria query parts based on the weights
|
class-core.php
CHANGED
@@ -12,8 +12,6 @@ class YARPP {
|
|
12 |
public $admin;
|
13 |
private $storage_class;
|
14 |
|
15 |
-
public $myisam = true;
|
16 |
-
|
17 |
// here's a list of all the options YARPP uses (except version), as well as their default values, sans the yarpp_ prefix, split up into binary options and value options. These arrays are used in updating settings (options.php) and other tasks.
|
18 |
public $default_options = array();
|
19 |
public $default_hidden_metaboxes = array( 'yarpp_pool', 'yarpp_relatedness' );
|
@@ -56,6 +54,9 @@ class YARPP {
|
|
56 |
|
57 |
if ( isset($_REQUEST['yarpp_debug']) )
|
58 |
$this->debug = true;
|
|
|
|
|
|
|
59 |
|
60 |
// new in 3.4: only load UI if we're in the admin
|
61 |
if ( is_admin() ) {
|
@@ -197,14 +198,17 @@ class YARPP {
|
|
197 |
if ( $this->cache->is_enabled() === false )
|
198 |
return false;
|
199 |
|
200 |
-
|
|
|
|
|
|
|
201 |
}
|
202 |
|
203 |
// @since 3.5.2: function to enforce YARPP setup
|
204 |
-
// if
|
205 |
function enforce() {
|
206 |
-
if (
|
207 |
-
$this->activate();
|
208 |
else
|
209 |
$this->upgrade();
|
210 |
|
@@ -215,9 +219,9 @@ class YARPP {
|
|
215 |
function activate() {
|
216 |
global $wpdb;
|
217 |
|
218 |
-
if
|
219 |
-
|
220 |
-
$
|
221 |
}
|
222 |
|
223 |
if ( $this->cache->is_enabled() === false ) {
|
@@ -231,6 +235,7 @@ class YARPP {
|
|
231 |
|
232 |
if ( !get_option('yarpp_version') ) {
|
233 |
// new install
|
|
|
234 |
add_option( 'yarpp_version', YARPP_VERSION );
|
235 |
$this->version_info(true);
|
236 |
} else {
|
@@ -258,6 +263,54 @@ class YARPP {
|
|
258 |
return 'UNKNOWN';
|
259 |
}
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
function diagnostic_fulltext_indices() {
|
262 |
global $wpdb;
|
263 |
$wpdb->get_results("show index from $wpdb->posts where Key_name = 'yarpp_title' or Key_name = 'yarpp_content'");
|
@@ -718,7 +771,7 @@ class YARPP {
|
|
718 |
}
|
719 |
|
720 |
public function optin_data() {
|
721 |
-
global $wpdb
|
722 |
|
723 |
$comments = wp_count_comments();
|
724 |
$users = count_users();
|
@@ -751,6 +804,7 @@ class YARPP {
|
|
751 |
),
|
752 |
'diagnostics' => array(
|
753 |
'myisam_posts' => $this->diagnostic_myisam_posts(),
|
|
|
754 |
'fulltext_indices' => $this->diagnostic_fulltext_indices(),
|
755 |
'hidden_metaboxes' => $this->diagnostic_hidden_metaboxes(),
|
756 |
'post_thumbnails' => $this->diagnostic_post_thumbnails(),
|
@@ -780,20 +834,20 @@ class YARPP {
|
|
780 |
|
781 |
$changed = array();
|
782 |
foreach ( $check_changed as $key ) {
|
783 |
-
if ( $
|
784 |
$changed[] = $key;
|
785 |
}
|
786 |
foreach ( array( 'before_related', 'rss_before_related' ) as $key ) {
|
787 |
if ( $settings[$key] != '<p>'.__('Related posts:','yarpp').'</p><ol>' &&
|
788 |
-
$settings[$key] != $
|
789 |
$changed[] = $key;
|
790 |
}
|
791 |
$data['yarpp']['changed_settings'] = implode( '|', $changed );
|
792 |
|
793 |
-
if ( method_exists( $
|
794 |
-
$data['yarpp']['cache_status'] = $
|
795 |
-
if ( method_exists( $
|
796 |
-
$stats = $
|
797 |
$flattened = array();
|
798 |
foreach ( $stats as $key => $value )
|
799 |
$flattened[] = "$key:$value";
|
12 |
public $admin;
|
13 |
private $storage_class;
|
14 |
|
|
|
|
|
15 |
// here's a list of all the options YARPP uses (except version), as well as their default values, sans the yarpp_ prefix, split up into binary options and value options. These arrays are used in updating settings (options.php) and other tasks.
|
16 |
public $default_options = array();
|
17 |
public $default_hidden_metaboxes = array( 'yarpp_pool', 'yarpp_relatedness' );
|
54 |
|
55 |
if ( isset($_REQUEST['yarpp_debug']) )
|
56 |
$this->debug = true;
|
57 |
+
|
58 |
+
if ( !get_option('yarpp_version') )
|
59 |
+
update_option( 'yarpp_activated', true );
|
60 |
|
61 |
// new in 3.4: only load UI if we're in the admin
|
62 |
if ( is_admin() ) {
|
198 |
if ( $this->cache->is_enabled() === false )
|
199 |
return false;
|
200 |
|
201 |
+
if ( !$this->diagnostic_fulltext_disabled() )
|
202 |
+
return $this->diagnostic_fulltext_indices();
|
203 |
+
|
204 |
+
return true;
|
205 |
}
|
206 |
|
207 |
// @since 3.5.2: function to enforce YARPP setup
|
208 |
+
// if not ready, activate; else upgrade
|
209 |
function enforce() {
|
210 |
+
if ( !$this->enabled() )
|
211 |
+
$this->activate(); // activate calls upgrade later, so it's covered.
|
212 |
else
|
213 |
$this->upgrade();
|
214 |
|
219 |
function activate() {
|
220 |
global $wpdb;
|
221 |
|
222 |
+
// if it's not known to be disabled, but the indexes aren't there:
|
223 |
+
if ( !$this->diagnostic_fulltext_disabled() && !$this->diagnostic_fulltext_indices() ) {
|
224 |
+
$this->enable_fulltext();
|
225 |
}
|
226 |
|
227 |
if ( $this->cache->is_enabled() === false ) {
|
235 |
|
236 |
if ( !get_option('yarpp_version') ) {
|
237 |
// new install
|
238 |
+
|
239 |
add_option( 'yarpp_version', YARPP_VERSION );
|
240 |
$this->version_info(true);
|
241 |
} else {
|
263 |
return 'UNKNOWN';
|
264 |
}
|
265 |
|
266 |
+
function diagnostic_fulltext_disabled() {
|
267 |
+
return get_option( 'yarpp_fulltext_disabled', false );
|
268 |
+
}
|
269 |
+
|
270 |
+
function enable_fulltext( $override_myisam = false ) {
|
271 |
+
global $wpdb;
|
272 |
+
|
273 |
+
// todo: check the myisam_override option instead.
|
274 |
+
if ( !$override_myisam ) {
|
275 |
+
$table_type = $this->diagnostic_myisam_posts();
|
276 |
+
if ( $table_type !== true ) {
|
277 |
+
$this->disable_fulltext();
|
278 |
+
return;
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
+
// temporarily ensure that errors are not displayed:
|
283 |
+
$previous_value = $wpdb->hide_errors();
|
284 |
+
|
285 |
+
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_title` ( `post_title` )");
|
286 |
+
if ( !empty($wpdb->last_error) )
|
287 |
+
$this->disable_fulltext();
|
288 |
+
|
289 |
+
$wpdb->query("ALTER TABLE $wpdb->posts ADD FULLTEXT `yarpp_content` ( `post_content` )");
|
290 |
+
if ( !empty($wpdb->last_error) )
|
291 |
+
$this->disable_fulltext();
|
292 |
+
|
293 |
+
// restore previous setting
|
294 |
+
$wpdb->show_errors( $previous_value );
|
295 |
+
}
|
296 |
+
|
297 |
+
function disable_fulltext() {
|
298 |
+
if ( get_option( 'yarpp_fulltext_disabled', false ) == true )
|
299 |
+
return;
|
300 |
+
|
301 |
+
// rm title and body weights:
|
302 |
+
$weight = $this->get_option('weight');
|
303 |
+
unset($weight['title']);
|
304 |
+
unset($weight['body']);
|
305 |
+
$this->set_option(array('weight' => $weight));
|
306 |
+
|
307 |
+
// cut threshold by half:
|
308 |
+
$threshold = (float) $this->get_option('threshold');
|
309 |
+
$this->set_option(array('threshold' => round($threshold / 2) ));
|
310 |
+
|
311 |
+
update_option( 'yarpp_fulltext_disabled', true );
|
312 |
+
}
|
313 |
+
|
314 |
function diagnostic_fulltext_indices() {
|
315 |
global $wpdb;
|
316 |
$wpdb->get_results("show index from $wpdb->posts where Key_name = 'yarpp_title' or Key_name = 'yarpp_content'");
|
771 |
}
|
772 |
|
773 |
public function optin_data() {
|
774 |
+
global $wpdb;
|
775 |
|
776 |
$comments = wp_count_comments();
|
777 |
$users = count_users();
|
804 |
),
|
805 |
'diagnostics' => array(
|
806 |
'myisam_posts' => $this->diagnostic_myisam_posts(),
|
807 |
+
'fulltext_disabled' => $this->diagnostic_fulltext_disabled(),
|
808 |
'fulltext_indices' => $this->diagnostic_fulltext_indices(),
|
809 |
'hidden_metaboxes' => $this->diagnostic_hidden_metaboxes(),
|
810 |
'post_thumbnails' => $this->diagnostic_post_thumbnails(),
|
834 |
|
835 |
$changed = array();
|
836 |
foreach ( $check_changed as $key ) {
|
837 |
+
if ( $this->default_options[$key] != $settings[$key] )
|
838 |
$changed[] = $key;
|
839 |
}
|
840 |
foreach ( array( 'before_related', 'rss_before_related' ) as $key ) {
|
841 |
if ( $settings[$key] != '<p>'.__('Related posts:','yarpp').'</p><ol>' &&
|
842 |
+
$settings[$key] != $this->default_options[$key] )
|
843 |
$changed[] = $key;
|
844 |
}
|
845 |
$data['yarpp']['changed_settings'] = implode( '|', $changed );
|
846 |
|
847 |
+
if ( method_exists( $this->cache, 'cache_status' ) )
|
848 |
+
$data['yarpp']['cache_status'] = $this->cache->cache_status();
|
849 |
+
if ( method_exists( $this->cache, 'stats' ) ) {
|
850 |
+
$stats = $this->cache->stats();
|
851 |
$flattened = array();
|
852 |
foreach ( $stats as $key => $value )
|
853 |
$flattened[] = "$key:$value";
|
options-meta-boxes.php
CHANGED
@@ -116,13 +116,13 @@ class YARPP_Meta_Box {
|
|
116 |
$weight = (int) yarpp_get_option( "weight[$option]" );
|
117 |
|
118 |
// both require MyISAM fulltext indexing:
|
119 |
-
$
|
120 |
|
121 |
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>$desc</div><div>";
|
122 |
echo "<select name='weight[$option]'>";
|
123 |
-
echo "<option $
|
124 |
-
echo "<option $
|
125 |
-
echo "<option $
|
126 |
echo "</select></div></div>";
|
127 |
}
|
128 |
|
116 |
$weight = (int) yarpp_get_option( "weight[$option]" );
|
117 |
|
118 |
// both require MyISAM fulltext indexing:
|
119 |
+
$fulltext = $yarpp->diagnostic_fulltext_disabled() ? ' readonly="readonly" disabled="disabled"' : '';
|
120 |
|
121 |
echo "<div class='yarpp_form_row yarpp_form_select'><div class='yarpp_form_label'>$desc</div><div>";
|
122 |
echo "<select name='weight[$option]'>";
|
123 |
+
echo "<option $fulltext value='no'". ( !$weight ? ' selected="selected"': '' )." >".__( "do not consider", 'yarpp' )."</option>";
|
124 |
+
echo "<option $fulltext value='consider'". ( ( $weight == 1 ) ? ' selected="selected"': '' )." > ".__( "consider", 'yarpp' )."</option>";
|
125 |
+
echo "<option $fulltext value='consider_extra'". ( ( $weight > 1 ) ? ' selected="selected"': '' )." > ".__( "consider with extra weight", 'yarpp' )."</option>";
|
126 |
echo "</select></div></div>";
|
127 |
}
|
128 |
|
options.php
CHANGED
@@ -43,43 +43,37 @@ if ( current_user_can('update_plugins' ) ) {
|
|
43 |
}
|
44 |
|
45 |
if (isset($_POST['myisam_override'])) {
|
46 |
-
yarpp_set_option('myisam_override',1);
|
47 |
echo "<div class='updated'>"
|
48 |
.__("The MyISAM check has been overridden. You may now use the \"consider titles\" and \"consider bodies\" relatedness criteria.",'yarpp')
|
49 |
."</div>";
|
|
|
|
|
50 |
}
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
unset($weight['title']);
|
69 |
-
unset($weight['body']);
|
70 |
-
yarpp_set_option(array('weight' => $weight));
|
71 |
-
$yarpp->myisam = false;
|
72 |
-
}
|
73 |
}
|
74 |
|
75 |
-
if (
|
76 |
echo '<div class="updated">';
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
_e('The YARPP database has an error which could not be fixed.','yarpp');
|
81 |
-
printf(__('Please try <a href="%s" target="_blank">manual SQL setup</a>.','yarpp'), 'http://mitcho.com/code/yarpp/sql.php?prefix='.urlencode($wpdb->prefix));
|
82 |
-
}
|
83 |
echo '</div>';
|
84 |
}
|
85 |
|
43 |
}
|
44 |
|
45 |
if (isset($_POST['myisam_override'])) {
|
46 |
+
yarpp_set_option( 'myisam_override', 1 );
|
47 |
echo "<div class='updated'>"
|
48 |
.__("The MyISAM check has been overridden. You may now use the \"consider titles\" and \"consider bodies\" relatedness criteria.",'yarpp')
|
49 |
."</div>";
|
50 |
+
|
51 |
+
$yarpp->enable_fulltext( true );
|
52 |
}
|
53 |
|
54 |
+
$table_type = $yarpp->diagnostic_myisam_posts();
|
55 |
+
if ( $table_type !== true )
|
56 |
+
$yarpp->disable_fulltext();
|
57 |
+
|
58 |
+
if ( !yarpp_get_option('myisam_override') && $yarpp->diagnostic_fulltext_disabled() ) {
|
59 |
+
echo "<div class='updated'>"
|
60 |
+
.sprintf(__("YARPP's \"consider titles\" and \"consider bodies\" relatedness criteria require your <code>%s</code> table to use the <a href='http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html'>MyISAM storage engine</a>, but the table seems to be using the <code>%s</code> engine. These two options have been disabled.",'yarpp'), $wpdb->posts, $table_type)
|
61 |
+
."<br />"
|
62 |
+
.sprintf(__("To restore these features, please update your <code>%s</code> table by executing the following SQL directive: <code>ALTER TABLE `%s` ENGINE = MyISAM;</code> . No data will be erased by altering the table's engine, although there are performance implications.",'yarpp'), $wpdb->posts, $wpdb->posts)
|
63 |
+
."<br />"
|
64 |
+
.sprintf(__("If, despite this check, you are sure that <code>%s</code> is using the MyISAM engine, press this magic button:",'yarpp'), $wpdb->posts)
|
65 |
+
."<br />"
|
66 |
+
."<form method='post'><input type='submit' class='button' name='myisam_override' value='"
|
67 |
+
.__("Trust me. Let me use MyISAM features.",'yarpp')
|
68 |
+
."'></input></form>"
|
69 |
+
."</div>";
|
|
|
|
|
|
|
|
|
|
|
70 |
}
|
71 |
|
72 |
+
if ( !$yarpp->enabled() && !$yarpp->activate() ) {
|
73 |
echo '<div class="updated">';
|
74 |
+
_e('The YARPP database has an error which could not be fixed.','yarpp');
|
75 |
+
echo ' ';
|
76 |
+
printf(__('Please try <a href="%s" target="_blank">manual SQL setup</a>.','yarpp'), 'http://mitcho.com/code/yarpp/sql.php?prefix='.urlencode($wpdb->prefix));
|
|
|
|
|
|
|
77 |
echo '</div>';
|
78 |
}
|
79 |
|
readme.txt
CHANGED
@@ -256,6 +256,8 @@ If you are a bilingual speaker of English and another language and an avid user
|
|
256 |
= 4.0.6 =
|
257 |
* YARPP's automatic display will not run on posts which include the HTML comment `<!--noyarpp-->` [by request](https://wordpress.org/support/topic/disabling-yarrp-on-specific-pages).
|
258 |
* Bundled `yarpp-template-wpml.php` is now called `yarpp-template-multilingual.php`, following [discussion with the author of the Polylang plugin](https://wordpress.org/support/topic/better-integration-of-yarpp-and-polylang).
|
|
|
|
|
259 |
* Localizations
|
260 |
* Added Estonian (`est_EST`) by [JOURNAL](http://journal24.info/)
|
261 |
* Added Gujrati (`gu_IN`) by [Vikas Arora](http://www.wiznicworld.com/)
|
256 |
= 4.0.6 =
|
257 |
* YARPP's automatic display will not run on posts which include the HTML comment `<!--noyarpp-->` [by request](https://wordpress.org/support/topic/disabling-yarrp-on-specific-pages).
|
258 |
* Bundled `yarpp-template-wpml.php` is now called `yarpp-template-multilingual.php`, following [discussion with the author of the Polylang plugin](https://wordpress.org/support/topic/better-integration-of-yarpp-and-polylang).
|
259 |
+
* More robust activation handling, particularly when network-activated.
|
260 |
+
* Improved handling of exceptions, for example when fulltext indexes cannot be created or non-MyISAM tables are used.
|
261 |
* Localizations
|
262 |
* Added Estonian (`est_EST`) by [JOURNAL](http://journal24.info/)
|
263 |
* Added Gujrati (`gu_IN`) by [Vikas Arora](http://www.wiznicworld.com/)
|
yarpp.php
CHANGED
@@ -3,13 +3,13 @@
|
|
3 |
Plugin Name: Yet Another Related Posts Plugin
|
4 |
Plugin URI: http://yarpp.org/
|
5 |
Description: Returns a list of related entries based on a unique algorithm for display on your blog and RSS feeds. Now with Now with thumbnail support built-in!
|
6 |
-
Version: 4.0.
|
7 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
8 |
Author URI: http://mitcho.com/
|
9 |
Donate link: http://tinyurl.com/donatetomitcho
|
10 |
*/
|
11 |
|
12 |
-
define('YARPP_VERSION', '4.0.
|
13 |
define('YARPP_DIR', dirname(__FILE__));
|
14 |
define('YARPP_NO_RELATED', ':(');
|
15 |
define('YARPP_RELATED', ':)');
|
@@ -54,7 +54,7 @@ function yarpp_get_option($option = null) {
|
|
54 |
return $yarpp->get_option($option);
|
55 |
}
|
56 |
|
57 |
-
function yarpp_plugin_activate() {
|
58 |
update_option( 'yarpp_activated', true );
|
59 |
}
|
60 |
-
add_action( 'activate_' . plugin_basename(__FILE__), 'yarpp_plugin_activate' );
|
3 |
Plugin Name: Yet Another Related Posts Plugin
|
4 |
Plugin URI: http://yarpp.org/
|
5 |
Description: Returns a list of related entries based on a unique algorithm for display on your blog and RSS feeds. Now with Now with thumbnail support built-in!
|
6 |
+
Version: 4.0.6b3
|
7 |
Author: mitcho (Michael Yoshitaka Erlewine)
|
8 |
Author URI: http://mitcho.com/
|
9 |
Donate link: http://tinyurl.com/donatetomitcho
|
10 |
*/
|
11 |
|
12 |
+
define('YARPP_VERSION', '4.0.6b3');
|
13 |
define('YARPP_DIR', dirname(__FILE__));
|
14 |
define('YARPP_NO_RELATED', ':(');
|
15 |
define('YARPP_RELATED', ':)');
|
54 |
return $yarpp->get_option($option);
|
55 |
}
|
56 |
|
57 |
+
function yarpp_plugin_activate( $network_wide ) {
|
58 |
update_option( 'yarpp_activated', true );
|
59 |
}
|
60 |
+
add_action( 'activate_' . plugin_basename(__FILE__), 'yarpp_plugin_activate', 10, 1 );
|