Smart Custom Fields - Version 4.0.1

Version Description

Download this release

Release Info

Developer inc2734
Plugin Icon wp plugin Smart Custom Fields
Version 4.0.1
Comparing to
See all releases

Code changes from version 4.0.0 to 4.0.1

Files changed (56) hide show
  1. readme.txt +1 -1
  2. smart-custom-fields.php +2 -2
  3. trunk/classes/class.config.php +0 -26
  4. trunk/classes/class.scf.php +0 -804
  5. trunk/classes/controller/class.controller-base.php +0 -340
  6. trunk/classes/controller/class.editor.php +0 -61
  7. trunk/classes/controller/class.option.php +0 -75
  8. trunk/classes/controller/class.profile.php +0 -73
  9. trunk/classes/controller/class.settings.php +0 -411
  10. trunk/classes/controller/class.taxonomy.php +0 -87
  11. trunk/classes/fields/class.field-boolean.php +0 -168
  12. trunk/classes/fields/class.field-check.php +0 -146
  13. trunk/classes/fields/class.field-colorpicker.php +0 -134
  14. trunk/classes/fields/class.field-datepicker.php +0 -262
  15. trunk/classes/fields/class.field-file.php +0 -137
  16. trunk/classes/fields/class.field-image.php +0 -143
  17. trunk/classes/fields/class.field-message.php +0 -88
  18. trunk/classes/fields/class.field-radio.php +0 -145
  19. trunk/classes/fields/class.field-related-posts.php +0 -300
  20. trunk/classes/fields/class.field-related-terms.php +0 -296
  21. trunk/classes/fields/class.field-select.php +0 -120
  22. trunk/classes/fields/class.field-text.php +0 -95
  23. trunk/classes/fields/class.field-textarea.php +0 -108
  24. trunk/classes/fields/class.field-wysiwyg.php +0 -216
  25. trunk/classes/models/class.abstract-field-base.php +0 -250
  26. trunk/classes/models/class.ajax.php +0 -34
  27. trunk/classes/models/class.cache.php +0 -249
  28. trunk/classes/models/class.group.php +0 -145
  29. trunk/classes/models/class.meta.php +0 -561
  30. trunk/classes/models/class.options-page.php +0 -86
  31. trunk/classes/models/class.revisions.php +0 -205
  32. trunk/classes/models/class.setting.php +0 -155
  33. trunk/css/editor.css +0 -253
  34. trunk/css/option.css +0 -9
  35. trunk/css/profile.css +0 -25
  36. trunk/css/settings.css +0 -220
  37. trunk/css/taxonomy.css +0 -17
  38. trunk/css/wysiwyg.css +0 -14
  39. trunk/images/handle.png +0 -0
  40. trunk/js/editor-colorpicker.js +0 -27
  41. trunk/js/editor-datepicker.js +0 -27
  42. trunk/js/editor-relation-common.js +0 -76
  43. trunk/js/editor-relation-post-types.js +0 -94
  44. trunk/js/editor-relation-taxonomies.js +0 -93
  45. trunk/js/editor-wysiwyg.js +0 -164
  46. trunk/js/editor.js +0 -204
  47. trunk/js/settings-colorpicker.js +0 -25
  48. trunk/js/settings-datepicker.js +0 -25
  49. trunk/js/settings.js +0 -221
  50. trunk/languages/smart-custom-fields-ja.mo +0 -0
  51. trunk/languages/smart-custom-fields-ja.po +0 -379
  52. trunk/languages/smart-custom-fields-pt_BR.mo +0 -0
  53. trunk/languages/smart-custom-fields-pt_BR.po +0 -387
  54. trunk/languages/smart-custom-fields.pot +0 -216
  55. trunk/readme.txt +0 -322
  56. trunk/smart-custom-fields.php +0 -274
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.amazon.co.jp/registry/wishlist/39ANKRNSTNW40
4
  Tags: plugin, custom field, custom, field, meta, meta field, repeat, repeatable
5
  Requires at least: 3.9
6
  Tested up to: 4.9.6
7
- Stable tag: 4.0.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
4
  Tags: plugin, custom field, custom, field, meta, meta field, repeat, repeatable
5
  Requires at least: 3.9
6
  Tested up to: 4.9.6
7
+ Stable tag: 4.0.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
smart-custom-fields.php CHANGED
@@ -3,11 +3,11 @@
3
  * Plugin name: Smart Custom Fields
4
  * Plugin URI: https://github.com/inc2734/smart-custom-fields/
5
  * Description: Smart Custom Fields is a simple plugin that management custom fields.
6
- * Version: 3.1.7
7
  * Author: inc2734
8
  * Author URI: https://2inc.org
9
  * Created: October 9, 2014
10
- * Modified: June 04, 2018
11
  * Text Domain: smart-custom-fields
12
  * Domain Path: /languages
13
  * License: GPLv2 or later
3
  * Plugin name: Smart Custom Fields
4
  * Plugin URI: https://github.com/inc2734/smart-custom-fields/
5
  * Description: Smart Custom Fields is a simple plugin that management custom fields.
6
+ * Version: 4.0.1
7
  * Author: inc2734
8
  * Author URI: https://2inc.org
9
  * Created: October 9, 2014
10
+ * Modified: June 26, 2018
11
  * Text Domain: smart-custom-fields
12
  * Domain Path: /languages
13
  * License: GPLv2 or later
trunk/classes/class.config.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
- /**
3
- * SCF_Config
4
- * Version : 1.0.1
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class SCF_Config {
12
- /**
13
- * name
14
- */
15
- const NAME = 'smart-custom-fields';
16
-
17
- /**
18
- * prefix
19
- */
20
- const PREFIX = 'smart-cf-';
21
-
22
- /**
23
- * プロフィール画面用の擬似投稿タイプ
24
- */
25
- const PROFILE = 'smart-cf-profile';
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/class.scf.php DELETED
@@ -1,804 +0,0 @@
1
- <?php
2
- /**
3
- * SCF
4
- * Version : 2.0.1
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : JAnuary 16, 2017
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class SCF {
12
-
13
- /**
14
- * Array of the registered fields ( Smart_Custom_Fields_Field_Base )
15
- * @var array
16
- */
17
- protected static $fields = array();
18
-
19
- /**
20
- * Array of the custom options pages.
21
- * @var array
22
- */
23
- protected static $options_pages = array();
24
-
25
- /**
26
- * Getting all of the post meta data to feel good
27
- *
28
- * @param int $post_id
29
- * @return array
30
- */
31
- public static function gets( $post_id = null ) {
32
- if ( is_null( $post_id ) ) {
33
- $post_id = get_the_ID();
34
- }
35
- $post_id = self::get_real_post_id( $post_id );
36
-
37
- if ( empty( $post_id ) ) {
38
- return null;
39
- }
40
-
41
- // Don't output meta data that not save in the SCF settings page
42
- // Getting the settings data, judged to output meta data.
43
- return self::get_all_meta( get_post( $post_id ) );
44
- }
45
-
46
- /**
47
- * Getting the post meta data to feel good
48
- *
49
- * @param string $name group name or field name
50
- * @param int $post_id
51
- * @return mixed
52
- */
53
- public static function get( $name, $post_id = null ) {
54
- if ( is_null( $post_id ) ) {
55
- $post_id = get_the_ID();
56
- }
57
- $post_id = self::get_real_post_id( $post_id );
58
-
59
- if ( empty( $post_id ) ) {
60
- return;
61
- }
62
-
63
- // Don't output meta data that not save in the SCF settings page
64
- // Getting the settings data, judged to output meta data.
65
- return self::get_meta( get_post( $post_id ), $name );
66
- }
67
-
68
- /**
69
- * Getting the user meta data to feel good
70
- *
71
- * @param int $user_id
72
- * @param string $name group name or field name
73
- * @return mixed
74
- */
75
- public static function get_user_meta( $user_id, $name = null ) {
76
- if ( empty( $user_id ) ) {
77
- return;
78
- }
79
-
80
- // If $name is null, return the all meta data.
81
- if ( $name === null ) {
82
- return self::get_all_meta( get_userdata( $user_id ) );
83
- }
84
-
85
- // Don't output meta data that not save in the SCF settings page.
86
- // Getting the settings data, judged to output meta data.
87
- return self::get_meta( get_userdata( $user_id ), $name );
88
- }
89
-
90
- /**
91
- * Getting the term meta data to feel good
92
- *
93
- * @param int $term_id
94
- * @param string $taxonomy_name
95
- * @param string $name group name or field name
96
- * @return mixed
97
- */
98
- public static function get_term_meta( $term_id, $taxonomy_name, $name = null ) {
99
- if ( empty( $term_id ) || empty( $taxonomy_name ) ) {
100
- return;
101
- }
102
-
103
- // If $name is null, return the all meta data.
104
- if ( $name === null ) {
105
- return self::get_all_meta( get_term( $term_id, $taxonomy_name ) );
106
- }
107
-
108
- // Don't output meta data that not save in the SCF settings page
109
- // Getting the settings data, judged to output meta data.
110
- return self::get_meta( get_term( $term_id, $taxonomy_name ), $name );
111
- }
112
-
113
- /**
114
- * Getting the custom options page meta data to feel good
115
- *
116
- * @param string $menu_slug custom options page slug
117
- * @param string $name group name or field name
118
- * @return mixed
119
- */
120
- public static function get_option_meta( $menu_slug, $name = null ) {
121
- if ( empty( $menu_slug ) ) {
122
- return;
123
- }
124
-
125
- if ( !isset( self::$options_pages[$menu_slug] ) ) {
126
- return;
127
- }
128
-
129
- $Option = self::generate_option_object( $menu_slug );
130
-
131
- // If $name is null, return the all meta data.
132
- if ( $name === null ) {
133
- return self::get_all_meta( $Option );
134
- }
135
-
136
- // Don't output meta data that not save in the SCF settings page
137
- // Getting the settings data, judged to output meta data.
138
- return self::get_meta( $Option, $name );
139
- }
140
-
141
- /**
142
- * Getting any meta data to feel good
143
- *
144
- * @param WP_Post|WP_User|WP_Term|stdClass $object
145
- * @param string $name group name or field name
146
- * @return mixed
147
- */
148
- protected static function get_meta( $object, $name ) {
149
- $Cache = Smart_Custom_Fields_Cache::getInstance();
150
- if ( $Cache->get_meta( $object, $name ) ) {
151
- self::debug_cache_message( "use get cache. [name: {$name}]" );
152
- return $Cache->get_meta( $object, $name );
153
- } else {
154
- self::debug_cache_message( "dont use get cache... [name: {$name}]" );
155
- }
156
-
157
- $settings = self::get_settings( $object );
158
- foreach ( $settings as $Setting ) {
159
- // If $name matches the group name, returns fields in the group as array.
160
- $Group = $Setting->get_group( $name );
161
- if ( $Group ) {
162
- $values_by_group = self::get_values_by_group( $object, $Group );
163
- $Cache->save_meta( $object, $name, $values_by_group );
164
- return $values_by_group;
165
- }
166
-
167
- // If $name doesn't matche the group name, returns the field that matches.
168
- $groups = $Setting->get_groups();
169
- foreach ( $groups as $Group ) {
170
- $Field = $Group->get_field( $name );
171
- if ( $Field ) {
172
- $is_repeatable = $Group->is_repeatable();
173
- $value_by_field = self::get_value_by_field( $object, $Field, $is_repeatable );
174
- $Cache->save_meta( $object, $name, $value_by_field );
175
- return $value_by_field;
176
- }
177
- }
178
- }
179
- }
180
-
181
- /**
182
- * Getting all of any meta data to feel good
183
- *
184
- * @param WP_Post|WP_User|WP_Term|stdClass $object
185
- * @return mixed
186
- */
187
- protected static function get_all_meta( $object ) {
188
- $Cache = Smart_Custom_Fields_Cache::getInstance();
189
- $settings = self::get_settings( $object );
190
- $post_meta = array();
191
- foreach ( $settings as $Setting ) {
192
- $groups = $Setting->get_groups();
193
- foreach ( $groups as $Group ) {
194
- $is_repeatable = $Group->is_repeatable();
195
- $group_name = $Group->get_name();
196
- if ( $is_repeatable && $group_name ) {
197
- $values_by_group = self::get_values_by_group( $object, $Group );
198
- $Cache->save_meta( $object, $group_name, $values_by_group );
199
- $post_meta[$group_name] = $values_by_group;
200
- }
201
- else {
202
- $fields = $Group->get_fields();
203
- foreach ( $fields as $Field ) {
204
- $field_name = $Field->get( 'name' );
205
- $value_by_field = self::get_value_by_field( $object, $Field, $is_repeatable );
206
- $Cache->save_meta( $object, $field_name, $value_by_field );
207
- $post_meta[$field_name] = $value_by_field;
208
- }
209
- }
210
- }
211
- }
212
- return $post_meta;
213
- }
214
-
215
- /**
216
- * If in preview, return the preview post ID
217
- *
218
- * @param int $post_id
219
- * @return int
220
- */
221
- protected static function get_real_post_id( $post_id ) {
222
- if ( is_preview() ) {
223
- $preview_post = wp_get_post_autosave( $post_id );
224
- if ( isset( $preview_post->ID ) ) {
225
- $post_id = $preview_post->ID;
226
- }
227
- }
228
- return $post_id;
229
- }
230
-
231
- /**
232
- * Getting the meta data of the group
233
- * When group, Note the point that returned data are repetition
234
- *
235
- * @param WP_Post|WP_User|WP_Term|stdClass $object
236
- * @param Smart_Custom_Fields_Group $Group
237
- * @return mixed
238
- */
239
- protected static function get_values_by_group( $object, $Group ) {
240
- $is_repeatable = $Group->is_repeatable();
241
- $meta = array();
242
- $fields = $Group->get_fields();
243
- $value_by_fields = array();
244
- foreach ( $fields as $Field ) {
245
- if ( $Field->get_attribute( 'allow-multiple-data' ) ) {
246
- $meta[0][$Field->get( 'name' )] = array();
247
- } else {
248
- $meta[0][$Field->get( 'name' )] = '';
249
- }
250
- }
251
- $default_meta = $meta[0];
252
- foreach ( $fields as $Field ) {
253
- $value_by_field = self::get_value_by_field( $object, $Field, $is_repeatable );
254
- foreach ( $value_by_field as $i => $value ) {
255
- $meta[$i][$Field->get( 'name' )] = $value;
256
- }
257
- }
258
- foreach ( $meta as $i => $value ) {
259
- $meta[$i] = array_merge( $default_meta, $value );
260
- }
261
- return $meta;
262
- }
263
-
264
- /**
265
- * Getting the meta data of the field
266
- *
267
- * @param WP_Post|WP_User|WP_Term|stdClass $object
268
- * @param array $field
269
- * @param bool $is_repeatable Whether the group that this field belongs is repetition
270
- * @return mixed $post_meta
271
- */
272
- protected static function get_value_by_field( $object, $Field, $is_repeatable ) {
273
- $field_name = $Field->get( 'name' );
274
- if ( !$field_name ) {
275
- return;
276
- }
277
-
278
- $Meta = new Smart_Custom_Fields_Meta( $object );
279
-
280
- // In the case of multi-value items in the loop
281
- $field_type = $Field->get_attribute( 'type' );
282
- $repeat_multiple_data = self::get_repeat_multiple_data( $object );
283
- if ( is_array( $repeat_multiple_data ) && isset( $repeat_multiple_data[$field_name] ) ) {
284
- if ( $Meta->is_saved_the_key( $field_name ) ) {
285
- $_meta = $Meta->get( $field_name );
286
- } else {
287
- $_meta = self::get_default_value( $Field );
288
- }
289
- $start = 0;
290
- foreach ( $repeat_multiple_data[$field_name] as $repeat_multiple_key => $repeat_multiple_value ) {
291
- if ( $repeat_multiple_value === 0 ) {
292
- $value = array();
293
- } else {
294
- $value = array_slice( $_meta, $start, $repeat_multiple_value );
295
- $start += $repeat_multiple_value;
296
- }
297
- $value = apply_filters( SCF_Config::PREFIX . 'validate-get-value', $value, $field_type );
298
- $meta[$repeat_multiple_key] = $value;
299
- }
300
- }
301
- // Other than that
302
- else {
303
- $single = true;
304
- if ( $Field->get_attribute( 'allow-multiple-data' ) || $is_repeatable ) {
305
- $single = false;
306
- }
307
- if ( $Meta->is_saved_the_key( $field_name ) ) {
308
- $meta = $Meta->get( $field_name, $single );
309
- } else {
310
- $meta = self::get_default_value( $Field, $single );
311
- }
312
- $meta = apply_filters( SCF_Config::PREFIX . 'validate-get-value', $meta, $field_type );
313
- }
314
- return $meta;
315
- }
316
-
317
- /**
318
- * Return the default value
319
- *
320
- * @param Smart_Custom_Fields_Field_Base $Field
321
- * @param bool $single
322
- * @return array|strings
323
- */
324
- public static function get_default_value( $Field, $single = false ) {
325
- if ( !is_a( $Field, 'Smart_Custom_Fields_Field_Base' ) ) {
326
- if ( $single ) {
327
- return '';
328
- }
329
- return array();
330
- }
331
-
332
- $choices = $Field->get( 'choices' );
333
- $default = $Field->get( 'default' );
334
-
335
- if ( $Field->get_attribute( 'allow-multiple-data' ) ) {
336
- $choices = SCF::choices_eol_to_array( $choices );
337
- $default = SCF::choices_eol_to_array( $default );
338
- $default_sanitized = array();
339
-
340
- if ( SCF::is_assoc( $choices ) ) {
341
- $_choices = array_flip( $choices );
342
- } else {
343
- $_choices = $choices;
344
- }
345
- foreach ( $default as $key => $value ) {
346
- if ( in_array( $value, $_choices ) ) {
347
- if ( preg_match( '/^\d+$/', $value ) ) {
348
- $value = (int)$value;
349
- }
350
- $default_sanitized[$key] = $value;
351
- }
352
- }
353
- return $default_sanitized;
354
- }
355
-
356
- // Return string
357
- if ( $single ) {
358
- return $default;
359
- }
360
- // Return array
361
- else {
362
- if ( is_array( $default ) ) {
363
- return $default;
364
- }
365
- if ( $default === '' || $default === false || $default === null ) {
366
- return array();
367
- }
368
- return ( array ) $default;
369
- }
370
- }
371
-
372
- /**
373
- * Getting enabled custom field settings in the post type or the role or the term.
374
- *
375
- * @param WP_Post|WP_User|WP_Term|stdClass $object
376
- * @return array $settings
377
- */
378
- public static function get_settings_posts( $object ) {
379
- $Cache = Smart_Custom_Fields_Cache::getInstance();
380
- $settings_posts = array();
381
- if ( $Cache->get_settings_posts( $object ) !== null ) {
382
- self::debug_cache_message( "use settings posts cache." );
383
- return $Cache->get_settings_posts( $object );
384
- } else {
385
- self::debug_cache_message( "dont use settings posts cache..." );
386
- }
387
-
388
- $Meta = new Smart_Custom_Fields_Meta( $object );
389
- $types = $Meta->get_types( false );
390
-
391
- switch ( $Meta->get_meta_type() ) {
392
- case 'post' :
393
- $key = SCF_Config::PREFIX . 'condition';
394
- break;
395
- case 'user' :
396
- $key = SCF_Config::PREFIX . 'roles';
397
- break;
398
- case 'term' :
399
- $key = SCF_Config::PREFIX . 'taxonomies';
400
- break;
401
- case 'option' :
402
- $key = SCF_Config::PREFIX . 'options-pages';
403
- break;
404
- default :
405
- $key = '';
406
- }
407
-
408
- if ( ! empty( $key ) && ( ! empty( $types ) ) ) {
409
- $meta_query = array();
410
- foreach ( $types as $type ) {
411
- $meta_query[] = array(
412
- 'key' => $key,
413
- 'value' => sprintf( '"%s"', $type ),
414
- 'compare' => 'LIKE',
415
- );
416
- }
417
- if ( $meta_query ) {
418
- $meta_query[ 'relation' ] = 'OR';
419
- }
420
-
421
- $args = array(
422
- 'post_type' => SCF_Config::NAME,
423
- 'posts_per_page' => -1,
424
- 'order' => 'ASC',
425
- 'order_by' => 'menu_order',
426
- 'meta_query' => $meta_query,
427
- );
428
-
429
- $settings_posts = get_posts( $args );
430
- }
431
-
432
- $Cache = Smart_Custom_Fields_Cache::getInstance();
433
- $Cache->save_settings_posts( $object, $settings_posts );
434
- return $settings_posts;
435
- }
436
-
437
- /**
438
- * Getting array of the Setting object
439
- *
440
- * @param WP_Post|WP_User|WP_Term|Smart_Custom_Fields_Options_Mock $object
441
- * @return array $settings
442
- */
443
- public static function get_settings( $object ) {
444
- $Meta = new Smart_Custom_Fields_Meta( $object );
445
- $id = $Meta->get_id();
446
- $type = $Meta->get_type( false );
447
- $types = $Meta->get_types( false );
448
- $meta_type = $Meta->get_meta_type();
449
-
450
- // IF the post that has custom field settings according to post ID,
451
- // don't display because the post ID would change in preview.
452
- // So if in preview, re-getting post ID from original post (parent of the preview).
453
- if ( $meta_type === 'post' && $object->post_type === 'revision' ) {
454
- $object = get_post( $object->post_parent );
455
- }
456
-
457
- $settings = array();
458
-
459
- if ( ! empty( $types ) ) {
460
- $settings_posts = self::get_settings_posts( $object );
461
- if ( $meta_type === 'post' ) {
462
- $settings = self::get_settings_for_post( $object, $settings_posts );
463
- }
464
- elseif ( $meta_type === 'user' ) {
465
- $settings = self::get_settings_for_profile( $object, $settings_posts );
466
- }
467
- elseif ( $meta_type === 'term' ) {
468
- $settings = self::get_settings_for_term( $object, $settings_posts );
469
- }
470
- elseif ( $meta_type === 'option' ) {
471
- $settings = self::get_settings_for_option( $object, $settings_posts );
472
- }
473
- }
474
- $settings = apply_filters(
475
- SCF_Config::PREFIX . 'register-fields',
476
- $settings,
477
- $type,
478
- $id,
479
- $meta_type,
480
- $types
481
- );
482
- if ( !is_array( $settings ) ) {
483
- $settings = array();
484
- }
485
- return $settings;
486
- }
487
-
488
- /**
489
- * Getting the Setting object for post
490
- *
491
- * @param WP_Post $object
492
- * @param array $settings_posts
493
- * @return array
494
- */
495
- protected static function get_settings_for_post( $object, $settings_posts ) {
496
- $Cache = Smart_Custom_Fields_Cache::getInstance();
497
- $settings = array();
498
- foreach ( $settings_posts as $settings_post ) {
499
- if ( $Cache->get_settings( $settings_post->ID ) !== null ) {
500
- self::debug_cache_message( "use settings cache. [id: {$settings_post->ID}]" );
501
- $Setting = $Cache->get_settings( $settings_post->ID, $object );
502
- if ( $Setting ) {
503
- $settings[$settings_post->ID] = $Setting;
504
- }
505
- continue;
506
- }
507
- self::debug_cache_message( "dont use settings cache... [SCF ID: {$settings_post->ID}] [post_type: {$object->post_type}] [Post ID: {$object->ID}]" );
508
- $condition_post_ids_raw = get_post_meta(
509
- $settings_post->ID,
510
- SCF_Config::PREFIX . 'condition-post-ids',
511
- true
512
- );
513
- if ( $condition_post_ids_raw ) {
514
- $condition_post_ids_raw = explode( ',', $condition_post_ids_raw );
515
- foreach ( $condition_post_ids_raw as $condition_post_id ) {
516
- $condition_post_id = trim( $condition_post_id );
517
- $Setting = SCF::add_setting( $settings_post->ID, $settings_post->post_title );
518
- if ( $object->ID == $condition_post_id ) {
519
- $settings[$settings_post->ID] = $Setting;
520
- }
521
- $Post = get_post( $condition_post_id );
522
- if ( empty( $Post ) ) {
523
- $Post = self::generate_post_object( $condition_post_id );
524
- }
525
- $Cache->save_settings( $settings_post->ID, $Setting, $Post );
526
- }
527
- } else {
528
- $Setting = SCF::add_setting( $settings_post->ID, $settings_post->post_title );
529
- $settings[$settings_post->ID] = $Setting;
530
- $Cache->save_settings( $settings_post->ID, $Setting );
531
- }
532
- }
533
- return $settings;
534
- }
535
-
536
- /**
537
- * Getting the Setting object for user
538
- *
539
- * @param WP_User $object
540
- * @param array $settings_posts
541
- * @return array
542
- */
543
- protected static function get_settings_for_profile( $object, $settings_posts ) {
544
- $Cache = Smart_Custom_Fields_Cache::getInstance();
545
- $settings = array();
546
- foreach ( $settings_posts as $settings_post ) {
547
- if ( $Cache->get_settings( $settings_post->ID ) !== null ) {
548
- self::debug_cache_message( "use settings cache. [id: {$settings_post->ID}]" );
549
- $settings[] = $Cache->get_settings( $settings_post->ID );
550
- continue;
551
- }
552
- self::debug_cache_message( "dont use settings cache... [id: {$settings_post->ID}]" );
553
- $Setting = SCF::add_setting( $settings_post->ID, $settings_post->post_title );
554
- $settings[] = $Setting;
555
- $Cache->save_settings( $settings_post->ID, $Setting );
556
- }
557
- return $settings;
558
- }
559
-
560
- /**
561
- * Getting the Setting object for term
562
- *
563
- * @param WP_Term $object
564
- * @param array $settings_posts
565
- * @return array
566
- */
567
- protected static function get_settings_for_term( $object, $settings_posts ) {
568
- return self::get_settings_for_profile( $object, $settings_posts );
569
- }
570
-
571
- /**
572
- * Getting the Setting object for option
573
- *
574
- * @param WP_Term $object
575
- * @param array $settings_posts
576
- * @return array
577
- */
578
- protected static function get_settings_for_option( $object, $settings_posts ) {
579
- return self::get_settings_for_profile( $object, $settings_posts );
580
- }
581
-
582
- /**
583
- * Getting delimited identification data of the repeated multi-value items
584
- *
585
- * @param WP_Post|WP_User|WP_Term|stdClass $object
586
- * @return array
587
- */
588
- public static function get_repeat_multiple_data( $object ) {
589
- $Cache = Smart_Custom_Fields_Cache::getInstance();
590
- $repeat_multiple_data = array();
591
- if ( $Cache->get_repeat_multiple_data( $object ) ) {
592
- return $Cache->get_repeat_multiple_data( $object );
593
- }
594
-
595
- $Meta = new Smart_Custom_Fields_Meta( $object );
596
- $_repeat_multiple_data = $Meta->get( SCF_Config::PREFIX . 'repeat-multiple-data', true );
597
- if ( !empty( $_repeat_multiple_data ) ) {
598
- $repeat_multiple_data = $_repeat_multiple_data;
599
- }
600
-
601
- $Cache->save_repeat_multiple_data( $object, $repeat_multiple_data );
602
- return $repeat_multiple_data;
603
- }
604
-
605
- /**
606
- * Return true if null or empty value
607
- *
608
- * @param mixed $value
609
- * @return bool
610
- */
611
- public static function is_empty( &$value ) {
612
- if ( isset( $value ) ) {
613
- if ( is_null( $value ) || $value === '' ) {
614
- return true;
615
- }
616
- return false;
617
- }
618
- return true;
619
- }
620
-
621
- /**
622
- * Whether the associative array or not
623
- *
624
- * @see http://qiita.com/ka215/items/a14e53547e717d2a564f
625
- * @param array $data This argument should be expected an array
626
- * @param boolean $multidimensional True if a multidimensional array is inclusion into associative array, the default value is false
627
- * @return boolean
628
- */
629
- public static function is_assoc( $data, $multidimensional = false ) {
630
- if ( !is_array( $data ) || empty( $data ) ) {
631
- return false;
632
- }
633
- $has_array = false;
634
- foreach ( $data as $key => $value ) {
635
- if ( is_array( $value ) ) {
636
- $has_array = true;
637
- }
638
-
639
- if ( !is_int( $key ) ) {
640
- return true;
641
- }
642
- }
643
- return $multidimensional && $has_array ? true : false;
644
- }
645
-
646
- /**
647
- * Adding the available form field object
648
- *
649
- * @param Smart_Custom_Fields_Field_Base $instance
650
- */
651
- public static function add_form_field_instance( Smart_Custom_Fields_Field_Base $instance ) {
652
- $type = $instance->get_attribute( 'type' );
653
- if ( !empty( $type ) ) {
654
- self::$fields[$type] = $instance;
655
- }
656
- }
657
-
658
- /**
659
- * Getting the available form field object
660
- *
661
- * @param string $type type of the form field
662
- * @param Smart_Custom_Fields_Field_Base
663
- */
664
- public static function get_form_field_instance( $type ) {
665
- if ( !empty( self::$fields[$type] ) ) {
666
- return clone self::$fields[$type];
667
- }
668
- }
669
-
670
- /**
671
- * Getting all available form field object
672
- *
673
- * @return array
674
- */
675
- public static function get_form_field_instances() {
676
- $fields = array();
677
- foreach ( self::$fields as $type => $instance ) {
678
- $fields[$type] = self::get_form_field_instance( $type );
679
- }
680
- return $fields;
681
- }
682
-
683
- /**
684
- * Getting custom fields that saved custo field settings page
685
- * Note that not return only one even define multiple fields with the same name of the field name
686
- *
687
- * @param WP_Post|WP_User|WP_Term|stdClass $object
688
- * @param string $field_name
689
- * @return Smart_Custom_Fields_Field_Base|null
690
- */
691
- public static function get_field( $object, $field_name ) {
692
- $settings = self::get_settings( $object );
693
- foreach ( $settings as $Setting ) {
694
- $fields = $Setting->get_fields();
695
- if ( !empty( $fields[$field_name] ) ) {
696
- return $fields[$field_name];
697
- }
698
- }
699
- }
700
-
701
- /**
702
- * Convert to array from newline delimiter $choices
703
- *
704
- * @param string $choices
705
- * @return array
706
- */
707
- public static function choices_eol_to_array( $choices ) {
708
- if ( !is_array( $choices ) ) {
709
- if ( $choices === '' || $choices === false || $choices === null ) {
710
- return array();
711
- }
712
- $_choices = str_replace( array( "\r\n", "\r", "\n" ), "\n", $choices );
713
- $_choices = explode( "\n", $_choices );
714
- $choices = array();
715
- foreach ( $_choices as $_choice ) {
716
- $_choice = array_map( 'trim', explode( '=>', $_choice ) );
717
- if ( count( $_choice ) === 2 ) {
718
- $choices[$_choice[0]] = $_choice[1];
719
- } else {
720
- $choices = array_merge( $choices, $_choice );
721
- }
722
- }
723
- }
724
- return $choices;
725
- }
726
-
727
- /**
728
- * Return generated Setting object
729
- *
730
- * @param string $id
731
- * @param string $title
732
- * @return Smart_Custom_Fields_Setting
733
- */
734
- public static function add_setting( $id, $title ) {
735
- return new Smart_Custom_Fields_Setting( $id, $title );
736
- }
737
-
738
- /**
739
- * Adding custom options page
740
- *
741
- * @see https://developer.wordpress.org/reference/functions/add_menu_page/
742
- * @param string $page_title
743
- * @param string $menu_title
744
- * @param string $capability
745
- * @param string $menu_slug
746
- * @param string $icon_url
747
- * @param int $position
748
- * @return $menu_slug
749
- */
750
- public static function add_options_page( $page_title, $menu_title, $capability, $menu_slug, $icon_url = '', $position = null ) {
751
- self::$options_pages[$menu_slug] = $menu_title;
752
- new Smart_Custom_Fields_Options_Page( $page_title, $menu_title, $capability, $menu_slug, $icon_url, $position );
753
- return $menu_slug;
754
- }
755
-
756
- /**
757
- * Return array of custom options pages
758
- *
759
- * @return array
760
- */
761
- public static function get_options_pages() {
762
- return self::$options_pages;
763
- }
764
-
765
- /**
766
- * Generate WP_Post object
767
- *
768
- * @param int $post_id
769
- * @param string $post_type
770
- * @return WP_Post
771
- */
772
- public static function generate_post_object( $post_id, $post_type = null ) {
773
- $Post = new stdClass();
774
- $Post->ID = $post_id;
775
- $Post->post_type = $post_type;
776
- return new WP_Post( $Post );
777
- }
778
-
779
- /**
780
- * Generate option object
781
- *
782
- * @param string $menu_slug
783
- * @return stdClass
784
- */
785
- public static function generate_option_object( $menu_slug ) {
786
- $options_pages = SCF::get_options_pages();
787
- if ( !isset( $options_pages[$menu_slug] ) ) {
788
- return;
789
- }
790
- $Option = new stdClass();
791
- $Option->menu_slug = $menu_slug;
792
- $Option->menu_title = $options_pages[$menu_slug];
793
- return $Option;
794
- }
795
-
796
- /**
797
- * Print cache usage
798
- */
799
- protected static function debug_cache_message( $message ) {
800
- if ( defined( 'SCF_DEBUG_CACHE' ) && SCF_DEBUG_CACHE === true ) {
801
- echo $message . '<br />';
802
- }
803
- }
804
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.controller-base.php DELETED
@@ -1,340 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Base
4
- * Version : 1.4.0
5
- * Author : inc2734
6
- * Created : April 27, 2015
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Base {
12
-
13
- /**
14
- * Array of the form field objects
15
- * @var array
16
- */
17
- protected $fields = array();
18
-
19
- /**
20
- * __construct
21
- */
22
- public function __construct() {
23
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
24
- }
25
-
26
- /**
27
- * Loading resources for edit page.
28
- *
29
- * @param string $hook
30
- */
31
- public function admin_enqueue_scripts( $hook ) {
32
- do_action( SCF_Config::PREFIX . 'before-editor-enqueue-scripts' );
33
- wp_enqueue_style(
34
- SCF_Config::PREFIX . 'editor',
35
- plugins_url( SCF_Config::NAME ) . '/css/editor.css'
36
- );
37
- wp_enqueue_media();
38
- wp_enqueue_script(
39
- SCF_Config::PREFIX . 'editor',
40
- plugins_url( SCF_Config::NAME ) . '/js/editor.js',
41
- array( 'jquery' ),
42
- null,
43
- true
44
- );
45
- wp_localize_script( SCF_Config::PREFIX . 'editor', 'smart_cf_uploader', array(
46
- 'image_uploader_title' => esc_html__( 'Image setting', 'smart-custom-fields' ),
47
- 'file_uploader_title' => esc_html__( 'File setting', 'smart-custom-fields' ),
48
- ) );
49
- do_action( SCF_Config::PREFIX . 'after-editor-enqueue-scripts' );
50
-
51
- if ( !user_can_richedit() ) {
52
- wp_enqueue_script(
53
- 'tinymce',
54
- includes_url( '/js/tinymce/tinymce.min.js' ),
55
- array(),
56
- null,
57
- true
58
- );
59
- }
60
- }
61
-
62
- /**
63
- * Display custom fields in edit page.
64
- *
65
- * @param WP_Post|WP_User|WP_Term|stdClass $object
66
- * @param array $callback_args custom field setting information
67
- */
68
- public function display_meta_box( $object, $callback_args ) {
69
- $groups = $callback_args['args'];
70
- $tables = $this->get_tables( $object, $groups );
71
-
72
- printf( '<div class="%s">', esc_attr( SCF_Config::PREFIX . 'meta-box' ) );
73
- $index = 0;
74
- foreach ( $tables as $group_key => $Group ) {
75
- $is_repeatable = $Group->is_repeatable();
76
- if ( $is_repeatable && $index === 0 ) {
77
- printf(
78
- '<div class="%s">',
79
- esc_attr( SCF_Config::PREFIX . 'meta-box-repeat-tables' )
80
- );
81
- $this->display_tr( $object, $is_repeatable, $Group->get_fields() );
82
- }
83
- $this->display_tr( $object, $is_repeatable, $Group->get_fields(), $index );
84
-
85
- // If in the loop, count up the index.
86
- // If exit the loop, reset the count.
87
- if ( $is_repeatable &&
88
- isset( $tables[$group_key + 1 ] ) &&
89
- $tables[$group_key + 1 ]->get_name() === $Group->get_name() ) {
90
- $index ++;
91
- } else {
92
- $index = 0;
93
- }
94
- if ( $is_repeatable && $index === 0 ) {
95
- printf( '</div>' );
96
- }
97
- }
98
- printf( '</div>' );
99
- wp_nonce_field( SCF_Config::NAME . '-fields', SCF_Config::PREFIX . 'fields-nonce' );
100
- }
101
-
102
- /**
103
- * Saving posted data
104
- *
105
- * @param array $data
106
- * @param WP_Post|WP_User|WP_Term|stdClass $object
107
- */
108
- protected function save( $data, $object ) {
109
- check_admin_referer(
110
- SCF_Config::NAME . '-fields',
111
- SCF_Config::PREFIX . 'fields-nonce'
112
- );
113
-
114
- $Meta = new Smart_Custom_Fields_Meta( $object );
115
- $Meta->save( $_POST );
116
- }
117
-
118
- /**
119
- * Generating array for displaying the custom fields
120
- *
121
- * @param WP_Post|WP_User|WP_Term|stdClass $object
122
- * @param array $groups Settings from custom field settings page
123
- * @return array $tables Array for displaying a table for custom fields
124
- */
125
- protected function get_tables( $object, $groups ) {
126
- $Meta = new Smart_Custom_Fields_Meta( $object );
127
-
128
- $repeat_multiple_data = SCF::get_repeat_multiple_data( $object );
129
- $tables = array();
130
- foreach ( $groups as $Group ) {
131
- // If in the loop, Added groupgs by the amount of the loop.
132
- // Added only one if setting is repetition but not loop (Ex, new registration)
133
- if ( $Group->is_repeatable() === true ) {
134
- $loop_count = 1;
135
- $fields = $Group->get_fields();
136
- foreach ( $fields as $Field ) {
137
- $field_name = $Field->get( 'name' );
138
- $meta = $Meta->get( $field_name );
139
- if ( is_array( $meta ) ) {
140
- $meta_count = count( $meta );
141
- // When the same name of the custom field is a multiple (checbox or loop)
142
- if ( $meta_count > 1 ) {
143
- // checkbox
144
- if ( $Field->get_attribute( 'allow-multiple-data' ) ) {
145
- if ( is_array( $repeat_multiple_data ) && isset( $repeat_multiple_data[$field_name] ) ) {
146
- $repeat_multiple_data_count = count( $repeat_multiple_data[$field_name] );
147
- if ( $loop_count < $repeat_multiple_data_count ) {
148
- $loop_count = $repeat_multiple_data_count;
149
- }
150
- }
151
- }
152
- // other than checkbox
153
- else {
154
- if ( $loop_count < $meta_count ) {
155
- $loop_count = $meta_count;
156
- }
157
- }
158
- }
159
- }
160
- }
161
- if ( $loop_count >= 1 ) {
162
- for ( $i = $loop_count; $i > 0; $i -- ) {
163
- $tables[] = $Group;
164
- }
165
- continue;
166
- }
167
- }
168
- $tables[] = $Group;
169
- }
170
- return $tables;
171
- }
172
-
173
- /**
174
- * Getting the multi-value field meta data.
175
- *
176
- * @param WP_Post|WP_User|WP_Term|stdClass $object
177
- * @param Smart_Custom_Fields_Field_Base $Field
178
- * @param int $index
179
- * @return array
180
- */
181
- public function get_multiple_data_field_value( $object, $Field, $index ) {
182
- $Meta = new Smart_Custom_Fields_Meta( $object );
183
- $field_name = $Field->get( 'name' );
184
-
185
- if ( is_null( $index ) ) {
186
- return SCF::get_default_value( $Field );
187
- }
188
-
189
- if ( !$Meta->is_saved_the_key( $field_name ) ) {
190
- return SCF::get_default_value( $Field );
191
- }
192
-
193
- $value = $Meta->get( $field_name );
194
-
195
- // in the loop
196
- $repeat_multiple_data = SCF::get_repeat_multiple_data( $object );
197
- if ( is_array( $repeat_multiple_data ) && isset( $repeat_multiple_data[$field_name] ) ) {
198
- $now_num = 0;
199
- if ( is_array( $repeat_multiple_data[$field_name] ) && isset( $repeat_multiple_data[$field_name][$index] ) ) {
200
- $now_num = $repeat_multiple_data[$field_name][$index];
201
- }
202
-
203
- // The index is starting point to refer to the total of the previous number than me ($index)
204
- $_temp = array_slice( $repeat_multiple_data[$field_name], 0, $index );
205
- $sum = array_sum( $_temp );
206
- $start = $sum;
207
-
208
- if ( $now_num ) {
209
- $value = array_slice( $value, $start, $now_num );
210
- } else {
211
- $value = array();
212
- }
213
- }
214
- return $value;
215
- }
216
-
217
- /**
218
- * Getting the non multi-value field meta data.
219
- *
220
- * @param WP_Post|WP_User|WP_Term|stdClass $object
221
- * @param Smart_Custom_Fields_Field_Base $Field
222
- * @param int $index
223
- * @return string
224
- */
225
- public function get_single_data_field_value( $object, $Field, $index ) {
226
- $Meta = new Smart_Custom_Fields_Meta( $object );
227
- $field_name = $Field->get( 'name' );
228
-
229
- if ( is_null( $index ) ) {
230
- return SCF::get_default_value( $Field, true );
231
- }
232
-
233
- if ( $Meta->is_saved_the_key( $field_name ) ) {
234
- $value = $Meta->get( $field_name );
235
- if ( isset( $value[$index] ) ) {
236
- return $value[$index];
237
- }
238
- return '';
239
- }
240
- return SCF::get_default_value( $Field, true );
241
- }
242
-
243
- /**
244
- * Displaying tr element for table of custom fields
245
- *
246
- * @param WP_Post|WP_User|WP_Term|stdClass $object
247
- * @param bool $is_repeat
248
- * @param array $fields
249
- * @param int, null $index
250
- */
251
- protected function display_tr( $object, $is_repeat, $fields, $index = null ) {
252
- $Meta = new Smart_Custom_Fields_Meta( $object );
253
-
254
- $btn_repeat = '';
255
- if ( $is_repeat ) {
256
- $btn_repeat = sprintf(
257
- '<span class="%s"></span>',
258
- esc_attr( SCF_Config::PREFIX . 'icon-handle dashicons dashicons-menu' )
259
- );
260
- $btn_repeat .= '<span class="btn-add-repeat-group dashicons dashicons-plus-alt '.SCF_Config::PREFIX.'repeat-btn"></span>';
261
- $btn_repeat .= ' <span class="btn-remove-repeat-group dashicons dashicons-dismiss '.SCF_Config::PREFIX.'repeat-btn"></span>';
262
- }
263
-
264
- $style = '';
265
- if ( is_null( $index ) ) {
266
- $style = 'style="display: none;"';
267
- }
268
-
269
- printf(
270
- '<div class="%s" %s>%s',
271
- esc_attr( SCF_Config::PREFIX . 'meta-box-table' ),
272
- $style,
273
- $btn_repeat
274
- );
275
-
276
- foreach ( $fields as $Field ) {
277
- $display_name = $Field->get_attribute( 'display-name' );
278
- $field_type = $Field->get_attribute( 'type' ); // gets the field type for use in aditional CSS classes
279
- $layout = $Field->get_attribute( 'layout' ); // get layout type
280
- $field_name = $Field->get( 'name' );
281
- $field_label = $Field->get( 'label' );
282
- if ( !$field_label ) {
283
- $field_label = $field_name;
284
- }
285
-
286
- // When multi-value field
287
- if ( $Field->get_attribute( 'allow-multiple-data' ) ) {
288
- $value = $this->get_multiple_data_field_value( $object, $Field, $index );
289
- }
290
- // When non multi-value field
291
- else {
292
- $value = $this->get_single_data_field_value( $object, $Field, $index );
293
- }
294
-
295
- $instruction = $Field->get( 'instruction' );
296
- if ( !empty( $instruction ) ) {
297
- if ( apply_filters( SCF_Config::PREFIX . 'instruction-apply-html', false ) === true ) {
298
- $instruction_html = $instruction;
299
- } else {
300
- $instruction_html = esc_html( $instruction );
301
- }
302
- $instruction = sprintf(
303
- '<div class="instruction">%s</div>',
304
- $instruction_html
305
- );
306
- }
307
-
308
- $notes = $Field->get( 'notes' );
309
- if ( !empty( $notes ) ) {
310
- $notes = sprintf(
311
- '<p class="description">%s</p>',
312
- esc_html( $notes )
313
- );
314
- }
315
-
316
- $form_field = $Field->get_field( $index, $value );
317
-
318
- // if the layout type is full-width, it hides the "Table Header" (th)
319
- $table_th = $layout != 'full-width' ? '<th>'.esc_html( $field_label ).'</th>' : '';
320
- printf(
321
- '<table class="%1$sfield-type-%6$s %1$slayout-type-%7$s"><tr>
322
- %2$s
323
- <td>
324
- %3$s
325
- %4$s
326
- %5$s
327
- </td>
328
- </tr></table>',
329
- SCF_Config::PREFIX,
330
- $table_th,
331
- $instruction,
332
- $form_field,
333
- $notes,
334
- $field_type,
335
- $layout
336
- );
337
- }
338
- echo '</div>';
339
- }
340
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.editor.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Editor
4
- * Version : 1.1.0
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : April 28, 2015
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Editor extends Smart_Custom_Fields_Controller_Base {
12
-
13
- /**
14
- * __construct
15
- */
16
- public function __construct() {
17
- parent::__construct();
18
- add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 10, 2 );
19
- add_action( 'save_post' , array( $this, 'save_post' ) );
20
- }
21
-
22
- /**
23
- * Displaying custom fields in post edit page
24
- *
25
- * @param string $post_type
26
- * @param WP_Post $post
27
- */
28
- public function add_meta_boxes( $post_type, $post ) {
29
- $settings = SCF::get_settings( $post );
30
- foreach ( $settings as $Setting ) {
31
- add_meta_box(
32
- SCF_Config::PREFIX . 'custom-field-' . $Setting->get_id(),
33
- $Setting->get_title(),
34
- array( $this, 'display_meta_box' ),
35
- $post_type,
36
- 'normal',
37
- 'default',
38
- $Setting->get_groups()
39
- );
40
- }
41
- }
42
-
43
- /**
44
- * Saving meta data from custom fields in post edit page
45
- *
46
- * @param int $post_id
47
- */
48
- public function save_post( $post_id ) {
49
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
50
- return;
51
- }
52
- if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ){
53
- return;
54
- }
55
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
56
- return;
57
- }
58
-
59
- $this->save( $_POST, get_post( $post_id ) );
60
- }
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.option.php DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Option
4
- * Version : 1.0.0
5
- * Author : inc2734
6
- * Created : May 29, 2014
7
- * Modified :
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Option extends Smart_Custom_Fields_Controller_Base {
12
-
13
- /**
14
- * __construct
15
- */
16
- public function __construct() {
17
- parent::__construct();
18
- add_action( SCF_Config::PREFIX . 'custom-options-page', array( $this, 'save_option' ) );
19
- add_action( SCF_Config::PREFIX . 'custom-options-page', array( $this, 'custom_options_page' ) );
20
- }
21
-
22
- /**
23
- * Loading resources for term edit page
24
- *
25
- * @param string $hook
26
- */
27
- public function admin_enqueue_scripts( $hook ) {
28
- parent::admin_enqueue_scripts( $hook );
29
- wp_enqueue_style(
30
- SCF_Config::PREFIX . 'option',
31
- plugins_url( SCF_Config::NAME ) . '/css/option.css'
32
- );
33
- }
34
-
35
- /**
36
- * Displaying custom fields in custom options page
37
- *
38
- * @param stdClass $Option
39
- */
40
- public function custom_options_page( $Option ) {
41
- $settings = SCF::get_settings( $Option );
42
- if ( !$settings ) {
43
- return;
44
- }
45
- ?>
46
- <form method="post" action="">
47
- <?php foreach ( $settings as $Setting ) : ?>
48
- <?php $callback_args['args'] = $Setting->get_groups(); ?>
49
- <table class="form-table">
50
- <tr>
51
- <th scope="row"><?php echo esc_html( $Setting->get_title() ); ?></th>
52
- <td><?php $this->display_meta_box( $Option, $callback_args ); ?></td>
53
- </tr>
54
- </table>
55
- <?php endforeach; ?>
56
- <p class="submit">
57
- <input type="submit" name="submit" id="submit" class="button button-primary" value="<?php esc_attr_e( 'Save settings', 'smart-custom-fields' ); ?>">
58
- </p>
59
- </form>
60
- <?php
61
- }
62
-
63
- /**
64
- * Saving meta data from custom fields in custom options page
65
- *
66
- * @param stdClass $Option
67
- */
68
- public function save_option( $Option ) {
69
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
70
- return;
71
- }
72
-
73
- $this->save( $_POST, $Option );
74
- }
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.profile.php DELETED
@@ -1,73 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Profile
4
- * Version : 1.0.1
5
- * Author : inc2734
6
- * Created : March 16, 2015
7
- * Modified : April 26, 2015
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Profile extends Smart_Custom_Fields_Controller_Base {
12
-
13
- /**
14
- * __construct
15
- */
16
- public function __construct() {
17
- parent::__construct();
18
- add_action( 'show_user_profile', array( $this, 'user_profile' ) );
19
- add_action( 'edit_user_profile', array( $this, 'user_profile' ) );
20
- add_action( 'personal_options_update', array( $this, 'update' ) );
21
- add_action( 'edit_user_profile_update', array( $this, 'update' ) );
22
- }
23
-
24
- /**
25
- * Loading resources for profile edit page
26
- *
27
- * @param string $hook
28
- */
29
- public function admin_enqueue_scripts( $hook ) {
30
- parent::admin_enqueue_scripts( $hook );
31
- wp_enqueue_style(
32
- SCF_Config::PREFIX . 'profile',
33
- plugins_url( SCF_Config::NAME ) . '/css/profile.css'
34
- );
35
- }
36
-
37
- /**
38
- * Displaying custom fields
39
- *
40
- * @param WP_User $user
41
- */
42
- public function user_profile( $user ) {
43
- printf( '<h3>%s</h3>', esc_html__( 'Custom Fields', 'smart-custom-fields' ) );
44
- $settings = SCF::get_settings( $user );
45
- foreach ( $settings as $Setting ) {
46
- $callback_args['args'] = $Setting->get_groups();
47
- ?>
48
- <table class="form-table">
49
- <tr>
50
- <th scope="row"><?php echo esc_html( $Setting->get_title() ); ?></th>
51
- <td><?php $this->display_meta_box( $user, $callback_args ); ?></td>
52
- </tr>
53
- </table>
54
- <?php
55
- }
56
- }
57
-
58
- /**
59
- * Saving meta data from custom fields in profile edit page.
60
- *
61
- * @param int $user_id
62
- */
63
- public function update( $user_id ) {
64
- if ( !current_user_can( 'edit_user', $user_id ) ) {
65
- return;
66
- }
67
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
68
- return;
69
- }
70
-
71
- $this->save( $_POST, get_userdata( $user_id ) );
72
- }
73
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.settings.php DELETED
@@ -1,411 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Settings
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Settings {
12
-
13
- /**
14
- * Selectbox choices of the field selection
15
- * @var array
16
- */
17
- private $optgroups = array();
18
-
19
- /**
20
- * __construct
21
- */
22
- public function __construct() {
23
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
24
- add_action( 'save_post', array( $this, 'save_post' ) );
25
- add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
26
-
27
- $this->optgroups = array(
28
- 'basic-fields' => array(
29
- 'label' => esc_attr__( 'Basic fields', 'smart-custom-fields' ),
30
- 'options' => array(),
31
- ),
32
- 'select-fields' => array(
33
- 'label' => esc_attr__( 'Select fields', 'smart-custom-fields' ),
34
- 'options' => array(),
35
- ),
36
- 'content-fields' => array(
37
- 'label' => esc_attr__( 'Content fields', 'smart-custom-fields' ),
38
- 'options' => array(),
39
- ),
40
- 'other-fields' => array(
41
- 'label' => esc_attr__( 'Other fields', 'smart-custom-fields' ),
42
- 'options' => array(),
43
- ),
44
- );
45
- }
46
-
47
- /**
48
- * Loading resources
49
- */
50
- public function admin_enqueue_scripts() {
51
- do_action( SCF_Config::PREFIX . 'before-settings-enqueue-scripts' );
52
-
53
- wp_enqueue_style(
54
- SCF_Config::PREFIX . 'settings',
55
- plugins_url( SCF_Config::NAME ) . '/css/settings.css',
56
- array(),
57
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../css/settings.css' ) )
58
- );
59
-
60
- wp_enqueue_script(
61
- SCF_Config::PREFIX . 'settings',
62
- plugins_url( SCF_Config::NAME ) . '/js/settings.js',
63
- array( 'jquery' ),
64
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings.js' ) ),
65
- true
66
- );
67
-
68
- wp_localize_script( SCF_Config::PREFIX . 'settings', 'smart_cf_settings', array(
69
- 'duplicate_alert' => esc_html__( 'Same name exists!', 'smart-custom-fields' ),
70
- ) );
71
-
72
- wp_enqueue_script( 'jquery-ui-sortable' );
73
- do_action( SCF_Config::PREFIX . 'after-settings-enqueue-scripts' );
74
- }
75
-
76
- /**
77
- * Adding meta boxes
78
- */
79
- public function add_meta_boxes() {
80
- add_meta_box(
81
- SCF_Config::PREFIX . 'meta-box',
82
- __( 'Custom Fields', 'smart-custom-fields' ),
83
- array( $this, 'display_meta_box' ),
84
- SCF_Config::NAME
85
- );
86
- add_meta_box(
87
- SCF_Config::PREFIX . 'meta-box-condition-post',
88
- __( 'Display conditions ( Post )', 'smart-custom-fields' ),
89
- array( $this, 'display_meta_box_condition_post' ),
90
- SCF_Config::NAME,
91
- 'side'
92
- );
93
- add_meta_box(
94
- SCF_Config::PREFIX . 'meta-box-condition-profile',
95
- __( 'Display conditions ( Profile )', 'smart-custom-fields' ),
96
- array( $this, 'display_meta_box_condition_profile' ),
97
- SCF_Config::NAME,
98
- 'side'
99
- );
100
- add_meta_box(
101
- SCF_Config::PREFIX . 'meta-box-condition-taxonomy',
102
- __( 'Display conditions ( Taxonomy )', 'smart-custom-fields' ),
103
- array( $this, 'display_meta_box_condition_taxonomy' ),
104
- SCF_Config::NAME,
105
- 'side'
106
- );
107
- add_meta_box(
108
- SCF_Config::PREFIX . 'meta-box-condition-options-page',
109
- __( 'Display conditions ( Options page )', 'smart-custom-fields' ),
110
- array( $this, 'display_meta_box_condition_options_page' ),
111
- SCF_Config::NAME,
112
- 'side'
113
- );
114
- }
115
-
116
- /**
117
- * Displaying "hide" if $key isn't empty
118
- *
119
- * @param string $key
120
- */
121
- private function add_hide_class( $key ) {
122
- if ( !$key ) {
123
- echo 'hide';
124
- }
125
- }
126
-
127
- /**
128
- * Displaying custom fields
129
- */
130
- public function display_meta_box() {
131
- $Setting = SCF::add_setting( get_the_ID(), get_the_title() );
132
- $Setting->add_group_unshift();
133
- $groups = $Setting->get_groups();
134
- ?>
135
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'fields-wrapper' ); ?>">
136
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'groups' ); ?>">
137
- <?php foreach ( $groups as $group_key => $Group ) : ?>
138
- <?php
139
- $fields = $Group->get_fields();
140
- array_unshift( $fields, SCF::get_form_field_instance( 'text' ) );
141
- ?>
142
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'group' ); ?> <?php $this->add_hide_class( $group_key ); ?>">
143
- <div class="btn-remove-group"><span class="dashicons dashicons-no-alt"></span></div>
144
- <?php $Group->display_options( $group_key ); ?>
145
-
146
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'fields' ); ?>">
147
- <?php foreach ( $fields as $field_key => $Field ) : ?>
148
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'field' ); ?> <?php $this->add_hide_class( $field_key ); ?>">
149
- <?php
150
- $field_name = $Field->get( 'name' );
151
- $field_label = $Field->get( 'label' );
152
- if ( !$field_label ) {
153
- $field_label = $field_name;
154
- if ( !$field_label ) {
155
- $field_label = "&nbsp;";
156
- }
157
- }
158
- ?>
159
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'icon-handle' ); ?>"></div>
160
- <b class="btn-remove-field"><span class="dashicons dashicons-no-alt"></span></b>
161
- <div class="field-label">
162
- <?php echo esc_html( $field_label ); ?>
163
- <?php if ( $field_name ) : ?>
164
- <small>[ <?php echo esc_html( $field_name ); ?> ]</small>
165
- <?php endif; ?>
166
- </div>
167
- <table class="<?php $this->add_hide_class( !$Field->get( 'name' ) ); ?>">
168
- <tr>
169
- <th><?php esc_html_e( 'Type', 'smart-custom-fields' ); ?><span class="<?php echo esc_attr( SCF_Config::PREFIX . 'require' ); ?>">*</span></th>
170
- <td>
171
- <select
172
- name="<?php echo esc_attr( $Field->get_field_name_in_setting( $group_key, $field_key, 'type' ) ); ?>"
173
- class="<?php echo esc_attr( SCF_Config::PREFIX . 'field-select' ); ?>" />
174
- <?php
175
- foreach ( $this->optgroups as $optgroup_name => $optgroup_values ) {
176
- $optgroup_fields = array();
177
- $optgroup_values['options'] = apply_filters(
178
- SCF_Config::PREFIX . 'field-select-' . $optgroup_name,
179
- $optgroup_values['options']
180
- );
181
- foreach ( $optgroup_values['options'] as $option_key => $option ) {
182
- $optgroup_fields[] = sprintf(
183
- '<option value="%s" %s>%s</option>',
184
- esc_attr( $option_key ),
185
- selected( $Field->get_attribute( 'type' ), $option_key, false ),
186
- esc_html( $option )
187
- );
188
- }
189
- printf(
190
- '<optgroup label="%s">%s</optgroup>',
191
- $optgroup_values['label'],
192
- implode( '', $optgroup_fields )
193
- );
194
- }
195
- ?>
196
- </select>
197
- </td>
198
- </tr>
199
- <?php $Field->display_options( $group_key, $field_key ); ?>
200
- </table>
201
- </div>
202
- <?php endforeach; ?>
203
- </div>
204
- <div class="button btn-add-field <?php $this->add_hide_class( $Group->is_repeatable() ); ?>"><?php esc_html_e( 'Add Sub field', 'smart-custom-fields' ); ?></div>
205
- </div>
206
- <?php endforeach; ?>
207
- </div>
208
- <div class="button btn-add-group"><?php esc_html_e( 'Add Field', 'smart-custom-fields' ); ?></div>
209
- </div>
210
- <?php wp_nonce_field( SCF_Config::NAME . '-settings', SCF_Config::PREFIX . 'settings-nonce' ) ?>
211
- <?php
212
- }
213
-
214
- /**
215
- * Displaying the meta box to set the display conditions for post edit page
216
- */
217
- public function display_meta_box_condition_post() {
218
- $post_types = get_post_types( array(
219
- 'show_ui' => true,
220
- ), 'objects' );
221
- unset( $post_types['attachment'] );
222
- unset( $post_types[SCF_Config::NAME] );
223
-
224
- $conditions = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'condition', true );
225
- $post_type_field = '';
226
- foreach ( $post_types as $post_type => $post_type_object ) {
227
- $current = ( is_array( $conditions ) && in_array( $post_type, $conditions ) ) ? $post_type : false;
228
- $post_type_field .= sprintf(
229
- '<label><input type="checkbox" name="%s" value="%s" %s /> %s</label>',
230
- esc_attr( SCF_Config::PREFIX . 'condition[]' ),
231
- esc_attr( $post_type ),
232
- checked( $current, $post_type, false ),
233
- esc_attr( $post_type_object->labels->singular_name )
234
- );
235
- }
236
- printf(
237
- '<p><b>%s</b>%s</p>',
238
- esc_html__( 'Post Types', 'smart-custom-fields' ),
239
- $post_type_field
240
- );
241
-
242
- $condition_post_ids = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'condition-post-ids', true );
243
- printf(
244
- '<p><b>%s</b><input type="text" name="%s" value="%s" class="widefat" /></p>',
245
- esc_html__( 'Post Ids ( Comma separated )', 'smart-custom-fields' ),
246
- esc_attr( SCF_Config::PREFIX . 'condition-post-ids' ),
247
- $condition_post_ids
248
- );
249
- }
250
-
251
- /**
252
- * Displaying the meta box to set the display conditions for profile edit page
253
- */
254
- public function display_meta_box_condition_profile() {
255
- $roles = get_editable_roles();
256
- $conditions = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'roles', true );
257
- $profile_field = '';
258
- foreach ( $roles as $name => $role ) {
259
- $current = ( is_array( $conditions ) && in_array( $name, $conditions ) ) ? $name : false;
260
- $profile_field .= sprintf(
261
- '<label><input type="checkbox" name="%s" value="%s" %s /> %s</label>',
262
- esc_attr( SCF_Config::PREFIX . 'roles[]' ),
263
- esc_attr( $name ),
264
- checked( $current, $name, false ),
265
- esc_html__( $role['name'], 'smart-custom-fields' )
266
- );
267
- }
268
- printf(
269
- '<p><b>%s</b>%s</p>',
270
- esc_html__( 'Roles', 'smart-custom-fields' ),
271
- $profile_field
272
- );
273
- }
274
-
275
- /**
276
- * Displaying the meta box to set the display conditions for term edit page
277
- */
278
- public function display_meta_box_condition_taxonomy() {
279
- $taxonomies = get_taxonomies( array(
280
- 'show_ui' => true,
281
- ), 'objects' );
282
- $conditions = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'taxonomies', true );
283
- $taxonomy_field = '';
284
- foreach ( $taxonomies as $name => $taxonomy ) {
285
- $current = ( is_array( $conditions ) && in_array( $name, $conditions ) ) ? $name : false;
286
- $taxonomy_field .= sprintf(
287
- '<label><input type="checkbox" name="%s" value="%s" %s /> %s</label>',
288
- esc_attr( SCF_Config::PREFIX . 'taxonomies[]' ),
289
- esc_attr( $name ),
290
- checked( $current, $name, false ),
291
- esc_html__( $taxonomy->label, 'smart-custom-fields' )
292
- );
293
- }
294
- printf(
295
- '<p><b>%s</b>%s</p>',
296
- esc_html__( 'Taxonomies', 'smart-custom-fields' ),
297
- $taxonomy_field
298
- );
299
- }
300
-
301
- /**
302
- * Displaying the meta box to set the display conditions for custom options page
303
- */
304
- public function display_meta_box_condition_options_page() {
305
- $optinos_pages = SCF::get_options_pages();
306
- $conditions = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'options-pages', true );
307
- $options_page_field = '';
308
- foreach ( $optinos_pages as $name => $optinos_page ) {
309
- $current = ( is_array( $conditions ) && in_array( $name, $conditions ) ) ? $name : false;
310
- $options_page_field .= sprintf(
311
- '<label><input type="checkbox" name="%s" value="%s" %s /> %s</label>',
312
- esc_attr( SCF_Config::PREFIX . 'options-pages[]' ),
313
- esc_attr( $name ),
314
- checked( $current, $name, false ),
315
- esc_html( $optinos_page )
316
- );
317
- }
318
- printf(
319
- '<p><b>%s</b>%s</p>',
320
- esc_html__( 'Options pages', 'smart-custom-fields' ),
321
- $options_page_field
322
- );
323
- }
324
-
325
- /**
326
- * Saving settings
327
- *
328
- * @param int $post_id
329
- */
330
- public function save_post( $post_id ) {
331
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
332
- return;
333
- }
334
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
335
- return;
336
- }
337
- check_admin_referer(
338
- SCF_Config::NAME . '-settings',
339
- SCF_Config::PREFIX . 'settings-nonce'
340
- );
341
-
342
- $data = array();
343
- foreach ( $_POST[SCF_Config::NAME] as $group_key => $group_value ) {
344
- // $group_key = 0 is hidden field so don't save
345
- if ( $group_key === 0 ) {
346
- continue;
347
- }
348
- if ( !empty( $group_value['fields'] ) && count( $group_value['fields'] ) > 1 ) {
349
- $fields = array();
350
- foreach ( $group_value['fields'] as $field_key => $field_value ) {
351
- // $field_key = 0 is hidden field so don't save
352
- if ( $field_key === 0 ) {
353
- continue;
354
- }
355
- if ( !empty( $field_value['name'] ) ) {
356
- $fields[] = $field_value;
357
- }
358
- }
359
- if ( !$fields ) {
360
- continue;
361
- }
362
-
363
- if ( !empty( $group_value['repeat'] ) && $group_value['repeat'] === 'true' ) {
364
- $group_value['repeat'] = true;
365
- } else {
366
- $group_value['repeat'] = false;
367
- }
368
-
369
- // If "repeat" isn't true, empty name
370
- // If "repeat" is true and name is empty, assign index
371
- if ( !( isset( $group_value['repeat'] ) && $group_value['repeat'] === true && !empty( $group_value['group-name'] ) ) ) {
372
- $group_value['group-name'] = $group_key;
373
- }
374
-
375
- $group_value['fields'] = $fields;
376
- $data[] = $group_value;
377
- }
378
- }
379
- update_post_meta( $post_id, SCF_Config::PREFIX . 'setting', $data );
380
-
381
- if ( !isset( $_POST[SCF_Config::PREFIX . 'condition'] ) ) {
382
- delete_post_meta( $post_id, SCF_Config::PREFIX . 'condition' );
383
- } else {
384
- update_post_meta( $post_id, SCF_Config::PREFIX . 'condition', $_POST[SCF_Config::PREFIX . 'condition'] );
385
- }
386
-
387
- if ( !isset( $_POST[SCF_Config::PREFIX . 'condition-post-ids'] ) ) {
388
- delete_post_meta( $post_id, SCF_Config::PREFIX . 'condition-post-ids' );
389
- } else {
390
- update_post_meta( $post_id, SCF_Config::PREFIX . 'condition-post-ids', $_POST[SCF_Config::PREFIX . 'condition-post-ids'] );
391
- }
392
-
393
- if ( !isset( $_POST[SCF_Config::PREFIX . 'roles'] ) ) {
394
- delete_post_meta( $post_id, SCF_Config::PREFIX . 'roles' );
395
- } else {
396
- update_post_meta( $post_id, SCF_Config::PREFIX . 'roles', $_POST[SCF_Config::PREFIX . 'roles'] );
397
- }
398
-
399
- if ( !isset( $_POST[SCF_Config::PREFIX . 'taxonomies'] ) ) {
400
- delete_post_meta( $post_id, SCF_Config::PREFIX . 'taxonomies' );
401
- } else {
402
- update_post_meta( $post_id, SCF_Config::PREFIX . 'taxonomies', $_POST[SCF_Config::PREFIX . 'taxonomies'] );
403
- }
404
-
405
- if ( !isset( $_POST[SCF_Config::PREFIX . 'options-pages'] ) ) {
406
- delete_post_meta( $post_id, SCF_Config::PREFIX . 'options-pages' );
407
- } else {
408
- update_post_meta( $post_id, SCF_Config::PREFIX . 'options-pages', $_POST[SCF_Config::PREFIX . 'options-pages'] );
409
- }
410
- }
411
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/controller/class.taxonomy.php DELETED
@@ -1,87 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Controller_Taxonomy
4
- * Version : 1.0.1
5
- * Author : inc2734
6
- * Created : April 26, 2015
7
- * Modified : May 31, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Controller_Taxonomy extends Smart_Custom_Fields_Controller_Base {
12
-
13
- /**
14
- * __construct
15
- */
16
- public function __construct() {
17
- parent::__construct();
18
-
19
- add_action( $_REQUEST['taxonomy'] . '_edit_form_fields', array( $this, 'edit_form_fields' ) );
20
- add_action( 'edited_terms' , array( $this, 'update' ), 10, 2 );
21
- add_action( 'delete_term' , array( $this, 'delete' ), 10, 4 );
22
- }
23
-
24
- /**
25
- * Loading resources for term edit page
26
- *
27
- * @param string $hook
28
- */
29
- public function admin_enqueue_scripts( $hook ) {
30
- parent::admin_enqueue_scripts( $hook );
31
- wp_enqueue_style(
32
- SCF_Config::PREFIX . 'taxonomy',
33
- plugins_url( SCF_Config::NAME ) . '/css/taxonomy.css'
34
- );
35
- }
36
-
37
- /**
38
- * Displaying custom fields in term edit page
39
- *
40
- * @param object $term
41
- */
42
- public function edit_form_fields( $term ) {
43
- $settings = SCF::get_settings( $term );
44
- foreach ( $settings as $Setting ) {
45
- $callback_args['args'] = $Setting->get_groups();
46
- ?>
47
- <table class="form-table">
48
- <tr>
49
- <th scope="row"><?php echo esc_html( $Setting->get_title() ); ?></th>
50
- <td><?php $this->display_meta_box( $term, $callback_args ); ?></td>
51
- </tr>
52
- </table>
53
- <?php
54
- }
55
- }
56
-
57
- /**
58
- * Saving meta data from custom fields in term edit page
59
- *
60
- * @param int $term_id
61
- * @param string $taxonomy
62
- */
63
- public function update( $term_id, $taxonomy ) {
64
- if ( !current_user_can( 'manage_categories' ) ) {
65
- return;
66
- }
67
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
68
- return;
69
- }
70
-
71
- $term = get_term( $term_id, $taxonomy );
72
- $this->save( $_POST, $term );
73
- }
74
-
75
- /**
76
- * Delete meta data
77
- *
78
- * @param int $term_id
79
- * @param int $term_taxonomy_id
80
- * @param string $taxonomy
81
- * @param object $deleted_term
82
- */
83
- public function delete( $term_id, $term_taxonomy_id, $taxonomy, $deleted_term ) {
84
- $Meta = new Smart_Custom_Fields_Meta( $deleted_term );
85
- $Meta->delete();
86
- }
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-boolean.php DELETED
@@ -1,168 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Boolean
4
- * Version : 1.1.1
5
- * Author : Toro_Unit, inc2734
6
- * Created : April 6, 2015
7
- * Modified : July 28, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
-
12
- class Smart_Custom_Fields_Field_Boolean extends Smart_Custom_Fields_Field_Base {
13
-
14
- /**
15
- * Set the required items
16
- *
17
- * @return array
18
- */
19
- protected function init() {
20
- add_filter( 'smart-cf-validate-get-value', array( $this, 'validate_get_value' ), 10, 2 );
21
- return array(
22
- 'type' => 'boolean',
23
- 'display-name' => __( 'Boolean', 'smart-custom-fields' ),
24
- 'optgroup' => 'basic-fields',
25
- );
26
- }
27
-
28
- /**
29
- * Set the non required items
30
- *
31
- * @return array
32
- */
33
- protected function options() {
34
- return array(
35
- 'default' => 0,
36
- 'instruction' => '',
37
- 'notes' => '',
38
- 'true_label' => __( 'Yes', 'smart-custom-fields' ),
39
- 'false_label' => __( 'No', 'smart-custom-fields' ),
40
- );
41
- }
42
-
43
- /**
44
- * Getting the field
45
- *
46
- * @param int $index
47
- * @param int $value
48
- * @return string html
49
- */
50
- public function get_field( $index, $value ) {
51
- $name = $this->get_field_name_in_editor( $index );
52
- $disabled = $this->get_disable_attribute( $index );
53
- $value = ( true === $value || 1 === $value || '1' === $value ) ? 1 : 0;
54
-
55
- $true = sprintf(
56
- '<label><input type="radio" name="%s" value="1" class="widefat" %s %s />%s ( true )</label>',
57
- esc_attr( $name ),
58
- checked( 1, $value, false ),
59
- disabled( true, $disabled, false ),
60
- $this->get( 'true_label' )
61
- );
62
-
63
- $false = sprintf(
64
- '<label><input type="radio" name="%s" value="0" class="widefat" %s %s />%s ( false )</label>',
65
- esc_attr( $name ),
66
- checked( 0, $value, false ),
67
- disabled( true, $disabled, false ),
68
- $this->get( 'false_label' )
69
- );
70
-
71
- return $true . $false;
72
- }
73
-
74
- /**
75
- * Displaying the option fields in custom field settings page
76
- *
77
- * @param int $group_key
78
- * @param int $field_key
79
- */
80
- public function display_field_options( $group_key, $field_key ) {
81
- $this->display_name_option( $group_key, $field_key );
82
- $this->display_label_option( $group_key, $field_key );
83
- ?>
84
- <tr>
85
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
86
- <td>
87
- <fieldset>
88
-
89
- <label>
90
- <input type="radio"
91
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
92
- value="1"
93
- <?php checked( 1, $this->get( 'default' ) ); ?>
94
- />
95
- <span><?php echo esc_html( $this->get( 'true_label' ) ); ?> ( true )</span>
96
- </label>&nbsp;
97
- <label>
98
- <input type="radio"
99
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
100
- value="0"
101
- <?php checked( 0, $this->get( 'default' ) ); ?>
102
- />
103
- <span><?php echo esc_html( $this->get( 'false_label' ) ); ?> ( false )</span>
104
- </label>
105
-
106
- </fieldset>
107
- </td>
108
- </tr>
109
- <tr>
110
- <th><?php esc_html_e( 'TRUE Label', 'smart-custom-fields' ); ?></th>
111
- <td>
112
- <input type="text"
113
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'true_label' ) ); ?>"
114
- class="widefat"
115
- value="<?php echo esc_attr( $this->get( 'true_label' ) ); ?>"
116
- />
117
- </td>
118
- </tr>
119
- <tr>
120
- <th><?php esc_html_e( 'FALSE Label', 'smart-custom-fields' ); ?></th>
121
- <td>
122
- <input type="text"
123
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'false_label' ) ); ?>"
124
- class="widefat"
125
- value="<?php echo esc_attr( $this->get( 'false_label' ) ); ?>"
126
- />
127
- </td>
128
- </tr>
129
- <tr>
130
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
131
- <td>
132
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
133
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
134
- </td>
135
- </tr>
136
- <tr>
137
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
138
- <td>
139
- <input type="text"
140
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
141
- class="widefat"
142
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
143
- />
144
- </td>
145
- </tr>
146
- <?php
147
- }
148
-
149
- /**
150
- * Validating when displaying meta data
151
- *
152
- * @param int|string $value
153
- * @param string $field_type
154
- * @return boolean
155
- */
156
- public function validate_get_value( $value, $field_type ) {
157
- if ( $field_type === $this->get_attribute( 'type' ) ) {
158
- if ( is_array( $value ) ) {
159
- foreach ( $value as $key => $val ) {
160
- $value[$key] = !!$val;
161
- }
162
- } else {
163
- $value = !!$value;
164
- }
165
- }
166
- return $value;
167
- }
168
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-check.php DELETED
@@ -1,146 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Check
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Check extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'check',
21
- 'display-name' => __( 'Check', 'smart-custom-fields' ),
22
- 'optgroup' => 'select-fields',
23
- 'allow-multiple-data' => true,
24
- );
25
- }
26
-
27
- /**
28
- * Set the non required items
29
- *
30
- * @return array
31
- */
32
- protected function options() {
33
- return array(
34
- 'choices' => '',
35
- 'check_direction' => 'horizontal', // or vertical
36
- 'default' => '',
37
- 'instruction' => '',
38
- 'notes' => '',
39
- );
40
- }
41
-
42
- /**
43
- * Getting the field
44
- *
45
- * @param int $index
46
- * @param array $value
47
- * @return string html
48
- */
49
- public function get_field( $index, $value ) {
50
- $name = $this->get_field_name_in_editor( $index );
51
- $disabled = $this->get_disable_attribute( $index );
52
- $choices = SCF::choices_eol_to_array( $this->get( 'choices' ) );
53
- $direction = $this->get( 'check_direction' );
54
-
55
- $form_field = sprintf(
56
- '<input type="hidden" name="%s" value="" %s />',
57
- esc_attr( $name ),
58
- disabled( true, $disabled, false )
59
- );
60
- foreach ( $choices as $key => $choice ) {
61
- $choice = trim( $choice );
62
- if ( !SCF::is_assoc( $choices ) ) {
63
- $key = $choice;
64
- }
65
- $form_field .= sprintf(
66
- '<span class="%1$s"><label><input type="checkbox" name="%2$s" value="%3$s" %4$s %5$s /> %6$s</label></span>',
67
- esc_attr( SCF_Config::PREFIX . 'item-' . $direction ),
68
- esc_attr( $name . '[]' ),
69
- esc_attr( $key ),
70
- checked( true, ( is_array( $value ) && in_array( $key, $value ) ), false ),
71
- disabled( true, $disabled, false ),
72
- esc_html( $choice )
73
- );
74
- }
75
- return $form_field;
76
- }
77
-
78
- /**
79
- * Displaying the option fields in custom field settings page
80
- *
81
- * @param int $group_key
82
- * @param int $field_key
83
- */
84
- public function display_field_options( $group_key, $field_key ) {
85
- $this->display_name_option( $group_key, $field_key );
86
- $this->display_label_option( $group_key, $field_key );
87
- ?>
88
- <tr>
89
- <th><?php esc_html_e( 'Choices', 'smart-custom-fields' ); ?></th>
90
- <td>
91
- <textarea
92
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'choices' ) ); ?>"
93
- class="widefat"
94
- rows="5" /><?php echo esc_textarea( "\n" . $this->get( 'choices' ) ); ?></textarea>
95
- <?php esc_html_e( 'If you want to separate the key and the value, enter as follows: key => value', 'smart-custom-fields' ); ?>
96
- </td>
97
- </tr>
98
- <tr>
99
- <th><?php esc_html_e( 'Display Direction', 'smart-custom-fields' ); ?></th>
100
- <td>
101
- <?php
102
- $directions = array(
103
- 'horizontal' => __( 'horizontal', 'smart-custom-fields' ),
104
- 'vertical' => __( 'vertical' , 'smart-custom-fields' ),
105
- );
106
- foreach ( $directions as $key => $value ) {
107
- printf(
108
- '<label><input type="radio" name="%s" value="%s" %s /> %s</label>&nbsp;&nbsp;&nbsp;',
109
- esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'check_direction' ) ),
110
- esc_attr( $key ),
111
- checked( $this->get( 'check_direction' ), $key, false ),
112
- esc_html( $value )
113
- );
114
- }
115
- ?>
116
- </td>
117
- </tr>
118
- <tr>
119
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
120
- <td>
121
- <textarea
122
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
123
- class="widefat"
124
- rows="5" /><?php echo esc_textarea( "\n" . $this->get( 'default' ) ); ?></textarea>
125
- </td>
126
- </tr>
127
- <tr>
128
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
129
- <td>
130
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
131
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
132
- </td>
133
- </tr>
134
- <tr>
135
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
136
- <td>
137
- <input type="text"
138
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
139
- class="widefat"
140
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
141
- />
142
- </td>
143
- </tr>
144
- <?php
145
- }
146
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-colorpicker.php DELETED
@@ -1,134 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Colorpicker
4
- * Version : 1.2.0
5
- * Author : inc2734
6
- * Created : October 21, 2014
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Colorpicker extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- add_action(
20
- SCF_Config::PREFIX . 'before-editor-enqueue-scripts',
21
- array( $this, 'editor_enqueue_scripts' )
22
- );
23
- add_action(
24
- SCF_Config::PREFIX . 'before-settings-enqueue-scripts',
25
- array( $this, 'settings_enqueue_scripts' )
26
- );
27
- return array(
28
- 'type' => 'colorpicker',
29
- 'display-name' => __( 'Color picker', 'smart-custom-fields' ),
30
- 'optgroup' => 'other-fields',
31
- );
32
- }
33
-
34
- /**
35
- * Set the non required items
36
- *
37
- * @return array
38
- */
39
- protected function options() {
40
- return array(
41
- 'default' => '',
42
- 'instruction' => '',
43
- 'notes' => '',
44
- );
45
- }
46
-
47
- /**
48
- * Loading resources for editor
49
- */
50
- public function editor_enqueue_scripts() {
51
- wp_enqueue_style( 'wp-color-picker' );
52
-
53
- wp_enqueue_script(
54
- SCF_Config::PREFIX . 'editor-colorpicker',
55
- plugins_url( SCF_Config::NAME ) . '/js/editor-colorpicker.js',
56
- array( 'jquery', 'wp-color-picker' ),
57
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-colorpicker.js' ) ),
58
- true
59
- );
60
- }
61
-
62
- /**
63
- * Loading resources for editor for custom field settings page
64
- */
65
- public function settings_enqueue_scripts() {
66
- wp_enqueue_style( 'wp-color-picker' );
67
-
68
- wp_enqueue_script(
69
- SCF_Config::PREFIX . 'settings-colorpicker',
70
- plugins_url( SCF_Config::NAME ) . '/js/settings-colorpicker.js',
71
- array( 'jquery', 'wp-color-picker' ),
72
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings-colorpicker.js' ) ),
73
- true
74
- );
75
- }
76
-
77
- /**
78
- * Getting the field
79
- *
80
- * @param int $index
81
- * @param string $value
82
- * @return string html
83
- */
84
- public function get_field( $index, $value ) {
85
- $name = $this->get_field_name_in_editor( $index );
86
- $disabled = $this->get_disable_attribute( $index );
87
- return sprintf(
88
- '<input type="text" name="%s" value="%s" class="%s" %s />',
89
- esc_attr( $name ),
90
- esc_attr( $value ),
91
- esc_attr( SCF_Config::PREFIX . 'colorpicker' ),
92
- disabled( true, $disabled, false )
93
- );
94
- }
95
-
96
- /**
97
- * Displaying the option fields in custom field settings page
98
- *
99
- * @param int $group_key
100
- * @param int $field_key
101
- */
102
- public function display_field_options( $group_key, $field_key ) {
103
- $this->display_name_option( $group_key, $field_key );
104
- $this->display_label_option( $group_key, $field_key );
105
- ?>
106
- <tr>
107
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
108
- <td>
109
- <input type="text"
110
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
111
- class="widefat default-option"
112
- value="<?php echo esc_attr( $this->get( 'default' ) ); ?>" />
113
- </td>
114
- </tr>
115
- <tr>
116
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
117
- <td>
118
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
119
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
120
- </td>
121
- </tr>
122
- <tr>
123
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
124
- <td>
125
- <input type="text"
126
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
127
- class="widefat"
128
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
129
- />
130
- </td>
131
- </tr>
132
- <?php
133
- }
134
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-datepicker.php DELETED
@@ -1,262 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Datepicker
4
- * Version : 1.2.0
5
- * Author : inc2734
6
- * Created : January 17, 2015
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Datepicker extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- add_action(
20
- SCF_Config::PREFIX . 'before-editor-enqueue-scripts',
21
- array( $this, 'editor_enqueue_scripts' )
22
- );
23
- add_action(
24
- SCF_Config::PREFIX . 'before-settings-enqueue-scripts',
25
- array( $this, 'settings_enqueue_scripts' )
26
- );
27
- return array(
28
- 'type' => 'datepicker',
29
- 'display-name' => __( 'Date picker', 'smart-custom-fields' ),
30
- 'optgroup' => 'other-fields',
31
- );
32
- }
33
-
34
- /**
35
- * Set the non required items
36
- *
37
- * @return array
38
- */
39
- protected function options() {
40
- return array(
41
- 'date_format' => '',
42
- 'max_date' => '',
43
- 'min_date' => '',
44
- 'default' => '',
45
- 'instruction' => '',
46
- 'notes' => '',
47
- );
48
- }
49
-
50
- /**
51
- * Loading resources for editor
52
- */
53
- public function editor_enqueue_scripts() {
54
- global $wp_scripts;
55
- $ui = $wp_scripts->query( 'jquery-ui-core' );
56
- wp_enqueue_style(
57
- 'jquery.ui',
58
- '//ajax.googleapis.com/ajax/libs/jqueryui/' . $ui->ver . '/themes/smoothness/jquery-ui.min.css',
59
- array(),
60
- $ui->ver
61
- );
62
- wp_enqueue_script( 'jquery-ui-datepicker' );
63
- wp_enqueue_script(
64
- SCF_Config::PREFIX . 'editor-datepicker',
65
- plugins_url( '../../js/editor-datepicker.js', __FILE__ ),
66
- array( 'jquery', 'jquery-ui-datepicker' ),
67
- false,
68
- true
69
- );
70
- }
71
-
72
- /**
73
- * Loading resources for editor for custom field settings page
74
- */
75
- public function settings_enqueue_scripts() {
76
- global $wp_scripts;
77
- $ui = $wp_scripts->query( 'jquery-ui-core' );
78
-
79
- wp_enqueue_style(
80
- 'jquery.ui',
81
- '//ajax.googleapis.com/ajax/libs/jqueryui/' . $ui->ver . '/themes/smoothness/jquery-ui.min.css',
82
- array(),
83
- $ui->ver
84
- );
85
-
86
- wp_enqueue_script( 'jquery-ui-datepicker' );
87
-
88
- wp_enqueue_script(
89
- SCF_Config::PREFIX . 'settings-datepicker',
90
- plugins_url( SCF_Config::NAME ) . '/js/settings-datepicker.js',
91
- array( 'jquery', 'jquery-ui-datepicker' ),
92
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings-datepicker.js' ) ),
93
- true
94
- );
95
- }
96
-
97
- /**
98
- * Getting the field
99
- *
100
- * @param int $index
101
- * @param string $value
102
- * @return string html
103
- */
104
- public function get_field( $index, $value ) {
105
- $name = $this->get_field_name_in_editor( $index );
106
- $disabled = $this->get_disable_attribute( $index );
107
- $data_js = $this->get_data_js();
108
-
109
- return sprintf(
110
- '<input type="text" name="%s" value="%s" class="%s" %s data-js=\'%s\' />',
111
- esc_attr( $name ),
112
- esc_attr( $value ),
113
- esc_attr( SCF_Config::PREFIX . 'datepicker' ),
114
- disabled( true, $disabled, false ),
115
- $data_js
116
- );
117
- }
118
-
119
- /**
120
- * Displaying the option fields in custom field settings page
121
- *
122
- * @param int $group_key
123
- * @param int $field_key
124
- */
125
- public function display_field_options( $group_key, $field_key ) {
126
- $this->display_name_option( $group_key, $field_key );
127
- $this->display_label_option( $group_key, $field_key );
128
- ?>
129
- <tr>
130
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
131
- <td>
132
- <input type="text"
133
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
134
- class="widefat default-option"
135
- value="<?php echo esc_attr( $this->get( 'default' ) ); ?>"
136
- data-js='<?php echo $this->get_data_js(); ?>' />
137
- </td>
138
- </tr>
139
- <tr>
140
- <th><?php esc_html_e( 'Date Format', 'smart-custom-fields' ); ?></th>
141
- <td>
142
- <input type="text"
143
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'date_format' ) ); ?>"
144
- class="widefat"
145
- value="<?php echo esc_attr( $this->get( 'date_format' ) ); ?>"
146
- /><br />
147
- <span class="<?php echo esc_attr( SCF_Config::PREFIX ); ?>notes">
148
- <?php esc_html_e( 'e.g dd/mm/yy', 'smart-custom-fields' ); ?>
149
- <?php printf(
150
- esc_html( 'Prease see %sdateFormat%s', 'smart-custom-fields' ),
151
- '<a href="http://api.jqueryui.com/datepicker/#option-dateFormat" target="_blank">',
152
- '</a>'
153
- ); ?>
154
- </span>
155
- </td>
156
- </tr>
157
- <tr>
158
- <th><?php esc_html_e( 'Max Date', 'smart-custom-fields' ); ?></th>
159
- <td>
160
- <input type="text"
161
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'max_date' ) ); ?>"
162
- class="widefat"
163
- value="<?php echo esc_attr( $this->get( 'max_date' ) ); ?>"
164
- /><br />
165
- <span class="<?php echo esc_attr( SCF_Config::PREFIX ); ?>notes">
166
- <?php esc_html_e( 'e.g +1m +1w', 'smart-custom-fields' ); ?>
167
- <?php printf(
168
- esc_html( 'Prease see %smaxData%s', 'smart-custom-fields' ),
169
- '<a href="http://api.jqueryui.com/datepicker/#option-maxDate" target="_blank">',
170
- '</a>'
171
- ); ?>
172
- </span>
173
- </td>
174
- </tr>
175
- <tr>
176
- <th><?php esc_html_e( 'Min Date', 'smart-custom-fields' ); ?></th>
177
- <td>
178
- <input type="text"
179
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'min_date' ) ); ?>"
180
- class="widefat"
181
- value="<?php echo esc_attr( $this->get( 'min_date' ) ); ?>"
182
- /><br />
183
- <span class="<?php echo esc_attr( SCF_Config::PREFIX ); ?>notes">
184
- <?php esc_html_e( 'e.g +1m +1w', 'smart-custom-fields' ); ?>
185
- <?php printf(
186
- esc_html( 'Prease see %sminData%s', 'smart-custom-fields' ),
187
- '<a href="http://api.jqueryui.com/datepicker/#option-minDate" target="_blank">',
188
- '</a>'
189
- ); ?>
190
- </span>
191
- </td>
192
- </tr>
193
- <tr>
194
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
195
- <td>
196
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
197
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
198
- </td>
199
- </tr>
200
- <tr>
201
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
202
- <td>
203
- <input type="text"
204
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
205
- class="widefat"
206
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
207
- />
208
- </td>
209
- </tr>
210
- <?php
211
- }
212
-
213
- /**
214
- * Return datepicker option with json_encode
215
- *
216
- * @return string option with json_encode
217
- */
218
- protected function get_data_js() {
219
- $js = array(
220
- 'showMonthAfterYear' => true,
221
- 'changeYear' => true,
222
- 'changeMonth' => true,
223
- );
224
-
225
- // If locale is Japanese, change in Japanese notation
226
- if ( get_locale() === 'ja' ) {
227
- $js = array_merge( $js, array(
228
- 'yearSuffix' => '年',
229
- 'dateFormat' => 'yy-mm-dd',
230
- 'dayNames' => array(
231
- '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日',
232
- ),
233
- 'dayNamesMin' => array(
234
- '日', '月', '火', '水', '木', '金', '土',
235
- ),
236
- 'dayNamesShort' => array(
237
- '日曜', '月曜', '火曜', '水曜', '木曜', '金曜', '土曜',
238
- ),
239
- 'monthNames' => array(
240
- '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月',
241
- ),
242
- 'monthNamesShort' => array(
243
- '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月',
244
- )
245
- ) );
246
- }
247
-
248
- if ( $this->get( 'date_format' ) ) {
249
- $js['dateFormat'] = $this->get( 'date_format' );
250
- }
251
-
252
- if ( $this->get( 'max_date' ) ) {
253
- $js['maxDate'] = $this->get( 'max_date' );
254
- }
255
-
256
- if ( $this->get( 'min_date' ) ) {
257
- $js['minDate'] = $this->get( 'min_date' );
258
- }
259
-
260
- return json_encode( $js );
261
- }
262
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-file.php DELETED
@@ -1,137 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_File
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : September 6, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_File extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'file',
21
- 'display-name' => __( 'File', 'smart-custom-fields' ),
22
- 'optgroup' => 'content-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'instruction' => '',
34
- 'notes' => '',
35
- );
36
- }
37
-
38
- /**
39
- * Getting the field
40
- *
41
- * @param int $index
42
- * @param string $value
43
- * @return string html
44
- */
45
- public function get_field( $index, $value ) {
46
- $name = $this->get_field_name_in_editor( $index );
47
- $disabled = $this->get_disable_attribute( $index );
48
-
49
- $btn_remove = sprintf(
50
- '<span class="btn-remove-file hide">%s</span>',
51
- esc_html__( 'Delete', 'smart-custom-fields' )
52
- );
53
-
54
- $hide_class = 'hide';
55
- $image = $btn_remove;
56
- if ( $value ) {
57
- // Usually, $value is attachment ID.
58
- // If a customized, for example, $value is not an ID,
59
- // Regarded the $value is file URL.
60
- if ( preg_match( '/^\d+$/', $value ) ) {
61
- $image_src = wp_get_attachment_image_src( $value, 'thumbnail', true );
62
- if ( is_array( $image_src ) && isset( $image_src[0] ) ) {
63
- $image_src = $image_src[0];
64
- }
65
- } else {
66
- $imag_url = $value;
67
- $path = str_replace( home_url(), '', $value );
68
- $image_path = ABSPATH . untrailingslashit( $path );
69
- if ( file_exists( $image_path ) ) {
70
- $wp_check_filetype = wp_check_filetype( $image_path );
71
- if ( ! empty( $wp_check_filetype['type'] ) ) {
72
- $image_src = $image_url;
73
- }
74
- }
75
- }
76
-
77
- if ( $image_src && ! is_array( $image_src ) ) {
78
- $attachment = get_post( $value );
79
- $attachment_name = $attachment->post_name;
80
- $attachment_url = get_attached_file( $attachment->ID );
81
- $filetype = wp_check_filetype( $attachment_url );
82
- $filename = $attachment_name . '.' . $filetype['ext'];
83
- $image = sprintf(
84
- '<a href="%s" target="_blank"><img src="%s" alt="" />%s</a>%s',
85
- wp_get_attachment_url( $value ),
86
- esc_url( $image_src ),
87
- esc_attr( $filename ),
88
- $btn_remove
89
- );
90
- $hide_class = '';
91
- }
92
- }
93
-
94
- return sprintf(
95
- '<span class="button btn-add-file">%s</span><br />
96
- <span class="%s %s">%s</span>
97
- <input type="hidden" name="%s" value="%s" %s />',
98
- esc_html__( 'File Select', 'smart-custom-fields' ),
99
- esc_attr( SCF_Config::PREFIX . 'upload-file' ),
100
- esc_attr( $hide_class ),
101
- $image,
102
- esc_attr( $name ),
103
- esc_attr( $value ),
104
- disabled( true, $disabled, false )
105
- );
106
- }
107
-
108
- /**
109
- * Displaying the option fields in custom field settings page
110
- *
111
- * @param int $group_key
112
- * @param int $field_key
113
- */
114
- public function display_field_options( $group_key, $field_key ) {
115
- $this->display_name_option( $group_key, $field_key );
116
- $this->display_label_option( $group_key, $field_key );
117
- ?>
118
- <tr>
119
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
120
- <td>
121
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
122
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
123
- </td>
124
- </tr>
125
- <tr>
126
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
127
- <td>
128
- <input type="text"
129
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
130
- class="widefat"
131
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
132
- />
133
- </td>
134
- </tr>
135
- <?php
136
- }
137
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-image.php DELETED
@@ -1,143 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Image
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : September 6, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Image extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'image',
21
- 'display-name' => __( 'Image', 'smart-custom-fields' ),
22
- 'optgroup' => 'content-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'instruction' => '',
34
- 'notes' => '',
35
- 'size' => 'full',
36
- );
37
- }
38
-
39
- /**
40
- * Getting the field
41
- *
42
- * @param int $index
43
- * @param string $value
44
- * @return string html
45
- */
46
- public function get_field( $index, $value ) {
47
- $name = $this->get_field_name_in_editor( $index );
48
- $disabled = $this->get_disable_attribute( $index );
49
-
50
- $btn_remove = sprintf(
51
- '<span class="btn-remove-image hide">%s</span>',
52
- esc_html__( 'Delete', 'smart-custom-fields' )
53
- );
54
-
55
- $hide_class = 'hide';
56
- $image = $btn_remove;
57
- if ( $value ) {
58
- // Usually, $value is attachment ID.
59
- // If a customized, for example, $value is not an ID,
60
- // Regarded the $value is file URL.
61
- if ( preg_match( '/^\d+$/', $value ) ) {
62
- $image_src = wp_get_attachment_image_src( $value, $this->get( 'size' ) );
63
- if ( is_array( $image_src ) && isset( $image_src[0] ) ) {
64
- $image_src = $image_src[0];
65
- }
66
- } else {
67
- $image_url = $value;
68
- $path = str_replace( home_url(), '', $value );
69
- $image_path = ABSPATH . untrailingslashit( $path );
70
- if ( file_exists( $image_path ) ) {
71
- $wp_check_filetype = wp_check_filetype( $image_path );
72
- if ( ! empty( $wp_check_filetype['type'] ) ) {
73
- $image_src = $image_url;
74
- }
75
- }
76
- }
77
-
78
- if ( $image_src && ! is_array( $image_src ) ) {
79
- $image = sprintf(
80
- '<img src="%s" alt="" />%s',
81
- esc_url( $image_src ),
82
- $btn_remove
83
- );
84
- $hide_class = '';
85
- }
86
- }
87
-
88
- return sprintf(
89
- '<span class="button btn-add-image">%s</span><br />
90
- <span class="%s %s" data-size="%s">%s</span>
91
- <input type="hidden" name="%s" value="%s" %s />',
92
- esc_html__( 'Image Select', 'smart-custom-fields' ),
93
- esc_attr( SCF_Config::PREFIX . 'upload-image' ),
94
- esc_attr( $hide_class ),
95
- esc_attr( $this->get( 'size' ) ),
96
- $image,
97
- esc_attr( $name ),
98
- esc_attr( $value ),
99
- disabled( true, $disabled, false )
100
- );
101
- }
102
-
103
- /**
104
- * Displaying the option fields in custom field settings page
105
- *
106
- * @param int $group_key
107
- * @param int $field_key
108
- */
109
- public function display_field_options( $group_key, $field_key ) {
110
- $this->display_name_option( $group_key, $field_key );
111
- $this->display_label_option( $group_key, $field_key );
112
- ?>
113
- <tr>
114
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
115
- <td>
116
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
117
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
118
- </td>
119
- </tr>
120
- <tr>
121
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
122
- <td>
123
- <input type="text"
124
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
125
- class="widefat"
126
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
127
- />
128
- </td>
129
- </tr>
130
- <tr>
131
- <th><?php esc_html_e( 'Preview Size', 'smart-custom-fields' ); ?></th>
132
- <td>
133
- <select name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'size' ) ); ?>">
134
- <option value="full" <?php selected( $this->get( 'size' ), 'full' );?> >full</option>
135
- <?php foreach ( get_intermediate_image_sizes() as $size ) : ?>
136
- <option value="<?php echo esc_attr( $size );?>" <?php selected( $this->get( 'size' ), $size );?>><?php echo esc_html( $size );?></option>
137
- <?php endforeach;?>
138
- </select>
139
- </td>
140
- </tr>
141
- <?php
142
- }
143
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-message.php DELETED
@@ -1,88 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Message
4
- * Version : 1.0.0
5
- * Author : robssanches, inc2734
6
- * Created : June 2, 2018
7
- * Modified : June 2, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Message extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'message',
21
- 'display-name' => __( 'Message', 'smart-custom-fields' ),
22
- 'optgroup' => 'basic-fields',
23
- 'allow-multiple-data' => false,
24
- 'layout' => 'full-width'
25
- );
26
- }
27
-
28
- /**
29
- * Set the non required items
30
- *
31
- * @return array
32
- */
33
- protected function options() {
34
- return array(
35
- 'default' => '',
36
- 'notes' => ''
37
- );
38
- }
39
-
40
- /**
41
- * Getting the field
42
- *
43
- * @param int $index
44
- * @param string $value
45
- * @return string html
46
- */
47
- public function get_field( $index, $value ) {
48
- $name = $this->get_field_name_in_editor( $index );
49
- $disabled = $this->get_disable_attribute( $index );
50
- return sprintf(
51
- '<div id="%s" class="widefat" %s>%s</div>',
52
- esc_attr( $name ),
53
- disabled( true, $disabled, false ),
54
- $value
55
- );
56
- }
57
-
58
- /**
59
- * Displaying the option fields in custom field settings page
60
- *
61
- * @param int $group_key
62
- * @param int $field_key
63
- */
64
- public function display_field_options( $group_key, $field_key ) {
65
- $this->display_name_option( $group_key, $field_key );
66
- ?>
67
- <tr>
68
- <th><?php esc_html_e( 'Message', 'smart-custom-fields' ); ?></th>
69
- <td>
70
- <textarea
71
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
72
- class="widefat"
73
- rows="5"><?php echo esc_textarea( "\n" . $this->get( 'default' ) ); ?></textarea>
74
- </td>
75
- </tr>
76
- <tr>
77
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
78
- <td>
79
- <input type="text"
80
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
81
- class="widefat"
82
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
83
- />
84
- </td>
85
- </tr>
86
- <?php
87
- }
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-radio.php DELETED
@@ -1,145 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Radio
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Radio extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'radio',
21
- 'display-name' => __( 'Radio', 'smart-custom-fields' ),
22
- 'optgroup' => 'select-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'choices' => '',
34
- 'radio_direction' => 'horizontal', // or vertical
35
- 'default' => '',
36
- 'instruction' => '',
37
- 'notes' => '',
38
- );
39
- }
40
-
41
- /**
42
- * Getting the field
43
- *
44
- * @param int $index
45
- * @param string $value
46
- * @return string html
47
- */
48
- public function get_field( $index, $value ) {
49
- $name = $this->get_field_name_in_editor( $index );
50
- $disabled = $this->get_disable_attribute( $index );
51
- $choices = SCF::choices_eol_to_array( $this->get( 'choices' ) );
52
- $direction = $this->get( 'radio_direction' );
53
-
54
- $form_field = sprintf(
55
- '<input type="hidden" name="%s" value="" %s />',
56
- esc_attr( $name ),
57
- disabled( true, $disabled, false )
58
- );
59
- foreach ( $choices as $key => $choice ) {
60
- $choice = trim( $choice );
61
- if ( !SCF::is_assoc( $choices ) ) {
62
- $key = $choice;
63
- }
64
- $form_field .= sprintf(
65
- '<span class="%1$s"><label><input type="radio" name="%2$s" value="%3$s" %4$s %5$s /> %6$s</label></span>',
66
- esc_attr( SCF_Config::PREFIX . 'item-' . $direction ),
67
- esc_attr( $name ),
68
- esc_attr( $key ),
69
- checked( $value, $key, false ),
70
- disabled( true, $disabled, false ),
71
- esc_html( $choice )
72
- );
73
- }
74
- return $form_field;
75
- }
76
-
77
- /**
78
- * Displaying the option fields in custom field settings page
79
- *
80
- * @param int $group_key
81
- * @param int $field_key
82
- */
83
- public function display_field_options( $group_key, $field_key ) {
84
- $this->display_name_option( $group_key, $field_key );
85
- $this->display_label_option( $group_key, $field_key );
86
- ?>
87
- <tr>
88
- <th><?php esc_html_e( 'Choices', 'smart-custom-fields' ); ?></th>
89
- <td>
90
- <textarea
91
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'choices' ) ); ?>"
92
- class="widefat"
93
- rows="5" /><?php echo esc_textarea( "\n" . $this->get( 'choices' ) ); ?></textarea>
94
- <?php esc_html_e( 'If you want to separate the key and the value, enter as follows: key => value', 'smart-custom-fields' ); ?>
95
- </td>
96
- </tr>
97
- <tr>
98
- <th><?php esc_html_e( 'Display Direction', 'smart-custom-fields' ); ?></th>
99
- <td>
100
- <?php
101
- $directions = array(
102
- 'horizontal' => __( 'horizontal', 'smart-custom-fields' ),
103
- 'vertical' => __( 'vertical' , 'smart-custom-fields' ),
104
- );
105
- foreach ( $directions as $key => $value ) {
106
- printf(
107
- '<label><input type="radio" name="%s" value="%s" %s /> %s</label>&nbsp;&nbsp;&nbsp;',
108
- esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'radio_direction' ) ),
109
- esc_attr( $key ),
110
- checked( $this->get( 'radio_direction' ), $key, false ),
111
- esc_html( $value )
112
- );
113
- }
114
- ?>
115
- </td>
116
- </tr>
117
- <tr>
118
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
119
- <td>
120
- <input type="text"
121
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
122
- class="widefat"
123
- value="<?php echo esc_attr( $this->get( 'default' ) ); ?>" />
124
- </td>
125
- </tr>
126
- <tr>
127
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
128
- <td>
129
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
130
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
131
- </td>
132
- </tr>
133
- <tr>
134
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
135
- <td>
136
- <input type="text"
137
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
138
- class="widefat"
139
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
140
- />
141
- </td>
142
- </tr>
143
- <?php
144
- }
145
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-related-posts.php DELETED
@@ -1,300 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Related_Posts
4
- * Version : 1.4.1
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Related_Posts extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
20
- add_action( 'wp_ajax_smart-cf-relational-posts-search', array( $this, 'relational_posts_search' ) );
21
- add_filter( 'smart-cf-validate-get-value', array( $this, 'validate_get_value' ), 10, 2 );
22
- return array(
23
- 'type' => 'relation',
24
- 'display-name' => __( 'Related Posts', 'smart-custom-fields' ),
25
- 'optgroup' => 'other-fields',
26
- 'allow-multiple-data' => true,
27
- );
28
- }
29
-
30
- /**
31
- * Set the non required items
32
- *
33
- * @return array
34
- */
35
- protected function options() {
36
- return array(
37
- 'post-type' => '',
38
- 'limit' => 0,
39
- 'instruction' => '',
40
- 'notes' => '',
41
- );
42
- }
43
-
44
- /**
45
- * Loading resources
46
- *
47
- * @param string $hook
48
- */
49
- public function admin_enqueue_scripts( $hook ) {
50
- wp_enqueue_script(
51
- SCF_Config::PREFIX . 'editor-relation-common',
52
- plugins_url( SCF_Config::NAME ) . '/js/editor-relation-common.js',
53
- array( 'jquery' ),
54
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-common.js' ) ),
55
- true
56
- );
57
-
58
- wp_enqueue_script(
59
- SCF_Config::PREFIX . 'editor-relation-post-types',
60
- plugins_url( SCF_Config::NAME ) . '/js/editor-relation-post-types.js',
61
- array( 'jquery' ),
62
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-post-types.js' ) ),
63
- true
64
- );
65
-
66
- wp_localize_script( SCF_Config::PREFIX . 'editor-relation-post-types', 'smart_cf_relation_post_types', array(
67
- 'endpoint' => admin_url( 'admin-ajax.php' ),
68
- 'action' => SCF_Config::PREFIX . 'relational-posts-search',
69
- 'nonce' => wp_create_nonce( SCF_Config::NAME . '-relation-post-types' )
70
- ) );
71
- }
72
-
73
- /**
74
- * Process that loading post when clicking post load button
75
- */
76
- public function relational_posts_search() {
77
- check_ajax_referer( SCF_Config::NAME . '-relation-post-types', 'nonce' );
78
- $_posts = array();
79
- $args = array();
80
- if ( isset( $_POST['post_types'] ) ) {
81
- $post_type = explode( ',', $_POST['post_types'] );
82
- $args = array(
83
- 'post_type' => $post_type,
84
- 'order' => 'ASC',
85
- 'orderby' => 'ID',
86
- 'posts_per_page' => -1,
87
- 'post_status' => 'any',
88
- );
89
-
90
- if ( isset( $_POST['click_count'] ) ) {
91
- $posts_per_page = get_option( 'posts_per_page' );
92
- $offset = $_POST['click_count'] * $posts_per_page;
93
- $args = array_merge(
94
- $args,
95
- array(
96
- 'offset' => $offset,
97
- 'posts_per_page' => $posts_per_page,
98
- )
99
- );
100
- }
101
-
102
- if ( isset( $_POST['s'] ) ) {
103
- $args = array_merge(
104
- $args,
105
- array(
106
- 's' => $_POST['s'],
107
- )
108
- );
109
- }
110
- $_posts = get_posts( $args );
111
- }
112
- header( 'Content-Type: application/json; charset=utf-8' );
113
- echo json_encode( $_posts );
114
- die();
115
- }
116
-
117
- /**
118
- * Getting the field
119
- *
120
- * @param int $index
121
- * @param array $value
122
- * @return string html
123
- */
124
- public function get_field( $index, $value ) {
125
- $name = $this->get_field_name_in_editor( $index );
126
- $disabled = $this->get_disable_attribute( $index );
127
- $post_type = $this->get( 'post-type' );
128
- $limit = $this->get( 'limit' );
129
- if ( ! $post_type ) {
130
- $post_type = array( 'post' );
131
- }
132
- if ( ! preg_match( '/^\d+$/', $limit ) ) {
133
- $limit = '';
134
- }
135
- $posts_per_page = get_option( 'posts_per_page' );
136
-
137
- // choicse
138
- $choices_posts = get_posts( array(
139
- 'post_type' => $post_type,
140
- 'order' => 'ASC',
141
- 'orderby' => 'ID',
142
- 'posts_per_page' => $posts_per_page,
143
- 'post_status' => 'any',
144
- ) );
145
- $choices_li = array();
146
- foreach ( $choices_posts as $_post ) {
147
- $post_title = get_the_title( $_post->ID );
148
- if ( empty( $post_title ) ) {
149
- $post_title = '&nbsp;';
150
- }
151
- $choices_li[] = sprintf(
152
- '<li data-id="%d" data-status="%s">%s</li>',
153
- $_post->ID,
154
- $_post->post_status,
155
- $post_title
156
- );
157
- }
158
-
159
- // selected
160
- $selected_posts = array();
161
- if ( !empty( $value ) && is_array( $value ) ) {
162
- foreach ( $value as $post_id ) {
163
- $post_title = get_the_title( $post_id );
164
- if ( empty( $post_title ) ) {
165
- $post_title = '&nbsp;';
166
- }
167
- $selected_posts[$post_id] = $post_title;
168
- }
169
- }
170
- $selected_li = array();
171
- $hidden = array();
172
- foreach ( $selected_posts as $post_id => $post_title ) {
173
- $selected_li[] = sprintf(
174
- '<li data-id="%d" data-status="%s"><span class="%s"></span>%s<span class="relation-remove">-</li></li>',
175
- $post_id,
176
- get_post_status( $post_id ),
177
- esc_attr( SCF_Config::PREFIX . 'icon-handle dashicons dashicons-menu' ),
178
- $post_title
179
- );
180
- $hidden[] = sprintf(
181
- '<input type="hidden" name="%s" value="%d" %s />',
182
- esc_attr( $name . '[]' ),
183
- $post_id,
184
- disabled( true, $disabled, false )
185
- );
186
- }
187
-
188
- $hide_class = '';
189
- if ( count( $choices_li ) < $posts_per_page ) {
190
- $hide_class = 'hide';
191
- }
192
-
193
- return sprintf(
194
- '<div class="%s" data-post-types="%s" data-limit="%d">
195
- <div class="%s">
196
- <input type="text" class="widefat search-input search-input-post-types" name="search-input" placeholder="%s" />
197
- </div>
198
- <div class="%s">
199
- <ul>%s</ul>
200
- <p class="load-relation-items load-relation-post-types %s">%s</p>
201
- <input type="hidden" name="%s" %s />
202
- %s
203
- </div>
204
- </div>
205
- <div class="%s"><ul>%s</ul></div>
206
- <div class="clear"></div>',
207
- SCF_Config::PREFIX . 'relation-left',
208
- implode( ',', $post_type ),
209
- $limit,
210
- SCF_Config::PREFIX . 'search',
211
- esc_attr__( 'Search...', 'smart-custom-fields' ),
212
- SCF_Config::PREFIX . 'relation-children-select',
213
- implode( '', $choices_li ),
214
- $hide_class,
215
- esc_html__( 'Load more', 'smart-custom-fields' ),
216
- esc_attr( $name ),
217
- disabled( true, $disabled, false ),
218
- implode( '', $hidden ),
219
- SCF_Config::PREFIX . 'relation-right',
220
- implode( '', $selected_li )
221
- );
222
- }
223
-
224
- /**
225
- * Displaying the option fields in custom field settings page
226
- *
227
- * @param int $group_key
228
- * @param int $field_key
229
- */
230
- public function display_field_options( $group_key, $field_key ) {
231
- $this->display_name_option( $group_key, $field_key );
232
- $this->display_label_option( $group_key, $field_key );
233
- ?>
234
- <tr>
235
- <th><?php esc_html_e( 'Post Types', 'smart-custom-fields' ); ?></th>
236
- <td>
237
- <?php
238
- $post_types = get_post_types( array(
239
- 'show_ui' => true,
240
- ), 'objects' );
241
- unset( $post_types['attachment'] );
242
- unset( $post_types[SCF_Config::NAME] );
243
- ?>
244
- <?php foreach ( $post_types as $post_type => $post_type_object ) : ?>
245
- <?php
246
- $save_post_types = $this->get( 'post-type' );
247
- $checked = ( is_array( $save_post_types ) && in_array( $post_type, $save_post_types ) ) ? 'checked="checked"' : ''; ?>
248
- <input type="checkbox"
249
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'post-type' ) ); ?>[]"
250
- value="<?php echo esc_attr( $post_type ); ?>"
251
- <?php echo $checked; ?> /><?php echo esc_html( $post_type_object->labels->singular_name ); ?>
252
- <?php endforeach; ?>
253
- </td>
254
- </tr>
255
- <tr>
256
- <th><?php esc_html_e( 'Selectable number', 'smart-custom-fields' ); ?></th>
257
- <td>
258
- <input type="number"
259
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'limit' ) ); ?>"
260
- value="<?php echo esc_attr( $this->get( 'limit' ) ); ?>" min="1" step="1" />
261
- </td>
262
- </tr>
263
- <tr>
264
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
265
- <td>
266
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
267
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
268
- </td>
269
- </tr>
270
- <tr>
271
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
272
- <td>
273
- <input type="text"
274
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
275
- class="widefat"
276
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
277
- />
278
- </td>
279
- </tr>
280
- <?php
281
- }
282
-
283
- /**
284
- * Validating when displaying meta data
285
- *
286
- * @param array $value
287
- * @param string $field_type
288
- * @return array
289
- */
290
- public function validate_get_value( $value, $field_type ) {
291
- if ( $field_type === $this->get_attribute( 'type' ) ) {
292
- $validated_value = array();
293
- foreach ( $value as $post_id ) {
294
- $validated_value[] = $post_id;
295
- }
296
- $value = $validated_value;
297
- }
298
- return $value;
299
- }
300
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-related-terms.php DELETED
@@ -1,296 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Related_Terms
4
- * Version : 1.5.1
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 04, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Related_Terms extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
20
- add_action( 'wp_ajax_smart-cf-relational-terms-search', array( $this, 'relational_terms_search' ) );
21
- add_filter( 'smart-cf-validate-get-value', array( $this, 'validate_get_value' ), 10, 2 );
22
- return array(
23
- 'type' => 'taxonomy',
24
- 'display-name' => __( 'Related Terms', 'smart-custom-fields' ),
25
- 'optgroup' => 'other-fields',
26
- 'allow-multiple-data' => true,
27
- );
28
- }
29
-
30
- /**
31
- * Set the non required items
32
- *
33
- * @return array
34
- */
35
- protected function options() {
36
- return array(
37
- 'taxonomy' => '',
38
- 'limit' => 0,
39
- 'instruction' => '',
40
- 'notes' => '',
41
- );
42
- }
43
-
44
- /**
45
- * Loading resources
46
- *
47
- * @param string $hook
48
- */
49
- public function admin_enqueue_scripts( $hook ) {
50
- wp_enqueue_script(
51
- SCF_Config::PREFIX . 'editor-relation-common',
52
- plugins_url( SCF_Config::NAME ) . '/js/editor-relation-common.js',
53
- array( 'jquery' ),
54
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-common.js' ) ),
55
- true
56
- );
57
-
58
- wp_enqueue_script(
59
- SCF_Config::PREFIX . 'editor-relation-taxonomies',
60
- plugins_url( SCF_Config::NAME ) . '/js/editor-relation-taxonomies.js',
61
- array( 'jquery' ),
62
- filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-taxonomies.js' ) ),
63
- true
64
- );
65
-
66
- wp_localize_script( SCF_Config::PREFIX . 'editor-relation-taxonomies', 'smart_cf_relation_taxonomies', array(
67
- 'endpoint' => admin_url( 'admin-ajax.php' ),
68
- 'action' => SCF_Config::PREFIX . 'relational-terms-search',
69
- 'nonce' => wp_create_nonce( SCF_Config::NAME . '-relation-taxonomies' )
70
- ) );
71
- }
72
-
73
- /**
74
- * Process that loading post when clicking post load button
75
- */
76
- public function relational_terms_search() {
77
- check_ajax_referer( SCF_Config::NAME . '-relation-taxonomies', 'nonce' );
78
- $_terms = array();
79
- $args = array();
80
- if ( isset( $_POST['taxonomies'] ) ) {
81
- $taxonomies = explode( ',', $_POST['taxonomies'] );
82
- $args = array(
83
- 'order' => 'ASC',
84
- 'orderby' => 'ID',
85
- 'number' => '',
86
- 'hide_empty' => false,
87
- 'hierarchical' => false,
88
- );
89
-
90
- if ( isset( $_POST['click_count'] ) ) {
91
- $number = get_option( 'posts_per_page' );
92
- $offset = $_POST['click_count'] * $number;
93
- $args = array_merge(
94
- $args,
95
- array(
96
- 'offset' => $offset,
97
- 'number' => $number,
98
- )
99
- );
100
- }
101
-
102
- if ( isset( $_POST['search'] ) ) {
103
- $args = array_merge(
104
- $args,
105
- array(
106
- 'search' => $_POST['search'],
107
- )
108
- );
109
- }
110
- $_terms = get_terms( $taxonomies, $args );
111
- }
112
- header( 'Content-Type: application/json; charset=utf-8' );
113
- echo json_encode( $_terms );
114
- die();
115
- }
116
-
117
- /**
118
- * Getting the field
119
- *
120
- * @param int $index
121
- * @param array $value
122
- * @return string html
123
- */
124
- public function get_field( $index, $value ) {
125
- $name = $this->get_field_name_in_editor( $index );
126
- $disabled = $this->get_disable_attribute( $index );
127
- $taxonomies = $this->get( 'taxonomy' );
128
- $limit = $this->get( 'limit' );
129
- if ( ! $taxonomies ) {
130
- $taxonomies = array( 'category' );
131
- }
132
- if ( ! preg_match( '/^\d+$/', $limit ) ) {
133
- $limit = '';
134
- }
135
- $number = get_option( 'posts_per_page' );
136
-
137
- // choicse
138
- $choices_terms = get_terms( $taxonomies, array(
139
- 'order' => 'ASC',
140
- 'orderby' => 'ID',
141
- 'hide_empty' => false,
142
- 'hierarchical' => false,
143
- 'number' => $number,
144
- ) );
145
- $choices_li = array();
146
- foreach ( $choices_terms as $_term ) {
147
- $term_name = $_term->name;
148
- if ( empty( $term_name ) ) {
149
- $term_name = '&nbsp;';
150
- }
151
- $choices_li[] = sprintf(
152
- '<li data-id="%d">%s</li>',
153
- $_term->term_id,
154
- $term_name
155
- );
156
- }
157
-
158
- // selected
159
- $selected_terms = array();
160
- if ( !empty( $value ) && is_array( $value ) ) {
161
- foreach ( $value as $term_id ) {
162
- $term_name = get_term( $term_id )->name;
163
- if ( empty( $term_name ) ) {
164
- $term_name = '&nbsp;';
165
- }
166
- $selected_terms[$term_id] = $term_name;
167
- }
168
- }
169
- $selected_li = array();
170
- $hidden = array();
171
- foreach ( $selected_terms as $term_id => $term_name ) {
172
- $selected_li[] = sprintf(
173
- '<li data-id="%d"><span class="%s"></span>%s<span class="relation-remove">-</li></li>',
174
- $term_id,
175
- esc_attr( SCF_Config::PREFIX . 'icon-handle dashicons dashicons-menu' ),
176
- $term_name
177
- );
178
- $hidden[] = sprintf(
179
- '<input type="hidden" name="%s" value="%d" %s />',
180
- esc_attr( $name . '[]' ),
181
- $term_id,
182
- disabled( true, $disabled, false )
183
- );
184
- }
185
-
186
- $hide_class = '';
187
- if ( count( $choices_li ) < $number ) {
188
- $hide_class = 'hide';
189
- }
190
-
191
- return sprintf(
192
- '<div class="%s" data-taxonomies="%s" data-limit="%d">
193
- <div class="%s">
194
- <input type="text" class="widefat search-input search-input-terms" name="search-input" placeholder="%s" />
195
- </div>
196
- <div class="%s">
197
- <ul>%s</ul>
198
- <p class="load-relation-items load-relation-terms %s">%s</p>
199
- <input type="hidden" name="%s" %s />
200
- %s
201
- </div>
202
- </div>
203
- <div class="%s"><ul>%s</ul></div>
204
- <div class="clear"></div>',
205
- SCF_Config::PREFIX . 'relation-left',
206
- implode( ',', $taxonomies ),
207
- $limit,
208
- SCF_Config::PREFIX . 'search',
209
- esc_attr__( 'Search...', 'smart-custom-fields' ),
210
- SCF_Config::PREFIX . 'relation-children-select',
211
- implode( '', $choices_li ),
212
- $hide_class,
213
- esc_html__( 'Load more', 'smart-custom-fields' ),
214
- esc_attr( $name ),
215
- disabled( true, $disabled, false ),
216
- implode( '', $hidden ),
217
- SCF_Config::PREFIX . 'relation-right',
218
- implode( '', $selected_li )
219
- );
220
- }
221
-
222
- /**
223
- * Displaying the option fields in custom field settings page
224
- *
225
- * @param int $group_key
226
- * @param int $field_key
227
- */
228
- public function display_field_options( $group_key, $field_key ) {
229
- $this->display_name_option( $group_key, $field_key );
230
- $this->display_label_option( $group_key, $field_key );
231
- ?>
232
- <tr>
233
- <th><?php esc_html_e( 'Taxonomies', 'smart-custom-fields' ); ?></th>
234
- <td>
235
- <?php
236
- $tasonomies = get_taxonomies( array(
237
- 'show_ui' => true,
238
- ), 'objects' );
239
- ?>
240
- <?php foreach ( $tasonomies as $taxonomy => $taxonomy_object ) : ?>
241
- <?php
242
- $save_taxonomies = $this->get( 'taxonomy' );
243
- $checked = ( is_array( $save_taxonomies ) && in_array( $taxonomy, $save_taxonomies ) ) ? 'checked="checked"' : ''; ?>
244
- <input type="checkbox"
245
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'taxonomy' ) ); ?>[]"
246
- value="<?php echo esc_attr( $taxonomy ); ?>"
247
- <?php echo $checked; ?> /><?php echo esc_html( $taxonomy_object->labels->singular_name ); ?>
248
- <?php endforeach; ?>
249
- </td>
250
- </tr>
251
- <tr>
252
- <th><?php esc_html_e( 'Selectable number', 'smart-custom-fields' ); ?></th>
253
- <td>
254
- <input type="number"
255
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'limit' ) ); ?>"
256
- value="<?php echo esc_attr( $this->get( 'limit' ) ); ?>" min="1" step="1" />
257
- </td>
258
- </tr>
259
- <tr>
260
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
261
- <td>
262
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
263
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
264
- </td>
265
- </tr>
266
- <tr>
267
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
268
- <td>
269
- <input type="text"
270
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
271
- class="widefat"
272
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
273
- />
274
- </td>
275
- </tr>
276
- <?php
277
- }
278
-
279
- /**
280
- * Validating when displaying meta data
281
- *
282
- * @param array $value
283
- * @param string $field_type
284
- * @return array
285
- */
286
- public function validate_get_value( $value, $field_type ) {
287
- if ( $field_type === $this->get_attribute( 'type' ) ) {
288
- $validated_value = array();
289
- foreach ( $value as $term ) {
290
- $validated_value[] = $term;
291
- }
292
- $value = $validated_value;
293
- }
294
- return $value;
295
- }
296
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-select.php DELETED
@@ -1,120 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Select
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Select extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'select',
21
- 'display-name' => __( 'Select', 'smart-custom-fields' ),
22
- 'optgroup' => 'select-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'choices' => '',
34
- 'default' => '',
35
- 'instruction' => '',
36
- 'notes' => '',
37
- );
38
- }
39
-
40
- /**
41
- * Getting the field
42
- *
43
- * @param int $index
44
- * @param string $value
45
- * @return string html
46
- */
47
- public function get_field( $index, $value ) {
48
- $name = $this->get_field_name_in_editor( $index );
49
- $disabled = $this->get_disable_attribute( $index );
50
- $choices = SCF::choices_eol_to_array( $this->get( 'choices' ) );
51
-
52
- $form_field = '';
53
- foreach ( $choices as $key => $choice ) {
54
- $choice = trim( $choice );
55
- if ( !SCF::is_assoc( $choices ) ) {
56
- $key = $choice;
57
- }
58
- $form_field .= sprintf( '<option value="%1$s" %2$s>%3$s</option>',
59
- esc_attr( $key ),
60
- selected( $value, $key, false ),
61
- esc_html( $choice )
62
- );
63
- }
64
- return sprintf(
65
- '<select name="%s" %s>%s</select>',
66
- esc_attr( $name ),
67
- disabled( true, $disabled, false ),
68
- $form_field
69
- );
70
- }
71
-
72
- /**
73
- * Displaying the option fields in custom field settings page
74
- *
75
- * @param int $group_key
76
- * @param int $field_key
77
- */
78
- public function display_field_options( $group_key, $field_key ) {
79
- $this->display_name_option( $group_key, $field_key );
80
- $this->display_label_option( $group_key, $field_key );
81
- ?>
82
- <tr>
83
- <th><?php esc_html_e( 'Choices', 'smart-custom-fields' ); ?></th>
84
- <td>
85
- <textarea
86
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'choices' ) ); ?>"
87
- class="widefat"
88
- rows="5" /><?php echo esc_textarea( "\n" . $this->get( 'choices' ) ); ?></textarea>
89
- <?php esc_html_e( 'If you want to separate the key and the value, enter as follows: key => value', 'smart-custom-fields' ); ?>
90
- </td>
91
- </tr>
92
- <tr>
93
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
94
- <td>
95
- <input type="text"
96
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
97
- class="widefat"
98
- value="<?php echo esc_attr( $this->get( 'default' ) ); ?>" />
99
- </td>
100
- </tr>
101
- <tr>
102
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
103
- <td>
104
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
105
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
106
- </td>
107
- </tr>
108
- <tr>
109
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
110
- <td>
111
- <input type="text"
112
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
113
- class="widefat"
114
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
115
- />
116
- </td>
117
- </tr>
118
- <?php
119
- }
120
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-text.php DELETED
@@ -1,95 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Text
4
- * Version : 1.2.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Text extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'text',
21
- 'display-name' => __( 'Text', 'smart-custom-fields' ),
22
- 'optgroup' => 'basic-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'default' => '',
34
- 'instruction' => '',
35
- 'notes' => '',
36
- );
37
- }
38
-
39
- /**
40
- * Getting the field
41
- *
42
- * @param int $index
43
- * @param string $value
44
- * @return string html
45
- */
46
- public function get_field( $index, $value ) {
47
- $name = $this->get_field_name_in_editor( $index );
48
- $disabled = $this->get_disable_attribute( $index );
49
- return sprintf(
50
- '<input type="text" name="%s" value="%s" class="widefat" %s />',
51
- esc_attr( $name ),
52
- esc_attr( $value ),
53
- disabled( true, $disabled, false )
54
- );
55
- }
56
-
57
- /**
58
- * Displaying the option fields in custom field settings page
59
- *
60
- * @param int $group_key
61
- * @param int $field_key
62
- */
63
- public function display_field_options( $group_key, $field_key ) {
64
- $this->display_name_option( $group_key, $field_key );
65
- $this->display_label_option( $group_key, $field_key );
66
- ?>
67
- <tr>
68
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
69
- <td>
70
- <input type="text"
71
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
72
- class="widefat"
73
- value="<?php echo esc_attr( $this->get( 'default' ) ); ?>" />
74
- </td>
75
- </tr>
76
- <tr>
77
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
78
- <td>
79
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
80
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
81
- </td>
82
- </tr>
83
- <tr>
84
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
85
- <td>
86
- <input type="text"
87
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
88
- class="widefat"
89
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
90
- />
91
- </td>
92
- </tr>
93
- <?php
94
- }
95
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-textarea.php DELETED
@@ -1,108 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Textarea
4
- * Version : 1.3.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Textarea extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- return array(
20
- 'type' => 'textarea',
21
- 'display-name' => __( 'Textarea', 'smart-custom-fields' ),
22
- 'optgroup' => 'basic-fields',
23
- );
24
- }
25
-
26
- /**
27
- * Set the non required items
28
- *
29
- * @return array
30
- */
31
- protected function options() {
32
- return array(
33
- 'rows' => 5,
34
- 'default' => '',
35
- 'instruction' => '',
36
- 'notes' => '',
37
- );
38
- }
39
-
40
- /**
41
- * Getting the field
42
- *
43
- * @param int $index
44
- * @param string $value
45
- * @return string html
46
- */
47
- public function get_field( $index, $value ) {
48
- $name = $this->get_field_name_in_editor( $index );
49
- $disabled = $this->get_disable_attribute( $index );
50
- $rows = $this->get( 'rows' );
51
- return sprintf(
52
- '<textarea name="%s" rows="%d" class="widefat" %s>%s</textarea>',
53
- esc_attr( $name ),
54
- esc_attr( $rows ),
55
- disabled( true, $disabled, false ),
56
- $value
57
- );
58
- }
59
-
60
- /**
61
- * Displaying the option fields in custom field settings page
62
- *
63
- * @param int $group_key
64
- * @param int $field_key
65
- */
66
- public function display_field_options( $group_key, $field_key ) {
67
- $this->display_name_option( $group_key, $field_key );
68
- $this->display_label_option( $group_key, $field_key );
69
- ?>
70
- <tr>
71
- <th><?php esc_html_e( 'Rows', 'smart-custom-fields' ); ?></th>
72
- <td>
73
- <input type="number"
74
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'rows' ) ); ?>"
75
- min="3"
76
- value="<?php echo esc_attr( $this->get( 'rows' ) ); ?>"
77
- />
78
- </td>
79
- </tr>
80
- <tr>
81
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
82
- <td>
83
- <textarea
84
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
85
- class="widefat"
86
- rows="5"><?php echo esc_textarea( "\n" . $this->get( 'default' ) ); ?></textarea>
87
- </td>
88
- </tr>
89
- <tr>
90
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
91
- <td>
92
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
93
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
94
- </td>
95
- </tr>
96
- <tr>
97
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
98
- <td>
99
- <input type="text"
100
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
101
- class="widefat"
102
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
103
- />
104
- </td>
105
- </tr>
106
- <?php
107
- }
108
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/fields/class.field-wysiwyg.php DELETED
@@ -1,216 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Wysiwyg
4
- * Version : 1.2.0
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 4, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Field_Wysiwyg extends Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Set the required items
15
- *
16
- * @return array
17
- */
18
- protected function init() {
19
- add_action(
20
- SCF_Config::PREFIX . 'before-editor-enqueue-scripts',
21
- array( $this, 'editor_enqueue_scripts' )
22
- );
23
- add_filter( 'smart-cf-validate-get-value', array( $this, 'validate_get_value' ), 10, 2 );
24
- return array(
25
- 'type' => 'wysiwyg',
26
- 'display-name' => __( 'Wysiwyg', 'smart-custom-fields' ),
27
- 'optgroup' => 'content-fields',
28
- );
29
- }
30
-
31
- /**
32
- * Set the non required items
33
- *
34
- * @return array
35
- */
36
- protected function options() {
37
- return array(
38
- 'default' => '',
39
- 'instruction' => '',
40
- 'notes' => '',
41
- );
42
- }
43
-
44
- /**
45
- * Loading js after loading TinyMCE in editor page
46
- */
47
- public function editor_enqueue_scripts() {
48
- add_action( 'after_wp_tiny_mce', array( $this, 'after_wp_tiny_mce' ) );
49
- }
50
- public function after_wp_tiny_mce() {
51
- printf(
52
- '<script type="text/javascript" src="%s"></script>',
53
- plugins_url( SCF_Config::NAME ) . '/js/editor-wysiwyg.js'
54
- );
55
- }
56
-
57
- /**
58
- * Processing to be executed immediately after the field initialization
59
- * If not exec this, taxonomy and profile wysiwyg has js error.
60
- */
61
- protected function after_loaded() {
62
- add_action( 'admin_footer', array( $this, 'admin_footer' ) );
63
- }
64
- public function admin_footer() {
65
- ?>
66
- <div style="display:none;">
67
- <?php wp_editor( '', SCF_Config::PREFIX . 'wysiwyg-base' ); ?>
68
- </div>
69
- <?php
70
- }
71
-
72
- /**
73
- * Getting the field
74
- *
75
- * @param int $index
76
- * @param string $value
77
- * @return string html
78
- */
79
- public function get_field( $index, $value ) {
80
- $name = $this->get_field_name_in_editor( $index );
81
- $wysiwyg_id = str_replace( array( '[', ']', '-' ), '_', $name );
82
- $disabled = $this->get_disable_attribute( $index );
83
- if ( function_exists( 'format_for_editor' ) ) {
84
- $value = format_for_editor( $value );
85
- } else {
86
- $value = wp_richedit_pre( $value );
87
- }
88
- return sprintf(
89
- '<div class="wp-core-ui wp-editor-wrap tmce-active">
90
- <div class="wp-editor-tools hide-if-no-js">
91
- <div class="wp-media-buttons">%1$s</div>
92
- <div class="wp-editor-tabs">
93
- <button type="button" id="%2$s-tmce" class="smart-cf-switch-editor wp-switch-editor switch-tmce" data-wp-editor-id="%2$s">%6$s</button>
94
- <button type="button" id="%2$s-html" class="smart-cf-switch-editor wp-switch-editor switch-html" data-wp-editor-id="%2$s">%7$s</button>
95
- </div>
96
- </div>
97
- <div class="wp-editor-container">
98
- <div id="qt_%2$s_toolbar" class="quicktags-toolbar"></div>
99
- <textarea name="%3$s" rows="8" class="widefat wp-editor-area smart-cf-wp-editor" %4$s>%5$s</textarea>
100
- </div>
101
- </div>',
102
- $this->media_buttons( $wysiwyg_id ),
103
- esc_attr( $wysiwyg_id ),
104
- esc_attr( $name ),
105
- disabled( true, $disabled, false ),
106
- $value,
107
- esc_html__( 'Visual', 'smart-custom-fields' ),
108
- esc_html__( 'Text', 'smart-custom-fields' )
109
-
110
- );
111
- }
112
-
113
- /**
114
- * Displaying the option fields in custom field settings page
115
- *
116
- * @param int $group_key
117
- * @param int $field_key
118
- */
119
- public function display_field_options( $group_key, $field_key ) {
120
- $this->display_name_option( $group_key, $field_key );
121
- $this->display_label_option( $group_key, $field_key );
122
- ?>
123
- <tr>
124
- <th><?php esc_html_e( 'Default', 'smart-custom-fields' ); ?></th>
125
- <td>
126
- <textarea
127
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>"
128
- class="widefat"
129
- rows="5"><?php echo esc_textarea( "\n" . $this->get( 'default' ) ); ?></textarea>
130
- </td>
131
- </tr>
132
- <tr>
133
- <th><?php esc_html_e( 'Instruction', 'smart-custom-fields' ); ?></th>
134
- <td>
135
- <textarea name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'instruction' ) ); ?>"
136
- class="widefat" rows="5"><?php echo esc_attr( $this->get( 'instruction' ) ); ?></textarea>
137
- </td>
138
- </tr>
139
- <tr>
140
- <th><?php esc_html_e( 'Notes', 'smart-custom-fields' ); ?></th>
141
- <td>
142
- <input type="text"
143
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'notes' ) ); ?>"
144
- class="widefat"
145
- value="<?php echo esc_attr( $this->get( 'notes' ) ); ?>"
146
- />
147
- </td>
148
- </tr>
149
- <?php
150
- }
151
-
152
- /**
153
- * Return the media button
154
- *
155
- * @param string $editor_id
156
- * @return string
157
- */
158
- protected function media_buttons( $editor_id = 'content' ) {
159
- $img = '<span class="wp-media-buttons-icon"></span> ';
160
- return sprintf( '<a href="#" class="button insert-media add_media" data-editor="%s" title="%s">%s</a>',
161
- esc_attr( $editor_id ),
162
- esc_attr__( 'Add Media' ),
163
- $img . __( 'Add Media' )
164
- );
165
- }
166
-
167
- /**
168
- * Validating when displaying meta data
169
- *
170
- * @param mixed $value
171
- * @param string $field_type
172
- * @return string|array
173
- */
174
- public function validate_get_value( $value, $field_type ) {
175
- if ( $field_type === $this->get_attribute( 'type' ) ) {
176
- if ( is_array( $value ) ) {
177
- $validated_value = array();
178
- foreach ( $value as $k => $v ) {
179
- $validated_value[$k] = $this->add_the_content_filter( $v );
180
- }
181
- $value = $validated_value;
182
- } else {
183
- $value = $this->add_the_content_filter( $value );
184
- }
185
- }
186
- return $value;
187
- }
188
-
189
- /**
190
- * Hooking functions that is hooked to the_content
191
- *
192
- * @param string $value
193
- * @return string
194
- */
195
- protected function add_the_content_filter( $value ) {
196
- if ( has_filter( 'the_content', 'wptexturize' ) ) {
197
- $value = wptexturize( $value );
198
- }
199
- if ( has_filter( 'the_content', 'convert_smilies' ) ) {
200
- $value = convert_smilies( $value );
201
- }
202
- if ( has_filter( 'the_content', 'convert_chars' ) ) {
203
- $value = convert_chars( $value );
204
- }
205
- if ( has_filter( 'the_content', 'wpautop' ) ) {
206
- $value = wpautop( $value );
207
- }
208
- if ( has_filter( 'the_content', 'shortcode_unautop' ) ) {
209
- $value = shortcode_unautop( $value );
210
- }
211
- if ( has_filter( 'the_content', 'prepend_attachment' ) ) {
212
- $value = prepend_attachment( $value );
213
- }
214
- return $value;
215
- }
216
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.abstract-field-base.php DELETED
@@ -1,250 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Field_Base
4
- * Version : 1.1.1
5
- * Author : inc2734
6
- * Created : October 7, 2014
7
- * Modified : June 2, 2018
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- abstract class Smart_Custom_Fields_Field_Base {
12
-
13
- /**
14
- * Internal attribute value of this field
15
- * @var array
16
- */
17
- protected $attributes = array(
18
- 'type' => '', // eg. text
19
- 'display-name' => '', // eg. Text
20
- 'optgroup' => 'other-fields',
21
- 'allow-multiple-data' => false,
22
- 'layout' => 'default', // or "full-width" (new attribute to choose layout type)
23
- );
24
-
25
- /**
26
- * Options of this field
27
- * @var array
28
- */
29
- protected $options = array(
30
- 'name' => '',
31
- 'label' => '',
32
- );
33
-
34
- /**
35
- * __construct
36
- */
37
- public function __construct() {
38
- $attributes = array_merge( $this->attributes, $this->init() );
39
- $options = array_merge( $this->options, $this->options() );
40
- if ( empty( $attributes['type'] ) || empty( $attributes['display-name'] ) ) {
41
- exit( 'This field object is invalid. Field object must have type and display-name attributes.' );
42
- }
43
- if ( empty( $attributes['optgroup'] ) ) {
44
- $attributes['optgroup'] = 'basic-fields';
45
- }
46
- $this->attributes = $attributes;
47
- $this->options = $options;
48
- add_filter(
49
- SCF_Config::PREFIX . 'field-select-' . $attributes['optgroup'],
50
- array( $this, 'field_select' )
51
- );
52
- $this->after_loaded();
53
-
54
- SCF::add_form_field_instance( $this );
55
- }
56
-
57
- /**
58
- * Set the required items
59
- *
60
- * @return array
61
- */
62
- abstract protected function init();
63
-
64
- /**
65
- * Set the non required items
66
- *
67
- * @return array
68
- */
69
- abstract protected function options();
70
-
71
- /**
72
- * Processing to be executed immediately after the field initialization
73
- */
74
- protected function after_loaded() {
75
- }
76
-
77
- /**
78
- * Getting the field
79
- *
80
- * @param int $index
81
- * @param mixed $value
82
- * @return string html
83
- */
84
- abstract public function get_field( $index, $value );
85
-
86
- /**
87
- * Adding the type of this field to fields selection in custom field settings page
88
- *
89
- * @param array $attributes List of fields that belong to the optgroup
90
- * @return array
91
- */
92
- public function field_select( $attributes ) {
93
- $attributes[$this->get_attribute( 'type' )] = $this->get_attribute( 'display-name' );
94
- return $attributes;
95
- }
96
-
97
- /**
98
- * Displaying the option fields in custom field settings page ( Common )
99
- *
100
- * @param int $group_key
101
- * @param int $field_key
102
- */
103
- public function display_options( $group_key, $field_key ) {
104
- $fields = SCF::get_form_field_instances();
105
- foreach ( $fields as $Field ) {
106
- if ( $Field->get_attribute( 'type' ) === $this->get_attribute( 'type' ) ) {
107
- foreach ( $this->options as $key => $value ) {
108
- $Field->set( $key, $value );
109
- }
110
- }
111
- $Field->_display_field_options( $group_key, $field_key );
112
- }
113
- }
114
-
115
- protected function display_name_option( $group_key, $field_key ) {
116
- ?>
117
- <tr>
118
- <th><?php esc_html_e( 'Name', 'smart-custom-fields' ); ?><span class="<?php echo esc_attr( SCF_Config::PREFIX . 'require' ); ?>">*</span></th>
119
- <td>
120
- <input type="text"
121
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'name' ) ); ?>"
122
- size="30"
123
- class="<?php echo esc_attr( SCF_Config::PREFIX . 'field-name' ); ?>"
124
- value="<?php echo esc_attr( $this->get( 'name' ) ); ?>"
125
- />
126
- </td>
127
- </tr>
128
- <?php
129
- }
130
-
131
- protected function display_label_option( $group_key, $field_key ) {
132
- ?>
133
- <tr>
134
- <th><?php esc_html_e( 'Label', 'smart-custom-fields' ); ?></th>
135
- <td>
136
- <input type="text"
137
- name="<?php echo esc_attr( $this->get_field_name_in_setting( $group_key, $field_key, 'label' ) ); ?>"
138
- size="30"
139
- class="<?php echo esc_attr( SCF_Config::PREFIX . 'field-label' ); ?>"
140
- value="<?php echo esc_attr( $this->get( 'label' ) ); ?>"
141
- />
142
- </td>
143
- </tr>
144
- <?php
145
- }
146
-
147
- /**
148
- * Displaying the option fields in custom field settings page ( original )
149
- *
150
- * @param int $group_key
151
- * @param int $field_key
152
- */
153
- abstract protected function display_field_options( $group_key, $field_key );
154
- public function _display_field_options( $group_key, $field_key ) {
155
- ?>
156
- <tr class="<?php echo esc_attr( SCF_Config::PREFIX . 'field-options' ); ?> <?php echo esc_attr( SCF_Config::PREFIX . 'field-options-' . $this->get_attribute( 'type' ) ); ?> hide">
157
- <td colspan="2">
158
- <table>
159
- <?php $this->display_field_options( $group_key, $field_key ); ?>
160
- </table>
161
- </td>
162
- </tr>
163
- <?php
164
- }
165
-
166
- /**
167
- * Getting the name attribute in editor page
168
- *
169
- * @param string $name
170
- * @param string $index
171
- * @return string
172
- */
173
- protected function get_field_name_in_editor( $index ) {
174
- return sprintf(
175
- '%s[%s][%s]',
176
- SCF_Config::NAME,
177
- $this->get( 'name' ),
178
- $index
179
- );
180
- }
181
-
182
- /**
183
- * Whether to disabled
184
- * Return true only when the null because data that all users have saved when $index is not null
185
- *
186
- * @param string $index
187
- * @return bool $disabled
188
- */
189
- protected function get_disable_attribute( $index ) {
190
- $disabled = false;
191
- if ( is_null( $index ) ) {
192
- $disabled = true;
193
- }
194
- return $disabled;
195
- }
196
-
197
- /**
198
- * Getting the name attribute in custom field settings page
199
- *
200
- * @param int $group_key
201
- * @param int $field_key
202
- * @param string $name
203
- * @return string
204
- */
205
- public function get_field_name_in_setting( $group_key, $field_key, $name ) {
206
- return sprintf(
207
- '%s[%s][fields][%s][%s]',
208
- SCF_Config::NAME,
209
- $group_key,
210
- $field_key,
211
- $name
212
- );
213
- }
214
-
215
- /**
216
- * Getting saved option value
217
- *
218
- * @param string $key key of the data
219
- * @return mixed
220
- */
221
- public function get( $key ) {
222
- if ( array_key_exists( $key, $this->options ) ) {
223
- return $this->options[$key];
224
- }
225
- }
226
-
227
- /**
228
- * Set option value
229
- *
230
- * @param string $key
231
- * @param mixed $value
232
- */
233
- public function set( $key, $value ) {
234
- if ( array_key_exists( $key, $this->options ) ) {
235
- $this->options[$key] = $value;
236
- }
237
- }
238
-
239
- /**
240
- * Getting the attribute value
241
- *
242
- * @param string $key
243
- * @return mixed
244
- */
245
- public function get_attribute( $key ) {
246
- if ( array_key_exists( $key, $this->attributes ) ) {
247
- return $this->attributes[$key];
248
- }
249
- }
250
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.ajax.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Ajax
4
- * Version : 1.2.0
5
- * Author : inc2734
6
- * Created : April 27, 2015
7
- * Modified : December 12, 2015
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Ajax {
12
-
13
- /**
14
- * Hooking the process that it want to fire when the ajax request.
15
- */
16
- public function __construct() {
17
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
18
- add_action( 'delete_term', array( $this, 'delete_term' ), 10, 4 );
19
- }
20
- }
21
-
22
- /**
23
- * Deleting term meta
24
- *
25
- * @param int $term_id
26
- * @param int $term_taxonomy_id
27
- * @param string $taxonomy
28
- * @param object $deleted_term
29
- */
30
- public function delete_term( $term_id, $term_taxonomy_id, $taxonomy, $deleted_term ) {
31
- $Meta = new Smart_Custom_Fields_Meta( $deleted_term );
32
- $Meta->delete_term_meta_for_wp43();
33
- }
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.cache.php DELETED
@@ -1,249 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Cache
4
- * Version : 1.0.0
5
- * Author : inc2734
6
- * Created : Mau 31, 2016
7
- * Modified :
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Cache {
12
-
13
- /**
14
- * Singleton instance
15
- * @var Smart_Custom_Fields_Cache
16
- */
17
- private static $instance;
18
-
19
- /**
20
- * Getting data proccesses is heavy. So saved getted data to $meta.
21
- * Using post_id as key.
22
- * @var array
23
- */
24
- protected $meta = array();
25
-
26
- /**
27
- * Getting data proccesses is heavy. So saved getted data to $settings_posts.
28
- * Using post_type as key.
29
- * @var array
30
- */
31
- protected $settings_posts = array();
32
-
33
- /**
34
- * Getting data proccesses is heavy. So saved getted data to $settings.
35
- * Using post_type as key.
36
- * @var array
37
- */
38
- protected $settings = array();
39
-
40
- /**
41
- * Getting data proccesses is heavy. So saved getted data to $repeat_multiple_data.
42
- * Using post_id as key.
43
- * @var array
44
- */
45
- protected $repeat_multiple_data = array();
46
-
47
- private function __construct() {}
48
-
49
- public static function getInstance() {
50
- if ( !self::$instance ) {
51
- self::$instance = new Smart_Custom_Fields_Cache();
52
- }
53
- return self::$instance;
54
- }
55
-
56
- /**
57
- * Clear all caches.
58
- */
59
- public function flush() {
60
- $this->clear_meta();
61
- $this->clear_settings_posts();
62
- $this->clear_settings();
63
- $this->clear_repeat_multiple_data();
64
- }
65
-
66
- /**
67
- * Saving to cache
68
- *
69
- * @param WP_Post|WP_User|WP_Term|stdClass $object
70
- * @param string $name
71
- * @param mixed $data
72
- */
73
- public function save_meta( $object, $name, $data ) {
74
- $Meta = new Smart_Custom_Fields_Meta( $object );
75
- $id = $Meta->get_id();
76
- $type = $Meta->get_type();
77
- $meta_type = $Meta->get_meta_type();
78
- if ( !empty( $id ) && !empty( $type ) && !empty( $meta_type ) ) {
79
- $this->meta[$meta_type . '_' . $type . '_' . $id][$name] = $data;
80
- }
81
- }
82
-
83
- /**
84
- * Getting the cache
85
- *
86
- * @param WP_Post|WP_User|WP_Term|stdClass $object
87
- * @param string $name
88
- * @return mixed
89
- */
90
- public function get_meta( $object, $name = null ) {
91
- $Meta = new Smart_Custom_Fields_Meta( $object );
92
- $id = $Meta->get_id();
93
- $type = $Meta->get_type();
94
- $meta_type = $Meta->get_meta_type();
95
- if ( !empty( $id ) && !empty( $type ) && !empty( $meta_type ) ) {
96
- if ( is_null( $name ) ) {
97
- if ( isset( $this->meta[$meta_type . '_' . $type . '_' . $id] ) ) {
98
- return $this->meta[$meta_type . '_' . $type . '_' . $id];
99
- }
100
- } else {
101
- if ( isset( $this->meta[$meta_type . '_' . $type . '_' . $id][$name] ) ) {
102
- return $this->meta[$meta_type . '_' . $type . '_' . $id][$name];
103
- }
104
- }
105
- }
106
- }
107
-
108
- /**
109
- * Clear caches
110
- */
111
- public function clear_meta() {
112
- $this->meta = array();
113
- }
114
-
115
- /**
116
- * Saving to cache that enabled custom field settings in the post type or the role or the term.
117
- *
118
- * @param WP_Post|WP_User|WP_Term|stdClass $object
119
- * @param array $settings_posts
120
- */
121
- public function save_settings_posts( $object, $settings_posts ) {
122
- $Meta = new Smart_Custom_Fields_Meta( $object );
123
- $type = $Meta->get_type( false );
124
- $meta_type = $Meta->get_meta_type();
125
- $this->settings_posts[$meta_type . '_' . $type] = $settings_posts;
126
- }
127
-
128
- /**
129
- * Getting cache that enabled custom field settings in the post type or the role or the term.
130
- *
131
- * @param WP_Post|WP_User|WP_Term|stdClass $object
132
- * @return array|null
133
- */
134
- public function get_settings_posts( $object ) {
135
- $Meta = new Smart_Custom_Fields_Meta( $object );
136
- $type = $Meta->get_type( false );
137
- $meta_type = $Meta->get_meta_type();
138
- if ( isset( $this->settings_posts[$meta_type . '_' . $type] ) ) {
139
- return $this->settings_posts[$meta_type . '_' . $type];
140
- }
141
- }
142
-
143
- /**
144
- * Clear the $settings_posts
145
- */
146
- public function clear_settings_posts() {
147
- $this->settings_posts = array();
148
- }
149
-
150
- /**
151
- * Saving the Setting object to cache
152
- *
153
- * @param int $settings_post_id
154
- * @param Smart_Custom_Fields_Setting $Setting
155
- * @param WP_Post|WP_User|WP_Term|stdClass $object
156
- */
157
- public function save_settings( $settings_post_id, $Setting, $object = null ) {
158
- if ( !is_null( $object ) ) {
159
- $Meta = new Smart_Custom_Fields_Meta( $object );
160
- $id = $Meta->get_id();
161
- $meta_type = $Meta->get_meta_type();
162
- }
163
- if ( !empty( $meta_type ) && !empty( $id ) ) {
164
- $this->settings[$settings_post_id][$meta_type . '_' . $id] = $Setting;
165
- } else {
166
- $this->settings[$settings_post_id][0] = $Setting;
167
- }
168
- }
169
-
170
- /**
171
- * Getting the Setting object cache
172
- * If there isn't the custom field settings ... null
173
- * If there is custom field settings
174
- * If there is no data for the specified $meta_type + $id
175
- * There is a thing of the General ... Smart_Custom_Fields_Setting
176
- * There isn't a thing of the General ... false
177
- * If there the data for the specified $meta_type + $id ... Smart_Custom_Fields_Setting
178
- *
179
- * @param int $settings_post_id
180
- * @param WP_Post|WP_User|WP_Term|stdClass $object
181
- * @return Smart_Custom_Fields_Setting|false|null
182
- */
183
- public function get_settings( $settings_post_id, $object = null ) {
184
- if ( !is_null( $object ) ) {
185
- $Meta = new Smart_Custom_Fields_Meta( $object );
186
- $id = $Meta->get_id();
187
- $meta_type = $Meta->get_meta_type();
188
- }
189
-
190
- if ( isset( $this->settings[$settings_post_id] ) ) {
191
- $settings = $this->settings[$settings_post_id];
192
- if ( !empty( $id ) && !empty( $meta_type ) && isset( $settings[$meta_type . '_' . $id] ) ) {
193
- return $settings[$meta_type . '_' . $id];
194
- }
195
- if ( isset( $settings[0] ) ) {
196
- return $settings[0];
197
- }
198
- return false;
199
- }
200
- }
201
-
202
- /**
203
- * Clear the $settings
204
- */
205
- public function clear_settings() {
206
- $this->settings = array();
207
- }
208
-
209
- /**
210
- * Saving the delimited identification data of the repeated multi-value items to cache
211
- *
212
- * @param WP_Post|WP_User|WP_Term|stdClass $object
213
- * @param mixed $repeat_multiple_data
214
- */
215
- public function save_repeat_multiple_data( $object, $repeat_multiple_data ) {
216
- $Meta = new Smart_Custom_Fields_Meta( $object );
217
- $id = $Meta->get_id();
218
- $type = $Meta->get_type();
219
- $meta_type = $Meta->get_meta_type();
220
- if ( !empty( $id ) && !empty( $type ) && !empty( $meta_type ) ) {
221
- $this->repeat_multiple_data[$meta_type . '_' . $type . '_' . $id] = $repeat_multiple_data;
222
- }
223
- }
224
-
225
- /**
226
- * Getting delimited identification data of the repeated multi-value items from cache
227
- *
228
- * @param WP_Post|WP_User|WP_Term|stdClass $object
229
- * @return mixed
230
- */
231
- public function get_repeat_multiple_data( $object ) {
232
- $Meta = new Smart_Custom_Fields_Meta( $object );
233
- $id = $Meta->get_id();
234
- $type = $Meta->get_type();
235
- $meta_type = $Meta->get_meta_type();
236
- if ( !empty( $id ) && !empty( $type ) ) {
237
- if ( isset( $this->repeat_multiple_data[$meta_type . '_' . $type . '_' . $id] ) ) {
238
- return $this->repeat_multiple_data[$meta_type . '_' . $type . '_' . $id];
239
- }
240
- }
241
- }
242
-
243
- /**
244
- * Clear delimited identification data of the repeated multi-value items cache
245
- */
246
- public function clear_repeat_multiple_data() {
247
- $this->repeat_multiple_data = array();
248
- }
249
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.group.php DELETED
@@ -1,145 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Group
4
- * Version : 1.0.0
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : February 27, 2015
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Group {
12
-
13
- /**
14
- * Group name
15
- * @var string
16
- */
17
- protected $name = null;
18
-
19
- /**
20
- * Array of field objects
21
- * @var array
22
- */
23
- protected $fields = array();
24
-
25
- /**
26
- * Whether repeating group
27
- * @var bool
28
- */
29
- protected $repeat = false;
30
-
31
- /**
32
- * __construct
33
- *
34
- * @param string $group_name
35
- * @param bool $repeat
36
- * @param array $_fields
37
- */
38
- public function __construct( $group_name = null, $repeat = false, array $_fields = array() ) {
39
- $this->name = $group_name;
40
- $this->repeat = ( $repeat === true ) ? true : false;
41
- $fields = array();
42
- foreach ( $_fields as $field_attributes ) {
43
- $Field = SCF::get_form_field_instance( $field_attributes['type'] );
44
- if ( !is_a( $Field, 'Smart_Custom_Fields_Field_Base' ) ) {
45
- continue;
46
- }
47
- foreach ( $field_attributes as $key => $value ) {
48
- $Field->set( $key, $value );
49
- }
50
-
51
- if ( !empty( $Field ) ) {
52
- $fields[$Field->get( 'name' )] = $Field;
53
- }
54
- }
55
- $this->fields = $fields;
56
- }
57
-
58
- /**
59
- * Getting group name
60
- *
61
- * @return string
62
- */
63
- public function get_name() {
64
- if ( is_numeric( $this->name ) ) {
65
- return;
66
- }
67
- return $this->name;
68
- }
69
-
70
- /**
71
- * Getting fields that saved in this settings page
72
- *
73
- * @return array
74
- */
75
- public function get_fields() {
76
- return $this->fields;
77
- }
78
-
79
- /**
80
- * Getting the field
81
- *
82
- * @param string $field_name
83
- * @return Smart_Custom_Fields_Field_Base|null
84
- */
85
- public function get_field( $field_name ) {
86
- $fields = $this->get_fields();
87
- if ( isset( $fields[$field_name] ) ) {
88
- return $fields[$field_name];
89
- }
90
- }
91
-
92
- /**
93
- * Whether repeating group
94
- *
95
- * @return bool
96
- */
97
- public function is_repeatable() {
98
- return $this->repeat;
99
- }
100
-
101
- /**
102
- * Displaying "hide" if $key isn't empty
103
- *
104
- * @param string $key
105
- */
106
- private function add_hide_class( $key ) {
107
- if ( !$key ) {
108
- echo 'hide';
109
- }
110
- }
111
-
112
- /**
113
- * Displaying the option fields in custom field settings page ( Common )
114
- *
115
- * @param int $group_key
116
- */
117
- public function display_options( $group_key ) {
118
- ?>
119
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'group-repeat' ); ?>">
120
- <div class="<?php echo esc_attr( SCF_Config::PREFIX . 'icon-handle' ); ?>"></div>
121
- <label>
122
- <input type="checkbox"
123
- name="<?php echo esc_attr( SCF_Config::NAME . '[' . $group_key . '][repeat]' ); ?>"
124
- value="true"
125
- <?php checked( $this->is_repeatable(), true ); ?>
126
- />
127
- <?php esc_html_e( 'Repeat', 'smart-custom-fields' ); ?>
128
- </label>
129
- </div>
130
- <table class="<?php echo esc_attr( SCF_Config::PREFIX . 'group-names' ); ?> <?php $this->add_hide_class( $this->is_repeatable() ); ?>">
131
- <tr>
132
- <th><?php esc_html_e( 'Group name', 'smart-custom-fields' ); ?><span class="<?php echo esc_attr( SCF_Config::PREFIX . 'require' ); ?>">*</span></th>
133
- <td>
134
- <input type="text"
135
- name="<?php echo esc_attr( SCF_Config::NAME . '[' . $group_key . '][group-name]' ); ?>"
136
- size="30"
137
- class="<?php echo esc_attr( SCF_Config::PREFIX . 'group-name' ); ?>"
138
- value="<?php echo esc_attr( $this->get_name() ); ?>"
139
- />
140
- </td>
141
- </tr>
142
- </table>
143
- <?php
144
- }
145
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.meta.php DELETED
@@ -1,561 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Meta
4
- * Version : 2.1.0
5
- * Author : inc2734
6
- * Created : March 17, 2015
7
- * Modified : September 30, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Meta {
12
-
13
- /**
14
- * @var WP_Post|WP_User|WP_Term|stdClass
15
- */
16
- protected $object;
17
-
18
- /**
19
- * What meta data
20
- * @var string post or user or term or option
21
- */
22
- protected $meta_type = 'post';
23
-
24
- /**
25
- * Post ID or User ID or Term ID or Menu slug
26
- * @var int
27
- */
28
- protected $id;
29
-
30
- /**
31
- * Post Type or Role or Taxonomy or Menu slug
32
- * @var string
33
- * @deprecated
34
- */
35
- protected $type;
36
-
37
- /**
38
- * Post Type or Roles or Taxonomy or Menu slug
39
- * @var array
40
- */
41
- protected $types = array();
42
-
43
- /**
44
- * @param WP_Post|WP_User|WP_Term|stdClass $object
45
- */
46
- public function __construct( $object ) {
47
- $this->object = $object;
48
- if ( is_a( $object, 'WP_Post' ) ) {
49
- $this->id = $object->ID;
50
- $this->type = $object->post_type;
51
- $this->types = array( $object->post_type );
52
- $this->meta_type = 'post';
53
- }
54
- elseif ( is_a( $object, 'WP_User' ) ) {
55
- $this->id = $object->ID;
56
- $this->type = $object->roles[0];
57
- $this->types = array_unique( array_merge( $object->roles, array_keys( $object->caps ) ) );
58
- $this->meta_type = 'user';
59
- }
60
- elseif ( isset( $object->term_id ) ) {
61
- $this->id = $object->term_id;
62
- $this->type = $object->taxonomy;
63
- $this->types = array( $object->taxonomy );
64
- $this->meta_type = 'term';
65
- }
66
- elseif ( isset( $object->menu_slug ) ) {
67
- $this->id = $object->menu_slug;
68
- $this->type = $object->menu_slug;
69
- $this->types = array( $object->menu_slug );
70
- $this->meta_type = 'option';
71
- }
72
- elseif( empty( $object ) || is_wp_error( $object ) ) {
73
- $this->id = null;
74
- $this->type = null;
75
- $this->types = null;
76
- $this->meta_type = null;
77
- }
78
- else {
79
- throw new Exception( sprintf( 'Invalid $object type error. $object is "%s".', get_class( $object ) ) );
80
- }
81
- }
82
-
83
- /**
84
- * Getting the meta type
85
- *
86
- * @return string post or user or term or option
87
- */
88
- public function get_meta_type() {
89
- return $this->meta_type;
90
- }
91
-
92
- /**
93
- * Getting object ID. When option, this is menu slug.
94
- *
95
- * @return int|string
96
- */
97
- public function get_id() {
98
- return $this->id;
99
- }
100
-
101
- /**
102
- * Getting type ( Post type or Role or Taxonomy or Menu slug )
103
- *
104
- * @deprecated
105
- * @param bool $accept_revision If post type, whether allow revision post type
106
- * @return string
107
- */
108
- public function get_type( $accept_revision = true ) {
109
- if ( $this->meta_type === 'post' && !$accept_revision ) {
110
- $public_post_type = $this->get_public_post_type( $this->id );
111
- return $public_post_type[0];
112
- }
113
- return $this->type;
114
- }
115
-
116
- /**
117
- * Getting type ( Post type or Role or Taxonomy or Menu slug )
118
- *
119
- * @param bool $accept_revision If post type, whether allow revision post type
120
- * @return array
121
- */
122
- public function get_types( $accept_revision = true ) {
123
- if ( $this->meta_type === 'post' && ! $accept_revision ) {
124
- return $this->get_public_post_type( $this->id );
125
- }
126
- return $this->types;
127
- }
128
-
129
- /**
130
- * Getting post type
131
- * To feel good also Post ID of the revision
132
- *
133
- * @param int $post_id
134
- * @return array
135
- */
136
- protected function get_public_post_type( $post_id ) {
137
- if ( $public_post_id = wp_is_post_revision( $post_id ) ) {
138
- $post = get_post( $public_post_id );
139
- } else {
140
- $post = get_post( $post_id );
141
- }
142
- if ( !empty( $post->post_type ) ) {
143
- return array( $post->post_type );
144
- }
145
- return $this->types;
146
- }
147
-
148
- /**
149
- * Object with this meta data is whether saved
150
- * Post ... If auto-draft, not saved (new posts in)
151
- * Profile or Taxonomy or option ... Since not display only after saving.
152
- * So if all of meta data is empty,
153
- * It is determined that not saved
154
- *
155
- * @return bool
156
- */
157
- public function is_saved( $key = null ) {
158
- if ( $this->meta_type === 'post' && get_post_status( $this->get_id() ) === 'auto-draft' ) {
159
- return false;
160
- }
161
- if ( !$this->get() ) {
162
- return false;
163
- }
164
- return true;
165
- }
166
-
167
- /**
168
- * The metadata is wheter saved.
169
- *
170
- * @param string $key
171
- * @return bool
172
- */
173
- public function is_saved_the_key( $key ) {
174
- if ( $this->meta_type === 'post' && get_post_status( $this->get_id() ) === 'auto-draft' ) {
175
- return false;
176
- }
177
-
178
- if ( _get_meta_table( $this->meta_type ) && !$this->maybe_4_3_term_meta() ) {
179
- return metadata_exists( $this->meta_type, $this->id, $key );
180
- }
181
-
182
- $option = get_option( $this->get_option_name() );
183
- if ( is_array( $option ) ) {
184
- return array_key_exists( $key, $option );
185
- }
186
- return false;
187
- }
188
-
189
- /**
190
- * Less than WordPress 4.4 compatibility for term meta
191
- * More than 4.4 are saved in meta. So if that use the meta data.
192
- *
193
- * @return bool
194
- */
195
- public function maybe_4_3_term_meta() {
196
- if ( $this->meta_type == 'term' ) {
197
- if ( !get_metadata( $this->meta_type, $this->id ) && get_option( $this->get_option_name() ) ) {
198
- return true;
199
- }
200
- }
201
- return false;
202
- }
203
-
204
- /**
205
- * Getting the meta data
206
- *
207
- * @param string|null $key
208
- * @param bool $single false ... return array, true ... return string
209
- * @return string|array
210
- */
211
- public function get( $key = '', $single = false ) {
212
- if ( _get_meta_table( $this->meta_type ) && !$this->maybe_4_3_term_meta() ) {
213
- $meta = get_metadata( $this->meta_type, $this->id, $key, $single );
214
- } else {
215
- $meta = $this->get_option_metadata( $key, $single );
216
- }
217
-
218
- if ( $key === SCF_Config::PREFIX . 'repeat-multiple-data' ) {
219
- return $meta;
220
- }
221
-
222
- $settings = SCF::get_settings( $this->object );
223
- if ( $key ) {
224
- foreach ( $settings as $Setting ) {
225
- $fields = $Setting->get_fields();
226
- if ( !empty( $fields[$key] ) ) {
227
- return $meta;
228
- }
229
- }
230
- } else {
231
- if ( is_array( $meta ) ) {
232
- foreach ( $settings as $Setting ) {
233
- $fields = $Setting->get_fields();
234
- foreach ( $meta as $meta_key => $meta_value ) {
235
- if ( isset( $fields[$meta_key] ) ) {
236
- $metas[$meta_key] = $meta[$meta_key];
237
- }
238
- }
239
- }
240
- }
241
- }
242
- if ( isset( $metas ) ) {
243
- return $metas;
244
- }
245
- if ( $single ) {
246
- return '';
247
- }
248
- return array();
249
- }
250
-
251
- /**
252
- * Getting option like meta data.
253
- *
254
- * @param string|null $key
255
- * @param bool $single false ... return array, true ... return string
256
- * @return string|array
257
- */
258
- protected function get_option_metadata( $key, $single ) {
259
- $option = get_option( $this->get_option_name() );
260
-
261
- if ( !$key ) {
262
- return $option;
263
- }
264
-
265
- if ( isset( $option[$key] ) ) {
266
- if ( $single && is_array( $option[$key] ) ) {
267
- if ( isset( $option[$key][0] ) ) {
268
- return $option[$key][0];
269
- }
270
- } else {
271
- return $option[$key];
272
- }
273
- }
274
-
275
- if ( $single ) {
276
- return '';
277
- }
278
- return array();
279
- }
280
-
281
- /**
282
- * Updating meta data. If the meta data not exist, adding it.
283
- *
284
- * @param string $key
285
- * @param mixed $value
286
- * @param mixed $prev_value If specified, it overwrites the only ones of this value
287
- * @return int|false Meta ID
288
- */
289
- public function update( $key, $value, $prev_value = '' ) {
290
- $return = false;
291
- do_action( SCF_Config::PREFIX . '-before-save-' . $this->meta_type, $this->id, $key, $value );
292
- $is_valid = apply_filters( SCF_Config::PREFIX . '-validate-save-' . $this->meta_type, $this->id, $key, $value );
293
- if ( $is_valid ) {
294
- if ( _get_meta_table( $this->meta_type ) ) {
295
- $return = update_metadata( $this->meta_type, $this->id, $key, $value, $prev_value );
296
- } else {
297
- $return = $this->update_option_metadata( $key, $value, $prev_value );
298
- }
299
- }
300
- do_action( SCF_Config::PREFIX . '-after-save-' . $this->meta_type, $this->id, $key, $value );
301
- return $return;
302
- }
303
-
304
- /**
305
- * Updating the option like meta data. If the meta data not exist, adding it.
306
- *
307
- * @param string $key
308
- * @param mixed $value
309
- * @param mixed $prev_value If specified, it overwrites the only ones of this value
310
- * @return bool
311
- */
312
- protected function update_option_metadata( $key, $value, $prev_value ) {
313
- $option_name = $this->get_option_name();
314
- $option = get_option( $option_name );
315
- if ( isset( $option[$key] ) ) {
316
- if ( $prev_value !== '' ) {
317
- foreach( $option[$key] as $option_key => $option_value ) {
318
- if ( $prev_value === $option_value ) {
319
- $option[$key][$option_key] = $value;
320
- break;
321
- }
322
- }
323
- } else {
324
- foreach( $option[$key] as $option_key => $option_value ) {
325
- $option[$key][$option_key] = $value;
326
- }
327
- }
328
- } else {
329
- $option[$key][] = $value;
330
- }
331
- $option = stripslashes_deep( $option );
332
- return update_option( $option_name, $option, false );
333
- }
334
-
335
- /**
336
- * Adding the meta data
337
- *
338
- * @param string $key
339
- * @param mixed $value
340
- * @param bool $unique Whether the key to the unique
341
- * @return int|false Meta ID
342
- */
343
- public function add( $key, $value, $unique = false ) {
344
- $return = false;
345
- do_action( SCF_Config::PREFIX . '-before-save-' . $this->meta_type, $this->id, $key, $value );
346
- $is_valid = apply_filters( SCF_Config::PREFIX . '-validate-save-' . $this->meta_type, $this->id, $key, $value );
347
- if ( $is_valid ) {
348
- if ( _get_meta_table( $this->meta_type ) ) {
349
- $return = add_metadata( $this->meta_type, $this->id, $key, $value, $unique );
350
- } else {
351
- $return = $this->add_option_metadata( $key, $value, $unique );
352
- }
353
- }
354
- do_action( SCF_Config::PREFIX . '-after-save-' . $this->meta_type, $this->id, $key, $value );
355
- return $return;
356
- }
357
-
358
- /**
359
- * Adding the option like meta data
360
- *
361
- * @param string $key
362
- * @param mixed $value
363
- * @param bool $unique Whether the key to the unique
364
- * @return bool
365
- */
366
- protected function add_option_metadata( $key, $value, $unique ) {
367
- $option_name = $this->get_option_name();
368
- $option = get_option( $option_name );
369
- if ( !$unique || !isset( $option[$key] ) ) {
370
- $option[$key][] = $value;
371
- $option = stripslashes_deep( $option );
372
- $return = update_option( $option_name, $option, false );
373
- }
374
- return false;
375
- }
376
-
377
- /**
378
- * Deleting the meta data
379
- *
380
- * @param string $key
381
- * @param mixed $value If specified, it deletes the only ones of this value
382
- * @return bool
383
- */
384
- public function delete( $key = '', $value = '' ) {
385
- if ( _get_meta_table( $this->meta_type ) ) {
386
- if ( $key ) {
387
- return delete_metadata( $this->meta_type, $this->id, $key, $value );
388
- }
389
- } else {
390
- if ( $key ) {
391
- return $this->delete_option_metadata( $key, $value );
392
- }
393
- }
394
- return false;
395
- }
396
-
397
- /**
398
- * Deleting the option like meta data
399
- *
400
- * @param string $key
401
- * @param mixed $value If specified, it deletes the only ones of this value
402
- * @return bool
403
- */
404
- protected function delete_option_metadata( $key, $value ) {
405
- $option_name = $this->get_option_name();
406
- $option = get_option( $option_name );
407
-
408
- if ( isset( $option[$key] ) && $value === '' ) {
409
- unset( $option[$key] );
410
- return update_option( $option_name, $option );
411
- }
412
-
413
- if ( isset( $option[$key] ) && $value !== '' ) {
414
- foreach ( $option[$key] as $option_key => $option_value ) {
415
- if ( $option_value === $value ) {
416
- unset( $option[$key][$option_key] );
417
- }
418
- }
419
- return update_option( $option_name, $option );
420
- }
421
- return false;
422
- }
423
-
424
- /**
425
- * Delete all term meta for less than WordPress 4.3
426
- */
427
- public function delete_term_meta_for_wp43() {
428
- $option_name = $this->get_option_name();
429
- return delete_option( $option_name );
430
- }
431
-
432
- /**
433
- * Saving the meta data based on the posted data
434
- *
435
- * @param array $POST
436
- */
437
- public function save( array $POST ) {
438
- // For repeated multi-value items identification
439
- $repeat_multiple_data = array();
440
-
441
- // Retruning empty value when multi-value is empty, it doesn't save
442
- $multiple_data_fields = array();
443
-
444
- if ( is_null( $this->object ) ) {
445
- return;
446
- }
447
-
448
- $this->delete( SCF_Config::PREFIX . 'repeat-multiple-data' );
449
-
450
- if ( !isset( $POST[SCF_Config::NAME] ) ) {
451
- return;
452
- }
453
-
454
- $settings = SCF::get_settings( $this->object );
455
- $saved_data = array();
456
-
457
- foreach ( $settings as $Setting ) {
458
- $groups = $Setting->get_groups();
459
- foreach ( $groups as $Group ) {
460
- $fields = $Group->get_fields();
461
- foreach ( $fields as $Field ) {
462
- $field_name = $Field->get( 'name' );
463
- if ( !isset( $POST[SCF_Config::NAME][$field_name] ) ) {
464
- continue;
465
- }
466
- $saved_data[$field_name] = $POST[SCF_Config::NAME][$field_name];
467
-
468
- $this->delete( $field_name );
469
- if ( $Field->get_attribute( 'allow-multiple-data' ) ) {
470
- $multiple_data_fields[] = $field_name;
471
- }
472
-
473
- if ( $Group->is_repeatable() && $Field->get_attribute( 'allow-multiple-data' ) ) {
474
- $repeat_multiple_data_fields = $saved_data[$field_name];
475
- foreach ( $repeat_multiple_data_fields as $values ) {
476
- if ( is_array( $values ) ) {
477
- $repeat_multiple_data[$field_name][] = count( $values );
478
- } else {
479
- $repeat_multiple_data[$field_name][] = 0;
480
- }
481
- }
482
- }
483
- }
484
- }
485
- }
486
-
487
- if ( $repeat_multiple_data ) {
488
- $this->update( SCF_Config::PREFIX . 'repeat-multiple-data', $repeat_multiple_data );
489
- }
490
-
491
- foreach ( $saved_data as $name => $values ) {
492
- foreach ( $values as $value ) {
493
- if ( in_array( $name, $multiple_data_fields ) && $value === '' ) {
494
- continue;
495
- }
496
- if ( !is_array( $value ) ) {
497
- $this->add( $name, $value );
498
- } else {
499
- foreach ( $value as $val ) {
500
- $this->add( $name, $val );
501
- }
502
- }
503
- }
504
- }
505
- }
506
-
507
- /**
508
- * Restore the data from the revision
509
- *
510
- * @param WP_Post $revision
511
- */
512
- public function restore( $revision ) {
513
- if ( $this->meta_type !== 'post' || is_null( $this->object ) || !is_a( $revision, 'WP_Post' ) ) {
514
- return;
515
- }
516
-
517
- $settings = SCF::get_settings( $this->object );
518
- foreach ( $settings as $Setting ) {
519
- $fields = $Setting->get_fields();
520
- foreach ( $fields as $Field ) {
521
- $field_name = $Field->get( 'name' );
522
- $this->delete( $field_name );
523
- $value = SCF::get( $field_name, $revision->ID );
524
- if ( is_array( $value ) ) {
525
- foreach ( $value as $val ) {
526
- if ( is_array( $val ) ) {
527
- foreach ( $val as $v ) {
528
- // Repeated multi-value items
529
- $this->add( $field_name, $v );
530
- }
531
- } else {
532
- // Repeated single-value items or Non repeated multi-value items
533
- $this->add( $field_name, $val );
534
- }
535
- }
536
- } else {
537
- // Non repeated single-value item
538
- $this->add( $field_name, $value );
539
- }
540
- }
541
- }
542
-
543
- $repeat_multiple_data = SCF::get_repeat_multiple_data( $revision );
544
- $repeat_multiple_data_name = SCF_Config::PREFIX . 'repeat-multiple-data';
545
- $this->delete( $repeat_multiple_data_name );
546
- $this->update( $repeat_multiple_data_name, $repeat_multiple_data );
547
- }
548
-
549
- /**
550
- * Getting option name for saved options table
551
- */
552
- public function get_option_name() {
553
- return sprintf(
554
- '%s%s-%s-%d',
555
- SCF_Config::PREFIX,
556
- $this->meta_type,
557
- $this->type,
558
- $this->id
559
- );
560
- }
561
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.options-page.php DELETED
@@ -1,86 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Options_Page
4
- * Version : 1.0.0
5
- * Author : inc2734
6
- * Created : May 29, 2014
7
- * Modified :
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Options_Page {
12
-
13
- /**
14
- * @var string
15
- */
16
- protected $page_title;
17
-
18
- /**
19
- * @var string
20
- */
21
- protected $menu_title;
22
-
23
- /**
24
- * @var string
25
- */
26
- protected $capability;
27
-
28
- /**
29
- * @var string
30
- */
31
- protected $menu_slug;
32
-
33
- /**
34
- * @var string
35
- */
36
- protected $icon_url;
37
-
38
- /**
39
- * @var int
40
- */
41
- protected $position;
42
-
43
- /**
44
- * @see https://developer.wordpress.org/reference/functions/add_menu_page/
45
- * @param string $page_title
46
- * @param string $menu_title
47
- * @param string $capability
48
- * @param string $menu_slug
49
- * @param string $icon_url
50
- * @param int $position
51
- */
52
- public function __construct( $page_title, $menu_title, $capability, $menu_slug, $icon_url = '', $position = null ) {
53
- $this->page_title = $page_title;
54
- $this->menu_title = $menu_title;
55
- $this->capability = $capability;
56
- $this->menu_slug = $menu_slug;
57
- $this->icon_url = $icon_url;
58
- $this->position = $position;
59
- add_action( 'admin_menu', array( $this, 'add_options_page_menu' ) );
60
- }
61
-
62
- public function add_options_page_menu() {
63
- return add_menu_page(
64
- $this->page_title,
65
- $this->menu_title,
66
- $this->capability,
67
- $this->menu_slug,
68
- array( $this, 'display' ),
69
- $this->icon_url,
70
- $this->position
71
- );
72
- }
73
-
74
- public function display() {
75
- $Option = SCF::generate_option_object( $_GET['page'] );
76
- if ( !$Option ) {
77
- return;
78
- }
79
- ?>
80
- <div class="wrap">
81
- <h3><?php echo esc_html( $Option->menu_title ); ?></h3>
82
- <?php do_action( SCF_Config::PREFIX . 'custom-options-page', $Option ); ?>
83
- </div>
84
- <?php
85
- }
86
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.revisions.php DELETED
@@ -1,205 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Revisions
4
- * Version : 1.1.6
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : August 24, 2016
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Revisions {
12
-
13
- /**
14
- * __construct
15
- */
16
- public function __construct() {
17
- add_filter(
18
- '_wp_post_revision_field_' . SCF_Config::PREFIX . 'debug-preview',
19
- array( $this, '_wp_post_revision_field_debug_preview' ),
20
- 10,
21
- 3
22
- );
23
- add_filter(
24
- 'wp_save_post_revision_check_for_changes',
25
- array( $this, 'wp_save_post_revision_check_for_changes' ),
26
- 10,
27
- 3
28
- );
29
- add_filter( '_wp_post_revision_fields', array( $this, '_wp_post_revision_fields' ) );
30
- add_filter( 'get_post_metadata' , array( $this, 'get_post_metadata' ), 10, 4 );
31
- add_action( 'edit_form_after_title' , array( $this, 'edit_form_after_title' ) );
32
- add_action( 'wp_restore_post_revision', array( $this, 'wp_restore_post_revision' ), 10, 2 );
33
- add_action( 'wp_insert_post' , array( $this, 'wp_insert_post' ) );
34
- }
35
-
36
- /**
37
- * リビジョンから復元するときに呼び出される
38
- *
39
- * @param int $post_id
40
- * @param int $revision_id
41
- */
42
- public function wp_restore_post_revision( $post_id, $revision_id ) {
43
- $post = get_post( $post_id );
44
- $revision = get_post( $revision_id );
45
-
46
- $Meta = new Smart_Custom_Fields_Meta( $post );
47
- $Meta->restore( $revision );
48
- }
49
-
50
- /**
51
- * リビジョンデータを保存
52
- * *_post_meta はリビジョンIDのときに自動的に本物IDに変換して処理してしまうので、*_metadata を使うこと
53
- *
54
- * @param int $post_id リビジョンの投稿ID
55
- */
56
- public function wp_insert_post( $post_id ) {
57
- if ( !isset( $_POST[SCF_Config::NAME] ) ) {
58
- return;
59
- }
60
- if ( !wp_is_post_revision( $post_id ) ) {
61
- return;
62
- }
63
- $settings = SCF::get_settings( get_post( $post_id ) );
64
- if ( !$settings ) {
65
- return;
66
- }
67
-
68
- check_admin_referer(
69
- SCF_Config::NAME . '-fields',
70
- SCF_Config::PREFIX . 'fields-nonce'
71
- );
72
-
73
- $Meta = new Smart_Custom_Fields_Meta( get_post( $post_id ) );
74
- $Meta->save( $_POST );
75
- }
76
-
77
- /**
78
- * プレビューのときはプレビューのメタデータを返す。ただし、アイキャッチはリビジョンが無いので除外する
79
- *
80
- * @param mixed $value
81
- * @param int $post_id
82
- * @param string $meta_key
83
- * @param bool $single
84
- * @return mixed $value
85
- */
86
- public function get_post_metadata( $value, $post_id, $meta_key, $single ) {
87
- if ( ! is_preview() ) {
88
- return $value;
89
- }
90
-
91
- if ( is_null( SCF::get_field( get_post( $post_id ), $meta_key ) ) ) {
92
- return $value;
93
- }
94
-
95
- $preview_id = $this->get_preview_id( $post_id );
96
- if ( $preview_id && $meta_key !== '_thumbnail_id' ) {
97
- if ( $post_id !== $preview_id ) {
98
- $value = get_post_meta( $preview_id, $meta_key, $single );
99
- }
100
- }
101
- return $value;
102
- }
103
-
104
- /**
105
- * プレビューの Post ID を返す
106
- *
107
- * @param int $post_id
108
- * @return int $preview_id
109
- */
110
- protected function get_preview_id( $post_id ) {
111
- global $post;
112
- $preview_id = 0;
113
- if ( isset( $post->ID ) && intval( $post->ID ) === intval( $post_id ) ) {
114
- if ( is_preview() && $preview = wp_get_post_autosave( $post_id ) ) {
115
- $preview_id = $preview->ID;
116
- }
117
- }
118
- return $preview_id;
119
- }
120
-
121
- /**
122
- * リビジョン比較画面でメタデータを表示させるためにキーを追加する
123
- *
124
- * @param array $fields
125
- * @return array $fields
126
- */
127
- public function _wp_post_revision_fields( $fields ){
128
- $fields[SCF_Config::PREFIX . 'debug-preview'] = esc_html__( 'Smart Custom Fields', 'smart-custom-fields' );
129
- return $fields;
130
- }
131
-
132
- /**
133
- * プレビュー時にメタデータを保存するためにキーとなる項目を出力する
134
- */
135
- public function edit_form_after_title() {
136
- printf(
137
- '<input type="hidden" name="%1$s" value="%1$s" />',
138
- SCF_Config::PREFIX . 'debug-preview'
139
- );
140
- }
141
-
142
- /**
143
- * リビジョン比較画面にメタデータを表示
144
- *
145
- * @param $value
146
- * @param $column
147
- * @param array $post
148
- * @return string
149
- */
150
- public function _wp_post_revision_field_debug_preview( $value, $column, $post ) {
151
- $output = '';
152
- $values = SCF::gets( $post->ID );
153
- foreach ( $values as $field_name_or_group_name => $value ) {
154
- $output .= sprintf( "■ %s\n", $field_name_or_group_name );
155
- if ( is_array( $value ) ) {
156
- if ( isset( $value[0] ) && is_array( $value[0] ) ) {
157
- foreach ( $value as $i => $repeat_data_values ) {
158
- $output .= sprintf( "- #%s\n", $i );
159
- foreach ( $repeat_data_values as $field_name => $repeat_data_value ) {
160
- $output .= sprintf( " %s: ", $field_name );
161
- if ( is_array( $repeat_data_value ) ) {
162
- $output .= sprintf( "[%s]\n", implode( ', ', $repeat_data_value ) );
163
- } else {
164
- $output .= sprintf( "%s\n", $repeat_data_value );
165
- }
166
- }
167
- }
168
- } else {
169
- $output .= sprintf( "[%s]\n", implode( ', ', $value ) );
170
- }
171
- } else {
172
- $output .= sprintf( "%s\n", $value );
173
- }
174
- }
175
- return $output;
176
- }
177
-
178
- /**
179
- * false ならリビジョンとして保存される
180
- *
181
- * @param bool $check_for_changes
182
- * @param WP_Post $last_revision 最新のリビジョン
183
- * @param WP_Post $post 現在の投稿
184
- * @return bool
185
- */
186
- public function wp_save_post_revision_check_for_changes( $check_for_changes, $last_revision, $post ) {
187
- $post_meta = array();
188
- $p = get_post_custom( $post->ID );
189
- foreach ( $p as $key => $value ) {
190
- $v = SCF::get( $key );
191
- if ( !is_null( $v ) ) {
192
- $post_meta[$key][] = $v;
193
- }
194
- }
195
-
196
- if ( isset( $_POST[SCF_Config::NAME] ) ) {
197
- $serialized_post_meta = serialize( $post_meta );
198
- $serialized_send_data = $_POST[SCF_Config::NAME];
199
- if ( $serialized_post_meta != $serialized_send_data ) {
200
- return false;
201
- }
202
- }
203
- return true;
204
- }
205
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/classes/models/class.setting.php DELETED
@@ -1,155 +0,0 @@
1
- <?php
2
- /**
3
- * Smart_Custom_Fields_Setting
4
- * Version : 1.0.0
5
- * Author : inc2734
6
- * Created : September 23, 2014
7
- * Modified : February 27, 2015
8
- * License : GPLv2 or later
9
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
- */
11
- class Smart_Custom_Fields_Setting {
12
-
13
- /**
14
- * Post ID of custom field settings page
15
- * @var string
16
- */
17
- protected $id;
18
-
19
- /**
20
- * Title of custom field settings page
21
- * @var title
22
- */
23
- protected $title;
24
-
25
- /**
26
- * Array of the saved group objects
27
- * @var array
28
- */
29
- protected $groups = array();
30
-
31
- /**
32
- * __construct
33
- *
34
- * @param int $post_id
35
- */
36
- public function __construct( $id, $title ) {
37
- $this->id = $id;
38
- $this->title = $title;
39
- $post_meta = get_post_meta(
40
- $this->get_id(),
41
- SCF_Config::PREFIX . 'setting',
42
- true
43
- );
44
- if ( is_array( $post_meta ) ) {
45
- foreach ( $post_meta as $group ) {
46
- $group = shortcode_atts( array(
47
- 'group-name' => '',
48
- 'repeat' => false,
49
- 'fields' => array(),
50
- ), $group );
51
- $this->add_group(
52
- $group['group-name'],
53
- $group['repeat'],
54
- $group['fields']
55
- );
56
- }
57
- }
58
- }
59
-
60
- /**
61
- * Getting the post ID
62
- *
63
- * @return string
64
- */
65
- public function get_id() {
66
- return $this->id;
67
- }
68
-
69
- /**
70
- * Getting the post title
71
- *
72
- * @return string
73
- */
74
- public function get_title() {
75
- return $this->title;
76
- }
77
-
78
- /**
79
- * Getting the group objects
80
- *
81
- * @return array
82
- */
83
- public function get_groups() {
84
- return $this->groups;
85
- }
86
-
87
- /**
88
- * Getting together the fields in each group
89
- *
90
- * @return array
91
- */
92
- public function get_fields() {
93
- $groups = $this->get_groups();
94
- $fields = array();
95
- foreach ( $groups as $Group ) {
96
- $fields = array_merge( $fields, $Group->get_fields() );
97
- }
98
- return $fields;
99
- }
100
-
101
- /**
102
- * Adding group to the tail
103
- * If the argument is not, adding an empty group
104
- *
105
- * @param string $group_name
106
- * @param bool $repeat
107
- * @param array $_fields
108
- */
109
- public function add_group( $group_name = null, $repeat = false, array $fields = array() ) {
110
- $Group = $this->new_group( $group_name, $repeat, $fields );
111
- $group_name = $Group->get_name();
112
- if ( $group_name ) {
113
- $this->groups[$group_name] = $Group;
114
- } else {
115
- $this->groups[] = $Group;
116
- }
117
- }
118
-
119
- /**
120
- * Getting group
121
- *
122
- * @param string $group_name
123
- * @return Smart_Custom_Fields_Group|false
124
- */
125
- public function get_group( $group_name ) {
126
- $groups = $this->get_groups();
127
- if ( isset( $groups[$group_name] ) && $groups[$group_name]->is_repeatable() ) {
128
- return $groups[$group_name];
129
- }
130
- }
131
-
132
- /**
133
- * Adding group to the head
134
- * If the argument is not, adding an empty group
135
- *
136
- * @param string $group_name
137
- * @param bool $repeat
138
- * @param array $_fields
139
- */
140
- public function add_group_unshift( $group_name = null, $repeat = false, array $fields = array() ) {
141
- $Group = $this->new_group( $group_name, $repeat, $fields );
142
- array_unshift( $this->groups, $Group );
143
- }
144
-
145
- /**
146
- * Getting generated new group
147
- *
148
- * @param string $group_name
149
- * @param bool $repeat
150
- * @param array $_fields
151
- */
152
- protected function new_group( $group_name, $repeat, $fields ) {
153
- return new Smart_Custom_Fields_Group( $group_name, $repeat, $fields );
154
- }
155
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/editor.css DELETED
@@ -1,253 +0,0 @@
1
- /**
2
- * editor.css
3
- * Version : 1.3.1
4
- * Author : inc2734
5
- * Created : September 23, 2014
6
- * Modified : June 4, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
-
11
- /** ==================================================
12
- * #normal-sortables
13
- */
14
- .smart-cf-meta-box {
15
- margin: 0 -12px;
16
- }
17
-
18
- /** ==================================================
19
- * .smart-cf-meta-box-table
20
- */
21
- .smart-cf-meta-box-table {
22
- background: #fff;
23
- border-bottom: #eee solid 1px;
24
- padding: 10px 12px;
25
- }
26
- .smart-cf-meta-box-table table {
27
- width: 100%;
28
- }
29
- .smart-cf-meta-box-table th,
30
- .smart-cf-meta-box-table td {
31
- font-weight: normal;
32
- text-align: left;
33
- padding: 7px 5px;
34
- vertical-align: top;
35
- }
36
- .smart-cf-meta-box-table th {
37
- width: 25%;
38
- }
39
- .smart-cf-meta-box-table td label {
40
- margin-right: 10px;
41
- }
42
- .smart-cf-meta-box-table .wp-editor-tools:after {
43
- display: block;
44
- }
45
- .smart-cf-meta-box-table .wp-editor-container {
46
- clear: both;
47
- }
48
- .smart-cf-meta-box-table td .instruction {
49
- font-size: 14px;
50
- margin: 0 0 10px;
51
- }
52
- .smart-cf-meta-box-table td .description {
53
- font-size: 12px;
54
- margin: 10px 0 0;
55
- color: #888;
56
- }
57
- .smart-cf-meta-box-table td .clear {
58
- clear: both;
59
- }
60
-
61
- /** ==================================================
62
- * .smart-cf-meta-box-repeat-tables
63
- */
64
- .smart-cf-meta-box-repeat-tables .smart-cf-meta-box-table > .smart-cf-icon-handle,
65
- .smart-cf-meta-box-repeat-tables .smart-cf-meta-box-table > .smart-cf-repeat-btn {
66
- position: relative;
67
- top: 3px;
68
- vertical-align: middle;
69
- }
70
- .smart-cf-meta-box-repeat-tables .smart-cf-repeat-btn {
71
- cursor: pointer;
72
- width: auto;
73
- height: auto;
74
- font-size: 1.3em;
75
- padding: 0;
76
- -webkit-border-radius: 50%;
77
- border-radius: 50%;
78
- display: inline-block;
79
- vertical-align: middle;
80
- text-align: center;
81
- color: #999;
82
- margin-right: 3px;
83
- }
84
- .smart-cf-meta-box-repeat-tables .smart-cf-icon-handle:hover,
85
- .smart-cf-meta-box-repeat-tables .smart-cf-repeat-btn:hover {
86
- color: #333;
87
- }
88
- .smart-cf-meta-box-repeat-tables table {
89
- margin-top: 7px;
90
- }
91
-
92
- /** ==================================================
93
- * relation
94
- */
95
- .smart-cf-meta-box-table .smart-cf-relation-left,
96
- .smart-cf-meta-box-table .smart-cf-relation-right {
97
- border: #ddd solid 1px;
98
- border-radius: 3px;
99
- height: 160px;
100
- }
101
- .smart-cf-meta-box-table .smart-cf-relation-left ul,
102
- .smart-cf-meta-box-table .smart-cf-relation-right ul {
103
- list-style: none;
104
- margin: 0;
105
- padding: 0;
106
- }
107
- .smart-cf-meta-box-table .smart-cf-relation-left ul li,
108
- .smart-cf-meta-box-table .smart-cf-relation-right ul li {
109
- background: #fff;
110
- border-bottom: #eee solid 1px;
111
- color: #999;
112
- margin: 0;
113
- padding: 5px 10px;
114
- position: relative;
115
- }
116
- .smart-cf-meta-box-table .smart-cf-relation-left ul li[data-status="publish"],
117
- .smart-cf-meta-box-table .smart-cf-relation-right ul li[data-status="publish"] {
118
- color: #0074a2;
119
- }
120
- .smart-cf-meta-box-table .smart-cf-relation-left ul li::after,
121
- .smart-cf-meta-box-table .smart-cf-relation-right ul li::after {
122
- content: attr(data-status);
123
- display: inline-block;
124
- background-color: #999;
125
- color: #fff;
126
- border-radius: 4px;
127
- padding: 0 3px;
128
- font-size: 10px;
129
- margin-left: .5em;
130
- position: relative;
131
- top: -1px;
132
- }
133
- .smart-cf-meta-box-table .smart-cf-relation-left ul li[data-status="publish"]::after,
134
- .smart-cf-meta-box-table .smart-cf-relation-right ul li[data-status="publish"]::after {
135
- display: none;
136
- }
137
- .smart-cf-meta-box-table .smart-cf-relation-left {
138
- float: left;
139
- width: 47%;
140
- overflow: hidden;
141
- }
142
- .smart-cf-meta-box-table .smart-cf-relation-left .smart-cf-search {
143
- background-color: #f5f5f5;
144
- border-bottom: 1px solid #eee;
145
- padding: 5px;
146
- }
147
- .smart-cf-meta-box-table .smart-cf-relation-left .smart-cf-relation-children-select {
148
- overflow: auto;
149
- height: 122px;
150
- }
151
- .smart-cf-meta-box-table .smart-cf-relation-left ul li {
152
- cursor: pointer;
153
- }
154
- .smart-cf-meta-box-table .smart-cf-relation-left ul li:hover {
155
- background: #e4f6fd;
156
- }
157
- .smart-cf-meta-box-table .smart-cf-relation-left .load-relation-items {
158
- background: #e4f6fd;
159
- cursor: pointer;
160
- margin: 0;
161
- padding: 6px 10px;
162
- text-align: center;
163
- }
164
- .smart-cf-meta-box-table .smart-cf-relation-left .load-relation-items:hover {
165
- background: #c1ebfc;
166
- }
167
- .smart-cf-meta-box-table .smart-cf-relation-right {
168
- float: right;
169
- width: 50%;
170
- overflow: auto;
171
- }
172
- .smart-cf-meta-box-table .smart-cf-relation-right ul li {
173
- padding-right: 30px;
174
- padding-left: 30px;
175
- }
176
- .smart-cf-meta-box-table .smart-cf-relation-right ul li .smart-cf-icon-handle {
177
- position: absolute;
178
- top: 4px;
179
- left: 5px;
180
- margin: 0;
181
- }
182
- .smart-cf-meta-box-table .smart-cf-relation-right ul li .relation-remove {
183
- cursor: pointer;
184
- display: block;
185
- display: flex;
186
- align-items: center;
187
- justify-content: center;
188
- height: 12px;
189
- width: 12px;
190
- line-height: 1;
191
- border-radius: 3px;
192
- position: absolute;
193
- top: 7px;
194
- right: 6px;
195
- color: #fff;
196
- background-color: #32373c;
197
- }
198
-
199
- /** ==================================================
200
- * .smart-cf-upload-image, .smart-cf-upload-file
201
- */
202
- .smart-cf-upload-image,
203
- .smart-cf-upload-file {
204
- display: inline-block;
205
- position: relative;
206
- }
207
- .smart-cf-upload-image img,
208
- .smart-cf-upload-file img {
209
- margin-top: 5px;
210
- max-width: 100%;
211
- vertical-align: top;
212
- }
213
- .smart-cf-upload-image .btn-remove-image,
214
- .smart-cf-upload-file .btn-remove-file {
215
- background: red;
216
- border-radius: 3px;
217
- color: #fff;
218
- cursor: pointer;
219
- display: block;
220
- font-size: 10px;
221
- padding: 2px 6px;
222
- position: absolute;
223
- left: 5px;
224
- bottom: 5px;
225
- }
226
-
227
- /** ==================================================
228
- * .hide
229
- */
230
- .smart-cf-upload-image.hide,
231
- .smart-cf-upload-file.hide,
232
- .smart-cf-upload-image .btn-remove-image.hide,
233
- .smart-cf-upload-file .btn-remove-file.hide,
234
- .load-relation-items.hide {
235
- display: none;
236
- }
237
-
238
- /** ==================================================
239
- * classes
240
- */
241
- .smart-cf-icon-handle {
242
- cursor: move;
243
- display: inline-block;
244
- margin-right: 10px;
245
- overflow: hidden;
246
- position: relative;
247
- color: #CCC;
248
- }
249
-
250
- .smart-cf-item-vertical {
251
- display: block;
252
- margin: 0 0 3px;
253
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/option.css DELETED
@@ -1,9 +0,0 @@
1
- /**
2
- * option.css
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : May 30, 2016
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
 
 
 
 
 
 
 
 
 
trunk/css/profile.css DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * profile.css
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : March 18, 2014
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
-
11
- /** ==================================================
12
- * .smart-cf-meta-box
13
- */
14
- .smart-cf-meta-box:first-child {
15
- border-top: #ddd solid 1px;
16
- }
17
-
18
- /** ==================================================
19
- * .smart-cf-meta-box-table
20
- */
21
- .smart-cf-meta-box-table {
22
- background: transparent;
23
- border-bottom: #ddd solid 1px;
24
- padding: 10px 0;
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/settings.css DELETED
@@ -1,220 +0,0 @@
1
- /**
2
- * settings.css
3
- * Version : 1.1.0
4
- * Author : inc2734
5
- * Created : September 23, 2014
6
- * Modified : May 31, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
-
11
- /** ==================================================
12
- * #normal-sortables
13
- */
14
- #normal-sortables {
15
- display: none;
16
- }
17
-
18
- /** ==================================================
19
- * .btn-add-group
20
- */
21
- .smart-cf-fields-wrapper .btn-add-group {
22
- margin-top: 10px;
23
- }
24
-
25
- /** ==================================================
26
- * .smart-cf-group
27
- */
28
- .smart-cf-group {
29
- background: #f5f5f5;
30
- border: #ddd solid 1px;
31
- margin: 10px 0 0;
32
- padding: 10px;
33
- position: relative;
34
- }
35
- .smart-cf-group .smart-cf-require {
36
- color: #f60;
37
- font-size: 90%;
38
- margin-left: 3px;
39
- }
40
- .smart-cf-group .smart-cf-notes {
41
- color: #999;
42
- font-size: 90%;
43
- }
44
-
45
- /**
46
- * .btn-remove-group
47
- */
48
- .smart-cf-group .btn-remove-group {
49
- cursor: pointer;
50
- position: absolute;
51
- top: 10px;
52
- right: 10px;
53
- }
54
- .smart-cf-group .btn-remove-group .dashicons,
55
- .smart-cf-group .btn-remove-group .dashicons:before {
56
- font-size: 14px;
57
- height: 14px;
58
- width: 14px;
59
- }
60
-
61
- /**
62
- * .btn-add-field
63
- */
64
- .smart-cf-group .btn-add-field {
65
- margin-top: 5px;
66
- }
67
-
68
- /**
69
- * .smart-cf-group-repeat
70
- */
71
- .smart-cf-group .smart-cf-group-repeat {
72
- margin: 0 0 5px;
73
- }
74
- .smart-cf-group .smart-cf-group-repeat label {
75
- position: relative;
76
- top: -2px;
77
- }
78
-
79
- /**
80
- * .smart-cf-group-names
81
- */
82
- .smart-cf-group .smart-cf-group-names {
83
- width: 100%;
84
- }
85
- .smart-cf-group .smart-cf-group-names th {
86
- text-align: left;
87
- width: 20%;
88
- }
89
-
90
- /**
91
- * .smart-cf-alert
92
- */
93
- .smart-cf-alert {
94
- color: #f60;
95
- display: block;
96
- font-size: 90%;
97
- margin-top: 2px 0;
98
- }
99
-
100
- /** ==================================================
101
- * .smart-cf-fields
102
- */
103
- .smart-cf-group .smart-cf-fields {
104
- margin-top: 7px;
105
- }
106
-
107
- /** ==================================================
108
- * .smart-cf-field
109
- */
110
- .smart-cf-group .smart-cf-field {
111
- background: #fff;
112
- border: #ddd solid 1px;
113
- margin: 5px 0 0;
114
- padding: 10px;
115
- overflow: hidden;
116
- *zoom: 1;
117
- }
118
- .smart-cf-group .smart-cf-field:first-child {
119
- margin-top: 0;
120
- }
121
- .smart-cf-group .smart-cf-field table {
122
- border-collapse: collapse;
123
- width: 100%;
124
- }
125
- .smart-cf-group .smart-cf-field table th,
126
- .smart-cf-group .smart-cf-field table td {
127
- padding: 5px 0;
128
- }
129
- .smart-cf-group .smart-cf-field table th {
130
- font-weight: normal;
131
- padding-top: 10px;
132
- padding-right: 15px;
133
- text-align: left;
134
- vertical-align: top;
135
- width: 15%;
136
- }
137
- .smart-cf-group .smart-cf-field table table {
138
- margin: -5px 0;
139
- }
140
-
141
- /**
142
- * .smart-cf-icon-handle
143
- */
144
- .smart-cf-group .smart-cf-field .smart-cf-icon-handle {
145
- float: left;
146
- margin-top: 4px;
147
- margin-right: 8px;
148
- }
149
-
150
- /**
151
- * .field-label
152
- */
153
- .smart-cf-group .smart-cf-field .field-label {
154
- cursor: pointer;
155
- position: relative;
156
- overflow: hidden;
157
- *zoom: 1;
158
- }
159
- .smart-cf-group .smart-cf-field .field-label small {
160
- color: #999;
161
- font-size: 90%;
162
- }
163
-
164
- /**
165
- * .btn-remove-field
166
- */
167
- .smart-cf-group .smart-cf-field .btn-remove-field {
168
- cursor: pointer;
169
- float: right;
170
- }
171
- .smart-cf-group .smart-cf-field .btn-remove-field .dashicons,
172
- .smart-cf-group .smart-cf-field .btn-remove-field .dashicons:before {
173
- font-size: 14px;
174
- height: 14px;
175
- width: 14px;
176
- }
177
-
178
- /** ==================================================
179
- * #smart-cf-meta-box-condition
180
- */
181
- #smart-cf-meta-box-condition-post b,
182
- #smart-cf-meta-box-condition-profile b,
183
- #smart-cf-meta-box-condition-taxonomy b,
184
- #smart-cf-meta-box-condition-options-page b {
185
- display: block;
186
- margin: 0 0 5px;
187
- }
188
- #smart-cf-meta-box-condition-post label,
189
- #smart-cf-meta-box-condition-profile label,
190
- #smart-cf-meta-box-condition-taxonomy label,
191
- #smart-cf-meta-box-condition-options-page label {
192
- display: block;
193
- margin: 0 0 5px;
194
- }
195
-
196
- /** ==================================================
197
- * .hide
198
- */
199
- .smart-cf-group .smart-cf-field table tr.hide,
200
- .smart-cf-group.hide,
201
- .smart-cf-group .btn-add-field.hide,
202
- .smart-cf-group .smart-cf-group-names.hide,
203
- .smart-cf-group .smart-cf-field.hide,
204
- .smart-cf-group .smart-cf-field table.hide {
205
- display: none;
206
- }
207
-
208
- /** ==================================================
209
- * classes
210
- */
211
- .smart-cf-icon-handle {
212
- background: url( ../images/handle.png ) no-repeat;
213
- cursor: move;
214
- display: inline-block;
215
- margin-right: 10px;
216
- height: 10px;
217
- width: 10px;
218
- overflow: hidden;
219
- position: relative;
220
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/taxonomy.css DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * taxonomy.css
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : April 26, 2014
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
-
11
- /** ==================================================
12
- * .smart-cf-meta-box-table
13
- */
14
- .smart-cf-meta-box-table {
15
- background: transparent;
16
- border-bottom-color: #ddd;
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/wysiwyg.css DELETED
@@ -1,14 +0,0 @@
1
- /**
2
- * wysiwyg.css
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : April 11, 2015
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
-
11
- body {
12
- font-family: "Open Sans", Helvetica, Arial, sans-serif;
13
- font-size: 13px;
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/images/handle.png DELETED
Binary file
trunk/js/editor-colorpicker.js DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * editor-colorpicker.js
3
- * Version : 1.0.1
4
- * Author : inc2734
5
- * Created : October 21, 2014
6
- * Modified : July 28, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
- $( '.smart-cf-meta-box-table' ).each( function( i, e ) {
12
- $( e ).find( '.smart-cf-colorpicker' ).each( function( i, e ) {
13
- if ( $( e ).attr( 'disabled' ) !== 'disabled' ) {
14
- $( e ).wpColorPicker();
15
- }
16
- } );
17
- } );
18
-
19
- $( document ).on( 'smart-cf-after-add-group', function( e, obj ) {
20
- var parent = $( obj.button ).parents( '.smart-cf-meta-box-repeat-tables' );
21
- parent.find( '.smart-cf-colorpicker' ).each( function( i, e ) {
22
- if ( $( e ).attr( 'disabled' ) !== 'disabled' ) {
23
- $( e ).wpColorPicker();
24
- }
25
- } );
26
- } );
27
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor-datepicker.js DELETED
@@ -1,27 +0,0 @@
1
- /**
2
- * editor-datepicker.js
3
- * Version : 1.0.1
4
- * Author : inc2734
5
- * Created : January 18, 2015
6
- * Modified : July 28, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
- $( '.smart-cf-meta-box-table' ).each( function( i, e ) {
12
- $( e ).find( '.smart-cf-datepicker' ).each( function( i, e ) {
13
- if ( $( e ).attr( 'disabled' ) !== 'disabled' ) {
14
- $( e ).datepicker( $( e ).data( 'js' ) );
15
- }
16
- } );
17
- } );
18
-
19
- $( document ).on( 'smart-cf-after-add-group', function( e, obj ) {
20
- var parent = $( obj.button ).parents( '.smart-cf-meta-box-repeat-tables' );
21
- parent.find( '.smart-cf-datepicker' ).each( function( i, e ) {
22
- if ( $( e ).attr( 'disabled' ) !== 'disabled' ) {
23
- $( e ).datepicker( $( e ).data( 'js' ) );
24
- }
25
- } );
26
- } );
27
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor-relation-common.js DELETED
@@ -1,76 +0,0 @@
1
- jQuery( function( $ ) {
2
-
3
- var table_class = 'tr';
4
-
5
- /**
6
- * 選択肢
7
- */
8
- var choices_li = '.smart-cf-relation-children-select li';
9
- $( '.smart-cf-meta-box' ).on( 'click', choices_li, function() {
10
- var id = $( this ).data( 'id' );
11
- var parent = $( this ).closest( table_class );
12
- var limit = parent.find( '.smart-cf-relation-left' ).data( 'limit' );
13
-
14
- if ( limit > 0 && limit <= parent.find( '.smart-cf-relation-right li' ).length ) {
15
- return true;
16
- }
17
-
18
- if ( parent.find( '.smart-cf-relation-right li[data-id="' + id + '"]' ).length !== 0 ) {
19
- return true;
20
- }
21
-
22
- var clone = $( this ).clone();
23
- clone
24
- .prepend( $( '<span class="smart-cf-icon-handle dashicons dashicons-menu"></span>' ) )
25
- .append( $( '<span class="relation-remove">-</span>' ) );
26
- parent.find( '.smart-cf-relation-right ul' ).append( clone );
27
- update_relation_value( $( this ).closest( 'tr' ) );
28
- } );
29
-
30
- /**
31
- * 選択済み項目の削除
32
- */
33
- var relation_remove = '.smart-cf-relation-right li .relation-remove';
34
- $( '.smart-cf-meta-box' ).on( 'click', relation_remove, function() {
35
- var tr = $( this ).closest( 'tr' );
36
- $( this ).parent().remove();
37
- update_relation_value( tr );
38
- } );
39
-
40
- /**
41
- * update_relation_value
42
- * @param dom tr
43
- */
44
- function update_relation_value( tr ) {
45
- var hidden = tr.find( 'input[type="hidden"]' );
46
- hidden.each( function( i, e ) {
47
- if ( i !== 0 ) {
48
- $( this ).remove();
49
- }
50
- } );
51
- tr.find( '.smart-cf-relation-right li' ).each( function( i, e ) {
52
- var hidden_box = $( this ).closest( table_class ).find( '.smart-cf-relation-children-select' );
53
- var id = $( this ).data( 'id' );
54
- var clone = hidden.first().clone();
55
- var name = clone.attr( 'name' );
56
- clone.attr( 'name', name + '[]' );
57
- clone.val( id );
58
- hidden_box.append( clone );
59
- } );
60
- }
61
-
62
- /**
63
- * sortable
64
- */
65
- $( '.smart-cf-meta-box' ).find( '.smart-cf-relation-right ul' )
66
- .on( 'mousedown', function( event ) {
67
- event.stopPropagation();
68
- } )
69
- .sortable( {
70
- handle: '.smart-cf-icon-handle',
71
- update: function() {
72
- update_relation_value( $( this ).closest( 'tr' ) );
73
- }
74
- } );
75
-
76
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor-relation-post-types.js DELETED
@@ -1,94 +0,0 @@
1
- /**
2
- * editor.js
3
- * Version : 1.2.0
4
- * Author : inc2734
5
- * Created : September 30, 2014
6
- * Modified : January 27, 2017
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
-
12
- var table_class = 'tr';
13
-
14
- /**
15
- * 初期化
16
- * click_count はロードボタンを押すごとに加算。
17
- * 検索ボックスが変更されるたびに 0 にリセットすること。
18
- */
19
- $( '.smart-cf-meta-box .load-relation-post-types' ).closest( table_class )
20
- .data( 'click_count', 0 )
21
- .data( 'search_timer', null )
22
- .data( 'recent_search_query', '' );
23
-
24
- /**
25
- * 検索ボタン
26
- */
27
- $( document ).on( 'keyup', '.smart-cf-meta-box .search-input-post-types', function() {
28
- var parent = $( this ).closest( table_class );
29
- var search_timer = parent.data( 'search_timer' );
30
- clearTimeout( search_timer );
31
-
32
- parent.data( 'click_count', 0 );
33
- parent.find( '.smart-cf-relation-children-select ul li' ).remove();
34
-
35
- var search_query = $( this ).val();
36
- parent.data( 'recent_search_query', search_query );
37
- parent.data( 'search_timer', setTimeout( function() {
38
- get_posts( { s: search_query }, parent );
39
- }, 2000 ) );
40
- } );
41
-
42
- /**
43
- * 読み込みボタン
44
- */
45
- $( document ).on( 'click', '.smart-cf-meta-box .load-relation-post-types', function() {
46
- var parent = $( this ).closest( table_class );
47
- var click_count = parent.data( 'click_count' );
48
- click_count ++;
49
- parent.data( 'click_count', click_count );
50
- var search_query = parent.data( 'recent_search_query' );
51
- if ( search_query ) {
52
- get_posts( { s: search_query }, parent );
53
- } else {
54
- get_posts( {}, parent );
55
- }
56
- } );
57
-
58
- /**
59
- * クエリ
60
- */
61
- function get_posts( args, table ) {
62
- var click_count = table.data( 'click_count' );
63
- var post_types = table.find( '.smart-cf-relation-left' ).data( 'post-types' );
64
- var btn_load = table.find( '.load-relation-post-types' );
65
- var btn_load_text = btn_load.text();
66
- btn_load.text( 'Now loading...' );
67
-
68
- args = $.extend( args, {
69
- action : smart_cf_relation_post_types.action,
70
- nonce : smart_cf_relation_post_types.nonce,
71
- click_count: click_count,
72
- post_types : post_types
73
- } );
74
- $.post(
75
- smart_cf_relation_post_types.endpoint,
76
- args,
77
- function( response ) {
78
- btn_load.addClass( 'hide' );
79
- $( response ).each( function( i, e ) {
80
- table.find( '.smart-cf-relation-children-select ul' ).append(
81
- $( '<li />' )
82
- .attr( 'data-id', this.ID )
83
- .attr( 'data-status', this.post_status )
84
- .text( this.post_title )
85
- );
86
- } );
87
-
88
- btn_load.text( btn_load_text );
89
- btn_load.removeClass( 'hide' );
90
- }
91
- );
92
- return false;
93
- }
94
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor-relation-taxonomies.js DELETED
@@ -1,93 +0,0 @@
1
- /**
2
- * editor.js
3
- * Version : 1.2.0
4
- * Author : inc2734
5
- * Created : February 2, 2016
6
- * Modified : January 27, 2017
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
-
12
- var table_class = 'tr';
13
-
14
- /**
15
- * 初期化
16
- * click_count はロードボタンを押すごとに加算。
17
- * 検索ボックスが変更されるたびに 0 にリセットすること。
18
- */
19
- $( '.smart-cf-meta-box .load-relation-terms' ).closest( table_class )
20
- .data( 'click_count', 0 )
21
- .data( 'search_timer', null )
22
- .data( 'recent_search_query', '' );
23
-
24
- /**
25
- * 検索ボタン
26
- */
27
- $( document ).on( 'keyup', '.smart-cf-meta-box .search-input-terms', function() {
28
- var parent = $( this ).closest( table_class );
29
- var search_timer = parent.data( 'search_timer' );
30
- clearTimeout( search_timer );
31
-
32
- parent.data( 'click_count', 0 );
33
- parent.find( '.smart-cf-relation-children-select ul li' ).remove();
34
-
35
- var search_query = $( this ).val();
36
- parent.data( 'recent_search_query', search_query );
37
- parent.data( 'search_timer', setTimeout( function() {
38
- get_terms( { search: search_query }, parent );
39
- }, 2000 ) );
40
- } );
41
-
42
- /**
43
- * 読み込みボタン
44
- */
45
- $( document ).on( 'click', '.smart-cf-meta-box .load-relation-terms', function() {
46
- var parent = $( this ).closest( table_class );
47
- var click_count = parent.data( 'click_count' );
48
- click_count ++;
49
- parent.data( 'click_count', click_count );
50
- var search_query = parent.data( 'recent_search_query' );
51
- if ( search_query ) {
52
- get_terms( { search: search_query }, parent );
53
- } else {
54
- get_terms( {}, parent );
55
- }
56
- } );
57
-
58
- /**
59
- * クエリ
60
- */
61
- function get_terms( args, table ) {
62
- var click_count = table.data( 'click_count' );
63
- var taxonomies = table.find( '.smart-cf-relation-left' ).data( 'taxonomies' );
64
- var btn_load = table.find( '.load-relation-terms' );
65
- var btn_load_text = btn_load.text();
66
- btn_load.text( 'Now loading...' );
67
-
68
- args = $.extend( args, {
69
- action : smart_cf_relation_taxonomies.action,
70
- nonce : smart_cf_relation_taxonomies.nonce,
71
- click_count: click_count,
72
- taxonomies : taxonomies
73
- } );
74
- $.post(
75
- smart_cf_relation_taxonomies.endpoint,
76
- args,
77
- function( response ) {
78
- btn_load.addClass( 'hide' );
79
- $( response ).each( function( i, e ) {
80
- table.find( '.smart-cf-relation-children-select ul' ).append(
81
- $( '<li />' )
82
- .attr( 'data-id', this.term_id )
83
- .text( this.name )
84
- );
85
- } );
86
-
87
- btn_load.text( btn_load_text );
88
- btn_load.removeClass( 'hide' );
89
- }
90
- );
91
- return false;
92
- }
93
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor-wysiwyg.js DELETED
@@ -1,164 +0,0 @@
1
- /**
2
- * editor-wysiwyg.js
3
- * Version : 2.0.0
4
- * Author : inc2734
5
- * Created : September 28, 2014
6
- * Modified : June 4, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
-
12
- $( '.smart-cf-meta-box' ).each( function( i, e ) {
13
- var wrapper = $( e );
14
- var table_class = '.smart-cf-meta-box-table';
15
-
16
- /**
17
- * ロード時に wysiwyg エディター用のテキストエリアがあったら wysiwyg 化する。
18
- */
19
- wrapper.find( '.smart-cf-wp-editor' ).each( function( i, e ) {
20
- if ( $( this ).parents( table_class ).css( 'display' ) === 'none' ) {
21
- return true;
22
- }
23
- $( e ).attr( 'id', $( e ).attr( 'name' ).replace( /(\[|\]|\-)/ig, '_' ) );
24
- var editor_id = $( e ).attr( 'id' );
25
- var wrap = $( e ).parents( '.wp-editor-wrap' );
26
- initialize_editor( wrap, editor_id );
27
-
28
- var mceinit = scf_generate_mceinit( editor_id );
29
- tinyMCEPreInit.mceInit[editor_id] = mceinit;
30
- if ( typeof tinymce !== 'undefined' ) {
31
- tinymce.init( mceinit );
32
- }
33
-
34
- var qtinit = scf_generate_qtinit( editor_id );
35
- tinyMCEPreInit.qtInit[editor_id] = qtinit;
36
- if ( typeof quicktags !== 'undefined' ) {
37
- quicktags( qtinit );
38
- QTags._buttonsInit();
39
- }
40
- } );
41
- } );
42
-
43
- /**
44
- * グループ追加ボタンを押したときに発火。
45
- * wysiwyg エディター用のテキストエリアがあったら wysiwyg 化する。
46
- */
47
- $( document ).on( 'smart-cf-after-add-group', function( e, data ) {
48
- var button = data.button;
49
- var clone = data.clone;
50
- clone.find( '.smart-cf-wp-editor' ).each( function( i, e ) {
51
- $( e ).attr( 'id', $( e ).attr( 'name' ).replace( /(\[|\]|\-)/ig, '_' ) );
52
- var editor_id = $( e ).attr( 'id' );
53
- var wrap = $( e ).parents( '.wp-editor-wrap' );
54
- initialize_editor( wrap, editor_id );
55
-
56
- var mceinit = scf_generate_mceinit( editor_id );
57
- tinyMCEPreInit.mceInit[editor_id] = mceinit;
58
- if ( typeof tinymce !== 'undefined' ) {
59
- tinymce.init( mceinit );
60
- }
61
-
62
- var qtinit = scf_generate_qtinit( editor_id );
63
- tinyMCEPreInit.qtInit[editor_id] = qtinit;
64
- if ( typeof quicktags !== 'undefined' ) {
65
- quicktags( qtinit );
66
- QTags._buttonsInit();
67
- }
68
- } );
69
- } );
70
-
71
- /**
72
- * ドラッグしたときに発火。
73
- * wysiwyg エディター用のテキストエリアをオフる。
74
- */
75
- $( document ).on( 'smart-cf-repeat-table-sortable-start', function( e, ui ) {
76
- $( ui ).find( '.smart-cf-wp-editor' ).each( function( i, e ) {
77
- var editor_id = $( this ).attr( 'id' );
78
-
79
- tinymce.execCommand( 'mceRemoveEditor', false, editor_id );
80
-
81
- var mceinit = scf_generate_mceinit( editor_id );
82
- tinyMCEPreInit.mceInit[editor_id] = mceinit;
83
-
84
- var qtinit = scf_generate_qtinit( editor_id );
85
- tinyMCEPreInit.qtInit[editor_id] = qtinit;
86
- if ( typeof quicktags !== 'undefined' ) {
87
- quicktags( qtinit );
88
- QTags._buttonsInit();
89
- }
90
- } );
91
- } );
92
-
93
- /**
94
- * ドロップしたときに発火。
95
- * wysiwyg エディター用のテキストエリアを wysiwyg 化する。
96
- */
97
- $( document ).on( 'smart-cf-repeat-table-sortable-stop', function( e, ui ) {
98
- $( ui ).find( '.smart-cf-wp-editor' ).each( function( i, e ) {
99
- var editor_id = $( this ).attr( 'id' );
100
-
101
- var mceinit = scf_generate_mceinit( editor_id );
102
- tinyMCEPreInit.mceInit[editor_id] = mceinit;
103
- if ( typeof tinymce !== 'undefined' ) {
104
- tinymce.init( mceinit );
105
- }
106
-
107
- var qtinit = scf_generate_qtinit( editor_id );
108
- tinyMCEPreInit.qtInit[editor_id] = qtinit;
109
- if ( typeof quicktags !== 'undefined' ) {
110
- quicktags( qtinit );
111
- QTags._buttonsInit();
112
- }
113
- } );
114
- } );
115
-
116
- function initialize_editor( wrap, editor_id ) {
117
- wrap.attr( 'id', 'wp-' + editor_id + '-wrap' );
118
- wrap.find( 'a.add_media' ).attr( 'data-editor', editor_id );
119
- wrap.find( '.switch-tmce' )
120
- .attr( 'data-wp-editor-id', editor_id )
121
- .attr( 'id', editor_id + '-tmce' );
122
- wrap.find( '.switch-html' )
123
- .attr( 'data-wp-editor-id', editor_id )
124
- .attr( 'id', editor_id + '-html' );
125
- wrap.find( '.quicktags-toolbar' ).attr( 'id', 'qt_' + editor_id + '_toolbar' );
126
- }
127
-
128
- function scf_generate_mceinit( editor_id ) {
129
- var mceinit;
130
- if ( typeof tinyMCEPreInit.mceInit.content !== 'undefined' ) {
131
- mceinit = $.extend( true, {}, tinyMCEPreInit.mceInit.content );
132
- mceinit.selector = '#' + editor_id;
133
- } else {
134
- mceinit = {
135
- content_css: ['../wp-includes/js/tinymce/skins/wordpress/wp-content.css', '../wp-content/plugins/smart-custom-fields/css/wysiwyg.css'],
136
- menubar: false,
137
- plugins: "hr,wplink,fullscreen,wordpress,textcolor,paste,charmap",
138
- toolbar1: "bold,italic,strikethrough,bullist,numlist,blockquote,hr,alignleft,aligncenter,alignright,link,unlink,wp_more,spellchecker,wp_adv,fullscreen",
139
- toolbar2: "formatselect,underline,alignjustify,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help,code",
140
- convert_urls: false,
141
- theme: "modern",
142
- skin: "lightgray",
143
- wp_autoresize_on: true,
144
- wpautop: true,
145
- selector: '#' + editor_id
146
- };
147
- }
148
- return mceinit;
149
- }
150
-
151
- function scf_generate_qtinit( editor_id ) {
152
- var qtinit;
153
- if ( typeof tinyMCEPreInit.qtInit.content !== 'undefined' ) {
154
- qtinit = $.extend( true, {}, tinyMCEPreInit.qtInit.content );
155
- qtinit.id = editor_id;
156
- } else {
157
- qtinit = {
158
- id: editor_id,
159
- buttons: "strong,em,link,block,del,ins,img,ul,ol,li,code,more,close"
160
- }
161
- }
162
- return qtinit;
163
- }
164
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/editor.js DELETED
@@ -1,204 +0,0 @@
1
- /**
2
- * editor.js
3
- * Version : 2.0.0
4
- * Author : inc2734
5
- * Created : September 23, 2014
6
- * Modified : June 4, 2016
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
-
12
- $( '.smart-cf-meta-box' ).each( function( i, e ) {
13
- var wrapper = $( e );
14
- var btn_add_repeat_group = wrapper.find( '.btn-add-repeat-group' );
15
- var btn_remove_repeat_group = wrapper.find( '.btn-remove-repeat-group' );
16
- var table_class = '.smart-cf-meta-box-table';
17
- var cnt = wrapper.find( table_class ).length;
18
-
19
- /**
20
- * グループ追加ボタン
21
- */
22
- btn_add_repeat_group.click( function( e ) {
23
- cnt ++;
24
- var parent = $( this ).parents( '.smart-cf-meta-box-repeat-tables' );
25
- add_repeat_group( $( this ) );
26
- } );
27
-
28
- /**
29
- * グループ削除ボタン
30
- */
31
- btn_remove_repeat_group.click( function() {
32
- var table = $( this ).parents( table_class );
33
- table.fadeOut( 'fast', function() {
34
- $( this ).remove();
35
- } );
36
- var tables = $( this ).parents( '.smart-cf-meta-box-repeat-tables' );
37
- if ( tables.find( table_class ).length === 2 ) {
38
- cnt ++;
39
- add_repeat_group( $( this ) );
40
- }
41
- } );
42
-
43
- function add_repeat_group( button ) {
44
- var tables = button.parents( '.smart-cf-meta-box-repeat-tables' );
45
- var table = tables.find( table_class ).first();
46
- var clone = table.clone( true, true ).hide();
47
-
48
- clone.find( 'input, select, textarea' ).each( function( i, e ) {
49
- var name = $( this ).attr( 'name' );
50
- if ( name ) {
51
- $( this ).attr( 'name',
52
- name.replace(
53
- /^(smart-custom-fields\[.+?\])\[\]/,
54
- '$1[' + cnt + ']'
55
- )
56
- );
57
- $( this ).removeAttr( 'disabled' );
58
- }
59
- } );
60
-
61
- button.parent().after( clone.fadeIn( 'fast' ) );
62
- button.trigger( 'smart-cf-after-add-group', { button: button, clone: clone} );
63
- }
64
-
65
- /**
66
- * 画像アップローダー
67
- */
68
- wrapper.find( '.btn-add-image' ).click( function( e ) {
69
- e.preventDefault();
70
- var custom_uploader_image;
71
- var upload_button = $( this );
72
- if ( custom_uploader_image ) {
73
- custom_uploader_image.open();
74
- return;
75
- }
76
-
77
- wp.media.view.Modal.prototype.on( 'ready', function(){
78
- $( 'select.attachment-filters' )
79
- .find( '[value="uploaded"]' )
80
- .attr( 'selected', true )
81
- .parent()
82
- .trigger( 'change' );
83
- } );
84
-
85
- custom_uploader_image = wp.media( {
86
- button : {
87
- text: smart_cf_uploader.image_uploader_title
88
- },
89
- states: [
90
- new wp.media.controller.Library({
91
- title : smart_cf_uploader.image_uploader_title,
92
- library : wp.media.query( { type: 'image' } ),
93
- multiple : false,
94
- filterable: 'uploaded'
95
- })
96
- ]
97
- } );
98
-
99
- custom_uploader_image.on( 'select', function() {
100
- var images = custom_uploader_image.state().get( 'selection' );
101
- images.each( function( file ){
102
- var sizes = file.get('sizes');
103
- var image_area = upload_button.parent().find( '.smart-cf-upload-image' );
104
- var sizename = image_area.data('size');
105
- var img = sizes[ sizename ] || sizes.full;
106
- image_area.find( 'img' ).remove();
107
- image_area.prepend(
108
- '<img src="' + img.url + '" />'
109
- );
110
- image_area.removeClass( 'hide' );
111
- upload_button.parent().find( 'input[type="hidden"]' ).val( file.toJSON().id );
112
- } );
113
- } );
114
-
115
- custom_uploader_image.open();
116
- } );
117
-
118
- /**
119
- * 画像削除ボタン
120
- */
121
- wrapper.find( '.smart-cf-upload-image' ).hover( function() {
122
- $( this ).find( '.btn-remove-image' ).fadeIn( 'fast', function() {
123
- $( this ).removeClass( 'hide' );
124
- } );
125
- }, function() {
126
- $( this ).find( '.btn-remove-image' ).fadeOut( 'fast', function() {
127
- $( this ).addClass( 'hide' );
128
- } );
129
- } );
130
- wrapper.find( '.btn-remove-image' ).click( function() {
131
- $( this ).parent().find( 'img' ).remove();
132
- $( this ).parent().siblings( 'input[type="hidden"]' ).val( '' );
133
- $( this ).parent().addClass( 'hide' );
134
- } );
135
-
136
- /**
137
- * ファイルアップローダー
138
- */
139
- wrapper.find( '.btn-add-file' ).click( function( e ) {
140
- e.preventDefault();
141
- var custom_uploader_file;
142
- var upload_button = $( this );
143
- if ( custom_uploader_file ) {
144
- custom_uploader_file.open();
145
- return;
146
- }
147
- custom_uploader_file = wp.media( {
148
- title : smart_cf_uploader.file_uploader_title,
149
- button: {
150
- text: smart_cf_uploader.file_uploader_title
151
- },
152
- multiple: false
153
- } );
154
-
155
- custom_uploader_file.on( 'select', function() {
156
- var images = custom_uploader_file.state().get( 'selection' );
157
- images.each( function( file ){
158
- var image_area = upload_button.parent().find( '.smart-cf-upload-file' );
159
- image_area.find( 'a' ).remove();
160
- image_area.prepend(
161
- '<a href="' + file.toJSON().url + '" target="_blank"><img src="' + file.toJSON().icon + '" /><span>' + file.toJSON().filename + '</span></a>'
162
- );
163
- image_area.removeClass( 'hide' );
164
- upload_button.parent().find( 'input[type="hidden"]' ).val( file.toJSON().id );
165
- } );
166
- } );
167
-
168
- custom_uploader_file.open();
169
- } );
170
-
171
- /**
172
- * ファイル削除ボタン
173
- */
174
- wrapper.find( '.smart-cf-upload-file' ).hover( function() {
175
- $( this ).find( '.btn-remove-file' ).fadeIn( 'fast', function() {
176
- $( this ).removeClass( 'hide' );
177
- } );
178
- }, function() {
179
- $( this ).find( '.btn-remove-file' ).fadeOut( 'fast', function() {
180
- $( this ).addClass( 'hide' );
181
- } );
182
- } );
183
- wrapper.find( '.btn-remove-file' ).click( function() {
184
- $( this ).parent().find( 'img' ).remove();
185
- $( this ).parent().siblings( 'input[type="hidden"]' ).val( '' );
186
- $( this ).parent().addClass( 'hide' );
187
- } );
188
-
189
- /**
190
- * sortable
191
- */
192
- wrapper.find( '.smart-cf-meta-box-repeat-tables' ).sortable( {
193
- handle: '.smart-cf-icon-handle',
194
- items : '> .smart-cf-meta-box-table:not( :first-child )',
195
- start : function( e, ui ) {
196
- $( this ).trigger( 'smart-cf-repeat-table-sortable-start', ui.item );
197
- },
198
- stop : function( e, ui ) {
199
- $( this ).trigger( 'smart-cf-repeat-table-sortable-stop', ui.item );
200
- },
201
- } );
202
-
203
- } );
204
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/settings-colorpicker.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * settings-colorpicker.js
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : March 10, 2014
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
- $( document ).on( 'smart-cf-setting-field-open', function( e, options ) {
12
- if ( $( options ).hasClass( 'smart-cf-field-options-colorpicker' ) ) {
13
- $( options ).find( '.default-option' ).each( function( i, e ) {
14
- $( e ).wpColorPicker();
15
- } );
16
- }
17
- } );
18
- $( document ).on( 'smart-cf-setting-show-options', function( e, options ) {
19
- if ( $( options ).hasClass( 'smart-cf-field-options-colorpicker' ) ) {
20
- $( options ).find( '.default-option' ).each( function( i, e ) {
21
- $( e ).wpColorPicker();
22
- } );
23
- }
24
- } );
25
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/settings-datepicker.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * settings-datepicker.js
3
- * Version : 1.0.0
4
- * Author : inc2734
5
- * Created : March 10, 2015
6
- * Modified :
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
- $( document ).on( 'smart-cf-setting-field-open', function( e, options ) {
12
- if ( $( options ).hasClass( 'smart-cf-field-options-datepicker' ) ) {
13
- $( options ).find( '.default-option' ).each( function( i, e ) {
14
- $( e ).datepicker( $( e ).data( 'js' ) );
15
- } );
16
- }
17
- } );
18
- $( document ).on( 'smart-cf-setting-show-options', function( e, options ) {
19
- if ( $( options ).hasClass( 'smart-cf-field-options-datepicker' ) ) {
20
- $( options ).find( '.default-option' ).each( function( i, e ) {
21
- $( e ).datepicker( $( e ).data( 'js' ) );
22
- } );
23
- }
24
- } );
25
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/js/settings.js DELETED
@@ -1,221 +0,0 @@
1
- /**
2
- * settings.js
3
- * Version : 1.1.0
4
- * Author : inc2734
5
- * Created : September 23, 2014
6
- * Modified : March 10, 2015
7
- * License : GPLv2 or later
8
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
- */
10
- jQuery( function( $ ) {
11
- $( '.smart-cf-fields-wrapper' ).each( function( i, e ) {
12
- var wrapper = $( e );
13
- var btn_add_group = wrapper.find( '.btn-add-group' );
14
- var btn_remove_group = wrapper.find( '.btn-remove-group' );
15
- var btn_add_field = wrapper.find( '.btn-add-field' );
16
- var btn_remove_field = wrapper.find( '.btn-remove-field' );
17
- var group_class = '.smart-cf-group';
18
- var field_class = '.smart-cf-field';
19
- var duplicate_alert_class = '.smart-cf-duplicate-alert';
20
- var options = wrapper.find( '.smart-cf-field-options' );
21
- var cnt = wrapper.find( field_class ).length;
22
-
23
- /**
24
- * 重複エラーメッセージ表示 & 重複時の更新不可
25
- */
26
- wrapper.find( 'input[class="smart-cf-group-name"], input[class="smart-cf-field-name"]' ).keyup( function() {
27
- var val = $( this ).val();
28
- var cnt = 0;
29
- wrapper.find( 'input[class="smart-cf-group-name"], input[class="smart-cf-field-name"]' ).each( function( i, e ) {
30
- if ( val === $( this ).val() && val !== '' ) {
31
- cnt ++;
32
- }
33
- } );
34
- if ( cnt > 1 ) {
35
- if ( $( this ).siblings( duplicate_alert_class ).length < 1 ) {
36
- $( this ).after(
37
- $( '<div class="smart-cf-alert" />' )
38
- .addClass( duplicate_alert_class.replace( '.', '' ) )
39
- .text( smart_cf_settings.duplicate_alert )
40
- );
41
- }
42
- cnt = 0;
43
- } else {
44
- $( this ).siblings( duplicate_alert_class ).remove();
45
- }
46
-
47
- if ( $( duplicate_alert_class ).length ) {
48
- $( '#publish' ).attr( 'disabled', 'disabled' );
49
- } else {
50
- $( '#publish' ).removeAttr( 'disabled' );
51
- }
52
- } );
53
-
54
- /**
55
- * sortable
56
- */
57
- $( '.smart-cf-groups' ).sortable( {
58
- cursor: 'move',
59
- handle: '.smart-cf-icon-handle'
60
- } );
61
- $( '.smart-cf-fields' ).sortable( {
62
- cursor: 'move',
63
- handle: '.smart-cf-icon-handle'
64
- } );
65
-
66
- /**
67
- * フィールドの開閉
68
- */
69
- $( '.field-label' ).click( function() {
70
- var field_label = $( this );
71
- var table = $( this ).parents( field_class ).find( 'table' );
72
- if ( table.hasClass( 'hide' ) ) {
73
- field_label.html( "&nbsp;" );
74
- table.fadeIn( 'fast', function() {
75
- $( this ).removeClass( 'hide' );
76
- table.find( '.smart-cf-field-options' ).each( function( i, e ) {
77
- $( this ).trigger( 'smart-cf-setting-field-open', e );
78
- } );
79
- } );
80
- } else {
81
- var label = table.find( '.smart-cf-field-label' ).val();
82
- var name = $( '<small>' ).text( '[ ' + table.find('.smart-cf-field-name').val() + ' ]' );
83
-
84
- if ( !label ) {
85
- label = table.find( '.smart-cf-field-name' ).val();
86
- }
87
- table.fadeOut( 'fast', function() {
88
- $( this ).addClass( 'hide' );
89
- field_label.text( label + " " ).append( name );
90
- } );
91
- }
92
- } );
93
-
94
- /**
95
- * グループ追加ボタン
96
- */
97
- btn_add_group.click( function() {
98
- cnt ++;
99
- var group = wrapper.find( group_class );
100
- var group_clone = group.first().clone( true, true );
101
- group.last().after( group_clone.fadeIn( 'fast', function() {
102
- $( this ).removeClass( 'hide' );
103
- } ) );
104
-
105
- var field = group_clone.find( field_class );
106
- var field_clone = field.first().clone( true, true );
107
- field.last().after( field_clone.removeClass( 'hide' ) );
108
-
109
- group_clone.find( 'input, select, textarea' ).each( function( i, e ) {
110
- $( this ).attr( 'name',
111
- $( this ).attr( 'name' ).replace(
112
- /^(smart-custom-fields)\[\d+\]/,
113
- '$1[' + cnt + ']'
114
- )
115
- );
116
- } );
117
-
118
- field_clone.find( 'input, select, textarea' ).each( function( i, e ) {
119
- $( this ).attr( 'name',
120
- $( this ).attr( 'name' ).replace(
121
- /^(smart-custom-fields)\[.+?\](\[fields\])\[\d+?\]/,
122
- '$1[' + cnt + ']$2[' + cnt + ']'
123
- )
124
- );
125
- } );
126
- } );
127
-
128
- /**
129
- * グループ削除ボタン
130
- */
131
- btn_remove_group.click( function() {
132
- $( this ).parents( group_class ).fadeOut( 'fast', function() {
133
- $( this ).remove();
134
- } );
135
- } );
136
-
137
- /**
138
- * フィールド追加ボタン
139
- */
140
- btn_add_field.click( function() {
141
- cnt ++;
142
- var group = $( this ).parents( group_class );
143
- var field = group.find( field_class );
144
- var clone = field.first().clone( true, true );
145
- field.last().after( clone.fadeIn( 'fast', function() {
146
- $( this ).removeClass( 'hide' );
147
- } ) );
148
-
149
- clone.find( 'input, select, textarea' ).each( function( i, e ) {
150
- $( this ).attr( 'name',
151
- $( this ).attr( 'name' ).replace(
152
- /^(smart-custom-fields\[.+?\]\[fields\])\[\d+?\]/,
153
- '$1[' + cnt + ']'
154
- )
155
- );
156
- } );
157
- } );
158
-
159
- /**
160
- * フィールド削除ボタン
161
- */
162
- btn_remove_field.click( function() {
163
- $( this ).parents( field_class ).fadeOut( 'fast', function() {
164
- $( this ).remove();
165
- } );
166
- } );
167
-
168
- /**
169
- * 選択項目オプション
170
- */
171
- options.find( 'input, textarea, select' ).attr( 'disabled', 'disabled' );
172
- wrapper.find( '.smart-cf-field-select' ).each( function( i, e ) {
173
- var selected_type = $( this ).val();
174
- $( this ).parents( field_class ).find( '.smart-cf-field-options-' + selected_type )
175
- .removeClass( 'hide' )
176
- .find( 'input, textarea, select' ).removeAttr( 'disabled' );
177
- } );
178
-
179
- wrapper.find( '.smart-cf-field-select' ).change( function() {
180
- var field = $( this ).parents( field_class );
181
- var val = $( this ).val();
182
-
183
- var hide_options = field.find( '.smart-cf-field-options' );
184
- hide_options.addClass( 'hide' );
185
- hide_options.find( 'input, textarea, select' ).attr( 'disabled', 'disabled' );
186
-
187
- var show_options = field.find( '.smart-cf-field-options-' + val );
188
- show_options.find( 'input, textarea, select' ).removeAttr( 'disabled' );
189
- show_options.removeClass( 'hide' );
190
- show_options.trigger( 'smart-cf-setting-show-options', show_options );
191
- } );
192
-
193
- /**
194
- * リピートボタンクリック時
195
- */
196
- wrapper.find( '.smart-cf-group-repeat input' ).click( function() {
197
- var group = $( this ).parents( group_class );
198
- var names = group.find( '.smart-cf-group-names' );
199
- var btn_add_field = group.find( '.btn-add-field' );
200
- if ( $( this ).prop( 'checked' ) ) {
201
- names.removeClass( 'hide' );
202
- btn_add_field.removeClass( 'hide' );
203
- } else {
204
- names.addClass( 'hide' );
205
- btn_add_field.addClass( 'hide' );
206
- }
207
- } );
208
-
209
- /**
210
- * フィールド名入力ボックス
211
- */
212
- wrapper.find( '.smart-cf-field-label' ).focus( function() {
213
- var field = $( this ).parents( '.smart-cf-field' );
214
- var name_val = field.find( '.smart-cf-field-name' ).val();
215
- var label_val = $( this ).val();
216
- if ( name_val && !label_val ) {
217
- $( this ).val( name_val );
218
- }
219
- } );
220
- } );
221
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/languages/smart-custom-fields-ja.mo DELETED
Binary file
trunk/languages/smart-custom-fields-ja.po DELETED
@@ -1,379 +0,0 @@
1
- # Copyright (C) 2015 Smart Custom Fields
2
- # This file is distributed under the same license as the Smart Custom Fields package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Smart Custom Fields 3.1.7\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/smart-custom-"
7
- "fields\n"
8
- "POT-Creation-Date: 2018-06-26 09:22+0900\n"
9
- "PO-Revision-Date: 2018-06-26 09:22+0900\n"
10
- "Last-Translator: inc2734 <inc@2inc.org>\n"
11
- "Language-Team: Japanese\n"
12
- "Language: ja\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=UTF-8\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
17
- "X-Generator: Poedit 2.0.4\n"
18
- "Plural-Forms: nplurals=1; plural=0;\n"
19
- "X-Poedit-KeywordsList: __;_e;esc_html__;esc_html_e;esc_attr__;esc_attr_e\n"
20
- "X-Poedit-Basepath: ..\n"
21
- "X-Poedit-SearchPath-0: .\n"
22
-
23
- #: classes/controller/class.controller-base.php:46
24
- msgid "Image setting"
25
- msgstr "画像設定"
26
-
27
- #: classes/controller/class.controller-base.php:47
28
- msgid "File setting"
29
- msgstr "ファイル設定"
30
-
31
- #: classes/controller/class.option.php:57
32
- msgid "Save settings"
33
- msgstr "設定を保存"
34
-
35
- #: classes/controller/class.profile.php:43
36
- #: classes/controller/class.settings.php:82
37
- msgid "Custom Fields"
38
- msgstr "カスタムフィールド"
39
-
40
- #: classes/controller/class.settings.php:29
41
- msgid "Basic fields"
42
- msgstr "基本フィールド"
43
-
44
- #: classes/controller/class.settings.php:33
45
- msgid "Select fields"
46
- msgstr "選択フィールド"
47
-
48
- #: classes/controller/class.settings.php:37
49
- msgid "Content fields"
50
- msgstr "コンテンツフィールド"
51
-
52
- #: classes/controller/class.settings.php:41
53
- msgid "Other fields"
54
- msgstr "その他のフィールド"
55
-
56
- #: classes/controller/class.settings.php:69
57
- msgid "Same name exists!"
58
- msgstr "同じ名前が存在します!"
59
-
60
- #: classes/controller/class.settings.php:88
61
- msgid "Display conditions ( Post )"
62
- msgstr "表示条件(投稿)"
63
-
64
- #: classes/controller/class.settings.php:95
65
- msgid "Display conditions ( Profile )"
66
- msgstr "表示条件(プロフィール)"
67
-
68
- #: classes/controller/class.settings.php:102
69
- msgid "Display conditions ( Taxonomy )"
70
- msgstr "表示条件(タクソノミー)"
71
-
72
- #: classes/controller/class.settings.php:109
73
- msgid "Display conditions ( Options page )"
74
- msgstr "表示条件(オプションページ)"
75
-
76
- #: classes/controller/class.settings.php:169
77
- msgid "Type"
78
- msgstr "タイプ"
79
-
80
- #: classes/controller/class.settings.php:204
81
- msgid "Add Sub field"
82
- msgstr "サブフィールドを追加"
83
-
84
- #: classes/controller/class.settings.php:208
85
- msgid "Add Field"
86
- msgstr "フィールド追加"
87
-
88
- #: classes/controller/class.settings.php:238
89
- #: classes/fields/class.field-related-posts.php:235
90
- msgid "Post Types"
91
- msgstr "投稿タイプ"
92
-
93
- #: classes/controller/class.settings.php:245
94
- msgid "Post Ids ( Comma separated )"
95
- msgstr "投稿 ID (カンマ区切り)"
96
-
97
- #: classes/controller/class.settings.php:270
98
- msgid "Roles"
99
- msgstr "権限"
100
-
101
- #: classes/controller/class.settings.php:296
102
- #: classes/fields/class.field-related-terms.php:233
103
- msgid "Taxonomies"
104
- msgstr "タクソノミー"
105
-
106
- #: classes/controller/class.settings.php:320
107
- msgid "Options pages"
108
- msgstr "オプションページ"
109
-
110
- #: classes/fields/class.field-boolean.php:23
111
- msgid "Boolean"
112
- msgstr "真偽値"
113
-
114
- #: classes/fields/class.field-boolean.php:38
115
- msgid "Yes"
116
- msgstr "はい"
117
-
118
- #: classes/fields/class.field-boolean.php:39
119
- msgid "No"
120
- msgstr "いいえ"
121
-
122
- #: classes/fields/class.field-boolean.php:85
123
- #: classes/fields/class.field-check.php:119
124
- #: classes/fields/class.field-colorpicker.php:107
125
- #: classes/fields/class.field-datepicker.php:130
126
- #: classes/fields/class.field-radio.php:118
127
- #: classes/fields/class.field-select.php:93
128
- #: classes/fields/class.field-text.php:68
129
- #: classes/fields/class.field-textarea.php:81
130
- #: classes/fields/class.field-wysiwyg.php:124
131
- msgid "Default"
132
- msgstr "デフォルト"
133
-
134
- #: classes/fields/class.field-boolean.php:110
135
- msgid "TRUE Label"
136
- msgstr "TRUE ラベル"
137
-
138
- #: classes/fields/class.field-boolean.php:120
139
- msgid "FALSE Label"
140
- msgstr "FALSE ラベル"
141
-
142
- #: classes/fields/class.field-boolean.php:130
143
- #: classes/fields/class.field-check.php:128
144
- #: classes/fields/class.field-colorpicker.php:116
145
- #: classes/fields/class.field-datepicker.php:194
146
- #: classes/fields/class.field-file.php:119
147
- #: classes/fields/class.field-image.php:114
148
- #: classes/fields/class.field-radio.php:127
149
- #: classes/fields/class.field-related-posts.php:264
150
- #: classes/fields/class.field-related-terms.php:260
151
- #: classes/fields/class.field-select.php:102
152
- #: classes/fields/class.field-text.php:77
153
- #: classes/fields/class.field-textarea.php:90
154
- #: classes/fields/class.field-wysiwyg.php:133
155
- msgid "Instruction"
156
- msgstr "説明文"
157
-
158
- #: classes/fields/class.field-boolean.php:137
159
- #: classes/fields/class.field-check.php:135
160
- #: classes/fields/class.field-colorpicker.php:123
161
- #: classes/fields/class.field-datepicker.php:201
162
- #: classes/fields/class.field-file.php:126
163
- #: classes/fields/class.field-image.php:121
164
- #: classes/fields/class.field-message.php:77
165
- #: classes/fields/class.field-radio.php:134
166
- #: classes/fields/class.field-related-posts.php:271
167
- #: classes/fields/class.field-related-terms.php:267
168
- #: classes/fields/class.field-select.php:109
169
- #: classes/fields/class.field-text.php:84
170
- #: classes/fields/class.field-textarea.php:97
171
- #: classes/fields/class.field-wysiwyg.php:140
172
- msgid "Notes"
173
- msgstr "注記"
174
-
175
- #: classes/fields/class.field-check.php:21
176
- msgid "Check"
177
- msgstr "チェックボックス"
178
-
179
- #: classes/fields/class.field-check.php:89
180
- #: classes/fields/class.field-radio.php:88
181
- #: classes/fields/class.field-select.php:83
182
- msgid "Choices"
183
- msgstr "選択肢"
184
-
185
- #: classes/fields/class.field-check.php:95
186
- #: classes/fields/class.field-radio.php:94
187
- #: classes/fields/class.field-select.php:89
188
- msgid ""
189
- "If you want to separate the key and the value, enter as follows: key => value"
190
- msgstr "もしキーと値を分けたい場合は次のように入力してください: キー => 値"
191
-
192
- #: classes/fields/class.field-check.php:99
193
- #: classes/fields/class.field-radio.php:98
194
- msgid "Display Direction"
195
- msgstr "表示方向"
196
-
197
- #: classes/fields/class.field-check.php:103
198
- #: classes/fields/class.field-radio.php:102
199
- msgid "horizontal"
200
- msgstr "水平方向"
201
-
202
- #: classes/fields/class.field-check.php:104
203
- #: classes/fields/class.field-radio.php:103
204
- msgid "vertical"
205
- msgstr "垂直方向"
206
-
207
- #: classes/fields/class.field-colorpicker.php:29
208
- msgid "Color picker"
209
- msgstr "カラーピッカー"
210
-
211
- #: classes/fields/class.field-datepicker.php:29
212
- msgid "Date picker"
213
- msgstr "日付ピッカー"
214
-
215
- #: classes/fields/class.field-datepicker.php:140
216
- msgid "Date Format"
217
- msgstr "日付のフォーマット"
218
-
219
- #: classes/fields/class.field-datepicker.php:148
220
- msgid "e.g dd/mm/yy"
221
- msgstr "例: dd/mm/yy"
222
-
223
- #: classes/fields/class.field-datepicker.php:158
224
- msgid "Max Date"
225
- msgstr "最大日付"
226
-
227
- #: classes/fields/class.field-datepicker.php:166
228
- #: classes/fields/class.field-datepicker.php:184
229
- msgid "e.g +1m +1w"
230
- msgstr "例: +1m +1w"
231
-
232
- #: classes/fields/class.field-datepicker.php:176
233
- msgid "Min Date"
234
- msgstr "最小日付"
235
-
236
- #: classes/fields/class.field-file.php:21
237
- msgid "File"
238
- msgstr "ファイル"
239
-
240
- #: classes/fields/class.field-file.php:51
241
- #: classes/fields/class.field-image.php:52
242
- msgid "Delete"
243
- msgstr "削除"
244
-
245
- #: classes/fields/class.field-file.php:98
246
- msgid "File Select"
247
- msgstr "ファイル選択"
248
-
249
- #: classes/fields/class.field-image.php:21
250
- msgid "Image"
251
- msgstr "画像"
252
-
253
- #: classes/fields/class.field-image.php:92
254
- msgid "Image Select"
255
- msgstr "画像選択"
256
-
257
- #: classes/fields/class.field-image.php:131
258
- msgid "Preview Size"
259
- msgstr "プレビューサイズ"
260
-
261
- #: classes/fields/class.field-message.php:21
262
- #: classes/fields/class.field-message.php:68
263
- msgid "Message"
264
- msgstr "メッセージ"
265
-
266
- #: classes/fields/class.field-radio.php:21
267
- msgid "Radio"
268
- msgstr "ラジオボタン"
269
-
270
- #: classes/fields/class.field-related-posts.php:24
271
- msgid "Related Posts"
272
- msgstr "関連する投稿"
273
-
274
- #: classes/fields/class.field-related-posts.php:211
275
- #: classes/fields/class.field-related-terms.php:209
276
- msgid "Search..."
277
- msgstr "検索 …"
278
-
279
- #: classes/fields/class.field-related-posts.php:215
280
- #: classes/fields/class.field-related-terms.php:213
281
- msgid "Load more"
282
- msgstr "さらに読み込む"
283
-
284
- #: classes/fields/class.field-related-posts.php:256
285
- #: classes/fields/class.field-related-terms.php:252
286
- msgid "Selectable number"
287
- msgstr "選択できる個数"
288
-
289
- #: classes/fields/class.field-related-terms.php:24
290
- msgid "Related Terms"
291
- msgstr "関連するターム"
292
-
293
- #: classes/fields/class.field-select.php:21
294
- msgid "Select"
295
- msgstr "セレクトボックス"
296
-
297
- #: classes/fields/class.field-text.php:21
298
- #: classes/fields/class.field-wysiwyg.php:108
299
- msgid "Text"
300
- msgstr "テキスト"
301
-
302
- #: classes/fields/class.field-textarea.php:21
303
- msgid "Textarea"
304
- msgstr "テキストエリア"
305
-
306
- #: classes/fields/class.field-textarea.php:71
307
- msgid "Rows"
308
- msgstr "行数"
309
-
310
- #: classes/fields/class.field-wysiwyg.php:26
311
- msgid "Wysiwyg"
312
- msgstr "WYSIWYG"
313
-
314
- #: classes/fields/class.field-wysiwyg.php:107
315
- msgid "Visual"
316
- msgstr "ビジュアル"
317
-
318
- #: classes/fields/class.field-wysiwyg.php:162
319
- #: classes/fields/class.field-wysiwyg.php:163
320
- msgid "Add Media"
321
- msgstr "メディアを追加"
322
-
323
- #: classes/models/class.abstract-field-base.php:118
324
- msgid "Name"
325
- msgstr "名前"
326
-
327
- #: classes/models/class.abstract-field-base.php:134
328
- msgid "Label"
329
- msgstr "ラベル"
330
-
331
- #: classes/models/class.group.php:127
332
- msgid "Repeat"
333
- msgstr "繰り返し"
334
-
335
- #: classes/models/class.group.php:132
336
- msgid "Group name"
337
- msgstr "グループ名"
338
-
339
- #: classes/models/class.revisions.php:128 smart-custom-fields.php:168
340
- #: smart-custom-fields.php:169 smart-custom-fields.php:170
341
- msgid "Smart Custom Fields"
342
- msgstr "Smart Custom Fields"
343
-
344
- #: smart-custom-fields.php:171 smart-custom-fields.php:172
345
- #: smart-custom-fields.php:218 smart-custom-fields.php:219
346
- msgid "Add New"
347
- msgstr "新規追加"
348
-
349
- #: smart-custom-fields.php:173
350
- msgid "New Field"
351
- msgstr "新規フィールド"
352
-
353
- #: smart-custom-fields.php:174
354
- msgid "Edit Field"
355
- msgstr "フィールド編集"
356
-
357
- #: smart-custom-fields.php:175
358
- msgid "View Field"
359
- msgstr "フィールドを表示"
360
-
361
- #: smart-custom-fields.php:176
362
- msgid "All Fields"
363
- msgstr "すべてのフィールド"
364
-
365
- #: smart-custom-fields.php:177
366
- msgid "Search Fields"
367
- msgstr "フィールドを検索"
368
-
369
- #: smart-custom-fields.php:178
370
- msgid "Parent Fields:"
371
- msgstr "親フィールド:"
372
-
373
- #: smart-custom-fields.php:179
374
- msgid "No Fields found."
375
- msgstr "フィールドは見つかりませんでした。"
376
-
377
- #: smart-custom-fields.php:180
378
- msgid "No Fields found in Trash."
379
- msgstr "ゴミ箱にフィールドは見つかりませんでした。"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/languages/smart-custom-fields-pt_BR.mo DELETED
Binary file
trunk/languages/smart-custom-fields-pt_BR.po DELETED
@@ -1,387 +0,0 @@
1
- # Copyright (C) 2017 Smart Custom Fields
2
- # This file is distributed under the same license as the Smart Custom Fields package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Smart Custom Fields 3.1.7\n"
6
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/smart-custom-"
7
- "fields\n"
8
- "POT-Creation-Date: 2018-06-02 21:30-0300\n"
9
- "PO-Revision-Date: 2018-06-02 21:30-0300\n"
10
- "Last-Translator: robssanches <robssanches@hotmail.com>\n"
11
- "Language-Team: Português do Brasil\n"
12
- "Language: pt_BR\n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=UTF-8\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
17
- "X-Generator: Poedit 2.0.7\n"
18
- "Plural-Forms: nplurals=1; plural=0;\n"
19
- "X-Poedit-KeywordsList: __;_e;esc_html__;esc_html_e;esc_attr__;esc_attr_e\n"
20
- "X-Poedit-Basepath: ..\n"
21
- "X-Poedit-SearchPath-0: .\n"
22
-
23
- #: classes/controller/class.controller-base.php:46
24
- msgid "Image setting"
25
- msgstr "Configuração de imagem"
26
-
27
- #: classes/controller/class.controller-base.php:47
28
- msgid "File setting"
29
- msgstr "Configuração de arquivo"
30
-
31
- #: classes/controller/class.option.php:57
32
- msgid "Save settings"
33
- msgstr "Salvar configurações"
34
-
35
- #: classes/controller/class.profile.php:43
36
- #: classes/controller/class.settings.php:76
37
- msgid "Custom Fields"
38
- msgstr "Campos personalizados"
39
-
40
- #: classes/controller/class.settings.php:29
41
- msgid "Basic fields"
42
- msgstr "Campos básicos"
43
-
44
- #: classes/controller/class.settings.php:33
45
- msgid "Select fields"
46
- msgstr "Selecione os campos"
47
-
48
- #: classes/controller/class.settings.php:37
49
- msgid "Content fields"
50
- msgstr "Campos de conteúdo"
51
-
52
- #: classes/controller/class.settings.php:41
53
- msgid "Other fields"
54
- msgstr "Outros campos"
55
-
56
- #: classes/controller/class.settings.php:64
57
- msgid "Same name exists!"
58
- msgstr "O mesmo nome existe!"
59
-
60
- #: classes/controller/class.settings.php:82
61
- msgid "Display conditions ( Post )"
62
- msgstr "Condições de exibição (Post)"
63
-
64
- #: classes/controller/class.settings.php:89
65
- msgid "Display conditions ( Profile )"
66
- msgstr "Condições de exibição (Perfil)"
67
-
68
- #: classes/controller/class.settings.php:96
69
- msgid "Display conditions ( Taxonomy )"
70
- msgstr "Condições de exibição (Taxonomia)"
71
-
72
- #: classes/controller/class.settings.php:103
73
- msgid "Display conditions ( Options page )"
74
- msgstr "Condições de exibição (Página de Opções)"
75
-
76
- #: classes/controller/class.settings.php:163
77
- msgid "Type"
78
- msgstr "Tipo"
79
-
80
- #: classes/controller/class.settings.php:198
81
- msgid "Add Sub field"
82
- msgstr "Adicionar Campo Secundário"
83
-
84
- #: classes/controller/class.settings.php:202
85
- msgid "Add Field"
86
- msgstr "Adicionar Campo"
87
-
88
- #: classes/controller/class.settings.php:232
89
- #: classes/fields/class.field-related-posts.php:231
90
- msgid "Post Types"
91
- msgstr "Tipos de Post"
92
-
93
- #: classes/controller/class.settings.php:239
94
- msgid "Post Ids ( Comma separated )"
95
- msgstr "IDs de postagem (separados por vírgula)"
96
-
97
- #: classes/controller/class.settings.php:264
98
- msgid "Roles"
99
- msgstr "Funções"
100
-
101
- #: classes/controller/class.settings.php:290
102
- #: classes/fields/class.field-related-terms.php:229
103
- msgid "Taxonomies"
104
- msgstr "Taxonomias"
105
-
106
- #: classes/controller/class.settings.php:314
107
- msgid "Options pages"
108
- msgstr "Páginas de opções"
109
-
110
- #: classes/fields/class.field-boolean.php:23
111
- msgid "Boolean"
112
- msgstr "Verdadeiro ou Falso"
113
-
114
- #: classes/fields/class.field-boolean.php:38
115
- msgid "Yes"
116
- msgstr "Sim"
117
-
118
- #: classes/fields/class.field-boolean.php:39
119
- msgid "No"
120
- msgstr "Não"
121
-
122
- #: classes/fields/class.field-boolean.php:82
123
- #: classes/fields/class.field-check.php:117
124
- #: classes/fields/class.field-colorpicker.php:103
125
- #: classes/fields/class.field-datepicker.php:125
126
- #: classes/fields/class.field-message.php:67
127
- #: classes/fields/class.field-radio.php:116
128
- #: classes/fields/class.field-select.php:91
129
- #: classes/fields/class.field-text.php:66
130
- #: classes/fields/class.field-textarea.php:79
131
- #: classes/fields/class.field-wysiwyg.php:122
132
- msgid "Default"
133
- msgstr "Padrão"
134
-
135
- #: classes/fields/class.field-boolean.php:107
136
- msgid "TRUE Label"
137
- msgstr "Rótulo VERDADEIRO"
138
-
139
- #: classes/fields/class.field-boolean.php:117
140
- msgid "FALSE Label"
141
- msgstr "Rótulo FALSO"
142
-
143
- #: classes/fields/class.field-boolean.php:127
144
- #: classes/fields/class.field-check.php:126
145
- #: classes/fields/class.field-colorpicker.php:112
146
- #: classes/fields/class.field-datepicker.php:189
147
- #: classes/fields/class.field-file.php:117
148
- #: classes/fields/class.field-image.php:112
149
- #: classes/fields/class.field-radio.php:125
150
- #: classes/fields/class.field-related-posts.php:260
151
- #: classes/fields/class.field-related-terms.php:256
152
- #: classes/fields/class.field-select.php:100
153
- #: classes/fields/class.field-text.php:75
154
- #: classes/fields/class.field-textarea.php:88
155
- #: classes/fields/class.field-wysiwyg.php:131
156
- msgid "Instruction"
157
- msgstr "Instrução"
158
-
159
- #: classes/fields/class.field-boolean.php:134
160
- #: classes/fields/class.field-check.php:133
161
- #: classes/fields/class.field-colorpicker.php:119
162
- #: classes/fields/class.field-datepicker.php:196
163
- #: classes/fields/class.field-file.php:124
164
- #: classes/fields/class.field-image.php:119
165
- #: classes/fields/class.field-message.php:76
166
- #: classes/fields/class.field-radio.php:132
167
- #: classes/fields/class.field-related-posts.php:267
168
- #: classes/fields/class.field-related-terms.php:263
169
- #: classes/fields/class.field-select.php:107
170
- #: classes/fields/class.field-text.php:82
171
- #: classes/fields/class.field-textarea.php:95
172
- #: classes/fields/class.field-wysiwyg.php:138
173
- msgid "Notes"
174
- msgstr "Notas"
175
-
176
- #: classes/fields/class.field-check.php:21
177
- msgid "Check"
178
- msgstr "Checkbox"
179
-
180
- #: classes/fields/class.field-check.php:87
181
- #: classes/fields/class.field-radio.php:86
182
- #: classes/fields/class.field-select.php:81
183
- msgid "Choices"
184
- msgstr "Opções"
185
-
186
- #: classes/fields/class.field-check.php:93
187
- #: classes/fields/class.field-radio.php:92
188
- #: classes/fields/class.field-select.php:87
189
- msgid ""
190
- "If you want to separate the key and the value, enter as follows: key => value"
191
- msgstr ""
192
- "Se você deseja separar a chave e o valor, insira da seguinte forma: key => "
193
- "value"
194
-
195
- #: classes/fields/class.field-check.php:97
196
- #: classes/fields/class.field-radio.php:96
197
- msgid "Display Direction"
198
- msgstr "Direção de Exibição"
199
-
200
- #: classes/fields/class.field-check.php:101
201
- #: classes/fields/class.field-radio.php:100
202
- msgid "horizontal"
203
- msgstr "horizontal"
204
-
205
- #: classes/fields/class.field-check.php:102
206
- #: classes/fields/class.field-radio.php:101
207
- msgid "vertical"
208
- msgstr "vertical"
209
-
210
- #: classes/fields/class.field-colorpicker.php:29
211
- msgid "Color picker"
212
- msgstr "Seletor de cores"
213
-
214
- #: classes/fields/class.field-datepicker.php:29
215
- msgid "Date picker"
216
- msgstr "Seletor de data"
217
-
218
- #: classes/fields/class.field-datepicker.php:135
219
- msgid "Date Format"
220
- msgstr "Formato de data"
221
-
222
- #: classes/fields/class.field-datepicker.php:143
223
- msgid "e.g dd/mm/yy"
224
- msgstr "ex. dd/mm/yy"
225
-
226
- #: classes/fields/class.field-datepicker.php:153
227
- msgid "Max Date"
228
- msgstr "Data máxima"
229
-
230
- #: classes/fields/class.field-datepicker.php:161
231
- #: classes/fields/class.field-datepicker.php:179
232
- msgid "e.g +1m +1w"
233
- msgstr "ex. +1m +1w"
234
-
235
- #: classes/fields/class.field-datepicker.php:171
236
- msgid "Min Date"
237
- msgstr "Data mínima"
238
-
239
- #: classes/fields/class.field-file.php:21
240
- msgid "File"
241
- msgstr "Arquivo"
242
-
243
- #: classes/fields/class.field-file.php:51
244
- #: classes/fields/class.field-image.php:52
245
- msgid "Delete"
246
- msgstr "Excluir"
247
-
248
- #: classes/fields/class.field-file.php:98
249
- msgid "File Select"
250
- msgstr "Seleção de Arquivo"
251
-
252
- #: classes/fields/class.field-image.php:21
253
- msgid "Image"
254
- msgstr "Imagem"
255
-
256
- #: classes/fields/class.field-image.php:92
257
- msgid "Image Select"
258
- msgstr "Selecionar imagem"
259
-
260
- #: classes/fields/class.field-image.php:129
261
- msgid "Preview Size"
262
- msgstr "Tamanho da pré-visualização"
263
-
264
- #: classes/fields/class.field-message.php:21
265
- msgid "Message"
266
- msgstr "Mensagem"
267
-
268
- #: classes/fields/class.field-radio.php:21
269
- msgid "Radio"
270
- msgstr "Radio"
271
-
272
- #: classes/fields/class.field-related-posts.php:24
273
- msgid "Related Posts"
274
- msgstr "Posts Relacionados"
275
-
276
- #: classes/fields/class.field-related-posts.php:209
277
- #: classes/fields/class.field-related-terms.php:207
278
- msgid "Search..."
279
- msgstr "Pesquisa..."
280
-
281
- #: classes/fields/class.field-related-posts.php:213
282
- #: classes/fields/class.field-related-terms.php:211
283
- msgid "Load more"
284
- msgstr "Carregar mais"
285
-
286
- #: classes/fields/class.field-related-posts.php:252
287
- #: classes/fields/class.field-related-terms.php:248
288
- msgid "Selectable number"
289
- msgstr "Número selecionável"
290
-
291
- #: classes/fields/class.field-related-terms.php:24
292
- msgid "Related Terms"
293
- msgstr "Termos relacionados"
294
-
295
- #: classes/fields/class.field-select.php:21
296
- msgid "Select"
297
- msgstr "Seleção"
298
-
299
- #: classes/fields/class.field-text.php:21
300
- #: classes/fields/class.field-wysiwyg.php:108
301
- msgid "Text"
302
- msgstr "Texto"
303
-
304
- #: classes/fields/class.field-textarea.php:21
305
- msgid "Textarea"
306
- msgstr "Área de Texto"
307
-
308
- #: classes/fields/class.field-textarea.php:69
309
- msgid "Rows"
310
- msgstr "Linhas"
311
-
312
- #: classes/fields/class.field-wysiwyg.php:26
313
- msgid "Wysiwyg"
314
- msgstr "Wysiwyg"
315
-
316
- #: classes/fields/class.field-wysiwyg.php:107
317
- msgid "Visual"
318
- msgstr "Visual"
319
-
320
- #: classes/fields/class.field-wysiwyg.php:160
321
- #: classes/fields/class.field-wysiwyg.php:161
322
- msgid "Add Media"
323
- msgstr "Adicionar Mídia"
324
-
325
- #: classes/models/class.abstract-field-base.php:106
326
- msgid "Name"
327
- msgstr "Nome"
328
-
329
- #: classes/models/class.abstract-field-base.php:117
330
- msgid "Label"
331
- msgstr "Rótulo"
332
-
333
- #: classes/models/class.group.php:127
334
- msgid "Repeat"
335
- msgstr "Repetir"
336
-
337
- #: classes/models/class.group.php:132
338
- msgid "Group name"
339
- msgstr "Nome do grupo"
340
-
341
- #: classes/models/class.revisions.php:128 smart-custom-fields.php:168
342
- #: smart-custom-fields.php:169 smart-custom-fields.php:170
343
- msgid "Smart Custom Fields"
344
- msgstr "Smart Custom Fields"
345
-
346
- #: smart-custom-fields.php:171 smart-custom-fields.php:172
347
- #: smart-custom-fields.php:218 smart-custom-fields.php:219
348
- msgid "Add New"
349
- msgstr "Adicionar Novo"
350
-
351
- #: smart-custom-fields.php:173
352
- msgid "New Field"
353
- msgstr "Novo Campo"
354
-
355
- #: smart-custom-fields.php:174
356
- msgid "Edit Field"
357
- msgstr "Editar campo"
358
-
359
- #: smart-custom-fields.php:175
360
- msgid "View Field"
361
- msgstr "Visualizar campo"
362
-
363
- #: smart-custom-fields.php:176
364
- msgid "All Fields"
365
- msgstr "Todos os Campos"
366
-
367
- #: smart-custom-fields.php:177
368
- msgid "Search Fields"
369
- msgstr "Campos de Pesquisa"
370
-
371
- #: smart-custom-fields.php:178
372
- msgid "Parent Fields:"
373
- msgstr "Campos pai:"
374
-
375
- #: smart-custom-fields.php:179
376
- msgid "No Fields found."
377
- msgstr "Nenhum campo encontrado."
378
-
379
- #: smart-custom-fields.php:180
380
- msgid "No Fields found in Trash."
381
- msgstr "Nenhum campo encontrado na lixeira."
382
-
383
- #~ msgid ""
384
- #~ "Smart Custom Fields is a simple plugin that management custom fields."
385
- #~ msgstr ""
386
- #~ "Smart Custom Fields é um plugin simples que gerencia campos "
387
- #~ "personalizados."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/languages/smart-custom-fields.pot DELETED
@@ -1,216 +0,0 @@
1
- # Copyright (C) 2018 Smart Custom Fields
2
- # This file is distributed under the same license as the Smart Custom Fields package.
3
- #, fuzzy
4
- msgid ""
5
- msgstr ""
6
- "Project-Id-Version: Smart Custom Fields 3.1.7\n"
7
- "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/smart-custom-"
8
- "fields\n"
9
- "POT-Creation-Date: 2018-06-02 21:26-0300\n"
10
- "MIME-Version: 1.0\n"
11
- "Content-Type: text/plain; charset=UTF-8\n"
12
- "Content-Transfer-Encoding: 8bit\n"
13
- "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
14
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
- "Language-Team: Smart Custom Fields <LL@li.org>\n"
16
- "X-Generator: Poedit 2.0.7\n"
17
- "X-Poedit-SourceCharset: UTF-8\n"
18
- "X-Poedit-KeywordsList: esc_html__;__;_n;_x;_n_noop;_e\n"
19
- "X-Poedit-Basepath: ..\n"
20
- "X-Poedit-SearchPath-0: .\n"
21
-
22
- #: classes/controller/class.controller-base.php:46
23
- msgid "Image setting"
24
- msgstr ""
25
-
26
- #: classes/controller/class.controller-base.php:47
27
- msgid "File setting"
28
- msgstr ""
29
-
30
- #: classes/controller/class.profile.php:43
31
- #: classes/controller/class.settings.php:76
32
- msgid "Custom Fields"
33
- msgstr ""
34
-
35
- #: classes/controller/class.settings.php:64
36
- msgid "Same name exists!"
37
- msgstr ""
38
-
39
- #: classes/controller/class.settings.php:82
40
- msgid "Display conditions ( Post )"
41
- msgstr ""
42
-
43
- #: classes/controller/class.settings.php:89
44
- msgid "Display conditions ( Profile )"
45
- msgstr ""
46
-
47
- #: classes/controller/class.settings.php:96
48
- msgid "Display conditions ( Taxonomy )"
49
- msgstr ""
50
-
51
- #: classes/controller/class.settings.php:103
52
- msgid "Display conditions ( Options page )"
53
- msgstr ""
54
-
55
- #: classes/controller/class.settings.php:232
56
- msgid "Post Types"
57
- msgstr ""
58
-
59
- #: classes/controller/class.settings.php:239
60
- msgid "Post Ids ( Comma separated )"
61
- msgstr ""
62
-
63
- #: classes/controller/class.settings.php:264
64
- msgid "Roles"
65
- msgstr ""
66
-
67
- #: classes/controller/class.settings.php:290
68
- msgid "Taxonomies"
69
- msgstr ""
70
-
71
- #: classes/controller/class.settings.php:314
72
- msgid "Options pages"
73
- msgstr ""
74
-
75
- #: classes/fields/class.field-boolean.php:23
76
- msgid "Boolean"
77
- msgstr ""
78
-
79
- #: classes/fields/class.field-boolean.php:38
80
- msgid "Yes"
81
- msgstr ""
82
-
83
- #: classes/fields/class.field-boolean.php:39
84
- msgid "No"
85
- msgstr ""
86
-
87
- #: classes/fields/class.field-check.php:21
88
- msgid "Check"
89
- msgstr ""
90
-
91
- #: classes/fields/class.field-check.php:101
92
- #: classes/fields/class.field-radio.php:100
93
- msgid "horizontal"
94
- msgstr ""
95
-
96
- #: classes/fields/class.field-check.php:102
97
- #: classes/fields/class.field-radio.php:101
98
- msgid "vertical"
99
- msgstr ""
100
-
101
- #: classes/fields/class.field-colorpicker.php:29
102
- msgid "Color picker"
103
- msgstr ""
104
-
105
- #: classes/fields/class.field-datepicker.php:29
106
- msgid "Date picker"
107
- msgstr ""
108
-
109
- #: classes/fields/class.field-file.php:21
110
- msgid "File"
111
- msgstr ""
112
-
113
- #: classes/fields/class.field-file.php:51
114
- #: classes/fields/class.field-image.php:52
115
- msgid "Delete"
116
- msgstr ""
117
-
118
- #: classes/fields/class.field-file.php:98
119
- msgid "File Select"
120
- msgstr ""
121
-
122
- #: classes/fields/class.field-image.php:21
123
- msgid "Image"
124
- msgstr ""
125
-
126
- #: classes/fields/class.field-image.php:92
127
- msgid "Image Select"
128
- msgstr ""
129
-
130
- #: classes/fields/class.field-message.php:21
131
- msgid "Message"
132
- msgstr ""
133
-
134
- #: classes/fields/class.field-radio.php:21
135
- msgid "Radio"
136
- msgstr ""
137
-
138
- #: classes/fields/class.field-related-posts.php:24
139
- msgid "Related Posts"
140
- msgstr ""
141
-
142
- #: classes/fields/class.field-related-posts.php:213
143
- #: classes/fields/class.field-related-terms.php:211
144
- msgid "Load more"
145
- msgstr ""
146
-
147
- #: classes/fields/class.field-related-terms.php:24
148
- msgid "Related Terms"
149
- msgstr ""
150
-
151
- #: classes/fields/class.field-select.php:21
152
- msgid "Select"
153
- msgstr ""
154
-
155
- #: classes/fields/class.field-text.php:21
156
- #: classes/fields/class.field-wysiwyg.php:108
157
- msgid "Text"
158
- msgstr ""
159
-
160
- #: classes/fields/class.field-textarea.php:21
161
- msgid "Textarea"
162
- msgstr ""
163
-
164
- #: classes/fields/class.field-wysiwyg.php:26
165
- msgid "Wysiwyg"
166
- msgstr ""
167
-
168
- #: classes/fields/class.field-wysiwyg.php:107
169
- msgid "Visual"
170
- msgstr ""
171
-
172
- #: classes/fields/class.field-wysiwyg.php:161
173
- msgid "Add Media"
174
- msgstr ""
175
-
176
- #: classes/models/class.revisions.php:128 smart-custom-fields.php:168
177
- #: smart-custom-fields.php:169 smart-custom-fields.php:170
178
- msgid "Smart Custom Fields"
179
- msgstr ""
180
-
181
- #: smart-custom-fields.php:171 smart-custom-fields.php:172
182
- #: smart-custom-fields.php:218 smart-custom-fields.php:219
183
- msgid "Add New"
184
- msgstr ""
185
-
186
- #: smart-custom-fields.php:173
187
- msgid "New Field"
188
- msgstr ""
189
-
190
- #: smart-custom-fields.php:174
191
- msgid "Edit Field"
192
- msgstr ""
193
-
194
- #: smart-custom-fields.php:175
195
- msgid "View Field"
196
- msgstr ""
197
-
198
- #: smart-custom-fields.php:176
199
- msgid "All Fields"
200
- msgstr ""
201
-
202
- #: smart-custom-fields.php:177
203
- msgid "Search Fields"
204
- msgstr ""
205
-
206
- #: smart-custom-fields.php:178
207
- msgid "Parent Fields:"
208
- msgstr ""
209
-
210
- #: smart-custom-fields.php:179
211
- msgid "No Fields found."
212
- msgstr ""
213
-
214
- #: smart-custom-fields.php:180
215
- msgid "No Fields found in Trash."
216
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/readme.txt DELETED
@@ -1,322 +0,0 @@
1
- === Smart Custom Fields ===
2
- Contributors: inc2734, toro_unit, mimosafa, hideokamoto, hisako-isaka, kurudrive, hanamura, justinticktock, designhehe, mayukojpn, hogetan, robssanches
3
- Donate link: http://www.amazon.co.jp/registry/wishlist/39ANKRNSTNW40
4
- Tags: plugin, custom field, custom, field, meta, meta field, repeat, repeatable
5
- Requires at least: 3.9
6
- Tested up to: 4.9.6
7
- Stable tag: 4.0.0
8
- License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
-
11
- Smart Custom Fields is a simple plugin for managing custom fields.
12
-
13
- == Description ==
14
-
15
- Smart Custom Fields is a simple plugin for managing custom fields.
16
-
17
- = Features =
18
-
19
- * Field group loop support.
20
- * Meta data revision support.
21
- * Meta data preview support.
22
-
23
- https://www.youtube.com/watch?v=WxPZurn0yvI
24
-
25
- = Field Types =
26
-
27
- * Text
28
- * Textarea
29
- * Radio
30
- * Select
31
- * Checkbox
32
- * WYSIWYG editor
33
- * Image
34
- * File
35
- * Related Posts
36
- * Related Terms
37
- * Color picker
38
- * Date picker
39
- * Boolean
40
- * Message
41
-
42
- = How to get meta data ? =
43
-
44
- **Post meta data**
45
-
46
- This method can get any meta data.
47
-
48
- `SCF::get( 'field-name' )`
49
-
50
- This method can get meta data of any group.
51
-
52
- `SCF::get( 'group-name' )`
53
-
54
- This method can get all meta data.
55
-
56
- `SCF::gets()`
57
-
58
- **User meta data**
59
-
60
- This method can get any user meta data.
61
-
62
- `SCF::get_user_meta( $user_id, 'field-name' )`
63
-
64
- This method can get user meta data of any group.
65
-
66
- `SCF::get_user_meta( $user_id, 'group-name' )`
67
-
68
- This method can get all user meta data.
69
-
70
- `SCF::get_user_meta( $user_id )`
71
-
72
- **Term meta data**
73
-
74
- This method can get any term meta data.
75
-
76
- `SCF::get_term_meta( $term_id, $taxonomy 'field-name' )`
77
-
78
- This method can get term meta data of any group.
79
-
80
- `SCF::get_term_meta( $term_id, $taxonomy, 'group-name' )`
81
-
82
- This method can get all term meta data.
83
-
84
- `SCF::get_term_meta( $term_id, $taxonomy )`
85
-
86
- **Custom options page meta data**
87
-
88
- This method can get any custom options page meta data.
89
-
90
- `SCF::get_option_meta( $menu_slug, 'field-name' )`
91
-
92
- This method can get custom options page meta data of any group.
93
-
94
- `SCF::get_option_meta( $menu_slug, 'group-name' )`
95
-
96
- This method can get all custom options page meta data.
97
-
98
- `SCF::get_option_meta( $menu_slug )`
99
-
100
- = Create custom options page =
101
-
102
- `SCF::add_options_page( $page_title, $menu_title, $capability, $menu_slug, $icon_url = '', $position = null );`
103
-
104
- = Register custom fields by the code. =
105
-
106
- https://gist.github.com/inc2734/9f6d65c7473d060d0fd6
107
-
108
- = GitHub =
109
-
110
- https://github.com/inc2734/smart-custom-fields/
111
-
112
- = Translators =
113
-
114
- * Japanese(ja) - [JOTAKI Taisuke](https://profiles.wordpress.org/tai/)
115
-
116
- You can translate this plugin into your language by using [GlotPress](https://translate.wordpress.org/projects/wp-plugins/smart-custom-fields).
117
-
118
- == Installation ==
119
-
120
- 1. Upload `Smart Custom Fields` to the `/wp-content/plugins/` directory
121
- 1. Activate the plugin through the 'Plugins' menu in WordPress
122
- 1. You can setting custom fields in 'Smart Custom Fields' page.
123
-
124
- == Screenshots ==
125
-
126
- 1. Smart Custom Fields settings page.
127
- 2. Post edit page.
128
-
129
- == Changelog ==
130
-
131
- = 4.0.0 =
132
- * Add message field. #64 (by [@robssanches](https://github.com/robssanches))
133
- * Fix boolean field bug with `smart-cf-register-fields` filter hook.
134
- * Refactoring displaying options process of each fields.
135
-
136
- = 3.1.7 =
137
- * Fixing issues and adding support for the Brazilian Portuguese language #63 (by [@robssanches](https://github.com/robssanches))
138
- * Spelling fixes in Readme #62 (by [@garrett-eclipse](https://github.com/garrett-eclipse))
139
-
140
- = 3.1.6 =
141
- * Set any on related post status. #60 (by [@mayukojpn](https://github.com/mayukojpn))
142
- * Changed that file names can be known when uploading files. #58 (by [@shodoi](https://github.com/shodoi))
143
-
144
- = 3.1.5 =
145
- * Fixed a bug that disappeared layout when introducing description in relation field. #56 (by [@mayukojpn](https://github.com/mayukojpn))
146
- * Update item delete button style in relation field.
147
- * Fix bug when using smart-cf-register-fields hook.
148
-
149
- = 3.1.4 =
150
- * Remove no used codes.
151
- * Fixed a bug that name disappears when opening / closing a field. #51 (by [@yousan](https://github.com/yousan))
152
-
153
- = 3.1.3 =
154
- * Fix Selectable number bug
155
-
156
- = 3.1.2 =
157
- * Update readme.txt
158
-
159
- = 3.1.1 =
160
- * Fixed a bug of limit attribute at relation post types and taxonomies field.
161
-
162
- = 3.1.0 =
163
- * Added limit attribute at relation post types and taxonomies field.
164
-
165
- = 3.0.1 =
166
- * Fixed a bug that icon and display position of created option page are not reflected #47 (by [@designhehe](https://github.com/designhehe))
167
-
168
- = 3.0.0 =
169
- * Support multiple user roles.
170
- * Update filter hook smart-cf-register-fields
171
-
172
- = 2.3.0 =
173
- * Support displayed thumbnail when value of file and image field is file url.
174
-
175
- = 2.2.3 =
176
- * Fix get_post_metadata hooked only preview #43 (by [@wireframeslayout](https://github.com/wireframeslayout))
177
-
178
- = 2.2.2 =
179
- * Fix #37 #38
180
-
181
- = 2.2.1 =
182
- * Fix bug boolean field in repeatable group #39
183
- * Fix bug datepicker and colorpicker in repeatable group #41
184
-
185
- = 2.2.0 =
186
- * Refactoring tests.
187
- * Changed behavior of the default value of new field of the already saved object. Using the default value.
188
-
189
- = 2.1.1 =
190
- * Fix revision lines duplication (by [@hanamura](https://github.com/hanamura))
191
- * Fixed a bug that relation fields don't work on the options page.
192
-
193
- = 2.1.0 =
194
- * Support separated key and value in select, checkbox, radio.
195
- * Added switching editor mode tab in wysiwyg field.
196
- * Added instruction of field option.
197
-
198
- = 2.0.0 =
199
- * Refactoring
200
- * Added meta data of custom options page.
201
-
202
- = 1.7.0 =
203
- * Added taxonomy relation field.
204
- * Added textarea rows setting.
205
- * Fixed a bug that tinymce js error when disabled rich editing.
206
-
207
- = 1.6.7 =
208
- * Removed console.log in a js file.
209
-
210
- = 1.6.6 =
211
- * Fixed a bug that warning is out when the array isn't returned in the smart-cf-register-fields.
212
-
213
- = 1.6.5 =
214
- * Fixed a bug that multi value in the loop is broken.
215
- * In setting screen, if the field is closed, display the field name.
216
-
217
- = 1.6.4 =
218
- * Fixed a bug that wysiwyg fields became tinymce default format when content editor mode is text.
219
- * Change the comment in English.
220
-
221
- = 1.6.3 =
222
- * Fixed a bug that metadata that isn't defined by Smart Custom Fields can't get in preview.
223
-
224
- = 1.6.2 =
225
- * Fixed a bug that sometimes can't get data when there are multiple Smart Custom Fields settings.
226
-
227
- = 1.6.1 =
228
- * Fixed a bug that custom field settings vanished when saved.
229
-
230
- = 1.6.0 =
231
- * Added search feature in the relation field.
232
- * Changed when the object isn't saved, default value is active.
233
- * Remove filter hook smart-cf-is_use_default_when_not_saved.
234
- * Fixed a bug that isn't displayed meta data in preview when using custom fields settings with post id.
235
-
236
- = 1.5.3 =
237
- * Fixed a wysiwyg field bug.
238
-
239
- = 1.5.2 =
240
- * Fixed a wysiwyg field bug.
241
-
242
- = 1.5.1 =
243
- * Fixed a relation field bug.
244
-
245
- = 1.5.0 =
246
- * Update wysiwyg field.
247
-
248
- = 1.4.0 =
249
- * refactoring controllers.
250
- * Add term custom fields.
251
- * Add filter hook smart-cf-is_use_default_when_not_saved
252
- * Changed to the default value is used if the value has not been saved. If you want to revert to the previous behavior, return false in smart-cf-is_use_default_when_not_saved.
253
-
254
- = 1.3.2 =
255
- * Add preview size setting in the image field.
256
- * Add display direction setting in the checkbox and radio field.
257
- * Changed the upload field that displayed uploaded to this post first.
258
-
259
- = 1.3.1 =
260
- * Fixed a wysiwyg field bug.
261
- * Add boolean field.
262
-
263
- = 1.3.0 =
264
- * refactoring.
265
- * Add profile custom fields.
266
- * Add filter hook smart-cf-validate-get-value
267
- * Add method SCF::get_user_meta( $user_id, $name = null )
268
- * Fixed a revision bug.
269
- * Fixed a bug that thumbnail is not displayed correctly in preview.
270
- * Fixed a relation field bug.
271
- * Changed return value of SCF::get with multiple data in loop.
272
- * Changed revision screen format.
273
-
274
- = 1.2.2 =
275
- * Fixed a bug that can not get the correct data when the posts use post id filtering.
276
- * Changed that original the_content filter does not apply to wysiwyg field.
277
- * Add post_id attribute to smart-cf-register-fields.
278
-
279
- = 1.2.1 =
280
- * Fixed a bug that post id filtering incorrect.
281
-
282
- = 1.2.0 =
283
- * refactoring. A lot of changes in all.
284
- * Renewed the Smart_Custom_Fields_Field_Base.
285
- * Add filter hook smart-cf-register-fields. If You use this hook, you can define custom fields by the code.
286
- * Add action hook smart-cf-before-editor-enqueue-scripts
287
- * Add action hook smart-cf-after-editor-enqueue-scripts
288
- * Add action hook smart-cf-before-settings-enqueue-scripts
289
- * Add action hook smart-cf-after-settings-enqueue-scripts
290
-
291
- = 1.1.3 =
292
- * Change method SCF::get_field to SCF::get_value_by_field
293
- * Change method SCF::get_sub_field to SCF::get_values_by_group
294
- * Add method SCF::get_field
295
- * Add method SCF::choices_eol_to_array
296
- * remove method Smart_Custom_Fields_Field_Base::get_choices
297
-
298
- = 1.1.2 =
299
- * Add action hook smart-cf-fields-loaded
300
-
301
- = 1.1.1 =
302
- * UX Improvement of settings page.
303
-
304
- = 1.1.0 =
305
- * Add date picker field.
306
-
307
- = 1.0.3 =
308
- * Fixed a bug that can't be get the correct data when specify a $post_id attribute to SCF::get(). For example SCF::get( 'key', $post_id )
309
-
310
- = 1.0.2 =
311
- * Add color picker field.
312
- * Add smart-cf-before-save-post action hook.
313
- * Add smart-cf-after-save-post action hook.
314
- * Add smart-cf-validate-save-post filter hook.
315
-
316
- = 1.0.1 =
317
- * Add display condition by post id.
318
- * Fixed bug that is not displayed wysiwyg editor when there are not content editor.
319
- * Textarea does not filter the_content filter in SCF::get() and SCF::gets().
320
-
321
- = 1.0.0 =
322
- * Initial release.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/smart-custom-fields.php DELETED
@@ -1,274 +0,0 @@
1
- <?php
2
- /**
3
- * Plugin name: Smart Custom Fields
4
- * Plugin URI: https://github.com/inc2734/smart-custom-fields/
5
- * Description: Smart Custom Fields is a simple plugin that management custom fields.
6
- * Version: 4.0.0
7
- * Author: inc2734
8
- * Author URI: https://2inc.org
9
- * Created: October 9, 2014
10
- * Modified: June 26, 2018
11
- * Text Domain: smart-custom-fields
12
- * Domain Path: /languages
13
- * License: GPLv2 or later
14
- * License URI: http://www.gnu.org/licenses/gpl-2.0.html
15
- */
16
- class Smart_Custom_Fields {
17
-
18
- /**
19
- * __construct
20
- */
21
- public function __construct() {
22
- require_once plugin_dir_path( __FILE__ ) . 'classes/class.config.php';
23
- add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) );
24
- register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
25
- }
26
-
27
- /**
28
- * Loading translation files
29
- */
30
- public function plugins_loaded() {
31
- load_plugin_textdomain (
32
- 'smart-custom-fields',
33
- false,
34
- dirname( plugin_basename( __FILE__ ) ) . '/languages'
35
- );
36
-
37
- do_action( SCF_Config::PREFIX . 'load' );
38
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.meta.php';
39
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.setting.php';
40
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.group.php';
41
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.abstract-field-base.php';
42
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.revisions.php';
43
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.ajax.php';
44
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.options-page.php';
45
- require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.cache.php';
46
- require_once plugin_dir_path( __FILE__ ) . 'classes/class.scf.php';
47
- new Smart_Custom_Fields_Revisions();
48
-
49
- foreach ( glob( plugin_dir_path( __FILE__ ) . 'classes/fields/*.php' ) as $form_item ) {
50
- include_once $form_item;
51
- $basename = basename( $form_item, '.php' );
52
- $classname = preg_replace( '/^class\.field\-(.+)$/', 'Smart_Custom_Fields_Field_$1', $basename );
53
- $classname = str_replace( '-', '_', $classname );
54
- if ( class_exists( $classname ) ) {
55
- new $classname();
56
- }
57
- }
58
-
59
- add_action( 'after_setup_theme', array( $this, 'after_setup_theme' ) );
60
- add_action( 'init' , array( $this, 'register_post_type' ) );
61
- add_action( 'init' , array( $this, 'ajax_request' ) );
62
- add_action( 'admin_menu' , array( $this, 'admin_menu' ) );
63
- add_action( 'current_screen' , array( $this, 'current_screen' ) );
64
- }
65
-
66
- /**
67
- * The action hook provides in after_setup_themeto be able to add fields
68
- * from themes not only plugins.
69
- */
70
- public function after_setup_theme() {
71
- do_action( SCF_Config::PREFIX . 'fields-loaded' );
72
- }
73
-
74
- /**
75
- * Uninstall proccesses
76
- */
77
- public static function uninstall() {
78
- $cf_posts = get_posts( array(
79
- 'post_type' => SCF_Config::NAME,
80
- 'posts_per_page' => -1,
81
- 'post_status' => 'any',
82
- ) );
83
- foreach ( $cf_posts as $post ) {
84
- wp_delete_post( $post->ID, true );
85
- }
86
- delete_post_meta_by_key( SCF_Config::PREFIX . 'repeat-multiple-data' );
87
-
88
- // option の smart-cf-xxx を削除
89
- global $wpdb;
90
- $wpdb->query(
91
- $wpdb->prepare(
92
- "
93
- DELETE FROM $wpdb->options
94
- WHERE option_name LIKE %s
95
- ",
96
- SCF_Config::PREFIX . '%'
97
- )
98
- );
99
- }
100
-
101
- /**
102
- * Run management screens
103
- *
104
- * @param WP_Screen $screen
105
- */
106
- public function current_screen( $screen ) {
107
- // 一覧画面
108
- if ( $screen->id === 'edit-' . SCF_Config::NAME ) {
109
- }
110
- // 新規作成・編集画面
111
- elseif ( $screen->id === SCF_Config::NAME ) {
112
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.settings.php';
113
- new Smart_Custom_Fields_Controller_Settings();
114
- }
115
- // その他の新規作成・編集画面
116
- elseif ( in_array( $screen->id, get_post_types() ) ) {
117
- $post_id = $this->get_post_id_in_admin();
118
- if ( SCF::get_settings( SCF::generate_post_object( $post_id, $screen->id ) ) ) {
119
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.controller-base.php';
120
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.editor.php';
121
- new Smart_Custom_Fields_Revisions();
122
- new Smart_Custom_Fields_Controller_Editor();
123
- }
124
- }
125
- // プロフィール編集画面
126
- elseif ( in_array( $screen->id, array( 'profile', 'user-edit' ) ) ) {
127
- $user_id = $this->get_user_id_in_admin();
128
- if ( SCF::get_settings( get_userdata( $user_id ) ) ) {
129
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.controller-base.php';
130
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.profile.php';
131
- new Smart_Custom_Fields_Controller_Profile();
132
- }
133
- }
134
- // タグ、カテゴリー、タクソノミー
135
- elseif ( $screen->taxonomy ) {
136
- $term_id = $this->get_term_id_in_admin();
137
- if ( $term_id ) {
138
- $term = get_term( $term_id, $screen->taxonomy );
139
- if ( SCF::get_settings( $term ) ) {
140
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.controller-base.php';
141
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.taxonomy.php';
142
- new Smart_Custom_Fields_Controller_Taxonomy();
143
- }
144
- }
145
- }
146
- // オプションページ
147
- else {
148
- $menu_slug = preg_replace( '/^toplevel_page_(.+)$/', '$1', $screen->id );
149
- $options_pages = SCF::get_options_pages();
150
-
151
- if ( array_key_exists( $menu_slug, $options_pages ) ) {
152
- $Option = SCF::generate_option_object( $menu_slug );
153
- if ( SCF::get_settings( $Option ) ) {
154
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.controller-base.php';
155
- require_once plugin_dir_path( __FILE__ ) . 'classes/controller/class.option.php';
156
- new Smart_Custom_Fields_Controller_Option();
157
- }
158
- }
159
- }
160
- }
161
-
162
- /**
163
- * Registering custom post type.
164
- * Run the menu display in a different method.
165
- */
166
- public function register_post_type() {
167
- $labels = array(
168
- 'name' => __( 'Smart Custom Fields', 'smart-custom-fields' ),
169
- 'menu_name' => __( 'Smart Custom Fields', 'smart-custom-fields' ),
170
- 'name_admin_bar' => __( 'Smart Custom Fields', 'smart-custom-fields' ),
171
- 'add_new' => __( 'Add New', 'smart-custom-fields' ),
172
- 'add_new_item' => __( 'Add New', 'smart-custom-fields' ),
173
- 'new_item' => __( 'New Field', 'smart-custom-fields' ),
174
- 'edit_item' => __( 'Edit Field', 'smart-custom-fields' ),
175
- 'view_item' => __( 'View Field', 'smart-custom-fields' ),
176
- 'all_items' => __( 'All Fields', 'smart-custom-fields' ),
177
- 'search_items' => __( 'Search Fields', 'smart-custom-fields' ),
178
- 'parent_item_colon' => __( 'Parent Fields:', 'smart-custom-fields' ),
179
- 'not_found' => __( 'No Fields found.', 'smart-custom-fields' ),
180
- 'not_found_in_trash' => __( 'No Fields found in Trash.', 'smart-custom-fields' )
181
- );
182
- register_post_type(
183
- SCF_Config::NAME,
184
- array(
185
- 'label' => 'Smart Custom Fields',
186
- 'labels' => $labels,
187
- 'public' => false,
188
- 'show_ui' => true,
189
- 'capability_type' => 'page',
190
- 'supports' => array( 'title', 'page-attributes' ),
191
- 'show_in_menu' => false,
192
- )
193
- );
194
- }
195
-
196
- /**
197
- * Hooking the process that it want to fire when the ajax request.
198
- */
199
- public function ajax_request() {
200
- $Ajax = new Smart_Custom_Fields_Ajax();
201
- }
202
-
203
- /**
204
- * Adding menus in management screen.
205
- */
206
- public function admin_menu() {
207
- add_menu_page(
208
- 'Smart Custom Fields',
209
- 'Smart Custom Fields',
210
- 'manage_options',
211
- 'edit.php?post_type=' . SCF_Config::NAME,
212
- false,
213
- false,
214
- '80.026'
215
- );
216
- add_submenu_page(
217
- 'edit.php?post_type=' . SCF_Config::NAME,
218
- __( 'Add New', 'smart-custom-fields' ),
219
- __( 'Add New', 'smart-custom-fields' ),
220
- 'manage_options',
221
- 'post-new.php?post_type=' . SCF_Config::NAME
222
- );
223
- }
224
-
225
- /**
226
- * Getting the post ID in post editing page.
227
- *
228
- * @return int
229
- */
230
- protected function get_post_id_in_admin() {
231
- $post_id = false;
232
- if ( !empty( $_GET['post'] ) ) {
233
- $post_id = $_GET['post'];
234
- } elseif ( !empty( $_POST['post_ID'] ) ) {
235
- $post_id = $_POST['post_ID'];
236
- }
237
- return $post_id;
238
- }
239
-
240
- /**
241
- * Getting the user ID in profile and user editing pages.
242
- *
243
- * @return int
244
- */
245
- protected function get_user_id_in_admin() {
246
- $screen = get_current_screen();
247
- $user_id = false;
248
- if ( !empty( $_GET['user_id'] ) ) {
249
- $user_id = $_GET['user_id'];
250
- } elseif ( !empty( $_POST['user_id'] ) ) {
251
- $user_id = $_POST['user_id'];
252
- } elseif ( $screen->id === 'profile' ) {
253
- $current_user = wp_get_current_user();
254
- $user_id = $current_user->ID;
255
- }
256
- return $user_id;
257
- }
258
-
259
- /**
260
- * Getting the term ID in term editing page.
261
- *
262
- * @return int
263
- */
264
- protected function get_term_id_in_admin() {
265
- $term_id = false;
266
- if ( !empty( $_GET['tag_ID'] ) ) {
267
- $term_id = $_GET['tag_ID'];
268
- } elseif ( !empty( $_POST['tag_ID'] ) ) {
269
- $term_id = $_POST['tag_ID'];
270
- }
271
- return $term_id;
272
- }
273
- }
274
- new Smart_Custom_Fields();