PluginProbe
FeedWordPress / trunk
FeedWordPress vtrunk
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 +545 -325 2010.0127trunk View file →
@@ -10,112 +10,158 @@
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 = $this->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 () {
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) :
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 + $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
35 41 endif;
36 -
37 - if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
38 - $custom_settings[$mn['key1']] = $mn['value']; // in with the new
42 + endif;
43 +
44 + if ( isset( $mn['key1'] ) ) :
45 + $mn['key1'] = trim( $mn['key1'] );
46 +
47 + if ( ( $mn['action']=='update' ) and ( strlen( $mn['key1'] ) > 0 ) ) :
48 + $custom_settings[ $mn['key1'] ] = $mn['value']; // in with the new
39 49 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;
79 + endif;
40 80 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'];
81 +
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']);
85 + else :
86 + $this->link->settings['syndicated post type'] = FeedWordPress::post( 'syndicated_post_type', null, 'text' );
50 87 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;
88 + endif;
63 89
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);
90 + 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');
80 122 else :
81 - // update_option ...
82 - if (isset($post['feed_post_status'])) :
83 - update_option('feedwordpress_syndicated_post_status', $post['feed_post_status']);
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] );
84 142 endif;
143 + endforeach;
85 144
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']);
94 - 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');
99 - endif;
145 + // Convert indexes to 0..(N-1) to avoid possible collisions
146 + $boilerplate = array_values( $boilerplate );
100 147
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;
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 );
108 153 endif;
154 + endif;
109 155
110 - // Probably a "Go" button for the drop-down
111 - else :
112 - $this->updated = false;
113 - endif;
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();
114 160 }
115 161
116 162 /**
117 - * Outputs "Publication" settings box.
163 + * publication_box: Outputs "Publication" settings box.
118 164 *
119 165 * @since 2009.0713
120 166 * @param object $page of class FeedWordPressPostsPage tells us whether this is
121 167 * a page for one feed's settings or for global defaults
@@ -123,112 +169,70 @@
123 169 *
124 170 * @uses FeedWordPressPostsPage::these_posts_phrase()
125 171 * @uses FeedWordPress::syndicated_status()
126 172 * @uses SyndicatedLink::syndicated_status()
127 - * @uses SyndicatedPost::use_api()
128 - * @uses fwp_option_box_opener()
129 - * @uses fwp_option_box_closer()
130 - */
173 + */
131 174 /*static*/ function publication_box ($page, $box = NULL) {
132 - global $fwp_path;
133 -
134 - $post_status_global = FeedWordPress::syndicated_status('post', /*default=*/ 'publish');
135 175 $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' => ''),
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",
142 181 );
143 - if (SyndicatedPost::use_api('post_status_pending')) :
144 - $setting['pending'] = array('label' => "Hold %s for review; mark as Pending", 'checked' => '');
145 - endif;
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;
146 187
188 + $params = array(
189 + 'input-name' => 'feed_post_status',
190 + 'setting-default' => NULL,
191 + 'global-setting-default' => 'publish',
192 + 'labels' => $labels,
193 + );
147 194
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 195 // Hey ho, let's go...
176 196 ?>
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>
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>
192 206
193 207 <?php $page->updatedPosts->display(); ?>
194 208 </table>
195 -
209 +
196 210 <?php
197 211 } /* FeedWordPressPostsPage::publication_box () */
198 -
212 +
199 213 /**
200 214 * Outputs "Formatting" settings box
201 215 *
202 216 * @since 2009.0713
203 - * @param object $page of class FeedWordPressPostsPage tells us whether this is
204 - * a page for one feed's settings or for global defaults
217 + * @param FeedWordPressPostsPage $page of class FeedWordPressPostsPage tells us whether this is
218 + * a page for one feed's settings or for global defaults
205 219 * @param array $box
206 220 *
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');
221 + */
222 + function formatting_box( $page, $box = NULL ) {
223 + $thesePosts = $page->these_posts_phrase(); // result unused, why? (gwyneth 20230920)
224 +
214 225 if ($page->for_feed_settings()) :
215 226 $formatting_filters = null;
216 - $resolve_relative = $page->link->setting('resolve relative', NULL, 'default');
217 227 $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 228 else :
224 229 $formatting_filters = get_option('feedwordpress_formatting_filters', 'no');
225 - $resolve_relative = $global_resolve_relative;
226 230 $url = 'http://example.com';
227 231 endif;
228 232 ?>
229 - <table class="form-table" cellspacing="2" cellpadding="5">
230 - <?php if (!is_null($formatting_filters)) : ?>
233 + <table class="edit-form narrow">
234 + <?php if ( !is_null($formatting_filters)) : ?>
231 235
232 236 <tr><th scope="row">Formatting filters:</th>
233 237 <td><select name="formatting_filters" size="1">
234 238 <option value="no"<?php echo ($formatting_filters!='yes')?' selected="selected"':''; ?>>Protect syndicated posts from formatting filters</option>
@@ -240,30 +244,40 @@
240 244 problem.</p>
241 245 </td></tr>
242 246
243 247 <?php endif; ?>
244 -
248 +
245 249 <tr><th scope="row">Relative URIs:</th>
246 - <td>If link or image in a syndicated post from <code><?php print $url; ?></code>
250 + <td><p>If link or image in a syndicated post from <code><?php print esc_html($url); ?></code>
247 251 refers to a partial URI like <code>/about</code>, where should
248 252 the syndicated copy point to?</p>
249 253
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>
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 + ?>
260 274 </td></tr>
261 275
262 276 </table>
263 277 <?php
264 278 } /* FeedWordPressPostsPage::formatting_box() */
265 -
279 +
266 280 /**
267 281 * Output "Links" settings box
268 282 *
269 283 * @since 2009.0713
@@ -270,23 +284,39 @@
270 284 * @param object $page of class FeedWordPressPostsPage tells us whether this is
271 285 * a page for one feed's settings or for global defaults
272 286 * @param array $box
273 287 *
274 - * @uses fwp_option_box_opener()
275 - * @uses fwp_option_box_closer()
276 288 */
277 289 /*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');
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;
280 300 ?>
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 -
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()) : ?>
289 319 <tr><th scope="row">Posts from aggregator feeds:</th>
290 320 <td><ul class="options">
291 321 <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 322 <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 +324,9 @@
294 324 <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 325 This setting controls what FeedWordPress will give as the source of posts from
296 326 such an aggregator feed.</p>
297 327 </td></tr>
328 + <?php endif; ?>
298 329 </table>
299 330
300 331 <?php
301 332 } /* FeedWordPressPostsPage::links_box() */
@@ -307,15 +338,10 @@
307 338 * @param object $page of class FeedWordPressPostsPage tells us whether this is
308 339 * a page for one feed's settings or for global defaults
309 340 * @param array $box
310 341 *
311 - * @uses fwp_option_box_opener()
312 - * @uses fwp_option_box_closer()
313 342 */
314 343 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
315 - $setting = array();
316 - $selector = array();
317 -
318 344 $whatsits = array(
319 345 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
320 346 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
321 347 );
@@ -320,59 +346,101 @@
320 346 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
321 347 );
322 348 $onThesePosts = 'on '.$page->these_posts_phrase();
323 349
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();
324 365 foreach ($whatsits as $what => $how) :
325 366 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
326 367
327 368 // 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' => ''),
369 + $settings[$what] = array(
370 + 'open' => sprintf(__("{$how['accept']} %s"), __($onThesePosts)),
371 + 'closed' => sprintf(__("Don't ".strtolower($how['accept'])." %s"), __($onThesePosts)),
331 372 );
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',
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 + ),
349 381 );
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 382 endforeach;
357 383
358 384 // Hey ho, let's go...
359 385 ?>
360 - <table class="form-table" cellspacing="2" cellpadding="5">
386 + <table class="edit-form narrow">
361 387 <?php foreach ($whatsits as $what => $how) : ?>
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>
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 +
370 397 <?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>
371 409 </table>
372 410
373 411 <?php
374 412 } /* 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 + }
375 443
376 444 /**
377 445 * Output "Custom Post Settings" settings box
378 446 *
@@ -379,35 +447,14 @@
379 447 * @since 2009.0713
380 448 * @param object $page of class FeedWordPressPostsPage tells us whether this is
381 449 * a page for one feed's settings or for global defaults
382 450 * @param array $box
383 - *
384 - * @uses fwp_option_box_opener()
385 - * @uses fwp_option_box_closer()
386 451 */
387 452 /*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 -
453 + $custom_settings = FeedWordPressPostsPage::custom_post_settings($page);
408 454 ?>
409 455 <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>
410 457 <table id="meta-list" cellpadding="3">
411 458 <tr>
412 459 <th>Key</th>
413 460 <th>Value</th>
@@ -418,12 +465,13 @@
418 465 $i = 0;
419 466 foreach ($custom_settings as $key => $value) :
420 467 ?>
421 468 <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>
425 - <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
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]">
426 474 <option value="update">save changes</option>
427 475 <option value="delete">delete this setting</option>
428 476 </select></td>
429 477 </tr>
@@ -432,97 +480,269 @@
432 480 $i++;
433 481 endforeach;
434 482 ?>
435 483
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>
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>
440 494 </tr>
441 495 </table>
442 496 </div> <!-- id="postcustomstuff" -->
443 497
444 498 <?php
445 - } /* FeedWordPressPostsPage::custom_post_settings_box() */
446 -}
499 + } /* FeedWordPressPostsPage::custom_post_settings_box() */
447 500
448 -function fwp_posts_page () {
449 - global $wpdb, $wp_db_version;
450 - global $fwp_post;
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'
451 505
452 - if (FeedWordPress::needs_upgrade()) :
453 - fwp_upgrade_page();
454 - return;
455 - endif;
506 + // Get all custom post types
507 + $post_types = get_post_types(array(
508 + '_builtin' => false,
509 + ), 'objects');
456 510
457 - // If this is a POST, validate source and user credentials
458 - FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_posts_settings', /*capability=*/ 'manage_links');
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;
459 516
460 - $link = FeedWordPressAdminPage::submitted_link();
461 - $link_id = $link->id;
462 - $postsPage = new FeedWordPressPostsPage($link);
517 + $params = array(
518 + 'global-setting-default' => 'post',
519 + 'default-input-value' => 'default',
520 + );
463 521
464 - $mesg = null;
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() */
465 540
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();
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 + }
475 575
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; ?>
576 + .boilerplate-li {
577 + padding-bottom: 5px;
578 + margin-bottom: 5px;
579 + border-bottom: 1px dotted black;
580 + }
481 581
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 +
482 616 <?php
483 - $links = FeedWordPress::syndicated_links();
484 - $postsPage->open_sheet('Syndicated Posts & Links');
617 + print "<ul>\n";
618 + if ( !is_array($attrib)) : $attrib = array(); endif;
619 +
620 + print '<input type="hidden" id="next-boilerplate-rule-index" name="next_boilerplate_rule_index" value="'.count($attrib).'" />';
621 +
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' => '',
629 + );
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';
485 641 ?>
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">
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>
492 652 <?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 -);
653 + endif;
654 + endforeach;
655 +?>
656 + </ul>
657 + <br style="clear: both" />
500 658
501 -// Feed-level settings don't exist for these.
502 -if ($postsPage->for_feed_settings()) :
503 - unset($boxes_by_methods['links_box']);
504 -endif;
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 + } );
505 667
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()
513 - );
514 - endforeach;
515 - do_action('feedwordpress_admin_page_posts_meta_boxes', $postsPage);
516 -?>
517 - <div class="metabox-holder">
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>
518 715 <?php
519 - fwp_do_meta_boxes($postsPage->meta_box_context(), $postsPage->meta_box_context(), $postsPage);
716 + if ($page->for_default_settings()) :
520 717 ?>
521 - </div> <!-- class="metabox-holder" -->
522 -</div> <!-- id="post-body" -->
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>
523 725 <?php
524 - $postsPage->close_sheet();
525 -} /* function fwp_posts_page () */
726 + endif;
727 + } /* FeedWordPressPostsPage::boilerplate_box() */
526 728
527 - fwp_posts_page();
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();
528 748