Widget CSS Classes - Version 1.5.3

Version Description

  • Compatibility: dFactory Responsive Lightbox widget option. #33
  • Tested with WP 5.0.
Download this release

Release Info

Developer keraweb
Plugin Icon 128x128 Widget CSS Classes
Version 1.5.3
Comparing to
See all releases

Code changes from version 1.5.2.1 to 1.5.3

css/widget-css-classes.css CHANGED
@@ -25,4 +25,4 @@
25
  .wcssc_sortable .wcssc_drop_placeholder {
26
  background: #e5e5e5;
27
  height: 30px;
28
- }
25
  .wcssc_sortable .wcssc_drop_placeholder {
26
  background: #e5e5e5;
27
  height: 30px;
28
+ }
includes/widget-css-classes-library.class.php CHANGED
@@ -72,10 +72,10 @@ class WCSSC_Lib {
72
  public static function admin_footer() {
73
  $plugin_data = get_plugin_data( WCSSC_FILE );
74
  echo $plugin_data['Title'] // @codingStandardsIgnoreLine >> no valid esc function.
75
- . ' | ' . esc_attr__( 'Version', WCSSC_Lib::DOMAIN ) . ' ' . esc_html( $plugin_data['Version'] )
76
- . ' | ' . $plugin_data['Author'] // @codingStandardsIgnoreLine >> no valid esc function.
77
- . ' | <a href="http://codebrainmedia.com">CodeBrain Media</a>'
78
- . ' | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=cindy@cleverness.org">' . esc_attr__( 'Donate', self::DOMAIN ) . '</a>
79
  <br />';
80
  }
81
 
@@ -184,9 +184,9 @@ class WCSSC_Lib {
184
  if ( ! is_string( $key ) ) {
185
  return false;
186
  }
187
- self::$settings = (array) self::$settings;
188
  self::$settings[ $key ] = $settings;
189
- $settings = self::$settings;
190
  }
191
  elseif ( ! is_array( $settings ) ) {
192
  return false;
@@ -263,7 +263,7 @@ class WCSSC_Lib {
263
  }
264
 
265
  if ( is_string( $value ) ) {
266
- $settings[ $key ] = strip_tags( stripslashes( $value ) );
267
  }
268
 
269
  // Validate var types.
@@ -299,7 +299,7 @@ class WCSSC_Lib {
299
  $new_classes = array();
300
  // Parse each value the same way.
301
  foreach ( $classes as $key => $class ) {
302
- $class = self::parse_defined_classes( $class );
303
  $new_classes = array_merge( $new_classes, $class );
304
  }
305
 
72
  public static function admin_footer() {
73
  $plugin_data = get_plugin_data( WCSSC_FILE );
74
  echo $plugin_data['Title'] // @codingStandardsIgnoreLine >> no valid esc function.
75
+ . ' | ' . esc_attr__( 'Version', WCSSC_Lib::DOMAIN ) . ' ' . esc_html( $plugin_data['Version'] )
76
+ . ' | ' . $plugin_data['Author'] // @codingStandardsIgnoreLine >> no valid esc function.
77
+ . ' | <a href="http://codebrainmedia.com">CodeBrain Media</a>'
78
+ . ' | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=cindy@cleverness.org">' . esc_attr__( 'Donate', self::DOMAIN ) . '</a>
79
  <br />';
80
  }
81
 
184
  if ( ! is_string( $key ) ) {
185
  return false;
186
  }
187
+ self::$settings = (array) self::$settings;
188
  self::$settings[ $key ] = $settings;
189
+ $settings = self::$settings;
190
  }
191
  elseif ( ! is_array( $settings ) ) {
192
  return false;
263
  }
264
 
265
  if ( is_string( $value ) ) {
266
+ $settings[ $key ] = wp_strip_all_tags( stripslashes( $value ) );
267
  }
268
 
269
  // Validate var types.
299
  $new_classes = array();
300
  // Parse each value the same way.
301
  foreach ( $classes as $key => $class ) {
302
+ $class = self::parse_defined_classes( $class );
303
  $new_classes = array_merge( $new_classes, $class );
304
  }
305
 
includes/widget-css-classes-settings.class.php CHANGED
@@ -5,7 +5,7 @@
5
  * Settings
6
  * @author C.M. Kendrick <cindy@cleverness.org>
7
  * @package widget-css-classes
8
- * @version 1.5.2.1
9
  */
10
 
11
  /**
@@ -16,10 +16,29 @@
16
  */
17
  class WCSSC_Settings {
18
 
 
 
 
19
  protected $general_key = '';
 
 
 
 
20
  protected $plugin_key = 'widget-css-classes-settings';
 
 
 
 
21
  protected $plugin_tabs = array();
 
 
 
 
22
  protected $general_settings = array();
 
 
 
 
23
  protected $current_tab = '';
24
 
25
  public function __construct() {
@@ -31,7 +50,7 @@ class WCSSC_Settings {
31
 
32
  public function load_settings() {
33
  $this->general_settings = WCSSC_Lib::get_settings();
34
- $this->general_key = WCSSC_Lib::$settings_key;
35
  }
36
 
37
  public function section_general_desc() {
@@ -44,34 +63,95 @@ class WCSSC_Settings {
44
 
45
  register_setting( $this->general_key, $this->general_key, array( $this, 'validate_input' ) );
46
  add_settings_section( 'section_general', esc_attr__( 'Widget CSS Classes Settings', WCSSC_Lib::DOMAIN ), array( $this, 'section_general_desc' ), $this->general_key );
47
- add_settings_field( 'show_number', esc_attr__( 'Add Widget Number Classes', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
48
- 'key' => 'show_number',
49
- ) );
50
- add_settings_field( 'show_location', esc_attr__( 'Add First/Last Classes', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
51
- 'key' => 'show_location',
52
- ) );
53
- add_settings_field( 'show_evenodd', esc_attr__( 'Add Even/Odd Classes', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
54
- 'key' => 'show_evenodd',
55
- ) );
56
- add_settings_field( 'show_id', esc_attr__( 'Show Additional Field for ID', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
57
- 'key' => 'show_id',
58
- ) );
59
- add_settings_field( 'type', esc_attr__( 'Class Field Type', WCSSC_Lib::DOMAIN ), array( $this, 'type_option' ), $this->general_key, 'section_general' );
60
- add_settings_field( 'defined_classes', esc_attr__( 'Predefined Classes', WCSSC_Lib::DOMAIN ), array( $this, 'defined_classes_option' ), $this->general_key, 'section_general' );
61
- add_settings_field( 'fix_widget_params', esc_attr__( 'Fix widget parameters', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
62
- 'key' => 'fix_widget_params',
63
- 'desc' => esc_html__( 'Wrap widget in a <div> element if the parameters are invalid.', WCSSC_Lib::DOMAIN ),
64
- ) );
65
- add_settings_field( 'filter_unique', esc_attr__( 'Remove duplicate classes', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
66
- 'key' => 'filter_unique',
67
- 'desc' => esc_html__( 'Plugins that run after this plugin could still add duplicates.', WCSSC_Lib::DOMAIN ),
68
- ) );
69
- add_settings_field( 'translate_classes', esc_attr__( 'Translate classes', WCSSC_Lib::DOMAIN ), array( $this, 'show_yes_no_option' ), $this->general_key, 'section_general', array(
70
- 'key' => 'translate_classes',
71
- 'desc' => esc_html__( 'Translate classes like `widget-first` and `widget-even`.', WCSSC_Lib::DOMAIN )
72
- // Translators: %s stands for a link to translate.wordpress.org.
73
- . ' ' . sprintf( esc_html__( 'Translations are taken from %s', WCSSC_Lib::DOMAIN ), '<a href="https://translate.wordpress.org/projects/wp-plugins/widget-css-classes" target="_blank">translate.wordpress.org</a>' ),
74
- ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  do_action( 'widget_css_classes_settings' );
76
  }
77
 
@@ -195,13 +275,16 @@ class WCSSC_Settings {
195
  $wcssc_message = 3;
196
  if ( $_FILES['widget-css-classes-settings-import-file']['tmp_name'] ) {
197
  $wcssc_message = 2;
198
- $import = explode( "\n",
 
199
  // @codingStandardsIgnoreLine >> yeah yeah, I know...
200
- file_get_contents( $_FILES['widget-css-classes-settings-import-file']['tmp_name'] ) );
 
201
  if ( array_shift( $import ) === '[START=WCSSC SETTINGS]' && array_pop( $import ) === '[STOP=WCSSC SETTINGS]' ) {
202
  $options = WCSSC_Lib::get_settings();
203
  foreach ( $import as $import_option ) {
204
  list( $key, $value ) = explode( "\t", $import_option );
 
205
  $options[ $key ] = json_decode( sanitize_text_field( $value ) );
206
  if ( $options['dropdown'] ) { // Update for 1.3.0
207
  $options['defined_classes'] = $options['dropdown'];
@@ -213,11 +296,15 @@ class WCSSC_Settings {
213
  }
214
  }
215
 
216
- wp_redirect( admin_url( '/options-general.php?page=widget-css-classes-settings&tab=importexport&wcssc_message=' . esc_attr( $wcssc_message ) ) );
217
  exit;
218
  }
219
  }
220
 
 
 
 
 
221
  public function validate_input( $input ) {
222
  WCSSC_Lib::set_settings( $input );
223
  return WCSSC_Lib::get_settings();
5
  * Settings
6
  * @author C.M. Kendrick <cindy@cleverness.org>
7
  * @package widget-css-classes
8
+ * @version 1.5.3
9
  */
10
 
11
  /**
16
  */
17
  class WCSSC_Settings {
18
 
19
+ /**
20
+ * @var string
21
+ */
22
  protected $general_key = '';
23
+
24
+ /**
25
+ * @var string
26
+ */
27
  protected $plugin_key = 'widget-css-classes-settings';
28
+
29
+ /**
30
+ * @var array
31
+ */
32
  protected $plugin_tabs = array();
33
+
34
+ /**
35
+ * @var array
36
+ */
37
  protected $general_settings = array();
38
+
39
+ /**
40
+ * @var string
41
+ */
42
  protected $current_tab = '';
43
 
44
  public function __construct() {
50
 
51
  public function load_settings() {
52
  $this->general_settings = WCSSC_Lib::get_settings();
53
+ $this->general_key = WCSSC_Lib::$settings_key;
54
  }
55
 
56
  public function section_general_desc() {
63
 
64
  register_setting( $this->general_key, $this->general_key, array( $this, 'validate_input' ) );
65
  add_settings_section( 'section_general', esc_attr__( 'Widget CSS Classes Settings', WCSSC_Lib::DOMAIN ), array( $this, 'section_general_desc' ), $this->general_key );
66
+ add_settings_field(
67
+ 'show_number',
68
+ esc_attr__( 'Add Widget Number Classes', WCSSC_Lib::DOMAIN ),
69
+ array( $this, 'show_yes_no_option' ),
70
+ $this->general_key,
71
+ 'section_general',
72
+ array(
73
+ 'key' => 'show_number',
74
+ )
75
+ );
76
+ add_settings_field(
77
+ 'show_location',
78
+ esc_attr__( 'Add First/Last Classes', WCSSC_Lib::DOMAIN ),
79
+ array( $this, 'show_yes_no_option' ),
80
+ $this->general_key,
81
+ 'section_general',
82
+ array(
83
+ 'key' => 'show_location',
84
+ )
85
+ );
86
+ add_settings_field(
87
+ 'show_evenodd',
88
+ esc_attr__( 'Add Even/Odd Classes', WCSSC_Lib::DOMAIN ),
89
+ array( $this, 'show_yes_no_option' ),
90
+ $this->general_key,
91
+ 'section_general',
92
+ array(
93
+ 'key' => 'show_evenodd',
94
+ )
95
+ );
96
+ add_settings_field(
97
+ 'show_id',
98
+ esc_attr__( 'Show Additional Field for ID', WCSSC_Lib::DOMAIN ),
99
+ array( $this, 'show_yes_no_option' ),
100
+ $this->general_key,
101
+ 'section_general',
102
+ array(
103
+ 'key' => 'show_id',
104
+ )
105
+ );
106
+ add_settings_field(
107
+ 'type',
108
+ esc_attr__( 'Class Field Type', WCSSC_Lib::DOMAIN ),
109
+ array( $this, 'type_option' ),
110
+ $this->general_key,
111
+ 'section_general'
112
+ );
113
+ add_settings_field(
114
+ 'defined_classes',
115
+ esc_attr__( 'Predefined Classes', WCSSC_Lib::DOMAIN ),
116
+ array( $this, 'defined_classes_option' ),
117
+ $this->general_key,
118
+ 'section_general'
119
+ );
120
+ add_settings_field(
121
+ 'fix_widget_params',
122
+ esc_attr__( 'Fix widget parameters', WCSSC_Lib::DOMAIN ),
123
+ array( $this, 'show_yes_no_option' ),
124
+ $this->general_key,
125
+ 'section_general',
126
+ array(
127
+ 'key' => 'fix_widget_params',
128
+ 'desc' => esc_html__( 'Wrap widget in a <div> element if the parameters are invalid.', WCSSC_Lib::DOMAIN ),
129
+ )
130
+ );
131
+ add_settings_field(
132
+ 'filter_unique',
133
+ esc_attr__( 'Remove duplicate classes', WCSSC_Lib::DOMAIN ),
134
+ array( $this, 'show_yes_no_option' ),
135
+ $this->general_key,
136
+ 'section_general',
137
+ array(
138
+ 'key' => 'filter_unique',
139
+ 'desc' => esc_html__( 'Plugins that run after this plugin could still add duplicates.', WCSSC_Lib::DOMAIN ),
140
+ )
141
+ );
142
+ add_settings_field(
143
+ 'translate_classes',
144
+ esc_attr__( 'Translate classes', WCSSC_Lib::DOMAIN ),
145
+ array( $this, 'show_yes_no_option' ),
146
+ $this->general_key,
147
+ 'section_general',
148
+ array(
149
+ 'key' => 'translate_classes',
150
+ 'desc' => esc_html__( 'Translate classes like `widget-first` and `widget-even`.', WCSSC_Lib::DOMAIN )
151
+ // Translators: %s stands for a link to translate.wordpress.org.
152
+ . ' ' . sprintf( esc_html__( 'Translations are taken from %s', WCSSC_Lib::DOMAIN ), '<a href="https://translate.wordpress.org/projects/wp-plugins/widget-css-classes" target="_blank">translate.wordpress.org</a>' ),
153
+ )
154
+ );
155
  do_action( 'widget_css_classes_settings' );
156
  }
157
 
275
  $wcssc_message = 3;
276
  if ( $_FILES['widget-css-classes-settings-import-file']['tmp_name'] ) {
277
  $wcssc_message = 2;
278
+ $import = explode(
279
+ "\n",
280
  // @codingStandardsIgnoreLine >> yeah yeah, I know...
281
+ file_get_contents( $_FILES['widget-css-classes-settings-import-file']['tmp_name'] )
282
+ );
283
  if ( array_shift( $import ) === '[START=WCSSC SETTINGS]' && array_pop( $import ) === '[STOP=WCSSC SETTINGS]' ) {
284
  $options = WCSSC_Lib::get_settings();
285
  foreach ( $import as $import_option ) {
286
  list( $key, $value ) = explode( "\t", $import_option );
287
+
288
  $options[ $key ] = json_decode( sanitize_text_field( $value ) );
289
  if ( $options['dropdown'] ) { // Update for 1.3.0
290
  $options['defined_classes'] = $options['dropdown'];
296
  }
297
  }
298
 
299
+ wp_safe_redirect( admin_url( '/options-general.php?page=widget-css-classes-settings&tab=importexport&wcssc_message=' . esc_attr( $wcssc_message ) ) );
300
  exit;
301
  }
302
  }
303
 
304
+ /**
305
+ * @param array $input
306
+ * @return array
307
+ */
308
  public function validate_input( $input ) {
309
  WCSSC_Lib::set_settings( $input );
310
  return WCSSC_Lib::get_settings();
includes/widget-css-classes.class.php CHANGED
@@ -5,7 +5,7 @@
5
  * Loader
6
  * @author C.M. Kendrick <cindy@cleverness.org>
7
  * @package widget-css-classes
8
- * @version 1.5.2.1
9
  */
10
 
11
  /**
@@ -123,14 +123,17 @@ class WCSSC {
123
  */
124
  public static function extend_widget_form( $widget, $return, $instance ) {
125
  self::init();
126
- $instance = wp_parse_args( $instance, array(
127
- 'ids' => '',
128
- 'classes' => '',
129
- 'classes-defined' => array(),
130
- ) );
131
-
132
- $access_id = current_user_can( self::$caps['ids'] );
133
- $access_class = current_user_can( self::$caps['classes'] );
 
 
 
134
  $access_predefined = current_user_can( self::$caps['defined'] );
135
  if ( ! $access_predefined ) {
136
  $access_class = false;
@@ -203,8 +206,8 @@ class WCSSC {
203
  */
204
  private static function do_id_field( $widget, $instance ) {
205
  $field = '';
206
- $id = $widget->get_field_id( 'ids' );
207
- $name = $widget->get_field_name( 'ids' );
208
  /**
209
  * Change the label for the CSS ID form field.
210
  *
@@ -230,8 +233,8 @@ class WCSSC {
230
  */
231
  private static function do_class_field( $widget, $instance ) {
232
  $field = '';
233
- $id = $widget->get_field_id( 'classes' );
234
- $name = $widget->get_field_name( 'classes' );
235
 
236
  /**
237
  * Change the label for the CSS Classes form field.
@@ -240,6 +243,7 @@ class WCSSC {
240
  * @return string
241
  */
242
  $label = apply_filters( 'widget_css_classes_class', esc_html__( 'CSS Classes', WCSSC_Lib::DOMAIN ) );
 
243
  $field .= self::do_label( $label, $id );
244
 
245
  $field .= "<input type='text' name='{$name}' id='{$id}' value='{$instance['classes']}' class='widefat' />";
@@ -258,10 +262,9 @@ class WCSSC {
258
  * @return string
259
  */
260
  private static function do_predefined_field( $widget, $instance, $do_class_field = null ) {
261
-
262
  $field = '';
263
- $id = $widget->get_field_id( 'classes-defined' );
264
- $name = $widget->get_field_name( 'classes-defined' );
265
 
266
  /**
267
  * @see WCSSC::do_class_field()
@@ -309,6 +312,7 @@ class WCSSC {
309
  if ( null !== $do_class_field ) {
310
  if ( $do_class_field ) {
311
  $field .= self::do_class_field( $widget, $instance );
 
312
  $style['margin-top'] = 'margin-top: -10px;';
313
  } else {
314
  $field .= self::do_hidden( $widget->get_field_name( 'classes' ), $instance['classes'] );
@@ -318,7 +322,7 @@ class WCSSC {
318
  $field .= self::do_label( $label, $id );
319
  }
320
 
321
- $style = implode( ' ', $style );
322
  $field .= "<ul id='{$id}' style='{$style}'>";
323
  foreach ( $predefined_classes as $preset ) {
324
  $preset_checked = '';
@@ -326,9 +330,11 @@ class WCSSC {
326
  $preset_checked = ' checked="checked"';
327
  }
328
  $option_id = $id . '-' . esc_attr( $preset );
329
- $option = "<label for='{$option_id}'>";
 
330
  $option .= "<input id='{$option_id}' name='{$name}[]' type='checkbox' value='{$preset}' {$preset_checked} />";
331
  $option .= ' ' . $preset . '</label>';
 
332
  $field .= "<li>{$option}</li>";
333
  }
334
  $field .= '</ul>';
@@ -373,23 +379,26 @@ class WCSSC {
373
  /**
374
  * Updates the Widget with the classes
375
  * @static
376
- * @param $instance
377
- * @param $new_instance
378
  * @return array
379
  * @since 1.0
380
  */
381
  public static function update_widget( $instance, $new_instance ) {
382
  self::init();
383
- $new_instance = wp_parse_args( $new_instance, array(
384
- 'classes' => null,
385
- 'classes-defined' => array(),
386
- ) );
 
 
 
387
 
388
  if ( current_user_can( self::$caps['ids'] ) && WCSSC_Lib::get_settings( 'show_id' ) ) {
389
  $instance['ids'] = sanitize_text_field( $new_instance['ids'] );
390
  }
391
 
392
- $access_class = current_user_can( self::$caps['classes'] );
393
  $access_predefined = current_user_can( self::$caps['defined'] );
394
  if ( ! $access_predefined ) {
395
  $access_class = false;
@@ -418,6 +427,7 @@ class WCSSC {
418
 
419
  // Remove empty and duplicate values and overwrite the original instance.
420
  $new_classes = array_filter( array_unique( $new_classes ) );
 
421
  $instance['classes'] = sanitize_text_field( implode( ' ', $new_classes ) );
422
  }
423
 
@@ -439,7 +449,7 @@ class WCSSC {
439
  * @todo Refactor to enable above checks.
440
  *
441
  * @static
442
- * @param $params
443
  * @return mixed
444
  * @since 1.0
445
  */
@@ -481,7 +491,7 @@ class WCSSC {
481
  // Add custom and predefined classes.
482
  if ( ! empty( $widget_opt[ $widget_num ]['classes'] ) ) {
483
 
484
- $custom_classes = explode( ' ', (string) $widget_opt[ $widget_num ]['classes'] );
485
  $defined_classes = WCSSC_Lib::get_settings( 'defined_classes' );
486
 
487
  // Order classes by predefined classes order and append the other (custom) classes.
@@ -520,9 +530,10 @@ class WCSSC {
520
  } // End if().
521
 
522
  // Add first, last, even, and odd classes.
523
- if ( WCSSC_Lib::get_settings( 'show_number' ) ||
524
- WCSSC_Lib::get_settings( 'show_location' ) ||
525
- WCSSC_Lib::get_settings( 'show_evenodd' )
 
526
  ) {
527
 
528
  if ( ! self::$widget_counter ) {
@@ -540,9 +551,10 @@ class WCSSC {
540
  array_unshift( $classes, $class );
541
  }
542
 
543
- if ( WCSSC_Lib::get_settings( 'show_location' ) &&
544
- isset( $arr_registered_widgets[ $this_id ] ) &&
545
- is_array( $arr_registered_widgets[ $this_id ] )
 
546
  ) {
547
  $widget_first = apply_filters( 'widget_css_classes_first', self::$core_classes['widget_first'] );
548
  $widget_last = apply_filters( 'widget_css_classes_last', self::$core_classes['widget_last'] );
@@ -557,7 +569,7 @@ class WCSSC {
557
  if ( WCSSC_Lib::get_settings( 'show_evenodd' ) ) {
558
  $widget_even = apply_filters( 'widget_css_classes_even', self::$core_classes['widget_even'] );
559
  $widget_odd = apply_filters( 'widget_css_classes_odd', self::$core_classes['widget_odd'] );
560
- $class = ( ( self::$widget_counter[ $this_id ] % 2 ) ? $widget_odd : $widget_even );
561
  array_unshift( $classes, $class );
562
  }
563
 
@@ -675,7 +687,7 @@ class WCSSC {
675
  } else {
676
  $str = preg_replace(
677
  '/' . preg_quote( $attr, '/' ) . '/',
678
- $attr . $content_extra . ' ' ,
679
  $str,
680
  1
681
  );
@@ -690,6 +702,7 @@ class WCSSC {
690
  *
691
  * // Disable complexity check because of third part plugin handling.
692
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
 
693
  *
694
  * @static
695
  * @since 1.5.0
@@ -700,16 +713,14 @@ class WCSSC {
700
  $widget_opt = null;
701
 
702
  $active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );
703
- // If Widget Logic plugin is enabled, use it's callback
704
  if ( in_array( 'widget-logic/widget_logic.php', $active_plugins, true ) ) {
705
  $widget_logic_options = get_option( 'widget_logic' );
706
  if ( ! empty( $widget_logic_options['widget_logic-options-filter'] ) ) {
707
  $widget_opt = get_option( $widget_obj['callback_wl_redirect'][0]->option_name );
708
- } else {
709
- $widget_opt = get_option( $widget_obj['callback'][0]->option_name );
710
  }
711
  }
712
- // If Widget Context plugin is enabled, use it's callback
713
  elseif ( in_array( 'widget-context/widget-context.php', $active_plugins, true ) ) {
714
  $callback = isset( $widget_obj['callback_original_wc'] ) ? $widget_obj['callback_original_wc'] : null;
715
  $callback = ! $callback && isset( $widget_obj['callback'] ) ? $widget_obj['callback'] : null;
@@ -718,24 +729,34 @@ class WCSSC {
718
  $widget_opt = get_option( $callback[0]->option_name );
719
  }
720
  }
721
- // If Widget Output filter is enabled (f.e. by WP External Links plugin), don't use it's callback but the original callback
722
  elseif ( isset( $widget_obj['_wo_original_callback'] ) ) {
723
  $widget_opt = get_option( $widget_obj['_wo_original_callback'][0]->option_name );
724
  }
725
 
726
- // Default callback
727
- else {
728
- // Check if WP Page Widget is in use
729
  global $post;
730
  $id = ( isset( $post->ID ) ? get_the_ID() : null );
731
  if ( isset( $id ) && get_post_meta( $id, '_customize_sidebars' ) ) {
732
  $custom_sidebarcheck = get_post_meta( $id, '_customize_sidebars' );
733
  }
 
 
 
 
 
 
 
 
 
734
  if ( isset( $custom_sidebarcheck[0] ) && ( 'yes' === $custom_sidebarcheck[0] ) ) {
735
- $widget_opt = get_option( 'widget_' . $id . '_' . substr( $widget_obj['callback'][0]->option_name, 7 ) );
736
- } elseif ( isset( $widget_obj['callback'][0]->option_name ) ) {
737
- // Default
738
- $widget_opt = get_option( $widget_obj['callback'][0]->option_name );
 
739
  }
740
  }
741
 
5
  * Loader
6
  * @author C.M. Kendrick <cindy@cleverness.org>
7
  * @package widget-css-classes
8
+ * @version 1.5.3
9
  */
10
 
11
  /**
123
  */
124
  public static function extend_widget_form( $widget, $return, $instance ) {
125
  self::init();
126
+ $instance = wp_parse_args(
127
+ $instance,
128
+ array(
129
+ 'ids' => '',
130
+ 'classes' => '',
131
+ 'classes-defined' => array(),
132
+ )
133
+ );
134
+
135
+ $access_id = current_user_can( self::$caps['ids'] );
136
+ $access_class = current_user_can( self::$caps['classes'] );
137
  $access_predefined = current_user_can( self::$caps['defined'] );
138
  if ( ! $access_predefined ) {
139
  $access_class = false;
206
  */
207
  private static function do_id_field( $widget, $instance ) {
208
  $field = '';
209
+ $id = $widget->get_field_id( 'ids' );
210
+ $name = $widget->get_field_name( 'ids' );
211
  /**
212
  * Change the label for the CSS ID form field.
213
  *
233
  */
234
  private static function do_class_field( $widget, $instance ) {
235
  $field = '';
236
+ $id = $widget->get_field_id( 'classes' );
237
+ $name = $widget->get_field_name( 'classes' );
238
 
239
  /**
240
  * Change the label for the CSS Classes form field.
243
  * @return string
244
  */
245
  $label = apply_filters( 'widget_css_classes_class', esc_html__( 'CSS Classes', WCSSC_Lib::DOMAIN ) );
246
+
247
  $field .= self::do_label( $label, $id );
248
 
249
  $field .= "<input type='text' name='{$name}' id='{$id}' value='{$instance['classes']}' class='widefat' />";
262
  * @return string
263
  */
264
  private static function do_predefined_field( $widget, $instance, $do_class_field = null ) {
 
265
  $field = '';
266
+ $id = $widget->get_field_id( 'classes-defined' );
267
+ $name = $widget->get_field_name( 'classes-defined' );
268
 
269
  /**
270
  * @see WCSSC::do_class_field()
312
  if ( null !== $do_class_field ) {
313
  if ( $do_class_field ) {
314
  $field .= self::do_class_field( $widget, $instance );
315
+
316
  $style['margin-top'] = 'margin-top: -10px;';
317
  } else {
318
  $field .= self::do_hidden( $widget->get_field_name( 'classes' ), $instance['classes'] );
322
  $field .= self::do_label( $label, $id );
323
  }
324
 
325
+ $style = implode( ' ', $style );
326
  $field .= "<ul id='{$id}' style='{$style}'>";
327
  foreach ( $predefined_classes as $preset ) {
328
  $preset_checked = '';
330
  $preset_checked = ' checked="checked"';
331
  }
332
  $option_id = $id . '-' . esc_attr( $preset );
333
+
334
+ $option = "<label for='{$option_id}'>";
335
  $option .= "<input id='{$option_id}' name='{$name}[]' type='checkbox' value='{$preset}' {$preset_checked} />";
336
  $option .= ' ' . $preset . '</label>';
337
+
338
  $field .= "<li>{$option}</li>";
339
  }
340
  $field .= '</ul>';
379
  /**
380
  * Updates the Widget with the classes
381
  * @static
382
+ * @param array $instance
383
+ * @param array $new_instance
384
  * @return array
385
  * @since 1.0
386
  */
387
  public static function update_widget( $instance, $new_instance ) {
388
  self::init();
389
+ $new_instance = wp_parse_args(
390
+ $new_instance,
391
+ array(
392
+ 'classes' => null,
393
+ 'classes-defined' => array(),
394
+ )
395
+ );
396
 
397
  if ( current_user_can( self::$caps['ids'] ) && WCSSC_Lib::get_settings( 'show_id' ) ) {
398
  $instance['ids'] = sanitize_text_field( $new_instance['ids'] );
399
  }
400
 
401
+ $access_class = current_user_can( self::$caps['classes'] );
402
  $access_predefined = current_user_can( self::$caps['defined'] );
403
  if ( ! $access_predefined ) {
404
  $access_class = false;
427
 
428
  // Remove empty and duplicate values and overwrite the original instance.
429
  $new_classes = array_filter( array_unique( $new_classes ) );
430
+
431
  $instance['classes'] = sanitize_text_field( implode( ' ', $new_classes ) );
432
  }
433
 
449
  * @todo Refactor to enable above checks.
450
  *
451
  * @static
452
+ * @param array $params
453
  * @return mixed
454
  * @since 1.0
455
  */
491
  // Add custom and predefined classes.
492
  if ( ! empty( $widget_opt[ $widget_num ]['classes'] ) ) {
493
 
494
+ $custom_classes = explode( ' ', (string) $widget_opt[ $widget_num ]['classes'] );
495
  $defined_classes = WCSSC_Lib::get_settings( 'defined_classes' );
496
 
497
  // Order classes by predefined classes order and append the other (custom) classes.
530
  } // End if().
531
 
532
  // Add first, last, even, and odd classes.
533
+ if (
534
+ WCSSC_Lib::get_settings( 'show_number' )
535
+ || WCSSC_Lib::get_settings( 'show_location' )
536
+ || WCSSC_Lib::get_settings( 'show_evenodd' )
537
  ) {
538
 
539
  if ( ! self::$widget_counter ) {
551
  array_unshift( $classes, $class );
552
  }
553
 
554
+ if (
555
+ WCSSC_Lib::get_settings( 'show_location' )
556
+ && isset( $arr_registered_widgets[ $this_id ] )
557
+ && is_array( $arr_registered_widgets[ $this_id ] )
558
  ) {
559
  $widget_first = apply_filters( 'widget_css_classes_first', self::$core_classes['widget_first'] );
560
  $widget_last = apply_filters( 'widget_css_classes_last', self::$core_classes['widget_last'] );
569
  if ( WCSSC_Lib::get_settings( 'show_evenodd' ) ) {
570
  $widget_even = apply_filters( 'widget_css_classes_even', self::$core_classes['widget_even'] );
571
  $widget_odd = apply_filters( 'widget_css_classes_odd', self::$core_classes['widget_odd'] );
572
+ $class = ( ( self::$widget_counter[ $this_id ] % 2 ) ? $widget_odd : $widget_even );
573
  array_unshift( $classes, $class );
574
  }
575
 
687
  } else {
688
  $str = preg_replace(
689
  '/' . preg_quote( $attr, '/' ) . '/',
690
+ $attr . $content_extra . ' ',
691
  $str,
692
  1
693
  );
702
  *
703
  * // Disable complexity check because of third part plugin handling.
704
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
705
+ * @SuppressWarnings(PHPMD.NPathComplexity)
706
  *
707
  * @static
708
  * @since 1.5.0
713
  $widget_opt = null;
714
 
715
  $active_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) );
716
+ // If Widget Logic plugin is enabled, use it's callback.
717
  if ( in_array( 'widget-logic/widget_logic.php', $active_plugins, true ) ) {
718
  $widget_logic_options = get_option( 'widget_logic' );
719
  if ( ! empty( $widget_logic_options['widget_logic-options-filter'] ) ) {
720
  $widget_opt = get_option( $widget_obj['callback_wl_redirect'][0]->option_name );
 
 
721
  }
722
  }
723
+ // If Widget Context plugin is enabled, use it's callback.
724
  elseif ( in_array( 'widget-context/widget-context.php', $active_plugins, true ) ) {
725
  $callback = isset( $widget_obj['callback_original_wc'] ) ? $widget_obj['callback_original_wc'] : null;
726
  $callback = ! $callback && isset( $widget_obj['callback'] ) ? $widget_obj['callback'] : null;
729
  $widget_opt = get_option( $callback[0]->option_name );
730
  }
731
  }
732
+ // If Widget Output filter is enabled (f.e. by WP External Links plugin), don't use it's callback but the original callback.
733
  elseif ( isset( $widget_obj['_wo_original_callback'] ) ) {
734
  $widget_opt = get_option( $widget_obj['_wo_original_callback'][0]->option_name );
735
  }
736
 
737
+ // Default callback.
738
+ if ( null === $widget_opt ) {
739
+ // Check if WP Page Widget is in use.
740
  global $post;
741
  $id = ( isset( $post->ID ) ? get_the_ID() : null );
742
  if ( isset( $id ) && get_post_meta( $id, '_customize_sidebars' ) ) {
743
  $custom_sidebarcheck = get_post_meta( $id, '_customize_sidebars' );
744
  }
745
+
746
+ $option_name = '';
747
+ if ( isset( $widget_obj['callback'][0]->option_name ) ) {
748
+ $option_name = $widget_obj['callback'][0]->option_name;
749
+ } elseif ( isset( $widget_obj['original_callback'][0]->option_name ) ) {
750
+ // @since 1.5.3 Compatibility with dFactory Responsive Lightbox plugin.
751
+ $option_name = $widget_obj['original_callback'][0]->option_name;
752
+ }
753
+
754
  if ( isset( $custom_sidebarcheck[0] ) && ( 'yes' === $custom_sidebarcheck[0] ) ) {
755
+ $widget_opt = get_option( 'widget_' . $id . '_' . substr( $option_name, 7 ) );
756
+ }
757
+ elseif ( $option_name ) {
758
+ // Default.
759
+ $widget_opt = get_option( $option_name );
760
  }
761
  }
762
 
js/widget-css-classes.js CHANGED
@@ -3,10 +3,11 @@
3
  *
4
  * @author C.M. Kendrick <cindy@cleverness.org>
5
  * @package widget-css-classes
6
- * @version 1.5.2.1
 
7
  */
8
 
9
- jQuery( document ).ready( function ( $ ) {
10
 
11
  // Change opacity if predefined classes is disabled.
12
  $( 'input.wcssc_type' ).on( 'change', function() {
@@ -42,4 +43,4 @@ jQuery( document ).ready( function ( $ ) {
42
  });
43
  }
44
 
45
- } );
3
  *
4
  * @author C.M. Kendrick <cindy@cleverness.org>
5
  * @package widget-css-classes
6
+ * @version 1.5.3
7
+ * @preserve
8
  */
9
 
10
+ jQuery( function ( $ ) {
11
 
12
  // Change opacity if predefined classes is disabled.
13
  $( 'input.wcssc_type' ).on( 'change', function() {
43
  });
44
  }
45
 
46
+ } );
readme.txt CHANGED
@@ -7,9 +7,9 @@ Tags: widgets, classes, css, widget classes, widget css
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires at least: 3.3
10
- Tested up to: 4.9
11
  Requires PHP: 5.2.4
12
- Stable tag: 1.5.2.1
13
 
14
  Add custom classes and ids plus first, last, even, odd, and numbered classes to your widgets.
15
 
@@ -96,6 +96,10 @@ Please file a [bug report on GitHub](https://github.com/cleverness/widget-css-cl
96
 
97
  == Changelog ==
98
 
 
 
 
 
99
  = 1.5.2.1 =
100
  * **i18n:** Remove sv_SE translation from the plugin directory. It's 95% on translate.wordpress.org and accepted as the better version. [#23](https://github.com/cleverness/widget-css-classes/issues/23)
101
  * **Documentation:** Readme & Wiki. [#31](https://github.com/cleverness/widget-css-classes/issues/31)
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Requires at least: 3.3
10
+ Tested up to: 5.0
11
  Requires PHP: 5.2.4
12
+ Stable tag: 1.5.3
13
 
14
  Add custom classes and ids plus first, last, even, odd, and numbered classes to your widgets.
15
 
96
 
97
  == Changelog ==
98
 
99
+ = 1.5.3 =
100
+ * **Compatibility:** dFactory Responsive Lightbox widget option. #33
101
+ * Tested with WP 5.0.
102
+
103
  = 1.5.2.1 =
104
  * **i18n:** Remove sv_SE translation from the plugin directory. It's 95% on translate.wordpress.org and accepted as the better version. [#23](https://github.com/cleverness/widget-css-classes/issues/23)
105
  * **Documentation:** Readme & Wiki. [#31](https://github.com/cleverness/widget-css-classes/issues/31)
widget-css-classes.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  * Plugin Name: Widget CSS Classes
4
- * Version: 1.5.2.1
5
  * Description: Add custom, first, last, even, odd, and numbered classes to your widgets.
6
  * Author: C.M. Kendrick
7
  * Author URI: http://cleverness.org
@@ -27,7 +27,7 @@ function widget_css_classes_loader() {
27
 
28
  if ( is_admin() ) {
29
 
30
- if ( ! defined( 'WCSSC_PLUGIN_VERSION' ) ) define( 'WCSSC_PLUGIN_VERSION', '1.5.2.1' );
31
  if ( ! defined( 'WCSSC_FILE' ) ) define( 'WCSSC_FILE', __FILE__ );
32
  if ( ! defined( 'WCSSC_BASENAME' ) ) define( 'WCSSC_BASENAME', plugin_basename( __FILE__ ) );
33
  if ( ! defined( 'WCSSC_PLUGIN_DIR' ) ) define( 'WCSSC_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
@@ -61,13 +61,13 @@ function widget_css_classes_activation() {
61
  // Add admin notice.
62
  add_action( 'admin_notices', 'widget_css_classes_notice_wp_version' );
63
  // Deactivate.
64
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
65
  deactivate_plugins( plugin_basename( __FILE__ ) );
66
  return;
67
  }
68
 
69
  if ( ! defined( 'WCSSC_BASENAME' ) ) define( 'WCSSC_BASENAME', plugin_basename( __FILE__ ) );
70
- if ( ! defined( 'WCSSC_DB_VERSION' ) ) define( 'WCSSC_DB_VERSION', '1.5.2.1' );
71
  if ( ! defined( 'WCSSC_FILE' ) ) define( 'WCSSC_FILE', __FILE__ );
72
  include_once 'includes/widget-css-classes-library.class.php';
73
 
1
  <?php
2
  /**
3
  * Plugin Name: Widget CSS Classes
4
+ * Version: 1.5.3
5
  * Description: Add custom, first, last, even, odd, and numbered classes to your widgets.
6
  * Author: C.M. Kendrick
7
  * Author URI: http://cleverness.org
27
 
28
  if ( is_admin() ) {
29
 
30
+ if ( ! defined( 'WCSSC_PLUGIN_VERSION' ) ) define( 'WCSSC_PLUGIN_VERSION', '1.5.3' );
31
  if ( ! defined( 'WCSSC_FILE' ) ) define( 'WCSSC_FILE', __FILE__ );
32
  if ( ! defined( 'WCSSC_BASENAME' ) ) define( 'WCSSC_BASENAME', plugin_basename( __FILE__ ) );
33
  if ( ! defined( 'WCSSC_PLUGIN_DIR' ) ) define( 'WCSSC_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
61
  // Add admin notice.
62
  add_action( 'admin_notices', 'widget_css_classes_notice_wp_version' );
63
  // Deactivate.
64
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
65
  deactivate_plugins( plugin_basename( __FILE__ ) );
66
  return;
67
  }
68
 
69
  if ( ! defined( 'WCSSC_BASENAME' ) ) define( 'WCSSC_BASENAME', plugin_basename( __FILE__ ) );
70
+ if ( ! defined( 'WCSSC_DB_VERSION' ) ) define( 'WCSSC_DB_VERSION', '1.5.3' );
71
  if ( ! defined( 'WCSSC_FILE' ) ) define( 'WCSSC_FILE', __FILE__ );
72
  include_once 'includes/widget-css-classes-library.class.php';
73