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