PluginProbe
FeedWordPress / 2009.1112
FeedWordPress v2009.1112
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 2009.1112, at posts-page.php

464 lines 16.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 require_once(dirname(__FILE__) . '/admin-ui.php');
3
4 class FeedWordPressPostsPage extends FeedWordPressAdminPage {
5 var $link = NULL;
6
7 /**
8 * Construct the posts page object.
9 *
10 * @param mixed $link An object of class {@link SyndicatedLink} if created for one feed's settings, NULL if created for global default settings
11 */
12 function FeedWordPressPostsPage ($link = NULL) {
13 FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresspostspage', $link);
14 $this->dispatch = 'feedwordpress_posts_settings';
15 $this->filename = __FILE__;
16 } /* FeedWordPressPostsPage constructor */
17
18 /**
19 * Outputs "Publication" settings box.
20 *
21 * @since 2009.0713
22 * @param object $page of class FeedWordPressPostsPage tells us whether this is
23 * a page for one feed's settings or for global defaults
24 * @param array $box
25 *
26 * @uses FeedWordPressPostsPage::these_posts_phrase()
27 * @uses FeedWordPress::syndicated_status()
28 * @uses SyndicatedLink::syndicated_status()
29 * @uses SyndicatedPost::use_api()
30 * @uses fwp_option_box_opener()
31 * @uses fwp_option_box_closer()
32 */
33 /*static*/ function publication_box ($page, $box = NULL) {
34 global $fwp_path;
35
36 $post_status_global = FeedWordPress::syndicated_status('post', /*default=*/ 'publish');
37 $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' => ''),
44 );
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',
67 );
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
75 // Hey ho, let's go...
76 ?>
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>
92 </table>
93
94 <?php
95 } /* FeedWordPressPostsPage::publication_box () */
96
97 /**
98 * Outputs "Formatting" settings box
99 *
100 * @since 2009.0713
101 * @param object $page of class FeedWordPressPostsPage tells us whether this is
102 * a page for one feed's settings or for global defaults
103 * @param array $box
104 *
105 * @uses fwp_option_box_opener()
106 * @uses fwp_option_box_closer()
107 */
108 function formatting_box ($page, $box = NULL) {
109 $formatting_filters = get_option('feedwordpress_formatting_filters');
110 ?>
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>
121 </td></tr>
122 </table>
123 <?php
124 } /* FeedWordPressPostsPage::formatting_box() */
125
126 /**
127 * Output "Links" settings box
128 *
129 * @since 2009.0713
130 * @param object $page of class FeedWordPressPostsPage tells us whether this is
131 * a page for one feed's settings or for global defaults
132 * @param array $box
133 *
134 * @uses fwp_option_box_opener()
135 * @uses fwp_option_box_closer()
136 */
137 /*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');
140 ?>
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>
148
149 <tr><th scope="row">Posts from aggregator feeds:</th>
150 <td><ul class="options">
151 <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 <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>
153 </ul>
154 <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 This setting controls what FeedWordPress will give as the source of posts from
156 such an aggregator feed.</p>
157 </td></tr>
158 </table>
159
160 <?php
161 } /* FeedWordPressPostsPage::links_box() */
162
163 /**
164 * Output "Comments & Pings" settings box
165 *
166 * @since 2009.0713
167 * @param object $page of class FeedWordPressPostsPage tells us whether this is
168 * a page for one feed's settings or for global defaults
169 * @param array $box
170 *
171 * @uses fwp_option_box_opener()
172 * @uses fwp_option_box_closer()
173 */
174 /*static*/ function comments_and_pings_box ($page, $box = NULL) {
175 $setting = array();
176 $selector = array();
177
178 $whatsits = array(
179 'comment' => array('label' => __('Comments'), 'accept' => 'Allow comments'),
180 'ping' => array('label' => __('Pings'), 'accept' => 'Accept pings'),
181 );
182 $onThesePosts = 'on '.$page->these_posts_phrase();
183
184 foreach ($whatsits as $what => $how) :
185 $whatsits[$what]['default'] = FeedWordPress::syndicated_status($what, /*default=*/ 'closed');
186
187 // 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' => ''),
191 );
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',
209 );
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 endforeach;
217
218 // Hey ho, let's go...
219 ?>
220 <table class="form-table" cellspacing="2" cellpadding="5">
221 <?php foreach ($whatsits as $what => $how) : ?>
222 <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>
230 <?php endforeach; ?>
231 </table>
232
233 <?php
234 } /* FeedWordPressPostsPage::comments_and_pings_box() */
235
236 /**
237 * Output "Custom Post Settings" settings box
238 *
239 * @since 2009.0713
240 * @param object $page of class FeedWordPressPostsPage tells us whether this is
241 * a page for one feed's settings or for global defaults
242 * @param array $box
243 *
244 * @uses fwp_option_box_opener()
245 * @uses fwp_option_box_closer()
246 */
247 /*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
268 ?>
269 <div id="postcustomstuff">
270 <table id="meta-list" cellpadding="3">
271 <tr>
272 <th>Key</th>
273 <th>Value</th>
274 <th>Action</th>
275 </tr>
276
277 <?php
278 $i = 0;
279 foreach ($custom_settings as $key => $value) :
280 ?>
281 <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>
285 <td width="10%"><select name="notes[<?php echo $i; ?>][action]">
286 <option value="update">save changes</option>
287 <option value="delete">delete this setting</option>
288 </select></td>
289 </tr>
290
291 <?php
292 $i++;
293 endforeach;
294 ?>
295
296 <tr>
297 <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>
299 <td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
300 </tr>
301 </table>
302 </div> <!-- id="postcustomstuff" -->
303
304 <?php
305 } /* FeedWordPressPostsPage::custom_post_settings_box() */
306 }
307
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;
315
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;
340 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
403 do_action('feedwordpress_admin_page_posts_save', $GLOBALS['fwp_post'], $postsPage);
404 else :
405 $updated_link = false;
406 endif;
407
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()
448 );
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 () */
461
462 fwp_posts_page();
463
464