PluginProbe
FeedWordPress / 2010.0528
FeedWordPress v2010.0528
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 | categories-page.php +184 -550 trunk2010.0528 View file →
@@ -1,368 +1,62 @@
1 1 <?php
2 2 require_once(dirname(__FILE__) . '/admin-ui.php');
3 3
4 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 - );
5 + function FeedWordPressCategoriesPage ($link) {
6 + FeedWordPressAdminPage::FeedWordPressAdminPage('feedwordpresscategories', $link);
7 + $this->dispatch = 'feedwordpress_categories_settings';
17 8 $this->filename = __FILE__;
18 9 }
10 +
11 + /*static*/ function feed_categories_box ($page, $box = NULL) {
19 12
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 - }
13 + $link = $page->link;
27 14
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 - );
15 + $unfamiliar = array ('create'=>'','tag' => '', 'default'=>'','filter'=>'');
16 + if ($page->for_feed_settings()) :
17 + $unfamiliar['site-default'] = '';
18 + $ucKey = $link->settings["unfamiliar category"];
19 + $ucDefault = 'site-default';
36 20 else :
37 - print esc_html( $li['label'] );
21 + $ucKey = FeedWordPress::on_unfamiliar('category');
22 + $ucDefault = 'create';
38 23 endif;
39 - }
40 24
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;
25 + if (!is_string($ucKey) or !array_key_exists($ucKey, $unfamiliar)) :
26 + $ucKey = $ucDefault;
49 27 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 -
28 + $unfamiliar[$ucKey] = ' checked="checked"';
29 +
197 30 // Hey ho, let's go...
198 - $offerSiteWideSettings = ($page->for_feed_settings() and ($post_type==$globalPostType));
199 31 ?>
200 -<table class="edit-form narrow">
32 +<table class="edit-form">
201 33 <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>
34 +<th scope="row">Unfamiliar categories:</th>
35 +<td><p>When one of the categories on a syndicated post is a category that FeedWordPress has not encountered before ...</p>
231 36
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>
37 +<ul class="options">
38 +<?php if ($page->for_feed_settings()) : ?>
39 +<li><label><input type="radio" name="unfamiliar_category" value="site-default"<?php echo $unfamiliar['site-default']; ?> /> use the <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php print basename(__FILE__); ?>">site-wide setting</a>
40 +(currently <strong><?php echo FeedWordPress::on_unfamiliar('category'); ?></strong>)</label></li>
282 41 <?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 42
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>
43 +<li><label><input type="radio" name="unfamiliar_category" value="create"<?php echo $unfamiliar['create']; ?> /> create a new category</label></li>
304 44
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;">
45 +<?php if (FeedWordPressCompatibility::post_tags()) : ?>
46 +<li><label><input type="radio" name="unfamiliar_category" value="tag"<?php echo $unfamiliar['tag']; ?>/> create a new tag</label></li>
342 47 <?php endif; ?>
343 48
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>
49 +<li><label><input type="radio" name="unfamiliar_category" value="default"<?php echo $unfamiliar['default']; ?> /> don't create new categories<?php if (fwp_test_wp_version(FWP_SCHEMA_23)) : ?> or tags<?php endif; ?></label></li>
50 +<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php echo $unfamiliar['filter']; ?> /> don't create new categories<?php if (fwp_test_wp_version(FWP_SCHEMA_23)) : ?> or tags<?php endif; ?> and don't syndicate posts unless they match at least one familiar category</label></li>
51 +</ul></td>
52 +</tr>
351 53
352 -<?php if ($offerSiteWideSettings) : ?>
353 - </div>
354 - </td></tr>
355 - </tbody>
356 - </table>
357 -<?php endif; ?>
358 -</td>
359 -</tr>
360 54 <?php if ($page->for_feed_settings()) : ?>
361 55 <tr>
362 56 <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; ?>" />
57 +<td>
58 +<input type="text" size="20" id="cat_split" name="cat_split" value="<?php if (isset($link->settings['cat_split'])) : echo htmlspecialchars($link->settings['cat_split']); endif; ?>" />
365 59 <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 60 categories in a single category element. The regular expression should match
367 61 the characters used to separate one category from the next. If the feed uses
368 62 spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
@@ -373,251 +67,191 @@
373 67 </table>
374 68 <?php
375 69 } /* FeedWordPressCategoriesPage::feed_categories_box() */
376 70
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 71 function categories_box ($page, $box = NULL) {
391 72 $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');
73 + if ($page->for_feed_settings()) :
74 + if (is_array($link->settings['cats'])) : $cats = $link->settings['cats'];
75 + else : $cats = array();
76 + endif;
397 77 else :
398 - $post_type = get_option('feedwordpress_syndicated_post_type', 'post');
78 + $cats = array_map('trim',
79 + preg_split(FEEDWORDPRESS_CAT_SEPARATOR_PATTERN, get_option('feedwordpress_syndication_cats'))
80 + );
399 81 endif;
400 - $taxonomies = get_object_taxonomies(array('object_type' => $post_type), 'names');
82 + $dogs = SyndicatedPost::category_ids($cats, /*unfamiliar=*/ NULL);
401 83
402 - $option_map = $this->term_option_map();
403 - $setting_map = $this->term_setting_map();
404 - $globalTax = get_option('feedwordpress_syndication_terms', array());
84 + fwp_category_box($dogs, 'all '.$page->these_posts_phrase());
85 + } /* FeedWordPressCategoriesPage::categories_box () */
86 +
87 + function tags_box ($page, $box = NULL) {
88 + $link = $page->link;
405 89 if ($page->for_feed_settings()) :
406 - $terms = $link->setting('terms', NULL, array());
90 + $tags = $link->settings['tags'];
91 + else :
92 + $tags = array_map('trim',
93 + preg_split(FEEDWORDPRESS_CAT_SEPARATOR_PATTERN, get_option('feedwordpress_syndication_tags'))
94 + );
407 95 endif;
408 96
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);
97 + fwp_tags_box($tags, 'all '.$page->these_posts_phrase());
98 + } /* FeedWordPressCategoriesPage::tags_box () */
99 +}
427 100
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"';
101 +function fwp_categories_page () {
102 + global $wpdb, $wp_db_version;
103 +
104 + if (FeedWordPress::needs_upgrade()) :
105 + fwp_upgrade_page();
106 + return;
107 + endif;
432 108
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;
109 + FeedWordPressCompatibility::validate_http_request(/*action=*/ 'feedwordpress_categories_settings', /*capability=*/ 'manage_links');
445 110
446 - if ($page->for_feed_settings()) :
447 - ?>
448 - <table class="twofer">
449 - <tbody>
450 - <tr>
451 - <td class="primary">
452 - <?php
453 - endif;
111 + $link = FeedWordPressAdminPage::submitted_link();
112 + $link_id = $link->id;
454 113
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;
114 + $catsPage = new FeedWordPressCategoriesPage($link);
462 115
463 - $globalDogs = $syndicatedlink->category_ids(/*post=*/ NULL, $globalCats, /*unfamiliar=*/ 'create:'.$tax, /*taxonomies=*/ array($tax));
116 + $mesg = null;
464 117
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 );
118 + ////////////////////////////////////////////////
119 + // Process POST request, if any /////////////////
120 + ////////////////////////////////////////////////
121 + if (isset($GLOBALS['fwp_post']['save']) or isset($GLOBALS['fwp_post']['submit'])) :
122 + $saveCats = array();
123 + if (isset($GLOBALS['fwp_post']['post_category'])) :
124 + foreach ($GLOBALS['fwp_post']['post_category'] as $cat_id) :
125 + $saveCats[] = '{#'.$cat_id.'}';
522 126 endforeach;
523 127 endif;
524 - $optionMap = $this->term_option_map();
525 - $settingMap = $this->term_setting_map();
526 128
527 - $saveTerms = array(); $separateSaveTerms = array('category' => array(), 'post_tag' => array());
129 + // Different variable names to cope with different WordPress AJAX UIs
130 + $syndicatedTags = array();
131 + if (isset($GLOBALS['fwp_post']['tax_input']['post_tag'])) :
132 + $syndicatedTags = explode(",", $GLOBALS['fwp_post']['tax_input']['post_tag']);
133 + elseif (isset($GLOBALS['fwp_post']['tags_input'])) :
134 + $syndicatedTags = explode(",", $GLOBALS['fwp_post']['tags_input']);
135 + endif;
136 + $syndicatedTags = array_map('trim', $syndicatedTags);
528 137
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 );
138 + if (is_object($link) and $link->found()) :
139 + $alter = array ();
535 140
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);
141 + // Categories
142 + if (!empty($saveCats)) : $link->settings['cats'] = $saveCats;
143 + else : unset($link->settings['cats']);
547 144 endif;
548 - $saveTerms[$tax] = array_map('trim', $saveTerms[$tax]);
549 145
550 - if (isset($optionMap[$tax])) :
551 - $separateSaveTerms[$tax] = $saveTerms[$tax];
552 - unset($saveTerms[$tax]);
553 - endif;
554 - endforeach;
146 + // Tags
147 + $link->settings['tags'] = $syndicatedTags;
555 148
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 - );
149 + // Unfamiliar categories
150 + if (isset($GLOBALS['fwp_post']["unfamiliar_category"])) :
151 + if ('site-default'==$GLOBALS['fwp_post']["unfamiliar_category"]) :
152 + unset($link->settings["unfamiliar category"]);
153 + else :
154 + $link->settings["unfamiliar category"] = $GLOBALS['fwp_post']["unfamiliar_category"];
155 + endif;
569 156 endif;
570 - endforeach;
571 157
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));
158 + // Category spitting regex
159 + if (isset($GLOBALS['fwp_post']['cat_split'])) :
160 + if (strlen(trim($GLOBALS['fwp_post']['cat_split'])) > 0) :
161 + $link->settings['cat_split'] = trim($GLOBALS['fwp_post']['cat_split']);
579 162 else :
580 - delete_option($optionMap[$tax]);
163 + unset($link->settings['cat_split']);
581 164 endif;
582 165 endif;
583 - endforeach;
584 166
585 - // Other terms
586 - $this->update_setting(array('feed'=>'terms', 'global'=>'syndication_terms'), $saveTerms, array());
167 + // Save settings
168 + $link->save_settings(/*reload=*/ true);
169 + $catsPage->updated = true;
170 +
171 + // Reset, reload
172 + unset($link);
173 + $link = new SyndicatedLink($link_id);
174 + else :
175 + // Categories
176 + if (!empty($saveCats)) :
177 + update_option('feedwordpress_syndication_cats', implode(FEEDWORDPRESS_CAT_SEPARATOR, $saveCats));
178 + else :
179 + delete_option('feedwordpress_syndication_cats');
180 + endif;
181 +
182 + // Tags
183 + if (!empty($syndicatedTags)) :
184 + update_option('feedwordpress_syndication_tags', implode(FEEDWORDPRESS_CAT_SEPARATOR, $syndicatedTags));
185 + else :
186 + delete_option('feedwordpress_syndication_tags');
187 + endif;
587 188
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;
189 + update_option('feedwordpress_unfamiliar_category', $_REQUEST['unfamiliar_category']);
594 190
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;
191 + $catsPage->updated = true;
603 192 endif;
604 - parent::save_settings();
605 - } /* FeedWordPressCategoriesPage::save_settings() */
193 +
194 + do_action('feedwordpress_admin_page_categories_save', $GLOBALS['fwp_post'], $catsPage);
195 + else :
196 + $catsPage->updated = false;
197 + endif;
606 198
607 - function display () {
608 - ////////////////////////////////////////////////
609 - // Display settings boxes //////////////////////
610 - ////////////////////////////////////////////////
199 + ////////////////////////////////////////////////
200 + // Prepare settings page ///////////////////////
201 + ////////////////////////////////////////////////
202 +
203 + $catsPage->display_update_notice_if_updated('Syndicated categories'.FEEDWORDPRESS_AND_TAGS, $mesg);
204 + $catsPage->open_sheet('Categories'.FEEDWORDPRESS_AND_TAGS);
205 + ?>
206 + <style type="text/css">
207 + table.edit-form th { width: 27%; vertical-align: top; }
208 + table.edit-form td { width: 73%; vertical-align: top; }
209 + table.edit-form td ul.options { margin: 0; padding: 0; list-style: none; }
210 + </style>
611 211
612 - $this->boxes_by_methods = array(
613 - 'feed_categories_box' => __('Feed Categories & Tags'),
614 - 'categories_box' => array('title' => __('Categories'), 'id' => 'categorydiv'),
212 + <div id="post-body">
213 + <?php
214 + ////////////////////////////////////////////////
215 + // Display settings boxes //////////////////////
216 + ////////////////////////////////////////////////
217 +
218 + $boxes_by_methods = array(
219 + 'feed_categories_box' => __('Feed Categories'.FEEDWORDPRESS_AND_TAGS),
220 + 'categories_box' => array('title' => __('Categories'), 'id' => 'categorydiv'),
221 + 'tags_box' => __('Tags'),
222 + );
223 + if (!FeedWordPressCompatibility::post_tags()) :
224 + unset($boxes_by_methods['tags_box']);
225 + endif;
226 +
227 + foreach ($boxes_by_methods as $method => $row) :
228 + if (is_array($row)) :
229 + $id = $row['id'];
230 + $title = $row['title'];
231 + else :
232 + $id = 'feedwordpress_'.$method;
233 + $title = $row;
234 + endif;
235 +
236 + fwp_add_meta_box(
237 + /*id=*/ $id,
238 + /*title=*/ $title,
239 + /*callback=*/ array('FeedWordPressCategoriesPage', $method),
240 + /*page=*/ $catsPage->meta_box_context(),
241 + /*context=*/ $catsPage->meta_box_context()
615 242 );
243 + endforeach;
244 + do_action('feedwordpress_admin_page_categories_meta_boxes', $catsPage);
245 +?>
246 + <div class="metabox-holder">
247 +<?php
248 + fwp_do_meta_boxes($catsPage->meta_box_context(), $catsPage->meta_box_context(), $catsPage);
249 +?>
250 + </div> <!-- class="metabox-holder" -->
251 + </div> <!-- id="post-body" -->
252 + <?php $catsPage->close_sheet(); ?>
253 +<?php
254 +} /* function fwp_categories_page () */
616 255
617 - parent::display();
618 - }
619 -}
620 -
621 - $categoriesPage = new FeedWordPressCategoriesPage;
622 - $categoriesPage->display();
256 + fwp_categories_page();
623 257