PluginProbe
FeedWordPress / 2010.0127
FeedWordPress v2010.0127
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 +325 -545 trunk2010.0127 View file →
@@ -10,158 +10,112 @@
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 - public function __construct( $link = -1 ) {
15 - if (is_numeric($link) and -1 == $link) :
16 - $link = $this->submitted_link();
17 - endif;
18 -
19 - parent::__construct('feedwordpresspostspage', $link);
20 - $this->dispatch = 'feedwordpress_admin_page_posts';
14 + function FeedWordPressPostsPage ($link = NULL) {
15 + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresspostspage', $link);
16 + $this->dispatch = 'feedwordpress_posts_settings';
21 17 $this->filename = __FILE__;
22 18 $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 - );
29 19 } /* FeedWordPressPostsPage constructor */
30 20
31 - function save_settings () {
32 - // custom post settings
33 - $custom_settings = $this->custom_post_settings();
21 + function accept_POST ($post) {
22 + global $wpdb;
23 +
24 + $link_id = $this->link->id;
34 25
35 - $posted_notes = FeedWordPress::post( 'notes', array(), 'text' );
36 - foreach ( $posted_notes as $mn ) :
37 - if ( isset( $mn['key0'] ) ) :
38 - $mn['key0'] = trim( $mn['key0'] );
39 - if ( strlen( $mn['key0'] ) > 0 ) :
40 - unset( $custom_settings[ $mn['key0'] ] ); // out with the old
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) :
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
41 35 endif;
42 - 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 +
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;
43 63
44 - if ( isset( $mn['key1'] ) ) :
45 - $mn['key1'] = trim( $mn['key1'] );
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;
46 85
47 - if ( ( $mn['action']=='update' ) and ( strlen( $mn['key1'] ) > 0 ) ) :
48 - $custom_settings[ $mn['key1'] ] = $mn['value']; // in with the new
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']);
49 94 endif;
50 - endif;
51 - endforeach;
52 -
53 - $this->updatedPosts->accept_POST();
54 - if ($this->for_feed_settings()) :
55 - // $alter = array(); // this appears elsewhere, too, also unused, and possibly removed as well (gwyneth 20230920)
56 -
57 - $this->link->settings['postmeta'] = serialize($custom_settings);
58 -
59 - if ( ! is_null( FeedWordPress::post( 'resolve_relative', null ) ) ) :
60 - $this->link->settings['resolve relative'] = FeedWordPress::post( 'resolve_relative', null, 'text' );
61 - endif;
62 - if ( ! is_null( FeedWordPress::post('munge_permalink', null, 'text' ) ) ) :
63 - $this->link->settings['munge permalink'] = FeedWordPress::post( 'munge_permalink', null, 'text' );
64 - endif;
65 - if ( ! is_null( FeedWordPress::post('munge_comments_feed_links', null, 'text' ) ) ) :
66 - $this->link->settings['munge comments feed links'] = FeedWordPress::post( 'munge_comments_feed_links', null, 'text' );
67 - endif;
68 -
69 - // Post status, comment status, ping status
70 - foreach (array('post', 'comment', 'ping') as $what) :
71 - $sfield = "feed_{$what}_status";
72 - if ( ! is_null( FeedWordPress::post( $sfield, null, 'text' ) ) ) :
73 - $afield = sprintf( '%s status', $what );
74 - if ( FeedWordPress::post( $sfield, null, 'text' ) == 'site-default' ) :
75 - unset($this->link->settings[ $afield ]);
76 - else :
77 - $this->link->settings[ $afield ] = FeedWordPress::post( $sfield, null, 'text' );
78 - endif;
95 + if (isset($_REQUEST['feed_comment_status']) and ($_REQUEST['feed_comment_status'] == 'open')) :
96 + update_option('feedwordpress_syndicated_comment_status', 'open');
97 + else :
98 + update_option('feedwordpress_syndicated_comment_status', 'closed');
79 99 endif;
80 - endforeach;
81 100
82 - if ( ! is_null( FeedWordPress::post('syndicated_post_type', null, 'text' ) ) ) :
83 - if ( FeedWordPress::post( 'syndicated_post_type', null, 'text' ) == 'default' ) :
84 - unset($this->link->settings['syndicated post type']);
101 + if (isset($_REQUEST['feed_ping_status']) and ($_REQUEST['feed_ping_status'] == 'open')) :
102 + update_option('feedwordpress_syndicated_ping_status', 'open');
85 103 else :
86 - $this->link->settings['syndicated post type'] = FeedWordPress::post( 'syndicated_post_type', null, 'text' );
104 + update_option('feedwordpress_syndicated_ping_status', 'closed');
87 105 endif;
106 +
107 + $this->updated = true;
88 108 endif;
89 109
110 + // Probably a "Go" button for the drop-down
90 111 else :
91 - // update_option ...
92 - if ( ! is_null( FeedWordPress::post( 'feed_post_status', null ) ) ) :
93 -
94 - update_option('feedwordpress_syndicated_post_status', FeedWordPress::post( 'feed_post_status', null, 'text' ) );
95 -
96 - endif;
97 -
98 - update_option('feedwordpress_custom_settings', serialize($custom_settings));
99 -
100 - $sMungePermalink = FeedWordPress::post('munge_permalink', null, 'text' );
101 - $sUseAggregatorSourceData = FeedWordPress::post( 'use_aggregator_source_data', null, 'text' );
102 - $sFormattingFilters = FeedWordPress::post('formatting_filters', null, 'text' );
103 - $sFeedCommentStatus = FeedWordPress::post( 'feed_comment_status', '', 'text' );
104 - $sFeedPingStatus = FeedWordPress::post( 'feed_ping_status', '', 'text' );
105 - $sResolveRelative = FeedWordPress::post( 'resolve_relative', null, 'text' );
106 - $sMungeCommentsFeedLinks = FeedWordPress::post( 'munge_comments_feed_links', null, 'text' );
107 - $sSyndicatedPostType = FeedWordPress::post( 'syndicated_post_type', null, 'text' );
108 -
109 - update_option('feedwordpress_munge_permalink', $sMungePermalink);
110 - update_option('feedwordpress_use_aggregator_source_data', $sUseAggregatorSourceData);
111 - update_option('feedwordpress_formatting_filters', $sFormattingFilters);
112 -
113 - if ( ! is_null( $sResolveRelative ) ) :
114 - update_option('feedwordpress_resolve_relative', $sResolveRelative );
115 - endif;
116 - if ( ! is_null( $sMungeCommentsFeedLinks ) ) :
117 - update_option('feedwordpress_munge_comments_feed_links', $sMungeCommentsFeedLinks );
118 - endif;
119 -
120 - if ( $sFeedCommentStatus == 'open' ) :
121 - update_option('feedwordpress_syndicated_comment_status', 'open');
122 - else :
123 - update_option('feedwordpress_syndicated_comment_status', 'closed');
124 - endif;
125 -
126 - if ( $sFeedPingStatus == 'open' ) :
127 - update_option('feedwordpress_syndicated_ping_status', 'open');
128 - else :
129 - update_option('feedwordpress_syndicated_ping_status', 'closed');
130 - endif;
131 -
132 - if ( ! is_null( $sSyndicatedPostType ) ) :
133 - update_option('feedwordpress_syndicated_post_type', $sSyndicatedPostType );
134 - endif;
135 - endif;
136 -
137 - $boilerplate = FeedWordPress::post( 'boilerplate', array(), 'raw' );
138 - if ( count($boilerplate) > 0 ) :
139 - foreach ( $boilerplate as $index => $line) :
140 - if ( 0 == strlen( trim( $line['template'] ) ) ) :
141 - unset( $boilerplate[$index] );
142 - endif;
143 - endforeach;
144 -
145 - // Convert indexes to 0..(N-1) to avoid possible collisions
146 - $boilerplate = array_values( $boilerplate );
147 -
148 - if ($this->for_feed_settings()) :
149 - $this->link->settings['boilerplate rules'] = serialize( $boilerplate );
150 - $this->link->save_settings(/*reload=*/ true);
151 - else :
152 - update_option( 'feedwordpress_boilerplate', $boilerplate );
153 - endif;
154 - endif;
155 -
156 - $boilerplate_hook_order = FeedWordPress::post( 'boilerplate_hook_order', 10, 'text' );
157 - $this->update_setting('boilerplate hook order', intval( $boilerplate_hook_order ) );
158 -
159 - parent::save_settings();
112 + $this->updated = false;
113 + endif;
160 114 }
161 115
162 116 /**
163 - * publication_box: Outputs "Publication" settings box.
117 + * Outputs "Publication" settings box.
164 118 *
165 119 * @since 2009.0713
166 120 * @param object $page of class FeedWordPressPostsPage tells us whether this is
167 121 * a page for one feed's settings or for global defaults
@@ -169,70 +123,112 @@
169 123 *
170 124 * @uses FeedWordPressPostsPage::these_posts_phrase()
171 125 * @uses FeedWordPress::syndicated_status()
172 126 * @uses SyndicatedLink::syndicated_status()
173 - */
127 + * @uses SyndicatedPost::use_api()
128 + * @uses fwp_option_box_opener()
129 + * @uses fwp_option_box_closer()
130 + */
174 131 /*static*/ function publication_box ($page, $box = NULL) {
132 + global $fwp_path;
133 +
134 + $post_status_global = FeedWordPress::syndicated_status('post', /*default=*/ 'publish');
175 135 $thesePosts = $page->these_posts_phrase();
176 - $postSelector = array(
177 - 'publish' => "Publish %s immediately",
178 - 'pending' => "Hold %s for review; mark as Pending",
179 - 'draft' => "Save %s as drafts",
180 - 'private' => "Save %s as private posts",
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' => ''),
181 142 );
182 - $labels = array();
183 - foreach ($postSelector as $index => $value) :
184 - $postSelector[$index] = sprintf(__($value), $thesePosts);
185 - $labels[$index] = __(str_replace(' %s', '', strtolower(strtok($value, ';'))));
186 - endforeach;
143 + if (SyndicatedPost::use_api('post_status_pending')) :
144 + $setting['pending'] = array('label' => "Hold %s for review; mark as Pending", 'checked' => '');
145 + endif;
187 146
188 - $params = array(
189 - 'input-name' => 'feed_post_status',
190 - 'setting-default' => NULL,
191 - 'global-setting-default' => 'publish',
192 - 'labels' => $labels,
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',
193 167 );
194 -
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 +
195 175 // Hey ho, let's go...
196 176 ?>
197 - <table id="syndicated-publication-form" class="edit-form narrow">
198 - <tr><th scope="row"><?php esc_html_e('New posts:'); ?></th>
199 - <td><?php
200 - $this->setting_radio_control(
201 - 'post status', 'syndicated_post_status',
202 - $postSelector, $params
203 - );
204 - ?>
205 - </td></tr>
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">
183 + <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>
206 192
207 193 <?php $page->updatedPosts->display(); ?>
208 194 </table>
209 -
195 +
210 196 <?php
211 197 } /* FeedWordPressPostsPage::publication_box () */
212 -
198 +
213 199 /**
214 200 * Outputs "Formatting" settings box
215 201 *
216 202 * @since 2009.0713
217 - * @param FeedWordPressPostsPage $page of class FeedWordPressPostsPage tells us whether this is
218 - * a page for one feed's settings or for global defaults
203 + * @param object $page of class FeedWordPressPostsPage tells us whether this is
204 + * a page for one feed's settings or for global defaults
219 205 * @param array $box
220 206 *
221 - */
222 - function formatting_box( $page, $box = NULL ) {
223 - $thesePosts = $page->these_posts_phrase(); // result unused, why? (gwyneth 20230920)
224 -
207 + * @uses fwp_option_box_opener()
208 + * @uses fwp_option_box_closer()
209 + */
210 + function formatting_box ($page, $box = NULL) {
211 + global $fwp_path;
212 + $thesePosts = $page->these_posts_phrase();
213 + $global_resolve_relative = get_option('feedwordpress_resolve_relative', 'yes');
225 214 if ($page->for_feed_settings()) :
226 215 $formatting_filters = null;
216 + $resolve_relative = $page->link->setting('resolve relative', NULL, 'default');
227 217 $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__);
228 223 else :
229 224 $formatting_filters = get_option('feedwordpress_formatting_filters', 'no');
225 + $resolve_relative = $global_resolve_relative;
230 226 $url = 'http://example.com';
231 227 endif;
232 228 ?>
233 - <table class="edit-form narrow">
234 - <?php if ( !is_null($formatting_filters)) : ?>
229 + <table class="form-table" cellspacing="2" cellpadding="5">
230 + <?php if (!is_null($formatting_filters)) : ?>
235 231
236 232 <tr><th scope="row">Formatting filters:</th>
237 233 <td><select name="formatting_filters" size="1">
238 234 <option value="no"<?php echo ($formatting_filters!='yes')?' selected="selected"':''; ?>>Protect syndicated posts from formatting filters</option>
@@ -244,40 +240,30 @@
244 240 problem.</p>
245 241 </td></tr>
246 242
247 243 <?php endif; ?>
248 -
244 +
249 245 <tr><th scope="row">Relative URIs:</th>
250 - <td><p>If link or image in a syndicated post from <code><?php print esc_html($url); ?></code>
246 + <td>If link or image in a syndicated post from <code><?php print $url; ?></code>
251 247 refers to a partial URI like <code>/about</code>, where should
252 248 the syndicated copy point to?</p>
253 249
254 - <?php
255 - $options = array(
256 - '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>',
257 - '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>',
258 - );
259 - $params = array(
260 - 'setting-default' => 'default',
261 - 'global-setting-default' => 'yes',
262 - 'labels' => array(
263 - 'yes' => __('resolve relative URIs'),
264 - 'no' => __('leave relative URIs unresolved'),
265 - ),
266 - 'default-input-value' => 'default',
267 - );
268 -
269 - $this->setting_radio_control(
270 - 'resolve relative', 'resolve_relative',
271 - $options, $params
272 - );
273 - ?>
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>
274 260 </td></tr>
275 261
276 262 </table>
277 263 <?php
278 264 } /* FeedWordPressPostsPage::formatting_box() */
279 -
265 +
280 266 /**
281 267 * Output "Links" settings box
282 268 *
283 269 * @since 2009.0713
@@ -284,39 +270,23 @@
284 270 * @param object $page of class FeedWordPressPostsPage tells us whether this is
285 271 * a page for one feed's settings or for global defaults
286 272 * @param array $box
287 273 *
274 + * @uses fwp_option_box_opener()
275 + * @uses fwp_option_box_closer()
288 276 */
289 277 /*static*/ function links_box ($page, $box = NULL) {
290 - $setting = array(
291 - 'munge_permalink' => array(
292 - 'yes' => __('The copy on the original website'),
293 - 'no' => __('The local copy on this website'),
294 - ),
295 - );
296 -
297 - if ( ! $page->for_feed_settings()) :
298 - $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
299 - endif;
278 + $munge_permalink = get_option('feedwordpress_munge_permalink');
279 + $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
300 280 ?>
301 - <table class="edit-form narrow">
302 - <tr><th scope="row">Permalinks point to:</th>
303 - <td><?php
304 -
305 - $params = array(
306 - 'setting-default' => 'default',
307 - 'global-setting-default' => 'yes',
308 - 'default-input-value' => 'default',
309 - );
310 - $this->setting_radio_control(
311 - 'munge permalink', 'munge_permalink',
312 - $setting['munge_permalink'], $params
313 - );
314 - ?>
315 -
316 - </td></tr>
317 -
318 - <?php if ( ! $page->for_feed_settings()) : ?>
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>
288 +
319 289 <tr><th scope="row">Posts from aggregator feeds:</th>
320 290 <td><ul class="options">
321 291 <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>
322 292 <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>
@@ -324,9 +294,8 @@
324 294 <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.
325 295 This setting controls what FeedWordPress will give as the source of posts from
326 296 such an aggregator feed.</p>
327 297 </td></tr>
328 - <?php endif; ?>
329 298 </table>
330 299
331 300 <?php
332 301 } /* FeedWordPressPostsPage::links_box() */
@@ -338,10 +307,15 @@
338 307 * @param object $page of class FeedWordPressPostsPage tells us whether this is
339 308 * a page for one feed's settings or for global defaults
340 309 * @param array $box
341 310 *
311 + * @uses fwp_option_box_opener()
312 + * @uses fwp_option_box_closer()
342 313 */
343 314 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
315 + $setting = array();
316 + $selector = array();
317 +
344 318 $whatsits = array(
345 319 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
346 320 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
347 321 );
@@ -346,101 +320,59 @@
346 320 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
347 321 );
348 322 $onThesePosts = 'on '.$page->these_posts_phrase();
349 323
350 - $mcflSettings = array(
351 - "yes" => __('Point to comment feeds from the original website (when provided by the syndicated feed)'),
352 - "no" => __('Point to local comment feeds on this website'),
353 - );
354 - $mcflParams = array(
355 - 'setting-default' => 'default',
356 - 'global-setting-default' => 'yes',
357 - 'labels' => array(
358 - 'yes' => __('comment feeds from the original website'),
359 - 'no' => __('local comment feeds on this website')
360 - ),
361 - 'default-input-value' => 'default',
362 - );
363 -
364 - $settings = array(); $params = array();
365 324 foreach ($whatsits as $what => $how) :
366 325 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
367 326
368 327 // Set up array for selector
369 - $settings[$what] = array(
370 - 'open' => sprintf(__("{$how['accept']} %s"), __($onThesePosts)),
371 - 'closed' => sprintf(__("Don't ".strtolower($how['accept'])." %s"), __($onThesePosts)),
328 + $setting = array(
329 + 'open' => array ('label' => "{$how['accept']} %s", 'checked' => ''),
330 + 'closed' => array('label' => "Don't ".strtolower($how['accept'])." %s", 'checked' => ''),
372 331 );
373 - $params[$what] = array(
374 - 'input-name' => "feed_{$what}_status",
375 - 'setting-default' => NULL,
376 - 'global-setting-default' => FeedWordPress::syndicated_status($what, /*default=*/ 'closed'),
377 - 'labels' => array(
378 - 'open' => strtolower(__($how['accept'])),
379 - 'closed' => strtolower(__("Don't ".$how['accept'])),
380 - ),
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',
381 349 );
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"';
382 356 endforeach;
383 357
384 358 // Hey ho, let's go...
385 359 ?>
386 - <table class="edit-form narrow">
360 + <table class="form-table" cellspacing="2" cellpadding="5">
387 361 <?php foreach ($whatsits as $what => $how) : ?>
388 -
389 - <tr><th scope="row"><?php print esc_html($how['label']); ?>:</th>
390 - <td><?php
391 - $this->setting_radio_control(
392 - "$what status", "syndicated_{$what}_status",
393 - $settings[$what], $params[$what]
394 - );
395 - ?></td></tr>
396 -
362 + <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>
397 370 <?php endforeach; ?>
398 -
399 - <tr><th scope="row"><?php esc_html_e('Comment feeds'); ?></th>
400 - <td><p>When WordPress feeds and templates link to comments
401 - feeds for <?php print esc_html($page->these_posts_phrase()); ?>, the
402 - URLs for the feeds should...</p>
403 - <?php
404 - $this->setting_radio_control(
405 - "munge comments feed links", "munge_comments_feed_links",
406 - $mcflSettings, $mcflParams
407 - );
408 - ?></td></tr>
409 371 </table>
410 372
411 373 <?php
412 374 } /* FeedWordPressPostsPage::comments_and_pings_box() */
413 -
414 - /*static*/ function custom_post_settings ($page = NULL) {
415 - if (is_null($page)) :
416 - $page = $this;
417 - endif;
418 -
419 - if ($page->for_feed_settings()) :
420 - $custom_settings = $page->link->setting("postmeta", NULL, array());
421 - else :
422 - $custom_settings = get_option('feedwordpress_custom_settings');
423 - endif;
424 -
425 - if ($custom_settings and !is_array($custom_settings)) :
426 - $custom_settings = unserialize($custom_settings);
427 - endif;
428 -
429 - if ( !is_array($custom_settings)) :
430 - $custom_settings = array();
431 - endif;
432 -
433 - return $custom_settings;
434 - } /* FeedWordPressPostsPage::custom_post_settings() */
435 -
436 - /*static*/ function custom_post_settings_box_tester_button ( $id, $page, $box = NULL ) {
437 -
438 - ?>
439 - <br/><button id="<?php print esc_attr( sprintf( 'xpath-test-%d', $id ) ); ?>" class="xpath-test">test expression</button>
440 - <?php
441 -
442 - }
443 375
444 376 /**
445 377 * Output "Custom Post Settings" settings box
446 378 *
@@ -447,14 +379,35 @@
447 379 * @since 2009.0713
448 380 * @param object $page of class FeedWordPressPostsPage tells us whether this is
449 381 * a page for one feed's settings or for global defaults
450 382 * @param array $box
383 + *
384 + * @uses fwp_option_box_opener()
385 + * @uses fwp_option_box_closer()
451 386 */
452 387 /*static*/ function custom_post_settings_box ($page, $box = NULL) {
453 - $custom_settings = FeedWordPressPostsPage::custom_post_settings($page);
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 +
454 408 ?>
455 409 <div id="postcustomstuff">
456 - <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>
457 410 <table id="meta-list" cellpadding="3">
458 411 <tr>
459 412 <th>Key</th>
460 413 <th>Value</th>
@@ -465,13 +418,12 @@
465 418 $i = 0;
466 419 foreach ($custom_settings as $key => $value) :
467 420 ?>
468 421 <tr style="vertical-align:top">
469 - <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo esc_attr($i); ?>][key0]" value="<?php echo esc_html($key); ?>" />
470 - <input id="notes-<?php echo esc_attr( $i ); ?>-key" name="notes[<?php echo esc_attr( $i ); ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
471 - <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo esc_attr($i); ?>-value" name="notes[<?php echo esc_attr($i); ?>][value]"><?php echo esc_html($value); ?></textarea>
472 - <?php self::custom_post_settings_box_tester_button($i, $page, $box); ?></td>
473 - <td width="10%"><select name="notes[<?php echo esc_attr($i); ?>][action]">
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>
425 + <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
474 426 <option value="update">save changes</option>
475 427 <option value="delete">delete this setting</option>
476 428 </select></td>
477 429 </tr>
@@ -480,269 +432,97 @@
480 432 $i++;
481 433 endforeach;
482 434 ?>
483 435
484 - <tr style="vertical-align: top">
485 - <th scope="row"><input type="text" size="10" name="notes[<?php echo esc_attr($i); ?>][key1]" value="" /></th>
486 - <td><textarea name="notes[<?php echo esc_attr($i); ?>][value]" rows="2" cols="40"></textarea><?php self::custom_post_settings_box_tester_button( $i, $page, $box ); ?>
487 - <p>Enter a text value, or a path to a data element from the syndicated item.<br/>
488 - For data elements, you can use an XPath-like syntax wrapped in <code>$( ... )</code>.<br/>
489 - <code>hello</code> = the text value <code><span style="background-color: #30FFA0;">hello</span></code><br/>
490 - <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/>
491 - <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>
492 - </td>
493 - <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo esc_attr($i); ?>][action]" value="update" /></td>
436 + <tr>
437 + <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>
439 + <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
494 440 </tr>
495 441 </table>
496 442 </div> <!-- id="postcustomstuff" -->
497 443
498 444 <?php
499 - } /* FeedWordPressPostsPage::custom_post_settings_box() */
445 + } /* FeedWordPressPostsPage::custom_post_settings_box() */
446 +}
500 447
501 - function custom_post_types_box ($page, $box = NULL) {
502 - // local: syndicated post type // default NULL
503 - // global: syndicated_post_type // default 'post'
504 - // default-input-value => 'default'
448 +function fwp_posts_page () {
449 + global $wpdb, $wp_db_version;
450 + global $fwp_post;
505 451
506 - // Get all custom post types
507 - $post_types = get_post_types(array(
508 - '_builtin' => false,
509 - ), 'objects');
452 + if (FeedWordPress::needs_upgrade()) :
453 + fwp_upgrade_page();
454 + return;
455 + endif;
510 456
511 - $ul = array();
512 - $ul['post'] = __('Normal WordPress posts');
513 - foreach ($post_types as $post_type) :
514 - $ul[$post_type->name] = __($post_type->labels->name);
515 - endforeach;
457 + // If this is a POST, validate source and user credentials
458 + FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_posts_settings', /*capability=*/ 'manage_links');
516 459
517 - $params = array(
518 - 'global-setting-default' => 'post',
519 - 'default-input-value' => 'default',
520 - );
460 + $link = FeedWordPressAdminPage::submitted_link();
461 + $link_id = $link->id;
462 + $postsPage = new FeedWordPressPostsPage($link);
521 463
522 - // Hey, ho, let's go...
523 - ?>
524 - <table class="edit-form narrow">
525 - <tbody>
526 - <tr><th><?php esc_html_e('Custom Post Types:'); ?></th>
527 - <td><p>Incoming syndicated posts should be stored in the
528 - posts database as...</p>
529 - <?php
530 - $this->setting_radio_control(
531 - 'syndicated post type', 'syndicated_post_type',
532 - $ul, $params
533 - );
534 - ?>
535 - </td></tr>
536 - </tbody>
537 - </table>
538 - <?php
539 - } /* FeedWordPressPostsPage::custom_post_types_box() */
464 + $mesg = null;
540 465
541 - public function boilerplate_box ($page, $box = NULL) {
542 - if ($page->for_feed_settings()) :
543 - $attrib = isset($page->link->settings['boilerplate rules'])
544 - ? unserialize($page->link->settings['boilerplate rules'])
545 - : [];
546 - $syndicatedPosts = 'this feed\'s posts';
547 - else :
548 - $attrib = get_option('feedwordpress_boilerplate');
549 - $syndicatedPosts = 'syndicated posts';
550 - endif;
551 - $hookOrder = intval($page->setting('boilerplate hook order', FEEDWORDPRESS_BOILERPLATE_DEFAULT_HOOK_ORDER));
552 -?>
553 - <style type="text/css">
554 - .boilerplate-help-box {
555 - float: right;
556 - width: 300px;
557 - border: 1px dotted #777;
558 - margin: 3px;
559 - padding: 5px;
560 - background-color: #f7f7f7;
561 - }
562 - .boilerplate-help-box dt {
563 - font-weight: bold;
564 - font-size: 85%;
565 - }
566 - .boilerplate-help-box dd {
567 - font-size: 80%; line-height: 100%; font-style: italic;
568 - padding-left: 1.5em;
569 - }
570 - .boilerplate-help-box code {
571 - font-size: inherit;
572 - font-style: normal;
573 - background-color: inherit;
574 - }
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;
473 +
474 + $postsPage->ajax_interface_js();
575 475
576 - .boilerplate-li {
577 - padding-bottom: 5px;
578 - margin-bottom: 5px;
579 - border-bottom: 1px dotted black;
580 - }
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; ?>
581 481
582 - </style>
583 -
584 - <div class="boilerplate-help-box">
585 - <p style="border-bottom: 1px dotted #777;">To remove boilerplate, just blank out the text box and leave it empty.</p>
586 -
587 - <p>Use shortcodes to include information about your source:</p>
588 - <dl>
589 - <dt><code>[source]</code></dt>
590 - <dd>A link to the source you syndicated the post from</dd>
591 -
592 - <dt><code>[source-name]</code></dt>
593 - <dd>Name of the source you syndicated the post from</dd>
594 -
595 - <dt><code>[source-url]</code></dt>
596 - <dd>URL of the source you syndicated the post from</dd>
597 -
598 - <dt><code>[original-link]text[/original-link]</code></dt>
599 - <dd>A link to the <em>original post</em> back on the source website,
600 - using <code>text</code> as the link text.</dd>
601 -
602 - <dt><code>[original-url]</code></dt>
603 - <dd>URL of the <em>original post</em> back on the source website</dd>
604 -
605 - <dt><code>[author]</code></dt>
606 - <dd>A link with the name of the author who wrote the post, linking to other posts by the same author</dd>
607 -
608 - <dt><code>[author-name]</code></dt>
609 - <dd>Name of the author who wrote the post</dd>
610 -
611 - <dt><code>[feed-setting key="setting-name"]</code></dt>
612 - <dd>Value of a custom feed setting (named <code>setting-name</code>) for the feed</dd>
613 - </dl>
614 - </div>
615 -
616 482 <?php
617 - print "<ul>\n";
618 - if ( !is_array($attrib)) : $attrib = array(); endif;
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 +);
619 500
620 - print '<input type="hidden" id="next-boilerplate-rule-index" name="next_boilerplate_rule_index" value="'.count($attrib).'" />';
501 +// Feed-level settings don't exist for these.
502 +if ($postsPage->for_feed_settings()) :
503 + unset($boxes_by_methods['links_box']);
504 +endif;
621 505
622 - // In AJAX environment, this is a dummy rule that stays hidden. In a
623 - // non-AJAX environment, this provides a blank rule that we can fill in.
624 - $attrib['new'] = array(
625 - 'class' => array('hide-if-js'),
626 - 'placement' => 'before',
627 - 'element' => 'post',
628 - 'template' => '',
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()
629 513 );
630 -
631 - foreach ($attrib as $index => $line) :
632 - if (isset($line['template'])) :
633 - $selected['before'] = (($line['placement']=='before') ? ' selected="selected"' : '');
634 - $selected['after'] = (($line['placement']=='after') ? ' selected="selected"' : '');
635 - $selected['title'] = (($line['element']=='title') ? ' selected="selected"' : '');
636 - $selected['post'] = (($line['element']=='post') ? ' selected="selected"' : '');
637 - $selected['excerpt'] = (($line['element']=='excerpt') ? ' selected="selected"' : '');
638 -
639 - if ( !isset($line['class'])) : $line['class'] = array(); endif;
640 - $line['class'][] = 'boilerplate-li';
514 + endforeach;
515 + do_action('feedwordpress_admin_page_posts_meta_boxes', $postsPage);
641 516 ?>
642 -
643 -<li id="boilerplate-<?php print esc_attr($index); ?>-li" class="<?php print esc_attr(implode(' ', $line['class'])); ?>">&raquo; <strong>Add</strong> <select id="boilerplate-<?php print esc_attr($index); ?>-placement" name="boilerplate[<?php print esc_attr($index); ?>][placement]" style="width: 8.0em">
644 -<option value="before"<?php fwp_selected_flag( $selected, 'before' ); ?>>before</option>
645 -<option value="after"<?php fwp_selected_flag( $selected, 'after' ); ?>>after</option>
646 -</select> the <select style="width: 8.0em" id="boilerplate-<?php print esc_attr($index); ?>-element" name="boilerplate[<?php print esc_attr($index); ?>][element]">
647 -<option value="title"<?php fwp_selected_flag($selected, 'title' ); ?>>title</option>
648 -<option value="post"<?php fwp_selected_flag( $selected, 'post' ); ?>>content</option>
649 -<option value="excerpt"<?php fwp_selected_flag( $selected, 'excerpt' ); ?>>excerpt</option>
650 -</select> of
651 -<?php print esc_html($syndicatedPosts); ?>: <textarea style="vertical-align: top; width: 40%;" rows="2" cols="30" class="boilerplate-template" id="boilerplate-<?php print esc_attr($index); ?>-template" name="boilerplate[<?php print esc_attr($index); ?>][template]"><?php print esc_html($line['template']); ?></textarea></li>
517 + <div class="metabox-holder">
652 518 <?php
653 - endif;
654 - endforeach;
519 + fwp_do_meta_boxes($postsPage->meta_box_context(), $postsPage->meta_box_context(), $postsPage);
655 520 ?>
656 - </ul>
657 - <br style="clear: both" />
658 -
659 - <script type="text/javascript">
660 - jQuery(document).ready( function($) {
661 - $('.boilerplate-template').blur( function() {
662 - if (this.value.length == 0) {
663 - var theLi = $('li:has(#'+this.id+")");
664 - theLi.hide('normal')
665 - }
666 - } );
667 -
668 - var addRuleLi = document.createElement('li');
669 - addRuleLi.innerHTML = '<strong style="vertical-align: middle; font-size: 110%">[+]</strong> <a style="font-variant: small-caps" id="add-new-boilerplate-rule" href="#">Add new boilerplate</a> ….';
670 - $('#boilerplate-new-li').after(addRuleLi);
671 -
672 - $('#add-new-boilerplate-rule').click( function() {
673 - // Get index counter
674 - var nextIndex = parseInt($('#next-boilerplate-rule-index').val());
675 -
676 - var newIdPrefix = 'boilerplate-'+nextIndex;
677 - var newNamePrefix = 'boilerplate['+nextIndex+']';
678 -
679 - var dummy = {};
680 - dummy['li'] = {'el': $('#boilerplate-new-li') }
681 - dummy['placement'] = {'el': $('#boilerplate-new-placement') };
682 - dummy['element'] = {'el': $('#boilerplate-new-element') };
683 - dummy['template'] = {'el': $('#boilerplate-new-template') };
684 -
685 - for (var element in dummy) {
686 - dummy[element]['save'] = {
687 - 'id': dummy[element]['el'].attr('id'),
688 - 'name': dummy[element]['el'].attr('name')
689 - };
690 - dummy[element]['el'].attr('id', newIdPrefix+'-'+element);
691 - dummy[element]['el'].attr('name', newNamePrefix+'['+element+']');
692 - }
693 -
694 - var newLi = $('#'+newIdPrefix+'-li').clone(/*events=*/ true);
695 - //newLi.attr('id', null);
696 - newLi.removeClass('hide-if-js');
697 - newLi.addClass('boilerplate-li');
698 - newLi.css('display', 'none');
699 -
700 - // Switch back
701 - for (var element in dummy) {
702 - dummy[element]['el'].attr('id', dummy[element]['save']['id']);
703 - dummy[element]['el'].attr('name', dummy[element]['save']['name']);
704 - }
705 -
706 - $('#boilerplate-new-li').before(newLi);
707 - newLi.show('normal');
708 -
709 - $('#next-boilerplate-rule-index').val(nextIndex+1);
710 -
711 - return false;
712 - } )
713 - } );
714 - </script>
521 + </div> <!-- class="metabox-holder" -->
522 +</div> <!-- id="post-body" -->
715 523 <?php
716 - if ($page->for_default_settings()) :
717 -?>
718 - <h3>Advanced Settings</h3>
719 - <table class="edit-form narrow">
720 - <tbody>
721 - <tr><th scope="row"><?php esc_html_e("Hook Order:") ?></th>
722 - <td><input type="number" name="boilerplate_hook_order" value="<?php print esc_attr($hookOrder); ?>" /></td></tr>
723 - </tbody>
724 - </table>
725 -<?php
726 - endif;
727 - } /* FeedWordPressPostsPage::boilerplate_box() */
524 + $postsPage->close_sheet();
525 +} /* function fwp_posts_page () */
728 526
729 - function display () {
730 - $this->boxes_by_methods = array(
731 - 'publication_box' => __('Syndicated Posts'),
732 - 'links_box' => __('Links'),
733 - 'formatting_box' => __('Formatting'),
734 - 'boilerplate_box' => ('Boilerplate / Credits'),
735 - 'comments_and_pings_box' => __('Comments & Pings'),
736 - 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'),
737 - 'custom_post_types_box' => ('Custom Post Types (advanced database settings)'),
738 - );
739 -
740 - parent::display();
741 - } /* FeedWordPressPostsPage::display () */
742 -
743 -
744 -}
745 -
746 - $postsPage = new FeedWordPressPostsPage;
747 - $postsPage->display();
527 + fwp_posts_page();
748 528