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