PluginProbe
FeedWordPress / 2010.0602
FeedWordPress v2010.0602
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
feedwordpress / posts-page.php

posts-page.php in FeedWordPress 2010.0602, at posts-page.php

573 lines 22.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 require_once(dirname(__FILE__) . '/admin-ui.php');
3 require_once(dirname(__FILE__) . '/updatedpostscontrol.class.php');
4
5 class FeedWordPressPostsPage extends FeedWordPressAdminPage {
6 var $link = NULL;
7 var $updatedPosts = NULL;
8
9 /**
10 * Construct the posts page object.
11 *
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 */
14 function FeedWordPressPostsPage ($link = NULL) {
15 FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresspostspage', $link);
16 $this->dispatch = 'feedwordpress_posts_settings';
17 $this->filename = __FILE__;
18 $this->updatedPosts = new UpdatedPostsControl($this);
19 } /* FeedWordPressPostsPage constructor */
20
21 function accept_POST ($post) {
22 global $wpdb;
23
24 // User mashed a Save Changes button
25 if (isset($post['save']) or isset($post['submit'])) :
26 // custom post settings
27 $custom_settings = $this->custom_post_settings();
28
29 foreach ($post['notes'] as $mn) :
30 $mn['key0'] = trim($mn['key0']);
31 $mn['key1'] = trim($mn['key1']);
32
33 if (strlen($mn['key0']) > 0) :
34 unset($custom_settings[$mn['key0']]); // out with the old
35 endif;
36
37 if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
38 $custom_settings[$mn['key1']] = $mn['value']; // in with the new
39 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 if (isset($post['munge_permalink'])) :
52 $this->link->settings['munge permalink'] = $post['munge_permalink'];
53 endif;
54 if (isset($post['munge_comments_feed_links'])) :
55 $this->link->settings['munge comments feed links'] = $post['munge_comments_feed_links'];
56 endif;
57
58 // Post status, comment status, ping status
59 foreach (array('post', 'comment', 'ping') as $what) :
60 $sfield = "feed_{$what}_status";
61 if (isset($post[$sfield])) :
62 if ($post[$sfield]=='site-default') :
63 unset($this->link->settings["{$what} status"]);
64 else :
65 $this->link->settings["{$what} status"] = $post[$sfield];
66 endif;
67 endif;
68 endforeach;
69
70 // Save settings
71 $this->link->save_settings(/*reload=*/ true);
72 $this->updated = true;
73
74 // Reset, reload
75 $link_id = $this->link->id;
76 unset($this->link);
77 $this->link = new SyndicatedLink($link_id);
78 else :
79 // update_option ...
80 if (isset($post['feed_post_status'])) :
81 update_option('feedwordpress_syndicated_post_status', $post['feed_post_status']);
82 endif;
83
84 update_option('feedwordpress_custom_settings', serialize($custom_settings));
85
86 update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']);
87 update_option('feedwordpress_use_aggregator_source_data', $_REQUEST['use_aggregator_source_data']);
88 update_option('feedwordpress_formatting_filters', $_REQUEST['formatting_filters']);
89
90 if (isset($post['resolve_relative'])) :
91 update_option('feedwordpress_resolve_relative', $post['resolve_relative']);
92 endif;
93 if (isset($post['munge_comments_feed_links'])) :
94 update_option('feedwordpress_munge_comments_feed_links', $post['munge_comments_feed_links']);
95 endif;
96 if (isset($_REQUEST['feed_comment_status']) and ($_REQUEST['feed_comment_status'] == 'open')) :
97 update_option('feedwordpress_syndicated_comment_status', 'open');
98 else :
99 update_option('feedwordpress_syndicated_comment_status', 'closed');
100 endif;
101
102 if (isset($_REQUEST['feed_ping_status']) and ($_REQUEST['feed_ping_status'] == 'open')) :
103 update_option('feedwordpress_syndicated_ping_status', 'open');
104 else :
105 update_option('feedwordpress_syndicated_ping_status', 'closed');
106 endif;
107
108 $this->updated = true;
109 endif;
110
111 // Probably a "Go" button for the drop-down
112 else :
113 $this->updated = false;
114 endif;
115 }
116
117 /**
118 * Outputs "Publication" settings box.
119 *
120 * @since 2009.0713
121 * @param object $page of class FeedWordPressPostsPage tells us whether this is
122 * a page for one feed's settings or for global defaults
123 * @param array $box
124 *
125 * @uses FeedWordPressPostsPage::these_posts_phrase()
126 * @uses FeedWordPress::syndicated_status()
127 * @uses SyndicatedLink::syndicated_status()
128 * @uses SyndicatedPost::use_api()
129 */
130 /*static*/ function publication_box ($page, $box = NULL) {
131 global $fwp_path;
132
133 $post_status_global = FeedWordPress::syndicated_status('post', /*default=*/ 'publish');
134 $thesePosts = $page->these_posts_phrase();
135
136 // Set up array for selector
137 $setting = array(
138 'publish' => array ('label' => "Publish %s immediately", 'checked' => ''),
139 'draft' => array('label' => "Save %s as drafts", 'checked' => ''),
140 'private' => array('label' => "Save %s as private posts", 'checked' => ''),
141 );
142 if (SyndicatedPost::use_api('post_status_pending')) :
143 $setting['pending'] = array('label' => "Hold %s for review; mark as Pending", 'checked' => '');
144 endif;
145
146
147 if ($page->for_feed_settings()) :
148 $href = $fwp_path.'/'.basename(__FILE__);
149 $currently = str_replace('%s', '', strtolower(strtok($setting[$post_status_global]['label'], ';')));
150 $setting['site-default'] = array('label' => "Use <a href=\"admin.php?page=${href}\">site-wide setting</a>", 'checked' => '');
151 $setting['site-default']['label'] .= " (currently: <strong>${currently}</strong>)";
152
153 $checked = $page->link->syndicated_status('post', 'site-default', /*fallback=*/ false);
154 else :
155 $checked = $post_status_global;
156 endif;
157
158 // Re-order appropriately
159 $selector = array();
160 $order = array(
161 'site-default',
162 'publish',
163 'pending',
164 'draft',
165 'private',
166 );
167 foreach ($order as $line) :
168 if (isset($setting[$line])) :
169 $selector[$line] = $setting[$line];
170 endif;
171 endforeach;
172 $selector[$checked]['checked'] = ' checked="checked"';
173
174 // Hey ho, let's go...
175 ?>
176 <style type="text/css">
177 #syndicated-publication-form th { width: 27%; vertical-align: top; }
178 #syndicated-publication-form td { width: 73%; vertical-align: top; }
179 </style>
180
181 <table id="syndicated-publication-form" class="form-table" cellspacing="2" cellpadding="5">
182 <tr><th scope="row"><?php _e('New posts:'); ?></th>
183 <td><ul class="options">
184 <?php foreach ($selector as $code => $li) : ?>
185 <li><label><input type="radio" name="feed_post_status"
186 value="<?php print $code; ?>"<?php print $li['checked']; ?> />
187 <?php print str_replace('%s', $thesePosts, $li['label']); ?></label></li>
188 <?php endforeach; ?>
189 </ul></td>
190 </tr>
191
192 <?php $page->updatedPosts->display(); ?>
193 </table>
194
195 <?php
196 } /* FeedWordPressPostsPage::publication_box () */
197
198 /**
199 * Outputs "Formatting" settings box
200 *
201 * @since 2009.0713
202 * @param object $page of class FeedWordPressPostsPage tells us whether this is
203 * a page for one feed's settings or for global defaults
204 * @param array $box
205 *
206 */
207 function formatting_box ($page, $box = NULL) {
208 global $fwp_path;
209 $thesePosts = $page->these_posts_phrase();
210 $global_resolve_relative = get_option('feedwordpress_resolve_relative', 'yes');
211 if ($page->for_feed_settings()) :
212 $formatting_filters = null;
213 $resolve_relative = $page->link->setting('resolve relative', NULL, 'default');
214 $url = preg_replace('|/+$|', '', $page->link->homepage());
215 $setting = array(
216 'yes' => __('resolve relative URIs'),
217 'no' => __('leave relative URIs unresolved'),
218 );
219 $href = $fwp_path.'/'.basename(__FILE__);
220 else :
221 $formatting_filters = get_option('feedwordpress_formatting_filters', 'no');
222 $resolve_relative = $global_resolve_relative;
223 $url = 'http://example.com';
224 endif;
225 ?>
226 <table class="form-table" cellspacing="2" cellpadding="5">
227 <?php if (!is_null($formatting_filters)) : ?>
228
229 <tr><th scope="row">Formatting filters:</th>
230 <td><select name="formatting_filters" size="1">
231 <option value="no"<?php echo ($formatting_filters!='yes')?' selected="selected"':''; ?>>Protect syndicated posts from formatting filters</option>
232 <option value="yes"<?php echo ($formatting_filters=='yes')?' selected="selected"':''; ?>>Expose syndicated posts to formatting filters</option>
233 </select>
234 <p class="setting-description">If you have trouble getting plugins to work that are supposed to insert
235 elements after posts (like relevant links or a social networking
236 <q>Share This</q> button), try changing this option to see if it fixes your
237 problem.</p>
238 </td></tr>
239
240 <?php endif; ?>
241
242 <tr><th scope="row">Relative URIs:</th>
243 <td>If link or image in a syndicated post from <code><?php print $url; ?></code>
244 refers to a partial URI like <code>/about</code>, where should
245 the syndicated copy point to?</p>
246
247 <ul>
248 <?php if ($page->for_feed_settings()) : ?>
249 <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/>
250 <small style="margin-left: 2.0em;">Currently: <strong><?php print $setting[$global_resolve_relative]; ?></strong></small></label></p></li>
251 <?php endif; ?>
252 <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/>
253 <small style="margin-left: 2.0em;"><code>/contact</code> is rewritten as <code><?php print $url; ?>/contact</code></label></small></p></li>
254 <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/>
255 <small style="margin-left: 2.0em;"><code>/contact</code> is left as <code>/contact</code></small></label></li>
256 </ul>
257 </td></tr>
258
259 </table>
260 <?php
261 } /* FeedWordPressPostsPage::formatting_box() */
262
263 /**
264 * Output "Links" settings box
265 *
266 * @since 2009.0713
267 * @param object $page of class FeedWordPressPostsPage tells us whether this is
268 * a page for one feed's settings or for global defaults
269 * @param array $box
270 *
271 */
272 /*static*/ function links_box ($page, $box = NULL) {
273 $setting = array(
274 'munge_permalink' => array(
275 'yes' => 'the copy on the original website',
276 'no' => 'the local copy on this website',
277 ),
278 );
279
280 $global_munge_permalink = get_option('feedwordpress_munge_permalink');
281 if ($page->for_feed_settings()) :
282 $munge_permalink = $page->link->setting('munge permalink', NULL);
283 else :
284 $munge_permalink = $global_munge_permalink;
285 $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
286 endif;
287
288 ?>
289 <table class="form-table" cellspacing="2" cellpadding="5">
290 <tr><th scope="row">Permalinks point to:</th>
291 <td><ul class="options">
292 <?php if ($page->for_feed_settings()) : ?>
293 <li><label><input type="radio" name="munge_permalink" value="default"<?php echo ($munge_permalink!='yes' and $munge_permalink != 'no')?' checked="checked"':''; ?>/> use site-wide setting (currently <?php print $setting['munge_permalink'][$global_munge_permalink]; ?>)</label></li>
294 <?php endif; ?>
295 <li><label><input type="radio" name="munge_permalink" value="yes"<?php echo ($munge_permalink=='yes')?' checked="checked"':''; ?>><?php print $setting['munge_permalink']['yes']; ?></label></li>
296 <li><label><input type="radio" name="munge_permalink" value="no"<?php echo ($munge_permalink=='no')?' checked="checked"':''; ?>><?php print $setting['munge_permalink']['no']; ?></label></li>
297 </ul></td>
298 </tr>
299
300 <?php if (!$page->for_feed_settings()) : ?>
301 <tr><th scope="row">Posts from aggregator feeds:</th>
302 <td><ul class="options">
303 <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>
304 <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>
305 </ul>
306 <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.
307 This setting controls what FeedWordPress will give as the source of posts from
308 such an aggregator feed.</p>
309 </td></tr>
310 <?php endif; ?>
311 </table>
312
313 <?php
314 } /* FeedWordPressPostsPage::links_box() */
315
316 /**
317 * Output "Comments & Pings" settings box
318 *
319 * @since 2009.0713
320 * @param object $page of class FeedWordPressPostsPage tells us whether this is
321 * a page for one feed's settings or for global defaults
322 * @param array $box
323 *
324 */
325 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
326 global $fwp_path;
327
328 $setting = array();
329 $selector = array();
330
331 $whatsits = array(
332 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
333 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
334 );
335 $onThesePosts = 'on '.$page->these_posts_phrase();
336
337 $selected = array(
338 'munge_comments_feed_links' => array('yes' => '', 'no' => '')
339 );
340
341 $globalMungeCommentsFeedLinks = get_option('feedwordpress_munge_comments_feed_links', 'yes');
342 if ($page->for_feed_settings()) :
343 $selected['munge_comments_feed_links']['default'] = '';
344
345 $sel = $page->link->setting('munge comments feed links', NULL, 'default');
346 else :
347 $sel = $globalMungeCommentsFeedLinks;
348 endif;
349 $selected['munge_comments_feed_links'][$sel] = ' checked="checked"';
350
351 if ($globalMungeCommentsFeedLinks != 'no') : $siteWide = __('comment feeds from the original website');
352 else : $siteWide = __('local comment feeds on this website');
353 endif;
354
355 foreach ($whatsits as $what => $how) :
356 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
357
358 // Set up array for selector
359 $setting = array(
360 'open' => array ('label' => "{$how['accept']} %s", 'checked' => ''),
361 'closed' => array('label' => "Don't ".strtolower($how['accept'])." %s", 'checked' => ''),
362 );
363 if ($page->for_feed_settings()) :
364 $href = $fwp_path.'/'.basename(__FILE__);
365 $currently = trim(str_replace('%s', '', strtolower(strtok($setting[$whatsits[$what]['default']]['label'], ';'))));
366 $setting['site-default'] = array('label' => "Use <a href=\"admin.php?page=${href}\">site-wide setting</a>", 'checked' => '');
367 $setting['site-default']['label'] .= " (currently: <strong>${currently}</strong>)";
368
369 $checked = $page->link->syndicated_status($what, 'site-default', /*fallback=*/ false);
370 else :
371 $checked = $whatsits[$what]['default'];
372 endif;
373
374 // Re-order appropriately
375 $selector[$what] = array();
376 $order = array(
377 'site-default',
378 'open',
379 'closed',
380 );
381 foreach ($order as $line) :
382 if (isset($setting[$line])) :
383 $selector[$what][$line] = $setting[$line];
384 endif;
385 endforeach;
386 $selector[$what][$checked]['checked'] = ' checked="checked"';
387 endforeach;
388
389 // Hey ho, let's go...
390 ?>
391 <table class="form-table" cellspacing="2" cellpadding="5">
392 <?php foreach ($whatsits as $what => $how) : ?>
393 <tr><th scope="row"><?php print $how['label']; ?>:</th>
394 <td><ul class="options">
395 <?php foreach ($selector[$what] as $code => $li) : ?>
396 <li><label><input type="radio" name="feed_<?php print $what; ?>_status"
397 value="<?php print $code; ?>"<?php print $li['checked']; ?> />
398 <?php print trim(str_replace('%s', $onThesePosts, $li['label'])); ?></label></li>
399 <?php endforeach; ?>
400 </ul></td></tr>
401 <?php endforeach; ?>
402 <tr><th scope="row"><?php _e('Comment feeds'); ?></th>
403 <td><p>When WordPress feeds and templates link to comments
404 feeds for <?php print $page->these_posts_phrase(); ?>, the
405 URLs for the feeds should...</p>
406 <ul class="options">
407 <?php if ($page->for_feed_settings()) : ?>
408 <li><label><input type="radio" name="munge_comments_feed_links" value="default"<?php print $selected['munge_comments_feed_links']['default']; ?> /> Use <a href="admin.php?page=<?php print $href; ?>">site-wide setting</a> (currently: <strong><?php _e($siteWide); ?></strong>)</label></li>
409 <?php endif; ?>
410 <li><label><input type="radio" name="munge_comments_feed_links" value="yes"<?php print $selected['munge_comments_feed_links']['yes']; ?> /> <?php _e('Point to comment feeds from the original website (when provided by the syndicated feed)'); ?></label></li>
411 <li><label><input type="radio" name="munge_comments_feed_links" value="no"<?php print $selected['munge_comments_feed_links']['no']; ?> /> <?php _e('Point to local comment feeds on this website'); ?></label></li>
412 </ul></td></tr>
413 </table>
414
415 <?php
416 } /* FeedWordPressPostsPage::comments_and_pings_box() */
417
418 /*static*/ function custom_post_settings ($page = NULL) {
419 if (is_null($page)) :
420 $page = $this;
421 endif;
422
423 if ($page->for_feed_settings()) :
424 $custom_settings = $page->link->settings["postmeta"];
425 else :
426 $custom_settings = get_option('feedwordpress_custom_settings');
427 endif;
428
429 if ($custom_settings and !is_array($custom_settings)) :
430 $custom_settings = unserialize($custom_settings);
431 endif;
432
433 if (!is_array($custom_settings)) :
434 $custom_settings = array();
435 endif;
436
437 return $custom_settings;
438 } /* FeedWordPressPostsPage::custom_post_settings() */
439
440 /**
441 * Output "Custom Post Settings" settings box
442 *
443 * @since 2009.0713
444 * @param object $page of class FeedWordPressPostsPage tells us whether this is
445 * a page for one feed's settings or for global defaults
446 * @param array $box
447 */
448 /*static*/ function custom_post_settings_box ($page, $box = NULL) {
449 $custom_settings = FeedWordPressPostsPage::custom_post_settings($page);
450 ?>
451 <div id="postcustomstuff">
452 <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>
453 <table id="meta-list" cellpadding="3">
454 <tr>
455 <th>Key</th>
456 <th>Value</th>
457 <th>Action</th>
458 </tr>
459
460 <?php
461 $i = 0;
462 foreach ($custom_settings as $key => $value) :
463 ?>
464 <tr style="vertical-align:top">
465 <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo esc_html($key); ?>" />
466 <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
467 <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></td>
468 <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
469 <option value="update">save changes</option>
470 <option value="delete">delete this setting</option>
471 </select></td>
472 </tr>
473
474 <?php
475 $i++;
476 endforeach;
477 ?>
478
479 <tr style="vertical-align: top">
480 <th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
481 <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea>
482 <p>Enter a text value, or a path to a data element from the syndicated item.<br/>
483 For data elements, you can use an XPath-like syntax wrapped in <code>$( ... )</code>.<br/>
484 <code>hello</code> = the text value <code><span style="background-color: #30FFA0;">hello</span></code><br/>
485 <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/>
486 <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>
487 </td>
488 <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
489 </tr>
490 </table>
491 </div> <!-- id="postcustomstuff" -->
492
493 <?php
494 } /* FeedWordPressPostsPage::custom_post_settings_box() */
495 }
496
497 function fwp_posts_page () {
498 global $wpdb, $wp_db_version;
499 global $fwp_post;
500
501 if (FeedWordPress::needs_upgrade()) :
502 fwp_upgrade_page();
503 return;
504 endif;
505
506 // If this is a POST, validate source and user credentials
507 FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_posts_settings', /*capability=*/ 'manage_links');
508
509 $link = FeedWordPressAdminPage::submitted_link();
510
511 $postsPage = new FeedWordPressPostsPage($link);
512
513 $mesg = null;
514
515 ////////////////////////////////////////////////
516 // Process POST request, if any ////////////////
517 ////////////////////////////////////////////////
518 if (strtoupper($_SERVER['REQUEST_METHOD'])=='POST') :
519 $postsPage->accept_POST($fwp_post);
520 do_action('feedwordpress_admin_page_posts_save', $fwp_post, $postsPage);
521 endif;
522
523 $postsPage->ajax_interface_js();
524
525 if ($postsPage->updated) : ?>
526 <div class="updated"><p>Syndicated posts settings updated.</p></div>
527 <?php elseif (!is_null($mesg)) : ?>
528 <div class="updated"><p><?php print esc_html($mesg); ?></p></div>
529 <?php endif; ?>
530
531 <?php
532 $links = FeedWordPress::syndicated_links();
533 $postsPage->open_sheet('Syndicated Posts & Links');
534 ?>
535 <style type="text/css">
536 table.edit-form th, table.form-table th { width: 27%; vertical-align: top; }
537 table.edit-form td, table.form-table td { width: 73%; vertical-align: top; }
538 ul.options { margin: 0; padding: 0; list-style: none; }
539 </style>
540 <div id="post-body">
541 <?php
542 $boxes_by_methods = array(
543 'publication_box' => __('Syndicated Posts'),
544 'links_box' => __('Links'),
545 'formatting_box' => __('Formatting'),
546 'comments_and_pings_box' => __('Comments & Pings'),
547 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'),
548 );
549
550 foreach ($boxes_by_methods as $method => $title) :
551 fwp_add_meta_box(
552 /*id=*/ 'feedwordpress_'.$method,
553 /*title=*/ $title,
554 /*callback=*/ array('FeedWordPressPostsPage', $method),
555 /*page=*/ $postsPage->meta_box_context(),
556 /*context=*/ $postsPage->meta_box_context()
557 );
558 endforeach;
559 do_action('feedwordpress_admin_page_posts_meta_boxes', $postsPage);
560 ?>
561 <div class="metabox-holder">
562 <?php
563 fwp_do_meta_boxes($postsPage->meta_box_context(), $postsPage->meta_box_context(), $postsPage);
564 ?>
565 </div> <!-- class="metabox-holder" -->
566 </div> <!-- id="post-body" -->
567 <?php
568 $postsPage->close_sheet();
569 } /* function fwp_posts_page () */
570
571 fwp_posts_page();
572
573