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
← All changes | categories-page.php +205 -548 trunk2009.1112 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,214 @@
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__));
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.'}';
126 + endforeach;
127 + endif;
466 128
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>
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);
487 137
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
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']);
497 144 endif;
498 - ?>
499 - </td>
500 - </tr>
501 - <?php
502 - endforeach;
503 - ?>
504 - </tbody>
505 - </table>
506 - <?php
507 - } /* FeedWordPressCategoriesPage::categories_box () */
508 145
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 );
146 + // Tags
147 + $link->settings['tags'] = $syndicatedTags;
516 148
517 - if ( FeedWordPress::affirmative( $match_default_here ) ) :
518 - $set = null; // Defaulted!
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"];
519 155 endif;
156 + endif;
520 157
521 - $this->update_setting( "match/$what", $set, null );
522 - endforeach;
523 - endif;
524 - $optionMap = $this->term_option_map();
525 - $settingMap = $this->term_setting_map();
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']);
162 + else :
163 + unset($link->settings['cat_split']);
164 + endif;
165 + endif;
526 166
527 - $saveTerms = array(); $separateSaveTerms = array('category' => array(), 'post_tag' => array());
167 + $alter[] = "link_notes = '".$wpdb->escape($link->settings_to_notes())."'";
528 168
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 );
169 + $alter_set = implode(", ", $alter);
535 170
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);
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);
547 182 endif;
548 - $saveTerms[$tax] = array_map('trim', $saveTerms[$tax]);
549 -
550 - if (isset($optionMap[$tax])) :
551 - $separateSaveTerms[$tax] = $saveTerms[$tax];
552 - unset($saveTerms[$tax]);
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');
553 190 endif;
554 - endforeach;
191 +
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;
555 198
556 - foreach ( $post_category as $cat ) :
557 - $separateSaveTerms['category'][] = '{category#' .$cat . '}';
558 - endforeach;
199 + update_option('feedwordpress_unfamiliar_category', $_REQUEST['unfamiliar_category']);
559 200
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;
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;
571 208
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;
209 + ////////////////////////////////////////////////
210 + // Prepare settings page ///////////////////////
211 + ////////////////////////////////////////////////
212 +
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>
584 221
585 - // Other terms
586 - $this->update_setting(array('feed'=>'terms', 'global'=>'syndication_terms'), $saveTerms, array());
222 + <div id="post-body">
223 + <?php
224 + ////////////////////////////////////////////////
225 + // Display settings boxes //////////////////////
226 + ////////////////////////////////////////////////
587 227
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;
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;
594 236
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;
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;
603 244 endif;
604 - parent::save_settings();
605 - } /* FeedWordPressCategoriesPage::save_settings() */
606 245
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'),
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()
615 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(); ?>
616 263
617 - parent::display();
618 - }
619 -}
264 +<script type="text/javascript">
265 + contextual_appearance('unfamiliar-author', 'unfamiliar-author-newuser', 'unfamiliar-author-default', 'newuser', 'inline');
266 +<?php if (is_object($link) and $link->found()) : ?>
267 +<?php for ($j=1; $j<=$i; $j++) : ?>
268 + contextual_appearance('author-rules-<?php echo $j; ?>', 'author-rules-<?php echo $j; ?>-newuser', 'author-rules-<?php echo $j; ?>-default', 'newuser', 'inline');
269 +<?php endfor; ?>
270 + contextual_appearance('add-author-rule', 'add-author-rule-newuser', 'add-author-rule-default', 'newuser', 'inline');
271 + contextual_appearance('fix-mismatch-to', 'fix-mismatch-to-newuser', null, 'newuser', 'inline');
272 +<?php else : ?>
273 + contextual_appearance('match-author-by-email', 'unless-null-email', null, 'yes', 'block', /*checkbox=*/ true);
274 +<?php endif; ?>
275 +</script>
276 +<?php
277 +} /* function fwp_categories_page () */
620 278
621 - $categoriesPage = new FeedWordPressCategoriesPage;
622 - $categoriesPage->display();
279 + fwp_categories_page();
623 280