PluginProbe
FeedWordPress / 2024.1119
FeedWordPress v2024.1119
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 / categories-page.php

categories-page.php in FeedWordPress 2024.1119, at categories-page.php

624 lines 21.7 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 FeedWordPressCategoriesPage extends FeedWordPressAdminPage {
5 public function __construct( $link = -1 ) {
6 if (is_numeric($link) and -1 == $link) :
7 $link = $this->submitted_link();
8 endif;
9
10 parent::__construct('feedwordpresscategories', $link);
11 $this->dispatch = 'feedwordpress_admin_page_categories';
12 $this->pagenames = array(
13 'default' => 'Categories & Tags',
14 'settings-update' => 'Syndicated Categories & Tags',
15 'open-sheet' => 'Categories & Tags',
16 );
17 $this->filename = __FILE__;
18 }
19
20 function unfamiliar_category_label ($name) {
21 if (preg_match('/^create:(.*)$/', $name, $refs)) :
22 $tax = get_taxonomy($refs[1]);
23 $name = sprintf(__('Create new %s to match them'), $tax->labels->name);
24 endif;
25 return $name;
26 }
27
28 public function setting_radio_label( $li ) {
29 if ( is_array($li['label'] ) ) :
30 list( $a_href, $s_currently ) = $li['label'];
31 printf(
32 'Use the <a href="%s">site-wide setting</a> <span class="current-setting">Currently: <strong>%s</strong></span>',
33 esc_url( $a_href ),
34 esc_html( $s_currently )
35 );
36 else :
37 print esc_html( $li['label'] );
38 endif;
39 }
40
41 function feed_categories_box ($page, $box = NULL) {
42 $link = $page->link;
43
44 $globalPostType = get_option('feedwordpress_syndicated_post_type', 'post');
45 if ($this->for_feed_settings()) :
46 $post_type = $link->setting('syndicated post type', 'syndicated_post_type', 'post');
47 else :
48 $post_type = $globalPostType;
49 endif;
50 $taxonomies = get_object_taxonomies(array('object_type' => $post_type), 'names');
51
52 $unmatched = array('category' => array(), 'post_tag' => array());
53 $matchUl = array('cats' => array(), 'tags' => array(), 'filter' => array());
54 $tagLikeTaxonomies = array();
55 foreach ($taxonomies as $tax) :
56 $taxonomy = get_taxonomy($tax);
57
58 if ( ! $taxonomy->hierarchical) :
59 $tagLikeTaxonomies[] = $tax;
60 endif;
61
62 $name = 'create:'.$tax;
63 foreach (array('category', 'post_tag') as $what) :
64 $unmatched[$what][$name] = array(
65 'label' => $this->unfamiliar_category_label($name),
66 );
67 $unmatchedRadio[$what][$name] = '';
68 endforeach;
69
70 foreach (array('cats', 'tags', 'filter') as $what) :
71 $matchUl[$what][$tax] = array(
72 'checked' => '',
73 'labels' => $taxonomy->labels,
74 );
75 endforeach;
76 endforeach;
77
78 foreach ($unmatched as $what => $um) :
79 $unmatched[$what]['null'] = array('label' => __('Don\'t create any matching terms'));
80 $unmatchedRadio[$what]['null'] = '';
81 endforeach;
82
83 $globalUnmatched = array(
84 'category' => FeedWordPress::on_unfamiliar('category'),
85 'post_tag' => FeedWordPress::on_unfamiliar('post_tag'),
86 );
87 foreach ($globalUnmatched as $what => $value) :
88 if ($value=='create') : $value = 'create:category'; endif;
89 if ($value=='tag') : $value = 'create:post_tag'; endif;
90 $globalUnmatched[$what] = $value;
91 endforeach;
92
93 $globalMatch['cats'] = get_option('feedwordpress_match_cats', $taxonomies);
94 $globalMatch['tags'] = get_option('feedwordpress_match_tags', $tagLikeTaxonomies);
95 $globalMatch['filter'] = get_option('feedwordpress_match_filter', array());
96
97 $globalMatchLabels = array();
98 $nothingDoing = array('cats' => "won't try to match", 'tags' => "won't try to match", "filter" => "won't filter");
99
100 foreach ($globalMatch as $what => $domain) :
101 $labels = array(); $domain = array_filter($domain, 'remove_dummy_zero');
102 foreach ($domain as $tax) :
103 $tax = get_taxonomy($tax);
104 $labels[] = $tax->labels->name;
105 endforeach;
106
107 if (count($labels) > 0) :
108 $globalMatchLabels[$what] = implode(", ", $labels);
109 else :
110 $globalMatchLabels[$what] = $nothingDoing[$what];
111 endif;
112 endforeach;
113
114 if ($this->for_feed_settings()) :
115 $href = $this->admin_page_href(basename(__FILE__));
116
117 foreach ($unmatched as $what => $um) :
118 // Is the global default setting appropriate to this post type?
119 $GUC = $globalUnmatched[$what];
120 if (isset($um[$GUC])) :
121 // Yup. Let's add a site-default option
122 $currently = $um[$GUC]['label'];
123 $defaultLi = array(
124 'site-default' => array(
125 'label' => [ $href, $currently ],
126 ),
127 );
128 $unmatchedColumns[$what] = array(
129 $defaultLi,
130 );
131 $unmatchedDefault[$what] = 'site-default';
132 $unmatchedRadio[$what]['site-default'] = '';
133 else :
134 $opts = array_keys($unmatched[$what]);
135 $unmatchedDefault[$what] = $opts[0];
136 $unmatchedColumns[$what] = array();
137 endif;
138
139 $ucKey[$what] = $link->setting("unfamiliar $what", NULL, NULL);
140 endforeach;
141
142 $match['cats'] = $this->link->setting('match/cats', NULL, NULL);
143 $match['tags'] = $this->link->setting('match/tags', NULL, NULL);
144 $match['filter'] = $this->link->setting('match/filter', NULL, NULL);
145 else :
146 foreach ($unmatched as $what => $um) :
147 $ucKey[$what] = FeedWordPress::on_unfamiliar($what);
148 endforeach;
149
150 $match = $globalMatch;
151 endif;
152
153 foreach ($ucKey as $what => $uck) :
154 if ($uck == 'tag') : $uck = 'create:post_tag'; endif;
155 if ($uck == 'create') : $uck = 'create:category'; endif;
156
157 if ( !is_string($uck)) :
158 $uck = $unmatchedDefault[$what];
159 endif;
160 $ucKey[$what] = $uck;
161
162 if ( !array_key_exists($uck, $unmatchedRadio[$what])) :
163 $obsoleteLi = array(
164 $uck => array(
165 'label' => ' <span style="font-style: italic; color: #777;">'.$this->unfamiliar_category_label($uck).'</span> <span style="background-color: #ffff90; color: black;">(This setting is no longer applicable to the type of post syndicated from this feed!)</span><p>Please change this one of the following settings:</p>',
166 ),
167 );
168 $unmatched[$what] = array_merge($obsoleteLi, $unmatched[$what]);
169 $unmatchedRadio[$what][$uck] = ' disabled="disabled"';
170 endif;
171
172 $unmatchedRadio[$what][$uck] .= ' checked="checked"';
173
174 $unmatchedColumns[$what][] = $unmatched[$what];
175 endforeach;
176
177 $defaulted = array();
178 foreach ($match as $what => $set) :
179 $defaulted[$what] = false;
180 if (is_null($set) or (count($set) < 1)) :
181 $defaulted[$what] = true;
182 if ($this->for_feed_settings()) :
183 $set = $globalMatch[$what];
184 $match[$what] = $globalMatch[$what];
185 endif;
186 endif;
187
188 if ( ! $defaulted[$what] or $this->for_feed_settings()) :
189 foreach ($set as $against) :
190 if (array_key_exists($against, $matchUl[$what])) :
191 $matchUl[$what][$against]['checked'] = ' checked="checked"';
192 endif;
193 endforeach;
194 endif;
195 endforeach;
196
197 // Hey ho, let's go...
198 $offerSiteWideSettings = ($page->for_feed_settings() and ($post_type==$globalPostType));
199 ?>
200 <table class="edit-form narrow">
201 <tr>
202 <th scope="row">Match feed categories:</th>
203 <td><input type="hidden" name="match_categories[cats][]" value="0" />
204 <?php if ($offerSiteWideSettings) : ?>
205 <table class="twofer">
206 <tbody>
207 <tr><td class="equals first <?php if ($defaulted['cats']) : ?>active<?php else: ?>inactive<?php endif; ?>"><p><label><input type="radio" name="match_default[cats]"
208 value="yes" <?php if ($defaulted['cats']) : ?> checked="checked"<?php endif; ?> /><?php $this->setting_radio_label( array( "label" => array ( $href, $globalMatchLabels['cats'] ) ) ); ?></label></p></td>
209 <td class="equals second <?php if ($defaulted['cats']) : ?>inactive<?php else: ?>active<?php endif; ?>"><p><label><input type="radio" name="match_default[cats]"
210 value="no" <?php if ( ! $defaulted['cats']) : ?> checked="checked"<?php endif; ?> />
211 Do something different with this feed.</label>
212 <?php else : ?>
213 <p>
214 <?php endif; ?>
215 When a feed provides categories for a post, try to match those categories
216 locally with:</p>
217 <ul class="options compact">
218 <?php foreach ($matchUl['cats'] as $name => $li) : ?>
219 <li><label><input type="checkbox"
220 name="match_categories[cats][]" value="<?php print esc_attr( $name ); ?>"
221 <?php fwp_checked_flag($li, 'checked'); ?> /> <?php $l = $li['labels']; print esc_html($l->name); ?></label></li>
222 <?php endforeach; ?>
223 </ul>
224 <?php if ($offerSiteWideSettings) : ?>
225 </td></tr>
226 </tbody>
227 </table>
228 <?php endif; ?>
229 </td>
230 </tr>
231
232 <tr>
233 <th scope="row">Unmatched categories:</th>
234 <td><p>When <?php print esc_html( $this->these_posts_phrase() ); ?> have categories on
235 the feed that don't have any local matches yet...</p>
236
237 <?php if (count($unmatchedColumns['category']) > 1) : ?>
238 <table class="twofer">
239 <?php else : ?>
240 <table style="width: 100%">
241 <?php endif; ?>
242 <tbody>
243 <tr>
244 <?php foreach ($unmatchedColumns['category'] as $index => $column) : ?>
245 <td class="equals <?php print (($index == 0) ? 'first' : 'second'); ?> inactive"><ul class="options">
246 <?php
247 foreach ($column as $name => $li) :
248 ?>
249 <li><label><input type="radio" name="unfamiliar_category" value="<?php print esc_attr( $name ); ?>"<?php fwp_checked_flag($unmatchedRadio['category'][$name]); ?> /> <?php
250 $this->setting_radio_label( $li );
251 ?></label></li>
252 <?php
253 endforeach; ?>
254 </ul></td>
255 <?php endforeach; ?>
256 </tr>
257 </tbody>
258 </table>
259 </td></tr>
260
261 <tr>
262 <th scope="row">Match inline tags:
263 <p class="setting-description">Applies only to inline tags marked
264 as links in the text of syndicated posts, using the
265 <code>&lt;a rel="tag"&gt;...&lt;/a&gt;</code> microformat.
266 Most feeds with "tags" just treat them as normal feed categories,
267 like those handled above.</p>
268 </th>
269 <td><input type="hidden" name="match_categories[tags][]" value="0" />
270 <?php if ($offerSiteWideSettings) : ?>
271 <table class="twofer">
272 <tbody>
273 <tr><td class="equals first <?php if ($defaulted['tags']) : ?>active<?php else: ?>inactive<?php endif; ?>"><p><label><input type="radio" name="match_default[tags]"
274 value="yes" <?php if ($defaulted['tags']) : ?> checked="checked"<?php endif; ?> />
275 <?php $this->setting_radio_label( array( "label" => array( $href, $globalMatchLabels['tags'] ) ) ); ?></label></p>
276 </td>
277 <td class="equals second <?php if ($defaulted['tags']) : ?>inactive<?php else: ?>active<?php endif; ?>"><p><label><input type="radio" name="match_default[tags]"
278 value="no" <?php if ( ! $defaulted['tags']) : ?> checked="checked"<?php endif; ?> />
279 Do something different with this feed.</label>
280 <?php else : ?>
281 <p>
282 <?php endif; ?>
283 When a feed provides tags inline in a post, try to match those tags
284 locally with:</p>
285 <ul class="options compact">
286 <?php foreach ($matchUl['tags'] as $name => $li) : ?>
287 <li><label><input type="checkbox"
288 name="match_categories[tags][]" value="<?php print esc_attr( $name ); ?>"
289 <?php fwp_checked_flag( $li, 'checked' ); ?> /> <?php $l = $li['labels']; print esc_html( $l->name ); ?></label></li>
290 <?php endforeach; ?>
291 </ul>
292 <?php if ($offerSiteWideSettings) : ?>
293 </td></tr>
294 </tbody>
295 </table>
296 <?php endif; ?>
297 </td>
298 </tr>
299
300 <tr>
301 <th scope="row">Unmatched inline tags:</th>
302 <td><p>When the text of <?php print esc_html( $this->these_posts_phrase() ); ?> contains
303 inline tags that don't have any local matches yet...</p>
304
305 <?php if (count($unmatchedColumns['post_tag']) > 1) : ?>
306 <table class="twofer">
307 <?php else : ?>
308 <table style="width: 100%">
309 <?php endif; ?>
310 <tbody>
311 <tr>
312 <?php foreach ($unmatchedColumns['post_tag'] as $index => $column) : ?>
313 <td class="equals <?php print (($index == 0) ? 'first' : 'second'); ?> inactive"><ul class="options">
314 <?php foreach ($column as $name => $li) : ?>
315 <li><label><input type="radio" name="unfamiliar_post_tag" value="<?php print esc_attr( $name ); ?>"<?php fwp_checked_flag($unmatchedRadio['post_tag'][$name]); ?> /> <?php $this->setting_radio_label( $li ); ?></label></li>
316 <?php endforeach; ?>
317 </ul></td>
318 <?php endforeach; ?>
319 </tr>
320 </tbody>
321 </table>
322
323 </td></tr>
324
325 <tr>
326 <th scope="row">Filter:</th>
327 <td><input type="hidden" name="match_categories[filter][]" value="0" />
328 <?php if ($offerSiteWideSettings) : ?>
329 <table class="twofer">
330 <tbody>
331 <tr>
332 <td class="equals first <?php if ($defaulted['filter']) : ?>active<?php else: ?>inactive<?php endif; ?>">
333 <p><label><input type="radio" name="match_default[filter]"
334 value="yes" <?php if ($defaulted['filter']) : ?> checked="checked"<?php endif; ?> />
335 <?php $this->setting_radio_label( array( "label" => array( $href, $globalMatchLabels['filter'] ) ) ); ?></label></p>
336 </td>
337 <td class="equals second <?php if ($defaulted['filter']) : ?>inactive<?php else: ?>active<?php endif; ?>">
338 <p><label><input type="radio" name="match_default[filter]"
339 value="no" <?php if ( ! $defaulted['filter']) : ?> checked="checked"<?php endif; ?> />
340 Do something different with this feed:</label></p>
341 <div style="margin-left: 3.0em;">
342 <?php endif; ?>
343
344 <ul class="options">
345 <?php foreach ($matchUl['filter'] as $tax => $li) : ?>
346 <li><label><input type="checkbox" name="match_categories[filter][]" value="<?php print esc_attr( $tax ); ?>"
347 <?php fwp_checked_flag($li, 'checked'); ?> /> Don't syndicate posts unless they match at
348 least one local <strong><?php $l = $li['labels']; print esc_html( $l->singular_name ); ?></strong></label></li>
349 <?php endforeach; ?>
350 </ul>
351
352 <?php if ($offerSiteWideSettings) : ?>
353 </div>
354 </td></tr>
355 </tbody>
356 </table>
357 <?php endif; ?>
358 </td>
359 </tr>
360 <?php if ($page->for_feed_settings()) : ?>
361 <tr>
362 <th scope="row">Multiple categories:</th>
363 <td>
364 <input type="text" size="20" id="cat_split" name="cat_split" value="<?php if ( isset( $link->settings['cat_split'] ) ) : echo esc_attr( $link->settings['cat_split'] ); endif; ?>" />
365 <p class="setting-description">Enter a <a href="http://us.php.net/manual/en/reference.pcre.pattern.syntax.php">Perl-compatible regular expression</a> here if the feed provides multiple
366 categories in a single category element. The regular expression should match
367 the characters used to separate one category from the next. If the feed uses
368 spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
369 If the feed does not provide multiple categories in a single element, leave this
370 blank.</p></td>
371 </tr>
372 <?php endif; ?>
373 </table>
374 <?php
375 } /* FeedWordPressCategoriesPage::feed_categories_box() */
376
377 function term_option_map () {
378 return array(
379 'category' => 'feedwordpress_syndication_cats',
380 'post_tag' => 'feedwordpress_syndication_tags',
381 );
382 }
383 function term_setting_map () {
384 return array(
385 'category' => 'cats',
386 'post_tag' => 'tags',
387 );
388 }
389
390 function categories_box ($page, $box = NULL) {
391 $link = $page->link;
392 $dummy = null;
393 $syndicatedlink = new SyndicatedLink($dummy);
394
395 if ($this->for_feed_settings()) :
396 $post_type = $link->setting('syndicated post type', 'syndicated_post_type', 'post');
397 else :
398 $post_type = get_option('feedwordpress_syndicated_post_type', 'post');
399 endif;
400 $taxonomies = get_object_taxonomies(array('object_type' => $post_type), 'names');
401
402 $option_map = $this->term_option_map();
403 $setting_map = $this->term_setting_map();
404 $globalTax = get_option('feedwordpress_syndication_terms', array());
405 if ($page->for_feed_settings()) :
406 $terms = $link->setting('terms', NULL, array());
407 endif;
408
409 ?>
410 <table class="edit-form narrow">
411 <tbody>
412 <?php
413 foreach ($taxonomies as $tax) :
414 $taxonomy = get_taxonomy($tax);
415 ?>
416 <tr><th><?php print esc_html( $taxonomy->labels->name ); ?></th>
417 <td><?php
418 if (isset($option_map[$tax])) :
419 $option = $option_map[$tax];
420 $globalCats = preg_split(FEEDWORDPRESS_CAT_SEPARATOR_PATTERN, get_option($option));
421 elseif (isset($globalTax[$tax])) :
422 $globalCats = $globalTax[$tax];
423 else :
424 $globalCats = array();
425 endif;
426 $globalCats = array_map('trim', $globalCats);
427
428 if ($page->for_feed_settings()) :
429 $add_global_categories = $link->setting("add/$tax", NULL, 'yes');
430 $checked = array('yes' => '', 'no' => '');
431 $checked[$add_global_categories] = ' checked="checked"';
432
433 if (isset($setting_map[$tax])) :
434 $setting = $setting_map[$tax];
435 $cats = $link->setting($setting, NULL, NULL);
436 if (is_null($cats)) : $cats = array(); endif;
437 elseif (isset($terms[$tax])) :
438 $cats = $terms[$tax];
439 else :
440 $cats = array();
441 endif;
442 else :
443 $cats = $globalCats;
444 endif;
445
446 if ($page->for_feed_settings()) :
447 ?>
448 <table class="twofer">
449 <tbody>
450 <tr>
451 <td class="primary">
452 <?php
453 endif;
454
455 $dogs = $syndicatedlink->category_ids(/*post=*/ NULL, $cats, /*unfamiliar=*/ NULL, /*taxonomies=*/ array($tax));
456
457 if ($taxonomy->hierarchical) : // Use a category-style checkbox
458 fwp_category_box($dogs, 'all '.$page->these_posts_phrase(), /*tags=*/ array(), /*params=*/ array('taxonomy' => $tax));
459 else : // Use a tag-style edit box
460 fwp_tags_box($cats, 'all '.$page->these_posts_phrase(), /*params=*/ array('taxonomy' => $tax));
461 endif;
462
463 $globalDogs = $syndicatedlink->category_ids(/*post=*/ NULL, $globalCats, /*unfamiliar=*/ 'create:'.$tax, /*taxonomies=*/ array($tax));
464
465 $siteWideHref = $this->admin_page_href(basename(__FILE__));
466
467 if ($page->for_feed_settings()) :
468 ?>
469 </td>
470 <td class="secondary">
471 <h4>Site-wide <?php print esc_html( $taxonomy->labels->name ); ?></h4>
472 <?php if (count($globalCats) > 0) : ?>
473 <ul class="current-setting">
474 <?php foreach ($globalDogs as $dog) : ?>
475 <li><?php $cat = get_term($dog, $tax); print esc_html( $cat->name ); ?></li>
476 <?php endforeach; ?>
477 </ul>
478 </div>
479 <p>
480 <?php else : ?>
481 <p>Site-wide settings may also assign categories to syndicated
482 posts.
483 <?php endif; ?>
484 Should <?php print esc_html( $page->these_posts_phrase() ); ?> be assigned
485 these <?php print esc_html( $taxonomy->labels->name ); ?> from the <a href="<?php print esc_url( $siteWideHref ); ?>">site-wide settings</a>, in
486 addition to the feed-specific <?php print esc_html( $taxonomy->labels->name ); ?> you set up here?</p>
487
488 <ul class="settings">
489 <li><p><label><input type="radio" name="add_global[<?php print esc_attr( $tax ); ?>]" value="yes" <?php fwp_checked_flag($checked, 'yes'); ?> /> Yes. Place <?php print esc_html( $page->these_posts_phrase() ); ?> under all these categories.</label></p></li>
490 <li><p><label><input type="radio" name="add_global[<?php print esc_attr( $tax ); ?>]" value="no" <?php fwp_checked_flag($checked, 'no'); ?> /> No. Only use the categories I set up on the left. Do not use the global defaults for <?php print esc_html( $page->these_posts_phrase() ); ?></label></p></li>
491 </ul>
492 </td>
493 </tr>
494 </tbody>
495 </table>
496 <?php
497 endif;
498 ?>
499 </td>
500 </tr>
501 <?php
502 endforeach;
503 ?>
504 </tbody>
505 </table>
506 <?php
507 } /* FeedWordPressCategoriesPage::categories_box () */
508
509 function save_settings () {
510 $match_categories = FeedWordPress::post( 'match_categories', array() );
511 if ( is_array( $match_categories ) ) :
512 foreach ( $match_categories as $what => $set) :
513 // Defaulting is controlled by a separate radio button
514 $match_default = FeedWordPress::post( 'match_default', array() );
515 $match_default_here = ( is_array( $match_default ) && array_key_exists( $what, $match_default ) ? $match_default[ $what ] : null );
516
517 if ( FeedWordPress::affirmative( $match_default_here ) ) :
518 $set = null; // Defaulted!
519 endif;
520
521 $this->update_setting( "match/$what", $set, null );
522 endforeach;
523 endif;
524 $optionMap = $this->term_option_map();
525 $settingMap = $this->term_setting_map();
526
527 $saveTerms = array(); $separateSaveTerms = array('category' => array(), 'post_tag' => array());
528
529 $tax_input = FeedWordPress::post( 'tax_input', array() );
530 $tax_input_cats = ( isset( $tax_input['category'] ) ? $tax_input['category'] : array() );
531 $post_category = FeedWordPress::post( 'post_category', array() );
532
533 // Merge in data from older-notation category check boxes
534 $tax_input['category'] = array_merge( $tax_input_cats, $post_category );
535
536 // Process data from term tag boxes and check boxes
537 foreach ( $tax_input as $tax => $terms ) :
538 $saveTerms[ $tax ] = array();
539 if (is_array($terms)) : // Numeric IDs from checklist
540 foreach ($terms as $term) :
541 if ($term) :
542 $saveTerms[$tax][] = '{'.$tax.'#'.$term.'}';
543 endif;
544 endforeach;
545 else : // String from tag input
546 $saveTerms[$tax] = explode(",", $terms);
547 endif;
548 $saveTerms[$tax] = array_map('trim', $saveTerms[$tax]);
549
550 if (isset($optionMap[$tax])) :
551 $separateSaveTerms[$tax] = $saveTerms[$tax];
552 unset($saveTerms[$tax]);
553 endif;
554 endforeach;
555
556 foreach ( $post_category as $cat ) :
557 $separateSaveTerms['category'][] = '{category#' .$cat . '}';
558 endforeach;
559
560 // Unmatched categories and tags
561 foreach (array('category', 'post_tag') as $what) :
562 $unfamiliar = FeedWordPress::post( "unfamiliar_{$what}" );
563 if ( ! is_null( $unfamiliar ) ) :
564 $this->update_setting(
565 "unfamiliar {$what}",
566 $unfamiliar,
567 'site-default'
568 );
569 endif;
570 endforeach;
571
572 // Categories and Tags
573 foreach ($separateSaveTerms as $tax => $terms) :
574 if ($this->for_feed_settings()) :
575 $this->link->update_setting($settingMap[$tax], $terms, array());
576 else :
577 if ( !empty($terms)) :
578 update_option($optionMap[$tax], implode(FEEDWORDPRESS_CAT_SEPARATOR, $terms));
579 else :
580 delete_option($optionMap[$tax]);
581 endif;
582 endif;
583 endforeach;
584
585 // Other terms
586 $this->update_setting(array('feed'=>'terms', 'global'=>'syndication_terms'), $saveTerms, array());
587
588 if ($this->for_feed_settings()) :
589 // Category splitting regex
590 $cat_split = FeedWordPress::post( 'cat_split' );
591 if ( ! is_null( $cat_split ) ) :
592 $this->link->update_setting( 'cat_split', trim( $cat_split ), '' );
593 endif;
594
595 // Treat global terms (cats, tags, etc.) as additional,
596 // or as defaults to be overridden and replaced?
597 $add_global = FeedWordPress::post( 'add_global', array() );
598 if ( is_array( $add_global ) ) :
599 foreach ($add_global as $what => $value) :
600 $this->link->update_setting("add/$what", $value);
601 endforeach;
602 endif;
603 endif;
604 parent::save_settings();
605 } /* FeedWordPressCategoriesPage::save_settings() */
606
607 function display () {
608 ////////////////////////////////////////////////
609 // Display settings boxes //////////////////////
610 ////////////////////////////////////////////////
611
612 $this->boxes_by_methods = array(
613 'feed_categories_box' => __('Feed Categories & Tags'),
614 'categories_box' => array('title' => __('Categories'), 'id' => 'categorydiv'),
615 );
616
617 parent::display();
618 }
619 }
620
621 $categoriesPage = new FeedWordPressCategoriesPage;
622 $categoriesPage->display();
623
624