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