PluginProbe
Timed Content / 2.70
Timed Content v2.70
2.99 trunk 1.0 1.1 1.2 2.0 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.10 2.11 2.12 2.15 2.2 2.3 2.3.1 2.4 2.5 2.5.1 2.50 2.51 2.52 All 67 releases
← All changes | lib/customFieldsInterface.php +457 -341 2.1.22.70 View file →
@@ -1,413 +1,529 @@
1 1 <?php
2 -if ( !class_exists('customFieldsInterface') ) {
2 +class customFieldsInterface
3 +{
4 + /**
5 + * @var string $handle The handle for the box containing the custom fields
6 + */
7 + var $handle = "";
8 + /**
9 + * @var string $label The label for the box containing the custom fields
10 + */
11 + var $label = "";
12 + /**
13 + * @var string $desc The description/introduction for the box containing the custom fields
14 + */
15 + var $desc = "";
16 + /**
17 + * @var string $prefix The prefix for storing custom fields in the postmeta table
18 + */
19 + var $prefix = "";
20 + /**
21 + * @var array $postTypes An array of public custom post types, plus the standard "post" and "page" - add the custom types you want to include here
22 + */
23 + var $postTypes = array();
24 + /**
25 + * @var array $customFields Defines the custom fields available
26 + */
27 + var $customFields = array();
28 + /**
29 + * @var array $jquery_ui_datetime_datepicker_i18n Array for jQuery datepicker UI localization
30 + */
31 + var $jquery_ui_datetime_datepicker_i18n;
32 + /**
33 + * @var array $jquery_ui_datetime_timepicker_i18n Array for jQuery timepicker UI localization
34 + */
35 + var $jquery_ui_datetime_timepicker_i18n;
3 36
4 - class customFieldsInterface {
5 - /**
6 - * @var string $handle The handle for the box containing the custom fields
7 - */
8 - var $handle = "";
9 - /**
10 - * @var string $label The label for the box containing the custom fields
11 - */
12 - var $label = "";
13 - /**
14 - * @var string $desc The description/introduction for the box containing the custom fields
15 - */
16 - var $desc = "";
17 - /**
18 - * @var string $prefix The prefix for storing custom fields in the postmeta table
19 - */
20 - var $prefix = "";
21 - /**
22 - * @var array $postTypes An array of public custom post types, plus the standard "post" and "page" - add the custom types you want to include here
23 - */
24 - var $postTypes = array();
25 - /**
26 - * @var array $customFields Defines the custom fields available
27 - */
28 - var $customFields = array();
29 - /**
30 - * PHP 4 Compatible Constructor
31 - */
32 - function customFieldsInterface( $handle, $label, $desc, $prefix, $postTypes, $customFields ) { $this->__construct( $handle, $label, $desc, $prefix, $postTypes, $customFields ); }
33 - /**
34 - * PHP 5 Constructor
35 - */
36 - function __construct( $handle, $label, $desc, $prefix, $postTypes, $customFields ) {
37 -
38 - $this->handle = $handle;
39 - $this->label = $label;
40 - $this->desc = $desc;
41 - $this->prefix = $prefix;
42 - $this->postTypes = $postTypes ;
43 - $this->customFields = $customFields;
44 - add_action( 'admin_menu', array( &$this, 'createCustomFields' ) );
45 - add_action( 'save_post', array( &$this, 'saveCustomFields' ), 1, 2 );
46 - // Comment this line out if you want to keep default custom fields meta box
47 - add_action( 'do_meta_boxes', array( &$this, 'removeDefaultCustomFields' ), 10, 3 );
48 - }
37 + /**
38 + * Constructor
39 + */
40 + function __construct($handle, $label, $desc, $prefix, $postTypes, $customFields, $jquery_ui_datetime_datepicker_i18n, $jquery_ui_datetime_timepicker_i18n)
41 + {
42 + $this->handle = $handle;
43 + $this->label = $label;
44 + $this->desc = $desc;
45 + $this->prefix = $prefix;
46 + $this->postTypes = $postTypes;
47 + $this->customFields = $customFields;
48 + $this->jquery_ui_datetime_datepicker_i18n = $jquery_ui_datetime_datepicker_i18n;
49 + $this->jquery_ui_datetime_timepicker_i18n = $jquery_ui_datetime_timepicker_i18n;
49 50
50 - // Inspired by http://ca1.php.net/manual/en/function.timezone-identifiers-list.php#79284
51 - static function __generateTimezoneSelectOptions( $default_tz ) {
52 - $timezone_identifiers = timezone_identifiers_list();
53 - sort( $timezone_identifiers );
54 - $current_continent = "";
55 - $options_list = "";
56 51
57 - foreach ( $timezone_identifiers as $timezone_identifier ) {
58 - list( $continent, ) = explode( "/", $timezone_identifier, 2);
59 - if ( in_array( $continent, array( "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific" ) ) ) {
60 - list( , $city ) = explode( "/", $timezone_identifier, 2);
61 - if ( strlen( $current_continent ) === 0 ) {
62 - $options_list .= "<optgroup label=\"" . $continent . "\">"; // Start first continent optgroup
63 - }
64 - elseif ( $current_continent != $continent ) {
65 - $options_list .= "</optgroup><optgroup label=\"" . $continent . "\">"; // End old optgroup and start new continent optgroup
66 - }
67 - $options_list .= "<option" . ( ( $timezone_identifier == $default_tz ) ? " selected=\"selected\"" : "" )
68 - . " value=\"" . $timezone_identifier . "\">" . str_replace( "_", " ", $city ). "</option>"; //Timezone
69 - }
70 - $current_continent = $continent;
71 - }
72 - $options_list .= "</optgroup>"; // End last continent optgroup
52 + add_action('admin_menu', array(&$this, 'createCustomFields'));
53 + add_action('save_post', array(&$this, 'saveCustomFields'), 1, 2);
54 + // Comment this line out if you want to keep default custom fields meta box
55 + add_action('do_meta_boxes', array(&$this, 'removeDefaultCustomFields'), 10, 3);
56 + }
73 57
74 - return $options_list;
75 - }
58 + // Inspired by http://ca1.php.net/manual/en/function.timezone-identifiers-list.php#79284
59 + static function generateTimezoneSelectOptions($default_tz)
60 + {
61 + $timezone_identifiers = timezone_identifiers_list();
62 + sort( $timezone_identifiers );
63 + $current_continent = "";
64 + $options_list = "";
76 65
77 - /**
78 - * Remove the default Custom Fields meta box
79 - */
80 - function removeDefaultCustomFields( $type, $context, $post ) {
81 - foreach ( array( 'normal', 'advanced', 'side' ) as $context ) {
82 - foreach ( $this->postTypes as $postType ) {
83 - remove_meta_box( 'postcustom', $postType, $context );
66 + foreach ($timezone_identifiers as $timezone_identifier) {
67 + list($continent,) = explode('/', $timezone_identifier, 2);
68 + if (in_array($continent,array(
69 + 'Africa',
70 + 'America',
71 + 'Antarctica',
72 + 'Arctic',
73 + 'Asia',
74 + 'Atlantic',
75 + 'Australia',
76 + 'Europe',
77 + 'Indian',
78 + 'Pacific'
79 + ))) {
80 + list(, $city) = explode('/', $timezone_identifier, 2);
81 + if (strlen($current_continent) === 0) {
82 + // Start first continent optgroup
83 + $options_list .= '<optgroup label=\'' . $continent . '\'>';
84 + } elseif ($current_continent != $continent) {
85 + // End old optgroup and start new continent optgroup
86 + $options_list .= '</optgroup><optgroup label=\'' . $continent . '\'>';
84 87 }
88 + // Timezone
89 + $options_list .= '<option' .
90 + (($timezone_identifier == $default_tz ) ? ' selected=\'selected\'' : '') .
91 + ' value=\'' . $timezone_identifier . '\'>' .
92 + str_replace('_', ' ', $city) . '</option>';
85 93 }
94 + $current_continent = $continent;
86 95 }
87 - /**
88 - * Create the new Custom Fields meta box
89 - */
90 - function createCustomFields() {
91 - // Only enqueue scripts if we're dealing with 'timed-content-rule' pages
92 - foreach ( $this->postTypes as $a_postType ) {
93 - if ( ( isset( $_GET['post_type'] ) && $_GET['post_type'] == $a_postType )
94 - || ( isset( $post_type ) && $post_type == $a_postType )
95 - || ( isset( $_GET['post'] ) && get_post_type( $_GET['post'] ) == $a_postType ) ) {
96 + $options_list .= '</optgroup>'; // End last continent optgroup
96 97
97 - wp_enqueue_style( 'wp-color-picker' );
98 - wp_enqueue_script( 'wp-color-picker' );
99 - wp_enqueue_style( 'timed-content-jquery-ui-css', TIMED_CONTENT_JQUERY_UI_CSS, false, TIMED_CONTENT_VERSION );
100 - wp_enqueue_script( 'jquery-ui-datepicker' );
101 - wp_enqueue_script( 'jquery-ui-spinner' );
102 - wp_register_style( 'timed-content-jquery-ui-timepicker-css', TIMED_CONTENT_JQUERY_UI_TIMEPICKER_CSS, array( TIMED_CONTENT_JQUERY_UI_CSS ), TIMED_CONTENT_VERSION );
103 - wp_enqueue_style( 'timed-content-jquery-ui-timepicker-css' );
104 - wp_register_script( 'timed-content-jquery-ui-timepicker-js', TIMED_CONTENT_JQUERY_UI_TIMEPICKER_JS, array('jquery', 'jquery-ui-datepicker'), TIMED_CONTENT_VERSION );
105 - wp_enqueue_script( 'timed-content-jquery-ui-timepicker-js' );
106 - if ( function_exists( 'add_meta_box' ) )
107 - add_meta_box( $this->handle, $this->label, array( &$this, 'displayCustomFields' ), $a_postType, 'normal', 'high' );
98 + return $options_list;
99 + }
100 +
101 + /**
102 + * Remove the default Custom Fields meta box
103 + */
104 + function removeDefaultCustomFields($type, $context, $post)
105 + {
106 + foreach (array( 'normal', 'advanced', 'side' ) as $context) {
107 + foreach ($this->postTypes as $postType) {
108 + remove_meta_box( 'postcustom', $postType, $context );
109 + }
110 + }
111 + }
112 +
113 + /**
114 + * Create the new Custom Fields meta box
115 + */
116 + function createCustomFields() {
117 + // Only enqueue scripts if we're dealing with 'timed-content-rule' pages
118 + foreach ( $this->postTypes as $a_postType ) {
119 + if ( ( isset( $_GET['post_type'] ) && $_GET['post_type'] == $a_postType )
120 + || ( isset( $post_type ) && $post_type == $a_postType )
121 + || ( isset( $_GET['post'] ) && get_post_type( $_GET['post'] ) == $a_postType ) ) {
122 +
123 + wp_enqueue_style( 'wp-color-picker' );
124 + wp_enqueue_script( 'wp-color-picker' );
125 + wp_enqueue_script( 'jquery-ui-spinner' );
126 +
127 + wp_enqueue_style( TIMED_CONTENT_SLUG . '-jquery-ui-css', TIMED_CONTENT_JQUERY_UI_CSS );
128 + wp_enqueue_script( 'jquery-ui-datepicker' );
129 + wp_register_style( TIMED_CONTENT_SLUG . '-jquery-ui-timepicker-css',
130 + TIMED_CONTENT_JQUERY_UI_TIMEPICKER_CSS );
131 + wp_enqueue_style( TIMED_CONTENT_SLUG . '-jquery-ui-timepicker-css' );
132 + wp_register_script( TIMED_CONTENT_SLUG . '-jquery-ui-timepicker-js',
133 + TIMED_CONTENT_JQUERY_UI_TIMEPICKER_JS, array( 'jquery', 'jquery-ui-datepicker' ),
134 + TIMED_CONTENT_VERSION );
135 + wp_enqueue_script( TIMED_CONTENT_SLUG . '-jquery-ui-timepicker-js' );
136 + if ( ! ( wp_script_is( TIMED_CONTENT_SLUG . '-jquery-ui-datetime-i18n-js', 'registered' ) ) ) {
137 + wp_register_script( TIMED_CONTENT_SLUG . '-jquery-ui-datetime-i18n-js',
138 + TIMED_CONTENT_PLUGIN_URL . "/js/timed-content-datetime-i18n.js",
139 + array( 'jquery', 'jquery-ui-datepicker', TIMED_CONTENT_SLUG . '-jquery-ui-timepicker-js' ),
140 + TIMED_CONTENT_VERSION );
141 + wp_enqueue_script( TIMED_CONTENT_SLUG . '-jquery-ui-datetime-i18n-js' );
142 + wp_localize_script( TIMED_CONTENT_SLUG . '-jquery-ui-datetime-i18n-js',
143 + 'TimedContentJQDatepickerI18n', $this->jquery_ui_datetime_datepicker_i18n );
144 + wp_localize_script( TIMED_CONTENT_SLUG . '-jquery-ui-datetime-i18n-js',
145 + 'TimedContentJQTimepickerI18n', $this->jquery_ui_datetime_timepicker_i18n );
108 146 }
147 +
148 + if ( function_exists( 'add_meta_box' ) ) {
149 + add_meta_box( $this->handle, $this->label, array( &$this, 'displayCustomFields' ), $a_postType,
150 + 'normal', 'high' );
151 + }
109 152 }
110 153 }
111 - /**
112 - * Display the new Custom Fields meta box
113 - */
114 - function displayCustomFields() {
115 - global $post;
116 - ?>
117 - <p><?php echo $this->desc; ?></p>
118 - <div class="form-wrap">
119 - <?php
120 - wp_nonce_field( $this->handle, $this->handle . '_wpnonce', false, true );
121 - foreach ( $this->customFields as $customField ) {
122 - // Check scope
123 - $scope = $customField[ 'scope' ];
124 - $output = false;
125 - foreach ( $scope as $scopeItem ) {
126 - switch ( $scopeItem ) {
127 - default: {
128 - if ( $post->post_type == $scopeItem )
154 + }
155 +
156 + /**
157 + * Display the new Custom Fields meta box
158 + */
159 + function displayCustomFields() {
160 + global $post;
161 + ?>
162 + <p><?php echo $this->desc; ?></p>
163 + <div class="form-wrap">
164 + <?php
165 + wp_nonce_field( $this->handle, $this->handle . '_wpnonce', false, true );
166 + foreach ( $this->customFields as $customField ) {
167 + // Check scope
168 + $scope = $customField['scope'];
169 + $output = false;
170 + foreach ( $scope as $scopeItem ) {
171 + switch ( $scopeItem ) {
172 + default:
173 + {
174 + if ( $post->post_type == $scopeItem ) {
129 175 $output = true;
176 + }
130 177 break;
131 178 }
132 - }
133 - if ( $output ) break;
134 179 }
135 - // Check capability
136 - if ( !current_user_can( $customField['capability'], $post->ID ) )
137 - $output = false;
138 - // Output if allowed
139 - if ( $output ) { ?>
140 - <div class="form-field form-required" id="<?php echo $this->prefix . $customField[ 'name' ]; ?>_div" style="display: <?php echo $customField[ 'display' ]; ?>">
141 - <?php
142 - switch ( $customField[ 'type' ] ) {
143 - case "radio": {
180 + if ( $output ) {
181 + break;
182 + }
183 + }
184 + // Check capability
185 + if ( ! current_user_can( $customField['capability'], $post->ID ) ) {
186 + $output = false;
187 + }
188 + // Output if allowed
189 + if ( $output ) { ?>
190 + <div class="form-field form-required"
191 + id="<?php echo $this->prefix . $customField['name']; ?>_div"
192 + style="display: <?php echo $customField['display']; ?>">
193 + <?php
194 + switch ( $customField['type'] ) {
195 + case "radio":
196 + {
144 197 // radio
145 - $checked_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
146 - echo "<strong>" . $customField[ 'title' ] . "</strong><br />\n";
198 + $checked_value = ( "" === get_post_meta( $post->ID,
199 + $this->prefix . $customField['name'],
200 + true ) ? $customField['default'] : get_post_meta( $post->ID,
201 + $this->prefix . $customField['name'], true ) );
202 + echo "<strong>" . $customField['title'] . "</strong><br />\n";
147 203 foreach ( $customField['values'] as $value => $label ) {
148 - echo "<input type=\"radio\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "_" . $value . "\" value=\"" . $value . "\"";
149 - if ( $checked_value == $value )
204 + echo "<input type=\"radio\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "_" . $value . "\" value=\"" . $value . "\"";
205 + if ( $checked_value == $value ) {
150 206 echo " checked=\"checked\"";
151 - echo " style=\"width: 30px;\" /><label for=\"" . $this->prefix . $customField[ 'name' ] . "_" . $value . "\" style=\"display: inline;\">" . $label . "</label><br />\n";
207 + }
208 + echo " /><label for=\"" . $this->prefix . $customField['name'] . "_" . $value . "\" style=\"display: inline;\">" . $label . "</label><br />\n";
152 209 }
153 - break;
154 210 }
155 - case "menu": {
211 + break;
212 + case "menu":
213 + {
156 214 // menu
157 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label><br />\n";
158 - if ( sizeof ( $customField['values'] ) == 0 )
159 - echo "<em>This menu is empty.</em>\n";
160 - else {
161 - $selected_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
162 - echo "<select name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" style=\"width: auto; height: auto; padding: 3px;\" size=\"" . $customField['size'] . "\" multiple=\"multiple\">\n";
215 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></label><br />\n";
216 + if ( sizeof( $customField['values'] ) == 0 ) {
217 + echo "<em>" . __( "This menu is empty.", "timed-content" ) . "</em>\n";
218 + } else {
219 + $selected_value = ( "" === get_post_meta( $post->ID,
220 + $this->prefix . $customField['name'],
221 + true ) ? $customField['default'] : get_post_meta( $post->ID,
222 + $this->prefix . $customField['name'], true ) );
223 + echo "<select name=\"" . $this->prefix . $customField['name'] . "[]\" id=\"" . $this->prefix . $customField['name'] . "\" style=\"width: auto; height: auto; padding: 3px;\" size=\"" . $customField['size'] . "\" multiple=\"multiple\">\n";
163 224 foreach ( $customField['values'] as $value => $label ) {
164 225 echo "\t<option value=\"" . $value . "\"";
165 - if ( $selected_value == $value )
226 + if ( $selected_value == $value ) {
166 227 echo " selected=\"selected\"";
228 + }
167 229 echo ">" . $label . "</option>\n";
168 230 }
169 231 echo "</select>\n";
170 232 }
171 - break;
172 233 }
173 - case "list": {
234 + break;
235 + case "list":
236 + {
174 237 // list
175 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
176 - if ( sizeof ( $customField['values'] ) == 0 )
177 - echo "<em>This list is empty.</em>\n";
178 - else {
179 - $selected_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
238 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></label><br />\n";
239 + if ( sizeof( $customField['values'] ) == 0 ) {
240 + echo "<em>" . __( "This menu is empty.", "timed-content" ) . "</em>\n";
241 + } else {
242 + $selected_value = ( "" === get_post_meta( $post->ID,
243 + $this->prefix . $customField['name'],
244 + true ) ? $customField['default'] : get_post_meta( $post->ID,
245 + $this->prefix . $customField['name'], true ) );
180 246 echo "<select name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" style=\"width: auto;\">\n";
181 247 foreach ( $customField['values'] as $value => $label ) {
182 248 echo "\t<option value=\"" . $value . "\"";
183 - if ( $selected_value == $value )
249 + if ( $selected_value == $value ) {
184 250 echo " selected=\"selected\"";
251 + }
185 252 echo ">" . $label . "</option>\n";
186 253 }
187 254 echo "</select>\n";
188 255 }
189 - break;
190 256 }
191 - case "timezone-list": {
257 + break;
258 + case "timezone-list":
259 + {
192 260 // timezone list
193 - $selected_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
261 + $selected_value = ( "" === get_post_meta( $post->ID,
262 + $this->prefix . $customField['name'],
263 + true ) ? $customField['default'] : get_post_meta( $post->ID,
264 + $this->prefix . $customField['name'], true ) );
194 265
195 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
266 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></label><br />\n";
196 267 echo "<select name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" style=\"width: auto;\">\n";
197 - echo customFieldsInterface::__generateTimezoneSelectOptions( $selected_value );
268 + echo customFieldsInterface::generateTimezoneSelectOptions( $selected_value );
198 269 echo "</select>\n";
199 - break;
200 270 }
201 - case "checkbox": {
271 + break;
272 + case "checkbox":
273 + {
202 274 // Checkbox
203 - $checked_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
275 + $checked_value = ( "" === get_post_meta( $post->ID,
276 + $this->prefix . $customField['name'],
277 + true ) ? $customField['default'] : get_post_meta( $post->ID,
278 + $this->prefix . $customField['name'], true ) );
204 279
205 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
280 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong><br />\n";
206 281 echo "<input type=\"checkbox\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"yes\"";
207 - if ( $checked_value == "yes" )
282 + if ( $checked_value == "yes" ) {
208 283 echo " checked=\"checked\"";
209 - echo " style=\"width: 30px;\" />\n";
210 - break;
284 + }
285 + echo " />".__('Yes', 'timed-content')."</label>\n";
211 286 }
212 - case "checkbox-list": {
287 + break;
288 + case "checkbox-list":
289 + {
213 290 // Checkbox list
214 - $checked_value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
291 + $checked_value = ( "" === get_post_meta( $post->ID,
292 + $this->prefix . $customField['name'],
293 + true ) ? $customField['default'] : get_post_meta( $post->ID,
294 + $this->prefix . $customField['name'], true ) );
215 295
216 - echo "<strong>" . $customField[ 'title' ] . "</strong><br />\n";
217 - if ( sizeof ( $customField['values'] ) == 0 )
218 - echo "<em>This list is empty.</em>\n";
219 - else {
296 + echo "<strong>" . $customField['title'] . "</strong><br />\n";
297 + if ( sizeof( $customField['values'] ) == 0 ) {
298 + echo "<em>" . __( "This menu is empty.", "timed-content" ) . "</em>\n";
299 + } else {
220 300 foreach ( $customField['values'] as $value => $label ) {
221 301 echo "<input type=\"checkbox\" name=\"" . $this->prefix . $customField['name'] . "[]\" id=\"" . $this->prefix . $customField['name'] . "_" . $value . "\" value=\"" . $value . "\"";
222 - if ( ( is_array( $checked_value ) ) && ( in_array( $value, $checked_value ) ) )
302 + if ( ( is_array( $checked_value ) ) && ( in_array( $value,
303 + $checked_value ) ) ) {
223 304 echo " checked=\"checked\"";
224 - echo " style=\"width: 30px;\" /><label for=\"" . $this->prefix . $customField['name'] . "_" . $value . "\" style=\"display: inline;\" >" . $label . "</label><br />\n";
305 + }
306 + echo " /><label for=\"" . $this->prefix . $customField['name'] . "_" . $value . "\" style=\"display: inline;\" >" . $label . "</label><br />\n";
225 307 }
226 308 }
227 - break;
228 309 }
229 - case "textarea":
230 - case "wysiwyg": {
231 - // Text area
232 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
233 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] ."\"><strong>" . $customField[ 'title' ] . "</strong></label>\n";
234 - echo "<textarea name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" columns=\"30\" rows=\"3\">" . htmlspecialchars( $value ) . "</textarea>\n";
235 - // WYSIWYG
236 - if ( $customField[ 'type' ] == "wysiwyg" ) { ?>
237 -<script type="text/javascript">
238 -//<![CDATA[
239 - jQuery( document ).ready( function() {
240 - jQuery( "<?php echo $this->prefix . $customField[ 'name' ]; ?>" ).addClass( "mceEditor" );
241 - if ( typeof( tinyMCE ) == "object" && typeof( tinyMCE.execCommand ) == "function" ) {
242 - tinyMCE.execCommand( "mceAddControl", false, "<?php echo $this->prefix . $customField[ 'name' ]; ?>" );
243 - }
244 - });
245 -//]]>
246 -</script>
247 - <?php }
248 - break;
249 - }
250 - case "color-picker": {
251 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
252 - // Color picker using WP's built-in Iris jQuery plugin ?>
253 -<script type="text/javascript">
254 -//<![CDATA[
255 - jQuery(document).ready(function() {
256 - var <?php echo $this->prefix . $customField[ 'name' ]; ?>Options = {
257 - defaultColor: false,
258 - hide: true,
259 - palettes: true
260 - };
261 -
262 - jQuery("#<?php echo $this->prefix . $customField[ 'name' ]; ?>").wpColorPicker(<?php echo $this->prefix . $customField[ 'name' ]; ?>Options);
263 - });
264 -//]]>
265 -</script>
266 - <?php
267 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
268 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" value=\"" . $value . "\" size=\"7\" maxlength=\"7\" style=\"width: 100px;\" />\n";
269 - break;
270 - }
271 - case "date": {
272 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
273 -// echo "<span style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></span>&nbsp;&nbsp;\n";
274 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
275 - // Date picker using WP's built-in Datepicker jQuery plugin ?>
276 -<script type="text/javascript">
277 -//<![CDATA[
278 - jQuery(document).ready(function() {
279 - jQuery( "#<?php echo $this->prefix . $customField[ 'name' ]; ?>" ).datepicker(
280 - {
281 - dateFormat: "<?php _ex( "MM d, yy", "Date format for jQuery UI Datepicker", 'timed-content' ); ?>",
282 - changeMonth: true,
283 - changeYear: true
284 - }
285 - );
286 - });
287 -//]]>
288 -</script>
289 - <?php
290 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" value=\"" . htmlspecialchars( $value ) . "\" style=\"width: 175px;\" />\n";
291 - break;
292 - }
293 - case "datetime": {
294 - echo "<span style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></span><br />\n";
295 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
296 - foreach ( $value as $k => $v )
297 - $value[$k] = htmlspecialchars( $v );
298 - // Date picker using WP's built-in Datepicker jQuery plugin
299 - // Time picker using jQuery UI Timepicker: http://fgelinas.com/code/timepicker
300 - ?>
301 -<script type="text/javascript">
302 -//<![CDATA[
303 - jQuery(document).ready(function() {
304 - jQuery( "#<?php echo $this->prefix . $customField[ 'name' ]; ?>_date" ).datepicker(
305 - {
306 - dateFormat: "<?php _ex( "MM d, yy", "Date format for jQuery UI Datepicker", 'timed-content' ); ?>",
307 - changeMonth: true,
308 - changeYear: true
309 - }
310 - );
311 - jQuery( "#<?php echo $this->prefix . $customField[ 'name' ]; ?>_time" ).timepicker(
312 - {
313 - showLeadingZero: false,
314 - showPeriod: true,
315 - defaultTime: 'now'
316 - }
317 - );
318 - });
319 -//]]>
320 -</script>
321 - <?php
322 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "_date\" style=\"display:inline;\"><em>" . _x( 'Date', 'Date field label', 'timed-content' ) . ":</em></label>&nbsp;&nbsp;\n";
323 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "[date]\" id=\"" . $this->prefix . $customField[ 'name' ] . "_date\" value=\"" . $value['date'] . "\" style=\"width: 175px;\" />\n";
324 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] ."_time\" style=\"display:inline;\"><em>" . _x( 'Time', 'Time field label', 'timed-content' ) . ":</em></label>&nbsp;&nbsp;\n";
325 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "[time]\" id=\"" . $this->prefix . $customField[ 'name' ] . "_time\" value=\"" . $value['time'] . "\" style=\"width: 125px;\" />\n";
326 - break;
327 - }
328 - case "number": {
329 - (int)$value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
330 - // Number picker using WP's built-in Spinner jQuery plugin ?>
331 -<script type="text/javascript">
332 -//<![CDATA[
333 - jQuery(document).ready(function() {
334 - jQuery( "#<?php echo $this->prefix . $customField[ 'name' ]; ?>" ).spinner(
335 - {
336 - stop: function( event, ui ) { jQuery( this ).trigger("change"); },
337 - <?php if ( isset( $customField[ 'min' ] ) ) { ?>min: <?php echo $customField[ 'min' ]; ?>, <?php } ?>
338 - <?php if ( isset( $customField[ 'max' ] ) ) { ?>max: <?php echo $customField[ 'max' ]; ?> <?php } ?>
339 - }
340 - );
341 - });
342 -//]]>
343 -</script>
344 - <?php
345 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\" style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></label>&nbsp;&nbsp;\n";
346 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" value=\"" . $value . "\" size=\"2\" />\n";
347 - break;
348 - }
349 - case "hidden": {
350 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
310 + break;
311 + case "textarea":
312 + case "wysiwyg":
313 + {
314 + // Text area
315 + $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'],
316 + true ) ? $customField['default'] : get_post_meta( $post->ID,
317 + $this->prefix . $customField['name'], true ) );
318 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\"><strong>" . $customField['title'] . "</strong></label><br />\n";
319 + echo "<textarea name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" columns=\"30\" rows=\"3\">" . htmlspecialchars( $value ) . "</textarea>\n";
320 + // WYSIWYG
321 + if ( $customField['type'] == "wysiwyg" ) { ?>
322 + <script type="text/javascript">
323 + //<![CDATA[
324 + jQuery(document).ready(function () {
325 + jQuery("<?php echo $this->prefix . $customField['name']; ?>").addClass("mceEditor");
326 + if (typeof (tinyMCE) == "object" && typeof (tinyMCE.execCommand) == "function") {
327 + tinyMCE.execCommand("mceAddControl", false, "<?php echo $this->prefix . $customField['name']; ?>");
328 + }
329 + });
330 + //]]>
331 + </script>
332 + <?php }
333 + }
334 + break;
335 + case "color-picker": {
336 + $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'],
337 + true ) ? $customField['default'] : get_post_meta( $post->ID,
338 + $this->prefix . $customField['name'], true ) );
339 + // Color picker using WP's built-in Iris jQuery plugin ?>
340 + <script type="text/javascript">
341 + //<![CDATA[
342 + jQuery(document).ready(function () {
343 + var <?php echo $this->prefix . $customField['name']; ?>Options = {
344 + defaultColor: false,
345 + hide: true,
346 + palettes: true
347 + };
348 +
349 + jQuery("#<?php echo $this->prefix . $customField['name']; ?>").wpColorPicker(<?php echo $this->prefix . $customField['name']; ?>Options);
350 + });
351 + //]]>
352 + </script>
353 + <?php
354 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\"><strong>" . $customField['title'] . "</strong></label><br />\n";
355 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"" . $value . "\" size=\"7\" maxlength=\"7\" style=\"width: 100px;\" />\n";
356 + break;
357 + }
358 + case "date": {
359 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></label><br />\n";
360 + // echo "<span style=\"display:inline;\"><strong>" . $customField[ 'title' ] . "</strong></span>&nbsp;&nbsp;\n";
361 + $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'],
362 + true ) ? $customField['default'] : get_post_meta( $post->ID,
363 + $this->prefix . $customField['name'], true ) );
364 + // Date picker using WP's built-in Datepicker jQuery plugin ?>
365 + <script type="text/javascript">
366 + //<![CDATA[
367 + jQuery(document).ready(function () {
368 + jQuery("#<?php echo $this->prefix . $customField['name']; ?>").datepicker(
369 + {
370 + <?php if ( isset( $customField['custom_functions'] ) ) {
371 + echo $customField['custom_functions'];
372 + } ?>
373 + changeMonth: true,
374 + changeYear: true
375 + }
376 + );
377 + });
378 + //]]>
379 + </script>
380 + <?php
381 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"" . htmlspecialchars( $value ) . "\" style=\"width: 175px;\" />\n";
382 + break;
383 + }
384 + case "datetime": {
385 + echo "<span style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></span><br />\n";
386 + $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'],
387 + true ) ? $customField['default'] : get_post_meta( $post->ID,
388 + $this->prefix . $customField['name'], true ) );
389 + foreach ( $value as $k => $v ) {
390 + $value[ $k ] = htmlspecialchars( $v );
391 + }
392 + // Date picker using WP's built-in Datepicker jQuery plugin
393 + // Time picker using jQuery UI Timepicker: http://fgelinas.com/code/timepicker
394 + ?>
395 + <script type="text/javascript">
396 + //<![CDATA[
397 + jQuery(document).ready(function () {
398 + jQuery("#<?php echo $this->prefix . $customField['name']; ?>_date").datepicker(
399 + {
400 + changeMonth: true,
401 + changeYear: true
402 + }
403 + );
404 + jQuery("#<?php echo $this->prefix . $customField['name']; ?>_time").timepicker(
405 + {
406 + defaultTime: 'now'
407 + }
408 + );
409 + });
410 + //]]>
411 + </script>
412 + <?php
413 + echo "<label for=\"" . $this->prefix . $customField['name'] . "_date\" style=\"display:inline;\"><em>" . _x( 'Date',
414 + 'Date field label', 'timed-content' ) . ":</em></label>\n";
415 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "[date]\" id=\"" . $this->prefix . $customField['name'] . "_date\" value=\"" . $value['date'] . "\" style=\"width: 175px;\" />\n";
416 + echo "<label for=\"" . $this->prefix . $customField['name'] . "_time\" style=\"display:inline;\"><em>" . _x( 'Time',
417 + 'Time field label', 'timed-content' ) . ":</em></label>\n";
418 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "[time]\" id=\"" . $this->prefix . $customField['name'] . "_time\" value=\"" . $value['time'] . "\" style=\"width: 125px;\" />\n";
419 + break;
420 + }
421 + case "number": {
422 + (int) $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'],
423 + true ) ? $customField['default'] : get_post_meta( $post->ID,
424 + $this->prefix . $customField['name'], true ) );
425 + // Number picker using WP's built-in Spinner jQuery plugin ?>
426 + <script type="text/javascript">
427 + //<![CDATA[
428 + jQuery(document).ready(function () {
429 + jQuery("#<?php echo $this->prefix . $customField['name']; ?>").spinner(
430 + {
431 + stop: function (event, ui) {
432 + jQuery(this).trigger("change");
433 + },
434 + <?php if ( isset( $customField['min'] ) ) { ?>min: <?php echo $customField['min']; ?>, <?php } ?>
435 + <?php if ( isset( $customField['max'] ) ) { ?>max: <?php echo $customField['max']; ?> <?php } ?>
436 + }
437 + );
438 + });
439 + //]]>
440 + </script>
441 + <?php
442 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\" style=\"display:inline;\"><strong>" . $customField['title'] . "</strong></label><br />\n";
443 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"" . $value . "\" size=\"2\" />\n";
444 + break;
445 + }
446 + case "hidden":
447 + {
448 + $value = ( "" === get_post_meta( $post->ID,
449 + $this->prefix . $customField['name'],
450 + true ) ? $customField['default'] : get_post_meta( $post->ID,
451 + $this->prefix . $customField['name'], true ) );
351 452 // Hidden field
352 - echo "<input type=\"hidden\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" value=\"" . $value . "\" />\n";
453 + echo "<input type=\"hidden\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"" . $value . "\" />\n";
353 454 break;
354 455 }
355 - default: {
356 - $value = ( "" === get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) ? $customField['default'] : get_post_meta( $post->ID, $this->prefix . $customField['name'], true ) );
456 + default:
457 + {
458 + $value = ( "" === get_post_meta( $post->ID,
459 + $this->prefix . $customField['name'],
460 + true ) ? $customField['default'] : get_post_meta( $post->ID,
461 + $this->prefix . $customField['name'], true ) );
357 462 // Plain text field
358 - echo "<label for=\"" . $this->prefix . $customField[ 'name' ] . "\"><strong>" . $customField[ 'title' ] . "</strong></label>\n";
359 - echo "<input type=\"text\" name=\"" . $this->prefix . $customField[ 'name' ] . "\" id=\"" . $this->prefix . $customField[ 'name' ] . "\" value=\"" . $value . "\" />\n";
463 + echo "<label for=\"" . $this->prefix . $customField['name'] . "\"><strong>" . $customField['title'] . "</strong></label><br/>\n";
464 + echo "<input type=\"text\" name=\"" . $this->prefix . $customField['name'] . "\" id=\"" . $this->prefix . $customField['name'] . "\" value=\"" . $value . "\" />\n";
360 465 break;
361 466 }
362 - }
363 - ?>
364 - <?php if ( isset( $customField[ 'description' ] ) ) echo "<p>" . $customField[ 'description' ] . "</p>\n"; ?>
365 - </div>
467 + }
468 + ?>
469 + <?php if ( isset( $customField['description'] ) ) {
470 + echo "<p>" . $customField['description'] . "</p>\n";
471 + } ?>
472 + </div>
366 473 <?php
367 - }
368 - } ?>
369 - </div>
370 - <?php
474 + }
475 + } ?>
476 + </div>
477 + <?php
478 + }
479 +
480 + /**
481 + * Save the new Custom Fields values
482 + */
483 + function saveCustomFields( $post_id, $post ) {
484 + // Only save if the user intends to save
485 + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
486 + return;
371 487 }
372 - /**
373 - * Save the new Custom Fields values
374 - */
375 - function saveCustomFields( $post_id, $post ) {
376 - // Only save if the user intends to save
377 - if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
378 - return;
379 - // Make sure the Save request is coming from the right place
380 - if ( !isset( $_POST[ $this->handle . '_wpnonce' ] ) || !wp_verify_nonce( $_POST[ $this->handle . '_wpnonce' ], $this->handle ) )
381 - return;
382 - // Make sure the user can edit this specific post
383 - if ( !current_user_can( 'edit_post', $post_id ) )
384 - return;
385 - // Make sure this meta box is associated with the right post types
386 - if ( ! in_array( $post->post_type, $this->postTypes ) )
387 - return;
388 - foreach ( $this->customFields as $customField ) {
389 - if ( current_user_can( $customField['capability'], $post_id ) ) {
390 - if ( isset( $_POST[ $this->prefix . $customField['name'] ] ) ) {
391 - if ( is_array( $_POST[ $this->prefix . $customField['name'] ] ) ) {
392 - foreach ( $_POST[ $this->prefix . $customField['name'] ] as $k => $v )
393 - $_POST[ $this->prefix . $customField['name'] ][$k] = trim( $v );
394 - } else
395 - $_POST[ $this->prefix . $customField['name'] ] = trim( $_POST[ $this->prefix . $customField['name'] ] );
396 - $value = $_POST[ $this->prefix . $customField['name'] ];
397 - // Auto-paragraphs for any WYSIWYG
398 - if ( $customField['type'] == "wysiwyg" ) $value = wpautop( $value );
399 - if ( $customField['type'] == "checkbox" ) $value = "yes";
400 - if ( $customField['type'] == "number" ) $value = intval( $value );
401 - update_post_meta( $post_id, $this->prefix . $customField[ 'name' ], $value );
488 + // Make sure the Save request is coming from the right place
489 + if ( ! isset( $_POST[ $this->handle . '_wpnonce' ] ) || ! wp_verify_nonce( $_POST[ $this->handle . '_wpnonce' ],
490 + $this->handle ) ) {
491 + return;
492 + }
493 + // Make sure the user can edit this specific post
494 + if ( ! current_user_can( 'edit_post', $post_id ) ) {
495 + return;
496 + }
497 + // Make sure this meta box is associated with the right post types
498 + if ( ! in_array( $post->post_type, $this->postTypes ) ) {
499 + return;
500 + }
501 + foreach ( $this->customFields as $customField ) {
502 + if ( current_user_can( $customField['capability'], $post_id ) ) {
503 + if ( isset( $_POST[ $this->prefix . $customField['name'] ] ) ) {
504 + if ( is_array( $_POST[ $this->prefix . $customField['name'] ] ) ) {
505 + foreach ( $_POST[ $this->prefix . $customField['name'] ] as $k => $v ) {
506 + $_POST[ $this->prefix . $customField['name'] ][ $k ] = trim( $v );
507 + }
402 508 } else {
403 - delete_post_meta( $post_id, $this->prefix . $customField[ 'name' ] );
509 + $_POST[ $this->prefix . $customField['name'] ] = trim( $_POST[ $this->prefix . $customField['name'] ] );
404 510 }
511 + $value = $_POST[ $this->prefix . $customField['name'] ];
512 + // Auto-paragraphs for any WYSIWYG
513 + if ( $customField['type'] == "wysiwyg" ) {
514 + $value = wpautop( $value );
515 + }
516 + if ( $customField['type'] == "checkbox" ) {
517 + $value = "yes";
518 + }
519 + if ( $customField['type'] == "number" ) {
520 + $value = intval( $value );
521 + }
522 + update_post_meta( $post_id, $this->prefix . $customField['name'], $value );
523 + } else {
524 + delete_post_meta( $post_id, $this->prefix . $customField['name'] );
405 525 }
406 526 }
407 527 }
408 -
409 -
410 - } // End Class
411 -
412 -} // End if class exists statement
413 -?>
528 + }
529 +}