PluginProbe
FeedWordPress / 2016.1211
FeedWordPress v2016.1211
trunk 0.8 0.9 0.91 0.95 0.96 0.97 0.98 0.981 0.99 0.991 0.992 0.993 2008.1030 2008.1101 2008.1105 2008.1214 2009.0612 2009.0613 2009.0618 2009.0707 2009.1111 2009.1112 2010.0127 2010.0528 All 65 releases
← All changes | posts-page.php +305 -316 2010.01272016.1211 View file →
@@ -10,108 +10,117 @@
10 10 * Construct the posts page object.
11 11 *
12 12 * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings
13 13 */
14 - function FeedWordPressPostsPage ($link = NULL) {
15 - FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresspostspage', $link);
16 - $this->dispatch = 'feedwordpress_posts_settings';
14 + public function __construct( $link = -1 ) {
15 + if (is_numeric($link) and -1 == $link) :
16 + $link = parent::submitted_link();
17 + endif;
18 +
19 + parent::__construct('feedwordpresspostspage', $link);
20 + $this->dispatch = 'feedwordpress_admin_page_posts';
17 21 $this->filename = __FILE__;
18 22 $this->updatedPosts = new UpdatedPostsControl($this);
23 +
24 + $this->pagenames = array(
25 + 'default' => 'Posts',
26 + 'settings-update' => 'Syndicated posts',
27 + 'open-sheet' => 'Syndicated Posts & Links',
28 + );
19 29 } /* FeedWordPressPostsPage constructor */
20 30
21 - function accept_POST ($post) {
22 - global $wpdb;
23 -
24 - $link_id = $this->link->id;
31 + function save_settings ($post) {
32 + // custom post settings
33 + $custom_settings = $this->custom_post_settings();
25 34
26 - // User mashed a Save Changes button
27 - if (isset($post['save']) or isset($post['submit'])) :
28 - // custom post settings
29 - foreach ($post['notes'] as $mn) :
35 + foreach ($post['notes'] as $mn) :
36 + if (isset($mn['key0'])) :
30 37 $mn['key0'] = trim($mn['key0']);
31 - $mn['key1'] = trim($mn['key1']);
32 -
33 38 if (strlen($mn['key0']) > 0) :
34 39 unset($custom_settings[$mn['key0']]); // out with the old
35 40 endif;
41 + endif;
36 42
43 + if (isset($mn['key1'])) :
44 + $mn['key1'] = trim($mn['key1']);
45 +
37 46 if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
38 47 $custom_settings[$mn['key1']] = $mn['value']; // in with the new
39 48 endif;
40 - endforeach;
41 -
42 - $this->updatedPosts->accept_POST($post);
43 - if ($this->for_feed_settings()) :
44 - $alter = array ();
45 -
46 - $this->link->settings['postmeta'] = serialize($custom_settings);
47 -
48 - if (isset($post['resolve_relative'])) :
49 - $this->link->settings['resolve relative'] = $post['resolve_relative'];
50 - endif;
51 -
52 - // Post status, comment status, ping status
53 - foreach (array('post', 'comment', 'ping') as $what) :
54 - $sfield = "feed_{$what}_status";
55 - if (isset($post[$sfield])) :
56 - if ($post[$sfield]=='site-default') :
57 - unset($this->link->settings["{$what} status"]);
58 - else :
59 - $this->link->settings["{$what} status"] = $post[$sfield];
60 - endif;
61 - endif;
62 - endforeach;
49 + endif;
50 + endforeach;
63 51
64 - $alter[] = "link_notes = '".$wpdb->escape($this->link->settings_to_notes())."'";
65 - $alter_set = implode(", ", $alter);
66 -
67 - // issue update query
68 - $result = $wpdb->query("
69 - UPDATE $wpdb->links
70 - SET $alter_set
71 - WHERE link_id='$link_id'
72 - ");
73 - $this->updated = true;
74 -
75 - // reload link information from DB
76 - if (function_exists('clean_bookmark_cache')) :
77 - clean_bookmark_cache($link_id);
78 - endif;
79 - $link =& new SyndicatedLink($link_id);
80 - else :
81 - // update_option ...
82 - if (isset($post['feed_post_status'])) :
83 - update_option('feedwordpress_syndicated_post_status', $post['feed_post_status']);
84 - endif;
52 + $this->updatedPosts->accept_POST($post);
53 + if ($this->for_feed_settings()) :
54 + $alter = array ();
85 55
86 - update_option('feedwordpress_custom_settings', serialize($custom_settings));
87 -
88 - update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']);
89 - update_option('feedwordpress_use_aggregator_source_data', $_REQUEST['use_aggregator_source_data']);
90 - update_option('feedwordpress_formatting_filters', $_REQUEST['formatting_filters']);
91 -
92 - if (isset($post['resolve_relative'])) :
93 - update_option('feedwordpress_resolve_relative', $post['resolve_relative']);
56 + $this->link->settings['postmeta'] = serialize($custom_settings);
57 +
58 + if (isset($post['resolve_relative'])) :
59 + $this->link->settings['resolve relative'] = $post['resolve_relative'];
60 + endif;
61 + if (isset($post['munge_permalink'])) :
62 + $this->link->settings['munge permalink'] = $post['munge_permalink'];
63 + endif;
64 + if (isset($post['munge_comments_feed_links'])) :
65 + $this->link->settings['munge comments feed links'] = $post['munge_comments_feed_links'];
66 + endif;
67 +
68 + // Post status, comment status, ping status
69 + foreach (array('post', 'comment', 'ping') as $what) :
70 + $sfield = "feed_{$what}_status";
71 + if (isset($post[$sfield])) :
72 + if ($post[$sfield]=='site-default') :
73 + unset($this->link->settings["{$what} status"]);
74 + else :
75 + $this->link->settings["{$what} status"] = $post[$sfield];
76 + endif;
94 77 endif;
95 - if (isset($_REQUEST['feed_comment_status']) and ($_REQUEST['feed_comment_status'] == 'open')) :
96 - update_option('feedwordpress_syndicated_comment_status', 'open');
78 + endforeach;
79 +
80 + if (isset($post['syndicated_post_type'])) :
81 + if ($post['syndicated_post_type']=='default') :
82 + unset($this->link->settings['syndicated post type']);
97 83 else :
98 - update_option('feedwordpress_syndicated_comment_status', 'closed');
84 + $this->link->settings['syndicated post type'] = $post['syndicated_post_type'];
99 85 endif;
86 + endif;
100 87
101 - if (isset($_REQUEST['feed_ping_status']) and ($_REQUEST['feed_ping_status'] == 'open')) :
102 - update_option('feedwordpress_syndicated_ping_status', 'open');
103 - else :
104 - update_option('feedwordpress_syndicated_ping_status', 'closed');
105 - endif;
106 -
107 - $this->updated = true;
88 + else :
89 + // update_option ...
90 + if (isset($post['feed_post_status'])) :
91 + update_option('feedwordpress_syndicated_post_status', $post['feed_post_status']);
108 92 endif;
109 93
110 - // Probably a "Go" button for the drop-down
111 - else :
112 - $this->updated = false;
113 - endif;
94 + update_option('feedwordpress_custom_settings', serialize($custom_settings));
95 +
96 + update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']);
97 + update_option('feedwordpress_use_aggregator_source_data', $_REQUEST['use_aggregator_source_data']);
98 + update_option('feedwordpress_formatting_filters', $_REQUEST['formatting_filters']);
99 +
100 + if (isset($post['resolve_relative'])) :
101 + update_option('feedwordpress_resolve_relative', $post['resolve_relative']);
102 + endif;
103 + if (isset($post['munge_comments_feed_links'])) :
104 + update_option('feedwordpress_munge_comments_feed_links', $post['munge_comments_feed_links']);
105 + endif;
106 + if (isset($_REQUEST['feed_comment_status']) and ($_REQUEST['feed_comment_status'] == 'open')) :
107 + update_option('feedwordpress_syndicated_comment_status', 'open');
108 + else :
109 + update_option('feedwordpress_syndicated_comment_status', 'closed');
110 + endif;
111 +
112 + if (isset($_REQUEST['feed_ping_status']) and ($_REQUEST['feed_ping_status'] == 'open')) :
113 + update_option('feedwordpress_syndicated_ping_status', 'open');
114 + else :
115 + update_option('feedwordpress_syndicated_ping_status', 'closed');
116 + endif;
117 +
118 + if (isset($post['syndicated_post_type'])) :
119 + update_option('feedwordpress_syndicated_post_type', $post['syndicated_post_type']);
120 + endif;
121 + endif;
122 + parent::save_settings($post);
114 123 }
115 124
116 125 /**
117 126 * Outputs "Publication" settings box.
@@ -123,73 +132,41 @@
123 132 *
124 133 * @uses FeedWordPressPostsPage::these_posts_phrase()
125 134 * @uses FeedWordPress::syndicated_status()
126 135 * @uses SyndicatedLink::syndicated_status()
127 - * @uses SyndicatedPost::use_api()
128 - * @uses fwp_option_box_opener()
129 - * @uses fwp_option_box_closer()
130 136 */
131 137 /*static*/ function publication_box ($page, $box = NULL) {
132 - global $fwp_path;
133 -
134 - $post_status_global = FeedWordPress::syndicated_status('post', /*default=*/ 'publish');
135 138 $thesePosts = $page->these_posts_phrase();
136 -
137 - // Set up array for selector
138 - $setting = array(
139 - 'publish' => array ('label' => "Publish %s immediately", 'checked' => ''),
140 - 'draft' => array('label' => "Save %s as drafts", 'checked' => ''),
141 - 'private' => array('label' => "Save %s as private posts", 'checked' => ''),
139 + $postSelector = array(
140 + 'publish' => "Publish %s immediately",
141 + 'pending' => "Hold %s for review; mark as Pending",
142 + 'draft' => "Save %s as drafts",
143 + 'private' => "Save %s as private posts",
142 144 );
143 - if (SyndicatedPost::use_api('post_status_pending')) :
144 - $setting['pending'] = array('label' => "Hold %s for review; mark as Pending", 'checked' => '');
145 - endif;
145 + $labels = array();
146 + foreach ($postSelector as $index => $value) :
147 + $postSelector[$index] = sprintf(__($value), $thesePosts);
148 + $labels[$index] = __(str_replace(' %s', '', strtolower(strtok($value, ';'))));
149 + endforeach;
150 +
151 + $params = array(
152 + 'input-name' => 'feed_post_status',
153 + 'setting-default' => NULL,
154 + 'global-setting-default' => 'publish',
155 + 'labels' => $labels,
156 + );
146 157
147 -
148 - if ($page->for_feed_settings()) :
149 - $href = $fwp_path.'/'.basename(__FILE__);
150 - $currently = str_replace('%s', '', strtolower(strtok($setting[$post_status_global]['label'], ';')));
151 - $setting['site-default'] = array('label' => "Use <a href=\"admin.php?page=${href}\">site-wide setting</a>", 'checked' => '');
152 - $setting['site-default']['label'] .= " (currently: <strong>${currently}</strong>)";
153 -
154 - $checked = $page->link->syndicated_status('post', 'site-default', /*fallback=*/ false);
155 - else :
156 - $checked = $post_status_global;
157 - endif;
158 -
159 - // Re-order appropriately
160 - $selector = array();
161 - $order = array(
162 - 'site-default',
163 - 'publish',
164 - 'pending',
165 - 'draft',
166 - 'private',
167 - );
168 - foreach ($order as $line) :
169 - if (isset($setting[$line])) :
170 - $selector[$line] = $setting[$line];
171 - endif;
172 - endforeach;
173 - $selector[$checked]['checked'] = ' checked="checked"';
174 -
175 158 // Hey ho, let's go...
176 159 ?>
177 - <style type="text/css">
178 - #syndicated-publication-form th { width: 27%; vertical-align: top; }
179 - #syndicated-publication-form td { width: 73%; vertical-align: top; }
180 - </style>
181 -
182 - <table id="syndicated-publication-form" class="form-table" cellspacing="2" cellpadding="5">
160 + <table id="syndicated-publication-form" class="edit-form narrow">
183 161 <tr><th scope="row"><?php _e('New posts:'); ?></th>
184 - <td><ul class="options">
185 - <?php foreach ($selector as $code => $li) : ?>
186 - <li><label><input type="radio" name="feed_post_status"
187 - value="<?php print $code; ?>"<?php print $li['checked']; ?> />
188 - <?php print str_replace('%s', $thesePosts, $li['label']); ?></label></li>
189 - <?php endforeach; ?>
190 - </ul></td>
191 - </tr>
162 + <td><?php
163 + $this->setting_radio_control(
164 + 'post status', 'syndicated_post_status',
165 + $postSelector, $params
166 + );
167 + ?>
168 + </td></tr>
192 169
193 170 <?php $page->updatedPosts->display(); ?>
194 171 </table>
195 172
@@ -203,31 +180,21 @@
203 180 * @param object $page of class FeedWordPressPostsPage tells us whether this is
204 181 * a page for one feed's settings or for global defaults
205 182 * @param array $box
206 183 *
207 - * @uses fwp_option_box_opener()
208 - * @uses fwp_option_box_closer()
209 184 */
210 185 function formatting_box ($page, $box = NULL) {
211 - global $fwp_path;
212 186 $thesePosts = $page->these_posts_phrase();
213 - $global_resolve_relative = get_option('feedwordpress_resolve_relative', 'yes');
187 +
214 188 if ($page->for_feed_settings()) :
215 189 $formatting_filters = null;
216 - $resolve_relative = $page->link->setting('resolve relative', NULL, 'default');
217 190 $url = preg_replace('|/+$|', '', $page->link->homepage());
218 - $setting = array(
219 - 'yes' => __('resolve relative URIs'),
220 - 'no' => __('leave relative URIs unresolved'),
221 - );
222 - $href = $fwp_path.'/'.basename(__FILE__);
223 191 else :
224 192 $formatting_filters = get_option('feedwordpress_formatting_filters', 'no');
225 - $resolve_relative = $global_resolve_relative;
226 193 $url = 'http://example.com';
227 194 endif;
228 195 ?>
229 - <table class="form-table" cellspacing="2" cellpadding="5">
196 + <table class="edit-form narrow">
230 197 <?php if (!is_null($formatting_filters)) : ?>
231 198
232 199 <tr><th scope="row">Formatting filters:</th>
233 200 <td><select name="formatting_filters" size="1">
@@ -242,22 +209,32 @@
242 209
243 210 <?php endif; ?>
244 211
245 212 <tr><th scope="row">Relative URIs:</th>
246 - <td>If link or image in a syndicated post from <code><?php print $url; ?></code>
213 + <td><p>If link or image in a syndicated post from <code><?php print $url; ?></code>
247 214 refers to a partial URI like <code>/about</code>, where should
248 215 the syndicated copy point to?</p>
249 216
250 - <ul>
251 - <?php if ($page->for_feed_settings()) : ?>
252 - <li><p><label><input type="radio" name="resolve_relative" value='default' <?php echo ($resolve_relative=='default')?' checked="checked"':''; ?>/> Use <a href="admin.php?page=<?php print $href; ?>">site-wide setting</a><br/>
253 - <small style="margin-left: 2.0em;">Currently: <strong><?php print $setting[$global_resolve_relative]; ?></strong></small></label></p></li>
254 - <?php endif; ?>
255 - <li><p><label><input type="radio" name="resolve_relative" value="yes"<?php echo ($resolve_relative!='no' and $resolve_relative!='default')?' checked="checked"':''; ?>/> Resolve the URI so it points to <code><?php print $url; ?></code><br/>
256 - <small style="margin-left: 2.0em;"><code>/contact</code> is rewritten as <code><?php print $url; ?>/contact</code></label></small></p></li>
257 - <li><p><label><input type="radio" name="resolve_relative" value="no"<?php echo ($resolve_relative=='no')?' checked="checked"':''; ?>/> Leave relative URIs unchanged, so they point to this site<br/>
258 - <small style="margin-left: 2.0em;"><code>/contact</code> is left as <code>/contact</code></small></label></li>
259 - </ul>
217 + <?php
218 + $options = array(
219 + 'yes' => 'Resolve the URI so it points to <code>'.$url.'</code><br/><small style="margin-left: 2.0em;"><code>/contact</code> is rewritten as <code>'.$url.'/contact</code></small>',
220 + 'no' => 'Leave relative URIs unchanged, so they point to this site<br/><small style="margin-left: 2.0em;"><code>/contact</code> is left as <code>/contact</code></small>',
221 + );
222 + $params = array(
223 + 'setting-default' => 'default',
224 + 'global-setting-default' => 'yes',
225 + 'labels' => array(
226 + 'yes' => __('resolve relative URIs'),
227 + 'no' => __('leave relative URIs unresolved'),
228 + ),
229 + 'default-input-value' => 'default',
230 + );
231 +
232 + $this->setting_radio_control(
233 + 'resolve relative', 'resolve_relative',
234 + $options, $params
235 + );
236 + ?>
260 237 </td></tr>
261 238
262 239 </table>
263 240 <?php
@@ -270,23 +247,39 @@
270 247 * @param object $page of class FeedWordPressPostsPage tells us whether this is
271 248 * a page for one feed's settings or for global defaults
272 249 * @param array $box
273 250 *
274 - * @uses fwp_option_box_opener()
275 - * @uses fwp_option_box_closer()
276 251 */
277 252 /*static*/ function links_box ($page, $box = NULL) {
278 - $munge_permalink = get_option('feedwordpress_munge_permalink');
279 - $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
253 + $setting = array(
254 + 'munge_permalink' => array(
255 + 'yes' => __('The copy on the original website'),
256 + 'no' => __('The local copy on this website'),
257 + ),
258 + );
259 +
260 + if (!$page->for_feed_settings()) :
261 + $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
262 + endif;
280 263 ?>
281 - <table class="form-table" cellspacing="2" cellpadding="5">
282 - <tr><th scope="row">Permalinks:</th>
283 - <td><select name="munge_permalink" size="1">
284 - <option value="yes"<?php echo ($munge_permalink=='yes')?' selected="selected"':''; ?>>point to the copy on the original website</option>
285 - <option value="no"<?php echo ($munge_permalink=='no')?' selected="selected"':''; ?>>point to the local copy on this website</option>
286 - </select></td>
287 - </tr>
264 + <table class="edit-form narrow">
265 + <tr><th scope="row">Permalinks point to:</th>
266 + <td><?php
288 267
268 + $params = array(
269 + 'setting-default' => 'default',
270 + 'global-setting-default' => 'yes',
271 + 'default-input-value' => 'default',
272 + );
273 + $this->setting_radio_control(
274 + 'munge permalink', 'munge_permalink',
275 + $setting['munge_permalink'], $params
276 + );
277 + ?>
278 +
279 + </td></tr>
280 +
281 + <?php if (!$page->for_feed_settings()) : ?>
289 282 <tr><th scope="row">Posts from aggregator feeds:</th>
290 283 <td><ul class="options">
291 284 <li><label><input type="radio" name="use_aggregator_source_data" value="no"<?php echo ($use_aggregator_source_data!="yes")?' checked="checked"':''; ?>> Give the aggregator itself as the source of posts from an aggregator feed.</label></li>
292 285 <li><label><input type="radio" name="use_aggregator_source_data" value="yes"<?php echo ($use_aggregator_source_data=="yes")?' checked="checked"':''; ?>> Give the original source of the post as the source, not the aggregator.</label></li>
@@ -294,8 +287,9 @@
294 287 <p class="setting-description">Some feeds (for example, those produced by FeedWordPress) aggregate content from several different sources, and include information about the original source of the post.
295 288 This setting controls what FeedWordPress will give as the source of posts from
296 289 such an aggregator feed.</p>
297 290 </td></tr>
291 + <?php endif; ?>
298 292 </table>
299 293
300 294 <?php
301 295 } /* FeedWordPressPostsPage::links_box() */
@@ -307,73 +301,102 @@
307 301 * @param object $page of class FeedWordPressPostsPage tells us whether this is
308 302 * a page for one feed's settings or for global defaults
309 303 * @param array $box
310 304 *
311 - * @uses fwp_option_box_opener()
312 - * @uses fwp_option_box_closer()
313 305 */
314 306 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
315 - $setting = array();
316 - $selector = array();
317 -
318 307 $whatsits = array(
319 308 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
320 309 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
321 310 );
322 311 $onThesePosts = 'on '.$page->these_posts_phrase();
312 +
313 + $mcflSettings = array(
314 + "yes" => __('Point to comment feeds from the original website (when provided by the syndicated feed)'),
315 + "no" => __('Point to local comment feeds on this website'),
316 + );
317 + $mcflParams = array(
318 + 'setting-default' => 'default',
319 + 'global-setting-default' => 'yes',
320 + 'labels' => array(
321 + 'yes' => __('comment feeds from the original website'),
322 + 'no' => __('local comment feeds on this website')
323 + ),
324 + 'default-input-value' => 'default',
325 + );
323 326
327 + $settings = array(); $params = array();
324 328 foreach ($whatsits as $what => $how) :
325 329 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
326 330
327 331 // Set up array for selector
328 - $setting = array(
329 - 'open' => array ('label' => "{$how['accept']} %s", 'checked' => ''),
330 - 'closed' => array('label' => "Don't ".strtolower($how['accept'])." %s", 'checked' => ''),
332 + $settings[$what] = array(
333 + 'open' => sprintf(__("{$how['accept']} %s"), __($onThesePosts)),
334 + 'closed' => sprintf(__("Don't ".strtolower($how['accept'])." %s"), __($onThesePosts)),
331 335 );
332 - if ($page->for_feed_settings()) :
333 - $href = $fwp_path.'/'.basename(__FILE__);
334 - $currently = trim(str_replace('%s', '', strtolower(strtok($setting[$whatsits[$what]['default']]['label'], ';'))));
335 - $setting['site-default'] = array('label' => "Use <a href=\"admin.php?page=${href}\">site-wide setting</a>", 'checked' => '');
336 - $setting['site-default']['label'] .= " (currently: <strong>${currently}</strong>)";
337 -
338 - $checked = $page->link->syndicated_status($what, 'site-default', /*fallback=*/ false);
339 - else :
340 - $checked = $whatsits[$what]['default'];
341 - endif;
342 -
343 - // Re-order appropriately
344 - $selector[$what] = array();
345 - $order = array(
346 - 'site-default',
347 - 'open',
348 - 'closed',
336 + $params[$what] = array(
337 + 'input-name' => "feed_${what}_status",
338 + 'setting-default' => NULL,
339 + 'global-setting-default' => FeedWordPress::syndicated_status($what, /*default=*/ 'closed'),
340 + 'labels' => array(
341 + 'open' => strtolower(__($how['accept'])),
342 + 'closed' => strtolower(__("Don't ".$how['accept'])),
343 + ),
349 344 );
350 - foreach ($order as $line) :
351 - if (isset($setting[$line])) :
352 - $selector[$what][$line] = $setting[$line];
353 - endif;
354 - endforeach;
355 - $selector[$what][$checked]['checked'] = ' checked="checked"';
356 345 endforeach;
357 346
358 347 // Hey ho, let's go...
359 348 ?>
360 - <table class="form-table" cellspacing="2" cellpadding="5">
349 + <table class="edit-form narrow">
361 350 <?php foreach ($whatsits as $what => $how) : ?>
351 +
362 352 <tr><th scope="row"><?php print $how['label']; ?>:</th>
363 - <td><ul class="options">
364 - <?php foreach ($selector[$what] as $code => $li) : ?>
365 - <li><label><input type="radio" name="feed_<?php print $what; ?>_status"
366 - value="<?php print $code; ?>"<?php print $li['checked']; ?> />
367 - <?php print trim(str_replace('%s', $onThesePosts, $li['label'])); ?></label></li>
368 - <?php endforeach; ?>
369 - </ul></td></tr>
353 + <td><?php
354 + $this->setting_radio_control(
355 + "$what status", "syndicated_${what}_status",
356 + $settings[$what], $params[$what]
357 + );
358 + ?></td></tr>
359 +
370 360 <?php endforeach; ?>
361 +
362 + <tr><th scope="row"><?php _e('Comment feeds'); ?></th>
363 + <td><p>When WordPress feeds and templates link to comments
364 + feeds for <?php print $page->these_posts_phrase(); ?>, the
365 + URLs for the feeds should...</p>
366 + <?php
367 + $this->setting_radio_control(
368 + "munge comments feed links", "munge_comments_feed_links",
369 + $mcflSettings, $mcflParams
370 + );
371 + ?></td></tr>
371 372 </table>
372 373
373 374 <?php
374 375 } /* FeedWordPressPostsPage::comments_and_pings_box() */
375 376
377 + /*static*/ function custom_post_settings ($page = NULL) {
378 + if (is_null($page)) :
379 + $page = $this;
380 + endif;
381 +
382 + if ($page->for_feed_settings()) :
383 + $custom_settings = $page->link->setting("postmeta", NULL, array());
384 + else :
385 + $custom_settings = get_option('feedwordpress_custom_settings');
386 + endif;
387 +
388 + if ($custom_settings and !is_array($custom_settings)) :
389 + $custom_settings = unserialize($custom_settings);
390 + endif;
391 +
392 + if (!is_array($custom_settings)) :
393 + $custom_settings = array();
394 + endif;
395 +
396 + return $custom_settings;
397 + } /* FeedWordPressPostsPage::custom_post_settings() */
398 +
376 399 /**
377 400 * Output "Custom Post Settings" settings box
378 401 *
379 402 * @since 2009.0713
@@ -379,35 +402,14 @@
379 402 * @since 2009.0713
380 403 * @param object $page of class FeedWordPressPostsPage tells us whether this is
381 404 * a page for one feed's settings or for global defaults
382 405 * @param array $box
383 - *
384 - * @uses fwp_option_box_opener()
385 - * @uses fwp_option_box_closer()
386 406 */
387 407 /*static*/ function custom_post_settings_box ($page, $box = NULL) {
388 - if ($page->for_feed_settings()) :
389 - $custom_settings = $page->link->settings["postmeta"];
390 - if ($custom_settings and !is_array($custom_settings)) :
391 - $custom_settings = unserialize($custom_settings);
392 - endif;
393 -
394 - if (!is_array($custom_settings)) :
395 - $custom_settings = array();
396 - endif;
397 - else :
398 - $custom_settings = get_option('feedwordpress_custom_settings');
399 - if ($custom_settings and !is_array($custom_settings)) :
400 - $custom_settings = unserialize($custom_settings);
401 - endif;
402 -
403 - if (!is_array($custom_settings)) :
404 - $custom_settings = array();
405 - endif;
406 - endif;
407 -
408 + $custom_settings = FeedWordPressPostsPage::custom_post_settings($page);
408 409 ?>
409 410 <div id="postcustomstuff">
411 + <p>Custom fields can be used to add extra metadata to a post that you can <a href="http://codex.wordpress.org/Using_Custom_Fields">use in your theme</a>.</p>
410 412 <table id="meta-list" cellpadding="3">
411 413 <tr>
412 414 <th>Key</th>
413 415 <th>Value</th>
@@ -415,14 +417,18 @@
415 417 </tr>
416 418
417 419 <?php
418 420 $i = 0;
419 - foreach ($custom_settings as $key => $value) :
421 + $testerButton = '<br/><button id="xpath-test-%d"'
422 + .'class="xpath-test"'
423 + .'>test expression</button>';
424 + foreach ($custom_settings as $key => $value) :
420 425 ?>
421 426 <tr style="vertical-align:top">
422 - <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo wp_specialchars($key, 'both'); ?>" />
423 - <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo wp_specialchars($key, 'both'); ?>" /></th>
424 - <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo wp_specialchars($value, 'both'); ?></textarea></td>
427 + <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo esc_html($key); ?>" />
428 + <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
429 + <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo esc_html($value); ?></textarea>
430 + <?php print sprintf($testerButton, $i); ?></td>
425 431 <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
426 432 <option value="update">save changes</option>
427 433 <option value="delete">delete this setting</option>
428 434 </select></td>
@@ -432,11 +438,17 @@
432 438 $i++;
433 439 endforeach;
434 440 ?>
435 441
436 - <tr>
442 + <tr style="vertical-align: top">
437 443 <th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
438 - <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea></td>
444 + <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea><?php print sprintf($testerButton, $i); ?>
445 + <p>Enter a text value, or a path to a data element from the syndicated item.<br/>
446 + For data elements, you can use an XPath-like syntax wrapped in <code>$( ... )</code>.<br/>
447 + <code>hello</code> = the text value <code><span style="background-color: #30FFA0;">hello</span></code><br/>
448 + <code>$(author/email)</code> = the contents of <code>&lt;author&gt;&lt;email&gt;<span style="background-color: #30FFA0">...</span>&lt;/email&gt;&lt;/author&gt;</code><br/>
449 + <code>$(media:content/@url)</code> = the contents of <code>&lt;media:content url="<span style="background-color: #30FFA0">...</span>"&gt;...&lt;/media:content&gt;</code></p>
450 + </td>
439 451 <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
440 452 </tr>
441 453 </table>
442 454 </div> <!-- id="postcustomstuff" -->
@@ -441,88 +453,65 @@
441 453 </table>
442 454 </div> <!-- id="postcustomstuff" -->
443 455
444 456 <?php
445 - } /* FeedWordPressPostsPage::custom_post_settings_box() */
446 -}
457 + } /* FeedWordPressPostsPage::custom_post_settings_box() */
447 458
448 -function fwp_posts_page () {
449 - global $wpdb, $wp_db_version;
450 - global $fwp_post;
459 + function custom_post_types_box ($page, $box = NULL) {
460 + global $fwp_path;
461 +
462 + // local: syndicated post type // default NULL
463 + // global: syndicated_post_type // default 'post'
464 + // default-input-value => 'default'
465 +
466 + // Get all custom post types
467 + $post_types = get_post_types(array(
468 + '_builtin' => false,
469 + ), 'objects');
451 470
452 - if (FeedWordPress::needs_upgrade()) :
453 - fwp_upgrade_page();
454 - return;
455 - endif;
456 -
457 - // If this is a POST, validate source and user credentials
458 - FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_posts_settings', /*capability=*/ 'manage_links');
459 -
460 - $link = FeedWordPressAdminPage::submitted_link();
461 - $link_id = $link->id;
462 - $postsPage = new FeedWordPressPostsPage($link);
463 -
464 - $mesg = null;
465 -
466 - ////////////////////////////////////////////////
467 - // Process POST request, if any ////////////////
468 - ////////////////////////////////////////////////
469 - if (strtoupper($_SERVER['REQUEST_METHOD'])=='POST') :
470 - $postsPage->accept_POST($fwp_post);
471 - do_action('feedwordpress_admin_page_posts_save', $fwp_post, $postsPage);
472 - endif;
471 + $ul = array();
472 + $ul['post'] = __('Normal WordPress posts');
473 + foreach ($post_types as $post_type) :
474 + $ul[$post_type->name] = __($post_type->labels->name);
475 + endforeach;
476 +
477 + $params = array(
478 + 'global-setting-default' => 'post',
479 + 'default-input-value' => 'default',
480 + );
481 +
482 + // Hey, ho, let's go...
483 + ?>
484 + <table class="edit-form narrow">
485 + <tbody>
486 + <tr><th><?php _e('Custom Post Types:'); ?></th>
487 + <td><p>Incoming syndicated posts should be stored in the
488 + posts database as...</p>
489 + <?php
490 + $this->setting_radio_control(
491 + 'syndicated post type', 'syndicated_post_type',
492 + $ul, $params
493 + );
494 + ?>
495 + </td></tr>
496 + </tbody>
497 + </table>
498 + <?php
499 + } /* FeedWordPressPostsPage::custom_post_types_box() */
473 500
474 - $postsPage->ajax_interface_js();
475 -
476 - if ($postsPage->updated) : ?>
477 -<div class="updated"><p>Syndicated posts settings updated.</p></div>
478 -<?php elseif (!is_null($mesg)) : ?>
479 -<div class="updated"><p><?php print wp_specialchars($mesg, 1); ?></p></div>
480 -<?php endif; ?>
481 -
482 -<?php
483 - $links = FeedWordPress::syndicated_links();
484 - $postsPage->open_sheet('Syndicated Posts & Links');
485 -?>
486 -<style type="text/css">
487 - table.edit-form th, table.form-table th { width: 27%; vertical-align: top; }
488 - table.edit-form td, table.form-table td { width: 73%; vertical-align: top; }
489 - ul.options { margin: 0; padding: 0; list-style: none; }
490 -</style>
491 -<div id="post-body">
492 -<?php
493 -$boxes_by_methods = array(
494 - 'publication_box' => __('Syndicated Posts'),
495 - 'links_box' => __('Links'),
496 - 'formatting_box' => __('Formatting'),
497 - 'comments_and_pings_box' => __('Comments & Pings'),
498 - 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'),
499 -);
500 -
501 -// Feed-level settings don't exist for these.
502 -if ($postsPage->for_feed_settings()) :
503 - unset($boxes_by_methods['links_box']);
504 -endif;
505 -
506 - foreach ($boxes_by_methods as $method => $title) :
507 - fwp_add_meta_box(
508 - /*id=*/ 'feedwordpress_'.$method,
509 - /*title=*/ $title,
510 - /*callback=*/ array('FeedWordPressPostsPage', $method),
511 - /*page=*/ $postsPage->meta_box_context(),
512 - /*context=*/ $postsPage->meta_box_context()
501 + function display () {
502 + $this->boxes_by_methods = array(
503 + 'publication_box' => __('Syndicated Posts'),
504 + 'links_box' => __('Links'),
505 + 'formatting_box' => __('Formatting'),
506 + 'comments_and_pings_box' => __('Comments & Pings'),
507 + 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'),
508 + 'custom_post_types_box' => ('Custom Post Types (advanced database settings)'),
513 509 );
514 - endforeach;
515 - do_action('feedwordpress_admin_page_posts_meta_boxes', $postsPage);
516 -?>
517 - <div class="metabox-holder">
518 -<?php
519 - fwp_do_meta_boxes($postsPage->meta_box_context(), $postsPage->meta_box_context(), $postsPage);
520 -?>
521 - </div> <!-- class="metabox-holder" -->
522 -</div> <!-- id="post-body" -->
523 -<?php
524 - $postsPage->close_sheet();
525 -} /* function fwp_posts_page () */
510 +
511 + parent::display();
512 + } /* FeedWordPressPostsPage::display () */
513 +}
526 514
527 - fwp_posts_page();
515 + $postsPage = new FeedWordPressPostsPage;
516 + $postsPage->display();
528 517