PluginProbe
FeedWordPress / 2011.1018
FeedWordPress v2011.1018
trunk 0.8 0.9 0.91 0.95 0.96 0.97 0.98 0.981 0.99 0.991 0.992 0.993 2008.1030 2008.1101 2008.1105 2008.1214 2009.0612 2009.0613 2009.0618 2009.0707 2009.1111 2009.1112 2010.0127 2010.0528 All 65 releases
feedwordpress / posts-page.php

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

515 lines 17.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 require_once(dirname(__FILE__) . '/admin-ui.php');
3 require_once(dirname(__FILE__) . '/updatedpostscontrol.class.php');
4
5 class FeedWordPressPostsPage extends FeedWordPressAdminPage {
6 var $link = NULL;
7 var $updatedPosts = NULL;
8
9 /**
10 * Construct the posts page object.
11 *
12 * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings
13 */
14 function FeedWordPressPostsPage ($link = -1) {
15 if (is_numeric($link) and -1 == $link) :
16 $link = FeedWordPressAdminPage::submitted_link();
17 endif;
18
19 FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresspostspage', $link);
20 $this->dispatch = 'feedwordpress_admin_page_posts';
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 );
29 } /* FeedWordPressPostsPage constructor */
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
125 /**
126 * Outputs "Publication" settings box.
127 *
128 * @since 2009.0713
129 * @param object $page of class FeedWordPressPostsPage tells us whether this is
130 * a page for one feed's settings or for global defaults
131 * @param array $box
132 *
133 * @uses FeedWordPressPostsPage::these_posts_phrase()
134 * @uses FeedWordPress::syndicated_status()
135 * @uses SyndicatedLink::syndicated_status()
136 * @uses SyndicatedPost::use_api()
137 */
138 /*static*/ function publication_box ($page, $box = NULL) {
139 $thesePosts = $page->these_posts_phrase();
140 $postSelector = array(
141 'publish' => "Publish %s immediately",
142 'pending' => "Hold %s for review; mark as Pending",
143 'draft' => "Save %s as drafts",
144 'private' => "Save %s as private posts",
145 );
146 $labels = array();
147 foreach ($postSelector as $index => $value) :
148 $postSelector[$index] = sprintf(__($value), $thesePosts);
149 $labels[$index] = __(str_replace(' %s', '', strtolower(strtok($value, ';'))));
150 endforeach;
151
152 $params = array(
153 'input-name' => 'feed_post_status',
154 'setting-default' => NULL,
155 'global-setting-default' => 'publish',
156 'labels' => $labels,
157 );
158
159 // Hey ho, let's go...
160 ?>
161 <table id="syndicated-publication-form" class="edit-form narrow">
162 <tr><th scope="row"><?php _e('New posts:'); ?></th>
163 <td><?php
164 $this->setting_radio_control(
165 'post status', 'syndicated_post_status',
166 $postSelector, $params
167 );
168 ?>
169 </td></tr>
170
171 <?php $page->updatedPosts->display(); ?>
172 </table>
173
174 <?php
175 } /* FeedWordPressPostsPage::publication_box () */
176
177 /**
178 * Outputs "Formatting" settings box
179 *
180 * @since 2009.0713
181 * @param object $page of class FeedWordPressPostsPage tells us whether this is
182 * a page for one feed's settings or for global defaults
183 * @param array $box
184 *
185 */
186 function formatting_box ($page, $box = NULL) {
187 $thesePosts = $page->these_posts_phrase();
188
189 if ($page->for_feed_settings()) :
190 $formatting_filters = null;
191 $url = preg_replace('|/+$|', '', $page->link->homepage());
192 else :
193 $formatting_filters = get_option('feedwordpress_formatting_filters', 'no');
194 $url = 'http://example.com';
195 endif;
196 ?>
197 <table class="edit-form narrow">
198 <?php if (!is_null($formatting_filters)) : ?>
199
200 <tr><th scope="row">Formatting filters:</th>
201 <td><select name="formatting_filters" size="1">
202 <option value="no"<?php echo ($formatting_filters!='yes')?' selected="selected"':''; ?>>Protect syndicated posts from formatting filters</option>
203 <option value="yes"<?php echo ($formatting_filters=='yes')?' selected="selected"':''; ?>>Expose syndicated posts to formatting filters</option>
204 </select>
205 <p class="setting-description">If you have trouble getting plugins to work that are supposed to insert
206 elements after posts (like relevant links or a social networking
207 <q>Share This</q> button), try changing this option to see if it fixes your
208 problem.</p>
209 </td></tr>
210
211 <?php endif; ?>
212
213 <tr><th scope="row">Relative URIs:</th>
214 <td><p>If link or image in a syndicated post from <code><?php print $url; ?></code>
215 refers to a partial URI like <code>/about</code>, where should
216 the syndicated copy point to?</p>
217
218 <?php
219 $options = array(
220 '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>',
221 '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>',
222 );
223 $params = array(
224 'setting-default' => 'default',
225 'global-setting-default' => 'yes',
226 'labels' => array(
227 'yes' => __('resolve relative URIs'),
228 'no' => __('leave relative URIs unresolved'),
229 ),
230 'default-input-value' => 'default',
231 );
232
233 $this->setting_radio_control(
234 'resolve relative', 'resolve_relative',
235 $options, $params
236 );
237 ?>
238 </td></tr>
239
240 </table>
241 <?php
242 } /* FeedWordPressPostsPage::formatting_box() */
243
244 /**
245 * Output "Links" settings box
246 *
247 * @since 2009.0713
248 * @param object $page of class FeedWordPressPostsPage tells us whether this is
249 * a page for one feed's settings or for global defaults
250 * @param array $box
251 *
252 */
253 /*static*/ function links_box ($page, $box = NULL) {
254 $setting = array(
255 'munge_permalink' => array(
256 'yes' => __('The copy on the original website'),
257 'no' => __('The local copy on this website'),
258 ),
259 );
260
261 if (!$page->for_feed_settings()) :
262 $use_aggregator_source_data = get_option('feedwordpress_use_aggregator_source_data');
263 endif;
264 ?>
265 <table class="edit-form narrow">
266 <tr><th scope="row">Permalinks point to:</th>
267 <td><?php
268
269 $params = array(
270 'setting-default' => 'default',
271 'global-setting-default' => 'yes',
272 'default-input-value' => 'default',
273 );
274 $this->setting_radio_control(
275 'munge permalink', 'munge_permalink',
276 $setting['munge_permalink'], $params
277 );
278 ?>
279
280 </td></tr>
281
282 <?php if (!$page->for_feed_settings()) : ?>
283 <tr><th scope="row">Posts from aggregator feeds:</th>
284 <td><ul class="options">
285 <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>
286 <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>
287 </ul>
288 <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.
289 This setting controls what FeedWordPress will give as the source of posts from
290 such an aggregator feed.</p>
291 </td></tr>
292 <?php endif; ?>
293 </table>
294
295 <?php
296 } /* FeedWordPressPostsPage::links_box() */
297
298 /**
299 * Output "Comments & Pings" settings box
300 *
301 * @since 2009.0713
302 * @param object $page of class FeedWordPressPostsPage tells us whether this is
303 * a page for one feed's settings or for global defaults
304 * @param array $box
305 *
306 */
307 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
308 $whatsits = array(
309 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
310 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
311 );
312 $onThesePosts = 'on '.$page->these_posts_phrase();
313
314 $mcflSettings = array(
315 "yes" => __('Point to comment feeds from the original website (when provided by the syndicated feed)'),
316 "no" => __('Point to local comment feeds on this website'),
317 );
318 $mcflParams = array(
319 'setting-default' => 'default',
320 'global-setting-default' => 'yes',
321 'labels' => array(
322 'yes' => __('comment feeds from the original website'),
323 'no' => __('local comment feeds on this website')
324 ),
325 'default-input-value' => 'default',
326 );
327
328 $settings = array(); $params = array();
329 foreach ($whatsits as $what => $how) :
330 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
331
332 // Set up array for selector
333 $settings[$what] = array(
334 'open' => sprintf(__("{$how['accept']} %s"), __($onThesePosts)),
335 'closed' => sprintf(__("Don't ".strtolower($how['accept'])." %s"), __($onThesePosts)),
336 );
337 $params[$what] = array(
338 'input-name' => "feed_${what}_status",
339 'setting-default' => NULL,
340 'global-setting-default' => FeedWordPress::syndicated_status($what, /*default=*/ 'closed'),
341 'labels' => array(
342 'open' => strtolower(__($how['accept'])),
343 'closed' => strtolower(__("Don't ".$how['accept'])),
344 ),
345 );
346 endforeach;
347
348 // Hey ho, let's go...
349 ?>
350 <table class="edit-form narrow">
351 <?php foreach ($whatsits as $what => $how) : ?>
352
353 <tr><th scope="row"><?php print $how['label']; ?>:</th>
354 <td><?php
355 $this->setting_radio_control(
356 "$what status", "syndicated_${what}_status",
357 $settings[$what], $params[$what]
358 );
359 ?></td></tr>
360
361 <?php endforeach; ?>
362
363 <tr><th scope="row"><?php _e('Comment feeds'); ?></th>
364 <td><p>When WordPress feeds and templates link to comments
365 feeds for <?php print $page->these_posts_phrase(); ?>, the
366 URLs for the feeds should...</p>
367 <?php
368 $this->setting_radio_control(
369 "munge comments feed links", "munge_comments_feed_links",
370 $mcflSettings, $mcflParams
371 );
372 ?></td></tr>
373 </table>
374
375 <?php
376 } /* FeedWordPressPostsPage::comments_and_pings_box() */
377
378 /*static*/ function custom_post_settings ($page = NULL) {
379 if (is_null($page)) :
380 $page = $this;
381 endif;
382
383 if ($page->for_feed_settings()) :
384 $custom_settings = $page->link->setting("postmeta", NULL, array());
385 else :
386 $custom_settings = get_option('feedwordpress_custom_settings');
387 endif;
388
389 if ($custom_settings and !is_array($custom_settings)) :
390 $custom_settings = unserialize($custom_settings);
391 endif;
392
393 if (!is_array($custom_settings)) :
394 $custom_settings = array();
395 endif;
396
397 return $custom_settings;
398 } /* FeedWordPressPostsPage::custom_post_settings() */
399
400 /**
401 * Output "Custom Post Settings" settings box
402 *
403 * @since 2009.0713
404 * @param object $page of class FeedWordPressPostsPage tells us whether this is
405 * a page for one feed's settings or for global defaults
406 * @param array $box
407 */
408 /*static*/ function custom_post_settings_box ($page, $box = NULL) {
409 $custom_settings = FeedWordPressPostsPage::custom_post_settings($page);
410 ?>
411 <div id="postcustomstuff">
412 <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>
413 <table id="meta-list" cellpadding="3">
414 <tr>
415 <th>Key</th>
416 <th>Value</th>
417 <th>Action</th>
418 </tr>
419
420 <?php
421 $i = 0;
422 foreach ($custom_settings as $key => $value) :
423 ?>
424 <tr style="vertical-align:top">
425 <th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo esc_html($key); ?>" />
426 <input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo esc_html($key); ?>" /></th>
427 <td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo esc_html($value); ?></textarea></td>
428 <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
429 <option value="update">save changes</option>
430 <option value="delete">delete this setting</option>
431 </select></td>
432 </tr>
433
434 <?php
435 $i++;
436 endforeach;
437 ?>
438
439 <tr style="vertical-align: top">
440 <th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
441 <td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea>
442 <p>Enter a text value, or a path to a data element from the syndicated item.<br/>
443 For data elements, you can use an XPath-like syntax wrapped in <code>$( ... )</code>.<br/>
444 <code>hello</code> = the text value <code><span style="background-color: #30FFA0;">hello</span></code><br/>
445 <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/>
446 <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>
447 </td>
448 <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
449 </tr>
450 </table>
451 </div> <!-- id="postcustomstuff" -->
452
453 <?php
454 } /* FeedWordPressPostsPage::custom_post_settings_box() */
455
456 function custom_post_types_box ($page, $box = NULL) {
457 global $fwp_path;
458
459 // local: syndicated post type // default NULL
460 // global: syndicated_post_type // default 'post'
461 // default-input-value => 'default'
462
463 // Get all custom post types
464 $post_types = get_post_types(array(
465 '_builtin' => false,
466 ), 'objects');
467
468 $ul = array();
469 $ul['post'] = __('Normal WordPress posts');
470 foreach ($post_types as $post_type) :
471 $ul[$post_type->name] = __($post_type->labels->name);
472 endforeach;
473
474 $params = array(
475 'global-setting-default' => 'post',
476 'default-input-value' => 'default',
477 );
478
479 // Hey, ho, let's go...
480 ?>
481 <table class="edit-form narrow">
482 <tbody>
483 <tr><th><?php _e('Custom Post Types:'); ?></th>
484 <td><p>Incoming syndicated posts should be stored in the
485 posts database as...</p>
486 <?php
487 $this->setting_radio_control(
488 'syndicated post type', 'syndicated_post_type',
489 $ul, $params
490 );
491 ?>
492 </td></tr>
493 </tbody>
494 </table>
495 <?php
496 } /* FeedWordPressPostsPage::custom_post_types_box() */
497
498 function display () {
499 $this->boxes_by_methods = array(
500 'publication_box' => __('Syndicated Posts'),
501 'links_box' => __('Links'),
502 'formatting_box' => __('Formatting'),
503 'comments_and_pings_box' => __('Comments & Pings'),
504 'custom_post_settings_box' => __('Custom Post Settings (to apply to each syndicated post)'),
505 'custom_post_types_box' => ('Custom Post Types (advanced database settings)'),
506 );
507
508 parent::display();
509 } /* FeedWordPressPostsPage::display () */
510 }
511
512 $postsPage = new FeedWordPressPostsPage;
513 $postsPage->display();
514
515