Fuse Social Floating Sidebar - Version 5.3.9.1

Version Description

= 5.0 = Major update, you might need to setup the plugin settings again.

Download this release

Release Info

Developer daniyalahmedk
Plugin Icon 128x128 Fuse Social Floating Sidebar
Version 5.3.9.1
Comparing to
See all releases

Code changes from version 5.3.9 to 5.3.9.1

Files changed (27) hide show
  1. framework/settings/fuse-config.php +0 -0
  2. freemius/config.php +2 -0
  3. fuse_social_sidebar.php +1 -1
  4. inc/extensions/extensions/icon_select/extension_icon_select.php +0 -86
  5. inc/extensions/extensions/icon_select/icon_select/field_icon_select.css +0 -1
  6. inc/extensions/extensions/icon_select/icon_select/field_icon_select.js +0 -46
  7. inc/extensions/extensions/icon_select/icon_select/field_icon_select.min.js +0 -1
  8. inc/extensions/extensions/icon_select/icon_select/field_icon_select.php +0 -230
  9. inc/extensions/extensions/icon_select/icon_select/field_icon_select.scss +0 -52
  10. inc/extensions/extensions/metaboxes/extension_metaboxes.css +0 -3
  11. inc/extensions/extensions/metaboxes/extension_metaboxes.js +0 -79
  12. inc/extensions/extensions/metaboxes/extension_metaboxes.less +0 -315
  13. inc/extensions/extensions/metaboxes/extension_metaboxes.min.js +0 -1
  14. inc/extensions/extensions/metaboxes/extension_metaboxes.php +0 -1399
  15. inc/extensions/extensions/repeater/extension_repeater.php +0 -267
  16. inc/extensions/extensions/repeater/repeater/field_repeater.css +0 -1
  17. inc/extensions/extensions/repeater/repeater/field_repeater.js +0 -344
  18. inc/extensions/extensions/repeater/repeater/field_repeater.min.js +0 -1
  19. inc/extensions/extensions/repeater/repeater/field_repeater.php +0 -451
  20. inc/extensions/extensions/repeater/repeater/field_repeater.scss +0 -97
  21. inc/extensions/extensions/widget_areas/assets/css/sidebars.css +0 -50
  22. inc/extensions/extensions/widget_areas/assets/css/widget_areas.css +0 -62
  23. inc/extensions/extensions/widget_areas/assets/img/trash.png +0 -0
  24. inc/extensions/extensions/widget_areas/assets/js/widget_areas.js +0 -83
  25. inc/extensions/extensions/widget_areas/class.redux_widget_areas.php +0 -303
  26. inc/extensions/extensions/widget_areas/extension_widget_areas.php +0 -57
  27. readme.txt +1 -1
framework/settings/fuse-config.php CHANGED
File without changes
freemius/config.php CHANGED
@@ -380,7 +380,9 @@ if ( ! defined( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED' ) ) {
380
  // Set to true to show network level settings even if delegated to site admins.
381
  define( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED', false );
382
  }
 
383
  #endregion
 
384
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
385
  define( 'WP_FS__DEMO_MODE', false );
386
  }
380
  // Set to true to show network level settings even if delegated to site admins.
381
  define( 'WP_FS__SHOW_NETWORK_EVEN_WHEN_DELEGATED', false );
382
  }
383
+
384
  #endregion
385
+
386
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
387
  define( 'WP_FS__DEMO_MODE', false );
388
  }
fuse_social_sidebar.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Fuse Social Floating Sidebar
4
  Plugin URI: http://photontechs.com/fuse-social-sidebar
5
  Description: This Fuse Social Floating Sidebar plugin allow you to put social icons which can be link with your social media profiles.
6
- Version: 5.3.9
7
  Author: Daniyal Ahmed
8
  Author URI: http://www.photontechs.com
9
  License: GNU General Public License v3.0
3
  Plugin Name: Fuse Social Floating Sidebar
4
  Plugin URI: http://photontechs.com/fuse-social-sidebar
5
  Description: This Fuse Social Floating Sidebar plugin allow you to put social icons which can be link with your social media profiles.
6
+ Version: 5.3.9.1
7
  Author: Daniyal Ahmed
8
  Author URI: http://www.photontechs.com
9
  License: GNU General Public License v3.0
inc/extensions/extensions/icon_select/extension_icon_select.php DELETED
@@ -1,86 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Redux Framework is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 2 of the License, or
7
- * any later version.
8
- *
9
- * Redux Framework is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
16
- *
17
- * @package ReduxFramework
18
- * @author Dovy Paukstys (dovy)
19
- * @author Kevin Provance (kprovance) - tinkered with it.
20
- * @version 1.0.6
21
- */
22
-
23
- // Exit if accessed directly
24
- if ( ! defined( 'ABSPATH' ) ) {
25
- exit;
26
- }
27
-
28
- // Don't duplicate me!
29
- if ( ! class_exists( 'ReduxFramework_extension_icon_select' ) ) {
30
-
31
-
32
- /**
33
- * Main ReduxFramework icon_select extension class
34
- *
35
- * @since 3.1.6
36
- */
37
- class ReduxFramework_extension_icon_select {
38
-
39
- static $version = "1.0.6";
40
-
41
- // Protected vars
42
- protected $parent;
43
- public $extension_url;
44
- public $extension_dir;
45
- public static $theInstance;
46
-
47
- /**
48
- * Class Constructor. Defines the args for the extions class
49
- *
50
- * @since 1.0.0
51
- * @access public
52
- *
53
- * @param array $sections Panel sections.
54
- * @param array $args Class constructor arguments.
55
- * @param array $extra_tabs Extra panel tabs.
56
- *
57
- * @return void
58
- */
59
- public function __construct( $parent ) {
60
- $this->parent = $parent;
61
-
62
- $this->field_name = 'icon_select';
63
-
64
- if ( empty( self::$_extension_dir ) ) {
65
- $this->_extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
66
- $this->_extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) );
67
- }
68
-
69
- self::$theInstance = $this;
70
-
71
- add_filter( 'redux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array(
72
- &$this,
73
- 'overload_field_path'
74
- ) ); // Adds the local field
75
- }
76
-
77
- public function getInstance() {
78
- return self::$theInstance;
79
- }
80
-
81
- // Forces the use of the embeded field path vs what the core typically would use
82
- public function overload_field_path( $field ) {
83
- return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php';
84
- }
85
- } // class
86
- } // if
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/icon_select/icon_select/field_icon_select.css DELETED
@@ -1 +0,0 @@
1
- .redux-container-icon_select .redux-icon-container{position:relative;overflow-y:auto;border:2px solid #eee;padding:5px;text-align:center}.redux-container-icon_select .redux-icon-select{margin:0 !important}.redux-container-icon_select .redux-icon-select input[type='radio']{display:none}.redux-container-icon_select .redux-icon-select i{border-color:transparent;color:#555}.redux-container-icon_select .redux-icon-select i:hover{border-color:#ddd;color:#111}.redux-container-icon_select ul.redux-icon-select li{margin:10px;display:block;float:left;padding:5px}.redux-container-icon_select .redux-icon-select i,.redux-container-icon_select .redux-icon-select-selected i{border-width:4px;border-style:solid;font-size:30px;padding:5px}.redux-container-icon_select .redux-icon-select-selected i,.redux-container-icon_select .redux-icon-select-selected i:hover{border-color:#7a7a7a;color:#269ad6}
 
inc/extensions/extensions/icon_select/icon_select/field_icon_select.js DELETED
@@ -1,46 +0,0 @@
1
- /* global confirm, redux, redux_change */
2
-
3
- (function ($) {
4
- "use strict";
5
-
6
- redux.field_objects = redux.field_objects || {};
7
- redux.field_objects.icon_select = redux.field_objects.icon_select || {};
8
-
9
- redux.field_objects.icon_select.init = function (selector) {
10
- if (!selector) {
11
- selector = $(document).find(".redux-group-tab:visible").find('.redux-container-icon_select:visible');
12
- }
13
-
14
- $(selector).each(
15
- function () {
16
- var el = $(this);
17
- var parent = el;
18
-
19
- if (!el.hasClass('redux-field-container')) {
20
- parent = el.parents('.redux-field-container:first');
21
- }
22
-
23
- if (parent.is(":hidden")) { // Skip hidden fields
24
- return;
25
- }
26
-
27
- if (parent.hasClass('redux-field-init')) {
28
- parent.removeClass('redux-field-init');
29
- } else {
30
- return;
31
- }
32
-
33
- // On label click, change the input and class
34
- el.find('.redux-icon-select label i, .redux-icon-select label .tiles').click(function (e) {
35
- var id = $(this).closest('label').attr('for');
36
- $(this).parents("fieldset:first").find('.redux-icon-select-selected').removeClass('redux-icon-select-selected');
37
- $(this).closest('label').find('input[type="radio"]').prop('checked');
38
-
39
- redux_change($(this).closest('label').find('input[type="radio"]'));
40
-
41
- el.find('label[for="' + id + '"]').addClass('redux-icon-select-selected').find("input[type='radio']").attr("checked", true);
42
- });
43
- }
44
- );
45
- };
46
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/icon_select/icon_select/field_icon_select.min.js DELETED
@@ -1 +0,0 @@
1
- (function(a){redux.field_objects=redux.field_objects||{};redux.field_objects.icon_select=redux.field_objects.icon_select||{};redux.field_objects.icon_select.init=function(b){if(!b){b=a(document).find(".redux-group-tab:visible").find(".redux-container-icon_select:visible")}a(b).each(function(){var d=a(this);var c=d;if(!d.hasClass("redux-field-container")){c=d.parents(".redux-field-container:first")}if(c.is(":hidden")){return}if(c.hasClass("redux-field-init")){c.removeClass("redux-field-init")}else{return}d.find(".redux-icon-select label i, .redux-icon-select label .tiles").click(function(f){var g=a(this).closest("label").attr("for");a(this).parents("fieldset:first").find(".redux-icon-select-selected").removeClass("redux-icon-select-selected");a(this).closest("label").find('input[type="radio"]').prop("checked");redux_change(a(this).closest("label").find('input[type="radio"]'));d.find('label[for="'+g+'"]').addClass("redux-icon-select-selected").find("input[type='radio']").attr("checked",true)})})}})(jQuery);
 
inc/extensions/extensions/icon_select/icon_select/field_icon_select.php DELETED
@@ -1,230 +0,0 @@
1
- <?php
2
- /**
3
- * Redux Framework is free software: you can redistribute it and/or modify
4
- * it under the terms of the GNU General Public License as published by
5
- * the Free Software Foundation, either version 2 of the License, or
6
- * any later version.
7
- *
8
- * Redux Framework is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
13
- * You should have received a copy of the GNU General Public License
14
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
15
- *
16
- * @package ReduxFramework
17
- * @author Dovy Paukstys
18
- * @version 1.0.6
19
- */
20
-
21
- // Exit if accessed directly
22
- if ( ! defined( 'ABSPATH' ) ) {
23
- exit;
24
- }
25
-
26
- // Don't duplicate me!
27
- if ( ! class_exists( 'ReduxFramework_icon_select' ) ) {
28
-
29
- /**
30
- * Main ReduxFramework_icon_select class
31
- *
32
- * @since 1.0.0
33
- */
34
- class ReduxFramework_icon_select extends ReduxFramework_extension_icon_select {
35
-
36
- /**
37
- * Field Constructor.
38
- *
39
- * Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function
40
- *
41
- * @since 1.0.0
42
- * @access public
43
- * @return void
44
- */
45
- function __construct( $field = array(), $value = '', $parent ) {
46
-
47
- $this->parent = $parent;
48
- $this->field = $field;
49
- $this->value = $value;
50
-
51
- if ( empty( $this->extension_dir ) ) {
52
- $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
53
- $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) );
54
- }
55
-
56
- $defaults = array(
57
- 'options' => array(),
58
- 'stylesheet' => '',
59
- 'output' => true,
60
- 'prefix' => '',
61
- 'selector' => '',
62
- 'height' => '250px',
63
- 'enqueue' => true,
64
- 'enqueue_frontend' => true
65
- );
66
-
67
- $this->field = wp_parse_args( $this->field, $defaults );
68
-
69
- if ( empty( $this->field['options'] ) && $this->field['stylesheet'] != '' ) {
70
-
71
- global $wp_filesystem;
72
-
73
- $this->field['stylesheet'] = ReduxFramework::$_dir . 'assets/css/vendor/font-awesome/font-awesome.min.css';
74
- $this->field['enqueue'] = false;
75
- $this->field['enqueue_frontend'] = true;
76
- $this->field['selector'] = "fa-";
77
- $this->field['prefix'] = "fa";
78
- }
79
-
80
- if ( empty( $this->field['options'] ) && ! empty( $this->field['stylesheet'] ) && ! empty( $this->field['selector'] ) ) {
81
- if ( stripos( $this->field['stylesheet'], "//" ) === false ) {
82
- // Initialize the Wordpress filesystem, no more using file_put_contents function
83
- if ( empty( $wp_filesystem ) ) {
84
- require_once( ABSPATH . '/wp-admin/includes/file.php' );
85
- WP_Filesystem();
86
- }
87
-
88
- $toParse = $wp_filesystem->get_contents( $this->field['stylesheet'] );
89
- $this->stylesheet_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->field['stylesheet'] ) );
90
- } else {
91
- $this->stylesheet_url = $this->field['stylesheet'];
92
- $toParse = wp_remote_get( $this->field['stylesheet'] );
93
- $toParse = $toParse['body'];
94
- }
95
-
96
- preg_match_all( "/(" . $this->field['selector'] . ".*?):before/", $toParse, $output_array );
97
-
98
- foreach ( $output_array[1] as $class ) {
99
- $this->field['options'][ $class ] = $class;
100
- }
101
- }
102
- }
103
-
104
- /**
105
- * Field Render Function.
106
- *
107
- * Takes the vars and outputs the HTML for the field in the settings
108
- *
109
- * @since 1.0.0
110
- * @access public
111
- * @return void
112
- */
113
- public function render() {
114
- if ( ! empty( $this->field['options'] ) ) {
115
- $style = '';
116
-
117
- if ( ! empty( $this->field['height'] ) ) {
118
- $style .= 'height: ' . $this->field['height'];
119
-
120
- if ( is_numeric( $this->field['height'] ) ) {
121
- $style .= 'px';
122
- }
123
-
124
- $style .= ';';
125
- }
126
-
127
- echo '<div class="redux-icon-container" style="' . $style . '">';
128
- echo '<ul class="redux-icon-select">';
129
-
130
- $x = 1;
131
- foreach ( $this->field['options'] as $k => $v ) {
132
- if ( ! empty( $this->field['prefix'] ) ) {
133
- $k = $this->field['prefix'] . ' ' . $k;
134
- }
135
-
136
- $selected = ( checked( $this->value, $k, false ) != '' ) ? ' redux-icon-select-selected' : '';
137
-
138
- echo '<li class="redux-icon-select">';
139
- echo '<label class="' . $selected . ' redux-icon-select' . $this->field['id'] . '_' . $x . '" for="' . $this->field['id'] . '_' . $k . '">';
140
-
141
- echo '<input type="radio" class="' . $this->field['class'] . '" id="' . $this->field['id'] . '_' . $k . '" name="' . $this->field['name'] . $this->field['name_suffix'] . '['.$x.']" value="' . $k . '" ' . checked( $this->value, $k, false ) . '/>';
142
-
143
- echo '<i title="' . $v . '" class="' . $k . '" /></i>';
144
-
145
- echo '</label>';
146
- echo '</li>';
147
- $x ++;
148
- }
149
-
150
- echo '</ul>';
151
- echo '</div>';
152
- }
153
- }
154
-
155
- /**
156
- * Enqueue Function.
157
- *
158
- * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
159
- *
160
- * @since 1.0.0
161
- * @access public
162
- * @return void
163
- */
164
- public function enqueue() {
165
- $extension = ReduxFramework_extension_icon_select::getInstance();
166
-
167
- $min = Redux_Functions::isMin();
168
-
169
- wp_enqueue_script(
170
- 'redux-field-icon-select-js',
171
- $this->extension_url . 'field_icon_select' . $min . '.js',
172
- array( 'jquery' ),
173
- time(),
174
- true
175
- );
176
-
177
- if ( function_exists( 'redux_enqueue_style' ) ) {
178
- redux_enqueue_style(
179
- $this->parent,
180
- 'redux-field-icon-select-css',
181
- $this->extension_url . 'field_icon_select.css',
182
- $this->extension_dir,
183
- array(),
184
- time()
185
- );
186
- } else {
187
- wp_enqueue_style(
188
- 'redux-field-icon-select-css',
189
- $this->extension_url . 'field_icon_select.css',
190
- time(),
191
- true
192
- );
193
- }
194
-
195
- if ( isset( $this->stylesheet_url ) && $this->field['enqueue'] ) {
196
- wp_register_style(
197
- $this->field['id'] . '-webfont',
198
- $this->stylesheet_url,
199
- array(),
200
- time(),
201
- 'all'
202
- );
203
-
204
- wp_enqueue_style( $this->field['id'] . '-webfont' );
205
- }
206
-
207
- }
208
-
209
- /**
210
- * Output Function.
211
- *
212
- * Used to enqueue to Webfont to the front-end
213
- *
214
- * @since 1.0.0
215
- * @access public
216
- * @return void
217
- */
218
- public function output() {
219
- if ( isset( $this->stylesheet_url ) && $this->field['enqueue_frontend'] ) {
220
- wp_enqueue_style(
221
- 'redux-' . $this->field['selector'] . '-webfont',
222
- $this->stylesheet_url,
223
- array(),
224
- time(),
225
- 'all'
226
- );
227
- }
228
- }
229
- }
230
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/icon_select/icon_select/field_icon_select.scss DELETED
@@ -1,52 +0,0 @@
1
- .redux-container-icon_select {
2
- .redux-icon-container {
3
- position: relative;
4
- overflow-y: auto;
5
- border: 2px solid #eee;
6
- padding: 5px;
7
- text-align: center;
8
- }
9
-
10
- .redux-icon-select {
11
- margin: 0 !important;
12
-
13
- input[type='radio'] {
14
- display: none;
15
- }
16
-
17
- i {
18
- border-color: transparent;
19
- color: #555;
20
-
21
- &:hover {
22
- border-color: #ddd;
23
- color: #111;
24
- }
25
- }
26
- }
27
-
28
- ul {
29
- &.redux-icon-select li {
30
- margin: 10px;
31
- display: block;
32
- float: left;
33
- padding: 5px;
34
- }
35
- }
36
-
37
- .redux-icon-select i,
38
- .redux-icon-select-selected i {
39
- border-width: 4px;
40
- border-style: solid;
41
- font-size: 30px;
42
- padding: 5px;
43
- }
44
-
45
- .redux-icon-select-selected {
46
- i,
47
- i:hover {
48
- border-color: #7a7a7a;
49
- color: #269ad6;
50
- }
51
- }
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/metaboxes/extension_metaboxes.css DELETED
@@ -1,3 +0,0 @@
1
- /* Metaboxes CSS overrides */
2
- .wpseotab tr{display:table-row!important}.redux_field_th{padding-bottom:0!important}.postbox .redux-container{filter:none;border:0;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.redux-group-tab{margin-bottom:0!important}.postbox .redux-container .redux-group-menu .active a{background:#FFF}.postbox .redux-container .redux-section-title{padding-left:0!important;margin-bottom:15px!important}.postbox .redux-container .redux-section-desc{margin-bottom:20px}.postbox .redux-container .redux_main{border-left:1px solid #D8D8D8;moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.postbox .redux-container .redux_main input[type=text]{width:95%}.postbox .redux-container.redux-no-sections{margin:0;background:0}.postbox .redux-container.redux-no-sections .redux-main{background:0;margin-left:inherit;padding:inherit;border-left:0!important;min-height:0!important}.postbox .redux-container.redux-no-sections .redux-main tr td{padding-top:20px!important;width:100%}.postbox .redux-container.redux-no-sections .redux-main tr:last-child{border-bottom:0}.postbox .redux-container.redux-no-sections .redux-main tr:last-child th,.postbox .redux-container.redux-no-sections .redux-main tr:last-child td{padding-bottom:0}.postbox .redux-container.redux-no-sections .redux-main .form-table:first-child tr:first-child td{padding-top:0!important}.postbox .redux-container.redux-no-sections .redux-main .redux-field{margin-bottom:10px!important}.postbox .redux-container.redux-no-sections .redux-main .redux-field:last-child{margin-bottom:0!important}.postbox .redux-container.redux-has-sections .redux-main{background:#fff}.redux-box-side .redux-main .redux-field-container{padding:0;padding-top:5px}.redux-box-side .redux-main .redux-field-container .select2-container,.redux-box-side .redux-main .redux-field-container select{width:100%!important}.redux-box-side .form-table tr td{padding:15px 0!important}.redux-box-side .form-table tr:last-child td{padding-bottom:0!important}.redux-box-side .form-table tr:first-child td{padding-top:5px!important}.redux-box-side .form-table tr:first-child td{padding-top:5px!important}.postbox .redux-main h3{cursor:text!important;-webkit-user-select:inherit!important;-moz-user-select:inherit!important;user-select:inherit!important;padding-left:0!important}#poststuff h3.redux-hndle,.metabox-holder h3.redux-hndle{cursor:pointer;border-bottom:0}.display-group{display:inherit!important}.postbox .redux-container.redux-no-sections .redux-main tr td{padding-top:10px!important}@media (min-width: 1125px) and (max-width: 1405px){.postbox table.form-table,.postbox .form-table>thead,.postbox .form-table>tbody,.postbox .form-table>tbody>tr>th,.postbox .form-table>tbody>tr>td,.postbox .form-table>tbody>tr{ display:block!important;width:100%!important;padding:0!important}.postbox table.form-table.hide,.postbox .form-table>thead.hide,.postbox .form-table>tbody.hide,.postbox .form-table>tbody>tr>th.hide,.postbox .form-table>tbody>tr>td.hide,.postbox .form-table>tbody>tr.hide{display:none!important}.postbox .form-table>tbody>tr>th,.postbox .form-table>tbody>tr>td{padding:10px!important}.postbox .form-table>tbody>tr>th,.postbox .form-table>tbody>tr>td{padding:10px!important}.postbox .form-table>tbody>tr>th{width:35%}}.redux-box-side .redux-main .redux-field-container .select2-container,.redux-box-side .redux-main .redux-field-container select{width:96%!important}@media (max-width: 1405px){.redux-box-side .redux-main .redux-field-container .select2-container,.redux-box-side .redux-main .redux-field-container select{ width:92%!important}}@media (max-width: 1125px){.redux-box-side .redux-main .redux-field-container .select2-container,.redux-box-side .redux-main .redux-field-container select{ width:100%!important}}@media (max-width: 1405px){.redux-main .form-table>tbody>tr>td{ padding-top:0!important;padding-bottom:0!important}.redux-main .redux-field-container{padding:0 0 20px 0!important}.postbox .form-table>tbody>tr>th{padding-bottom:0!important}.redux_field_th{padding-top:0!important;padding-bottom:10px!important}.redux-main .redux-field-container{padding-bottom:10px!important}}.redux-no-sections .redux-group-tab{display:block!important}.admin-color-fresh #poststuff h3.redux-hndle,.admin-color-fresh .metabox-holder h3.redux-hndle{background:#222;color:#fff}.admin-color-light #poststuff h3.redux-hndle,.admin-color-light .metabox-holder h3.redux-hndle{background:#888;color:#fff}.admin-color-blue #poststuff h3.redux-hndle,.admin-color-blue .metabox-holder h3.redux-hndle{background:#096484;color:#fff}.admin-color-coffee #poststuff h3.redux-hndle,.admin-color-coffee .metabox-holder h3.redux-hndle{background:#46403c;color:#fff}.admin-color-ectoplasm #poststuff h3.redux-hndle,.admin-color-ectoplasm .metabox-holder h3.redux-hndle{background:#413256;color:#fff}.admin-color-midnight #poststuff h3.redux-hndle,.admin-color-midnight .metabox-holder h3.redux-hndle{background:#363b3f;color:#fff}.admin-color-ocean #poststuff h3.redux-hndle,.admin-color-ocean .metabox-holder h3.redux-hndle{background:#627c83;color:#fff}.admin-color-sunrise #poststuff h3.redux-hndle,.admin-color-sunrise .metabox-holder h3.redux-hndle{background:#b43c38;color:#fff}.redux-notices{margin-bottom:0;border:0}.redux-metabox .redux-container{margin-top:0}.redux-metabox .inside{margin:0!important;padding:0!important}.redux-metabox .redux-no-sections .redux-main{padding:6px 15px 15px 15px!important}.redux-metabox .redux-no-sections .redux-main .default_br{display:none}.redux-metabox .redux-no-sections .redux-main .redux-field-container{padding:10px 0 20px!important}.redux-metabox .redux-no-sections .redux-main .redux_field_th{padding-top:5px!important}.redux-metabox .redux-no-sections.redux-box-side .redux-main{padding:6px 8px 8px 8px!important}.redux-metabox .redux-no-sections.redux-box-side .redux-main input[type=text]{width:100%!important}.wp-color-result{margin:0 6px 0 0!important}.redux-container .ui-button-text-only .ui-button-text{padding:0}
3
- /* This beautiful CSS-File has been crafted with LESS (lesscss.org) and compiled by simpLESS (wearekiss.com/simpless) */
 
 
 
inc/extensions/extensions/metaboxes/extension_metaboxes.js DELETED
@@ -1,79 +0,0 @@
1
-
2
-
3
- /**
4
- * Redux Metaboxes
5
- * Dependencies : jquery
6
- * Created by : Dovy Paukstys
7
- * Date : 19 Feb. 2014
8
- */
9
-
10
- /* global reduxMetaboxes, redux */
11
-
12
- jQuery(function($){
13
-
14
- "use strict";
15
-
16
- $.reduxMetaBoxes = $.reduxMetaBoxes || {};
17
-
18
- $(document).ready(function () {
19
- $.reduxMetaBoxes.init();
20
- });
21
-
22
- $.reduxMetaBoxes.init = function(){
23
- $.reduxMetaBoxes.notLoaded = true;
24
- $.reduxMetaBoxes.checkBoxVisibility();
25
- $('.redux-container').each(function() {
26
- $(this).parents('.postbox:first').find('h3.hndle').addClass('redux-hndle');
27
- $(this).parents('.postbox:first').addClass('redux-metabox');
28
- $(this).parents('.postbox:first').addClass( 'redux-' + redux.args.opt_name );
29
- if ( redux.args.container_class !== "" ) {
30
- $(this).parents('.postbox:first').addClass( redux.args.class );
31
- }
32
- });
33
- $('#page_template').change(function() {
34
- $.reduxMetaBoxes.checkBoxVisibility('page_template');
35
- });
36
- $('input[name="post_format"]:radio').change(function() {
37
- $.reduxMetaBoxes.checkBoxVisibility('post_format');
38
- });
39
-
40
- $.redux.initFields();
41
- };
42
-
43
- $('#publishing-action .button, #save-action .button').click(function() {
44
- window.onbeforeunload = null;
45
- });
46
- var testValue;
47
- $.reduxMetaBoxes.checkBoxVisibility = function(fieldID){
48
- if (reduxMetaboxes.length !== 0) {
49
- $.each(reduxMetaboxes, function(box, values) {
50
- $.each(values, function(field, v) {
51
- if (field === fieldID || !fieldID) {
52
- if (field === "post_format") {
53
- testValue = $("input:radio[name='post_format']:checked").val();
54
- } else {
55
- testValue = $('#'+field).val();
56
- }
57
- if (testValue) {
58
- var visible = false;
59
- $.each(v, function(key, val) {
60
- if (val === testValue) {
61
- visible = true;
62
- }
63
- });
64
- if (!visible && !$.reduxMetaBoxes.notLoaded) {
65
- $('#'+box).hide();
66
- }
67
- else if (!visible) {
68
- $('#'+box).fadeOut('50');
69
- } else {
70
- $('#'+box).fadeIn('300');
71
- $.redux.initFields();
72
- }
73
- }
74
- }
75
- });
76
- });
77
- }
78
- };
79
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/metaboxes/extension_metaboxes.less DELETED
@@ -1,315 +0,0 @@
1
- .wpseotab tr {
2
- display: table-row !important
3
- }
4
-
5
-
6
- .redux_field_th {
7
- padding-bottom: 0px !important;
8
- }
9
-
10
- .postbox .redux-container {
11
- filter: none;
12
- border: none;
13
- -moz-border-radius: 0;
14
- /* Firefox */
15
-
16
- -webkit-border-radius: 0;
17
- /* Safari, Chrome */
18
-
19
- border-radius: 0;
20
- -moz-box-shadow: none;
21
- -webkit-box-shadow: none;
22
- box-shadow: none;
23
-
24
- }
25
-
26
- .redux-group-tab {
27
- margin-bottom: 0 !important;
28
- }
29
-
30
- .postbox .redux-container .redux-group-menu .active a {
31
- background: #FFF;
32
- }
33
-
34
- .postbox .redux-container .redux-section-title {
35
- padding-left: 0 !important;
36
- margin-bottom: 15px !important;
37
- }
38
-
39
- .postbox .redux-container .redux-section-desc {
40
- margin-bottom: 20px;
41
- }
42
-
43
- .postbox .redux-container .redux_main {
44
- border-left: 1px solid #D8D8D8;
45
- moz-box-shadow: none;
46
- -webkit-box-shadow: none;
47
- box-shadow: none;
48
- }
49
-
50
- .postbox .redux-container .redux_main input[type=text] {
51
- width: 95%;
52
- }
53
-
54
- .postbox .redux-container.redux-no-sections {
55
- margin: 0;
56
- background: none;
57
- }
58
-
59
- .postbox .redux-container.redux-no-sections .redux-main {
60
- background: none;
61
- margin-left: inherit;
62
- padding: inherit;
63
- border-left: none !important;
64
- min-height: 0 !important;
65
- }
66
-
67
- .postbox .redux-container.redux-no-sections .redux-main tr td {
68
- padding-top: 20px !important;
69
- width: 100%;
70
- }
71
-
72
- .postbox .redux-container.redux-no-sections .redux-main tr:last-child {
73
- border-bottom: none;
74
- }
75
-
76
- .postbox .redux-container.redux-no-sections .redux-main tr:last-child th,
77
- .postbox .redux-container.redux-no-sections .redux-main tr:last-child td {
78
- padding-bottom: 0;
79
- }
80
-
81
- .redux-main .redux-field-container {
82
- //padding: 10px inherit !important;
83
- }
84
-
85
- .postbox .redux-container.redux-no-sections .redux-main .form-table:first-child tr:first-child td {
86
- padding-top: 0 !important;
87
- }
88
-
89
- .postbox .redux-container.redux-no-sections .redux-main .redux-field {
90
- margin-bottom: 10px !important;
91
- }
92
-
93
- .postbox .redux-container.redux-no-sections .redux-main .redux-field:last-child {
94
- margin-bottom: 0 !important;
95
- }
96
-
97
- .postbox .redux-container.redux-has-sections .redux-main {
98
- background: #fff;
99
- }
100
-
101
- .redux-box-side .redux-main .redux-field-container {
102
- padding: 0;
103
- padding-top: 5px;
104
- }
105
-
106
- .redux-box-side .redux-main .redux-field-container .select2-container,
107
- .redux-box-side .redux-main .redux-field-container select {
108
- width: 100% !important;
109
- }
110
-
111
- .redux-box-side .form-table tr td {
112
- padding: 15px 0 !important;
113
- }
114
-
115
- .redux-box-side .form-table tr:last-child td {
116
- padding-bottom: 0 !important;
117
- }
118
-
119
- .redux-box-side .form-table tr:first-child td {
120
- padding-top: 5px !important;
121
- }
122
-
123
- .redux-box-side .form-table tr:first-child td {
124
- padding-top: 5px !important;
125
- }
126
-
127
- .postbox .redux-main h3 {
128
- cursor: text !important;
129
- -webkit-user-select: inherit !important;
130
- -moz-user-select: inherit !important;
131
- user-select: inherit !important;
132
- padding-left: 0 !important;
133
- }
134
-
135
- #poststuff h3.redux-hndle, .metabox-holder h3.redux-hndle {
136
- cursor: pointer;
137
- border-bottom: 0;
138
- }
139
-
140
- .display-group {
141
- display: inherit !important;
142
- }
143
-
144
- .postbox .redux-container.redux-no-sections .redux-main tr td {
145
- padding-top: 10px !important;
146
- }
147
-
148
- /* Metaboxes CSS overrides */
149
- @media (min-width: 1125px) and (max-width: 1405px) {
150
- .postbox table.form-table,
151
- .postbox .form-table > thead,
152
- .postbox .form-table > tbody,
153
- .postbox .form-table > tbody > tr > th,
154
- .postbox .form-table > tbody > tr > td,
155
- .postbox .form-table > tbody > tr {
156
- display: block !important;
157
- width: 100% !important;
158
- padding: 0px !important;
159
- &.hide {
160
- display: none !important;
161
- }
162
- }
163
-
164
- .postbox .form-table > tbody > tr > th,
165
- .postbox .form-table > tbody > tr > td {
166
- padding: 10px !important;
167
- }
168
-
169
- .postbox .form-table > tbody > tr > th,
170
- .postbox .form-table > tbody > tr > td {
171
- padding: 10px !important;
172
- }
173
-
174
- .postbox .form-table > tbody > tr > th {
175
- width: 35%;
176
- }
177
-
178
- }
179
-
180
- .redux-box-side .redux-main .redux-field-container .select2-container, .redux-box-side .redux-main .redux-field-container select {
181
- width: 96% !important;
182
- }
183
-
184
- @media (max-width: 1405px) {
185
- .redux-box-side .redux-main .redux-field-container .select2-container, .redux-box-side .redux-main .redux-field-container select {
186
- width: 92% !important;
187
- }
188
- }
189
-
190
- @media (max-width: 1125px) {
191
- .redux-box-side .redux-main .redux-field-container .select2-container, .redux-box-side .redux-main .redux-field-container select {
192
- width: 100% !important;
193
- }
194
- }
195
-
196
- @media (max-width: 1405px) {
197
- .redux-main .form-table > tbody > tr > td {
198
- padding-top: 0 !important;
199
- padding-bottom: 0 !important;
200
- }
201
-
202
- .redux-main .redux-field-container {
203
- padding: 0 0 20px 0 !important;
204
- }
205
-
206
- .postbox .form-table > tbody > tr > th {
207
- padding-bottom: 0 !important;
208
- }
209
-
210
- .redux_field_th {
211
- padding-top: 0 !important;
212
- padding-bottom: 10px !important;
213
- }
214
-
215
- .redux-main .redux-field-container {
216
- padding-bottom: 10px !important;
217
- }
218
-
219
- }
220
-
221
- .redux-no-sections .redux-group-tab {
222
- display: block !important;
223
- }
224
-
225
- .metaboxesAdminThemeColorOverrides (@darkColor, @textColor) {
226
- #poststuff h3.redux-hndle, .metabox-holder h3.redux-hndle {
227
- background: @darkColor;
228
- color: @textColor;
229
- }
230
- }
231
-
232
- /* Light fresh theme */
233
- .admin-color-fresh {
234
- .metaboxesAdminThemeColorOverrides(#222222, #fff);
235
- }
236
-
237
- /* Light admin theme */
238
- .admin-color-light {
239
- .metaboxesAdminThemeColorOverrides(#888888, #fff);
240
- }
241
-
242
- /* Blue admin theme */
243
- .admin-color-blue {
244
- .metaboxesAdminThemeColorOverrides(#096484, #fff);
245
- }
246
-
247
- /* Coffee admin theme */
248
- .admin-color-coffee {
249
- .metaboxesAdminThemeColorOverrides(#46403c, #fff);
250
- }
251
-
252
- /* Ectoplasm admin theme */
253
- .admin-color-ectoplasm {
254
- .metaboxesAdminThemeColorOverrides(#413256, #fff);
255
- }
256
-
257
- /* Midnight admin theme */
258
- .admin-color-midnight {
259
- .metaboxesAdminThemeColorOverrides(#363b3f, #fff);
260
- }
261
-
262
- /* Ocean admin theme */
263
- .admin-color-ocean {
264
- .metaboxesAdminThemeColorOverrides(#627c83, #fff);
265
- }
266
-
267
- /* Sunrise admin theme */
268
- .admin-color-sunrise {
269
- .metaboxesAdminThemeColorOverrides(#b43c38, #fff);
270
- }
271
-
272
- .redux-notices {
273
- margin-bottom: 0;
274
- border: 0;
275
- }
276
-
277
- .redux-metabox {
278
- .redux-container {
279
- margin-top: 0;
280
- }
281
- .inside {
282
- margin: 0 !important;
283
- padding: 0 !important;
284
- }
285
-
286
- .redux-no-sections {
287
- .redux-main {
288
- padding: 6px 15px 15px 15px !important;
289
- .default_br {
290
- display: none;
291
- }
292
- .redux-field-container {
293
- padding: 10px 0 20px !important;
294
- }
295
- .redux_field_th {
296
- padding-top: 5px !important;
297
- }
298
- }
299
- &.redux-box-side {
300
- .redux-main {
301
- padding: 6px 8px 8px 8px !important;
302
- input[type=text] {
303
- width: 100% !important;
304
- }
305
- }
306
- }
307
- }
308
- }
309
-
310
- .wp-color-result {
311
- margin: 0 6px 0 0px !important;
312
- }
313
- .redux-container .ui-button-text-only .ui-button-text {
314
- padding: 0;
315
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/metaboxes/extension_metaboxes.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(e){"use strict";e.reduxMetaBoxes=e.reduxMetaBoxes||{};e(document).ready(function(){e.reduxMetaBoxes.init()});e.reduxMetaBoxes.init=function(){e.reduxMetaBoxes.notLoaded=true;e.reduxMetaBoxes.checkBoxVisibility();e(".redux-container").each(function(){e(this).parents(".postbox:first").find("h3.hndle").addClass("redux-hndle");e(this).parents(".postbox:first").addClass("redux-metabox");e(this).parents(".postbox:first").addClass("redux-"+redux.args.opt_name);if(redux.args.container_class!==""){e(this).parents(".postbox:first").addClass(redux.args.class)}});e("#page_template").change(function(){e.reduxMetaBoxes.checkBoxVisibility("page_template")});e('input[name="post_format"]:radio').change(function(){e.reduxMetaBoxes.checkBoxVisibility("post_format")});e.redux.initFields()};var t=e(".postbox");t.click(function(){if(!t.hasClass("closed")){e.redux.initFields()}});e("#publishing-action .button, #save-action .button").click(function(){window.onbeforeunload=null});var n;e.reduxMetaBoxes.checkBoxVisibility=function(t){if(reduxMetaboxes.length!==0){e.each(reduxMetaboxes,function(r,i){e.each(i,function(i,s){if(i===t||!t){if(i==="post_format"){n=e("input:radio[name='post_format']:checked").val()}else{n=e("#"+i).val()}if(n){var o=false;e.each(s,function(e,t){if(t===n){o=true}});if(!o&&!e.reduxMetaBoxes.notLoaded){e("#"+r).hide()}else if(!o){e("#"+r).fadeOut("50");e.redux.initFields()}else{e("#"+r).fadeIn("300");e.redux.initFields()}}}})})}}})
 
inc/extensions/extensions/metaboxes/extension_metaboxes.php DELETED
@@ -1,1399 +0,0 @@
1
- <?php
2
-
3
-
4
- /**
5
- * Redux Framework is free software: you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation, either version 2 of the License, or
8
- * any later version.
9
- * Redux Framework is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- * You should have received a copy of the GNU General Public License
14
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
15
- *
16
- * @package ReduxFramework
17
- * @author Dovy Paukstys (dovy)
18
- * @author Kevin Provance (kprovance)
19
- * @version 1.2.9
20
- */
21
-
22
- // Exit if accessed directly
23
- if ( ! defined( 'ABSPATH' ) ) {
24
- exit;
25
- }
26
-
27
- // Don't duplicate me!
28
- if ( ! class_exists( 'ReduxFramework_extension_metaboxes' ) ) {
29
-
30
- /**
31
- * Main ReduxFramework customizer extension class
32
- *
33
- * @since 1.0.0
34
- */
35
- class ReduxFramework_extension_metaboxes {
36
-
37
- static $version = "1.2.9";
38
-
39
- public $boxes = array();
40
- public $post_types = array();
41
- public $post_type;
42
- public $sections = array();
43
- public $output = array();
44
- private $parent;
45
- public $options = array();
46
- public $parent_options = array();
47
- public $parent_defaults = array();
48
- public $wp_links = array();
49
- public $options_defaults = array();
50
- public $localize_data = array();
51
- public $toReplace = array();
52
- public $_extension_url;
53
- public $_extension_dir;
54
- public $meta = array();
55
- public $post_id = 0;
56
- public $base_url;
57
-
58
- public function __construct( $parent ) {
59
-
60
- $this->parent = $parent;
61
-
62
-
63
- $this->parent->extensions['metaboxes'] = $this;
64
-
65
- if ( empty( self::$_extension_dir ) ) {
66
- $this->_extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
67
- $this->_extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->_extension_dir ) );
68
- }
69
-
70
- // Only run metaboxes on the pages/posts, not the front-end
71
- global $pagenow;
72
- if ( $pagenow !== "post-new.php" && $pagenow !== "post.php" ) {
73
- if ( is_admin() ) {
74
- return;
75
- }
76
-
77
- }
78
- // Must not update the DB when just updating metaboxes. Sheesh.
79
- if ( is_admin() && ( $pagenow == "post-new.php" || $pagenow == "post.php" ) ) {
80
- $this->parent->never_save_to_db = true;
81
- }
82
-
83
- //add_filter( 'admin_footer_text', array( &$this, 'admin_footer_text' ) );
84
-
85
-
86
- add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
87
- add_action( 'save_post', array( $this, 'meta_boxes_save' ), 1, 2 );
88
- add_action( 'pre_post_update', array( $this, 'pre_post_update' ) );
89
- add_action( 'admin_notices', array( $this, 'meta_boxes_show_errors' ), 0 );
90
-
91
- add_action( 'admin_enqueue_scripts', array( $this, '_enqueue' ), 20 );
92
-
93
- // Fix for wp-seo embedding an old version (RC3) of qtip. Bah.
94
- add_action( 'wp_print_scripts', array( $this, 'FIX_wp_seo' ), 100 );
95
- add_action( 'admin_enqueue_scripts', array( $this, 'FIX_wp_seo' ), 100 );
96
-
97
- // Global variable overrides for within loops
98
- add_action( 'the_post', array( $this, '_loop_start' ), 0 );
99
- add_action( 'loop_end', array( $this, '_loop_end' ), 0 );
100
-
101
-
102
- //add_action( 'load_textdomain', array( $this, 'init' ), 0 );
103
-
104
- $this->init();
105
-
106
- } // __construct()
107
-
108
- public function init() {
109
- global $pagenow;
110
-
111
- $this->boxes = apply_filters( 'redux/metaboxes/' . $this->parent->args['opt_name'] . '/boxes', $this->boxes );
112
-
113
- if ( empty( $this->boxes ) ) {
114
- return; // Don't do it! There's nothing here.
115
- }
116
-
117
- $this->base_url = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
118
- $this->post_id = $this->url_to_postid( 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
119
- if ( is_admin() && isset( $_GET['post_type'] ) && ! empty( $_GET['post_type'] ) ) {
120
- $this->post_type = $_GET['post_type'];
121
- } else {
122
- $this->post_type = get_post_type( $this->post_id );
123
- }
124
-
125
-
126
- foreach ( $this->boxes as $bk => $box ) {
127
- // If the post ids for this box are set, we're limiting to the current post id
128
- if ( isset( $box['post_ids'] ) && ! empty( $box['post_ids'] ) ) {
129
- if ( ! is_array( $box['post_ids'] ) ) {
130
- $box['post_ids'] = array( $box['post_ids'] );
131
- }
132
- if ( ! in_array( $this->post_id, $box['post_ids'] ) ) {
133
- continue;
134
- }
135
-
136
- }
137
- if ( ! empty( $box['sections'] ) ) {
138
- $this->sections = $box['sections'];
139
- array_merge( $this->parent->sections, $box['sections'] );
140
-
141
- $this->post_types = wp_parse_args( $this->post_types, $box['post_types'] );
142
-
143
- if ( is_admin() && ( $pagenow == "post-new.php" || $pagenow == "post.php" ) ) {
144
- // NEST IN THE BOX ID
145
-
146
- }
147
-
148
- // Checking to overide the parent variables
149
- $addField = false;
150
-
151
- foreach ( $box['post_types'] as $type ) {
152
- if ( $this->post_type == $type ) {
153
- $addField = true;
154
- }
155
- }
156
-
157
- // Replacing all the fields
158
- if ( $addField
159
- || (
160
- ( is_admin() && ( $pagenow == "post-new.php" || $pagenow == "post.php" ) )
161
- ||
162
- ( ! is_admin() )
163
- )
164
- ) {
165
- $runHooks = true;
166
-
167
- $boxID = 'redux-' . $this->parent->args['opt_name'] . '-metabox-' . $box['id'];
168
-
169
- if ( isset( $box['page_template'] ) && $this->post_type == "page" ) {
170
- if ( ! is_array( $box['page_template'] ) ) {
171
- $box['page_template'] = array( $box['page_template'] );
172
- }
173
- $this->wp_links[ $boxID ]['page_template'] = isset( $this->wp_links[ $boxID ]['page_template'] ) ? wp_parse_args( $this->wp_links['page_template'], $box['page_template'] ) : $box['page_template'];
174
- }
175
- if ( isset( $box['post_format'] ) && ( in_array( $this->post_type, $this->post_types ) || $this->post_type == "" ) ) {
176
- if ( ! is_array( $box['post_format'] ) ) {
177
- $box['post_format'] = array( $box['post_format'] );
178
- }
179
- $this->wp_links[ $boxID ]['post_format'] = isset( $this->wp_links[ $boxID ]['post_format'] ) ? wp_parse_args( $this->wp_links['post_format'], $box['post_format'] ) : $box['post_format'];
180
- }
181
-
182
- $this->meta[ $this->post_id ] = $this->get_meta( $this->post_id );
183
-
184
- //$this->parent->options = wp_parse_args($this->meta[$this->post_id], $this->parent->options);
185
- foreach ( $box['sections'] as $sk => $section ) {
186
- if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) {
187
- foreach ( $section['fields'] as $fk => $field ) {
188
- if ( ! isset( $field['class'] ) ) {
189
- $field['class'] = "";
190
- $this->boxes[ $bk ]['sections'][ $sk ]['fields'][ $fk ] = $field;
191
- }
192
- if ( stripos( $field['class'], 'redux-field-init' ) === 0 ) {
193
- //$field['class'] = trim( $field['class'] . ' redux-field-init' );
194
- }
195
- if ( $addField
196
- || (
197
- ( is_admin() && ( $pagenow == "post-new.php" || $pagenow == "post.php" ) )
198
- ||
199
- ( ! is_admin() )
200
- )
201
- ) {
202
-
203
-
204
- if ( empty( $field['id'] ) ) {
205
- continue;
206
- }
207
-
208
- if ( isset( $field['default'] ) ) {
209
- $this->options_defaults[ $field['id'] ] = $field['default'];
210
- } else {
211
- $this->options_defaults[ $field['id'] ] = $this->_field_default( $field );
212
- }
213
-
214
- foreach ( $box['post_types'] as $type ) {
215
- $this->post_type_fields[ $type ][ $field['id'] ] = 1;
216
- }
217
-
218
- if ( isset( $field['output'] ) && ! empty( $field['output'] ) ) {
219
- $this->output[ $field['id'] ] = isset( $this->output[ $field['id'] ] ) ? array_merge( $field['output'], $this->output[ $field['id'] ] ) : $field['output'];
220
- }
221
-
222
- // Detect what field types are being used
223
- if ( ! isset( $this->parent->fields[ $field['type'] ][ $field['id'] ] ) ) {
224
- $this->parent->fields[ $field['type'] ][ $field['id'] ] = 1;
225
- } else {
226
- $this->parent->fields[ $field['type'] ] = array( $field['id'] => 1 );
227
- }
228
-
229
- if ( ! isset( $this->options_defaults[ $field['id'] ] ) ) {
230
- $this->toReplace[ $field['id'] ] = $field;
231
- }
232
- //
233
- //if( isset( $field['default'] ) ) {
234
- // $this->options_defaults[$field['id']] = $field['default'];
235
- //} else {
236
- // $field['default'] = $this->options_defaults[$field['id']];
237
- }
238
-
239
- //} elseif (isset($field['options'])) {
240
- //$this->options_defaults[$field['id']] = $field['options'];
241
- //}
242
-
243
- if ( ! isset( $this->parent->options[ $field['id'] ] ) ) {
244
- $this->parent->sections[ ( count( $this->parent->sections ) - 1 ) ]['fields'][] = $field;
245
- }
246
-
247
- //echo 'post meta';
248
- //print_r($this->meta[$this->post_id]);
249
- //print_r($this->options[$field['id']]);
250
- if ( ! isset( $this->meta[ $this->post_id ][ $field['id'] ] ) ) {
251
- $this->meta[ $this->post_id ][ $field['id'] ] = $this->options_defaults[ $field['id'] ];
252
- }
253
-
254
- //if (!isset($this->meta[$this->post_id][$field['id']]) && isset($this->options_defaults[$field['id']])) {
255
- //$this->meta[$this->post_id][$field['id']] = $this->options_defaults[$field['id']];
256
- //}
257
-
258
- //$setDefaults = false;
259
- //if (!isset($this->parent->options[$field['id']]) || $this->parent->options[$field['id']] == $this->parent->options_defaults[$field['id']]) {
260
- // $setDefaults = true;
261
- //}
262
-
263
- //if (!isset($this->meta[$this->post_id][$field['id']])) {
264
- // $this->meta[$this->post_id][$field['id']][$field['id']] = $this->parent->options_defaults[$field['id']];
265
- // $this->parent->options[$field['id']] = $this->parent->options_defaults[$field['id']];
266
- //}
267
-
268
- //if ( !empty($this->meta[$this->post_id]) && isset( $this->meta[$this->post_id][$field['id']] ) ) {
269
- //$this->parent->options[$field['id']] = $this->meta[$this->post_id][$field['id']];
270
- //}
271
- /*
272
- if( isset( $field['default'] ) ) {
273
- $this->parent->options_defaults[$field['id']] = $field['default'];
274
- } elseif (isset($field['options'])) {
275
- $this->parent->options_defaults[$field['id']] = $field['options'];
276
- }
277
- if (isset($setDefaults) && isset($field['default'])) {
278
- $this->parent->options[$field['id']] = $this->parent->options_defaults[$field['id']];
279
- }
280
- */
281
-
282
-
283
- // Only override if it exists and it's not the default
284
- if ( isset( $this->meta[ $this->post_id ][ $field['id'] ] ) && isset( $field['default'] ) && $this->meta[ $this->post_id ][ $field['id'] ] == $field['default'] ) {
285
- //unset($this->meta[$this->post_id][$field['id']]);
286
- }
287
-
288
-
289
- }
290
- }
291
- }
292
-
293
- }
294
- }
295
-
296
- }
297
-
298
- if ( isset( $runHooks ) && $runHooks == true ) {
299
-
300
- //$this->parent->get_options();
301
- $this->parent_options = ''; //$this->parent->options;
302
-
303
- if ( ! empty( $this->toReplace ) ) {
304
- foreach ( $this->toReplace as $id => $field ) {
305
- add_filter( "redux/options/{$this->parent->args['opt_name']}/field/{$id}/register", array(
306
- $this,
307
- 'replace_field'
308
- ) );
309
- }
310
- }
311
-
312
- //$this->parent->options_defaults = wp_parse_args($this->options_defaults, $this->parent->options_defaults);
313
-
314
- // Override the defaults, the but options have already been grabbed
315
- //add_filter( "redux/options/{$this->parent->args['opt_name']}/defaults", array( $this, '_override_defaults' ) );
316
-
317
- //add_filter( "redux/options/{$this->args['opt_name']}/defaults", '' );
318
- add_filter( "redux/options/{$this->parent->args['opt_name']}/options", array(
319
- $this,
320
- '_override_options'
321
- ) );
322
-
323
- add_filter( "redux/field/{$this->parent->args['opt_name']}/_can_output_css", array(
324
- $this,
325
- '_override_can_output_css'
326
- ) );
327
-
328
- add_filter( "redux/field/{$this->parent->args['opt_name']}/output_css", array(
329
- $this,
330
- '_output_css'
331
- ) );
332
-
333
- //add_filter( "redux/options/{$this->parent->args['opt_name']}/global_variable", array( $this, '_override_values' ) );
334
-
335
- }
336
-
337
- }
338
-
339
- function replace_field( $field ) {
340
- if ( isset( $this->toReplace[ $field['id'] ] ) ) {
341
- $field = $this->toReplace[ $field['id'] ];
342
- }
343
-
344
- return $field;
345
- }
346
-
347
- function _override_can_output_css( $field ) {
348
-
349
- if ( isset( $this->output[ $field['id'] ] ) ) {
350
- $field['force_output'] = true;
351
- }
352
-
353
- return $field;
354
- }
355
-
356
- function _output_css( $field ) {
357
-
358
- if ( isset( $this->output[ $field['id'] ] ) ) {
359
- $field['output'] = $this->output[ $field['id'] ];
360
- }
361
-
362
- return $field;
363
- }
364
-
365
- // Fix for wp-seo embedding an old version (RC3) of qtip. Bah.
366
- public function FIX_wp_seo() {
367
- wp_dequeue_script( 'jquery-qtip' );
368
- wp_deregister_script( 'jquery-qtip' );
369
- }
370
-
371
- // DEPRECATED, just for storage
372
- public function _override_defaults( $defaults ) {
373
- $defaults = wp_parse_args( $this->options_defaults, $defaults );
374
- foreach ( $this->options_defaults as $field => $value ) {
375
- if ( ! isset( $this->parent->options[ $field ] ) || ( ! isset( $defaults[ $field ] ) || ! isset( $this->parent->options[ $field ] ) || $defaults[ $field ] == $this->parent->options[ $field ] ) ) {
376
- $this->parent->options[ $field ] = $value;
377
- $this->meta[ $field ] = $value;
378
- }
379
- }
380
-
381
- return wp_parse_args( $this->options_defaults, $defaults );
382
- }
383
-
384
- // Make sure the defaults are the defaults
385
- public function _override_options( $options ) {
386
-
387
- $this->parent->_default_values();
388
- $this->parent_defaults = $this->parent->options_defaults;
389
-
390
- $meta = $this->get_meta( $this->post_id );
391
- //print_r($meta);
392
- $data = wp_parse_args( $meta, $this->options_defaults );
393
- foreach ( $data as $key => $value ) {
394
- if ( isset( $meta[ $key ] ) ) {
395
- $data[ $key ] = $meta[ $key ];
396
- continue;
397
- }
398
-
399
- if ( isset( $options[ $key ] ) ) {
400
- //if ( isset($options[$key]) && isset($this->parent->options_defaults[$key]) && $options[$key] != $this->parent->options_defaults[$key]) {
401
- if ( isset( $options[ $key ] ) ) {
402
- $data[ $key ] = $options[ $key ];
403
- }
404
- }
405
- }
406
- $this->parent->options_defaults = wp_parse_args( $this->options_defaults, $this->parent->options_defaults );
407
-
408
- $options = wp_parse_args( $data, $options );
409
-
410
- return $options;
411
- }
412
-
413
- public function _loop_start( $the_post = array() ) {
414
-
415
- if ( is_admin() ) {
416
- return $the_post;
417
- }
418
-
419
- if ( isset( $the_post ) && is_array( $the_post ) ) {
420
- global $post;
421
- $the_post = $post;
422
- }
423
-
424
- //echo "POST ID: ".$the_post->ID;
425
-
426
- if ( isset( $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] ) ) {
427
- $GLOBALS[ $this->parent->args['global_variable'] ] = $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ];
428
- unset( $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] );
429
- }
430
-
431
- // Override these values if they differ from the admin panel defaults. ;)
432
- if ( in_array( $the_post->post_type, $this->post_types ) ) {
433
- $meta = $this->get_meta( $the_post->ID );
434
- if ( empty( $meta ) ) {
435
- return;
436
- }
437
- // Backup the args
438
- $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] = $GLOBALS[ $this->parent->args['global_variable'] ];
439
- $GLOBALS[ $this->parent->args['global_variable'] ] = wp_parse_args( $meta, $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] );
440
- }
441
- }
442
-
443
- public function _loop_end() {
444
- if ( isset( $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] ) ) {
445
- $GLOBALS[ $this->parent->args['global_variable'] ] = $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ];
446
- unset( $GLOBALS[ $this->parent->args['global_variable'] . '-loop' ] );
447
- }
448
- }
449
-
450
- public function _enqueue() {
451
- //$screen = get_current_screen();
452
- //print_r($screen->post_type);
453
- global $pagenow;
454
-
455
- $types = array();
456
- // Enqueue css
457
- foreach ( $this->boxes as $key => $box ) {
458
- if ( empty( $box['sections'] ) ) {
459
- continue;
460
- }
461
- if ( isset( $box['post_types'] ) ) {
462
- $types = array_merge( $box['post_types'], $types );
463
- }
464
- if ( isset( $box['post_types'] ) && ! empty( $box['post_types'] ) ) {
465
- if ( ! is_array( $box['post_types'] ) ) {
466
- $box['post_types'] = array( $box['post_types'] );
467
- $this->boxes[ $key ]['post_types'] = $box['post_types'];
468
- }
469
- }
470
- }
471
-
472
-
473
- if ( $pagenow == "post-new.php" || $pagenow == "post.php" ) {
474
- global $post;
475
-
476
- if ( in_array( $post->post_type, $types ) ) {
477
- $this->parent->transients = $this->parent->transients_check = get_transient( $this->parent->args['opt_name'] . '-transients-metaboxes' );
478
-
479
- if ( isset( $this->parent->transients['notices'] ) ) {
480
- $this->notices = $this->parent->transients['notices'];
481
- $this->parent->transients['last_save_mode'] = "metaboxes";
482
- }
483
-
484
-
485
- delete_transient( $this->parent->args['opt_name'] . '-transients-metaboxes' );
486
- $this->parent->_enqueue();
487
-
488
- do_action( "redux/metaboxes/{$this->parent->args['opt_name']}/enqueue" );
489
-
490
- /**
491
- * Redux metaboxes CSS
492
- * filter 'redux/page/{opt_name}/enqueue/redux-extension-metaboxes-css'
493
- *
494
- * @param string bundled stylesheet src
495
- */
496
-
497
-
498
- wp_enqueue_style(
499
- 'redux-extension-metaboxes-css',
500
- apply_filters( "redux/metaboxes/{$this->parent->args['opt_name']}/enqueue/redux-extension-metaboxes-css", $this->_extension_url . 'extension_metaboxes.css' ),
501
- '',
502
- filemtime( $this->_extension_dir . 'extension_metaboxes.css' ), // todo - version should be based on above post-filter src
503
- 'all'
504
- );
505
-
506
- /**
507
- * Redux metaboxes JS
508
- * filter 'redux/page/{opt_name}/enqueue/redux-extension-metaboxes-js
509
- *
510
- * @param string bundled javscript
511
- */
512
-
513
- wp_enqueue_script(
514
- 'redux-extension-metaboxes-js',
515
- apply_filters( "redux/metaboxes/{$this->parent->args['opt_name']}/enqueue/redux-extension-metaboxes-js", $this->_extension_url . 'extension_metaboxes' . Redux_Functions::isMin() . '.js' ),
516
- array( 'jquery', 'redux-js' ),
517
- self::$version,
518
- 'all'
519
- );
520
- // Values used by the javascript
521
- wp_localize_script(
522
- 'redux-extension-metaboxes-js',
523
- 'reduxMetaboxes',
524
- $this->wp_links
525
- );
526
- }
527
-
528
- }
529
-
530
- } // _enqueue()
531
-
532
- /* Post URLs to IDs function, supports custom post types - borrowed and modified from url_to_postid() in wp-includes/rewrite.php */
533
- // Taken from http://betterwp.net/wordpress-tips/url_to_postid-for-custom-post-types/
534
- // Customized to work with non-rewrite URLs
535
- // Copyright Dovy Paukstys (@dovy) of Redux Framework
536
- function url_to_postid( $url ) {
537
- global $wp_rewrite;
538
-
539
- if ( ! empty( $this->post_id ) ) {
540
- return $this->post_id;
541
- }
542
-
543
- if ( isset( $_GET['post'] ) && ! empty( $_GET['post'] ) && is_numeric( $_GET['post'] ) ) {
544
- return $_GET['post'];
545
- }
546
-
547
- // First, check to see if there is a 'p=N' or 'page_id=N' to match against
548
- if ( preg_match( '#[?&](p|page_id|attachment_id)=(\d+)#', $url, $values ) ) {
549
- $id = absint( $values[2] );
550
- if ( $id ) {
551
- return $id;
552
- }
553
- }
554
-
555
- // Check to see if we are using rewrite rules
556
- if ( isset( $wp_rewrite ) ) {
557
- $rewrite = $wp_rewrite->wp_rewrite_rules();
558
- }
559
-
560
-
561
- // Not using rewrite rules, and 'p=N' and 'page_id=N' methods failed, so we're out of options
562
- if ( empty( $rewrite ) ) {
563
- if ( isset( $_GET ) && ! empty( $_GET ) ) {
564
-
565
- /************************************************************************
566
- * ADDED: Trys checks URL for ?posttype=postname
567
- *************************************************************************/
568
-
569
- // Assign $url to $tempURL just incase. :)
570
- $tempUrl = $url;
571
-
572
- // Get rid of the #anchor
573
- $url_split = explode( '#', $tempUrl );
574
- $tempUrl = $url_split[0];
575
-
576
- // Get rid of URL ?query=string
577
- $url_query = explode( '&', $tempUrl );
578
- $tempUrl = $url_query[0];
579
-
580
- // Get rid of ? mark
581
- $url_query = explode( '?', $tempUrl);
582
-
583
-
584
- if(isset($url_query[1]) && !empty($url_query[1]) && strpos( $url_query[1], '=' )){
585
- $url_query = explode( '=', $url_query[1] );
586
-
587
- if(isset($url_query[0]) && isset($url_query[1])){
588
- $args = array(
589
- 'name' => $url_query[1],
590
- 'post_type' => $url_query[0],
591
- 'showposts' => 1,
592
- );
593
-
594
- if ( $post = get_posts( $args ) ) {
595
- return $post[0]->ID;
596
- }
597
- }
598
- }
599
- //END ADDITION
600
-
601
- //print_r($GLOBALS['wp_post_types']);
602
- //if (isset($GLOBALS['wp_post_types']['acme_product']))
603
- // Add custom rules for non-rewrite URLs
604
- foreach ( $GLOBALS['wp_post_types'] as $key => $value ) {
605
- if ( isset( $_GET[ $key ] ) && ! empty( $_GET[ $key ] ) ) {
606
- $args = array(
607
- 'name' => $_GET[ $key ],
608
- 'post_type' => $key,
609
- 'showposts' => 1,
610
- );
611
- if ( $post = get_posts( $args ) ) {
612
- return $post[0]->ID;
613
- }
614
- }
615
- }
616
- }
617
- }
618
-
619
- // Get rid of the #anchor
620
- $url_split = explode( '#', $url );
621
- $url = $url_split[0];
622
-
623
- // Get rid of URL ?query=string
624
- $url_query = explode( '?', $url );
625
- $url = $url_query[0];
626
-
627
-
628
- // Add 'www.' if it is absent and should be there
629
- if ( false !== strpos( home_url(), '://www.' ) && false === strpos( $url, '://www.' ) ) {
630
- $url = str_replace( '://', '://www.', $url );
631
- }
632
-
633
- // Strip 'www.' if it is present and shouldn't be
634
- if ( false === strpos( home_url(), '://www.' ) ) {
635
- $url = str_replace( '://www.', '://', $url );
636
- }
637
-
638
- // Strip 'index.php/' if we're not using path info permalinks
639
- if ( isset( $wp_rewrite ) && ! $wp_rewrite->using_index_permalinks() ) {
640
- $url = str_replace( 'index.php/', '', $url );
641
- }
642
-
643
- if ( false !== strpos( $url, home_url() ) ) {
644
- // Chop off http://domain.com
645
- $url = str_replace( home_url(), '', $url );
646
- } else {
647
- // Chop off /path/to/blog
648
- $home_path = parse_url( home_url() );
649
- $home_path = isset( $home_path['path'] ) ? $home_path['path'] : '';
650
- $url = str_replace( $home_path, '', $url );
651
- }
652
-
653
- // Trim leading and lagging slashes
654
- $url = trim( $url, '/' );
655
-
656
- $request = $url;
657
- if ( empty( $request ) && ( ! isset( $_GET ) || empty( $_GET ) ) ) {
658
- return get_option( 'page_on_front' );
659
- }
660
-
661
- // Look for matches.
662
- $request_match = $request;
663
-
664
-
665
- foreach ( (array) $rewrite as $match => $query ) {
666
-
667
- // If the requesting file is the anchor of the match, prepend it
668
- // to the path info.
669
- if ( ! empty( $url ) && ( $url != $request ) && ( strpos( $match, $url ) === 0 ) ) {
670
- $request_match = $url . '/' . $request;
671
- }
672
-
673
- if ( preg_match( "!^$match!", $request_match, $matches ) ) {
674
-
675
- // Got a match.
676
- // Trim the query of everything up to the '?'.
677
- $query = preg_replace( "!^.+\?!", '', $query );
678
-
679
- // Substitute the substring matches into the query.
680
- $query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) );
681
-
682
- // Filter out non-public query vars
683
- global $wp;
684
- parse_str( $query, $query_vars );
685
- $query = array();
686
- foreach ( (array) $query_vars as $key => $value ) {
687
- if ( in_array( $key, $wp->public_query_vars ) ) {
688
- $query[ $key ] = $value;
689
- }
690
- }
691
-
692
- /************************************************************************
693
- * ADDED: $GLOBALS['wp_post_types'] doesn't seem to have custom postypes
694
- * Trying below to find posttypes in $rewrite rules
695
- *************************************************************************/
696
-
697
- // PostType Array
698
- $custom_post_type = false;
699
- $post_types = array();
700
- foreach ($rewrite as $key => $value) {
701
- if(preg_match('/post_type=([^&]+)/i', $value, $matched)){
702
- if(isset($matched[1]) && !in_array($matched[1], $post_types)){
703
- $post_types[] = $matched[1];
704
- }
705
- }
706
- }
707
-
708
- foreach ((array) $query_vars as $key => $value) {
709
- if(in_array($key, $post_types)){
710
- $custom_post_type = true;
711
-
712
- $query['post_type'] = $key;
713
- $query['postname'] = $value;
714
- }
715
- }
716
-
717
- // print_r($post_types);
718
-
719
- /************************************************************************
720
- * END ADD
721
- *************************************************************************/
722
-
723
- // Taken from class-wp.php
724
- foreach ( $GLOBALS['wp_post_types'] as $post_type => $t ) {
725
- if ( $t->query_var ) {
726
- $post_type_query_vars[ $t->query_var ] = $post_type;
727
- }
728
- }
729
-
730
- foreach ( $wp->public_query_vars as $wpvar ) {
731
- if ( isset( $wp->extra_query_vars[ $wpvar ] ) ) {
732
- $query[ $wpvar ] = $wp->extra_query_vars[ $wpvar ];
733
- } elseif ( isset( $_POST[ $wpvar ] ) ) {
734
- $query[ $wpvar ] = $_POST[ $wpvar ];
735
- } elseif ( isset( $_GET[ $wpvar ] ) ) {
736
- $query[ $wpvar ] = $_GET[ $wpvar ];
737
- } elseif ( isset( $query_vars[ $wpvar ] ) ) {
738
- $query[ $wpvar ] = $query_vars[ $wpvar ];
739
- }
740
-
741
-
742
- if ( ! empty( $query[ $wpvar ] ) ) {
743
- if ( ! is_array( $query[ $wpvar ] ) ) {
744
- $query[ $wpvar ] = (string) $query[ $wpvar ];
745
- } else {
746
- foreach ( $query[ $wpvar ] as $vkey => $v ) {
747
- if ( ! is_object( $v ) ) {
748
- $query[ $wpvar ][ $vkey ] = (string) $v;
749
- }
750
- }
751
- }
752
-
753
- if ( isset( $post_type_query_vars[ $wpvar ] ) ) {
754
- $query['post_type'] = $post_type_query_vars[ $wpvar ];
755
- $query['name'] = $query[ $wpvar ];
756
- }
757
- }
758
- }
759
- // Do the query
760
- if ( isset( $query['pagename'] ) && ! empty( $query['pagename'] ) ) {
761
- $args = array(
762
- 'name' => $query['pagename'],
763
- 'post_type' => 'page',
764
- 'showposts' => 1,
765
- );
766
- if ( $post = get_posts( $args ) ) {
767
- return $post[0]->ID;
768
- }
769
- }
770
- $query = new WP_Query( $query );
771
-
772
- if ( ! empty( $query->posts ) && $query->is_singular ) {
773
- return $query->post->ID;
774
- } else {
775
- return 0;
776
- }
777
-
778
- }
779
- }
780
-
781
- return 0;
782
- }
783
-
784
- // DEPRECATED
785
- public function _override_values( $options ) {
786
- // Override the global defaults
787
- $options = wp_parse_args( $this->meta[ $this->post_id ], $options );
788
-
789
- $this->parent->options = wp_parse_args( $options, $this->parent->options );
790
-
791
- return $options;
792
-
793
- } // _override_values()
794
-
795
- // DEPRECATED
796
- public function _default_values() {
797
- if ( ! empty( $this->boxes ) && empty( $this->options_defaults ) ) {
798
- foreach ( $this->boxes as $key => $box ) {
799
- if ( empty( $box['sections'] ) ) {
800
- continue;
801
- }
802
- // fill the cache
803
- foreach ( $box['sections'] as $sk => $section ) {
804
- if ( ! isset( $section['id'] ) ) {
805
- if ( ! is_numeric( $sk ) || ! isset( $section['title'] ) ) {
806
- $section['id'] = $sk;
807
- } else {
808
- $section['id'] = sanitize_title( $section['title'], $sk );
809
- }
810
- $this->boxes[ $key ]['sections'][ $sk ] = $section;
811
- }
812
- if ( isset( $section['fields'] ) ) {
813
- foreach ( $section['fields'] as $k => $field ) {
814
- if ( empty( $field['id'] ) ) {
815
- continue;
816
- }
817
- //$this->parent->used_fields[$field['type']] = isset($this->parent->used_fields[$field['type']]) ? $this->parent->used_fields[$field['type']]++ : 1;
818
-
819
- if ( $field['type'] == "section" && $field['indent'] == "true" ) {
820
- $field['class'] = isset( $field['class'] ) ? $field['class'] : '';
821
- $field['class'] .= "redux-section-indent-start";
822
- $this->boxes[ $key ]['sections'][ $sk ]['fields'][ $k ] = $field;
823
- }
824
- // Detect what field types are being used
825
- if ( ! isset( $this->fields[ $field['type'] ][ $field['id'] ] ) ) {
826
- $this->parent->fields[ $field['type'] ][ $field['id'] ] = 1;
827
- } else {
828
- $this->parent->fields[ $field['type'] ] = array( $field['id'] => 1 );
829
- }
830
- if ( isset( $field['default'] ) ) {
831
- $this->options_defaults[ $field['id'] ] = $field['default'];
832
- } elseif ( isset( $field['options'] ) ) {
833
- //$this->options_defaults[$field['id']] = $field['options'];
834
- }
835
-
836
- }
837
- }
838
- }
839
- }
840
- }
841
-
842
-
843
- //$this->options_defaults = apply_filters( 'redux/metabox/'.$this->parent->args['opt_name'].'/defaults', $this->options_defaults );
844
-
845
- if ( empty( $this->meta[ $this->post_id ] ) ) {
846
- $this->meta[ $this->post_id ] = $this->get_meta( $this->post_id );
847
- }
848
-
849
- // Add the defaults to the current meta
850
- //$this->meta[$this->post_id] = wp_parse_args( $this->meta[$this->post_id], $this->parent->options_defaults );
851
-
852
- } // _default_values()
853
-
854
-
855
- public function add_meta_boxes() {
856
- //echo "add_meta_boxes()";
857
- //$this->parent->get_options();
858
- //print_r($this->parent->options);
859
-
860
- if ( empty( $this->boxes ) || ! is_array( $this->boxes ) ) {
861
- return;
862
- }
863
-
864
- foreach ( $this->boxes as $key => $box ) {
865
- if ( empty( $box['sections'] ) ) {
866
- continue;
867
- }
868
-
869
- // Save users from themselves
870
- if ( isset( $box['position'] ) && ! in_array( strtolower( $box['position'] ), array(
871
- 'normal',
872
- 'advanced',
873
- 'side'
874
- ) )
875
- ) {
876
- unset( $box['position'] );
877
- }
878
-
879
- if ( isset( $box['priority'] ) && ! in_array( strtolower( $box['priority'] ), array(
880
- 'high',
881
- 'core',
882
- 'default',
883
- 'low'
884
- ) )
885
- ) {
886
- unset( $box['priority'] );
887
- }
888
-
889
- $defaults = array(
890
- 'id' => $key . '-' . $this->parent->args['opt_name'],
891
- 'post_types' => array( 'page', 'post' ),
892
- 'position' => 'normal',
893
- 'priority' => 'high',
894
- );
895
-
896
- $box = wp_parse_args( $box, $defaults );
897
- if ( isset( $box['post_types'] ) && ! empty( $box['post_types'] ) ) {
898
- foreach ( $box['post_types'] as $posttype ) {
899
- if ( isset( $box['title'] ) ) {
900
- $title = $box['title'];
901
- } else {
902
- if ( isset( $box['sections'] ) && count( $box['sections'] ) == 1 && isset( $box['sections'][0]['fields'] ) && count( $box['sections'][0]['fields'] ) == 1 && isset( $box['sections'][0]['fields'][0]['title'] ) ) {
903
- // If only one field in this box
904
- $title = $box['sections'][0]['fields'][0]['title'];
905
- } else {
906
- $title = ucfirst( $posttype ) . " " . __( 'Options', 'redux-framework' );
907
- }
908
-
909
- }
910
- $args = array(
911
- 'position' => $box['position'],
912
- 'sections' => $box['sections']
913
- );
914
- // Override the parent args on a metabox level
915
- if ( ! isset( $this->orig_args ) || empty( $this->orig_args ) ) {
916
- $this->orig_args = $this->parent->args;
917
- }
918
- if ( isset( $box['args'] ) ) {
919
- $this->parent->args = wp_parse_args( $box['args'], $this->orig_args );
920
- } else if ( $this->parent->args != $this->orig_args ) {
921
- $this->parent->args = $this->orig_args;
922
- }
923
-
924
- add_meta_box( 'redux-' . $this->parent->args['opt_name'] . '-metabox-' . $box['id'], $title, array(
925
- $this,
926
- 'generate_boxes'
927
- ), $posttype, $box['position'], $box['priority'], $args );
928
- }
929
- }
930
- }
931
- } // add_meta_boxes()
932
-
933
- function _field_default( $field_id ) {
934
-
935
- if ( ! isset( $this->parent->options_defaults ) ) {
936
- $this->parent->options_defaults = $this->parent->_default_values();
937
- }
938
-
939
- if ( ! isset( $this->parent->options ) || empty( $this->parent->options ) ) {
940
- $this->parent->get_options();
941
- }
942
-
943
- $this->options = $this->parent->options;
944
-
945
- if ( isset( $this->parent->options[ $field_id['id'] ] ) && isset( $this->parent->options_defaults[ $field_id['id'] ] ) && $this->parent->options[ $field_id['id'] ] != $this->parent->options_defaults[ $field_id['id'] ] ) {
946
- //print_r($this->parent->options[$field_id['id']]);
947
- return $this->parent->options[ $field_id['id'] ];
948
- } else {
949
- if ( empty( $this->options_defaults ) ) {
950
- $this->_default_values(); // fill cache
951
- }
952
-
953
- $data = '';
954
- if ( ! empty( $this->options_defaults ) ) {
955
- $data = isset( $this->options_defaults[ $field_id['id'] ] ) ? $this->options_defaults[ $field_id['id'] ] : '';
956
- }
957
-
958
- if ( empty( $data ) && isset( $this->parent->options_defaults[ $field_id['id'] ] ) ) {
959
- //$data = $this->parent->options_defaults[$field_id['id']];
960
- $data = isset( $this->parent->options_defaults[ $field_id['id'] ] ) ? $this->parent->options_defaults[ $field_id['id'] ] : '';
961
- }
962
-
963
- return $data;
964
- }
965
-
966
- } // _field_default()
967
-
968
- // Function to get and cache the post meta.
969
- function get_meta( $id ) {
970
-
971
- if ( ! isset( $this->meta[ $id ] ) ) {
972
- $this->meta[ $id ] = array();
973
- $oData = get_post_meta( $id );
974
-
975
- if ( ! empty( $oData ) ) {
976
- foreach ( $oData as $key => $value ) {
977
- if ( count( $value ) == 1 ) {
978
- $this->meta[ $id ][ $key ] = maybe_unserialize( $value[0] );
979
- } else {
980
- $new_value = array_map( 'maybe_unserialize', $value );
981
-
982
- if (is_array($new_value)) {
983
- $this->meta[ $id ][ $key ] = $new_value[0];
984
- } else {
985
- $this->meta[ $id ][ $key ] = $new_value;
986
- }
987
- }
988
- }
989
- }
990
-
991
- if ( isset( $this->meta[ $id ][ $this->parent->args['opt_name'] ] ) ) {
992
- $data = maybe_unserialize( $this->meta[ $id ][ $this->parent->args['opt_name'] ] );
993
- foreach ( $data as $key => $value ) {
994
- $this->meta[ $id ][ $key ] = $value;
995
- update_post_meta( $id, $key, $value );
996
- }
997
- unset( $this->meta[ $id ][ $this->parent->args['opt_name'] ] );
998
- delete_post_meta( $id, $this->parent->args['opt_name'] );
999
- }
1000
- }
1001
-
1002
- return $this->meta[ $id ];
1003
- }
1004
-
1005
- function get_values( $thePost, $meta_key = "" ) {
1006
- // Override these values if they differ from the admin panel defaults. ;)
1007
- if ( in_array( $thePost->post_type, $this->post_types ) ) {
1008
- if ( isset( $this->post_type_values[ $thePost->post_type ] ) ) {
1009
- $meta = $this->post_type_fields[ $thePost->post_type ];
1010
- } else {
1011
- $defaults = array();
1012
- foreach ( $this->post_type_fields[ $thePost->post_type ] as $key => $null ) {
1013
- if ( isset( $this->options_defaults[ $key ] ) ) {
1014
- $defaults[ $key ] = $this->options_defaults[ $key ];
1015
- }
1016
- }
1017
- $meta = wp_parse_args( $this->get_meta( $thePost->ID ), $defaults );
1018
- $this->post_type_fields[ $thePost->post_type ] = $meta;
1019
- }
1020
-
1021
-
1022
- if ( ! empty( $meta_key ) ) {
1023
- return $meta[ $meta_key ];
1024
- } else {
1025
- return $meta;
1026
- }
1027
- }
1028
-
1029
- return;
1030
- }
1031
-
1032
- function generate_boxes( $post, $metabox ) {
1033
- global $wpdb;
1034
-
1035
- $sections = $metabox['args']['sections'];
1036
-
1037
- wp_nonce_field( 'redux_metaboxes_meta_nonce', 'redux_metaboxes_meta_nonce' );
1038
-
1039
- wp_dequeue_script( 'json-view-js' );
1040
-
1041
- $sidebar = true;
1042
- if ( $metabox['args']['position'] == "side" || count( $sections ) == 1 || ( isset( $metabox['args']['sidebar'] ) && $metabox['args']['sidebar'] === false ) ) {
1043
- $sidebar = false; // Show the section dividers or not
1044
- }
1045
- //$this->parent->options = wp_parse_args(get_post_meta( $post->ID, $this->parent->args['opt_name'], true ), $this->parent->options);
1046
- //$data = $this->get_meta( $post->ID );
1047
-
1048
- //print_r($data);
1049
- ?>
1050
-
1051
- <div
1052
- class="redux-container<?php echo ( $sidebar ) ? ' redux-has-sections' : ' redux-no-sections'; ?> redux-box-<?php echo $metabox['args']['position']; ?>">
1053
- <div class="redux-notices">
1054
- <?php if ( $sidebar ) : ?>
1055
- <div class="saved_notice admin-notice notice-blue" style="display:none;">
1056
- <strong><?php echo apply_filters( "redux-imported-text-{$this->parent->args['opt_name']}", __( 'Settings Imported!', 'redux-framework' ) ) ?></strong>
1057
- </div>
1058
- <div class="redux-save-warn notice-yellow">
1059
- <strong><?php echo apply_filters( "redux-changed-text-{$this->parent->args['opt_name']}", __( 'Settings have changed, you should save them!', 'redux-framework' ) ) ?></strong>
1060
- </div>
1061
- <?php endif; ?>
1062
- <div class="redux-field-errors notice-red">
1063
- <strong><span></span> <?php echo __( 'error(s) were found!', 'redux-framework' ) ?></strong>
1064
- </div>
1065
- <div class="redux-field-warnings notice-yellow">
1066
- <strong><span></span> <?php echo __( 'warning(s) were found!', 'redux-framework' ) ?>
1067
- </strong></div>
1068
- </div>
1069
- <?php
1070
- echo '<a href="javascript:void(0);" class="expand_options hide" style="display:none;">' . __( 'Expand', 'redux-framework' ) . '</a>';
1071
- if ( $sidebar ) {
1072
- ?>
1073
- <div class="redux-sidebar">
1074
- <ul class="redux-group-menu">
1075
- <?php
1076
- foreach ( $sections as $sKey => $section ) {
1077
- echo $this->parent->section_menu( $sKey, $section, '_box_' . $metabox['id'], $sections );
1078
- }
1079
- ?>
1080
- </ul>
1081
- </div>
1082
- <?php } ?>
1083
-
1084
- <div class="redux-main">
1085
-
1086
- <?php
1087
-
1088
- $updateLocalize = false;
1089
-
1090
- foreach ( $sections as $sKey => $section ) :
1091
-
1092
- if ( isset( $section['fields'] ) && ! empty( $section['fields'] ) ) {
1093
-
1094
- if ( isset( $section['args'] ) ) {
1095
- $this->parent->args = wp_parse_args( $section['args'], $this->orig_args );
1096
- } else if ( $this->parent->args != $this->orig_args ) {
1097
- $this->parent->args = $this->orig_args;
1098
- }
1099
-
1100
- $hide = $sidebar ? "" : ' display-group';
1101
- $section['class'] = isset( $section['class'] ) ? ' ' . $section['class'] : '';
1102
- echo '<div id="' . $sKey . '_box_' . $metabox['id'] . '_section_group' . '" class="redux-group-tab' . $section['class'] . ' redux_metabox_panel' . $hide . '">';
1103
- //}
1104
- if ( isset( $section['title'] ) && ! empty( $section['title'] ) ) {
1105
- //if ( count( $sections ) == 1 && isset( $section[0]['fields'] ) && count( $section[0]['fields'] ) == 1 && isset( $section[0]['fields'][0]['title'] ) ) {
1106
- echo '<h3 class="redux-section-title">' . $section['title'] . '</h3>';
1107
- //}
1108
- }
1109
-
1110
- if ( isset( $section['desc'] ) && ! empty( $section['desc'] ) ) {
1111
- echo '<div class="redux-section-desc">' . $section['desc'] . '</div>';
1112
- }
1113
- echo '<table class="form-table"><tbody>';
1114
- foreach ( $section['fields'] as $fKey => $field ) {
1115
- $field['name'] = $this->parent->args['opt_name'] . '[' . $field['id'] . ']';
1116
- echo '<tr valign="top">';
1117
-
1118
-
1119
- $th = $this->parent->get_header_html( $field );
1120
-
1121
- if ( $sidebar ) {
1122
- if ( ! ( isset( $metabox['args']['sections'] ) && count( $metabox['args']['sections'] ) == 1 && isset( $metabox['args']['sections'][0]['fields'] ) && count( $metabox['args']['sections'][0]['fields'] ) == 1 ) && isset( $field['title'] ) ) {
1123
- echo '<th scope="row">';
1124
- if ( ! empty( $th ) ) {
1125
- echo $th;
1126
- }
1127
- echo '</th>';
1128
- echo '<td>';
1129
- }
1130
- } else {
1131
- //<i style="float:right; " class="elusive el-icon-address-book"></i> //hints for right metaboxes
1132
- echo '<td>' . $th . '';
1133
- }
1134
-
1135
- if ( $field['type'] == "section" && $field['indent'] == "true" ) {
1136
- $field['class'] = isset( $field['class'] ) ? $field['class'] : '';
1137
- $field['class'] .= "redux-section-indent-start";
1138
- //$this->sections[$sk]['fields'][$k] = $field;
1139
- }
1140
-
1141
- //if (!isset($this->parent->options[$field['id']])) {
1142
- // $this->parent->options[$field['id']] = "";
1143
- //}
1144
- if ( ! isset( $this->meta[ $this->post_id ][ $field['id'] ] ) ) {
1145
- $this->meta[ $this->post_id ][ $field['id'] ] = "";
1146
- }
1147
-
1148
- //print_r($this->options_defaults[$field['id']]);s
1149
- //print_r($this->options[$field['id']]);
1150
- //print_r($this->meta[$this->post_id][$field['id']]);
1151
-
1152
- $this->parent->_field_input( $field, $this->meta[ $this->post_id ][ $field['id'] ] );
1153
- echo '</td></tr>';
1154
- }
1155
- echo '</tbody></table>';
1156
- }
1157
- //if ( $sidebar ) {
1158
- echo '</div>';
1159
- //}
1160
- endforeach; ?>
1161
- </div>
1162
- <div class="clear"></div>
1163
- </div>
1164
- <?php
1165
-
1166
- } // generate_boxes()
1167
-
1168
- /**
1169
- * Save meta boxes
1170
- * Runs when a post is saved and does an action which the write panel save scripts can hook into.
1171
- *
1172
- * @access public
1173
- *
1174
- * @param mixed $post_id
1175
- * @param mixed $post
1176
- *
1177
- * @return void
1178
- */
1179
- function meta_boxes_save( $post_id, $post ) {
1180
-
1181
- // Check if our nonce is set.
1182
- if ( ! isset( $_POST['redux_metaboxes_meta_nonce'] ) ) {
1183
- return $post_id;
1184
- }
1185
-
1186
- $meta = $this->get_meta($post_id);
1187
-
1188
- $nonce = $_POST['redux_metaboxes_meta_nonce'];
1189
- // Verify that the nonce is valid.
1190
- // Validate fields (if needed)
1191
- //$plugin_options = $this->_validate_values( $plugin_options, $this->options );
1192
-
1193
- if ( ! wp_verify_nonce( $nonce, 'redux_metaboxes_meta_nonce' ) ) {
1194
- return $post_id;
1195
- }
1196
-
1197
- // If this is an autosave, our form has not been submitted, so we don't want to do anything.
1198
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
1199
- return $post_id;
1200
- }
1201
-
1202
- // Check the user's permissions, even allowing custom capabilities
1203
- $obj = get_post_type_object( $post->post_type );
1204
- if ( ! current_user_can( $obj->cap->edit_post, $post_id ) ) {
1205
- return $post_id;
1206
- }
1207
-
1208
- // Import
1209
- if ( isset( $_POST[ $this->parent->args['opt_name'] ]['import_code'] ) && ! empty( $_POST[ $this->parent->args['opt_name'] ]['import_code'] ) ) {
1210
- $import = json_decode( stripslashes( $_POST[ $this->parent->args['opt_name'] ]['import_code'] ), true );
1211
- unset( $_POST[ $this->parent->args['opt_name'] ]['import_code'] );
1212
- foreach ( $_POST[ $this->parent->args['opt_name'] ] as $key => $value ) {
1213
- if ( ! isset( $import[ $key ] ) ) {
1214
- $import[ $key ] = $value;
1215
- }
1216
- }
1217
- $_POST[ $this->parent->args['opt_name'] ] = $import;
1218
- }
1219
-
1220
- $toSave = array();
1221
- $toCompare = array();
1222
- $toDelete = array();
1223
-
1224
-
1225
- foreach ( $_POST[ $this->parent->args['opt_name'] ] as $key => $value ) {
1226
- // Have to remove the escaping for array comparison
1227
- if ( is_array( $value ) ) {
1228
- foreach ( $value as $k => $v ) {
1229
- if ( ! is_array( $v ) ) {
1230
- $value[ $k ] = stripslashes( $v );
1231
- }
1232
- }
1233
- }
1234
-
1235
- $save = true;
1236
-
1237
- //parent_options
1238
- if ( isset( $this->options_defaults[ $key ] ) && $value == $this->options_defaults[ $key ] ) {
1239
- $save = false;
1240
- }
1241
-
1242
- if ( $save && isset( $this->parent_options[ $key ] ) && $this->parent_options[ $key ] != $value ) {
1243
- $save = false;
1244
- }
1245
-
1246
- if ( $save && ! isset( $this->parent_options[ $key ] ) && isset( $this->parent_defaults[ $key ] ) && $this->parent_defaults[ $key ] == $value ) {
1247
- //$save = false;
1248
- }
1249
-
1250
- if ( $save ) {
1251
- $toSave[ $key ] = $value;
1252
- $toCompare[ $key ] = isset( $this->parent->options[ $key ] ) ? $this->parent->options[ $key ] : "";
1253
- } else {
1254
- $toDelete[ $key ] = $value;
1255
- }
1256
-
1257
- }
1258
-
1259
-
1260
- $validate = $this->parent->_validate_values( $toSave, $toCompare, $this->sections );
1261
-
1262
- // Validate fields (if needed)
1263
- foreach ( $toSave as $key => $value ) {
1264
- if ( isset( $validate[ $key ] ) && $validate[ $key ] != $toSave[ $key ] ) {
1265
- if ( isset( $this->parent->options[ $key ] ) && $validate[ $key ] == $this->parent->options[ $key ] ) {
1266
- unset( $toSave[ $key ] );
1267
- } else {
1268
- $toSave[ $key ] = $validate[ $key ];
1269
- }
1270
- }
1271
- }
1272
-
1273
-
1274
- if ( ! empty( $this->parent->errors ) || ! empty( $this->parent->warnings ) ) {
1275
- $this->parent->transients['notices'] = ( isset( $this->parent->transients['notices'] ) && is_array( $this->parent->transients['notices'] ) ) ? $this->parent->transients['notices'] : array();
1276
- if ( ! isset( $this->parent->transients['notices']['errors'] ) || $this->parent->transients['notices']['errors'] != $this->parent->errors ) {
1277
- $this->parent->transients['notices']['errors'] = $this->parent->errors;
1278
- $updateTransients = true;
1279
- }
1280
- if ( ! isset( $this->parent->transients['notices']['warnings'] ) || $this->parent->transients['notices']['warnings'] != $this->parent->warnings ) {
1281
- $this->parent->transients['notices']['warnings'] = $this->parent->warnings;
1282
- $updateTransients = true;
1283
- }
1284
- if ( isset( $updateTransients ) ) {
1285
- $this->parent->transients['notices']['override'] = 1;
1286
- set_transient( $this->parent->args['opt_name'] . '-transients-metaboxes', $this->parent->transients );
1287
- }
1288
- }
1289
- //exit();
1290
- $check = $this->post_type_fields[ $_POST['post_type'] ];
1291
-
1292
- foreach ( $toSave as $key => $value ) {
1293
- $prev_value = isset( $this->meta[ $post_id ][ $key ] ) ? $this->meta[ $post_id ][ $key ] : '';
1294
- if ( isset( $check[ $key ] ) ) {
1295
- unset( $check[ $key ] );
1296
- }
1297
- update_post_meta( $post_id, $key, $value, $prev_value );
1298
- }
1299
-
1300
- foreach ( $toDelete as $key => $value ) {
1301
- if ( isset( $check[ $key ] ) ) {
1302
- unset( $check[ $key ] );
1303
- }
1304
- $prev_value = isset( $this->meta[ $post_id ][ $key ] ) ? $this->meta[ $post_id ][ $key ] : '';
1305
- delete_post_meta( $post_id, $key, $prev_value );
1306
- }
1307
-
1308
- foreach ( $check as $key => $value ) {
1309
- delete_post_meta( $post_id, $key );
1310
- }
1311
-
1312
- //update_post_meta( $post_id, $this->parent->args['opt_name'], $toSave );
1313
- //print_r($toSave);
1314
- //exit();
1315
- } // meta_boxes_save()
1316
-
1317
-
1318
- /**
1319
- * Some functions, like the term recount, require the visibility to be set prior. Lets save that here.
1320
- *
1321
- * @access public
1322
- *
1323
- * @param mixed $post_id
1324
- *
1325
- * @return void
1326
- */
1327
- function pre_post_update( $post_id ) {
1328
- if ( isset( $_POST['_visibility'] ) ) {
1329
- update_post_meta( $post_id, '_visibility', sanitize_text_field(stripslashes( $_POST['_visibility'] )) );
1330
- }
1331
- if ( isset( $_POST['_stock_status'] ) ) {
1332
- update_post_meta( $post_id, '_stock_status', sanitize_text_field(stripslashes( $_POST['_stock_status'] )) );
1333
- }
1334
- } // pre_post_update()
1335
-
1336
- /**
1337
- * Show any stored error messages.
1338
- *
1339
- * @access public
1340
- * @return void
1341
- */
1342
- function meta_boxes_show_errors() {
1343
- if ( isset( $this->notices['errors'] ) && ! empty( $this->notices['errors'] ) ) {
1344
- echo '<div id="redux_metaboxes_errors" class="error fade">';
1345
- echo '<p><strong><span></span> ' . count( $this->notices['errors'] ) . ' ' . __( 'error(s) were found!', 'redux-framework' ) . '</strong></p>';
1346
- echo '</div>';
1347
- }
1348
- if ( isset( $this->notices['warnings'] ) && ! empty( $this->notices['warnings'] ) ) {
1349
- echo '<div id="redux_metaboxes_warnings" class="error fade" style="border-left-color: #E8E20C;">';
1350
- echo '<p><strong><span></span> ' . count( $this->notices['warnings'] ) . ' ' . __( 'warnings(s) were found!', 'redux-framework' ) . '</strong></p>';
1351
- echo '</div>';
1352
- }
1353
- } // meta_boxes_show_errors()
1354
-
1355
- } // class ReduxFramework_extension_metaboxes
1356
-
1357
- } // if ( !class_exists( 'ReduxFramework_extension_metaboxes' ) )
1358
-
1359
-
1360
- if ( ! function_exists( 'redux_metaboxes_loop_start' ) ) {
1361
- function redux_metaboxes_loop_start( $opt_name, $the_post = array() ) {
1362
- $redux = ReduxFrameworkInstances::get_instance( $opt_name );
1363
- $metaboxes = $redux->extensions['metaboxes'];
1364
- $metaboxes->_loop_start( $the_post );
1365
- }
1366
- }
1367
-
1368
- if ( ! function_exists( 'redux_metaboxes_loop_end' ) ) {
1369
- function redux_metaboxes_loop_end( $opt_name, $the_post = array() ) {
1370
- $redux = ReduxFrameworkInstances::get_instance( $opt_name );
1371
- $metaboxes = $redux->extensions['metaboxes'];
1372
-
1373
- $metaboxes->_loop_end();
1374
- }
1375
- }
1376
-
1377
-
1378
- if ( ! function_exists( 'redux_post_meta' ) ) {
1379
- function redux_post_meta( $opt_name = "", $thePost = array(), $meta_key = "" ) {
1380
- if ( empty( $opt_name ) ) {
1381
- return;
1382
- }
1383
- global $post;
1384
- $redux = ReduxFrameworkInstances::get_instance( $opt_name );
1385
- $metaboxes = $redux->extensions['metaboxes'];
1386
- if ( isset( $thePost ) && is_array( $thePost ) ) {
1387
- $thePost = $post;
1388
- } else if ( is_integer( $thePost ) ) {
1389
- $thePost = get_post( $thePost );
1390
- } else if ( ! is_object( $thePost ) ) {
1391
- $thePost = $post;
1392
- }
1393
-
1394
- return $metaboxes->get_values( $thePost, $meta_key );
1395
-
1396
-
1397
- }
1398
-
1399
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/repeater/extension_repeater.php DELETED
@@ -1,267 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Redux Framework is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 2 of the License, or
7
- * any later version.
8
- * Redux Framework is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- * You should have received a copy of the GNU General Public License
13
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
14
- *
15
- * @package Redux Framework
16
- * @subpackage Repeater
17
- * @subpackage Wordpress
18
- * @author Dovy Paukstys (dovy)
19
- * @author Kevin Provance (kprovance)
20
- * @version 1.0.6
21
- */
22
-
23
- // Exit if accessed directly
24
- if ( ! defined( 'ABSPATH' ) ) {
25
- exit;
26
- }
27
-
28
- // Don't duplicate me!
29
- if ( ! class_exists( 'ReduxFramework_extension_repeater' ) ) {
30
-
31
-
32
- /**
33
- * Main ReduxFramework css_layout extension class
34
- *
35
- * @since 1.0.0
36
- */
37
- class ReduxFramework_extension_repeater {
38
-
39
- public static $version = '1.0.6';
40
-
41
- // Protected vars
42
- /**
43
- * @var ReduxFramework
44
- */
45
- protected $parent;
46
- public $extension_url;
47
- public $extension_dir;
48
- public static $theInstance;
49
- public $field_id = '';
50
- private $class_css = '';
51
-
52
- /**
53
- * Class Constructor. Defines the args for the extions class
54
- *
55
- * @since 1.0.0
56
- * @access public
57
- *
58
- * @param ReduxFramework $parent Parent settings.
59
- *
60
- * @return void
61
- */
62
- public function __construct( $parent ) {
63
-
64
- $redux_ver = ReduxFramework::$_version;
65
-
66
- // Set parent object
67
- $this->parent = $parent;
68
-
69
- // Set extension dir
70
- if ( empty( $this->extension_dir ) ) {
71
- $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
72
- }
73
-
74
- // Set field name
75
- $this->field_name = 'repeater';
76
-
77
- // Set instance
78
- self::$theInstance = $this;
79
-
80
- // Adds the local field
81
- add_filter( 'redux/' . $this->parent->args['opt_name'] . '/field/class/' . $this->field_name, array(
82
- &$this,
83
- 'overload_field_path'
84
- ) );
85
- }
86
-
87
- static public function getInstance() {
88
- return self::$theInstance;
89
- }
90
-
91
- public function TODO_validate_values( $plugin_options, $options, $sections ) {
92
- foreach ( $options['fields'] as $fkey => $field ) {
93
-
94
- if ( isset ( $field['type'] ) && ( $field['type'] == 'checkbox' || $field['type'] == 'checkbox_hide_below' || $field['type'] == 'checkbox_hide_all' ) ) {
95
- if ( ! isset ( $plugin_options[ $field['id'] ] ) ) {
96
- $plugin_options[ $field['id'] ] = 0;
97
- }
98
- }
99
-
100
-
101
- if ( isset( $this->parent->extensions[ $field['type'] ] ) && method_exists( $this->parent->extensions[ $field['type'] ], '_validate_values' ) ) {
102
- $plugin_options = $this->parent->extensions[ $field['type'] ]->_validate_values( $plugin_options, $field, $sections );
103
-
104
- }
105
-
106
- // Default 'not_empty 'flag to false.
107
- $isNotEmpty = false;
108
-
109
- // Make sure 'validate' field is set.
110
- if ( isset ( $field['validate'] ) ) {
111
-
112
- // Make sure 'validate field' is set to 'not_empty' or 'email_not_empty'
113
- //if ( $field['validate'] == 'not_empty' || $field['validate'] == 'email_not_empty' || $field['validate'] == 'numeric_not_empty' ) {
114
- if ( strtolower( substr( $field['validate'], - 9 ) ) == 'not_empty' ) {
115
-
116
- // Set the flag.
117
- $isNotEmpty = true;
118
- }
119
- }
120
-
121
- // Check for empty id value
122
-
123
- if ( ! isset ( $field['id'] ) || ! isset ( $plugin_options[ $field['id'] ] ) || ( isset ( $plugin_options[ $field['id'] ] ) && $plugin_options[ $field['id'] ] == '' ) ) {
124
-
125
- // If we are looking for an empty value, in the case of 'not_empty'
126
- // then we need to keep processing.
127
- if ( ! $isNotEmpty ) {
128
-
129
- // Empty id and not checking for 'not_empty. Bail out...
130
- if ( ! isset( $field['validate_callback'] ) ) {
131
- continue;
132
- }
133
- //continue;
134
- }
135
- }
136
-
137
- // Force validate of custom field types
138
- if ( isset ( $field['type'] ) && ! isset ( $field['validate'] ) && ! isset( $field['validate_callback'] ) ) {
139
- if ( $field['type'] == 'color' || $field['type'] == 'color_gradient' ) {
140
- $field['validate'] = 'color';
141
- } elseif ( $field['type'] == 'date' ) {
142
- $field['validate'] = 'date';
143
- }
144
- }
145
-
146
- if ( isset ( $field['validate'] ) ) {
147
- $validate = 'Redux_Validation_' . $field['validate'];
148
-
149
- if ( ! class_exists( $validate ) ) {
150
- /**
151
- * filter 'redux-validateclass-load'
152
- *
153
- * @deprecated
154
- *
155
- * @param string validation class file path
156
- * @param string $validate validation class name
157
- */
158
- $class_file = apply_filters( "redux-validateclass-load", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $validate ); // REMOVE LATER
159
-
160
- /**
161
- * filter 'redux/validate/{opt_name}/class/{field.validate}'
162
- *
163
- * @param string validation class file path
164
- * @param string $class_file validation class file path
165
- */
166
- $class_file = apply_filters( "redux/validate/{$this->parent->args['opt_name']}/class/{$field['validate']}", self::$_dir . "inc/validation/{$field['validate']}/validation_{$field['validate']}.php", $class_file );
167
-
168
- if ( $class_file ) {
169
- if ( file_exists( $class_file ) ) {
170
- require_once $class_file;
171
- }
172
- }
173
- }
174
-
175
- if ( class_exists( $validate ) ) {
176
-
177
- //!DOVY - DB saving stuff. Is this right?
178
- if ( empty ( $options[ $field['id'] ] ) ) {
179
- $options[ $field['id'] ] = '';
180
- }
181
-
182
- if ( isset ( $plugin_options[ $field['id'] ] ) && is_array( $plugin_options[ $field['id'] ] ) && ! empty ( $plugin_options[ $field['id'] ] ) ) {
183
- foreach ( $plugin_options[ $field['id'] ] as $key => $value ) {
184
- $before = $after = null;
185
- if ( isset ( $plugin_options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) {
186
- if ( is_array( $plugin_options[ $field['id'] ][ $key ] ) ) {
187
- $before = $plugin_options[ $field['id'] ][ $key ];
188
- } else {
189
- $before = trim( $plugin_options[ $field['id'] ][ $key ] );
190
- }
191
- }
192
-
193
- if ( isset ( $options[ $field['id'] ][ $key ] ) && ( ! empty ( $plugin_options[ $field['id'] ][ $key ] ) || $plugin_options[ $field['id'] ][ $key ] == '0' ) ) {
194
- $after = $options[ $field['id'] ][ $key ];
195
- }
196
-
197
- $validation = new $validate ( $this, $field, $before, $after );
198
- if ( ! empty ( $validation->value ) || $validation->value == '0' ) {
199
- $plugin_options[ $field['id'] ][ $key ] = $validation->value;
200
- } else {
201
- unset ( $plugin_options[ $field['id'] ][ $key ] );
202
- }
203
-
204
- if ( isset ( $validation->error ) ) {
205
- $this->parent->errors[] = $validation->error;
206
- }
207
-
208
- if ( isset ( $validation->warning ) ) {
209
- $this->parent->warnings[] = $validation->warning;
210
- }
211
- }
212
- } else {
213
- if ( isset( $plugin_options[ $field['id'] ] ) ) {
214
- if ( is_array( $plugin_options[ $field['id'] ] ) ) {
215
- $pofi = $plugin_options[ $field['id'] ];
216
- } else {
217
- $pofi = trim( $plugin_options[ $field['id'] ] );
218
- }
219
- } else {
220
- $pofi = null;
221
- }
222
-
223
- $validation = new $validate ( $this, $field, $pofi, $options[ $field['id'] ] );
224
- $plugin_options[ $field['id'] ] = $validation->value;
225
-
226
- if ( isset ( $validation->error ) ) {
227
- $this->parent->errors[] = $validation->error;
228
- }
229
-
230
- if ( isset ( $validation->warning ) ) {
231
- $this->parent->warnings[] = $validation->warning;
232
- }
233
- }
234
-
235
- continue;
236
- }
237
- }
238
- if ( isset ( $field['validate_callback'] ) && ( is_callable( $field['validate_callback'] ) || ( is_string( $field['validate_callback'] ) && function_exists( $field['validate_callback'] ) ) ) ) {
239
- $callback = $field['validate_callback'];
240
- unset ( $field['validate_callback'] );
241
-
242
- $plugin_option = isset( $plugin_options[ $options['id'] ] ) ? $plugin_options[ $options['id'] ] : null;
243
- $option = isset( $options[ $options['id'] ] ) ? $options[ $options['id'] ] : null;
244
- $callbackvalues = call_user_func( $callback, $field, $plugin_option, $option );
245
- $plugin_options[ $field['id'] ] = $callbackvalues['value'];
246
-
247
- if ( isset ( $callbackvalues['error'] ) ) {
248
- $this->parent->errors[] = $callbackvalues['error'];
249
- }
250
- // TODO - This warning message is failing. Hmm.
251
- // No it isn't. Problem was in the sample-config - kp
252
- if ( isset ( $callbackvalues['warning'] ) ) {
253
- $this->parent->warnings[] = $callbackvalues['warning'];
254
- }
255
- }
256
- }
257
-
258
- return $plugin_options;
259
- }
260
-
261
- // Forces the use of the embeded field path vs what the core typically would use
262
- public function overload_field_path( $field ) {
263
- return dirname( __FILE__ ) . '/' . $this->field_name . '/field_' . $this->field_name . '.php';
264
- }
265
-
266
- } // class
267
- } // if
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/repeater/repeater/field_repeater.css DELETED
@@ -1 +0,0 @@
1
- .redux-container-repeater{padding:15px 20px;margin-bottom:7px;padding-top:0}.redux-container-repeater h4{margin:5px 0px 0px 0px}.redux-container-repeater h4:first-child{margin-top:0px}.redux-container-repeater .description{margin:5px 0 5px 0px}.redux-container-repeater .redux-repeater-accordion{width:100%}.redux-container-repeater .redux-repeater-accordion .ui-state-focus{outline:none}.redux-container-repeater .redux-repeater-accordion-repeater{margin-bottom:10px}.redux-container-repeater .redux-repeater-accordion-repeater>div{border:1px solid #dfdfdf !important;border-radius:0 !important;margin-top:0px !important;padding:10px}.redux-container-repeater .redux-repeater-accordion-repeater h3.ui-accordion-header{border:1px solid #dfdfdf;cursor:move;font-weight:bold;padding:0 10px;height:40px;line-height:40px;background-color:#f1f1f1;background-image:-ms-linear-gradient(top, #f9f9f9, #ececec);background-image:-moz-linear-gradient(top, #f9f9f9, #ececec);background-image:-o-linear-gradient(top, #f9f9f9, #ececec);background-image:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));background-image:-webkit-linear-gradient(top, #f9f9f9, #ececec);background-image:linear-gradient(top, #f9f9f9, #ececec);overflow:hidden;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-moz-box-shadow:inset 0 1px 0 #fff;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;text-align:center;margin-bottom:0}.redux-container-repeater .redux-repeaters-add{float:right}.redux-container-repeater .redux-repeaters-add:after{clear:both}.redux-container-repeater .redux-repeaters-remove{color:#ef521d !important;float:right}.redux-container-repeater .redux-repeaters-remove:after{clear:both}.redux-container-repeater .redux-repeater-header{font-weight:bold}.redux-container-repeater .redux_repeaters_add_remove{margin-bottom:10px}.redux-container-repeater .redux-field-container{padding:0 0 10px 0}.redux-container-repeater .redux-field-container:last-child{padding-bottom:0}.redux-container-repeater .ui-accordion .ui-accordion-content{padding:1em}.redux-container-repeater .redux-container-sorter{margin-right:0 !important}#poststuff .redux-container-repeater h3{padding:0;cursor:move !important;line-height:40px}
 
inc/extensions/extensions/repeater/repeater/field_repeater.js DELETED
@@ -1,344 +0,0 @@
1
- /*global redux_change, redux*/
2
-
3
- (function ($) {
4
- "use strict";
5
-
6
- redux.field_objects = redux.field_objects || {};
7
- redux.field_objects.repeater = redux.field_objects.repeater || {};
8
-
9
- var reduxObject;
10
-
11
- redux.field_objects.repeater.sort_repeaters = function (selector) {
12
- if (!selector.hasClass('redux-container-repeater')) {
13
- selector = selector.parents('.redux-container-repeater:first');
14
- }
15
-
16
- selector.find('.redux-repeater-accordion-repeater').each(
17
- function (idx) {
18
-
19
- var id = $(this).attr('data-sortid');
20
-
21
- var input = $(this).find(".redux-field .repeater[name*='[" + id + "]']");
22
- input.each(
23
- function () {
24
- $(this).attr('name', $(this).attr('name').replace('[' + id + ']', '[' + idx + ']'));
25
- }
26
- );
27
-
28
- //var input = $( this ).find( "input[name*='[" + id + "]']" );
29
- //input.each(
30
- // function() {
31
- // $( this ).attr( 'name', $( this ).attr( 'name' ).replace( '[' + id + ']', '[' + idx + ']' ) );
32
- // }
33
- //);
34
-
35
- //var select = $( this ).find( "select[name*='[" + id + "]']" );
36
- //select.each(
37
- // function() {
38
- // $( this ).attr( 'name', $( this ).attr( 'name' ).replace( '[' + id + ']', '[' + idx + ']' ) );
39
- // }
40
- //);
41
- //$( this ).attr( 'data-sortid', idx );
42
-
43
- // Fix the accordian header
44
- var header = $(this).find('.ui-accordion-header');
45
- var split = header.attr('id').split('-header-');
46
- header.attr('id', split[0] + '-header-' + idx);
47
- split = header.attr('aria-controls').split('-panel-');
48
- header.attr('aria-controls', split[0] + '-panel-' + idx);
49
-
50
- // Fix the accordian content
51
- var content = $(this).find('.ui-accordion-content');
52
- var split = content.attr('id').split('-panel-');
53
- content.attr('id', split[0] + '-panel-' + idx);
54
- split = content.attr('aria-labelledby').split('-header-');
55
- content.attr('aria-labelledby', split[0] + '-header-' + idx);
56
-
57
- }
58
- );
59
- };
60
-
61
-
62
- redux.field_objects.repeater.init = function (selector) {
63
-
64
- if (!selector) {
65
- selector = $(document).find(".redux-group-tab:visible").find('.redux-container-repeater:visible');
66
- }
67
-
68
- $(selector).each(
69
- function (idx) {
70
-
71
- var el = $(this);
72
-
73
- var parent = el;
74
- if (!el.hasClass('redux-field-container')) {
75
- parent = el.parents('.redux-field-container:first');
76
- }
77
- if (parent.is(":hidden")) { // Skip hidden fields
78
- return;
79
- }
80
- if (parent.hasClass('redux-field-init')) {
81
- parent.removeClass('redux-field-init');
82
- } else {
83
- return;
84
- }
85
-
86
- var parent = el;
87
-
88
- if (!el.hasClass('redux-field-container')) {
89
- parent = el.parents('.redux-field-container:first');
90
- }
91
-
92
- var optName = el.parents('.redux-container').data('opt-name');
93
-
94
- if (optName === undefined) {
95
- reduxObject = redux
96
- } else {
97
- reduxObject = redux.optName;
98
- }
99
-
100
- var gid = parent.attr('data-id');
101
- var blank = el.find('.redux-repeater-accordion-repeater:first-child');
102
-
103
- reduxObject.repeater[gid].blank = blank.clone().wrap('<p>').parent().html();
104
-
105
- if (parent.hasClass('redux-container-repeater')) {
106
- parent.addClass('redux-field-init');
107
- }
108
-
109
- if (parent.hasClass('redux-field-init')) {
110
- parent.removeClass('redux-field-init');
111
- } else {
112
- return;
113
- }
114
-
115
- //if ( el.find( '.slide-title' ).length < 2 ) {
116
- // active = 0;
117
- //}
118
-
119
- var base = el.find('.redux-repeater-accordion');
120
- var panelsClosed = Boolean(base.data('panels-closed'));
121
- var active;
122
-
123
- if (panelsClosed === true) {
124
- active = Boolean(false);
125
- } else {
126
- active = parseInt(0);
127
- }
128
-
129
- var accordian = el.find(".redux-repeater-accordion").accordion(
130
- {
131
- header: "> div > fieldset > h3",
132
- collapsible: true,
133
- active: active,
134
-
135
- beforeActivate: function (event, ui) {
136
- if (typeof reduxRepeaterAccordionBeforeActivate == 'function') {
137
- reduxRepeaterAccordionBeforeActivate($(this), el, event, ui);
138
- }
139
- },
140
- activate: function (event, ui) {
141
- $.redux.initFields();
142
-
143
- if (typeof reduxRepeaterAccordionActivate == 'function') {
144
- reduxRepeaterAccordionActivate($(this), el, event, ui);
145
- }
146
- },
147
- heightStyle: "content",
148
- icons: {
149
- "header": "ui-icon-plus",
150
- "activeHeader": "ui-icon-minus"
151
- }
152
- }
153
- );
154
- if (reduxObject.repeater[gid].sortable == 1) {
155
- accordian.sortable(
156
- {
157
- axis: "y",
158
- handle: "h3",
159
- connectWith: ".redux-repeater-accordion",
160
- placeholder: "ui-state-highlight",
161
- start: function (e, ui) {
162
- ui.placeholder.height(ui.item.height());
163
- ui.placeholder.width(ui.item.width());
164
- },
165
- stop: function (event, ui) {
166
- // IE doesn't register the blur when sorting
167
- // so trigger focusout handlers to remove .ui-state-focus
168
- ui.item.children("h3").triggerHandler("focusout");
169
-
170
- redux.field_objects.repeater.sort_repeaters($(this));
171
-
172
- }
173
- }
174
- );
175
- } else {
176
- accordian.find('h3.ui-accordion-header').css('cursor', 'pointer');
177
- }
178
-
179
- el.find('.redux-repeater-accordion-repeater .bind_title').on(
180
- 'change keyup', function (event) {
181
- var value;
182
-
183
- if ($(event.target).find(':selected').text().length > 0) {
184
- value = $(event.target).find(':selected').text();
185
- } else {
186
- value = $(event.target).val();
187
- }
188
- $(this).closest('.redux-repeater-accordion-repeater').find('.redux-repeater-header').text(value);
189
- }
190
- );
191
-
192
- // Handler to remove the given repeater
193
- el.find('.redux-repeaters-remove').on(
194
- 'click', function () {
195
- redux_change($(this));
196
- var parent = $(this).parents('.redux-container-repeater:first');
197
- var gid = parent.attr('data-id');
198
- reduxObject.repeater[gid].blank = $(this).parents('.redux-repeater-accordion-repeater:first').clone(
199
- true, true
200
- );
201
- $(this).parents('.redux-repeater-accordion-repeater:first').slideUp(
202
- 'medium', function () {
203
- $(this).remove();
204
- redux.field_objects.repeater.sort_repeaters(el);
205
- if (reduxObject.repeater[gid].limit != '') {
206
- var count = parent.find('.redux-repeater-accordion-repeater').length;
207
- if (count < reduxObject.repeater[gid].limit) {
208
- parent.find('.redux-repeaters-add').removeClass('button-disabled');
209
- }
210
- }
211
- parent.find('.redux-repeater-accordion-repeater:last .ui-accordion-header').click();
212
- }
213
- );
214
-
215
- }
216
- );
217
-
218
- var x = el.find('.redux-repeater-accordion-repeater');
219
- if (x.hasClass('close-me')) {
220
- el.find('.redux-repeaters-remove').click();
221
- }
222
-
223
- String.prototype.reduxReplaceAll = function (s1, s2) {
224
- return this.replace(
225
- new RegExp(s1.replace(/[.^$*+?()[{\|]/g, '\\$&'), 'g'),
226
- s2
227
- );
228
- };
229
-
230
-
231
- el.find('.redux-repeaters-add').click(
232
- function () {
233
-
234
- if ($(this).hasClass('button-disabled')) {
235
- return;
236
- }
237
-
238
- var parent = $(this).parent().find('.redux-repeater-accordion:first');
239
- var count = parent.find('.redux-repeater-accordion-repeater').length;
240
-
241
- var gid = parent.attr('data-id'); // Group id
242
- if (reduxObject.repeater[gid].limit != '') {
243
- if (count >= reduxObject.repeater[gid].limit) {
244
- $(this).addClass('button-disabled');
245
- return;
246
- }
247
- }
248
- count++;
249
-
250
- var id = parent.find('.redux-repeater-accordion-repeater').size(); // Index number
251
-
252
- if (parent.find('.redux-repeater-accordion-repeater:last').find('.ui-accordion-header').hasClass('ui-state-active')) {
253
- parent.find('.redux-repeater-accordion-repeater:last').find('.ui-accordion-header').click();
254
- }
255
-
256
- var newSlide = parent.find('.redux-repeater-accordion-repeater:first').clone(true, true);
257
-
258
- var last_id = id - 1;
259
-
260
- if (newSlide.length == 0) {
261
- newSlide = reduxObject.repeater[gid].blank;
262
- }
263
- if (newSlide.attr('data-sortid').length) {
264
- newSlide.attr('data-sortid', id);
265
- }
266
- var title = newSlide.find('input.slide-title');
267
- title.attr('name', title.attr('name').replace('[0]', '[' + id + ']'));
268
- title.attr('data-key', id);
269
- title.val('');
270
-
271
-
272
- if (reduxObject.repeater[gid]) {
273
- reduxObject.repeater[gid].count = el.find('.redux-repeater-header').length;
274
- var html = reduxObject.repeater[gid].html.reduxReplaceAll('99999', id);
275
- $(newSlide).find('.redux-repeater-header').text('');
276
- }
277
-
278
- newSlide.find('.ui-accordion-content').html(html);
279
-
280
-
281
- //var items = {};
282
- //if ( newSlide.find( '.redux-container-editor' ) ) {
283
- // var first_editor_id = $( '.redux-repeater-accordion-repeater:first' ).find( '.redux-container-editor' ).attr( 'data-id' );
284
- // var editor_settings = window.tinyMCEPreInit.mceInit[first_editor_id];
285
- // $.each(
286
- // newSlide.find( '.redux-container-editor' ), function( key, value ) {
287
- // // Grab an editor id
288
- // items.push( $( this ).attr( 'data-id' ) );
289
- // // Grab an editor settings from wp_editor
290
- //
291
- // // Grab a quicktags settings
292
- // var quicktags_setting = QTags.getInstance( 'content' ).settings;
293
- // var quicktags_id = items[items.length - 1];
294
- // quicktags_setting.id = quicktags_id;
295
- // }
296
- // );
297
- //}
298
-
299
- // Append to the accordian
300
- $(parent).append(newSlide);
301
-
302
- // Render tinymce !
303
- //if ( newSlide.find( '.redux-container-editor' ) ) {
304
- // jQuery.each(
305
- // items, function( i, new_editor_id ) {
306
- // tinymce.createEditor( new_editor_id, editor_settings ).render();
307
- // quicktags( new_editor_id );
308
- // QTags._buttonsInit();
309
- // }
310
- // );
311
- //}
312
-
313
- // Reorder
314
- redux.field_objects.repeater.sort_repeaters(newSlide);
315
- // Refresh the JS object
316
- var newSlide = $(this).parent().find('.redux-repeater-accordion:first');
317
- newSlide.find('.redux-repeater-accordion-repeater:last .ui-accordion-header').click();
318
- newSlide.find('.redux-repeater-accordion-repeater:last .bind_title').on(
319
- 'change keyup', function (event) {
320
- var value;
321
-
322
- if ($(event.target).find(':selected').text().length > 0) {
323
- value = $(event.target).find(':selected').text();
324
- } else {
325
- value = $(event.target).val()
326
- }
327
- $(this).closest('.redux-repeater-accordion-repeater').find('.redux-repeater-header').text(value);
328
- }
329
- );
330
- if (reduxObject.repeater[gid].limit > 0 && count >= reduxObject.repeater[gid].limit) {
331
- $(this).addClass('button-disabled');
332
- }
333
-
334
- if (panelsClosed === true) {
335
- if (count >= 2) {
336
- el.find(".redux-repeater-accordion").accordion('option', {active: false})
337
- }
338
- }
339
- }
340
- );
341
- }
342
- );
343
- };
344
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/repeater/repeater/field_repeater.min.js DELETED
@@ -1 +0,0 @@
1
- !function(e){"use strict";var r;redux.field_objects=redux.field_objects||{},redux.field_objects.repeater=redux.field_objects.repeater||{},redux.field_objects.repeater.sort_repeaters=function(r){r.hasClass("redux-container-repeater")||(r=r.parents(".redux-container-repeater:first")),r.find(".redux-repeater-accordion-repeater").each(function(r){var t=e(this).attr("data-sortid");e(this).find(".redux-field .repeater[name*='["+t+"]']").each(function(){e(this).attr("name",e(this).attr("name").replace("["+t+"]","["+r+"]"))});var a=e(this).find(".ui-accordion-header"),i=a.attr("id").split("-header-");a.attr("id",i[0]+"-header-"+r),i=a.attr("aria-controls").split("-panel-"),a.attr("aria-controls",i[0]+"-panel-"+r);var d=e(this).find(".ui-accordion-content");i=d.attr("id").split("-panel-");d.attr("id",i[0]+"-panel-"+r),i=d.attr("aria-labelledby").split("-header-"),d.attr("aria-labelledby",i[0]+"-header-"+r)})},redux.field_objects.repeater.init=function(t){t||(t=e(document).find(".redux-group-tab:visible").find(".redux-container-repeater:visible")),e(t).each(function(t){var a=e(this),i=a;if(a.hasClass("redux-field-container")||(i=a.parents(".redux-field-container:first")),!i.is(":hidden")&&i.hasClass("redux-field-init")){i.removeClass("redux-field-init");i=a;a.hasClass("redux-field-container")||(i=a.parents(".redux-field-container:first"));var d=a.parents(".redux-container").data("opt-name");r=void 0===d?redux:redux.optName;var n=i.attr("data-id"),c=a.find(".redux-repeater-accordion-repeater:first-child");if(r.repeater[n].blank=c.clone().wrap("<p>").parent().html(),i.hasClass("redux-container-repeater")&&i.addClass("redux-field-init"),i.hasClass("redux-field-init")){i.removeClass("redux-field-init");var o,s=a.find(".redux-repeater-accordion"),l=Boolean(s.data("panels-closed"));o=!0===l?Boolean(!1):parseInt(0);var p=a.find(".redux-repeater-accordion").accordion({header:"> div > fieldset > h3",collapsible:!0,active:o,beforeActivate:function(r,t){"function"==typeof reduxRepeaterAccordionBeforeActivate&&reduxRepeaterAccordionBeforeActivate(e(this),a,r,t)},activate:function(r,t){e.redux.initFields(),"function"==typeof reduxRepeaterAccordionActivate&&reduxRepeaterAccordionActivate(e(this),a,r,t)},heightStyle:"content",icons:{header:"ui-icon-plus",activeHeader:"ui-icon-minus"}});1==r.repeater[n].sortable?p.sortable({axis:"y",handle:"h3",connectWith:".redux-repeater-accordion",placeholder:"ui-state-highlight",start:function(e,r){r.placeholder.height(r.item.height()),r.placeholder.width(r.item.width())},stop:function(r,t){t.item.children("h3").triggerHandler("focusout"),redux.field_objects.repeater.sort_repeaters(e(this))}}):p.find("h3.ui-accordion-header").css("cursor","pointer"),a.find(".redux-repeater-accordion-repeater .bind_title").on("change keyup",function(r){var t;t=e(r.target).find(":selected").text().length>0?e(r.target).find(":selected").text():e(r.target).val(),e(this).closest(".redux-repeater-accordion-repeater").find(".redux-repeater-header").text(t)}),a.find(".redux-repeaters-remove").live("click",function(){redux_change(e(this));var t=e(this).parents(".redux-container-repeater:first"),i=t.attr("data-id");r.repeater[i].blank=e(this).parents(".redux-repeater-accordion-repeater:first").clone(!0,!0),e(this).parents(".redux-repeater-accordion-repeater:first").slideUp("medium",function(){(e(this).remove(),redux.field_objects.repeater.sort_repeaters(a),""!=r.repeater[i].limit)&&(t.find(".redux-repeater-accordion-repeater").length<r.repeater[i].limit&&t.find(".redux-repeaters-add").removeClass("button-disabled"));t.find(".redux-repeater-accordion-repeater:last .ui-accordion-header").click()})}),a.find(".redux-repeater-accordion-repeater").hasClass("close-me")&&a.find(".redux-repeaters-remove").click(),String.prototype.reduxReplaceAll=function(e,r){return this.replace(new RegExp(e.replace(/[.^$*+?()[{\|]/g,"\\$&"),"g"),r)},a.find(".redux-repeaters-add").click(function(){if(!e(this).hasClass("button-disabled")){var t=e(this).parent().find(".redux-repeater-accordion:first"),i=t.find(".redux-repeater-accordion-repeater").length,d=t.attr("data-id");if(""!=r.repeater[d].limit&&i>=r.repeater[d].limit)e(this).addClass("button-disabled");else{i++;var n=t.find(".redux-repeater-accordion-repeater").size();t.find(".redux-repeater-accordion-repeater:last").find(".ui-accordion-header").hasClass("ui-state-active")&&t.find(".redux-repeater-accordion-repeater:last").find(".ui-accordion-header").click();0==(c=t.find(".redux-repeater-accordion-repeater:first").clone(!0,!0)).length&&(c=r.repeater[d].blank),c.attr("data-sortid").length&&c.attr("data-sortid",n);var c,o=c.find("input.slide-title");if(o.attr("name",o.attr("name").replace("[0]","["+n+"]")),o.attr("data-key",n),o.val(""),r.repeater[d]){r.repeater[d].count=a.find(".redux-repeater-header").length;var s=r.repeater[d].html.reduxReplaceAll("99999",n);e(c).find(".redux-repeater-header").text("")}c.find(".ui-accordion-content").html(s),e(t).append(c),redux.field_objects.repeater.sort_repeaters(c),(c=e(this).parent().find(".redux-repeater-accordion:first")).find(".redux-repeater-accordion-repeater:last .ui-accordion-header").click(),c.find(".redux-repeater-accordion-repeater:last .bind_title").on("change keyup",function(r){var t;t=e(r.target).find(":selected").text().length>0?e(r.target).find(":selected").text():e(r.target).val(),e(this).closest(".redux-repeater-accordion-repeater").find(".redux-repeater-header").text(t)}),r.repeater[d].limit>0&&i>=r.repeater[d].limit&&e(this).addClass("button-disabled"),!0===l&&i>=2&&a.find(".redux-repeater-accordion").accordion("option",{active:!1})}}})}}})}}(jQuery);
 
inc/extensions/extensions/repeater/repeater/field_repeater.php DELETED
@@ -1,451 +0,0 @@
1
- <?php
2
- /**
3
- * Redux Framework is free software: you can redistribute it and/or modify
4
- * it under the terms of the GNU General Public License as published by
5
- * the Free Software Foundation, either version 2 of the License, or
6
- * any later version.
7
- * Redux Framework is distributed in the hope that it will be useful,
8
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
- * GNU General Public License for more details.
11
- * You should have received a copy of the GNU General Public License
12
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
13
- *
14
- * @package Redux Framework
15
- * @subpackage Repeater
16
- * @author Dovy Paukstys (dovy)
17
- * @author Kevin Provance (kprovance)
18
- */
19
-
20
- // Exit if accessed directly
21
- if ( ! defined( 'ABSPATH' ) ) {
22
- exit;
23
- }
24
-
25
- // Don't duplicate me!
26
- if ( ! class_exists( 'ReduxFramework_repeater' ) ) {
27
-
28
- /**
29
- * Main ReduxFramework_css_layout class
30
- *
31
- * @since 1.0.0
32
- */
33
- class ReduxFramework_repeater {
34
-
35
- /**
36
- * Class Constructor. Defines the args for the extions class
37
- *
38
- * @since 1.0.0
39
- * @access public
40
- *
41
- * @param array $field Field sections.
42
- * @param array $value Values.
43
- * @param array $parent Parent object.
44
- *
45
- * @return void
46
- */
47
- public function __construct( $field = array(), $value = '', $parent ) {
48
-
49
- // Set required variables
50
- $this->parent = $parent;
51
- $this->field = $field;
52
- $this->value = $value;
53
- $this->repeater_values = "";
54
- $this->args = $parent->args;
55
-
56
- if ( ! isset( $this->field['bind_title'] ) && ! empty( $this->field['fields'] ) ) {
57
- $this->field['bind_title'] = $this->field['fields'][0]['id'];
58
- }
59
-
60
- // Set extension dir & url
61
- if ( empty( $this->extension_dir ) ) {
62
- $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
63
- $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) );
64
- }
65
-
66
-
67
- }
68
-
69
- /**
70
- * Field Render Function.
71
- * Takes the vars and outputs the HTML for the field in the settings
72
- *
73
- * @since 1.0.0
74
- * @access public
75
- * @return void
76
- */
77
- public function render() {
78
-
79
- if ( ! isset( $this->field['item_name'] ) ) {
80
- $this->field['item_name'] = "";
81
- }
82
-
83
- if ( ! isset( $this->field['limit'] ) ) {
84
- $this->field['limit'] = 10;
85
- }
86
-
87
- if ( isset( $this->field['group_values'] ) && $this->field['group_values'] ) {
88
- $this->repeater_values = '[' . $this->field['id'] . ']';
89
- }
90
-
91
- $this->field['init_empty'] = isset( $this->field['init_empty'] ) ? $this->field['init_empty'] : false;
92
- $this->field['panels_closed'] = isset( $this->field['panels_closed'] ) ? $this->field['panels_closed'] : false;
93
-
94
- if ( $this->field['init_empty'] == false ) {
95
- $title = '';
96
- if ( empty( $this->value ) || ! is_array( $this->value ) ) {
97
- $this->value = array(
98
- 'redux_repeater_data' => array(
99
- array(
100
- 'title' => $title
101
- )
102
- )
103
- );
104
- }
105
- }
106
-
107
- if ( isset( $this->field['subfields'] ) && empty( $this->field['fields'] ) ) {
108
- $this->field['fields'] = $this->field['subfields'];
109
- unset( $this->field['subfields'] );
110
- }
111
-
112
- echo '<div class="redux-repeater-accordion" data-id="' . $this->field['id'] . '" data-panels-closed="' . $this->field['panels_closed'] . '">';
113
-
114
- $x = 0;
115
-
116
-
117
- if ( isset ( $this->value['redux_repeater_data'] ) && is_array( $this->value['redux_repeater_data'] ) && ! empty ( $this->value['redux_repeater_data'] ) ) {
118
-
119
- $repeaters = $this->value['redux_repeater_data'];
120
- if ( $this->field['bind_title'] == "" ) {
121
- $keys = array_keys( min( $repeaters ) );
122
- $this->field['bind_title'] = $keys[0];
123
- }
124
- foreach ( $repeaters as $repeater ) {
125
- if ( empty ( $repeater ) ) {
126
- continue;
127
- }
128
-
129
- echo '<div class="redux-repeater-accordion-repeater" data-sortid="' . $x . '">';
130
- echo '<table style="margin-top: 0;" class="redux-repeater-accordion redux-repeater form-table no-border">';
131
- echo '<fieldset class="redux-field " data-id="' . $this->field['id'] . '">';
132
-
133
- if ( isset( $this->field['bind_title'] ) ) {
134
-
135
- foreach ( $this->field['fields'] as $field ) {
136
- if ( $field['id'] == $this->field['bind_title'] ) {
137
- $default = '';
138
- if ( isset( $field['default'] ) ) {
139
- $default = $field['default'];
140
- } elseif ( isset( $field['options'] ) && ( $field['type'] != "ace_editor" ) ) {
141
- // Sorter data filter
142
- if ( $field['type'] == "sorter" && isset( $field['data'] ) && ! empty( $field['data'] ) && is_array( $field['data'] ) ) {
143
- if ( ! isset( $field['args'] ) ) {
144
- $field['args'] = array();
145
- }
146
- foreach ( $field['data'] as $key => $data ) {
147
- if ( ! isset( $field['args'][ $key ] ) ) {
148
- $field['args'][ $key ] = array();
149
- }
150
- $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
151
- }
152
- }
153
- $default = $field['options'];
154
- }
155
-
156
- if ( ! empty( $this->repeater_values ) ) {
157
- $repeater['title'] = ! isset( $this->parent->options[ $this->field['id'] ][ $field['id'] ][ $x ] ) ? $default : $this->parent->options[ $this->field['id'] ][ $field['id'] ][ $x ];
158
- } else {
159
- $repeater['title'] = ! isset( $this->parent->options[ $field['id'] ][ $x ] ) ? $default : $this->parent->options[ $field['id'] ][ $x ];
160
- }
161
- if ( isset( $field['options'] ) && is_array( $field['options'] ) && ! empty( $field['options'] ) ) {
162
- if ( isset( $field['options'][ $repeater['title'] ] ) ) {
163
- $repeater['title'] = $field['options'][ $repeater['title'] ];
164
- }
165
- }
166
- }
167
- }
168
- }
169
-
170
- if ( is_array( $repeater['title'] ) ) {
171
- $repeater['title'] = "Title";
172
- }
173
- echo '<input type="hidden" name="' . $this->parent->args['opt_name'] . '[' . $this->field['id'] . '][redux_repeater_data][' . $x . '][title]" value="' . esc_attr( $repeater['title'] ) . '" class="regular-text slide-title" data-key="' . $x . '" />';
174
-
175
-
176
- echo '<h3><span class="redux-repeater-header">' . $repeater['title'] . ' </span></h3>';
177
-
178
- echo '<div>';
179
-
180
- foreach ( $this->field['fields'] as $field ) {
181
- if ( ! isset( $field['class'] ) ) {
182
- $field['class'] = "";
183
- }
184
- if ( isset( $this->field['bind_title'] ) && $field['id'] == $this->field['bind_title'] ) {
185
- if ( ! isset( $field['class'] ) || ( isset( $field['title'] ) && empty( $field['title'] ) ) ) {
186
- $field['class'] .= " bind_title";
187
- } else {
188
- $field['class'] .= " bind_title";
189
- }
190
- }
191
- $this->output_field( $field, $x );
192
- }
193
- if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) {
194
- echo '<a href="javascript:void(0);" class="button deletion redux-repeaters-remove">' . __( 'Delete', 'req-core' ) . ' ' . $this->field['item_name'] . '</a>';
195
- }
196
-
197
- echo '</div>';
198
- echo '</fieldset>';
199
- echo '</table>';
200
- echo '</div>';
201
-
202
- $x ++;
203
- }
204
- }
205
-
206
- if ( $x == 0 || ( isset( $this->field['static'] ) && ( $x - 1 ) < $this->field['static'] ) ) {
207
-
208
- if ( isset( $this->field['static'] ) && $x < $this->field['static'] ) {
209
- $loop = $this->field['static'] - $x;
210
- } else {
211
- $loop = 1;
212
- }
213
-
214
- $class = '';
215
- if ( $x == 0 && $this->field['init_empty'] == true ) {
216
- $class = 'close-me';
217
- }
218
-
219
- while ( $loop > 0 ) {
220
- echo '<div class="redux-repeater-accordion-repeater ' . $class . '">';
221
- echo '<table style="margin-top: 0;" class="redux-repeater-accordion redux-repeater form-table no-border">';
222
- echo '<fieldset class="redux-field" data-id="' . $this->field['id'] . '">';
223
- if ( ! isset( $this->value['redux_repeater_data'][ $x ]['title'] ) ) {
224
- $this->value['redux_repeater_data'][ $x ]['title'] = "";
225
- }
226
- echo '<input type="hidden" name="' . $this->parent->args['opt_name'] . '[' . $this->field['id'] . '][redux_repeater_data][' . $x . '][title]" value="" class="regular-text slide-title" />';
227
-
228
- echo '<h3><span class="redux-repeater-header"> </span></h3>';
229
- echo '<div>';
230
-
231
- foreach ( $this->field['fields'] as $field ) {
232
- if ( isset( $this->field['bind_title'] ) && $field['id'] == $this->field['bind_title'] ) {
233
- if ( ! isset( $field['class'] ) || ( isset( $field['title'] ) && empty( $field['title'] ) ) ) {
234
- $field['class'] = "bind_title";
235
- } else {
236
- $field['class'] .= " bind_title";
237
- }
238
- }
239
- $this->output_field( $field, $x );
240
- }
241
- if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) {
242
- echo '<a href="javascript:void(0);" class="button deletion redux-repeaters-remove">' . __( 'Delete', 'req-core' ) . ' ' . $this->field['item_name'] . '</a>';
243
- }
244
- echo '</div>';
245
- echo '</fieldset>';
246
- echo '</table>';
247
- echo '</div>';
248
-
249
- $x ++;
250
- $loop --;
251
- }
252
- //}
253
- }
254
-
255
- echo '</div>';
256
- if ( ! isset( $this->field['static'] ) && empty( $this->field['static'] ) ) {
257
- $disabled = "";
258
- if ( isset( $this->field['limit'] ) && is_integer( $this->field['limit'] ) ) {
259
- if ( $x >= $this->field['limit'] ) {
260
- $disabled = ' button-disabled';
261
- }
262
- }
263
-
264
- echo '<a href="javascript:void(0);" class="button redux-repeaters-add button-primary' . $disabled . '" rel-id="' . $this->field['id'] . '-ul" rel-name="' . $this->parent->args['opt_name'] . $this->repeater_values . '[title][]">' . __( 'Add', 'req-core' ) . ' ' . $this->field['item_name'] . '</a><br/>';
265
- }
266
-
267
- }
268
-
269
- /**
270
- * Enqueue Function.
271
- * If this field requires any scripts, or css define this function and register/enqueue the scripts/css
272
- *
273
- * @since 1.0.0
274
- * @access public
275
- * @return void
276
- */
277
- public function enqueue() {
278
-
279
- $extension = ReduxFramework_extension_repeater::getInstance();
280
-
281
- // Set up min files for dev_mode = false.
282
- $min = Redux_Functions::isMin();
283
-
284
- wp_enqueue_script(
285
- 'redux-field-repeater-js',
286
- apply_filters( "redux/repeater/{$this->parent->args['opt_name']}/enqueue/redux-field-repeater-js", $this->extension_url . 'field_repeater' . $min . '.js' ),
287
- array(
288
- 'jquery',
289
- 'jquery-ui-core',
290
- 'jquery-ui-accordion',
291
- 'jquery-ui-sortable',
292
- 'wp-color-picker',
293
- 'redux-js'
294
- ),
295
- time(),
296
- true
297
- );
298
-
299
-
300
- wp_enqueue_style(
301
- 'redux-field-repeater-css',
302
- apply_filters( "redux/repeater/{$this->parent->args['opt_name']}/enqueue/redux-field-repeater-css", $this->extension_url . 'field_repeater.css' ),
303
- array(),
304
- time(),
305
- 'all'
306
- );
307
- }
308
-
309
- public function output_field( $field, $x ) {
310
-
311
- //$this->parent->check_dependencies($field);
312
- //we will enqueue all CSS/JS for sub fields if it wasn't enqueued
313
- $this->enqueue_dependencies( $field['type'] );
314
-
315
- //echo '<tr><td>';
316
-
317
- if ( isset( $field['class'] ) ) {
318
- $field['class'] .= " repeater";
319
- } else {
320
- $field['class'] = " repeater";
321
- }
322
-
323
- if ( ! empty( $field['title'] ) ) {
324
- echo '<h4>' . $field['title'] . '</h4>';
325
- }
326
-
327
- if ( ! empty( $field['subtitle'] ) ) {
328
- echo '<span class="description">' . $field['subtitle'] . '</span>';
329
- }
330
-
331
- $origFieldID = $field['id'];
332
-
333
- $field['id'] = $field['id'] . '-' . $x;
334
- $field["name"] = $this->parent->args['opt_name'] . $this->repeater_values . '[' . $origFieldID . ']';
335
- $field['name_suffix'] = "[" . $x . "]";
336
-
337
- if ( isset( $field['default'] ) ) {
338
- $default = $field['default'];
339
- } elseif ( isset( $field['options'] ) && ( $field['type'] != "ace_editor" ) ) {
340
- // Sorter data filter
341
- if ( $field['type'] == "sorter" && isset( $field['data'] ) && ! empty( $field['data'] ) && is_array( $field['data'] ) ) {
342
- if ( ! isset( $field['args'] ) ) {
343
- $field['args'] = array();
344
- }
345
- foreach ( $field['data'] as $key => $data ) {
346
- if ( ! isset( $field['args'][ $key ] ) ) {
347
- $field['args'][ $key ] = array();
348
- }
349
- $field['options'][ $key ] = $this->get_wordpress_data( $data, $field['args'][ $key ] );
350
- }
351
- }
352
- $default = $field['options'];
353
- }
354
-
355
- $default = isset( $field['default'] ) ? $field['default'] : '';
356
-
357
- if ( ! empty( $this->repeater_values ) ) {
358
- $value = ! isset( $this->parent->options[ $this->field['id'] ][ $origFieldID ][ $x ] ) ? $default : $this->parent->options[ $this->field['id'] ][ $origFieldID ][ $x ];
359
- } else {
360
- $value = ! isset( $this->parent->options[ $origFieldID ][ $x ] ) ? $default : $this->parent->options[ $origFieldID ][ $x ];
361
- }
362
-
363
- ob_start();
364
- $this->parent->_field_input( $field, $value );
365
-
366
- $content = ob_get_contents();
367
- //
368
- //if ( ( $field['type'] === "text" ) && ( $field_is_title ) ) {
369
- // $content = str_replace( '>', 'data-title="true" />', $content );
370
- // $field_is_title = false;
371
- //}
372
-
373
- $_field = apply_filters( 'redux-support-repeater', $content, $field, 0 );
374
- ob_end_clean();
375
- echo $_field;
376
-
377
- }
378
-
379
- /**
380
- * Functions to pass data from the PHP to the JS at render time.
381
- *
382
- * @return array Params to be saved as a javascript object accessable to the UI.
383
- * @since Redux_Framework 3.1.5
384
- */
385
- function localize( $field, $value = "" ) {
386
-
387
-
388
- if ( isset( $field['subfields'] ) && empty( $field['fields'] ) ) {
389
- $field['fields'] = $field['subfields'];
390
- unset( $field['subfields'] );
391
- }
392
-
393
- if ( isset( $field['group_values'] ) && $field['group_values'] ) {
394
- $this->repeater_values = '[' . $field['id'] . ']';
395
- }
396
-
397
- $var = "";
398
- if ( isset( $field['fields'] ) && ! empty( $field['fields'] ) ) {
399
- ob_start();
400
- foreach ( $field['fields'] as $f ) {
401
- if ( isset( $this->field['bind_title'] ) && $f['id'] == $this->field['bind_title'] ) {
402
- if ( ! isset( $f['class'] ) || ( isset( $f['title'] ) && empty( $f['title'] ) ) ) {
403
- $f['class'] = "bind_title";
404
- } else {
405
- $f['class'] .= " bind_title";
406
- }
407
- }
408
- $this->output_field( $f, 99999 );
409
- }
410
- $var = ob_get_contents();
411
-
412
- $var = array(
413
- 'html' => $var . '<a href="javascript:void(0);" class="button deletion redux-repeaters-remove">Delete </a>',
414
- 'count' => count( $value ),
415
- 'sortable' => true,
416
- 'limit' => '',
417
- 'name' => $this->parent->args['opt_name'] . '[' . $field['id'] . '][0]',
418
- );
419
-
420
- if ( isset( $field['sortable'] ) && is_bool( $this->field['sortable'] ) ) {
421
- $var['sortable'] = $field['sortable'];
422
- }
423
- if ( isset( $field['limit'] ) && is_integer( $field['limit'] ) ) {
424
- $var['limit'] = $field['limit'];
425
- }
426
-
427
- ob_end_clean();
428
- }
429
-
430
- return $var;
431
- }
432
-
433
- private function enqueue_dependencies( $field_type ) {
434
- $field_class = 'ReduxFramework_' . $field_type;
435
-
436
- if ( ! class_exists( $field_class ) ) {
437
- $class_file = apply_filters( 'redux-typeclass-load', ReduxFramework::$_dir . 'inc/fields/' . $field_type . '/field_' . $field_type . '.php', $field_class );
438
-
439
- if ( file_exists( $class_file ) ) {
440
- /** @noinspection PhpIncludeInspection */
441
- require_once( $class_file );
442
- }
443
- }
444
-
445
- if ( class_exists( $field_class ) && method_exists( $field_class, 'enqueue' ) ) {
446
- $enqueue = new $field_class( '', '', $this );
447
- $enqueue->enqueue();
448
- }
449
- }
450
- }
451
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/repeater/repeater/field_repeater.scss DELETED
@@ -1,97 +0,0 @@
1
- .redux-container-repeater {
2
- padding: 15px 20px;
3
- margin-bottom: 7px;
4
- padding-top: 0;
5
-
6
- h4 {
7
- margin: 5px 0px 0px 0px;
8
- &:first-child {
9
- margin-top: 0px;
10
- }
11
- }
12
-
13
- .description {
14
- margin: 5px 0 5px 0px;
15
- }
16
-
17
- .redux-repeater-accordion {
18
- width: 100%;
19
- }
20
-
21
- .redux-repeater-accordion .ui-state-focus {
22
- outline: none;
23
- }
24
-
25
- .redux-repeater-accordion-repeater {
26
- margin-bottom: 10px;
27
- }
28
-
29
- .redux-repeater-accordion-repeater > div {
30
- border: 1px solid #dfdfdf !important;
31
- border-radius: 0 !important;
32
- margin-top: 0px !important;
33
- padding: 10px;
34
- }
35
-
36
- .redux-repeater-accordion-repeater h3.ui-accordion-header {
37
- border: 1px solid #dfdfdf;
38
- cursor: move;
39
- font-weight: bold;
40
- padding: 0 10px;
41
- height: 40px;
42
- line-height: 40px;
43
- background-color: #f1f1f1;
44
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
45
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
46
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
47
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
48
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
49
- background-image: linear-gradient(top, #f9f9f9, #ececec);
50
- overflow: hidden;
51
- -webkit-border-radius: 3px;
52
- -moz-border-radius: 3px;
53
- border-radius: 3px;
54
- -moz-box-shadow: inset 0 1px 0 #fff;
55
- -webkit-box-shadow: inset 0 1px 0 #fff;
56
- box-shadow: inset 0 1px 0 #fff;
57
- text-align: center;
58
- margin-bottom: 0;
59
- }
60
- .redux-repeaters-add {
61
- float: right;
62
- &:after {
63
- clear: both;
64
- }
65
- }
66
- .redux-repeaters-remove {
67
- color: #ef521d !important;
68
- float: right;
69
- &:after {
70
- clear: both;
71
- }
72
- }
73
- .redux-repeater-header {
74
- font-weight: bold;
75
- }
76
- .redux_repeaters_add_remove {
77
- margin-bottom: 10px;
78
- }
79
- .redux-field-container {
80
- padding: 0 0 10px 0;
81
- }
82
- .redux-field-container:last-child {
83
- padding-bottom: 0;
84
- }
85
- .ui-accordion .ui-accordion-content {
86
- padding: 1em;
87
- }
88
- .redux-container-sorter {
89
- margin-right: 0 !important;
90
- }
91
- }
92
-
93
- #poststuff .redux-container-repeater h3 {
94
- padding: 0;
95
- cursor: move !important;
96
- line-height: 40px;
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/widget_areas/assets/css/sidebars.css DELETED
@@ -1,50 +0,0 @@
1
- .redux-widget_area-delete{
2
- position: absolute;
3
- right: 50px;
4
- margin-top: -28px;
5
- display: block;
6
- height: 26px;
7
- width: 26px;
8
- z-index: 500;
9
- content: "\f182";
10
-
11
- }
12
-
13
- #redux-add-widget h3 {
14
- text-align:center !important;
15
- }
16
-
17
- .redux-widget_area-area-delete:hover{
18
- content: "\f182";
19
- cursor: pointer;
20
- margin-top: -30px;
21
- }
22
-
23
- .activate_spinner{
24
- display: block !important;
25
- position: absolute;
26
- top: 10px;
27
- right: 4px;
28
- background-color: #ECECEC;
29
- }
30
-
31
- #redux-add-widget form {
32
- text-align: center;
33
- }
34
-
35
- #widget_area-redux-custom, #widget_area-redux-custom h3 {
36
- position: relative;
37
- }
38
-
39
- #redux-add-widget p {
40
- margin-top: 0;
41
- }
42
- #redux-add-widget {
43
- w2idth: 285px;
44
- margin: 0 auto;
45
- position: relative;
46
- }
47
-
48
- #redux-add-widget-input {
49
- max-width: 95%;
50
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/widget_areas/assets/css/widget_areas.css DELETED
@@ -1,62 +0,0 @@
1
- #redux-add-widget h3 {
2
- text-align:center !important;
3
- padding: 15px 7px;
4
- font-size: 1.3em;
5
- margin-top: 5px;
6
- }
7
-
8
-
9
- .redux-widget_area-delete{
10
- position: absolute;
11
- top: 0;
12
- right: 35px;
13
- padding: 12px 10px;
14
- cursor: pointer;
15
- }
16
- .redux-widget_area-delete:before {
17
- font-family: "dashicons";
18
- content: "\f182";
19
- font: 400 20px/1 dashicons;
20
- speak: none;
21
- display: inline-block;
22
- -webkit-font-smoothing: antialiased;
23
- -moz-osx-font-smoothing: grayscale;
24
- text-decoration: none!important;
25
- color: #aaa;
26
- }
27
-
28
- .redux-widget_area-delete:hover:before{
29
- color: #888;
30
- }
31
-
32
- .activate_spinner{
33
- display: block !important;
34
- position: absolute;
35
- top: 10px;
36
- right: 4px;
37
- background-color: #ECECEC;
38
- }
39
-
40
- #redux-add-widget form {
41
- text-align: center;
42
- }
43
-
44
- #widget_area-redux-custom, #widget_area-redux-custom h3 {
45
- position: relative;
46
- }
47
-
48
- #redux-add-widget p {
49
- margin-top: 0;
50
- }
51
- #redux-add-widget {
52
- margin: 10px 0 0;
53
- position: relative;
54
- }
55
-
56
- #redux-add-widget-input {
57
- max-width: 95%;
58
- padding: 8px;
59
- margin-bottom: 14px;
60
- margin-top:3px;
61
- text-align: center;
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/widget_areas/assets/img/trash.png DELETED
Binary file
inc/extensions/extensions/widget_areas/assets/js/widget_areas.js DELETED
@@ -1,83 +0,0 @@
1
- (function($) {
2
- "use strict";
3
-
4
- var Redux_Widget_Areas = function(){
5
- this.widget_wrap = $('.sidebars-column-1');
6
- this.widget_area = $('#widgets-right');
7
- this.parent_area = $('.widget-liquid-right');
8
-
9
- this.widget_template = $('#redux-add-widget-template');
10
-
11
- this.add_form_html();
12
- this.add_del_button();
13
- this.bind_events();
14
- };
15
-
16
- Redux_Widget_Areas.prototype = {
17
-
18
-
19
- add_form_html: function() {
20
-
21
- this.widget_wrap.append(this.widget_template.html());
22
- this.widget_name = this.widget_wrap.find('input[name="redux-add-widget-input"]');
23
- this.nonce = this.widget_wrap.find('input[name="redux-nonce"]').val();
24
- },
25
-
26
- add_del_button: function() {
27
- var i = 0;
28
- this.widget_area.find('.sidebar-redux-custom .widgets-sortables').each(function() {
29
- if ( i >= redux_widget_areas ) {
30
- $(this).append('<span class="redux-widget_area-delete"></span>')
31
- }
32
- i++;
33
- });
34
- },
35
-
36
- bind_events: function() {
37
- this.parent_area.on('click', 'span.redux-widget_area-delete', $.proxy( this.delete_widget_area, this));
38
- //this.parent_area.on('click', '.addWidgetArea-button', $.proxy( this.add_widget_area, this));
39
-
40
- $( "#addWidgetAreaForm" ).submit(function() { $.proxy( this.add_widget_area, this) });
41
-
42
- },
43
-
44
- add_widget_area: function(e) {
45
- e.preventDefault();
46
- // console.log(e);
47
- // alert('yo'+$('#redux-add-widget-input').val());
48
- return false;
49
- },
50
-
51
- //delete the widget_area area with all widgets within, then re calculate the other widget_area ids and re save the order
52
- delete_widget_area: function(e) {
53
-
54
- var widget = $(e.currentTarget).parents('.widgets-holder-wrap:eq(0)'),
55
- title = widget.find('.sidebar-name h3'),
56
- spinner = title.find('.spinner'),
57
- widget_name = $.trim(title.text()),
58
- obj = this;
59
- widget.addClass('closed');
60
- spinner.css('display', 'inline-block');
61
- $.ajax({
62
- type: "POST",
63
- url: window.ajaxurl,
64
- data: {
65
- action: 'redux_delete_widget_area',
66
- name: widget_name,
67
- _wpnonce: obj.nonce
68
- },
69
-
70
- success: function(response) {
71
- if(response.trim() == 'widget_area-deleted') {
72
- widget.slideUp(200).remove();
73
- }
74
- }
75
- });
76
- }
77
- };
78
-
79
- $(function() {
80
- new Redux_Widget_Areas();
81
- });
82
-
83
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/widget_areas/class.redux_widget_areas.php DELETED
@@ -1,303 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Redux Framework is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 2 of the License, or
7
- * any later version.
8
- *
9
- * Redux Framework is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
16
- *
17
- * @package ReduxFramework
18
- * @author Dovy Paukstys (dovy)
19
- * @version 3.0.0
20
- */
21
-
22
- // Exit if accessed directly
23
- if( !defined( 'ABSPATH' ) ) exit;
24
-
25
- // Don't duplicate me!
26
- if( !class_exists( 'Redux_Widget_Areas' ) ) {
27
-
28
- /**
29
- * Main ReduxFramework customizer extension class
30
- *
31
- * @since 1.0.0
32
- */
33
- class Redux_Widget_Areas {
34
-
35
- // Protected vars
36
- private $extension_url;
37
- private $extension_dir;
38
- /**
39
- * Array of enabled widget_areas
40
- *
41
- * @since 1.0.0
42
- *
43
- * @var array
44
- */
45
- protected $widget_areas = array();
46
- protected $orig = array();
47
-
48
- /**
49
- * Class Constructor. Defines the args for the extions class
50
- *
51
- * @since 1.0.0
52
- * @access public
53
- * @param array $sections Panel sections.
54
- * @param array $args Class constructor arguments.
55
- * @param array $extra_tabs Extra panel tabs.
56
- * @return void
57
- */
58
- public function __construct( $widget_areas = array() ) {
59
-
60
- if ( empty( $this->extension_dir ) ) {
61
- $this->extension_dir = trailingslashit( str_replace( '\\', '/', dirname( __FILE__ ) ) );
62
- $this->extension_url = site_url( str_replace( trailingslashit( str_replace( '\\', '/', ABSPATH ) ), '', $this->extension_dir ) );
63
- }
64
- add_action( 'init', array(&$this, 'register_custom_widget_areas') , 1000 );
65
- add_action( 'admin_print_scripts', array($this, 'add_new_widget_area_box') );
66
- add_action( 'load-widgets.php', array($this, 'add_widget_area_area'), 100 );
67
- add_action( 'load-widgets.php', array( $this, '_enqueue' ), 100 );
68
- add_action( 'wp_ajax_redux_delete_widget_area', array( $this, 'redux_delete_widget_area_area' ) );
69
-
70
- }
71
-
72
- /**
73
- * Function to create the HTML used to create widget_areas.
74
- *
75
- * @since 1.0.0
76
- *
77
- */
78
- public function add_new_widget_area_box() {
79
- $nonce = wp_create_nonce ('delete-redux-widget_area-nonce');
80
- ?>
81
- <script type="text/html" id="redux-add-widget-template">
82
- <div id="redux-add-widget" class="widgets-holder-wrap">
83
- <div class="">
84
- <input type="hidden" name="redux-nonce" value="<?php echo $nonce ?>" />
85
- <div class="sidebar-name">
86
- <h3><?php echo __('Create Widget Area', 'redux-framework'); ?> <span class="spinner"></span></h3>
87
- </div>
88
- <div class="sidebar-description">
89
- <form id="addWidgetAreaForm" action="" method="post">
90
- <div class="widget-content">
91
- <input id="redux-add-widget-input" name="redux-add-widget-input" type="text" class="regular-text" title="<?php echo __('Name', 'redux-framework'); ?>" placeholder="<?php echo __('Name', 'redux-framework'); ?>" />
92
- </div>
93
- <div class="widget-control-actions">
94
- <div class="aligncenter">
95
- <input class="addWidgetArea-button button-primary" type="submit" value="<?php echo __('Create Widget Area', 'redux-framework'); ?>" />
96
- </div>
97
- <br class="clear">
98
- </div>
99
- </form>
100
- </div>
101
- </div>
102
- </div>
103
- </script>
104
- <?php
105
- }
106
-
107
- /**
108
- * Function to create a new widget_area
109
- *
110
- * @since 1.0.0
111
- *
112
- * @param string Name of the widget_area to be deleted.
113
- *
114
- * @return string 'widget_area-deleted' if successful.
115
- *
116
- */
117
- function add_widget_area_area() {
118
- if(!empty($_POST['redux-add-widget-input'])) {
119
- //set_theme_mod('redux-widget_areas', '');
120
- $this->widget_areas = $this->get_widget_areas();
121
- array_push($this->widget_areas, $this->check_widget_area_name($_POST['redux-add-widget-input']));
122
- $this->save_widget_areas();
123
- wp_redirect( admin_url('widgets.php') );
124
-
125
- die();
126
- }
127
- }
128
-
129
-
130
- /**
131
- * Before we create a new widget_area, verify it doesn't already exist. If it does, append a number to the name.
132
- *
133
- * @since 1.0.0
134
- *
135
- * @param string $name Name of the widget_area to be created.
136
- *
137
- * @return name $name Name of the new widget_area just created.
138
- *
139
- */
140
- function check_widget_area_name($name) {
141
- if(empty($GLOBALS['wp_registered_widget_areas']))
142
- return $name;
143
-
144
- $taken = array();
145
- foreach ( $GLOBALS['wp_registered_widget_areas'] as $widget_area ) {
146
- $taken[] = $widget_area['name'];
147
- }
148
-
149
- $taken = array_merge($taken, $this->widget_areas);
150
-
151
- if(in_array($name, $taken)) {
152
- $counter = substr($name, -1);
153
- $new_name = "";
154
-
155
- if(!is_numeric($counter)) {
156
- $new_name = $name . " 1";
157
- } else {
158
- $new_name = substr($name, 0, -1) . ((int) $counter + 1);
159
- }
160
-
161
- $name = $this->check_widget_area_name($new_name);
162
- }
163
- echo $name;
164
- exit();
165
-
166
- return $name;
167
- }
168
-
169
- function save_widget_areas() {
170
- set_theme_mod( 'redux-widget-areas', array_unique( $this->widget_areas ));
171
- }
172
-
173
- /**
174
- * Register and display the custom widget_area areas we have set.
175
- *
176
- * @since 1.0.0
177
- *
178
- */
179
- function register_custom_widget_areas() {
180
- // If the single instance hasn't been set, set it now.
181
- if ( empty($this->widget_areas) ) {
182
- $this->widget_areas = $this->get_widget_areas();
183
- }
184
-
185
- $this->orig = array_unique(apply_filters('redux/widget_areas', array()));
186
- if ( !empty( $this->orig ) && $this->orig != $this->widget_areas ) {
187
- $this->widget_areas = array_unique(array_merge($this->widget_areas, $this->orig));
188
- $this->save_widget_areas();
189
- }
190
-
191
- $options = array(
192
- 'before_title' => '<h3 class="widgettitle">',
193
- 'after_title' => '</h3>',
194
- 'before_widget' => '<div id="%1$s" class="widget clearfix %2$s">',
195
- 'after_widget' => '</div>'
196
- );
197
-
198
- $options = apply_filters('redux_custom_widget_args', $options);
199
-
200
- if(is_array($this->widget_areas)) {
201
- foreach (array_unique($this->widget_areas) as $widget_area) {
202
- $options['class'] = 'redux-custom';
203
- $options['name'] = $widget_area;
204
- $options['id'] = sanitize_key( $widget_area );
205
- register_sidebar($options);
206
- }
207
- }
208
- }
209
-
210
-
211
- /**
212
- * Return the widget_areas array.
213
- *
214
- * @since 1.0.0
215
- *
216
- * @return array If not empty, active redux widget_areas are returned.
217
- */
218
- public function get_widget_areas() {
219
-
220
- // If the single instance hasn't been set, set it now.
221
- if ( !empty($this->widget_areas) ) {
222
- return $this->widget_areas;
223
- }
224
-
225
- $db = get_theme_mod('redux-widget-areas');
226
-
227
- if (!empty($db)) {
228
- $this->widget_areas = array_unique(array_merge($this->widget_areas, $db));
229
- }
230
-
231
- return $this->widget_areas;
232
-
233
- }
234
-
235
- /**
236
- * Before we create a new widget_area, verify it doesn't already exist. If it does, append a number to the name.
237
- *
238
- * @since 1.0.0
239
- *
240
- * @param string Name of the widget_area to be deleted.
241
- *
242
- * @return string 'widget_area-deleted' if successful.
243
- *
244
- */
245
- function redux_delete_widget_area_area() {
246
- //check_ajax_referer('delete-redux-widget_area-nonce');
247
-
248
- if(!empty($_REQUEST['name'])) {
249
- $name = strip_tags( ( stripslashes( $_REQUEST['name'] ) ) );
250
- $this->widget_areas = $this->get_widget_areas();
251
- $key = array_search($name, $this->widget_areas );
252
- if( $key >= 0 ) {
253
- unset($this->widget_areas[$key]);
254
- $this->save_widget_areas();
255
- }
256
- echo "widget_area-deleted";
257
- }
258
-
259
- die();
260
- }
261
-
262
-
263
- /**
264
- * Enqueue CSS/JS for the customizer controls
265
- *
266
- * @since 1.0.0
267
- * @access public
268
- * @global $wp_styles
269
- * @return void
270
- */
271
- function _enqueue(){
272
-
273
- wp_enqueue_style( 'dashicons' );
274
-
275
- wp_enqueue_script(
276
- 'redux-widget_areas-js',
277
- $this->extension_url.'assets/js/widget_areas.js',
278
- array('jquery'),
279
- time(),
280
- true
281
- );
282
-
283
- wp_enqueue_style(
284
- 'redux-widget_areas-css',
285
- $this->extension_url.'assets/css/widget_areas.css',
286
- time(),
287
- true
288
- );
289
- $widgets = array();
290
- if (!empty($this->widget_areas)) {
291
- foreach ($this->widget_areas as $widget) {
292
- $widgets[$widget] = 1;
293
- }
294
- }
295
-
296
-
297
- wp_localize_script( 'redux-widget_areas-js', 'redux_widget_areas', array((count($this->orig))) );
298
-
299
- }//function
300
-
301
- } // class
302
-
303
- } // if
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inc/extensions/extensions/widget_areas/extension_widget_areas.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Redux Framework is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 2 of the License, or
7
- * any later version.
8
- *
9
- * Redux Framework is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with Redux Framework. If not, see <http://www.gnu.org/licenses/>.
16
- *
17
- * @package Redux_Framework
18
- * @subpackage Premium Extensions
19
- * @author Dovy Paukstys (dovy)
20
- * @version 1.0.0
21
- */
22
-
23
- // Exit if accessed directly
24
- if( !defined( 'ABSPATH' ) ) exit;
25
-
26
- // Don't duplicate me!
27
- if( !class_exists( 'ReduxFramework_extension_widget_areas' ) ) {
28
-
29
- class ReduxFramework_extension_widget_areas {
30
-
31
- public static $version = "1.0.1";
32
-
33
- // Protected vars
34
- protected $parent;
35
-
36
- /**
37
- * Class Constructor. Defines the args for the extions class
38
- *
39
- * @since 1.0.0
40
- * @access public
41
- * @param array $parent Redux_Options class instance
42
- * @return void
43
- */
44
- public function __construct( $parent ) {
45
- if ( !class_exists( 'Redux_Widget_Areas' ) ) {
46
- require_once(dirname(__FILE__).'/class.redux_widget_areas.php');
47
- new Redux_Widget_Areas();
48
- }
49
-
50
- // Allow users to extend if they want
51
- do_action('redux/widget_areas/'.$parent->args['opt_name'].'/construct');
52
-
53
- }
54
-
55
- } // class
56
-
57
- } // if
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://photontechs.com/donate
4
  Tags: social media, floating sidebar, social widget, social icons,animated social icons
5
  Requires at least: 3.0
6
  Tested up to: 5.7
7
- Stable tag: 5.3.9
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
4
  Tags: social media, floating sidebar, social widget, social icons,animated social icons
5
  Requires at least: 3.0
6
  Tested up to: 5.7
7
+ Stable tag: 5.3.9.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10