Testimonials Widget - Version 2.19.3

Version Description

= 2.19.0 =

  • CSS class .title is now .job-title. Thank you Mark
  • Please resave your WordPress Admin > Testimonials > Settings so that missing aoptions are included again.
  • Shortcode and theme function testimonialswidget_list being deprecated by testimonials
  • Shortcode and theme function testimonialswidget_widget being deprecated by testimonials_slider

= 2.18.3 =

  • CSS class .hide renamed .display-none
  • This is the last version supporting pre-bxSlider options

= 2.18.2 =

  • CSS class .display-none renamed .hide

= 2.18.1 =

  • CSS is back to being always loaded in the header
  • Removed "Use bxSlider?" and "Include IE7 CSS" from widget options

= 2.18.0 =

  • remove_hentry is now true by default

= 2.16.0 =

  • Requires PHP 5.3+

= 2.15.0 =

  • If upgrading, bxSlider will not be enabled by default. You must enable it in your widget and global settings. CSS customizations must be reviewed to have the .active and .display-none classes removed. The main .testimonials-widget-testimonial class also need the display: none; and clear: left; removed.

= 2.14.0 =

  • 60 modifications See Changelog
  • CSS wp_register_style and wp_enqueue_style slug changed from 'testimonials-widget' to 'Testimonials_Widget'
  • Gravatar image size now based upon Thumbnail size in Media Settings
  • Scripts ksort removed. Use array_unshift in your testimonials_widget_testimonials_js filters instead.
  • Testimonials > Settings, General tab, option Enable Review Schema? is enabled by default.

= 2.13.6 =

  • IE 7 CSS moved to separate file. Include via Testimonials > Settings if needed

= 2.12.0 =

  • CSS and JavaScript renaming
    • bottom_text renamed to bottom-text
    • close_quote renamed to close-quote
    • display_none renamed to display-none
    • join_location renamed to join-location
    • join_title renamed to join-title
    • open_quote renamed to open-quote
    • testimonialswidget_testimonial renamed to testimonials-widget-testimonial
    • testimonialswidget_testimonials renamed to testimonials-widget-testimonials

= 2.11.3 =

  • Correct filter name testimonials_widget_next_posts_link to testimonials_widget_next_posts_link_text

= 2.11.0 =

  • CSS class names are simplified. For the most part, other than testimonialswidget_testimonial remove testimonialswidget_ from the CSS class name in your CSS customizations.
    • Ex: .testimonialswidget_join becomes .join
    • Ex: .testimonialswidget_author becomes .author
  • Testimonials are now formatted using blockquote than q for HTML5 compliance. If you need q tag formatting, enable it at WP Admin > Testimonials > Settings, Compatibility & Reset tab
    • cite is now div.credit

= 2.8.0 =

  • Deprecated
    • hide_author now hide_source
  • Removed filters testimonials_widget_options_update, testimonials_widget_options_form
    • Use testimonials_widget_validate_settings and testimonials_widget_settings instead
  • Renamed variable and related class widget_text to bottom_text

= 2.7.3 =

  • Quotes are no longer handled via q, p:before, or p:after CSS. It's handled via .testimonialswidget_testimonial .testimonialswidget_open_quote:before and .testimonialswidget_testimonial .testimonialswidget_close_quote:after
  • This change was made to keep consistency in how quotes were managed and to reduce the number of exception cases. In the end, this is simpler.

= 2.7.0 =

  • Quotes with keep_whitespace=true aren't applied via CSS .testimonialswidget_testimonial q tag anymore, but .testimonialswidget_testimonial q p:first-child:before and .testimonialswidget_testimonial q p:last-child:after
  • Widget testimonial p tags are no longer CSS display: inline, display: block as expected

= 2.4.1 =

  • Paging is on by default, except for widgets

= 2.0.0 =

  • CSS
    • Class testimonialswidget_company replaces testimonialswidget_source
    • Class testimonialswidget_source replaces testimonialswidget_author
    • The tighten widget display up, p tags within q are displayed inline.
  • JavaScript
    • The JavaScript for rotating testimonials is moved to the footer. As such, your theme requires wp_footer() in the footer.
  • Shortcode options
    • hide_source replaced by hide_url
    • hide_author replaced by hide_source
  • Testimonials
    • Migration from the old custom table to new custom post type is automatically done. Import might take a few moments to complete.
    • Company, URL and email details are attempted to be identified and placed properly based upon the original author and source fields. The company is "guessed" from the author field when there's a ", " or " of " context. If the source is an email, it's saved as such. Otherwise, it's assumed to be a URL.
    • Public testimonials are saved as Published. Non-public testimonials are marked as Private.
  • Widget options
    • "Show author" and "Show source" options are replaced by "Hide source" and "Hide URL" respectively. There's no backwards compatibility for these changes.
    • Default min-height is now 250px than 150px.
Download this release

Release Info

Developer comprock
Plugin Icon wp plugin Testimonials Widget
Version 2.19.3
Comparing to
See all releases

Code changes from version 2.19.2 to 2.19.3

CHANGELOG.md CHANGED
@@ -2,8 +2,15 @@
2
 
3
  ## master
4
 
5
- ## 2.19.2
 
 
 
 
 
 
6
 
 
7
  * Force WordPress to update files
8
 
9
  ## 2.19.1
2
 
3
  ## master
4
 
5
+ ## 2.19.3
6
+ * Refactor get_defaults
7
+ * Replace [[/]] with [/]
8
+ * Require Aihrus 1.1.2
9
+ * RESOLVE #80 DB Performance Issues
10
+ * Revise FAQ section
11
+ * Update settings page detection
12
 
13
+ ## 2.19.2
14
  * Force WordPress to update files
15
 
16
  ## 2.19.1
includes/class-testimonials-widget.php CHANGED
@@ -696,10 +696,14 @@ class Testimonials_Widget extends Aihrus_Common {
696
 
697
 
698
  public static function get_defaults( $single_view = false ) {
699
- if ( empty( $single_view ) )
700
- return apply_filters( 'testimonials_widget_defaults', tw_get_options() );
701
- else
702
- return apply_filters( 'testimonials_widget_defaults_single', tw_get_options() );
 
 
 
 
703
  }
704
 
705
 
@@ -1473,12 +1477,17 @@ EOF;
1473
  if ( has_filter( 'posts_orderby', 'CPTOrderPosts' ) )
1474
  remove_filter( 'posts_orderby', 'CPTOrderPosts', 99, 2 );
1475
 
 
 
 
 
1476
  if ( $random ) {
1477
  $orderby = 'rand';
1478
  $order = false;
1479
  }
1480
 
1481
  $args = array(
 
1482
  'orderby' => $orderby,
1483
  'post_status' => array(
1484
  'publish',
@@ -2109,12 +2118,12 @@ EOD;
2109
  */
2110
  public static function do_load() {
2111
  $do_load = false;
2112
- if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'options.php' ) ) ) {
2113
  $do_load = true;
2114
  } elseif ( ! empty( $_REQUEST['post_type'] ) && self::PT == $_REQUEST['post_type'] ) {
2115
  if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'edit.php', 'edit-tags.php' ) ) ) {
2116
  $do_load = true;
2117
- } elseif ( ! empty( $_REQUEST['page'] ) && Testimonials_Widget_Settings::ID == $_REQUEST['page'] ) {
2118
  $do_load = true;
2119
  }
2120
  }
696
 
697
 
698
  public static function get_defaults( $single_view = false ) {
699
+ $options = tw_get_options();
700
+ if ( empty( $single_view ) ) {
701
+ $defaults = apply_filters( 'testimonials_widget_defaults', $options );
702
+ } else {
703
+ $defaults = apply_filters( 'testimonials_widget_defaults_single', $options );
704
+ }
705
+
706
+ return $defaults;
707
  }
708
 
709
 
1477
  if ( has_filter( 'posts_orderby', 'CPTOrderPosts' ) )
1478
  remove_filter( 'posts_orderby', 'CPTOrderPosts', 99, 2 );
1479
 
1480
+ if ( empty( $fields ) ) {
1481
+ $fields = false;
1482
+ }
1483
+
1484
  if ( $random ) {
1485
  $orderby = 'rand';
1486
  $order = false;
1487
  }
1488
 
1489
  $args = array(
1490
+ 'fields' => $fields,
1491
  'orderby' => $orderby,
1492
  'post_status' => array(
1493
  'publish',
2118
  */
2119
  public static function do_load() {
2120
  $do_load = false;
2121
+ if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'options.php', 'widgets.php' ) ) ) {
2122
  $do_load = true;
2123
  } elseif ( ! empty( $_REQUEST['post_type'] ) && self::PT == $_REQUEST['post_type'] ) {
2124
  if ( ! empty( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], array( 'edit.php', 'edit-tags.php' ) ) ) {
2125
  $do_load = true;
2126
+ } elseif ( ! empty( $_REQUEST['option_page'] ) && Testimonials_Widget_Settings::ID == $_REQUEST['option_page'] ) {
2127
  $do_load = true;
2128
  }
2129
  }
includes/libraries/aihrus-framework/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
 
3
  ## master
4
 
 
 
 
 
 
 
 
 
 
5
  ## 1.1.1
6
  * Remove unused `widget_options`
7
  * RESOLVE michael-cannon/testimonials-widget#65 Widget blank options aren't saving correctly
2
 
3
  ## master
4
 
5
+ ## 1.1.2
6
+ * Add licensing status notices
7
+ * Code formatting
8
+ * Don't remove license from settings
9
+ * RESOLVE Undefined index
10
+ * Restore default wp_remote_get timeout
11
+ * Return if library class exists already
12
+ * Update settings page detection
13
+
14
  ## 1.1.1
15
  * Remove unused `widget_options`
16
  * RESOLVE michael-cannon/testimonials-widget#65 Widget blank options aren't saving correctly
includes/libraries/aihrus-framework/aihrus-framework.php CHANGED
@@ -29,7 +29,7 @@ if ( ! defined( 'AIHR_DIR_LIB' ) )
29
  define( 'AIHR_DIR_LIB', AIHR_DIR_INC . 'libraries/' );
30
 
31
  if ( ! defined( 'AIHR_VERSION' ) )
32
- define( 'AIHR_VERSION', '1.1.1' );
33
 
34
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
35
 
29
  define( 'AIHR_DIR_LIB', AIHR_DIR_INC . 'libraries/' );
30
 
31
  if ( ! defined( 'AIHR_VERSION' ) )
32
+ define( 'AIHR_VERSION', '1.1.2' );
33
 
34
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
35
 
includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php CHANGED
@@ -16,8 +16,9 @@
16
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
  */
18
 
19
- if ( class_exists( 'Aihrus_Licensing' ) )
20
  return;
 
21
 
22
  require_once 'interface-aihrus-licensing.php';
23
 
@@ -25,15 +26,19 @@ require_once 'interface-aihrus-licensing.php';
25
  abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
26
  public $author;
27
  public $item_name;
 
28
  public $slug;
29
  public $store_url;
30
 
 
 
31
 
32
  public function __construct( $slug, $item_name, $author = 'Michael Cannon', $store_url = 'http://aihr.us' ) {
33
- $this->author = $author;
34
- $this->item_name = urlencode( $item_name );
35
- $this->slug = $slug;
36
- $this->store_url = $store_url;
 
37
  }
38
 
39
 
@@ -54,40 +59,59 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
54
 
55
  public function update_license( $value = null ) {
56
  $license = $this->get_license();
57
- if ( $license === $value )
58
  return $value;
 
59
 
 
60
  if ( $this->valid_hash( $value ) ) {
61
  $this->set_license( $value );
62
  $value = $this->activate_license();
63
  $this->set_license( $value );
64
-
65
- return $value;
66
  } else {
67
  $this->deactivate_license();
68
  $this->delete_license();
69
 
70
- return '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  }
 
 
72
  }
73
 
74
 
75
  public function set_license( $value = null ) {
76
  $key = $this->license_key();
77
-
78
  delete_transient( $key );
79
 
80
- if ( ! is_null( $value ) )
81
  set_transient( $key, $value, 2 * YEAR_IN_SECONDS );
 
82
  }
83
 
84
 
85
  public function valid_license() {
86
  $license = $this->get_license();
87
- if ( $this->valid_hash( $license ) )
88
  return true;
89
- else
90
  return false;
 
91
  }
92
 
93
 
@@ -95,7 +119,7 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
95
  $license = $this->get_license();
96
  $api_params = array(
97
  'edd_action' => $action,
98
- 'item_name' => $this->item_name,
99
  'license' => $license,
100
  );
101
 
@@ -112,7 +136,6 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
112
  $response = wp_remote_get(
113
  $api_call,
114
  array(
115
- 'timeout' => 10,
116
  'sslverify' => false,
117
  )
118
  );
@@ -140,8 +163,9 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
140
  public function get_license_data( $action = 'check_license' ) {
141
  $api_call = $this->get_api_call( $action );
142
  $response = $this->get_remote_get( $api_call );
143
- if ( is_wp_error( $response ) )
144
  return false;
 
145
 
146
  $license_data = json_decode( wp_remote_retrieve_body( $response ) );
147
 
@@ -152,8 +176,13 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
152
  public function deactivate_license() {
153
  $license_data = $this->get_license_data( 'deactivate_license' );
154
  if ( false !== $license_data ) {
155
- if ( 'deactivated' == $license_data->license )
 
 
 
 
156
  return true;
 
157
 
158
  return $license_data->license;
159
  }
@@ -175,8 +204,9 @@ abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
175
 
176
 
177
  public function valid_hash( $value = null ) {
178
- if ( is_string( $value ) && preg_match( '#^[0-9a-f]{32}$#i', $value ) )
179
  return true;
 
180
 
181
  return false;
182
  }
16
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
  */
18
 
19
+ if ( class_exists( 'Aihrus_Licensing' ) ) {
20
  return;
21
+ }
22
 
23
  require_once 'interface-aihrus-licensing.php';
24
 
26
  abstract class Aihrus_Licensing implements Aihrus_Licensing_Interface {
27
  public $author;
28
  public $item_name;
29
+ public $item_name_encoded;
30
  public $slug;
31
  public $store_url;
32
 
33
+ public static $settings_saved = false;
34
+
35
 
36
  public function __construct( $slug, $item_name, $author = 'Michael Cannon', $store_url = 'http://aihr.us' ) {
37
+ $this->author = $author;
38
+ $this->item_name_encoded = urlencode( $item_name );
39
+ $this->item_name = $item_name;
40
+ $this->slug = $slug;
41
+ $this->store_url = $store_url;
42
  }
43
 
44
 
59
 
60
  public function update_license( $value = null ) {
61
  $license = $this->get_license();
62
+ if ( $license === $value ) {
63
  return $value;
64
+ }
65
 
66
+ $deactivate_license = false;
67
  if ( $this->valid_hash( $value ) ) {
68
  $this->set_license( $value );
69
  $value = $this->activate_license();
70
  $this->set_license( $value );
 
 
71
  } else {
72
  $this->deactivate_license();
73
  $this->delete_license();
74
 
75
+ $deactivate_license = true;
76
+ $value = '';
77
+ }
78
+
79
+ if ( $this->valid_license() ) {
80
+ $text = esc_html__( '%s license saved.' );
81
+ $text = sprintf( $text, $this->item_name );
82
+ add_settings_error( static::$settings_id, 'license_saved', $text, 'updated' );
83
+ } elseif ( empty( $deactivate_license ) ) {
84
+ $text = esc_html__( '%s license not saved.' );
85
+ $text = sprintf( $text, $this->item_name );
86
+ add_settings_error( static::$settings_id, 'license_not_saved', $text, 'error' );
87
+ }
88
+
89
+ if ( empty( self::$settings_saved ) ) {
90
+ self::$settings_saved = true;
91
+ set_transient( 'settings_errors', get_settings_errors(), 30 );
92
  }
93
+
94
+ return $value;
95
  }
96
 
97
 
98
  public function set_license( $value = null ) {
99
  $key = $this->license_key();
 
100
  delete_transient( $key );
101
 
102
+ if ( ! is_null( $value ) ) {
103
  set_transient( $key, $value, 2 * YEAR_IN_SECONDS );
104
+ }
105
  }
106
 
107
 
108
  public function valid_license() {
109
  $license = $this->get_license();
110
+ if ( $this->valid_hash( $license ) ) {
111
  return true;
112
+ } else {
113
  return false;
114
+ }
115
  }
116
 
117
 
119
  $license = $this->get_license();
120
  $api_params = array(
121
  'edd_action' => $action,
122
+ 'item_name' => $this->item_name_encoded,
123
  'license' => $license,
124
  );
125
 
136
  $response = wp_remote_get(
137
  $api_call,
138
  array(
 
139
  'sslverify' => false,
140
  )
141
  );
163
  public function get_license_data( $action = 'check_license' ) {
164
  $api_call = $this->get_api_call( $action );
165
  $response = $this->get_remote_get( $api_call );
166
+ if ( is_wp_error( $response ) ) {
167
  return false;
168
+ }
169
 
170
  $license_data = json_decode( wp_remote_retrieve_body( $response ) );
171
 
176
  public function deactivate_license() {
177
  $license_data = $this->get_license_data( 'deactivate_license' );
178
  if ( false !== $license_data ) {
179
+ if ( 'deactivated' == $license_data->license ) {
180
+ $text = esc_html__( '%s license deactivated.' );
181
+ $text = sprintf( $text, $this->item_name );
182
+ add_settings_error( static::$settings_id, 'license_deactivated', $text, 'updated' );
183
+
184
  return true;
185
+ }
186
 
187
  return $license_data->license;
188
  }
204
 
205
 
206
  public function valid_hash( $value = null ) {
207
+ if ( is_string( $value ) && preg_match( '#^[0-9a-f]{32}$#i', $value ) ) {
208
  return true;
209
+ }
210
 
211
  return false;
212
  }
includes/libraries/aihrus-framework/includes/class-aihrus-settings.php CHANGED
@@ -24,8 +24,9 @@
24
 
25
  require_once ABSPATH . 'wp-admin/includes/template.php';
26
 
27
- if ( class_exists( 'Aihrus_Settings' ) )
28
  return;
 
29
 
30
 
31
  abstract class Aihrus_Settings {
@@ -48,6 +49,7 @@ abstract class Aihrus_Settings {
48
  'widget' => 1, // show in widget options, 0 off
49
  );
50
 
 
51
 
52
  public function __construct() {}
53
 
@@ -116,8 +118,9 @@ abstract class Aihrus_Settings {
116
 
117
 
118
  public static function get_defaults( $mode = null, $old_version = null ) {
119
- if ( empty( static::$defaults ) )
120
  static::settings();
 
121
 
122
  $do_backwards = false;
123
  if ( 'backwards' == $mode ) {
@@ -143,8 +146,9 @@ abstract class Aihrus_Settings {
143
 
144
 
145
  public static function get_settings() {
146
- if ( empty( static::$settings ) )
147
  static::settings();
 
148
 
149
  return static::$settings;
150
  }
@@ -170,8 +174,9 @@ abstract class Aihrus_Settings {
170
  public static function create_setting( $args = array() ) {
171
  extract( $args );
172
 
173
- if ( preg_match( '#(_expand_begin|_expand_end)#', $id ) )
174
  return;
 
175
 
176
  $field_args = array(
177
  'choices' => $choices,
@@ -212,15 +217,18 @@ abstract class Aihrus_Settings {
212
  public static function do_settings_sections( $page ) {
213
  global $wp_settings_sections, $wp_settings_fields;
214
 
215
- if ( ! isset( $wp_settings_sections ) || ! isset( $wp_settings_sections[$page] ) )
216
  return;
 
217
 
218
  foreach ( (array) $wp_settings_sections[$page] as $section ) {
219
- if ( $section['callback'] )
220
  call_user_func( $section['callback'], $section );
 
221
 
222
- if ( ! isset( $wp_settings_fields ) || ! isset( $wp_settings_fields[$page] ) || ! isset( $wp_settings_fields[$page][$section['id']] ) )
223
  continue;
 
224
 
225
  echo '<table id=' . $section['id'] . ' class="form-table">';
226
  do_settings_fields( $page, $section['id'] );
@@ -269,8 +277,9 @@ abstract class Aihrus_Settings {
269
  echo '<div id="' . static::ID . '">
270
  <ul>';
271
 
272
- foreach ( static::$sections as $section_slug => $section )
273
  echo '<li><a href="#' . $section_slug . '">' . $section . '</a></li>';
 
274
 
275
  echo '</ul>';
276
 
@@ -313,21 +322,23 @@ abstract class Aihrus_Settings {
313
 
314
  extract( $args );
315
 
316
- if ( is_null( $input ) )
317
  $options = get_option( static::ID );
318
- else {
319
  $options = array();
320
  $options[$id] = $input;
321
  }
322
 
323
- if ( ! isset( $options[$id] ) && $type != 'checkbox' )
324
  $options[$id] = $std;
325
- elseif ( ! isset( $options[$id] ) )
326
  $options[$id] = 0;
 
327
 
328
  $field_class = '';
329
- if ( ! empty( $class ) )
330
  $field_class = ' ' . $class;
 
331
 
332
  // desc isn't escaped because it's might contain allowed html
333
  $choices = array_map( 'esc_attr', $choices );
@@ -340,18 +351,21 @@ abstract class Aihrus_Settings {
340
  case 'checkbox':
341
  $content .= '<input class="checkbox' . $field_class . '" type="checkbox" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="1" ' . checked( $field_value, 1, false ) . ' /> ';
342
 
343
- if ( ! empty( $desc ) )
344
  $content .= '<label for="' . $id . '"><span class="description">' . $desc . '</span></label>';
 
345
 
346
- if ( $show_code )
347
  $content .= '<br /><code>' . $id . '</code>';
 
348
  break;
349
 
350
  case 'file':
351
  $content .= '<input class="regular-text' . $field_class . '" type="file" id="' . $id . '" name="' . static::ID . '[' . $id . ']" />';
352
 
353
- if ( ! empty( $desc ) )
354
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
355
 
356
  break;
357
 
@@ -367,8 +381,9 @@ abstract class Aihrus_Settings {
367
  case 'password':
368
  $content .= '<input class="regular-text' . $field_class . '" type="password" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="' . $field_value . '" />';
369
 
370
- if ( ! empty( $desc ) )
371
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
372
 
373
  break;
374
 
@@ -378,24 +393,28 @@ abstract class Aihrus_Settings {
378
  foreach ( $choices as $value => $label ) {
379
  $content .= '<input class="radio' . $field_class . '" type="radio" name="' . static::ID . '[' . $id . ']" id="' . $id . $i . '" value="' . $value . '" ' . checked( $field_value, $value, false ) . '> <label for="' . $id . $i . '">' . $label . '</label>';
380
 
381
- if ( $i < $count_choices )
382
  $content .= '<br />';
 
383
 
384
  $i++;
385
  }
386
 
387
- if ( ! empty( $desc ) )
388
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
389
 
390
- if ( $show_code )
391
  $content .= '<br /><code>' . $id . '</code>';
 
392
  break;
393
 
394
  case 'readonly':
395
  $content .= '<input class="regular-text' . $field_class . '" type="text" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="' . $field_value . '" readonly="readonly" />';
396
 
397
- if ( ! empty( $desc ) )
398
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
399
  break;
400
 
401
  case 'rich_editor':
@@ -411,46 +430,55 @@ abstract class Aihrus_Settings {
411
  $content = '<textarea class="large-text" rows="10" id="' . static::ID . '[' . $id . ']" name="' . static::ID . '[' . $id . ']">' . esc_textarea( $field_value ) . '</textarea>';
412
  }
413
 
414
- if ( ! empty( $desc ) )
415
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
416
 
417
- if ( $show_code )
418
  $content .= '<br /><code>' . $id . '</code>';
 
419
  break;
420
 
421
  case 'select':
422
  $content .= '<select class="select' . $field_class . '" id="' . $id . '" name="' . static::ID . '[' . $id . ']">';
423
 
424
- foreach ( $choices as $value => $label )
425
  $content .= '<option value="' . $value . '"' . selected( $field_value, $value, false ) . '>' . $label . '</option>';
 
426
 
427
  $content .= '</select>';
428
 
429
- if ( ! empty( $desc ) )
430
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
431
 
432
- if ( $show_code )
433
  $content .= '<br /><code>' . $id . '</code>';
 
434
  break;
435
 
436
  case 'text':
437
  $content .= '<input class="regular-text' . $field_class . '" type="text" id="' . $id . '" name="' . static::ID . '[' . $id . ']" placeholder="' . $std . '" value="' . $field_value . '" />';
438
 
439
- if ( ! empty( $desc ) )
440
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
441
 
442
- if ( $show_code )
443
  $content .= '<br /><code>' . $id . '</code>';
 
444
  break;
445
 
446
  case 'textarea':
447
  $content .= '<textarea class="' . $field_class . '" id="' . $id . '" name="' . static::ID . '[' . $id . ']" placeholder="' . $std . '" rows="5" cols="30">' . $field_value . '</textarea>';
448
 
449
- if ( ! empty( $desc ) )
450
  $content .= '<br /><span class="description">' . $desc . '</span>';
 
451
 
452
- if ( $show_code )
453
  $content .= '<br /><code>' . $id . '</code>';
 
454
  break;
455
 
456
  default:
@@ -468,10 +496,11 @@ abstract class Aihrus_Settings {
468
  register_setting( static::ID, static::ID, array( static::$class, 'validate_settings' ) );
469
 
470
  foreach ( static::$sections as $slug => $title ) {
471
- if ( $slug == 'about' )
472
  add_settings_section( $slug, $title, array( static::$class, 'display_about' ), static::ID );
473
- else
474
  add_settings_section( $slug, $title, array( static::$class, 'display_section' ), static::ID );
 
475
  }
476
 
477
  foreach ( static::$settings as $id => $setting ) {
@@ -509,8 +538,9 @@ abstract class Aihrus_Settings {
509
 
510
  if ( is_admin() ) {
511
  if ( ! empty( $input['reset_defaults'] ) ) {
512
- foreach ( $defaults as $id => $std )
513
- $input[$id] = $std;
 
514
 
515
  unset( $input['reset_defaults'] );
516
 
@@ -521,8 +551,9 @@ abstract class Aihrus_Settings {
521
  $import = $input['import'];
522
  $unserialized = unserialize( $import );
523
  if ( is_array( $unserialized ) ) {
524
- foreach ( $unserialized as $id => $std )
525
- $input[$id] = $std;
 
526
  }
527
  }
528
  }
@@ -532,8 +563,9 @@ abstract class Aihrus_Settings {
532
  $default = $parts['std'];
533
  $type = $parts['type'];
534
  $validations = ! empty( $parts['validate'] ) ? $parts['validate'] : array();
535
- if ( ! empty( $validations ) )
536
  $validations = explode( ',', $validations );
 
537
 
538
  if ( ! isset( $input[ $id ] ) ) {
539
  if ( 'checkbox' != $type ) {
@@ -543,29 +575,33 @@ abstract class Aihrus_Settings {
543
  }
544
  }
545
 
546
- if ( $default == $input[ $id ] && ! in_array( 'required', $validations ) )
547
  continue;
 
548
 
549
  if ( 'checkbox' == $type ) {
550
- if ( self::is_true( $input[ $id ] ) )
551
  $input[ $id ] = 1;
552
- else
553
  $input[ $id ] = 0;
 
554
  } elseif ( in_array( $type, array( 'radio', 'select' ) ) ) {
555
  // single choices only
556
  $keys = array_keys( $parts['choices'] );
557
 
558
  if ( ! in_array( $input[ $id ], $keys ) ) {
559
- if ( self::is_true( $input[ $id ] ) )
560
  $input[ $id ] = 1;
561
- else
562
  $input[ $id ] = 0;
 
563
  }
564
  }
565
 
566
  if ( ! empty( $validations ) ) {
567
- foreach ( $validations as $validate )
568
  self::validators( $validate, $id, $input, $default, $errors );
 
569
  }
570
  }
571
 
@@ -577,9 +613,13 @@ abstract class Aihrus_Settings {
577
  $hide_update_notice = true;
578
  }
579
 
580
- if ( $null_options && empty( $errors ) && ! $hide_update_notice ) {
581
  add_settings_error( static::ID, 'settings_updated', esc_html__( 'Settings saved.' ), 'updated' );
582
- set_transient( 'settings_errors', get_settings_errors(), 30 );
 
 
 
 
583
  }
584
 
585
  if ( empty( $do_errors ) ) {
@@ -599,10 +639,11 @@ abstract class Aihrus_Settings {
599
  switch ( $validate ) {
600
  case 'absint':
601
  case 'intval':
602
- if ( '' !== $input[ $id ] )
603
  $input[ $id ] = $validate( $input[ $id ] );
604
- else
605
  $input[ $id ] = $default;
 
606
  break;
607
 
608
  case 'email':
@@ -619,14 +660,16 @@ abstract class Aihrus_Settings {
619
 
620
  case 'min1':
621
  $input[ $id ] = intval( $input[ $id ] );
622
- if ( 0 >= $input[ $id ] )
623
  $input[ $id ] = $default;
 
624
  break;
625
 
626
  case 'nozero':
627
  $input[ $id ] = intval( $input[ $id ] );
628
- if ( 0 === $input[ $id ] )
629
  $input[ $id ] = $default;
 
630
  break;
631
 
632
  case 'order':
@@ -634,8 +677,9 @@ abstract class Aihrus_Settings {
634
  break;
635
 
636
  case 'required':
637
- if ( empty( $input[ $id ] ) )
638
  $errors[ $id ] = esc_html__( 'Required' );
 
639
  break;
640
 
641
  case 'slash_sanitize_title':
@@ -685,40 +729,45 @@ abstract class Aihrus_Settings {
685
 
686
 
687
  public static function validate_ids( $input, $default = false ) {
688
- if ( preg_match( '#^\d+(,\s?\d+)*$#', $input ) )
689
  return preg_replace( '#\s#', '', $input );
 
690
 
691
  return $default;
692
  }
693
 
694
 
695
  public static function validate_order( $input, $default = false ) {
696
- if ( preg_match( '#^desc|asc$#i', $input ) )
697
  return $input;
 
698
 
699
  return $default;
700
  }
701
 
702
 
703
  public static function validate_slugs( $input, $default = false ) {
704
- if ( preg_match( '#^[\w-]+(,\s?[\w-]+)*$#', $input ) )
705
  return preg_replace( '#\s#', '', $input );
 
706
 
707
  return $default;
708
  }
709
 
710
 
711
  public static function validate_slug( $input, $default = false ) {
712
- if ( preg_match( '#^[\w-]+$#', $input ) )
713
  return $input;
 
714
 
715
  return $default;
716
  }
717
 
718
 
719
  public static function validate_term( $input, $default = false ) {
720
- if ( preg_match( '#^\w+$#', $input ) )
721
  return $input;
 
722
 
723
  return $default;
724
  }
@@ -729,52 +778,59 @@ abstract class Aihrus_Settings {
729
  */
730
  public static function is_true( $value = null, $return_boolean = true ) {
731
  if ( true === $value || 'true' == strtolower( $value ) || 1 == $value || 'on' == strtolower( $value ) || 'yes' == strtolower( $value ) ) {
732
- if ( $return_boolean )
733
  return true;
734
- else
735
  return 1;
 
736
  } else {
737
- if ( $return_boolean )
738
  return false;
739
- else
740
  return 0;
 
741
  }
742
  }
743
 
744
 
745
  public static function validate_email( $input, $default = false ) {
746
- if ( filter_var( $input, FILTER_VALIDATE_EMAIL ) )
747
  return $input;
 
748
 
749
  return $default;
750
  }
751
 
752
 
753
  public static function validate_terms( $input, $default = false ) {
754
- if ( preg_match( '#^(([\w- ]+)(,\s?)?)+$#', $input ) )
755
  return preg_replace( '#,\s*$#', '', $input );
 
756
 
757
  return $default;
758
  }
759
 
760
 
761
  public static function validate_url( $input, $default = false ) {
762
- if ( filter_var( $input, FILTER_VALIDATE_URL ) )
763
  return $input;
 
764
 
765
  return $default;
766
  }
767
 
768
 
769
  public static function get_scripts() {
770
- foreach ( static::$scripts as $script )
771
  echo $script;
 
772
  }
773
 
774
 
775
  public static function get_styles() {
776
- foreach ( static::$styles as $style )
777
  echo $style;
 
778
  }
779
 
780
 
24
 
25
  require_once ABSPATH . 'wp-admin/includes/template.php';
26
 
27
+ if ( class_exists( 'Aihrus_Settings' ) ) {
28
  return;
29
+ }
30
 
31
 
32
  abstract class Aihrus_Settings {
49
  'widget' => 1, // show in widget options, 0 off
50
  );
51
 
52
+ private static $settings_saved = false;
53
 
54
  public function __construct() {}
55
 
118
 
119
 
120
  public static function get_defaults( $mode = null, $old_version = null ) {
121
+ if ( empty( static::$defaults ) ) {
122
  static::settings();
123
+ }
124
 
125
  $do_backwards = false;
126
  if ( 'backwards' == $mode ) {
146
 
147
 
148
  public static function get_settings() {
149
+ if ( empty( static::$settings ) ) {
150
  static::settings();
151
+ }
152
 
153
  return static::$settings;
154
  }
174
  public static function create_setting( $args = array() ) {
175
  extract( $args );
176
 
177
+ if ( preg_match( '#(_expand_begin|_expand_end)#', $id ) ) {
178
  return;
179
+ }
180
 
181
  $field_args = array(
182
  'choices' => $choices,
217
  public static function do_settings_sections( $page ) {
218
  global $wp_settings_sections, $wp_settings_fields;
219
 
220
+ if ( ! isset( $wp_settings_sections ) || ! isset( $wp_settings_sections[$page] ) ) {
221
  return;
222
+ }
223
 
224
  foreach ( (array) $wp_settings_sections[$page] as $section ) {
225
+ if ( $section['callback'] ) {
226
  call_user_func( $section['callback'], $section );
227
+ }
228
 
229
+ if ( ! isset( $wp_settings_fields ) || ! isset( $wp_settings_fields[$page] ) || ! isset( $wp_settings_fields[$page][$section['id']] ) ) {
230
  continue;
231
+ }
232
 
233
  echo '<table id=' . $section['id'] . ' class="form-table">';
234
  do_settings_fields( $page, $section['id'] );
277
  echo '<div id="' . static::ID . '">
278
  <ul>';
279
 
280
+ foreach ( static::$sections as $section_slug => $section ) {
281
  echo '<li><a href="#' . $section_slug . '">' . $section . '</a></li>';
282
+ }
283
 
284
  echo '</ul>';
285
 
322
 
323
  extract( $args );
324
 
325
+ if ( is_null( $input ) ) {
326
  $options = get_option( static::ID );
327
+ } else {
328
  $options = array();
329
  $options[$id] = $input;
330
  }
331
 
332
+ if ( ! isset( $options[$id] ) && $type != 'checkbox' ) {
333
  $options[$id] = $std;
334
+ } elseif ( ! isset( $options[$id] ) ) {
335
  $options[$id] = 0;
336
+ }
337
 
338
  $field_class = '';
339
+ if ( ! empty( $class ) ) {
340
  $field_class = ' ' . $class;
341
+ }
342
 
343
  // desc isn't escaped because it's might contain allowed html
344
  $choices = array_map( 'esc_attr', $choices );
351
  case 'checkbox':
352
  $content .= '<input class="checkbox' . $field_class . '" type="checkbox" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="1" ' . checked( $field_value, 1, false ) . ' /> ';
353
 
354
+ if ( ! empty( $desc ) ) {
355
  $content .= '<label for="' . $id . '"><span class="description">' . $desc . '</span></label>';
356
+ }
357
 
358
+ if ( $show_code ) {
359
  $content .= '<br /><code>' . $id . '</code>';
360
+ }
361
  break;
362
 
363
  case 'file':
364
  $content .= '<input class="regular-text' . $field_class . '" type="file" id="' . $id . '" name="' . static::ID . '[' . $id . ']" />';
365
 
366
+ if ( ! empty( $desc ) ) {
367
  $content .= '<br /><span class="description">' . $desc . '</span>';
368
+ }
369
 
370
  break;
371
 
381
  case 'password':
382
  $content .= '<input class="regular-text' . $field_class . '" type="password" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="' . $field_value . '" />';
383
 
384
+ if ( ! empty( $desc ) ) {
385
  $content .= '<br /><span class="description">' . $desc . '</span>';
386
+ }
387
 
388
  break;
389
 
393
  foreach ( $choices as $value => $label ) {
394
  $content .= '<input class="radio' . $field_class . '" type="radio" name="' . static::ID . '[' . $id . ']" id="' . $id . $i . '" value="' . $value . '" ' . checked( $field_value, $value, false ) . '> <label for="' . $id . $i . '">' . $label . '</label>';
395
 
396
+ if ( $i < $count_choices ) {
397
  $content .= '<br />';
398
+ }
399
 
400
  $i++;
401
  }
402
 
403
+ if ( ! empty( $desc ) ) {
404
  $content .= '<br /><span class="description">' . $desc . '</span>';
405
+ }
406
 
407
+ if ( $show_code ) {
408
  $content .= '<br /><code>' . $id . '</code>';
409
+ }
410
  break;
411
 
412
  case 'readonly':
413
  $content .= '<input class="regular-text' . $field_class . '" type="text" id="' . $id . '" name="' . static::ID . '[' . $id . ']" value="' . $field_value . '" readonly="readonly" />';
414
 
415
+ if ( ! empty( $desc ) ) {
416
  $content .= '<br /><span class="description">' . $desc . '</span>';
417
+ }
418
  break;
419
 
420
  case 'rich_editor':
430
  $content = '<textarea class="large-text" rows="10" id="' . static::ID . '[' . $id . ']" name="' . static::ID . '[' . $id . ']">' . esc_textarea( $field_value ) . '</textarea>';
431
  }
432
 
433
+ if ( ! empty( $desc ) ) {
434
  $content .= '<br /><span class="description">' . $desc . '</span>';
435
+ }
436
 
437
+ if ( $show_code ) {
438
  $content .= '<br /><code>' . $id . '</code>';
439
+ }
440
  break;
441
 
442
  case 'select':
443
  $content .= '<select class="select' . $field_class . '" id="' . $id . '" name="' . static::ID . '[' . $id . ']">';
444
 
445
+ foreach ( $choices as $value => $label ) {
446
  $content .= '<option value="' . $value . '"' . selected( $field_value, $value, false ) . '>' . $label . '</option>';
447
+ }
448
 
449
  $content .= '</select>';
450
 
451
+ if ( ! empty( $desc ) ) {
452
  $content .= '<br /><span class="description">' . $desc . '</span>';
453
+ }
454
 
455
+ if ( $show_code ) {
456
  $content .= '<br /><code>' . $id . '</code>';
457
+ }
458
  break;
459
 
460
  case 'text':
461
  $content .= '<input class="regular-text' . $field_class . '" type="text" id="' . $id . '" name="' . static::ID . '[' . $id . ']" placeholder="' . $std . '" value="' . $field_value . '" />';
462
 
463
+ if ( ! empty( $desc ) ) {
464
  $content .= '<br /><span class="description">' . $desc . '</span>';
465
+ }
466
 
467
+ if ( $show_code ) {
468
  $content .= '<br /><code>' . $id . '</code>';
469
+ }
470
  break;
471
 
472
  case 'textarea':
473
  $content .= '<textarea class="' . $field_class . '" id="' . $id . '" name="' . static::ID . '[' . $id . ']" placeholder="' . $std . '" rows="5" cols="30">' . $field_value . '</textarea>';
474
 
475
+ if ( ! empty( $desc ) ) {
476
  $content .= '<br /><span class="description">' . $desc . '</span>';
477
+ }
478
 
479
+ if ( $show_code ) {
480
  $content .= '<br /><code>' . $id . '</code>';
481
+ }
482
  break;
483
 
484
  default:
496
  register_setting( static::ID, static::ID, array( static::$class, 'validate_settings' ) );
497
 
498
  foreach ( static::$sections as $slug => $title ) {
499
+ if ( $slug == 'about' ) {
500
  add_settings_section( $slug, $title, array( static::$class, 'display_about' ), static::ID );
501
+ } else {
502
  add_settings_section( $slug, $title, array( static::$class, 'display_section' ), static::ID );
503
+ }
504
  }
505
 
506
  foreach ( static::$settings as $id => $setting ) {
538
 
539
  if ( is_admin() ) {
540
  if ( ! empty( $input['reset_defaults'] ) ) {
541
+ foreach ( $defaults as $id => $std ) {
542
+ $input[ $id ] = $std;
543
+ }
544
 
545
  unset( $input['reset_defaults'] );
546
 
551
  $import = $input['import'];
552
  $unserialized = unserialize( $import );
553
  if ( is_array( $unserialized ) ) {
554
+ foreach ( $unserialized as $id => $std ) {
555
+ $input[ $id ] = $std;
556
+ }
557
  }
558
  }
559
  }
563
  $default = $parts['std'];
564
  $type = $parts['type'];
565
  $validations = ! empty( $parts['validate'] ) ? $parts['validate'] : array();
566
+ if ( ! empty( $validations ) ) {
567
  $validations = explode( ',', $validations );
568
+ }
569
 
570
  if ( ! isset( $input[ $id ] ) ) {
571
  if ( 'checkbox' != $type ) {
575
  }
576
  }
577
 
578
+ if ( $default == $input[ $id ] && ! in_array( 'required', $validations ) ) {
579
  continue;
580
+ }
581
 
582
  if ( 'checkbox' == $type ) {
583
+ if ( self::is_true( $input[ $id ] ) ) {
584
  $input[ $id ] = 1;
585
+ } else {
586
  $input[ $id ] = 0;
587
+ }
588
  } elseif ( in_array( $type, array( 'radio', 'select' ) ) ) {
589
  // single choices only
590
  $keys = array_keys( $parts['choices'] );
591
 
592
  if ( ! in_array( $input[ $id ], $keys ) ) {
593
+ if ( self::is_true( $input[ $id ] ) ) {
594
  $input[ $id ] = 1;
595
+ } else {
596
  $input[ $id ] = 0;
597
+ }
598
  }
599
  }
600
 
601
  if ( ! empty( $validations ) ) {
602
+ foreach ( $validations as $validate ) {
603
  self::validators( $validate, $id, $input, $default, $errors );
604
+ }
605
  }
606
  }
607
 
613
  $hide_update_notice = true;
614
  }
615
 
616
+ if ( $null_options && empty( $errors ) && ! $hide_update_notice && ! empty( $_REQUEST['option_page'] ) ) {
617
  add_settings_error( static::ID, 'settings_updated', esc_html__( 'Settings saved.' ), 'updated' );
618
+
619
+ if ( empty( self::$settings_saved ) ) {
620
+ self::$settings_saved = true;
621
+ set_transient( 'settings_errors', get_settings_errors(), 30 );
622
+ }
623
  }
624
 
625
  if ( empty( $do_errors ) ) {
639
  switch ( $validate ) {
640
  case 'absint':
641
  case 'intval':
642
+ if ( '' !== $input[ $id ] ) {
643
  $input[ $id ] = $validate( $input[ $id ] );
644
+ } else {
645
  $input[ $id ] = $default;
646
+ }
647
  break;
648
 
649
  case 'email':
660
 
661
  case 'min1':
662
  $input[ $id ] = intval( $input[ $id ] );
663
+ if ( 0 >= $input[ $id ] ) {
664
  $input[ $id ] = $default;
665
+ }
666
  break;
667
 
668
  case 'nozero':
669
  $input[ $id ] = intval( $input[ $id ] );
670
+ if ( 0 === $input[ $id ] ) {
671
  $input[ $id ] = $default;
672
+ }
673
  break;
674
 
675
  case 'order':
677
  break;
678
 
679
  case 'required':
680
+ if ( empty( $input[ $id ] ) ) {
681
  $errors[ $id ] = esc_html__( 'Required' );
682
+ }
683
  break;
684
 
685
  case 'slash_sanitize_title':
729
 
730
 
731
  public static function validate_ids( $input, $default = false ) {
732
+ if ( preg_match( '#^\d+(,\s?\d+)*$#', $input ) ) {
733
  return preg_replace( '#\s#', '', $input );
734
+ }
735
 
736
  return $default;
737
  }
738
 
739
 
740
  public static function validate_order( $input, $default = false ) {
741
+ if ( preg_match( '#^desc|asc$#i', $input ) ) {
742
  return $input;
743
+ }
744
 
745
  return $default;
746
  }
747
 
748
 
749
  public static function validate_slugs( $input, $default = false ) {
750
+ if ( preg_match( '#^[\w-]+(,\s?[\w-]+)*$#', $input ) ) {
751
  return preg_replace( '#\s#', '', $input );
752
+ }
753
 
754
  return $default;
755
  }
756
 
757
 
758
  public static function validate_slug( $input, $default = false ) {
759
+ if ( preg_match( '#^[\w-]+$#', $input ) ) {
760
  return $input;
761
+ }
762
 
763
  return $default;
764
  }
765
 
766
 
767
  public static function validate_term( $input, $default = false ) {
768
+ if ( preg_match( '#^\w+$#', $input ) ) {
769
  return $input;
770
+ }
771
 
772
  return $default;
773
  }
778
  */
779
  public static function is_true( $value = null, $return_boolean = true ) {
780
  if ( true === $value || 'true' == strtolower( $value ) || 1 == $value || 'on' == strtolower( $value ) || 'yes' == strtolower( $value ) ) {
781
+ if ( $return_boolean ) {
782
  return true;
783
+ } else {
784
  return 1;
785
+ }
786
  } else {
787
+ if ( $return_boolean ) {
788
  return false;
789
+ } else {
790
  return 0;
791
+ }
792
  }
793
  }
794
 
795
 
796
  public static function validate_email( $input, $default = false ) {
797
+ if ( filter_var( $input, FILTER_VALIDATE_EMAIL ) ) {
798
  return $input;
799
+ }
800
 
801
  return $default;
802
  }
803
 
804
 
805
  public static function validate_terms( $input, $default = false ) {
806
+ if ( preg_match( '#^(([\w- ]+)(,\s?)?)+$#', $input ) ) {
807
  return preg_replace( '#,\s*$#', '', $input );
808
+ }
809
 
810
  return $default;
811
  }
812
 
813
 
814
  public static function validate_url( $input, $default = false ) {
815
+ if ( filter_var( $input, FILTER_VALIDATE_URL ) ) {
816
  return $input;
817
+ }
818
 
819
  return $default;
820
  }
821
 
822
 
823
  public static function get_scripts() {
824
+ foreach ( static::$scripts as $script ) {
825
  echo $script;
826
+ }
827
  }
828
 
829
 
830
  public static function get_styles() {
831
+ foreach ( static::$styles as $style ) {
832
  echo $style;
833
+ }
834
  }
835
 
836
 
includes/libraries/aihrus-framework/includes/libraries/class-redrokk-metabox-class.php CHANGED
@@ -909,7 +909,7 @@ jQuery('#edit_<?php echo $this->_category_name; ?>_<?php echo $meta_id; ?>').cli
909
  }
910
  ?>
911
  <?php switch ( $type ) { default: ?>
912
- <?php if ( is_callable( $type ) && function_exists( $type ) ) : ?>
913
  <tr>
914
  <th scope="row" style="width: 140px">
915
  <label for="<?php echo $id; ?>"><?php echo $name; ?></label>
909
  }
910
  ?>
911
  <?php switch ( $type ) { default: ?>
912
+ <?php if ( is_callable( $type ) && function_exists( $type ) && ! empty( $custom[ $id ] ) ) : ?>
913
  <tr>
914
  <th scope="row" style="width: 140px">
915
  <label for="<?php echo $id; ?>"><?php echo $name; ?></label>
includes/libraries/aihrus-framework/includes/libraries/wp_custom_post_status.php CHANGED
@@ -1,4 +1,8 @@
1
  <?php
 
 
 
 
2
  // No, Thanks. Direct file access forbidden.
3
  ! defined( 'ABSPATH' ) AND exit;
4
  /*
1
  <?php
2
+ if ( class_exists ( 'wp_custom_post_status' ) ) {
3
+ return;
4
+ }
5
+
6
  // No, Thanks. Direct file access forbidden.
7
  ! defined( 'ABSPATH' ) AND exit;
8
  /*
languages/testimonials-widget.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Testimonials by Aihrus package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Testimonials by Aihrus 2.19.2\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/testimonials-widget\n"
7
- "POT-Creation-Date: 2014-04-08 07:47:03+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -417,31 +417,31 @@ msgstr ""
417
 
418
  #: includes/class-testimonials-widget-settings.php:494
419
  #: includes/class-testimonials-widget.php:578
420
- #: includes/class-testimonials-widget.php:1683
421
  msgid "Job Title"
422
  msgstr ""
423
 
424
  #: includes/class-testimonials-widget-settings.php:495
425
  #: includes/class-testimonials-widget.php:588
426
- #: includes/class-testimonials-widget.php:1695
427
  msgid "Email"
428
  msgstr ""
429
 
430
  #: includes/class-testimonials-widget-settings.php:496
431
  #: includes/class-testimonials-widget.php:583
432
- #: includes/class-testimonials-widget.php:1689
433
  msgid "Location"
434
  msgstr ""
435
 
436
  #: includes/class-testimonials-widget-settings.php:497
437
  #: includes/class-testimonials-widget.php:593
438
- #: includes/class-testimonials-widget.php:1701
439
  msgid "Company"
440
  msgstr ""
441
 
442
  #: includes/class-testimonials-widget-settings.php:498
443
  #: includes/class-testimonials-widget.php:598
444
- #: includes/class-testimonials-widget.php:1707
445
  msgid "URL"
446
  msgstr ""
447
 
@@ -615,7 +615,7 @@ msgid "This widget's unique CSS class for styling"
615
  msgstr ""
616
 
617
  #: includes/class-testimonials-widget.php:143
618
- #: includes/class-testimonials-widget.php:2050
619
  msgid "Testimonials Shortcode Examples"
620
  msgstr ""
621
 
@@ -667,7 +667,7 @@ msgid "Edit Testimonial"
667
  msgstr ""
668
 
669
  #: includes/class-testimonials-widget.php:614
670
- #: includes/class-testimonials-widget.php:1040
671
  msgid "No testimonials found"
672
  msgstr ""
673
 
@@ -680,7 +680,7 @@ msgid "Search Testimonials"
680
  msgstr ""
681
 
682
  #: includes/class-testimonials-widget.php:618
683
- #: includes/class-testimonials-widget.php:1795
684
  msgid "Testimonial"
685
  msgstr ""
686
 
@@ -688,81 +688,81 @@ msgstr ""
688
  msgid "View Testimonial"
689
  msgstr ""
690
 
691
- #: includes/class-testimonials-widget.php:1206
692
  msgid "…"
693
  msgstr ""
694
 
695
- #: includes/class-testimonials-widget.php:1413
696
  msgid "&laquo;"
697
  msgstr ""
698
 
699
- #: includes/class-testimonials-widget.php:1421
700
  msgid "&raquo;"
701
  msgstr ""
702
 
703
- #: includes/class-testimonials-widget.php:1719
704
  msgid "Testimonial Data"
705
  msgstr ""
706
 
707
- #: includes/class-testimonials-widget.php:1744
708
  msgid "Enter title here"
709
  msgstr ""
710
 
711
- #: includes/class-testimonials-widget.php:1745
712
  msgid "Enter testimonial source here"
713
  msgstr ""
714
 
715
- #: includes/class-testimonials-widget.php:1770
716
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
717
  msgstr ""
718
 
719
- #: includes/class-testimonials-widget.php:1771
720
  msgid "Custom field updated."
721
  msgstr ""
722
 
723
- #: includes/class-testimonials-widget.php:1772
724
  msgid "Custom field deleted."
725
  msgstr ""
726
 
727
- #: includes/class-testimonials-widget.php:1773
728
  msgid "Testimonial updated."
729
  msgstr ""
730
 
731
  #. translators: %s: date and time of the revision
732
 
733
- #: includes/class-testimonials-widget.php:1775
734
  msgid "Testimonial restored to revision from %s"
735
  msgstr ""
736
 
737
- #: includes/class-testimonials-widget.php:1776
738
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
739
  msgstr ""
740
 
741
- #: includes/class-testimonials-widget.php:1777
742
  msgid "Testimonial saved."
743
  msgstr ""
744
 
745
- #: includes/class-testimonials-widget.php:1778
746
  msgid "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
747
  msgstr ""
748
 
749
- #: includes/class-testimonials-widget.php:1779
750
  msgid "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview testimonial</a>"
751
  msgstr ""
752
 
753
- #: includes/class-testimonials-widget.php:1780
754
  msgid "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
755
  msgstr ""
756
 
757
- #: includes/class-testimonials-widget.php:2041
758
  msgid "If your Testimonials display has gone to funky town, please <a href=\"%s\">read the FAQ</a> about possible fixes."
759
  msgstr ""
760
 
761
- #: includes/class-testimonials-widget.php:2096
762
  msgid "Failed version check"
763
  msgstr ""
764
 
765
- #: includes/class-testimonials-widget.php:2127
766
  msgid "Shortcode"
767
  msgstr ""
768
 
@@ -851,67 +851,79 @@ msgstr ""
851
  msgid "Please donate $5 towards ongoing free support and development of the \"%1$s\" plugin. %2$s"
852
  msgstr ""
853
 
854
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:62
 
 
 
 
 
 
 
 
 
 
 
 
855
  msgid "Reset"
856
  msgstr ""
857
 
858
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:63
859
  msgid "About"
860
  msgstr ""
861
 
862
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:81
863
  msgid "Export Settings"
864
  msgstr ""
865
 
866
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:83
867
  msgid "These are your current settings in a serialized format. Copy the contents to make a backup of your settings."
868
  msgstr ""
869
 
870
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:91
871
  msgid "Import Settings"
872
  msgstr ""
873
 
874
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:93
875
  msgid "Paste new serialized settings here to overwrite your current configuration."
876
  msgstr ""
877
 
878
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:97
879
  msgid "Delete all %s data and options from database on plugin deletion. Even if this option isn't checked, WordPress will still give a data deletion warning."
880
  msgstr ""
881
 
882
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:101
883
  msgid "Remove Plugin Data on Deletion?"
884
  msgstr ""
885
 
886
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:110
887
  msgid "Reset to Defaults?"
888
  msgstr ""
889
 
890
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:113
891
  msgid "Check this box to reset options to their defaults"
892
  msgstr ""
893
 
894
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:237
895
  msgid "<img class=\"alignright size-medium\" src=\"%1$simages/michael-cannon-red-square-300x2251.jpg\" alt=\"Michael in Red Square, Moscow, Russia\" width=\"300\" height=\"225\" /><a href=\"%2$s\">%3$s</a> is by <a href=\"%4$s\">Michael Cannon</a>. He's <a href=\"%5$s\">Peichi’s</a> smiling man, an adventurous <a href=\"%6$s\" target=\"_blank\">water-rat</a>, <a href=\"%7$s\">chief people officer</a>, <a href=\"%8$s\">cyclist</a>, <a href=\"%9$s\">full stack developer</a>, <a href=\"%10$s\">poet</a>, <a href=\"%11$s\">WWOOF’er</a> and <a href=\"%12$s\">world traveler</a>."
896
  msgstr ""
897
 
898
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:280
899
  msgid "Save Changes"
900
  msgstr ""
901
 
902
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:288
903
  msgid "If you like this plugin, please <a href=\"%1$s\" title=\"Donate for Good Karma\"><img src=\"%2$s\" border=\"0\" alt=\"Donate for Good Karma\" /></a> or <a href=\"%3$s\" title=\"purchase premium WordPress plugins from Aihrus \">purchase the Premium version</a> to help fund further development and <a href=\"%4$s\" title=\"Support forums\">support</a>."
904
  msgstr ""
905
 
906
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:299
907
  msgid "Copyright &copy;%1$s <a href=\"%2$s\">Aihrus</a>."
908
  msgstr ""
909
 
910
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:581
911
  msgid "Settings saved."
912
  msgstr ""
913
 
914
- #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:638
915
  msgid "Required"
916
  msgstr ""
917
 
2
  # This file is distributed under the same license as the Testimonials by Aihrus package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Testimonials by Aihrus 2.19.3\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/testimonials-widget\n"
7
+ "POT-Creation-Date: 2014-04-21 07:24:16+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
417
 
418
  #: includes/class-testimonials-widget-settings.php:494
419
  #: includes/class-testimonials-widget.php:578
420
+ #: includes/class-testimonials-widget.php:1692
421
  msgid "Job Title"
422
  msgstr ""
423
 
424
  #: includes/class-testimonials-widget-settings.php:495
425
  #: includes/class-testimonials-widget.php:588
426
+ #: includes/class-testimonials-widget.php:1704
427
  msgid "Email"
428
  msgstr ""
429
 
430
  #: includes/class-testimonials-widget-settings.php:496
431
  #: includes/class-testimonials-widget.php:583
432
+ #: includes/class-testimonials-widget.php:1698
433
  msgid "Location"
434
  msgstr ""
435
 
436
  #: includes/class-testimonials-widget-settings.php:497
437
  #: includes/class-testimonials-widget.php:593
438
+ #: includes/class-testimonials-widget.php:1710
439
  msgid "Company"
440
  msgstr ""
441
 
442
  #: includes/class-testimonials-widget-settings.php:498
443
  #: includes/class-testimonials-widget.php:598
444
+ #: includes/class-testimonials-widget.php:1716
445
  msgid "URL"
446
  msgstr ""
447
 
615
  msgstr ""
616
 
617
  #: includes/class-testimonials-widget.php:143
618
+ #: includes/class-testimonials-widget.php:2059
619
  msgid "Testimonials Shortcode Examples"
620
  msgstr ""
621
 
667
  msgstr ""
668
 
669
  #: includes/class-testimonials-widget.php:614
670
+ #: includes/class-testimonials-widget.php:1044
671
  msgid "No testimonials found"
672
  msgstr ""
673
 
680
  msgstr ""
681
 
682
  #: includes/class-testimonials-widget.php:618
683
+ #: includes/class-testimonials-widget.php:1804
684
  msgid "Testimonial"
685
  msgstr ""
686
 
688
  msgid "View Testimonial"
689
  msgstr ""
690
 
691
+ #: includes/class-testimonials-widget.php:1210
692
  msgid "…"
693
  msgstr ""
694
 
695
+ #: includes/class-testimonials-widget.php:1417
696
  msgid "&laquo;"
697
  msgstr ""
698
 
699
+ #: includes/class-testimonials-widget.php:1425
700
  msgid "&raquo;"
701
  msgstr ""
702
 
703
+ #: includes/class-testimonials-widget.php:1728
704
  msgid "Testimonial Data"
705
  msgstr ""
706
 
707
+ #: includes/class-testimonials-widget.php:1753
708
  msgid "Enter title here"
709
  msgstr ""
710
 
711
+ #: includes/class-testimonials-widget.php:1754
712
  msgid "Enter testimonial source here"
713
  msgstr ""
714
 
715
+ #: includes/class-testimonials-widget.php:1779
716
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
717
  msgstr ""
718
 
719
+ #: includes/class-testimonials-widget.php:1780
720
  msgid "Custom field updated."
721
  msgstr ""
722
 
723
+ #: includes/class-testimonials-widget.php:1781
724
  msgid "Custom field deleted."
725
  msgstr ""
726
 
727
+ #: includes/class-testimonials-widget.php:1782
728
  msgid "Testimonial updated."
729
  msgstr ""
730
 
731
  #. translators: %s: date and time of the revision
732
 
733
+ #: includes/class-testimonials-widget.php:1784
734
  msgid "Testimonial restored to revision from %s"
735
  msgstr ""
736
 
737
+ #: includes/class-testimonials-widget.php:1785
738
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
739
  msgstr ""
740
 
741
+ #: includes/class-testimonials-widget.php:1786
742
  msgid "Testimonial saved."
743
  msgstr ""
744
 
745
+ #: includes/class-testimonials-widget.php:1787
746
  msgid "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
747
  msgstr ""
748
 
749
+ #: includes/class-testimonials-widget.php:1788
750
  msgid "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview testimonial</a>"
751
  msgstr ""
752
 
753
+ #: includes/class-testimonials-widget.php:1789
754
  msgid "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview testimonial</a>"
755
  msgstr ""
756
 
757
+ #: includes/class-testimonials-widget.php:2050
758
  msgid "If your Testimonials display has gone to funky town, please <a href=\"%s\">read the FAQ</a> about possible fixes."
759
  msgstr ""
760
 
761
+ #: includes/class-testimonials-widget.php:2105
762
  msgid "Failed version check"
763
  msgstr ""
764
 
765
+ #: includes/class-testimonials-widget.php:2136
766
  msgid "Shortcode"
767
  msgstr ""
768
 
851
  msgid "Please donate $5 towards ongoing free support and development of the \"%1$s\" plugin. %2$s"
852
  msgstr ""
853
 
854
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php:80
855
+ msgid "%s license saved."
856
+ msgstr ""
857
+
858
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php:84
859
+ msgid "%s license not saved."
860
+ msgstr ""
861
+
862
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-licensing.php:180
863
+ msgid "%s license deactivated."
864
+ msgstr ""
865
+
866
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:64
867
  msgid "Reset"
868
  msgstr ""
869
 
870
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:65
871
  msgid "About"
872
  msgstr ""
873
 
874
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:83
875
  msgid "Export Settings"
876
  msgstr ""
877
 
878
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:85
879
  msgid "These are your current settings in a serialized format. Copy the contents to make a backup of your settings."
880
  msgstr ""
881
 
882
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:93
883
  msgid "Import Settings"
884
  msgstr ""
885
 
886
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:95
887
  msgid "Paste new serialized settings here to overwrite your current configuration."
888
  msgstr ""
889
 
890
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:99
891
  msgid "Delete all %s data and options from database on plugin deletion. Even if this option isn't checked, WordPress will still give a data deletion warning."
892
  msgstr ""
893
 
894
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:103
895
  msgid "Remove Plugin Data on Deletion?"
896
  msgstr ""
897
 
898
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:112
899
  msgid "Reset to Defaults?"
900
  msgstr ""
901
 
902
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:115
903
  msgid "Check this box to reset options to their defaults"
904
  msgstr ""
905
 
906
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:245
907
  msgid "<img class=\"alignright size-medium\" src=\"%1$simages/michael-cannon-red-square-300x2251.jpg\" alt=\"Michael in Red Square, Moscow, Russia\" width=\"300\" height=\"225\" /><a href=\"%2$s\">%3$s</a> is by <a href=\"%4$s\">Michael Cannon</a>. He's <a href=\"%5$s\">Peichi’s</a> smiling man, an adventurous <a href=\"%6$s\" target=\"_blank\">water-rat</a>, <a href=\"%7$s\">chief people officer</a>, <a href=\"%8$s\">cyclist</a>, <a href=\"%9$s\">full stack developer</a>, <a href=\"%10$s\">poet</a>, <a href=\"%11$s\">WWOOF’er</a> and <a href=\"%12$s\">world traveler</a>."
908
  msgstr ""
909
 
910
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:289
911
  msgid "Save Changes"
912
  msgstr ""
913
 
914
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:297
915
  msgid "If you like this plugin, please <a href=\"%1$s\" title=\"Donate for Good Karma\"><img src=\"%2$s\" border=\"0\" alt=\"Donate for Good Karma\" /></a> or <a href=\"%3$s\" title=\"purchase premium WordPress plugins from Aihrus \">purchase the Premium version</a> to help fund further development and <a href=\"%4$s\" title=\"Support forums\">support</a>."
916
  msgstr ""
917
 
918
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:308
919
  msgid "Copyright &copy;%1$s <a href=\"%2$s\">Aihrus</a>."
920
  msgstr ""
921
 
922
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:617
923
  msgid "Settings saved."
924
  msgstr ""
925
 
926
+ #: includes/libraries/aihrus-framework/includes/class-aihrus-settings.php:681
927
  msgid "Required"
928
  msgstr ""
929
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: http://aihr.us/about-aihrus/donate/
5
  Tags: client, customer, portfolio, quotations, quote, quotes, random, recommendation, reference, review, reviews, testimonial, testimonials, testimony, wpml
6
  Requires at least: 3.6
7
  Tested up to: 3.9.0
8
- Stable tag: 2.19.3RC1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -360,26 +360,26 @@ Further, global settings are the baseline for shortcodes. If you want to alter t
360
 
361
  = Most Common Issues =
362
 
363
- * Got `Parse error: syntax error, unexpected T_STATIC, expecting ')'`? Read [Most Aihrus Plugins Require PHP 5.3+](https://aihrus.zendesk.com/entries/30678006) for the fixes.
364
  * [404 - Page not found](https://aihrus.zendesk.com/entries/23679301)
365
- * [Change or debug CSS](https://aihrus.zendesk.com/entries/24910733) AKA "What's up with these quotes?"
366
  * [Customize bxSlider](http://bxslider.com/examples)
367
- * [Debug common theme and plugin conflicts](https://aihrus.zendesk.com/entries/25119302)
368
- * [How do I change my widget's rotation speed or other options?](https://aihrus.zendesk.com/entries/27714083)
369
  * [How do I create a testimonial record?](https://aihrus.zendesk.com/entries/30602506)
 
370
  * [How to change testimonials layout](https://aihrus.zendesk.com/entries/38055707)
371
- * [My options don't work, no matter what I do.](https://aihrus.zendesk.com/entries/30746533)
372
  * [Pagination is broken](https://aihrus.zendesk.com/entries/23693513)
373
  * [Test Review schema output](http://www.google.com/webmasters/tools/richsnippets)
374
- * [Widgets don't rotate](https://aihrus.zendesk.com/entries/23693363)
375
 
376
  = Still Stuck or Want Something Done? Get Support! =
377
 
378
- 1. [Testimonials Knowledge Base](https://aihrus.zendesk.com/categories/20104507) - read and comment upon 125+ frequently asked questions
379
- 1. [Open Testimonials Issues](https://github.com/michael-cannon/testimonials-widget/issues) - review and submit bug reports and enhancement requests
380
- 1. [Testimonials Support on WordPress](http://wordpress.org/support/plugin/testimonials-widget) - ask questions and review responses
381
- 1. [Contribute Code to Testimonials](https://github.com/michael-cannon/testimonials-widget/blob/master/CONTRIBUTING.md)
382
- 1. [Beta Testers Needed](http://aihr.us/become-beta-tester/) - get the latest Testimonials version
383
 
384
 
385
  == Screenshots ==
5
  Tags: client, customer, portfolio, quotations, quote, quotes, random, recommendation, reference, review, reviews, testimonial, testimonials, testimony, wpml
6
  Requires at least: 3.6
7
  Tested up to: 3.9.0
8
+ Stable tag: 2.19.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
360
 
361
  = Most Common Issues =
362
 
363
+ * Got `Parse error: syntax error, unexpected T_STATIC…`? See [Most Aihrus Plugins Require PHP 5.3+](https://aihrus.zendesk.com/entries/30678006)
364
  * [404 - Page not found](https://aihrus.zendesk.com/entries/23679301)
365
+ * [Change styling or debug CSS](https://aihrus.zendesk.com/entries/24910733)
366
  * [Customize bxSlider](http://bxslider.com/examples)
367
+ * [Debug theme and plugin conflicts](https://aihrus.zendesk.com/entries/25119302)
 
368
  * [How do I create a testimonial record?](https://aihrus.zendesk.com/entries/30602506)
369
+ * [How do I reset testimonials?](https://aihrus.zendesk.com/entries/30746533)
370
  * [How to change testimonials layout](https://aihrus.zendesk.com/entries/38055707)
371
+ * [My options don't work](https://aihrus.zendesk.com/entries/30746533)
372
  * [Pagination is broken](https://aihrus.zendesk.com/entries/23693513)
373
  * [Test Review schema output](http://www.google.com/webmasters/tools/richsnippets)
374
+ * [Testimonials don't rotate](https://aihrus.zendesk.com/entries/23693363)
375
 
376
  = Still Stuck or Want Something Done? Get Support! =
377
 
378
+ 1. [Knowledge Base](https://aihrus.zendesk.com/categories/20104507) - read and comment upon 125+ frequently asked questions
379
+ 1. [Open Issues](https://github.com/michael-cannon/testimonials-widget/issues) - review and submit bug reports and enhancement requests
380
+ 1. [Support on WordPress](http://wordpress.org/support/plugin/testimonials-widget) - ask questions and review responses
381
+ 1. [Contribute Code](https://github.com/michael-cannon/testimonials-widget/blob/master/CONTRIBUTING.md)
382
+ 1. [Beta Testers Needed](http://aihr.us/become-beta-tester/) - provide feedback and direction to plugin development
383
 
384
 
385
  == Screenshots ==
testimonials-widget.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Testimonials by Aihrus
4
  * Plugin URI: http://wordpress.org/plugins/testimonials-widget/
5
  * Description: Testimonials by Aihrus lets you randomly slide or list selected portfolios, quotes, reviews, or text with images or videos on your WordPress site.
6
- * Version: 2.19.2
7
  * Author: Michael Cannon
8
  * Author URI: http://aihr.us/resume/
9
  * License: GPLv2 or later
@@ -31,7 +31,7 @@ if ( ! defined( 'ABSPATH' ) )
31
  exit;
32
 
33
  if ( ! defined( 'TW_AIHR_VERSION' ) )
34
- define( 'TW_AIHR_VERSION', '1.1.1' );
35
 
36
  if ( ! defined( 'TW_BASE' ) )
37
  define( 'TW_BASE', plugin_basename( __FILE__ ) );
@@ -52,7 +52,7 @@ if ( ! defined( 'TW_PREMIUM_LINK' ) )
52
  define( 'TW_PREMIUM_LINK', '<a href="http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/">Buy Premium</a>' );
53
 
54
  if ( ! defined( 'TW_VERSION' ) )
55
- define( 'TW_VERSION', '2.19.2' );
56
 
57
  require_once TW_DIR_INC . 'requirements.php';
58
 
3
  * Plugin Name: Testimonials by Aihrus
4
  * Plugin URI: http://wordpress.org/plugins/testimonials-widget/
5
  * Description: Testimonials by Aihrus lets you randomly slide or list selected portfolios, quotes, reviews, or text with images or videos on your WordPress site.
6
+ * Version: 2.19.3
7
  * Author: Michael Cannon
8
  * Author URI: http://aihr.us/resume/
9
  * License: GPLv2 or later
31
  exit;
32
 
33
  if ( ! defined( 'TW_AIHR_VERSION' ) )
34
+ define( 'TW_AIHR_VERSION', '1.1.2' );
35
 
36
  if ( ! defined( 'TW_BASE' ) )
37
  define( 'TW_BASE', plugin_basename( __FILE__ ) );
52
  define( 'TW_PREMIUM_LINK', '<a href="http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/">Buy Premium</a>' );
53
 
54
  if ( ! defined( 'TW_VERSION' ) )
55
+ define( 'TW_VERSION', '2.19.3' );
56
 
57
  require_once TW_DIR_INC . 'requirements.php';
58