Version Description
Download this release
Release Info
Developer | radgeek |
Plugin | FeedWordPress |
Version | 2008.1030 |
Comparing to | |
See all releases |
Code changes from version 0.993 to 2008.1030
- ChangeLog.text +75 -0
- admin-ui.php +161 -0
- compatability.php +147 -0
- feedwordpress.php +219 -1475
- readme.txt +15 -14
- syndication-options.php +23 -6
- syndication.php +1262 -0
ChangeLog.text
CHANGED
@@ -1,6 +1,81 @@
|
|
1 |
FeedWordPress Change Log
|
2 |
========================
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
Changes from 0.992 to 0.993
|
5 |
---------------------------
|
6 |
|
1 |
FeedWordPress Change Log
|
2 |
========================
|
3 |
|
4 |
+
Changes from 0.993 to 2008.1030
|
5 |
+
-------------------------------
|
6 |
+
|
7 |
+
* WORDPRESS 2.6 COMPATABILITY: FeedWordPress should now be compatible with
|
8 |
+
WordPress 2.6, and should work more or less seamlessly with the new post
|
9 |
+
revision system. A bug which caused multiple new revisions to be created
|
10 |
+
for posts on certain feeds, regardless of whether or not the item had
|
11 |
+
been updated, has been fixed.
|
12 |
+
|
13 |
+
* INTERFACE IMPROVEMENTS: The user interface has been substantially
|
14 |
+
restyled to fit in better with the visual style of WordPress 2.5 and
|
15 |
+
2.6.
|
16 |
+
|
17 |
+
* YOUTUBE BUG FIXED: POSTS SYNDICATED THROUGH AN AUTOMATIC UPDATE ARE NO
|
18 |
+
LONGER STRIPPED OF `<OBJECT>` TAGS AND CERTAIN OTHER HTML ELEMENTS: Due
|
19 |
+
to the way that some versions of WordPress process posts that are
|
20 |
+
inserted into the database when no user is logged in, many users
|
21 |
+
experienced an issue where YouTube videos and other content using the
|
22 |
+
HTML `<object>` tag would be stripped out of posts that were syndicated
|
23 |
+
during an automatic update. (Posts that were syndicated through manual
|
24 |
+
updates from within the WordPress Dashboard were not affected, because
|
25 |
+
the issue does not arise when an update is executed under a logged-in
|
26 |
+
administrator's credentials.) This bug has now been fixed; YouTube
|
27 |
+
videos and other content using `<object>` tags should now appear
|
28 |
+
properly in syndicated posts, regardless of the way in which the post
|
29 |
+
was syndicated.
|
30 |
+
|
31 |
+
* AJAX BUGS FIXED: Bugs which blocked the normal operation of WordPress
|
32 |
+
2.5's AJAX interface elements when FeedWordPress was activated have been
|
33 |
+
fixed.
|
34 |
+
|
35 |
+
* TAG SUPPORT: A couple of features have been introduced to take advantage
|
36 |
+
of the tagging features in WordPress 2.3.x, 2.5.x, and 2.6.x. Now, when
|
37 |
+
unfamiliar categories are encountered for posts on a feed, you can
|
38 |
+
choose for FeedWordPress (1) to drop the category; (2) to drop the
|
39 |
+
category and to filter out any post that does not match at least one
|
40 |
+
familiar category; (3) to create a new category with that name, or,
|
41 |
+
now, you can also have FeedWordPress (4) create a new *tag* with that
|
42 |
+
name. This option can be set site-wide under Syndication --> Options,
|
43 |
+
or it can be set on a feed-by-feed basis in a feed's Edit screen.
|
44 |
+
|
45 |
+
In addition, you can now set particular tags to apply to all incoming
|
46 |
+
syndicated posts, under Syndication --> Options, or you can set tags
|
47 |
+
to apply to all incoming syndicated posts from a particular feed in that
|
48 |
+
feed's Edit screen.
|
49 |
+
|
50 |
+
* FORMATTING FILTERS: There is a new option available under Syndication ->
|
51 |
+
Options which allows users to choose whether or not to expose syndicated
|
52 |
+
posts to being altered by formatting filters. By default, FeedWordPress
|
53 |
+
has always protected syndicated posts (which are already in display-ready
|
54 |
+
HTML when they are syndicated) from being reformatted by formatting
|
55 |
+
filters. However, this approach means that certain plugins which depend
|
56 |
+
on formatting filters (for example, to add "Share This" bars or relevant
|
57 |
+
links to the end of a post) are blocked from working on any syndicated
|
58 |
+
posts. If you want to use one of these plugins together with
|
59 |
+
FeedWordPress, you can now do so by changing the "Formatting Filters"
|
60 |
+
setting from "Protect" to "Expose."
|
61 |
+
|
62 |
+
* **`<atom:source>` ELEMENTS NOW INCLUDED IN ATOM FEED:** Atom 1.0 provides
|
63 |
+
a standard method for aggregators to indicate information about the original source of
|
64 |
+
a syndicated post, using the `<atom:source>` element. FeedWordPress now
|
65 |
+
introduces standard `<atom:source>` elements including the title, homepage, and
|
66 |
+
feed URI of the source from which a syndicated post was syndicated. Cf.
|
67 |
+
<http://www.atomenabled.org/developers/syndication/atom-format-spec.php#element.source>
|
68 |
+
|
69 |
+
* MODULARIZATION OF CODE: The code for different elements of FeedWordPress
|
70 |
+
has been broken out into several modules for easier inspection,
|
71 |
+
documentation, and maintenance of the code.
|
72 |
+
|
73 |
+
* VERSIONING SCHEME CHANGED: FeedWordPress's feature set has proven stable
|
74 |
+
enough that it can now be removed from beta status; a good thing, since
|
75 |
+
I was very quickly running out of version numbers to use. New releases
|
76 |
+
of FeedWordPress will have version numbers based on the date of their
|
77 |
+
release.
|
78 |
+
|
79 |
Changes from 0.992 to 0.993
|
80 |
---------------------------
|
81 |
|
admin-ui.php
ADDED
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
function fwp_linkedit_single_submit ($status = NULL) {
|
3 |
+
global $wp_db_version;
|
4 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
5 |
+
?>
|
6 |
+
<div class="submitbox" id="submitlink">
|
7 |
+
<div id="previewview"></div>
|
8 |
+
<div class="inside">
|
9 |
+
<?php if (!is_null($status)) : ?>
|
10 |
+
<p><strong>Publication</strong></p>
|
11 |
+
<p>When a new post is syndicated from this feed...</p>
|
12 |
+
<select name="feed_post_status">
|
13 |
+
<option value="site-default" <?php echo $status['post']['site-default']; ?>> Use
|
14 |
+
Syndication Options setting</option>
|
15 |
+
<option value="publish" <?php echo $status['post']['publish']; ?>>Publish it immediately</option>
|
16 |
+
|
17 |
+
<?php if (SyndicatedPost::use_api('post_status_pending')) : ?>
|
18 |
+
<option value="pending" <?php echo $status['post']['pending']; ?>>Hold it Pending Review</option>
|
19 |
+
<?php endif; ?>
|
20 |
+
|
21 |
+
<option value="draft" <?php echo $status['post']['draft']; ?>>Save it as a draft</option>
|
22 |
+
<option value="private" <?php echo $status['post']['private']; ?>>Keep it private</option>
|
23 |
+
</select>
|
24 |
+
<?php endif; ?>
|
25 |
+
</div>
|
26 |
+
|
27 |
+
<p class="submit">
|
28 |
+
<input type="submit" name="submit" value="<?php _e('Save') ?>" />
|
29 |
+
</p>
|
30 |
+
</div>
|
31 |
+
<?php
|
32 |
+
endif;
|
33 |
+
}
|
34 |
+
|
35 |
+
function fwp_linkedit_periodic_submit ($caption = NULL) {
|
36 |
+
global $wp_db_version;
|
37 |
+
if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) :
|
38 |
+
if (is_null($caption)) : $caption = __('Save Changes »'); endif;
|
39 |
+
?>
|
40 |
+
<p class="submit">
|
41 |
+
<input type="submit" name="submit" value="<?php print $caption; ?>" />
|
42 |
+
</p>
|
43 |
+
<?php
|
44 |
+
endif;
|
45 |
+
}
|
46 |
+
|
47 |
+
function fwp_option_box_opener ($legend, $id, $class = "stuffbox") {
|
48 |
+
global $wp_db_version;
|
49 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
50 |
+
?>
|
51 |
+
<div id="<?php print $id; ?>" class="<?php print $class; ?>">
|
52 |
+
<h3><?php print htmlspecialchars($legend); ?></h3>
|
53 |
+
<div class="inside">
|
54 |
+
<?php
|
55 |
+
else :
|
56 |
+
?>
|
57 |
+
<fieldset class="options"><legend><?php print htmlspecialchars($legend); ?></legend>
|
58 |
+
<?php
|
59 |
+
endif;
|
60 |
+
}
|
61 |
+
|
62 |
+
function fwp_option_box_closer () {
|
63 |
+
global $wp_db_version;
|
64 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
65 |
+
?>
|
66 |
+
</div> <!-- class="inside" -->
|
67 |
+
</div> <!-- class="stuffbox" -->
|
68 |
+
<?php
|
69 |
+
else :
|
70 |
+
?>
|
71 |
+
</fieldset>
|
72 |
+
<?php
|
73 |
+
endif;
|
74 |
+
}
|
75 |
+
|
76 |
+
function fwp_tags_box ($tags) {
|
77 |
+
if (!is_array($tags)) : $tags = array(); endif;
|
78 |
+
?>
|
79 |
+
<div id="tagsdiv" class="postbox">
|
80 |
+
<h3><?php _e('Tags') ?></h3>
|
81 |
+
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
82 |
+
<div class="inside">
|
83 |
+
<p id="jaxtag"><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo implode(",", $tags); ?>" /></p>
|
84 |
+
<div id="tagchecklist"></div>
|
85 |
+
</div>
|
86 |
+
</div>
|
87 |
+
<?php
|
88 |
+
}
|
89 |
+
|
90 |
+
function fwp_category_box ($checked, $object, $tags = array()) {
|
91 |
+
global $wp_db_version;
|
92 |
+
|
93 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) : // WordPress 2.5.x
|
94 |
+
?>
|
95 |
+
<div id="category-adder" class="wp-hidden-children">
|
96 |
+
<h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
|
97 |
+
<p id="category-add" class="wp-hidden-child">
|
98 |
+
<input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php _e( 'New category name' ); ?>" tabindex="3" />
|
99 |
+
<?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
|
100 |
+
<input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php _e( 'Add' ); ?>" tabindex="3" />
|
101 |
+
<?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
|
102 |
+
<span id="category-ajax-response"></span>
|
103 |
+
</p>
|
104 |
+
</div>
|
105 |
+
|
106 |
+
<ul id="category-tabs">
|
107 |
+
<li class="ui-tabs-selected"><a href="#categories-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
|
108 |
+
<p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these categories</p>
|
109 |
+
</li>
|
110 |
+
</ul>
|
111 |
+
|
112 |
+
<div id="categories-all" class="ui-tabs-panel">
|
113 |
+
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
|
114 |
+
<?php fwp_category_checklist(NULL, false, $checked) ?>
|
115 |
+
</ul>
|
116 |
+
</div>
|
117 |
+
<?php
|
118 |
+
elseif (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_20) : // WordPress 2.x
|
119 |
+
?>
|
120 |
+
<div id="moremeta">
|
121 |
+
<div id="grabit" class="dbx-group">
|
122 |
+
<fieldset id="categorydiv" class="dbx-box">
|
123 |
+
<h3 class="dbx-handle"><?php _e('Categories') ?></h3>
|
124 |
+
<div class="dbx-content">
|
125 |
+
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
126 |
+
<p id="jaxcat"></p>
|
127 |
+
<ul id="categorychecklist"><?php fwp_category_checklist(NULL, false, $checked); ?></ul></div>
|
128 |
+
</fieldset>
|
129 |
+
</div>
|
130 |
+
</div>
|
131 |
+
<?php
|
132 |
+
else : // WordPress 1.5
|
133 |
+
?>
|
134 |
+
<fieldset id="categorydiv" style="width: 20%; margin-right: 2em">
|
135 |
+
<legend><?php _e('Categories') ?></legend>
|
136 |
+
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
137 |
+
<div style="height: 20em"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
|
138 |
+
</fieldset>
|
139 |
+
<?php
|
140 |
+
endif;
|
141 |
+
}
|
142 |
+
|
143 |
+
function update_feeds_mention ($feed) {
|
144 |
+
echo "<li>Updating <cite>".$feed['link/name']."</cite> from <<a href=\""
|
145 |
+
.$feed['link/uri']."\">".$feed['link/uri']."</a>> ...</li>\n";
|
146 |
+
flush();
|
147 |
+
}
|
148 |
+
|
149 |
+
function fwp_author_list () {
|
150 |
+
global $wpdb;
|
151 |
+
$ret = array();
|
152 |
+
$users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY display_name");
|
153 |
+
if (is_array($users)) :
|
154 |
+
foreach ($users as $user) :
|
155 |
+
$id = (int) $user->ID;
|
156 |
+
$ret[$id] = $user->display_name;
|
157 |
+
endforeach;
|
158 |
+
endif;
|
159 |
+
return $ret;
|
160 |
+
}
|
161 |
+
|
compatability.php
ADDED
@@ -0,0 +1,147 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
################################################################################
|
3 |
+
## LEGACY API: Replicate or mock up functions for legacy support purposes ######
|
4 |
+
################################################################################
|
5 |
+
|
6 |
+
// version testing
|
7 |
+
function fwp_test_wp_version ($floor, $ceiling = NULL) {
|
8 |
+
global $wp_db_version;
|
9 |
+
|
10 |
+
$ver = (isset($wp_db_version) ? $wp_db_version : 0);
|
11 |
+
$good = ($ver >= $floor);
|
12 |
+
if (!is_null($ceiling)) :
|
13 |
+
$good = ($good and ($ver < $ceiling));
|
14 |
+
endif;
|
15 |
+
return $good;
|
16 |
+
} /* function fwp_test_wp_version () */
|
17 |
+
|
18 |
+
if (!function_exists('get_option')) {
|
19 |
+
function get_option ($option) {
|
20 |
+
return get_settings($option);
|
21 |
+
}
|
22 |
+
}
|
23 |
+
if (!function_exists('current_user_can')) {
|
24 |
+
$fwp_capability['manage_options'] = 6;
|
25 |
+
$fwp_capability['manage_links'] = 5;
|
26 |
+
function current_user_can ($task) {
|
27 |
+
global $user_level;
|
28 |
+
|
29 |
+
$can = false;
|
30 |
+
|
31 |
+
// This is **not** a full replacement for current_user_can. It
|
32 |
+
// is only for checking the capabilities we care about via the
|
33 |
+
// WordPress 1.5 user levels.
|
34 |
+
switch ($task) :
|
35 |
+
case 'manage_options':
|
36 |
+
$can = ($user_level >= 6);
|
37 |
+
break;
|
38 |
+
case 'manage_links':
|
39 |
+
$can = ($user_level >= 5);
|
40 |
+
break;
|
41 |
+
endswitch;
|
42 |
+
return $can;
|
43 |
+
}
|
44 |
+
} else {
|
45 |
+
$fwp_capability['manage_options'] = 'manage_options';
|
46 |
+
$fwp_capability['manage_links'] = 'manage_links';
|
47 |
+
}
|
48 |
+
if (!function_exists('sanitize_user')) {
|
49 |
+
function sanitize_user ($text, $strict) {
|
50 |
+
return $text; // Don't munge it if it wasn't munged going in...
|
51 |
+
}
|
52 |
+
}
|
53 |
+
if (!function_exists('wp_insert_user')) {
|
54 |
+
function wp_insert_user ($userdata) {
|
55 |
+
global $wpdb;
|
56 |
+
|
57 |
+
#-- Help WordPress 1.5.x quack like a duck
|
58 |
+
$login = $userdata['user_login'];
|
59 |
+
$author = $userdata['display_name'];
|
60 |
+
$nice_author = $userdata['user_nicename'];
|
61 |
+
$email = $userdata['user_email'];
|
62 |
+
$url = $userdata['user_url'];
|
63 |
+
|
64 |
+
$wpdb->query (
|
65 |
+
"INSERT INTO $wpdb->users
|
66 |
+
SET
|
67 |
+
ID='0',
|
68 |
+
user_login='$login',
|
69 |
+
user_firstname='$author',
|
70 |
+
user_nickname='$author',
|
71 |
+
user_nicename='$nice_author',
|
72 |
+
user_description='$author',
|
73 |
+
user_email='$email',
|
74 |
+
user_url='$url'");
|
75 |
+
$id = $wpdb->insert_id;
|
76 |
+
|
77 |
+
return $id;
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
function fwp_category_checklist ($post_id = 0, $descendents_and_self = 0, $selected_cats = false) {
|
82 |
+
if (function_exists('wp_category_checklist')) :
|
83 |
+
wp_category_checklist($post_id, $descendents_and_self, $selected_cats);
|
84 |
+
else :
|
85 |
+
global $checked_categories;
|
86 |
+
|
87 |
+
// selected_cats is an array of integer cat_IDs / term_ids for
|
88 |
+
// the categories that should be checked
|
89 |
+
$cats = array();
|
90 |
+
if ($post_id) : $cats = wp_get_post_categories($post_id);
|
91 |
+
else : $cats = $selected_cats;
|
92 |
+
endif;
|
93 |
+
|
94 |
+
$checked_categories = $cats;
|
95 |
+
dropdown_categories();
|
96 |
+
endif;
|
97 |
+
}
|
98 |
+
|
99 |
+
################################################################################
|
100 |
+
## UPGRADE INTERFACE: Have users upgrade DB from older versions of FWP #########
|
101 |
+
################################################################################
|
102 |
+
|
103 |
+
function fwp_upgrade_page () {
|
104 |
+
if (isset($GLOBALS['fwp_post']['action']) and $GLOBALS['fwp_post']['action']=='Upgrade') :
|
105 |
+
$ver = get_option('feedwordpress_version');
|
106 |
+
if (get_option('feedwordpress_version') != FEEDWORDPRESS_VERSION) :
|
107 |
+
echo "<div class=\"wrap\">\n";
|
108 |
+
echo "<h2>Upgrading FeedWordPress...</h2>";
|
109 |
+
|
110 |
+
$feedwordpress =& new FeedWordPress;
|
111 |
+
$feedwordpress->upgrade_database($ver);
|
112 |
+
echo "<p><strong>Done!</strong> Upgraded database to version ".FEEDWORDPRESS_VERSION.".</p>\n";
|
113 |
+
echo "<form action=\"\" method=\"get\">\n";
|
114 |
+
echo "<div class=\"submit\"><input type=\"hidden\" name=\"page\" value=\"syndication.php\" />";
|
115 |
+
echo "<input type=\"submit\" value=\"Continue »\" /></form></div>\n";
|
116 |
+
echo "</div>\n";
|
117 |
+
return;
|
118 |
+
else :
|
119 |
+
echo "<div class=\"updated\"><p>Already at version ".FEEDWORDPRESS_VERSION."!</p></div>";
|
120 |
+
endif;
|
121 |
+
endif;
|
122 |
+
?>
|
123 |
+
<div class="wrap">
|
124 |
+
<h2>Upgrade FeedWordPress</h2>
|
125 |
+
|
126 |
+
<p>It appears that you have installed FeedWordPress
|
127 |
+
<?php echo FEEDWORDPRESS_VERSION; ?> as an upgrade to an existing installation of
|
128 |
+
FeedWordPress. That's no problem, but you will need to take a minute out first
|
129 |
+
to upgrade your database: some necessary changes in how the software keeps
|
130 |
+
track of posts and feeds will cause problems such as duplicate posts and broken
|
131 |
+
templates if we were to continue without the upgrade.</p>
|
132 |
+
|
133 |
+
<p>Note that most of FeedWordPress's functionality is temporarily disabled
|
134 |
+
until we have successfully completed the upgrade. Everything should begin
|
135 |
+
working as normal again once the upgrade is complete. There's extraordinarily
|
136 |
+
little chance of any damage as the result of the upgrade, but if you're paranoid
|
137 |
+
like me you may want to back up your database before you proceed.</p>
|
138 |
+
|
139 |
+
<p>This may take several minutes for a large installation.</p>
|
140 |
+
|
141 |
+
<form action="" method="post">
|
142 |
+
<div class="submit"><input type="submit" name="action" value="Upgrade" /></div>
|
143 |
+
</form>
|
144 |
+
</div>
|
145 |
+
<?php
|
146 |
+
} // function fwp_upgrade_page ()
|
147 |
+
|
feedwordpress.php
CHANGED
@@ -3,11 +3,11 @@
|
|
3 |
Plugin Name: FeedWordPress
|
4 |
Plugin URI: http://projects.radgeek.com/feedwordpress
|
5 |
Description: simple and flexible Atom/RSS syndication for WordPress
|
6 |
-
Version:
|
7 |
Author: Charles Johnson
|
8 |
Author URI: http://radgeek.com/
|
9 |
License: GPL
|
10 |
-
Last modified: 2008-
|
11 |
*/
|
12 |
|
13 |
# This uses code derived from:
|
@@ -27,7 +27,7 @@ Last modified: 2008-05-08 4:48 PM PDT
|
|
27 |
|
28 |
# -- Don't change these unless you know what you're doing...
|
29 |
|
30 |
-
define ('FEEDWORDPRESS_VERSION', '
|
31 |
define ('FEEDWORDPRESS_AUTHOR_CONTACT', 'http://radgeek.com/contact');
|
32 |
define ('DEFAULT_SYNDICATION_CATEGORY', 'Contributors');
|
33 |
|
@@ -44,6 +44,7 @@ define ('FWP_SCHEMA_20', 3308); // Database schema # for WP 2.0
|
|
44 |
define ('FWP_SCHEMA_21', 4772); // Database schema # for WP 2.1
|
45 |
define ('FWP_SCHEMA_23', 5495); // Database schema # for WP 2.3
|
46 |
define ('FWP_SCHEMA_25', 7558); // Database schema # for WP 2.5
|
|
|
47 |
|
48 |
if (FEEDWORDPRESS_DEBUG) :
|
49 |
// Help us to pick out errors, if any.
|
@@ -83,14 +84,7 @@ if (isset($wp_db_version)) :
|
|
83 |
endif;
|
84 |
endif;
|
85 |
|
86 |
-
|
87 |
-
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
88 |
-
wp_enqueue_script('post');
|
89 |
-
wp_enqueue_script('thickbox');
|
90 |
-
else :
|
91 |
-
wp_enqueue_script( 'ajaxcat' ); // Provides the handy-dandy new category text box
|
92 |
-
endif;
|
93 |
-
endif;
|
94 |
|
95 |
// Magic quotes are just about the stupidest thing ever.
|
96 |
if (is_array($_POST)) :
|
@@ -110,6 +104,30 @@ else : // Something went wrong. Let's just guess.
|
|
110 |
$fwp_path = 'feedwordpress';
|
111 |
endif;
|
112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
if (!FeedWordPress::needs_upgrade()) : // only work if the conditions are safe!
|
114 |
|
115 |
# Syndicated items are generally received in output-ready (X)HTML and
|
@@ -128,6 +146,8 @@ if (!FeedWordPress::needs_upgrade()) : // only work if the conditions are safe!
|
|
128 |
add_filter('the_content', 'feedwordpress_preserve_syndicated_content', -10000);
|
129 |
add_filter('the_content', 'feedwordpress_restore_syndicated_content', 10000);
|
130 |
|
|
|
|
|
131 |
# Filter in original permalinks if the user wants that
|
132 |
add_filter('post_link', 'syndication_permalink', 1);
|
133 |
|
@@ -223,86 +243,6 @@ function log_feedwordpress_update_complete ($delta) {
|
|
223 |
: implode(' and ', $mesg)));
|
224 |
}
|
225 |
|
226 |
-
################################################################################
|
227 |
-
## LEGACY API: Replicate or mock up functions for legacy support purposes ######
|
228 |
-
################################################################################
|
229 |
-
|
230 |
-
if (!function_exists('get_option')) {
|
231 |
-
function get_option ($option) {
|
232 |
-
return get_settings($option);
|
233 |
-
}
|
234 |
-
}
|
235 |
-
if (!function_exists('current_user_can')) {
|
236 |
-
$legacy_capability_hack = true;
|
237 |
-
function current_user_can ($task) {
|
238 |
-
global $user_level;
|
239 |
-
|
240 |
-
$can = false;
|
241 |
-
|
242 |
-
// This is **not** a full replacement for current_user_can. It
|
243 |
-
// is only for checking the capabilities we care about via the
|
244 |
-
// WordPress 1.5 user levels.
|
245 |
-
switch ($task) {
|
246 |
-
case 'manage_options':
|
247 |
-
$can = ($user_level >= 6);
|
248 |
-
break;
|
249 |
-
case 'manage_links':
|
250 |
-
$can = ($user_level >= 5);
|
251 |
-
break;
|
252 |
-
} /* switch */
|
253 |
-
return $can;
|
254 |
-
}
|
255 |
-
} else {
|
256 |
-
$legacy_capability_hack = false;
|
257 |
-
}
|
258 |
-
if (!function_exists('sanitize_user')) {
|
259 |
-
function sanitize_user ($text, $strict) {
|
260 |
-
return $text; // Don't munge it if it wasn't munged going in...
|
261 |
-
}
|
262 |
-
}
|
263 |
-
if (!function_exists('wp_insert_user')) {
|
264 |
-
function wp_insert_user ($userdata) {
|
265 |
-
#-- Help WordPress 1.5.x quack like a duck
|
266 |
-
$login = $userdata['user_login'];
|
267 |
-
$author = $userdata['display_name'];
|
268 |
-
$nice_author = $userdata['user_nicename'];
|
269 |
-
$email = $userdata['user_email'];
|
270 |
-
$url = $userdata['user_url'];
|
271 |
-
|
272 |
-
$wpdb->query (
|
273 |
-
"INSERT INTO $wpdb->users
|
274 |
-
SET
|
275 |
-
ID='0',
|
276 |
-
user_login='$login',
|
277 |
-
user_firstname='$author',
|
278 |
-
user_nickname='$author',
|
279 |
-
user_nicename='$nice_author',
|
280 |
-
user_description='$author',
|
281 |
-
user_email='$email',
|
282 |
-
user_url='$url'");
|
283 |
-
$id = $wpdb->insert_id;
|
284 |
-
|
285 |
-
return $id;
|
286 |
-
}
|
287 |
-
}
|
288 |
-
|
289 |
-
function fwp_category_checklist ($post_id = 0, $descendents_and_self = 0, $selected_cats = false) {
|
290 |
-
if (function_exists('wp_category_checklist')) :
|
291 |
-
wp_category_checklist($post_id, $descendents_and_self, $selected_cats);
|
292 |
-
else :
|
293 |
-
global $checked_categories;
|
294 |
-
|
295 |
-
// selected_cats is an array of integer cat_IDs / term_ids for
|
296 |
-
// the categories that should be checked
|
297 |
-
$cats = array();
|
298 |
-
if ($post_id) : $cats = wp_get_post_categories($post_id);
|
299 |
-
else : $cats = $selected_cats;
|
300 |
-
endif;
|
301 |
-
|
302 |
-
$checked_categories = $cats;
|
303 |
-
dropdown_categories();
|
304 |
-
endif;
|
305 |
-
}
|
306 |
################################################################################
|
307 |
## TEMPLATE API: functions to make your templates syndication-aware ############
|
308 |
################################################################################
|
@@ -357,7 +297,7 @@ $feedwordpress_the_syndicated_content = NULL;
|
|
357 |
function feedwordpress_preserve_syndicated_content ($text) {
|
358 |
global $feedwordpress_the_syndicated_content;
|
359 |
|
360 |
-
if ( is_syndicated() ) :
|
361 |
$feedwordpress_the_syndicated_content = $text;
|
362 |
else :
|
363 |
$feedwordpress_the_syndicated_content = NULL;
|
@@ -375,1379 +315,53 @@ function feedwordpress_restore_syndicated_content ($text) {
|
|
375 |
return $text;
|
376 |
}
|
377 |
|
378 |
-
function
|
379 |
-
|
380 |
-
|
381 |
-
return ((strlen($uri) > 0) ? $uri : $permalink);
|
382 |
-
else:
|
383 |
-
return $permalink;
|
384 |
-
endif;
|
385 |
-
} // function syndication_permalink ()
|
386 |
-
|
387 |
-
################################################################################
|
388 |
-
## UPGRADE INTERFACE: Have users upgrade DB from older versions of FWP #########
|
389 |
-
################################################################################
|
390 |
-
|
391 |
-
function fwp_upgrade_page () {
|
392 |
-
if (isset($GLOBALS['fwp_post']['action']) and $GLOBALS['fwp_post']['action']=='Upgrade') :
|
393 |
-
$ver = get_option('feedwordpress_version');
|
394 |
-
if (get_option('feedwordpress_version') != FEEDWORDPRESS_VERSION) :
|
395 |
-
echo "<div class=\"wrap\">\n";
|
396 |
-
echo "<h2>Upgrading FeedWordPress...</h2>";
|
397 |
-
|
398 |
-
$feedwordpress =& new FeedWordPress;
|
399 |
-
$feedwordpress->upgrade_database();
|
400 |
-
echo "<p><strong>Done!</strong> Upgraded database to version ".FEEDWORDPRESS_VERSION.".</p>\n";
|
401 |
-
echo "<form action=\"\" method=\"get\">\n";
|
402 |
-
echo "<div class=\"submit\"><input type=\"hidden\" name=\"page\" value=\"".basename(__FILE__)."\" />";
|
403 |
-
echo "<input type=\"submit\" value=\"Continue »\" /></form></div>\n";
|
404 |
-
echo "</div>\n";
|
405 |
-
return;
|
406 |
-
else :
|
407 |
-
echo "<div class=\"updated\"><p>Already at version ".FEEDWORDPRESS_VERSION."!</p></div>";
|
408 |
-
endif;
|
409 |
-
endif;
|
410 |
?>
|
411 |
-
<
|
412 |
-
<
|
413 |
-
|
414 |
-
<
|
415 |
-
<?php echo FEEDWORDPRESS_VERSION; ?> as an upgrade to an existing installation of
|
416 |
-
FeedWordPress. That's no problem, but you will need to take a minute out first
|
417 |
-
to upgrade your database: some necessary changes in how the software keeps
|
418 |
-
track of posts and feeds will cause problems such as duplicate posts and broken
|
419 |
-
templates if we were to continue without the upgrade.</p>
|
420 |
-
|
421 |
-
<p>Note that most of FeedWordPress's functionality is temporarily disabled
|
422 |
-
until we have successfully completed the upgrade. Everything should begin
|
423 |
-
working as normal again once the upgrade is complete. There's extraordinarily
|
424 |
-
little chance of any damage as the result of the upgrade, but if you're paranoid
|
425 |
-
like me you may want to back up your database before you proceed.</p>
|
426 |
-
|
427 |
-
<p>This may take several minutes for a large installation.</p>
|
428 |
-
|
429 |
-
<form action="" method="post">
|
430 |
-
<div class="submit"><input type="submit" name="action" value="Upgrade" /></div>
|
431 |
-
</form>
|
432 |
-
</div>
|
433 |
<?php
|
434 |
-
|
435 |
-
|
436 |
-
################################################################################
|
437 |
-
## ADMIN MENU ADD-ONS: implement Dashboard management pages ####################
|
438 |
-
################################################################################
|
439 |
-
|
440 |
-
function fwp_add_pages () {
|
441 |
-
global $legacy_capability_hack;
|
442 |
-
global $fwp_path;
|
443 |
-
|
444 |
-
if ($legacy_capability_hack) :
|
445 |
-
// old & busted: numeric user levels
|
446 |
-
$manage_links = 5;
|
447 |
-
$manage_options = 6;
|
448 |
-
else :
|
449 |
-
// new hotness: named capabilities
|
450 |
-
$manage_links = 'manage_links';
|
451 |
-
$manage_options = 'manage_options';
|
452 |
-
endif;
|
453 |
-
|
454 |
-
//add_submenu_page('plugins.php', 'Akismet Configuration', 'Akismet Configuration', 'manage_options', 'syndication-manage-page', 'fwp_syndication_manage_page');
|
455 |
-
add_menu_page('Syndicated Sites', 'Syndication', $manage_links, $fwp_path.'/'.basename(__FILE__), 'fwp_syndication_manage_page');
|
456 |
-
add_submenu_page($fwp_path.'/'.basename(__FILE__), 'Syndication Options', 'Options', $manage_options, $fwp_path.'/syndication-options.php');
|
457 |
-
add_options_page('Syndication Options', 'Syndication', $manage_options, $fwp_path.'/syndication-options.php');
|
458 |
-
} // function fwp_add_pages () */
|
459 |
-
|
460 |
-
function fwp_linkedit_single_submit ($status = NULL) {
|
461 |
-
global $wp_db_version;
|
462 |
-
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
463 |
?>
|
464 |
-
<
|
465 |
-
<div id="previewview"></div>
|
466 |
-
<div class="inside">
|
467 |
-
<?php if (!is_null($status)) : ?>
|
468 |
-
<p><strong>Publication</strong></p>
|
469 |
-
<p>When a new post is syndicated from this feed...</p>
|
470 |
-
<select name="feed_post_status">
|
471 |
-
<option value="site-default" <?php echo $status['post']['site-default']; ?>> Use
|
472 |
-
Syndication Options setting</option>
|
473 |
-
<option value="publish" <?php echo $status['post']['publish']; ?>>Publish it immediately</option>
|
474 |
-
|
475 |
-
<?php if (SyndicatedPost::use_api('post_status_pending')) : ?>
|
476 |
-
<option value="pending" <?php echo $status['post']['pending']; ?>>Hold it Pending Review</option>
|
477 |
-
<?php endif; ?>
|
478 |
-
|
479 |
-
<option value="draft" <?php echo $status['post']['draft']; ?>>Save it as a draft</option>
|
480 |
-
<option value="private" <?php echo $status['post']['private']; ?>>Keep it private</option>
|
481 |
-
</select>
|
482 |
-
<?php endif; ?>
|
483 |
-
</div>
|
484 |
-
|
485 |
-
<p class="submit">
|
486 |
-
<input type="submit" name="submit" value="<?php _e('Save') ?>" />
|
487 |
-
</p>
|
488 |
-
</div>
|
489 |
<?php
|
490 |
endif;
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
global $wp_db_version;
|
495 |
-
if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) :
|
496 |
-
if (is_null($caption)) : $caption = __('Save Changes »'); endif;
|
497 |
-
?>
|
498 |
-
<p class="submit">
|
499 |
-
<input type="submit" name="submit" value="<?php print $caption; ?>" />
|
500 |
-
</p>
|
501 |
<?php
|
502 |
endif;
|
503 |
-
}
|
504 |
-
|
505 |
-
function fwp_option_box_opener ($legend, $id, $class = "stuffbox") {
|
506 |
-
global $wp_db_version;
|
507 |
-
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
508 |
-
?>
|
509 |
-
<div id="<?php print $id; ?>" class="<?php print $class; ?>">
|
510 |
-
<h3><?php print htmlspecialchars($legend); ?></h3>
|
511 |
-
<div class="inside">
|
512 |
-
<?php
|
513 |
-
else :
|
514 |
?>
|
515 |
-
|
516 |
<?php
|
517 |
endif;
|
518 |
}
|
519 |
|
520 |
-
function
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
</div> <!-- class="inside" -->
|
525 |
-
</div> <!-- class="stuffbox" -->
|
526 |
-
<?php
|
527 |
-
else :
|
528 |
-
?>
|
529 |
-
</fieldset>
|
530 |
-
<?php
|
531 |
-
endif;
|
532 |
-
}
|
533 |
-
|
534 |
-
function fwp_tags_box ($tags) {
|
535 |
-
if (!is_array($tags)) : $tags = array(); endif;
|
536 |
-
?>
|
537 |
-
<div id="tagsdiv" class="postbox">
|
538 |
-
<h3><?php _e('Tags') ?></h3>
|
539 |
-
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
540 |
-
<div class="inside">
|
541 |
-
<p id="jaxtag"><input type="text" name="tags_input" class="tags-input" id="tags-input" size="40" tabindex="3" value="<?php echo implode(",", $tags); ?>" /></p>
|
542 |
-
<div id="tagchecklist"></div>
|
543 |
-
</div>
|
544 |
-
</div>
|
545 |
-
<?php
|
546 |
-
}
|
547 |
-
|
548 |
-
function fwp_category_box ($checked, $object, $tags = array()) {
|
549 |
-
global $wp_db_version;
|
550 |
-
|
551 |
-
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) : // WordPress 2.5.x
|
552 |
-
?>
|
553 |
-
<div id="category-adder" class="wp-hidden-children">
|
554 |
-
<h4><a id="category-add-toggle" href="#category-add" class="hide-if-no-js" tabindex="3"><?php _e( '+ Add New Category' ); ?></a></h4>
|
555 |
-
<p id="category-add" class="wp-hidden-child">
|
556 |
-
<input type="text" name="newcat" id="newcat" class="form-required form-input-tip" value="<?php _e( 'New category name' ); ?>" tabindex="3" />
|
557 |
-
<?php wp_dropdown_categories( array( 'hide_empty' => 0, 'name' => 'newcat_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => __('Parent category'), 'tab_index' => 3 ) ); ?>
|
558 |
-
<input type="button" id="category-add-sumbit" class="add:categorychecklist:category-add button" value="<?php _e( 'Add' ); ?>" tabindex="3" />
|
559 |
-
<?php wp_nonce_field( 'add-category', '_ajax_nonce', false ); ?>
|
560 |
-
<span id="category-ajax-response"></span>
|
561 |
-
</p>
|
562 |
-
</div>
|
563 |
-
|
564 |
-
<ul id="category-tabs">
|
565 |
-
<li class="ui-tabs-selected"><a href="#categories-all" tabindex="3"><?php _e( 'All posts' ); ?></a>
|
566 |
-
<p style="font-size:smaller;font-style:bold;margin:0">Give <?php print $object; ?> these categories</p>
|
567 |
-
</li>
|
568 |
-
</ul>
|
569 |
-
|
570 |
-
<div id="categories-all" class="ui-tabs-panel">
|
571 |
-
<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">
|
572 |
-
<?php fwp_category_checklist(NULL, false, $checked) ?>
|
573 |
-
</ul>
|
574 |
-
</div>
|
575 |
-
<?php
|
576 |
-
elseif (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_20) : // WordPress 2.x
|
577 |
-
?>
|
578 |
-
<div id="moremeta">
|
579 |
-
<div id="grabit" class="dbx-group">
|
580 |
-
<fieldset id="categorydiv" class="dbx-box">
|
581 |
-
<h3 class="dbx-handle"><?php _e('Categories') ?></h3>
|
582 |
-
<div class="dbx-content">
|
583 |
-
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
584 |
-
<p id="jaxcat"></p>
|
585 |
-
<ul id="categorychecklist"><?php fwp_category_checklist(NULL, false, $checked); ?></ul></div>
|
586 |
-
</fieldset>
|
587 |
-
</div>
|
588 |
-
</div>
|
589 |
-
<?php
|
590 |
-
else : // WordPress 1.5
|
591 |
-
?>
|
592 |
-
<fieldset id="categorydiv" style="width: 20%; margin-right: 2em">
|
593 |
-
<legend><?php _e('Categories') ?></legend>
|
594 |
-
<p style="font-size:smaller;font-style:bold;margin:0">Place <?php print $object; ?> under...</p>
|
595 |
-
<div style="height: 20em"><?php fwp_category_checklist(NULL, false, $checked); ?></div>
|
596 |
-
</fieldset>
|
597 |
-
<?php
|
598 |
-
endif;
|
599 |
-
}
|
600 |
-
|
601 |
-
function update_feeds_mention ($feed) {
|
602 |
-
echo "<li>Updating <cite>".$feed['link/name']."</cite> from <<a href=\""
|
603 |
-
.$feed['link/uri']."\">".$feed['link/uri']."</a>> ...</li>\n";
|
604 |
-
flush();
|
605 |
-
}
|
606 |
-
|
607 |
-
function fwp_syndication_manage_page () {
|
608 |
-
global $wpdb;
|
609 |
-
|
610 |
-
if (FeedWordPress::needs_upgrade()) :
|
611 |
-
fwp_upgrade_page();
|
612 |
-
return;
|
613 |
-
endif;
|
614 |
-
|
615 |
-
?>
|
616 |
-
<?php $cont = true;
|
617 |
-
if (isset($_REQUEST['action'])):
|
618 |
-
if ($_REQUEST['action'] == 'feedfinder') : $cont = fwp_feedfinder_page();
|
619 |
-
elseif ($_REQUEST['action'] == 'switchfeed') : $cont = fwp_switchfeed_page();
|
620 |
-
elseif ($_REQUEST['action'] == 'linkedit') : $cont = fwp_linkedit_page();
|
621 |
-
elseif ($_REQUEST['action'] == 'Unsubscribe from Checked Links' or $_REQUEST['action'] == 'Unsubscribe') : $cont = fwp_multidelete_page();
|
622 |
-
endif;
|
623 |
-
endif;
|
624 |
-
|
625 |
-
if ($cont):
|
626 |
-
?>
|
627 |
-
<?php
|
628 |
-
$links = FeedWordPress::syndicated_links();
|
629 |
-
|
630 |
-
if (isset($_POST['update']) or isset($_POST['action']) or isset($_POST['update_uri'])) :
|
631 |
-
$fwp_update_invoke = 'post';
|
632 |
-
else :
|
633 |
-
$fwp_update_invoke = 'get';
|
634 |
-
endif;
|
635 |
-
|
636 |
-
$update_set = array();
|
637 |
-
if (isset($_POST['link_ids']) and is_array($_POST['link_ids']) and ($_POST['action']=='Update Checked Links')) :
|
638 |
-
$targets = $wpdb->get_results("
|
639 |
-
SELECT * FROM $wpdb->links
|
640 |
-
WHERE link_id IN (".implode(",",$_POST['link_ids']).")
|
641 |
-
");
|
642 |
-
if (is_array($targets)) :
|
643 |
-
foreach ($targets as $target) :
|
644 |
-
$update_set[] = $target->link_rss;
|
645 |
-
endforeach;
|
646 |
-
else : // This should never happen
|
647 |
-
FeedWordPress::critical_bug('fwp_syndication_manage_page::targets', $targets, __LINE__);
|
648 |
-
endif;
|
649 |
-
elseif (isset($_POST['update_uri'])) :
|
650 |
-
$update_set[] = $_POST['update_uri'];
|
651 |
-
endif;
|
652 |
-
|
653 |
-
if ($fwp_update_invoke != 'get' and count($update_set) > 0) : // Only do things with side-effects for HTTP POST or command line
|
654 |
-
$feedwordpress =& new FeedWordPress;
|
655 |
-
add_action('feedwordpress_check_feed', 'update_feeds_mention');
|
656 |
-
|
657 |
-
echo "<div class=\"updated\">\n";
|
658 |
-
echo "<ul>\n";
|
659 |
-
$tdelta = NULL;
|
660 |
-
foreach ($update_set as $uri) :
|
661 |
-
if ($uri == '*') : $uri = NULL; endif;
|
662 |
-
$delta = $feedwordpress->update($uri);
|
663 |
-
if (!is_null($delta)) :
|
664 |
-
if (is_null($tdelta)) :
|
665 |
-
$tdelta = $delta;
|
666 |
-
else :
|
667 |
-
$tdelta['new'] += $delta['new'];
|
668 |
-
$tdelta['updated'] += $delta['updated'];
|
669 |
-
endif;
|
670 |
-
else :
|
671 |
-
echo "<li><p><strong>Error:</strong> There was a problem updating <a href=\"$uri\">$uri</a></p></li>\n";
|
672 |
-
endif;
|
673 |
-
endforeach;
|
674 |
-
echo "</ul>\n";
|
675 |
-
|
676 |
-
if (!is_null($tdelta)) :
|
677 |
-
$mesg = array();
|
678 |
-
if (isset($delta['new'])) : $mesg[] = ' '.$tdelta['new'].' new posts were syndicated'; endif;
|
679 |
-
if (isset($delta['updated'])) : $mesg[] = ' '.$tdelta['updated'].' existing posts were updated'; endif;
|
680 |
-
echo "<p>Update complete.".implode(' and', $mesg)."</p>";
|
681 |
-
echo "\n"; flush();
|
682 |
-
endif;
|
683 |
-
echo "</div> <!-- class=\"updated\" -->\n";
|
684 |
-
endif;
|
685 |
-
|
686 |
-
?>
|
687 |
-
<div class="wrap">
|
688 |
-
<form action="" method="POST">
|
689 |
-
<h2>Update feeds now</h2>
|
690 |
-
<p>Check currently scheduled feeds for new and updated posts.</p>
|
691 |
-
|
692 |
-
<?php if (!get_option('feedwordpress_automatic_updates')) : ?>
|
693 |
-
<p><strong>Note:</strong> Automatic updates are currently turned
|
694 |
-
<strong>off</strong>. New posts from your feeds will not be syndicated
|
695 |
-
until you manually check for them here. You can turn on automatic
|
696 |
-
updates under <a href="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/syndication-options.php">Syndication
|
697 |
-
Options</a>.</p>
|
698 |
-
<?php endif; ?>
|
699 |
-
|
700 |
-
|
701 |
-
<div class="submit"><input type="hidden" name="update_uri" value="*" /><input type="submit" name="update" value="Update" /></div>
|
702 |
-
</form>
|
703 |
-
</div> <!-- class="wrap" -->
|
704 |
-
|
705 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/<?php echo basename(__FILE__); ?>" method="post">
|
706 |
-
<div class="wrap">
|
707 |
-
<h2>Syndicated Sites</h2>
|
708 |
-
<?php $alt_row = true;
|
709 |
-
if ($links): ?>
|
710 |
-
|
711 |
-
<table width="100%" cellpadding="3" cellspacing="3">
|
712 |
-
<tr>
|
713 |
-
<th width="20%"><?php _e('Name'); ?></th>
|
714 |
-
<th width="40%"><?php _e('Feed'); ?></th>
|
715 |
-
<th colspan="4"><?php _e('Action'); ?></th>
|
716 |
-
</tr>
|
717 |
-
|
718 |
-
<?php foreach ($links as $link):
|
719 |
-
$alt_row = !$alt_row; ?>
|
720 |
-
<tr<?php echo ($alt_row?' class="alternate"':''); ?>>
|
721 |
-
<td><a href="<?php echo wp_specialchars($link->link_url, 'both'); ?>"><?php echo wp_specialchars($link->link_name, 'both'); ?></a></td>
|
722 |
-
<?php
|
723 |
-
if (strlen($link->link_rss) > 0):
|
724 |
-
$caption='Switch Feed';
|
725 |
-
$uri_bits = parse_url($link->link_rss);
|
726 |
-
$uri_bits['host'] = preg_replace('/^www\./i', '', $uri_bits['host']);
|
727 |
-
$display_uri =
|
728 |
-
(isset($uri_bits['user'])?$uri_bits['user'].'@':'')
|
729 |
-
.(isset($uri_bits['host'])?$uri_bits['host']:'')
|
730 |
-
.(isset($uri_bits['port'])?':'.$uri_bits['port']:'')
|
731 |
-
.(isset($uri_bits['path'])?$uri_bits['path']:'')
|
732 |
-
.(isset($uri_bits['query'])?'?'.$uri_bits['query']:'');
|
733 |
-
if (strlen($display_uri) > 32) : $display_uri = substr($display_uri, 0, 32).'…'; endif;
|
734 |
-
?>
|
735 |
-
<td>
|
736 |
-
<strong><a href="<?php echo wp_specialchars($link->link_rss, 'both'); ?>"><?php echo wp_specialchars($display_uri, 'both'); ?></a></strong></td>
|
737 |
-
<?php
|
738 |
-
else:
|
739 |
-
$caption='Find Feed';
|
740 |
-
?>
|
741 |
-
<td style="background-color:#FFFFD0"><p><strong>no
|
742 |
-
feed assigned</strong></p></td>
|
743 |
-
<?php
|
744 |
-
endif;
|
745 |
-
?>
|
746 |
-
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=linkedit" class="edit"><?php _e('Edit')?></a></td>
|
747 |
-
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=feedfinder" class="edit"><?php echo $caption; ?></a></td>
|
748 |
-
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=Unsubscribe" class="delete"><?php _e('Unsubscribe'); ?></a></td>
|
749 |
-
<td><input type="checkbox" name="link_ids[]" value="<?php echo $link->link_id; ?>" /></td>
|
750 |
-
<?php
|
751 |
-
echo "\n\t</tr>";
|
752 |
-
endforeach;
|
753 |
-
else:
|
754 |
-
?>
|
755 |
-
|
756 |
-
<p>There are no websites currently listed for syndication.</p>
|
757 |
-
|
758 |
-
<?php endif; ?>
|
759 |
-
</table>
|
760 |
-
|
761 |
-
<br/><hr/>
|
762 |
-
<div class="submit"><input type="submit" class="delete" name="action" value="Unsubscribe from Checked Links" />
|
763 |
-
<input type="submit" name="action" value="Update Checked Links" /></div>
|
764 |
-
</div> <!-- class="wrap" -->
|
765 |
-
</form>
|
766 |
-
|
767 |
-
<div class="wrap">
|
768 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
769 |
-
<h2>Add a new syndicated site:</h2>
|
770 |
-
<div>
|
771 |
-
<label for="add-uri">Website or newsfeed:</label>
|
772 |
-
<input type="text" name="lookup" id="add-uri" value="URI" size="64" />
|
773 |
-
<input type="hidden" name="action" value="feedfinder" />
|
774 |
-
</div>
|
775 |
-
<div class="submit"><input type="submit" value="Syndicate »" /></div>
|
776 |
-
</form>
|
777 |
-
</div> <!-- class="wrap" -->
|
778 |
-
<?php
|
779 |
-
endif;
|
780 |
-
}
|
781 |
-
|
782 |
-
function fwp_feedfinder_page () {
|
783 |
-
global $wpdb;
|
784 |
-
|
785 |
-
$lookup = (isset($_REQUEST['lookup'])?$_REQUEST['lookup']:NULL);
|
786 |
-
|
787 |
-
if (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']!=0)):
|
788 |
-
$link_id = $_REQUEST['link_id'];
|
789 |
-
if (!is_numeric($link_id)) : FeedWordPress::critical_bug('fwp_feedfinder_page::link_id', $link_id, __LINE__); endif;
|
790 |
-
|
791 |
-
$link = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id='".$wpdb->escape($link_id)."'");
|
792 |
-
if (is_object($link)):
|
793 |
-
if (is_null($lookup)) $lookup = $link->link_url;
|
794 |
-
$name = wp_specialchars($link->link_name, 'both');
|
795 |
-
else:
|
796 |
-
die (__("Cheatin' uh ?"));
|
797 |
-
endif;
|
798 |
-
else:
|
799 |
-
$name = "New Syndicated Feed";
|
800 |
-
$link_id = 0;
|
801 |
-
endif;
|
802 |
-
?>
|
803 |
-
<div class="wrap">
|
804 |
-
<h2>Feed Finder: <?php echo $name; ?></h2>
|
805 |
-
<?php
|
806 |
-
$f =& new FeedFinder($lookup);
|
807 |
-
$feeds = $f->find();
|
808 |
-
if (count($feeds) > 0):
|
809 |
-
foreach ($feeds as $key => $f):
|
810 |
-
$rss = fetch_rss($f);
|
811 |
-
if ($rss):
|
812 |
-
$feed_title = isset($rss->channel['title'])?$rss->channel['title']:$rss->channel['link'];
|
813 |
-
$feed_link = isset($rss->channel['link'])?$rss->channel['link']:'';
|
814 |
-
?>
|
815 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
816 |
-
<fieldset style="clear: both">
|
817 |
-
<legend><?php echo $rss->feed_type; ?> <?php echo $rss->feed_version; ?> feed</legend>
|
818 |
-
|
819 |
-
<?php if ($link_id===0): ?>
|
820 |
-
<input type="hidden" name="feed_title" value="<?php echo wp_specialchars($feed_title, 'both'); ?>" />
|
821 |
-
<input type="hidden" name="feed_link" value="<?php echo wp_specialchars($feed_link, 'both'); ?>" />
|
822 |
-
<?php endif; ?>
|
823 |
-
|
824 |
-
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
825 |
-
<input type="hidden" name="feed" value="<?php echo wp_specialchars($f, 'both'); ?>" />
|
826 |
-
<input type="hidden" name="action" value="switchfeed" />
|
827 |
-
|
828 |
-
<div>
|
829 |
-
<div style="float:right; background-color:#D0D0D0; color: black; width:45%; font-size:70%; border-left: 1px dotted #A0A0A0; padding-left: 0.5em; margin-left: 1.0em">
|
830 |
-
<?php if (count($rss->items) > 0): ?>
|
831 |
-
<?php $item = $rss->items[0]; ?>
|
832 |
-
<h3>Sample Item</h3>
|
833 |
-
<ul>
|
834 |
-
<li><strong>Title:</strong> <a href="<?php echo $item['link']; ?>"><?php echo $item['title']; ?></a></li>
|
835 |
-
<li><strong>Date:</strong> <?php echo isset($item['date_timestamp']) ? date('d-M-y g:i:s a', $item['date_timestamp']) : 'unknown'; ?></li>
|
836 |
-
</ul>
|
837 |
-
<div class="entry">
|
838 |
-
<?php echo (isset($item['content']['encoded'])?$item['content']['encoded']:$item['description']); ?>
|
839 |
-
</div>
|
840 |
-
<?php else: ?>
|
841 |
-
<h3>No Items</h3>
|
842 |
-
<p>FeedWordPress found no posts on this feed.</p>
|
843 |
-
<?php endif; ?>
|
844 |
-
</div>
|
845 |
-
|
846 |
-
<div>
|
847 |
-
<h3>Feed Information</h3>
|
848 |
-
<ul>
|
849 |
-
<li><strong>Website:</strong> <a href="<?php echo $feed_link; ?>"><?php echo is_null($feed_title)?'<em>Unknown</em>':$feed_title; ?></a></li>
|
850 |
-
<li><strong>Feed URI:</strong> <a href="<?php echo wp_specialchars($f, 'both'); ?>"><?php echo wp_specialchars($f, 'both'); ?></a> (<a title="Check feed <<?php echo wp_specialchars($f, 'both'); ?>> for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li>
|
851 |
-
<li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?wp_specialchars($rss->encoding, 'both'):"<em>Unknown</em>"; ?></li>
|
852 |
-
<li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?wp_specialchars($rss->channel['description'], 'both'):"<em>Unknown</em>"; ?></li>
|
853 |
-
</ul>
|
854 |
-
<div class="submit"><input type="submit" name="Use" value="« Use this feed" /></div>
|
855 |
-
<div class="submit"><input type="submit" name="Cancel" value="« Cancel" /></div>
|
856 |
-
</div>
|
857 |
-
</div>
|
858 |
-
</fieldset>
|
859 |
-
</form>
|
860 |
-
<?php endif;
|
861 |
-
endforeach;
|
862 |
else:
|
863 |
-
|
864 |
-
endif;
|
865 |
-
?>
|
866 |
-
</div>
|
867 |
-
|
868 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
869 |
-
<div class="wrap">
|
870 |
-
<h2>Use another feed</h2>
|
871 |
-
<div><label>Feed:</label>
|
872 |
-
<input type="text" name="lookup" value="URI" />
|
873 |
-
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
874 |
-
<input type="hidden" name="action" value="feedfinder" /></div>
|
875 |
-
<div class="submit"><input type="submit" value="Use this feed »" /></div>
|
876 |
-
</div>
|
877 |
-
</form>
|
878 |
-
<?php
|
879 |
-
return false; // Don't continue
|
880 |
-
}
|
881 |
-
|
882 |
-
function fwp_switchfeed_page () {
|
883 |
-
global $wpdb, $wp_db_version;
|
884 |
-
|
885 |
-
check_admin_referer();
|
886 |
-
if (!isset($_REQUEST['Cancel'])):
|
887 |
-
if (!current_user_can('manage_links')):
|
888 |
-
die (__("Cheatin' uh ?"));
|
889 |
-
elseif (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']==0)):
|
890 |
-
$link_id = FeedWordPress::syndicate_link($_REQUEST['feed_title'], $_REQUEST['feed_link'], $_REQUEST['feed']);
|
891 |
-
if ($link_id): ?>
|
892 |
-
<div class="updated"><p><a href="<?php echo $_REQUEST['feed_link']; ?>"><?php echo wp_specialchars($_REQUEST['feed_title'], 'both'); ?></a>
|
893 |
-
has been added as a contributing site, using the newsfeed at <<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>>.</p></div>
|
894 |
-
<?php else: ?>
|
895 |
-
<div class="updated"><p>There was a problem adding the newsfeed. [SQL: <?php echo wp_specialchars(mysql_error(), 'both'); ?>]</p></div>
|
896 |
-
<?php endif;
|
897 |
-
elseif (isset($_REQUEST['link_id'])):
|
898 |
-
// Update link_rss
|
899 |
-
$result = $wpdb->query("
|
900 |
-
UPDATE $wpdb->links
|
901 |
-
SET
|
902 |
-
link_rss = '".$wpdb->escape($_REQUEST['feed'])."'
|
903 |
-
WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
|
904 |
-
");
|
905 |
-
|
906 |
-
if ($result):
|
907 |
-
$result = $wpdb->get_row("
|
908 |
-
SELECT link_name, link_url FROM $wpdb->links
|
909 |
-
WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
|
910 |
-
");
|
911 |
-
?>
|
912 |
-
<div class="updated"><p>Feed for <a href="<?php echo $result->link_url; ?>"><?php echo wp_specialchars($result->link_name, 'both'); ?></a>
|
913 |
-
updated to <<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>>.</p></div>
|
914 |
-
<?php else: ?>
|
915 |
-
<div class="updated"><p>Nothing was changed.</p></div>
|
916 |
-
<?php endif;
|
917 |
-
endif;
|
918 |
-
endif;
|
919 |
-
return true; // Continue
|
920 |
-
}
|
921 |
-
|
922 |
-
function fwp_linkedit_page () {
|
923 |
-
global $wpdb, $wp_db_version;
|
924 |
-
|
925 |
-
check_admin_referer(); // Make sure we arrived here from the Dashboard
|
926 |
-
|
927 |
-
$special_settings = array ( /* Regular expression syntax is OK here */
|
928 |
-
'cats',
|
929 |
-
'cat_split',
|
930 |
-
'hardcode name',
|
931 |
-
'hardcode url',
|
932 |
-
'hardcode description',
|
933 |
-
'hardcode categories', /* Deprecated */
|
934 |
-
'post status',
|
935 |
-
'comment status',
|
936 |
-
'ping status',
|
937 |
-
'unfamiliar author',
|
938 |
-
'unfamliar categories', /* Deprecated */
|
939 |
-
'unfamiliar category',
|
940 |
-
'map authors',
|
941 |
-
'tags',
|
942 |
-
'update/.*',
|
943 |
-
'feed/.*',
|
944 |
-
'link/.*',
|
945 |
-
);
|
946 |
-
|
947 |
-
if (!current_user_can('manage_links')) :
|
948 |
-
die (__("Cheatin' uh ?"));
|
949 |
-
elseif (isset($_REQUEST['feedfinder'])) :
|
950 |
-
return fwp_feedfinder_page(); // re-route to Feed Finder page
|
951 |
-
else :
|
952 |
-
$link_id = (int) $_REQUEST['link_id'];
|
953 |
-
$link =& new SyndicatedLink($link_id);
|
954 |
-
|
955 |
-
if ($link->found()) :
|
956 |
-
if (isset($GLOBALS['fwp_post']['save'])) :
|
957 |
-
$alter = array ();
|
958 |
-
|
959 |
-
$meta = $link->settings;
|
960 |
-
//if (isset($meta['cats'])):
|
961 |
-
// $meta['cats'] = preg_split(FEEDWORDPRESS_CAT_SEPARATOR_PATTERN, $meta['cats']);
|
962 |
-
//endif;
|
963 |
-
|
964 |
-
// custom feed settings first
|
965 |
-
foreach ($GLOBALS['fwp_post']['notes'] as $mn) :
|
966 |
-
$mn['key0'] = trim($mn['key0']);
|
967 |
-
$mn['key1'] = trim($mn['key1']);
|
968 |
-
if (preg_match("\007^(("
|
969 |
-
.implode(')|(',$special_settings)
|
970 |
-
."))$\007i",
|
971 |
-
$mn['key1'])) :
|
972 |
-
$mn['key1'] = 'user/'.$mn['key1'];
|
973 |
-
endif;
|
974 |
-
|
975 |
-
if (strlen($mn['key0']) > 0) :
|
976 |
-
unset($meta[$mn['key0']]); // out with the old
|
977 |
-
endif;
|
978 |
-
|
979 |
-
if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
|
980 |
-
$meta[$mn['key1']] = $mn['value']; // in with the new
|
981 |
-
endif;
|
982 |
-
endforeach;
|
983 |
-
|
984 |
-
// now stuff through the web form
|
985 |
-
// hardcoded feed info
|
986 |
-
if (isset($GLOBALS['fwp_post']['hardcode_name'])) :
|
987 |
-
$meta['hardcode name'] = $GLOBALS['fwp_post']['hardcode_name'];
|
988 |
-
if (FeedWordPress::affirmative($meta, 'hardcode name')) :
|
989 |
-
$alter[] = "link_name = '".$wpdb->escape($GLOBALS['fwp_post']['name'])."'";
|
990 |
-
endif;
|
991 |
-
endif;
|
992 |
-
if (isset($GLOBALS['fwp_post']['hardcode_description'])) :
|
993 |
-
$meta['hardcode description'] = $GLOBALS['fwp_post']['hardcode_description'];
|
994 |
-
if (FeedWordPress::affirmative($meta, 'hardcode description')) :
|
995 |
-
$alter[] = "link_description = '".$wpdb->escape($GLOBALS['fwp_post']['description'])."'";
|
996 |
-
endif;
|
997 |
-
endif;
|
998 |
-
if (isset($GLOBALS['fwp_post']['hardcode_url'])) :
|
999 |
-
$meta['hardcode url'] = $GLOBALS['fwp_post']['hardcode_url'];
|
1000 |
-
if (FeedWordPress::affirmative($meta, 'hardcode url')) :
|
1001 |
-
$alter[] = "link_url = '".$wpdb->escape($GLOBALS['fwp_post']['linkurl'])."'";
|
1002 |
-
endif;
|
1003 |
-
endif;
|
1004 |
-
|
1005 |
-
// Update scheduling
|
1006 |
-
if (isset($GLOBALS['fwp_post']['update_schedule'])) :
|
1007 |
-
$meta['update/hold'] = $GLOBALS['fwp_post']['update_schedule'];
|
1008 |
-
endif;
|
1009 |
-
|
1010 |
-
// Categories
|
1011 |
-
if (isset($GLOBALS['fwp_post']['post_category'])) :
|
1012 |
-
$meta['cats'] = array();
|
1013 |
-
foreach ($GLOBALS['fwp_post']['post_category'] as $cat_id) :
|
1014 |
-
$meta['cats'][] = '{#'.$cat_id.'}';
|
1015 |
-
endforeach;
|
1016 |
-
else :
|
1017 |
-
unset($meta['cats']);
|
1018 |
-
endif;
|
1019 |
-
|
1020 |
-
// Tags
|
1021 |
-
if (isset($GLOBALS['fwp_post']['tags_input'])) :
|
1022 |
-
$meta['tags'] = array();
|
1023 |
-
foreach (explode(',', $GLOBALS['fwp_post']['tags_input']) as $tag) :
|
1024 |
-
$meta['tags'][] = trim($tag);
|
1025 |
-
endforeach;
|
1026 |
-
endif;
|
1027 |
-
|
1028 |
-
// Post status, comment status, ping status
|
1029 |
-
foreach (array('post', 'comment', 'ping') as $what) :
|
1030 |
-
$sfield = "feed_{$what}_status";
|
1031 |
-
if (isset($GLOBALS['fwp_post'][$sfield])) :
|
1032 |
-
if ($GLOBALS['fwp_post'][$sfield]=='site-default') :
|
1033 |
-
unset($meta["{$what} status"]);
|
1034 |
-
else :
|
1035 |
-
$meta["{$what} status"] = $GLOBALS['fwp_post'][$sfield];
|
1036 |
-
endif;
|
1037 |
-
endif;
|
1038 |
-
endforeach;
|
1039 |
-
|
1040 |
-
// Unfamiliar author, unfamiliar categories
|
1041 |
-
foreach (array("author", "category") as $what) :
|
1042 |
-
$sfield = "unfamiliar_{$what}";
|
1043 |
-
if (isset($GLOBALS['fwp_post'][$sfield])) :
|
1044 |
-
if ('site-default'==$GLOBALS['fwp_post'][$sfield]) :
|
1045 |
-
unset($meta["unfamiliar {$what}"]);
|
1046 |
-
elseif ('newuser'==$GLOBALS['fwp_post'][$sfield]) :
|
1047 |
-
$newuser_name = trim($GLOBALS['fwp_post']["{$sfield}_newuser"]);
|
1048 |
-
if (strlen($newuser_name) > 0) :
|
1049 |
-
$userdata = array();
|
1050 |
-
$userdata['ID'] = NULL;
|
1051 |
-
|
1052 |
-
$userdata['user_login'] = sanitize_user($newuser_name);
|
1053 |
-
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
1054 |
-
|
1055 |
-
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
1056 |
-
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
1057 |
-
|
1058 |
-
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
1059 |
-
|
1060 |
-
$newuser_id = wp_insert_user($userdata);
|
1061 |
-
if (is_numeric($newuser_id)) :
|
1062 |
-
$meta["unfamiliar {$what}"] = $newuser_id;
|
1063 |
-
else :
|
1064 |
-
// TODO: Add some error detection and reporting
|
1065 |
-
endif;
|
1066 |
-
else :
|
1067 |
-
// TODO: Add some error reporting
|
1068 |
-
endif;
|
1069 |
-
else :
|
1070 |
-
$meta["unfamiliar {$what}"] = $GLOBALS['fwp_post'][$sfield];
|
1071 |
-
endif;
|
1072 |
-
endif;
|
1073 |
-
endforeach;
|
1074 |
-
|
1075 |
-
// Handle author mapping rules
|
1076 |
-
if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) :
|
1077 |
-
unset($meta['map authors']);
|
1078 |
-
foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) :
|
1079 |
-
// Normalize for case and whitespace
|
1080 |
-
$name = strtolower(trim($name));
|
1081 |
-
$author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
|
1082 |
-
|
1083 |
-
if (strlen($name) > 0) :
|
1084 |
-
if ('newuser' == $author_action) :
|
1085 |
-
$newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
|
1086 |
-
if (strlen($newuser_name) > 0) :
|
1087 |
-
$userdata = array();
|
1088 |
-
$userdata['ID'] = NULL;
|
1089 |
-
|
1090 |
-
$userdata['user_login'] = sanitize_user($newuser_name);
|
1091 |
-
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
1092 |
-
|
1093 |
-
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
1094 |
-
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
1095 |
-
|
1096 |
-
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
1097 |
-
|
1098 |
-
$newuser_id = wp_insert_user($userdata);
|
1099 |
-
if (is_numeric($newuser_id)) :
|
1100 |
-
$meta['map authors']['name'][$name] = $newuser_id;
|
1101 |
-
else :
|
1102 |
-
// TODO: Add some error detection and reporting
|
1103 |
-
endif;
|
1104 |
-
else :
|
1105 |
-
// TODO: Add some error reporting
|
1106 |
-
endif;
|
1107 |
-
else :
|
1108 |
-
$meta['map authors']['name'][$name] = $author_action;
|
1109 |
-
endif;
|
1110 |
-
endif;
|
1111 |
-
endforeach;
|
1112 |
-
endif;
|
1113 |
-
|
1114 |
-
if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) :
|
1115 |
-
$name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
|
1116 |
-
$author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
|
1117 |
-
if (strlen($name) > 0) :
|
1118 |
-
if ('newuser' == $author_action) :
|
1119 |
-
$newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
|
1120 |
-
if (strlen($newuser_name) > 0) :
|
1121 |
-
$userdata = array();
|
1122 |
-
$userdata['ID'] = NULL;
|
1123 |
-
|
1124 |
-
$userdata['user_login'] = sanitize_user($newuser_name);
|
1125 |
-
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
1126 |
-
|
1127 |
-
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
1128 |
-
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
1129 |
-
|
1130 |
-
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
1131 |
-
|
1132 |
-
$newuser_id = wp_insert_user($userdata);
|
1133 |
-
if (is_numeric($newuser_id)) :
|
1134 |
-
$meta['map authors']['name'][$name] = $newuser_id;
|
1135 |
-
else :
|
1136 |
-
// TODO: Add some error detection and reporting
|
1137 |
-
endif;
|
1138 |
-
else :
|
1139 |
-
// TODO: Add some error reporting
|
1140 |
-
endif;
|
1141 |
-
else :
|
1142 |
-
$meta['map authors']['name'][$name] = $author_action;
|
1143 |
-
endif;
|
1144 |
-
endif;
|
1145 |
-
endif;
|
1146 |
-
|
1147 |
-
if (isset($GLOBALS['fwp_post']['cat_split'])) :
|
1148 |
-
if (strlen(trim($GLOBALS['fwp_post']['cat_split'])) > 0) :
|
1149 |
-
$meta['cat_split'] = trim($GLOBALS['fwp_post']['cat_split']);
|
1150 |
-
else :
|
1151 |
-
unset($meta['cat_split']);
|
1152 |
-
endif;
|
1153 |
-
endif;
|
1154 |
-
|
1155 |
-
if (is_array($meta['cats'])) :
|
1156 |
-
$meta['cats'] = implode(FEEDWORDPRESS_CAT_SEPARATOR, $meta['cats']);
|
1157 |
-
endif;
|
1158 |
-
if (is_array($meta['tags'])) :
|
1159 |
-
$meta['tags'] = implode(FEEDWORDPRESS_CAT_SEPARATOR, $meta['tags']);
|
1160 |
-
endif;
|
1161 |
-
|
1162 |
-
// Collapse the author mapping rule structure back into a flat string
|
1163 |
-
if (isset($meta['map authors'])) :
|
1164 |
-
$ma = array();
|
1165 |
-
foreach ($meta['map authors'] as $rule_type => $author_rules) :
|
1166 |
-
foreach ($author_rules as $author_name => $author_action) :
|
1167 |
-
$ma[] = $rule_type."\n".$author_name."\n".$author_action;
|
1168 |
-
endforeach;
|
1169 |
-
endforeach;
|
1170 |
-
$meta['map authors'] = implode("\n\n", $ma);
|
1171 |
-
endif;
|
1172 |
-
|
1173 |
-
$notes = '';
|
1174 |
-
foreach ($meta as $key => $value) :
|
1175 |
-
$notes .= $key . ": ". addcslashes($value, "\0..\37".'\\') . "\n";
|
1176 |
-
endforeach;
|
1177 |
-
$alter[] = "link_notes = '".$wpdb->escape($notes)."'";
|
1178 |
-
|
1179 |
-
$alter_set = implode(", ", $alter);
|
1180 |
-
|
1181 |
-
// issue update query
|
1182 |
-
$result = $wpdb->query("
|
1183 |
-
UPDATE $wpdb->links
|
1184 |
-
SET $alter_set
|
1185 |
-
WHERE link_id='$link_id'
|
1186 |
-
");
|
1187 |
-
$updated_link = true;
|
1188 |
-
|
1189 |
-
// reload link information from DB
|
1190 |
-
$link =& new SyndicatedLink($link_id);
|
1191 |
-
else :
|
1192 |
-
$updated_link = false;
|
1193 |
-
endif;
|
1194 |
-
|
1195 |
-
$db_link = $link->link;
|
1196 |
-
$link_url = wp_specialchars($db_link->link_url, 1);
|
1197 |
-
$link_name = wp_specialchars($db_link->link_name, 1);
|
1198 |
-
$link_description = wp_specialchars($db_link->link_description, 'both');
|
1199 |
-
$link_notes = wp_specialchars($db_link->link_notes, 'both');
|
1200 |
-
$link_rss_uri = wp_specialchars($db_link->link_rss, 'both');
|
1201 |
-
|
1202 |
-
$meta = $link->settings;
|
1203 |
-
$post_status_global = get_option('feedwordpress_syndicated_post_status');
|
1204 |
-
$comment_status_global = get_option('feedwordpress_syndicated_comment_status');
|
1205 |
-
$ping_status_global = get_option('feedwordpress_syndicated_ping_status');
|
1206 |
-
|
1207 |
-
$status['post'] = array('publish' => '', 'private' => '', 'draft' => '', 'site-default' => '');
|
1208 |
-
if (SyndicatedPost::use_api('post_status_pending')) :
|
1209 |
-
$status['post']['pending'] = '';
|
1210 |
-
endif;
|
1211 |
-
|
1212 |
-
$status['comment'] = array('open' => '', 'closed' => '', 'site-default' => '');
|
1213 |
-
$status['ping'] = array('open' => '', 'closed' => '', 'site-default' => '');
|
1214 |
-
|
1215 |
-
foreach (array('post', 'comment', 'ping') as $what) :
|
1216 |
-
if (isset($meta["{$what} status"])) :
|
1217 |
-
$status[$what][$meta["{$what} status"]] = ' checked="checked"';
|
1218 |
-
else :
|
1219 |
-
$status[$what]['site-default'] = ' checked="checked"';
|
1220 |
-
endif;
|
1221 |
-
endforeach;
|
1222 |
-
|
1223 |
-
$unfamiliar['author'] = array ('create' => '','default' => '','filter' => '');
|
1224 |
-
$unfamiliar['category'] = array ('create'=>'','default'=>'','filter'=>'');
|
1225 |
-
|
1226 |
-
foreach (array('author', 'category') as $what) :
|
1227 |
-
if (is_string($meta["unfamiliar {$what}"]) and
|
1228 |
-
array_key_exists($meta["unfamiliar {$what}"], $unfamiliar[$what])) :
|
1229 |
-
$key = $meta["unfamiliar {$what}"];
|
1230 |
-
else:
|
1231 |
-
$key = 'site-default';
|
1232 |
-
endif;
|
1233 |
-
$unfamiliar[$what][$key] = ' checked="checked"';
|
1234 |
-
endforeach;
|
1235 |
-
|
1236 |
-
if (is_array($meta['cats'])) : $cats = $meta['cats'];
|
1237 |
-
else : $cats = array();
|
1238 |
-
endif;
|
1239 |
-
|
1240 |
-
$dogs = SyndicatedPost::category_ids($cats, /*unfamiliar=*/ NULL);
|
1241 |
-
else :
|
1242 |
-
die( __('Link not found.') );
|
1243 |
-
endif;
|
1244 |
-
|
1245 |
-
?>
|
1246 |
-
<script type="text/javascript">
|
1247 |
-
function flip_hardcode (item) {
|
1248 |
-
ed=document.getElementById('basics-'+item+'-edit');
|
1249 |
-
view=document.getElementById('basics-'+item+'-view');
|
1250 |
-
|
1251 |
-
o = document.getElementById('basics-hardcode-'+item);
|
1252 |
-
if (o.value=='yes') { ed.style.display='inline'; view.style.display='none'; }
|
1253 |
-
else { ed.style.display='none'; view.style.display='inline'; }
|
1254 |
-
}
|
1255 |
-
function flip_newuser (item) {
|
1256 |
-
rollup=document.getElementById(item);
|
1257 |
-
newuser=document.getElementById(item+'-newuser');
|
1258 |
-
sitewide=document.getElementById(item+'-default');
|
1259 |
-
if (rollup) {
|
1260 |
-
if ('newuser'==rollup.value) {
|
1261 |
-
if (newuser) newuser.style.display='block';
|
1262 |
-
if (sitewide) sitewide.style.display='none';
|
1263 |
-
} else if ('site-default'==rollup.value) {
|
1264 |
-
if (newuser) newuser.style.display='none';
|
1265 |
-
if (sitewide) sitewide.style.display='block';
|
1266 |
-
} else {
|
1267 |
-
if (newuser) newuser.style.display='none';
|
1268 |
-
if (sitewide) sitewide.style.display='none';
|
1269 |
-
}
|
1270 |
-
}
|
1271 |
-
}
|
1272 |
-
</script>
|
1273 |
-
|
1274 |
-
<?php if ($updated_link) : ?>
|
1275 |
-
<div class="updated"><p>Syndicated feed settings updated.</p></div>
|
1276 |
-
<?php endif; ?>
|
1277 |
-
|
1278 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
1279 |
-
<div class="wrap">
|
1280 |
-
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
1281 |
-
<input type="hidden" name="action" value="linkedit" />
|
1282 |
-
<input type="hidden" name="save" value="link" />
|
1283 |
-
|
1284 |
-
<h2>Edit a syndicated feed:</h2>
|
1285 |
-
<div id="poststuff">
|
1286 |
-
<?php fwp_linkedit_single_submit($status); ?>
|
1287 |
-
|
1288 |
-
<div id="post-body">
|
1289 |
-
<?php fwp_option_box_opener('Feed Information', 'feedinformationdiv'); ?>
|
1290 |
-
<table class="editform" width="100%" cellspacing="2" cellpadding="5">
|
1291 |
-
<tr>
|
1292 |
-
<th scope="row" width="20%"><?php _e('Feed URI:') ?></th>
|
1293 |
-
<td width="60%"><a href="<?php echo wp_specialchars($link_rss_uri, 'both'); ?>"><?php echo $link_rss_uri; ?></a>
|
1294 |
-
(<a href="<?php echo FEEDVALIDATOR_URI; ?>?url=<?php echo urlencode($link_rss_uri); ?>"
|
1295 |
-
title="Check feed <<?php echo wp_specialchars($link_rss_uri, 'both'); ?>> for validity">validate</a>)
|
1296 |
-
</td>
|
1297 |
-
<td width="20%"><input type="submit" name="feedfinder" value="switch →" style="font-size:smaller" /></td>
|
1298 |
-
</tr>
|
1299 |
-
<tr>
|
1300 |
-
<th scope="row" width="20%"><?php _e('Link Name:') ?></th>
|
1301 |
-
<td width="60%"><input type="text" id="basics-name-edit" name="name"
|
1302 |
-
value="<?php echo $link_name; ?>" style="width: 95%" />
|
1303 |
-
<span id="basics-name-view"><strong><?php echo $link_name; ?></strong></span>
|
1304 |
-
</td>
|
1305 |
-
<td>
|
1306 |
-
<select id="basics-hardcode-name" onchange="flip_hardcode('name')" name="hardcode_name">
|
1307 |
-
<option value="no" <?php echo $link->hardcode('name')?'':'selected="selected"'; ?>>update automatically</option>
|
1308 |
-
<option value="yes" <?php echo $link->hardcode('name')?'selected="selected"':''; ?>>edit manually</option>
|
1309 |
-
</select>
|
1310 |
-
</td>
|
1311 |
-
</tr>
|
1312 |
-
<tr>
|
1313 |
-
<th scope="row" width="20%"><?php _e('Short description:') ?></th>
|
1314 |
-
<td width="60%">
|
1315 |
-
<input id="basics-description-edit" type="text" name="description" value="<?php echo $link_description; ?>" style="width: 95%" />
|
1316 |
-
<span id="basics-description-view"><strong><?php echo $link_description; ?></strong></span>
|
1317 |
-
</td>
|
1318 |
-
<td>
|
1319 |
-
<select id="basics-hardcode-description" onchange="flip_hardcode('description')"
|
1320 |
-
name="hardcode_description">
|
1321 |
-
<option value="no" <?php echo $link->hardcode('description')?'':'selected="selected"'; ?>>update automatically</option>
|
1322 |
-
<option value="yes" <?php echo $link->hardcode('description')?'selected="selected"':''; ?>>edit manually</option>
|
1323 |
-
</select></td>
|
1324 |
-
</tr>
|
1325 |
-
<tr>
|
1326 |
-
<th width="20%" scope="row"><?php _e('Homepage:') ?></th>
|
1327 |
-
<td width="60%">
|
1328 |
-
<input id="basics-url-edit" type="text" name="linkurl" value="<?php echo $link_url; ?>" style="width: 95%;" />
|
1329 |
-
<a id="basics-url-view" href="<?php echo $link_url; ?>"><?php echo $link_url; ?></a></td>
|
1330 |
-
<td>
|
1331 |
-
<select id="basics-hardcode-url" onchange="flip_hardcode('url')" name="hardcode_url">
|
1332 |
-
<option value="no"<?php echo $link->hardcode('url')?'':' selected="selected"'; ?>>update automatically</option>
|
1333 |
-
<option value="yes"<?php echo $link->hardcode('url')?' selected="selected"':''; ?>>edit manually</option>
|
1334 |
-
</select></td></tr>
|
1335 |
-
|
1336 |
-
<tr>
|
1337 |
-
<th width="20%"><?php _e('Last update') ?>:</th>
|
1338 |
-
<td colspan="2"><?php
|
1339 |
-
if (isset($meta['update/last'])) :
|
1340 |
-
echo strftime('%x %X', $meta['update/last'])." ";
|
1341 |
-
else :
|
1342 |
-
echo " none yet";
|
1343 |
-
endif;
|
1344 |
-
?></td></tr>
|
1345 |
-
<tr><th width="20%">Next update:</th>
|
1346 |
-
<td colspan="2"><?php
|
1347 |
-
$holdem = (isset($meta['update/hold']) ? $meta['update/hold'] : 'scheduled');
|
1348 |
-
?>
|
1349 |
-
<select name="update_schedule">
|
1350 |
-
<option value="scheduled"<?php echo ($holdem=='scheduled')?' selected="selected"':''; ?>>update on schedule <?php
|
1351 |
-
echo " (";
|
1352 |
-
if (isset($meta['update/ttl']) and is_numeric($meta['update/ttl'])) :
|
1353 |
-
if (isset($meta['update/timed']) and $meta['update/timed']=='automatically') :
|
1354 |
-
echo 'next: ';
|
1355 |
-
$next = $meta['update/last'] + ((int) $meta['update/ttl'] * 60);
|
1356 |
-
if (strftime('%x', time()) != strftime('%x', $next)) :
|
1357 |
-
echo strftime('%x', $next)." ";
|
1358 |
-
endif;
|
1359 |
-
echo strftime('%X', $meta['update/last']+((int) $meta['update/ttl']*60));
|
1360 |
-
else :
|
1361 |
-
echo "every ".$meta['update/ttl']." minute".(($meta['update/ttl']!=1)?"s":"");
|
1362 |
-
endif;
|
1363 |
-
else:
|
1364 |
-
echo "next scheduled update";
|
1365 |
-
endif;
|
1366 |
-
echo ")";
|
1367 |
-
?></option>
|
1368 |
-
<option value="next"<?php echo ($holdem=='next')?' selected="selected"':''; ?>>update ASAP</option>
|
1369 |
-
<option value="ping"<?php echo ($holdem=='ping')?' selected="selected"':''; ?>>update only when pinged</option>
|
1370 |
-
</select></tr>
|
1371 |
-
</table>
|
1372 |
-
<?php fwp_option_box_closer(); ?>
|
1373 |
-
|
1374 |
-
<script type="text/javascript">
|
1375 |
-
flip_hardcode('name');
|
1376 |
-
flip_hardcode('description');
|
1377 |
-
flip_hardcode('url');
|
1378 |
-
</script>
|
1379 |
-
|
1380 |
-
<?php fwp_linkedit_periodic_submit(); ?>
|
1381 |
-
|
1382 |
-
<?php
|
1383 |
-
if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) :
|
1384 |
-
fwp_option_box_opener('Syndicated Posts', 'syndicatedpostsdiv', 'postbox');
|
1385 |
-
?>
|
1386 |
-
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
1387 |
-
<tr><th width="27%" scope="row" style="vertical-align:top">Publication:</th>
|
1388 |
-
<td width="73%" style="vertical-align:top"><ul style="margin:0; list-style:none">
|
1389 |
-
<li><label><input type="radio" name="feed_post_status" value="site-default"
|
1390 |
-
<?php echo $status['post']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1391 |
-
(currently: <strong><?php echo ($post_status_global ? $post_status_global : 'publish'); ?></strong>)</label></li>
|
1392 |
-
<li><label><input type="radio" name="feed_post_status" value="publish"
|
1393 |
-
<?php echo $status['post']['publish']; ?> /> Publish posts from this feed immediately</label></li>
|
1394 |
-
|
1395 |
-
<?php if (SyndicatedPost::use_api('post_status_pending')) : ?>
|
1396 |
-
<li><label><input type="radio" name="feed_post_status" value="pending"
|
1397 |
-
<?php echo $status['post']['pending']; ?>/> Hold posts from this feed for review; mark as Pending</label></li>
|
1398 |
-
<?php endif; ?>
|
1399 |
-
|
1400 |
-
<li><label><input type="radio" name="feed_post_status" value="draft"
|
1401 |
-
<?php echo $status['post']['draft']; ?> /> Save posts from this feed as drafts</label></li>
|
1402 |
-
<li><label><input type="radio" name="feed_post_status" value="private"
|
1403 |
-
<?php echo $status['post']['private']; ?> /> Save posts from this feed as private posts</label></li>
|
1404 |
-
</ul></td>
|
1405 |
-
</tr>
|
1406 |
-
</table>
|
1407 |
-
<?php
|
1408 |
-
fwp_option_box_closer();
|
1409 |
-
fwp_linkedit_periodic_submit();
|
1410 |
-
endif;
|
1411 |
-
|
1412 |
-
fwp_option_box_opener(__('Categories'), 'categorydiv', 'postbox');
|
1413 |
-
fwp_category_box($dogs, 'all syndicated posts from this feed');
|
1414 |
-
?>
|
1415 |
-
<table>
|
1416 |
-
<tr>
|
1417 |
-
<th width="20%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
|
1418 |
-
<td width="80%"><ul style="margin: 0; list-style:none">
|
1419 |
-
<li><label><input type="radio" name="unfamiliar_category" value="site-default"<?php echo $unfamiliar['category']['site-default']; ?> /> use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1420 |
-
(currently <strong><?php echo FeedWordPress::on_unfamiliar('category'); ?></strong>)</label></li>
|
1421 |
-
<li><label><input type="radio" name="unfamiliar_category" value="create"<?php echo $unfamiliar['category']['create']; ?> /> create any categories the post is in</label></li>
|
1422 |
-
<li><label><input type="radio" name="unfamiliar_category" value="default"<?php echo $unfamiliar['category']['default']; ?> /> don't create new categories</label></li>
|
1423 |
-
<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php echo $unfamiliar['category']['filter']; ?> /> don't create new categories and don't syndicate posts unless they match at least one familiar category</label></li>
|
1424 |
-
</ul></td>
|
1425 |
-
</tr>
|
1426 |
-
|
1427 |
-
<tr>
|
1428 |
-
<th width="20%" scope="row" style="vertical-align:top">Multiple categories:</th>
|
1429 |
-
<td width="80%">
|
1430 |
-
<input type="text" size="20" id="cat_split" name="cat_split" value="<?php if (isset($meta['cat_split'])) : echo htmlspecialchars($meta['cat_split']); endif; ?>" /><br/>
|
1431 |
-
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
|
1432 |
-
categories in a single category element. The regular expression should match
|
1433 |
-
the characters used to separate one category from the next. If the feed uses
|
1434 |
-
spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
|
1435 |
-
If the feed does not provide multiple categories in a single element, leave this
|
1436 |
-
blank.</td>
|
1437 |
-
</tr>
|
1438 |
-
</table>
|
1439 |
-
<?php
|
1440 |
-
fwp_option_box_closer();
|
1441 |
-
fwp_linkedit_periodic_submit();
|
1442 |
-
|
1443 |
-
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
1444 |
-
fwp_tags_box($meta['tags']);
|
1445 |
-
fwp_linkedit_periodic_submit();
|
1446 |
-
endif; ?>
|
1447 |
-
|
1448 |
-
<?php fwp_option_box_opener('Syndicated Authors', 'authordiv', 'postbox'); ?>
|
1449 |
-
<?php $authorlist = fwp_author_list(); ?>
|
1450 |
-
<table>
|
1451 |
-
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by authors that haven't been syndicated before:</th></tr>
|
1452 |
-
<tr>
|
1453 |
-
<th style="text-align: left">Posts by new authors</th>
|
1454 |
-
<td>
|
1455 |
-
<select id="unfamiliar-author" name="unfamiliar_author" onchange="flip_newuser('unfamiliar-author');">
|
1456 |
-
<option value="site-default"<?php if (!isset($meta['unfamiliar author'])) : ?>selected="selected"<?php endif; ?>>are handled using site-wide settings</option>
|
1457 |
-
<option value="create"<?php if ('create'==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>create a new author account</option>
|
1458 |
-
<?php foreach ($authorlist as $author_id => $author_name) : ?>
|
1459 |
-
<option value="<?php echo $author_id; ?>"<?php if ($author_id==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>are assigned to <?php echo $author_name; ?></option>
|
1460 |
-
<?php endforeach; ?>
|
1461 |
-
<option value="newuser">will be assigned to a new user...</option>
|
1462 |
-
<option value="filter"<?php if ('filter'==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>get filtered out</option>
|
1463 |
-
</select>
|
1464 |
-
</td>
|
1465 |
-
<td>
|
1466 |
-
<div id="unfamiliar-author-default">Site-wide settings can be set in <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a></div>
|
1467 |
-
<div id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></div>
|
1468 |
-
</td>
|
1469 |
-
</tr>
|
1470 |
-
|
1471 |
-
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by specific authors. Blank out a name to delete the rule.</th></tr>
|
1472 |
-
|
1473 |
-
<?php if (isset($meta['map authors'])) : $i=0; foreach ($meta['map authors'] as $author_rules) : foreach ($author_rules as $author_name => $author_action) : $i++; ?>
|
1474 |
-
<tr>
|
1475 |
-
<th style="text-align: left">Posts by <input type="text" name="author_rules_name[]" value="<?php echo htmlspecialchars($author_name); ?>" /></th>
|
1476 |
-
<td>
|
1477 |
-
<select id="author-rules-<?php echo $i; ?>" name="author_rules_action[]" onchange="flip_newuser('author-rules-<?php echo $i; ?>');">
|
1478 |
-
<?php foreach ($authorlist as $local_author_id => $local_author_name) : ?>
|
1479 |
-
<option value="<?php echo $local_author_id; ?>"<?php if ($local_author_id==$author_action) : echo ' selected="selected"'; endif; ?>>are assigned to <?php echo $local_author_name; ?></option>
|
1480 |
-
<?php endforeach; ?>
|
1481 |
-
<option value="newuser">will be assigned to a new user...</option>
|
1482 |
-
<option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
|
1483 |
-
</select>
|
1484 |
-
</td>
|
1485 |
-
<td><div id="author-rules-<?php echo $i; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></div></td>
|
1486 |
-
</tr>
|
1487 |
-
<?php endforeach; endforeach; endif; ?>
|
1488 |
-
|
1489 |
-
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">Fill in to set up a new rule:</th></tr>
|
1490 |
-
|
1491 |
-
<tr>
|
1492 |
-
<th style="text-align: left">Posts by <input type="text" name="add_author_rule_name" /></th>
|
1493 |
-
<td>
|
1494 |
-
<select id="add-author-rule" name="add_author_rule_action" onchange="flip_newuser('add-author-rule');">
|
1495 |
-
<?php foreach ($authorlist as $author_id => $author_name) : ?>
|
1496 |
-
<option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
|
1497 |
-
<?php endforeach; ?>
|
1498 |
-
<option value="newuser">will be assigned to a new user...</option>
|
1499 |
-
<option value="filter">get filtered out</option>
|
1500 |
-
</select>
|
1501 |
-
</td>
|
1502 |
-
<td><div id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></div></td>
|
1503 |
-
</tr>
|
1504 |
-
|
1505 |
-
</table>
|
1506 |
-
<?php fwp_option_box_closer(); ?>
|
1507 |
-
|
1508 |
-
<script>
|
1509 |
-
flip_newuser('unfamiliar-author');
|
1510 |
-
<?php for ($j=1; $j<=$i; $j++) : ?>
|
1511 |
-
flip_newuser('author-rules-<?php echo $j; ?>');
|
1512 |
-
<?php endfor; ?>
|
1513 |
-
flip_newuser('add-author-rule');
|
1514 |
-
</script>
|
1515 |
-
|
1516 |
-
<?php
|
1517 |
-
fwp_linkedit_periodic_submit();
|
1518 |
-
fwp_option_box_opener('Comments & Pings', 'commentstatusdiv', 'postbox');
|
1519 |
-
?>
|
1520 |
-
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
1521 |
-
<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Comments'); ?>:</th>
|
1522 |
-
<td width="73%"><ul style="margin:0; list-style:none">
|
1523 |
-
<li><label><input type="radio" name="feed_comment_status" value="site-default"
|
1524 |
-
<?php echo $status['comment']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1525 |
-
(currently: <strong><?php echo ($comment_status_global ? $comment_status_global : 'closed'); ?>)</strong></label></li>
|
1526 |
-
<li><label><input type="radio" name="feed_comment_status" value="open"
|
1527 |
-
<?php echo $status['comment']['open']; ?> /> Allow comments on syndicated posts from this feed</label></li>
|
1528 |
-
<li><label><input type="radio" name="feed_comment_status" value="closed"
|
1529 |
-
<?php echo $status['comment']['closed']; ?> /> Don't allow comments on syndicated posts from this feed</label></li>
|
1530 |
-
</ul></td></tr>
|
1531 |
-
|
1532 |
-
<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Pings'); ?>:</th>
|
1533 |
-
<td width="73%"><ul style="margin:0; list-style:none">
|
1534 |
-
<li><label><input type="radio" name="feed_ping_status" value="site-default"
|
1535 |
-
<?php echo $status['ping']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1536 |
-
(currently: <strong><?php echo ($ping_status_global ? $ping_status_global : 'closed'); ?>)</strong></label></li>
|
1537 |
-
<li><label><input type="radio" name="feed_ping_status" value="open"
|
1538 |
-
<?php echo $status['ping']['open']; ?> /> Accept pings on syndicated posts from this feed</label></li>
|
1539 |
-
<li><label><input type="radio" name="feed_ping_status" value="closed"
|
1540 |
-
<?php echo $status['ping']['closed']; ?> /> Don't accept pings on syndicated posts from this feed</label></li>
|
1541 |
-
</ul></td></tr>
|
1542 |
-
|
1543 |
-
</table>
|
1544 |
-
<?php fwp_option_box_closer(); ?>
|
1545 |
-
<?php fwp_linkedit_periodic_submit(); ?>
|
1546 |
-
|
1547 |
-
<?php fwp_option_box_opener('Custom Settings (for use in templates)', 'postcustom', 'postbox'); ?>
|
1548 |
-
<div id="postcustomstuff">
|
1549 |
-
<table id="meta-list" cellpadding="3">
|
1550 |
-
<tr>
|
1551 |
-
<th>Key</th>
|
1552 |
-
<th>Value</th>
|
1553 |
-
<th>Action</th>
|
1554 |
-
</tr>
|
1555 |
-
|
1556 |
-
<?php
|
1557 |
-
$i = 0;
|
1558 |
-
foreach ($meta as $key => $value) :
|
1559 |
-
if (!preg_match("\007^((".implode(')|(', $special_settings)."))$\007i", $key)) :
|
1560 |
-
?>
|
1561 |
-
<tr style="vertical-align:top">
|
1562 |
-
<th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo wp_specialchars($key, 'both'); ?>" />
|
1563 |
-
<input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo wp_specialchars($key, 'both'); ?>" /></th>
|
1564 |
-
<td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo wp_specialchars($value, 'both'); ?></textarea></td>
|
1565 |
-
<td width="10%"><select name="notes[<?php echo $i; ?>][action]">
|
1566 |
-
<option value="update">save changes</option>
|
1567 |
-
<option value="delete">delete this setting</option>
|
1568 |
-
</select></td>
|
1569 |
-
</tr>
|
1570 |
-
<?php
|
1571 |
-
$i++;
|
1572 |
-
endif;
|
1573 |
-
endforeach;
|
1574 |
-
?>
|
1575 |
-
<tr>
|
1576 |
-
<th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
|
1577 |
-
<td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea></td>
|
1578 |
-
<td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
|
1579 |
-
</tr>
|
1580 |
-
</table>
|
1581 |
-
<?php fwp_option_box_closer(); ?>
|
1582 |
-
|
1583 |
-
<?php fwp_linkedit_periodic_submit(); ?>
|
1584 |
-
</div> <!-- id="post-body" -->
|
1585 |
-
</div> <!-- id="poststuff" -->
|
1586 |
-
</div>
|
1587 |
-
<?php
|
1588 |
-
endif;
|
1589 |
-
return false; // Don't continue
|
1590 |
-
}
|
1591 |
-
|
1592 |
-
function fwp_author_list () {
|
1593 |
-
global $wpdb;
|
1594 |
-
$ret = array();
|
1595 |
-
$users = $wpdb->get_results("SELECT * FROM $wpdb->users ORDER BY display_name");
|
1596 |
-
if (is_array($users)) :
|
1597 |
-
foreach ($users as $user) :
|
1598 |
-
$id = (int) $user->ID;
|
1599 |
-
$ret[$id] = $user->display_name;
|
1600 |
-
endforeach;
|
1601 |
endif;
|
1602 |
-
|
1603 |
-
}
|
1604 |
-
|
1605 |
-
function fwp_multidelete_page () {
|
1606 |
-
global $wpdb;
|
1607 |
-
|
1608 |
-
check_admin_referer(); // Make sure the referers are kosher
|
1609 |
-
|
1610 |
-
$link_ids = (isset($_REQUEST['link_ids']) ? $_REQUEST['link_ids'] : array());
|
1611 |
-
if (isset($_REQUEST['link_id'])) : array_push($link_ids, $_REQUEST['link_id']); endif;
|
1612 |
-
|
1613 |
-
if (!current_user_can('manage_links')):
|
1614 |
-
die (__("Cheatin' uh ?"));
|
1615 |
-
elseif (isset($GLOBALS['fwp_post']['confirm']) and $GLOBALS['fwp_post']['confirm']=='Delete'):
|
1616 |
-
foreach ($GLOBALS['fwp_post']['link_action'] as $link_id => $what) :
|
1617 |
-
$do_it[$what][] = $link_id;
|
1618 |
-
endforeach;
|
1619 |
-
|
1620 |
-
$alter = array();
|
1621 |
-
if (count($do_it['hide']) > 0) :
|
1622 |
-
$hidem = "(".implode(', ', $do_it['hide']).")";
|
1623 |
-
$alter[] = "
|
1624 |
-
UPDATE $wpdb->links
|
1625 |
-
SET link_visible = 'N'
|
1626 |
-
WHERE link_id IN {$hidem}
|
1627 |
-
";
|
1628 |
-
endif;
|
1629 |
-
|
1630 |
-
if (count($do_it['nuke']) > 0) :
|
1631 |
-
$nukem = "(".implode(', ', $do_it['nuke']).")";
|
1632 |
-
|
1633 |
-
// Make a list of the items syndicated from this feed...
|
1634 |
-
$post_ids = $wpdb->get_col("
|
1635 |
-
SELECT post_id FROM $wpdb->postmeta
|
1636 |
-
WHERE meta_key = 'syndication_feed_id'
|
1637 |
-
AND meta_value IN {$nukem}
|
1638 |
-
");
|
1639 |
-
|
1640 |
-
// ... and kill them all
|
1641 |
-
if (count($post_ids) > 0) :
|
1642 |
-
foreach ($post_ids as $post_id) :
|
1643 |
-
wp_delete_post($post_id);
|
1644 |
-
endforeach;
|
1645 |
-
endif;
|
1646 |
-
|
1647 |
-
$alter[] = "
|
1648 |
-
DELETE FROM $wpdb->links
|
1649 |
-
WHERE link_id IN {$nukem}
|
1650 |
-
";
|
1651 |
-
endif;
|
1652 |
-
|
1653 |
-
if (count($do_it['delete']) > 0) :
|
1654 |
-
$deletem = "(".implode(', ', $do_it['delete']).")";
|
1655 |
|
1656 |
-
|
1657 |
-
|
1658 |
-
|
1659 |
-
WHERE meta_key = 'syndication_feed_id'
|
1660 |
-
AND meta_value IN {$deletem}
|
1661 |
-
";
|
1662 |
-
|
1663 |
-
// ... and delete the links themselves.
|
1664 |
-
$alter[] = "
|
1665 |
-
DELETE FROM $wpdb->links
|
1666 |
-
WHERE link_id IN {$deletem}
|
1667 |
-
";
|
1668 |
-
endif;
|
1669 |
|
1670 |
-
|
1671 |
-
|
1672 |
-
|
1673 |
-
if (!$result):
|
1674 |
-
$errs[] = mysql_error();
|
1675 |
-
endif;
|
1676 |
-
endforeach;
|
1677 |
-
|
1678 |
-
if (count($alter) > 0) :
|
1679 |
-
echo "<div class=\"updated\">\n";
|
1680 |
-
if (count($errs) > 0) :
|
1681 |
-
echo "There were some problems processing your ";
|
1682 |
-
echo "unsubscribe request. [SQL: ".implode('; ', $errs)."]";
|
1683 |
-
else :
|
1684 |
-
echo "Your unsubscribe request(s) have been processed.";
|
1685 |
-
endif;
|
1686 |
-
echo "</div>\n";
|
1687 |
-
endif;
|
1688 |
|
1689 |
-
|
1690 |
-
|
1691 |
-
|
1692 |
-
|
1693 |
-
WHERE link_id IN (".implode(",",$link_ids).")
|
1694 |
-
");
|
1695 |
-
?>
|
1696 |
-
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
1697 |
-
<div class="wrap">
|
1698 |
-
<input type="hidden" name="action" value="Unsubscribe" />
|
1699 |
-
<input type="hidden" name="confirm" value="Delete" />
|
1700 |
-
|
1701 |
-
<h2>Unsubscribe from Syndicated Links:</h2>
|
1702 |
-
<?php foreach ($targets as $link) :
|
1703 |
-
$link_url = wp_specialchars($link->link_url, 1);
|
1704 |
-
$link_name = wp_specialchars($link->link_name, 1);
|
1705 |
-
$link_description = wp_specialchars($link->link_description, 'both');
|
1706 |
-
$link_rss = wp_specialchars($link->link_rss, 'both');
|
1707 |
-
?>
|
1708 |
-
<fieldset>
|
1709 |
-
<legend><?php echo $link_name; ?></legend>
|
1710 |
-
<table class="editform" width="100%" cellspacing="2" cellpadding="5">
|
1711 |
-
<tr><th scope="row" width="20%"><?php _e('Feed URI:') ?></th>
|
1712 |
-
<td width="80%"><a href="<?php echo $link_rss; ?>"><?php echo $link_rss; ?></a></td></tr>
|
1713 |
-
<tr><th scope="row" width="20%"><?php _e('Short description:') ?></th>
|
1714 |
-
<td width="80%"><?php echo $link_description; ?></span></td></tr>
|
1715 |
-
<tr><th width="20%" scope="row"><?php _e('Homepage:') ?></th>
|
1716 |
-
<td width="80%"><a href="<?php echo $link_url; ?>"><?php echo $link_url; ?></a></td></tr>
|
1717 |
-
<tr style="vertical-align:top"><th width="20%" scope="row">Subscription <?php _e('Options') ?>:</th>
|
1718 |
-
<td width="80%"><ul style="margin:0; padding: 0; list-style: none">
|
1719 |
-
<li><input type="radio" id="hide-<?php echo $link->link_id; ?>"
|
1720 |
-
name="link_action[<?php echo $link->link_id; ?>]" value="hide" />
|
1721 |
-
<label for="hide-<?php echo $link->link_id; ?>">Turn off the subscription for this
|
1722 |
-
syndicated link<br/><span style="font-size:smaller">(Keep the feed information
|
1723 |
-
and all the posts from this feed in the database, but don't syndicate any
|
1724 |
-
new posts from the feed.)</span></label></li>
|
1725 |
-
<li><input type="radio" id="nuke-<?php echo $link->link_id; ?>"
|
1726 |
-
name="link_action[<?php echo $link->link_id; ?>]" value="nuke" />
|
1727 |
-
<label for="nuke-<?php echo $link->link_id; ?>">Delete this syndicated link and all the
|
1728 |
-
posts that were syndicated from it</label></li>
|
1729 |
-
<li><input type="radio" id="delete-<?php echo $link->link_id; ?>"
|
1730 |
-
name="link_action[<?php echo $link->link_id; ?>]" value="delete" />
|
1731 |
-
<label for="delete-<?php echo $link->link_id; ?>">Delete this syndicated link, but
|
1732 |
-
<em>keep</em> posts that were syndicated from it (as if they were authored
|
1733 |
-
locally).</label></li>
|
1734 |
-
<li><input type="radio" id="nothing-<?php echo $link->link_id; ?>"
|
1735 |
-
name="link_action[<?php echo $link->link_id; ?>]" value="nothing" />
|
1736 |
-
<label for="nothing-<?php echo $link->link_id; ?>">Keep this feed as it is. I changed
|
1737 |
-
my mind.</label></li>
|
1738 |
-
</ul>
|
1739 |
-
</table>
|
1740 |
-
</fieldset>
|
1741 |
-
<?php endforeach; ?>
|
1742 |
-
|
1743 |
-
<div class="submit">
|
1744 |
-
<input class="delete" type="submit" name="submit" value="<?php _e('Unsubscribe from selected feeds »') ?>" />
|
1745 |
-
</div>
|
1746 |
-
</div>
|
1747 |
-
<?php
|
1748 |
-
return false; // Don't continue on to Syndicated Sites listing
|
1749 |
-
endif;
|
1750 |
-
}
|
1751 |
|
1752 |
################################################################################
|
1753 |
## fwp_hold_pings() and fwp_release_pings(): Outbound XML-RPC ping reform ####
|
@@ -2014,15 +628,18 @@ class FeedWordPress {
|
|
2014 |
} // function FeedWordPress::syndicate_link()
|
2015 |
|
2016 |
function on_unfamiliar ($what = 'author', $override = NULL) {
|
2017 |
-
$set = array(
|
2018 |
-
|
|
|
|
|
|
|
2019 |
if (is_string($override)) :
|
2020 |
$ret = strtolower($override);
|
2021 |
endif;
|
2022 |
|
2023 |
-
if (!is_numeric($override) and !in_array($ret, $set)) :
|
2024 |
$ret = get_option('feedwordpress_unfamiliar_'.$what);
|
2025 |
-
if (!is_numeric($ret) and !in_array($ret, $set)) :
|
2026 |
$ret = 'create';
|
2027 |
endif;
|
2028 |
endif;
|
@@ -2356,6 +973,9 @@ class SyndicatedPost {
|
|
2356 |
// In case you want to know the external permalink...
|
2357 |
$this->post['meta']['syndication_permalink'] = apply_filters('syndicated_item_link', $this->item['link']);
|
2358 |
|
|
|
|
|
|
|
2359 |
// Feed-by-feed options for author and category creation
|
2360 |
$this->post['named']['unfamiliar']['author'] = $this->feedmeta['unfamiliar author'];
|
2361 |
$this->post['named']['unfamiliar']['category'] = $this->feedmeta['unfamiliar category'];
|
@@ -2400,6 +1020,7 @@ class SyndicatedPost {
|
|
2400 |
if (is_array($this->feedmeta['tags'])) :
|
2401 |
$this->post['tags_input'] = array_merge($this->post['tags_input'], $this->feedmeta['tags']);
|
2402 |
endif;
|
|
|
2403 |
endif;
|
2404 |
} // SyndicatedPost::SyndicatedPost()
|
2405 |
|
@@ -2422,16 +1043,33 @@ class SyndicatedPost {
|
|
2422 |
FROM $wpdb->posts WHERE guid='$guid'
|
2423 |
");
|
2424 |
|
2425 |
-
preg_match('/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)/', $result->post_modified_gmt, $backref);
|
2426 |
-
$updated = gmmktime($backref[4], $backref[5], $backref[6], $backref[2], $backref[3], $backref[1]);
|
2427 |
if (!$result) :
|
2428 |
$this->_freshness = 2; // New content
|
2429 |
-
|
2430 |
-
$
|
2431 |
-
$
|
2432 |
-
|
2433 |
-
|
2434 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2435 |
endif;
|
2436 |
endif;
|
2437 |
return $this->_freshness;
|
@@ -2469,11 +1107,15 @@ class SyndicatedPost {
|
|
2469 |
|
2470 |
if (!$this->filtered() and $freshness > 0) :
|
2471 |
# -- Look up, or create, numeric ID for categories
|
2472 |
-
$
|
2473 |
$this->post['named']['category'],
|
2474 |
-
FeedWordPress::on_unfamiliar('category', $this->post['named']['unfamiliar']['category'])
|
|
|
2475 |
);
|
2476 |
-
|
|
|
|
|
|
|
2477 |
if (is_null($this->post['post_category'])) :
|
2478 |
// filter mode on, no matching categories; drop the post
|
2479 |
$this->post = NULL;
|
@@ -2542,11 +1184,24 @@ class SyndicatedPost {
|
|
2542 |
|
2543 |
if ($this->use_api('wp_insert_post')) :
|
2544 |
$dbpost['post_pingback'] = false; // Tell WP 2.1 and 2.2 not to process for pingbacks
|
2545 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2546 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2547 |
// This should never happen.
|
2548 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
2549 |
-
FeedWordPress::critical_bug('SyndicatedPost (_wp_id problem)', array($dbpost, $this), __LINE__);
|
2550 |
endif;
|
2551 |
|
2552 |
// Unfortunately, as of WordPress 2.3, wp_insert_post()
|
@@ -2591,7 +1246,7 @@ class SyndicatedPost {
|
|
2591 |
|
2592 |
// This should never happen.
|
2593 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
2594 |
-
FeedWordPress::critical_bug('SyndicatedPost
|
2595 |
endif;
|
2596 |
|
2597 |
// WordPress 1.5.x - 2.0.x
|
@@ -2622,11 +1277,24 @@ class SyndicatedPost {
|
|
2622 |
|
2623 |
if ($this->use_api('wp_insert_post')) :
|
2624 |
$dbpost['post_pingback'] = false; // Tell WP 2.1 and 2.2 not to process for pingbacks
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2625 |
$this->_wp_id = wp_insert_post($dbpost);
|
2626 |
|
|
|
|
|
|
|
|
|
2627 |
// This should never happen.
|
2628 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
2629 |
-
FeedWordPress::critical_bug('SyndicatedPost
|
2630 |
endif;
|
2631 |
|
2632 |
// Unfortunately, as of WordPress 2.3, wp_insert_post()
|
@@ -2661,7 +1329,7 @@ class SyndicatedPost {
|
|
2661 |
wp_set_post_cats('1', $this->wp_id(), $this->post['post_category']);
|
2662 |
// This should never happen.
|
2663 |
else :
|
2664 |
-
FeedWordPress::critical_bug('SyndicatedPost
|
2665 |
endif;
|
2666 |
|
2667 |
// Since we are not going through official channels, we need to
|
@@ -2674,6 +1342,61 @@ class SyndicatedPost {
|
|
2674 |
endif;
|
2675 |
} /* SyndicatedPost::update_existing() */
|
2676 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2677 |
// SyndicatedPost::add_rss_meta: adds interesting meta-data to each entry
|
2678 |
// using the space for custom keys. The set of keys and values to add is
|
2679 |
// specified by the keys and values of $post['meta']. This is used to
|
@@ -2852,7 +1575,7 @@ class SyndicatedPost {
|
|
2852 |
} // function SyndicatedPost::author_id ()
|
2853 |
|
2854 |
// look up (and create) category ids from a list of categories
|
2855 |
-
function category_ids ($cats, $unfamiliar_category = 'create') {
|
2856 |
global $wpdb;
|
2857 |
|
2858 |
// We need to normalize whitespace because (1) trailing
|
@@ -2863,6 +1586,8 @@ class SyndicatedPost {
|
|
2863 |
// distinction between 'Computers' and 'Computers '
|
2864 |
$cats = array_map('trim', $cats);
|
2865 |
|
|
|
|
|
2866 |
$cat_ids = array ();
|
2867 |
foreach ($cats as $cat_name) :
|
2868 |
if (preg_match('/^{#([0-9]+)}$/', $cat_name, $backref)) :
|
@@ -2892,6 +1617,8 @@ class SyndicatedPost {
|
|
2892 |
foreach ($results AS $term) :
|
2893 |
$cat_ids[] = (int) $term->term_id;
|
2894 |
endforeach;
|
|
|
|
|
2895 |
elseif ('create'===$unfamiliar_category) :
|
2896 |
$term = wp_insert_term($cat_name, 'category');
|
2897 |
$cat_ids[] = $term['term_id'];
|
@@ -2937,7 +1664,12 @@ class SyndicatedPost {
|
|
2937 |
else :
|
2938 |
$cat_ids = array_unique($cat_ids);
|
2939 |
endif;
|
2940 |
-
|
|
|
|
|
|
|
|
|
|
|
2941 |
} // function SyndicatedPost::category_ids ()
|
2942 |
|
2943 |
function use_api ($tag) {
|
@@ -2991,12 +1723,16 @@ class SyndicatedPost {
|
|
2991 |
|
2992 |
# If everything failed, then default to the current time.
|
2993 |
if (is_null($epoch)) :
|
2994 |
-
|
|
|
|
|
|
|
|
|
2995 |
endif;
|
2996 |
|
2997 |
return $epoch;
|
2998 |
}
|
2999 |
-
function updated ($fallback = true) {
|
3000 |
$epoch = null;
|
3001 |
|
3002 |
# As far as I know, only dcterms and Atom have reliable ways to
|
@@ -3011,17 +1747,25 @@ class SyndicatedPost {
|
|
3011 |
elseif (isset($this->item['updated'])): // Atom 1.0
|
3012 |
$epoch = @parse_w3cdtf($this->item['updated']);
|
3013 |
elseif ($fallback) : // Fall back to issued / dc:date
|
3014 |
-
$epoch = $this->published(/*fallback=*/ false);
|
3015 |
endif;
|
3016 |
|
3017 |
# If everything failed, then default to the current time.
|
3018 |
if (is_null($epoch)) :
|
3019 |
-
|
|
|
|
|
|
|
|
|
3020 |
endif;
|
3021 |
|
3022 |
return $epoch;
|
3023 |
}
|
3024 |
|
|
|
|
|
|
|
|
|
3025 |
function guid () {
|
3026 |
$guid = null;
|
3027 |
if (isset($this->item['id'])): // Atom 0.3 / 1.0
|
@@ -3911,4 +2655,4 @@ function parse_email_with_realname ($email) {
|
|
3911 |
endif;
|
3912 |
return $ret;
|
3913 |
}
|
3914 |
-
|
3 |
Plugin Name: FeedWordPress
|
4 |
Plugin URI: http://projects.radgeek.com/feedwordpress
|
5 |
Description: simple and flexible Atom/RSS syndication for WordPress
|
6 |
+
Version: 2008.1030
|
7 |
Author: Charles Johnson
|
8 |
Author URI: http://radgeek.com/
|
9 |
License: GPL
|
10 |
+
Last modified: 2008-10-30 4:14pm PDT
|
11 |
*/
|
12 |
|
13 |
# This uses code derived from:
|
27 |
|
28 |
# -- Don't change these unless you know what you're doing...
|
29 |
|
30 |
+
define ('FEEDWORDPRESS_VERSION', '2008.1030');
|
31 |
define ('FEEDWORDPRESS_AUTHOR_CONTACT', 'http://radgeek.com/contact');
|
32 |
define ('DEFAULT_SYNDICATION_CATEGORY', 'Contributors');
|
33 |
|
44 |
define ('FWP_SCHEMA_21', 4772); // Database schema # for WP 2.1
|
45 |
define ('FWP_SCHEMA_23', 5495); // Database schema # for WP 2.3
|
46 |
define ('FWP_SCHEMA_25', 7558); // Database schema # for WP 2.5
|
47 |
+
define ('FWP_SCHEMA_26', 8201); // Database schema # for WP 2.6
|
48 |
|
49 |
if (FEEDWORDPRESS_DEBUG) :
|
50 |
// Help us to pick out errors, if any.
|
84 |
endif;
|
85 |
endif;
|
86 |
|
87 |
+
require_once(dirname(__FILE__) . '/compatability.php'); // LEGACY API: Replicate or mock up functions for legacy support purposes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
// Magic quotes are just about the stupidest thing ever.
|
90 |
if (is_array($_POST)) :
|
104 |
$fwp_path = 'feedwordpress';
|
105 |
endif;
|
106 |
|
107 |
+
// If this is a FeedWordPress admin page, queue up scripts for AJAX functions that FWP uses
|
108 |
+
// If it is a display page or a non-FeedWordPress admin page, don't.
|
109 |
+
if (is_admin() and isset($_REQUEST['page']) and preg_match("|^{$fwp_path}/|", $_REQUEST['page'])) :
|
110 |
+
if (function_exists('wp_enqueue_script')) :
|
111 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
112 |
+
wp_enqueue_script('post'); // for magic tag and category boxes
|
113 |
+
wp_enqueue_script('thickbox'); // for fold-up boxes
|
114 |
+
wp_enqueue_script('admin-forms'); // for checkbox selection
|
115 |
+
else :
|
116 |
+
wp_enqueue_script( 'ajaxcat' ); // Provides the handy-dandy new category text box
|
117 |
+
endif;
|
118 |
+
endif;
|
119 |
+
if (function_exists('wp_enqueue_style')) :
|
120 |
+
if (fwp_test_wp_version(FWP_SCHEMA_25)) :
|
121 |
+
wp_enqueue_style('dashboard');
|
122 |
+
endif;
|
123 |
+
endif;
|
124 |
+
if (function_exists('wp_admin_css')) :
|
125 |
+
if (fwp_test_wp_version(FWP_SCHEMA_25)) :
|
126 |
+
wp_admin_css('css/dashboard');
|
127 |
+
endif;
|
128 |
+
endif;
|
129 |
+
endif;
|
130 |
+
|
131 |
if (!FeedWordPress::needs_upgrade()) : // only work if the conditions are safe!
|
132 |
|
133 |
# Syndicated items are generally received in output-ready (X)HTML and
|
146 |
add_filter('the_content', 'feedwordpress_preserve_syndicated_content', -10000);
|
147 |
add_filter('the_content', 'feedwordpress_restore_syndicated_content', 10000);
|
148 |
|
149 |
+
add_action('atom_entry', 'feedwordpress_item_feed_data');
|
150 |
+
|
151 |
# Filter in original permalinks if the user wants that
|
152 |
add_filter('post_link', 'syndication_permalink', 1);
|
153 |
|
243 |
: implode(' and ', $mesg)));
|
244 |
}
|
245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
################################################################################
|
247 |
## TEMPLATE API: functions to make your templates syndication-aware ############
|
248 |
################################################################################
|
297 |
function feedwordpress_preserve_syndicated_content ($text) {
|
298 |
global $feedwordpress_the_syndicated_content;
|
299 |
|
300 |
+
if ( is_syndicated() and get_option('feedwordpress_formatting_filters') != 'yes' ) :
|
301 |
$feedwordpress_the_syndicated_content = $text;
|
302 |
else :
|
303 |
$feedwordpress_the_syndicated_content = NULL;
|
315 |
return $text;
|
316 |
}
|
317 |
|
318 |
+
function feedwordpress_item_feed_data () {
|
319 |
+
// In a post context....
|
320 |
+
if (is_syndicated()) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
321 |
?>
|
322 |
+
<source>
|
323 |
+
<title><?php the_syndication_source(); ?></title>
|
324 |
+
<link rel="alternate" type="text/html" href="<?php the_syndication_source_link(); ?>" />
|
325 |
+
<link rel="self" href="<?php the_syndication_feed(); ?>" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
<?php
|
327 |
+
$id = get_feed_meta('feed/id');
|
328 |
+
if (strlen($id) > 0) :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
329 |
?>
|
330 |
+
<id><?php print $id; ?></id>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
<?php
|
332 |
endif;
|
333 |
+
$updated = get_feed_meta('feed/updated');
|
334 |
+
if (strlen($updated) > 0) : ?>
|
335 |
+
<updated><?php print $updated; ?></updated>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
<?php
|
337 |
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
?>
|
339 |
+
</source>
|
340 |
<?php
|
341 |
endif;
|
342 |
}
|
343 |
|
344 |
+
function syndication_permalink ($permalink = '') {
|
345 |
+
if (get_option('feedwordpress_munge_permalink') != 'no'):
|
346 |
+
$uri = get_syndication_permalink();
|
347 |
+
return ((strlen($uri) > 0) ? $uri : $permalink);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
348 |
else:
|
349 |
+
return $permalink;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
endif;
|
351 |
+
} // function syndication_permalink ()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
|
353 |
+
################################################################################
|
354 |
+
## ADMIN MENU ADD-ONS: register Dashboard management pages #####################
|
355 |
+
################################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
356 |
|
357 |
+
function fwp_add_pages () {
|
358 |
+
global $fwp_capability;
|
359 |
+
global $fwp_path;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
360 |
|
361 |
+
add_menu_page('Syndicated Sites', 'Syndication', $fwp_capability['manage_links'], $fwp_path.'/syndication.php');
|
362 |
+
add_submenu_page($fwp_path.'/syndication.php', 'Syndication Options', 'Options', $fwp_capability['manage_options'], $fwp_path.'/syndication-options.php');
|
363 |
+
add_options_page('Syndication Options', 'Syndication', $fwp_capability['manage_options'], $fwp_path.'/syndication-options.php');
|
364 |
+
} // function fwp_add_pages () */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
|
366 |
################################################################################
|
367 |
## fwp_hold_pings() and fwp_release_pings(): Outbound XML-RPC ping reform ####
|
628 |
} // function FeedWordPress::syndicate_link()
|
629 |
|
630 |
function on_unfamiliar ($what = 'author', $override = NULL) {
|
631 |
+
$set = array(
|
632 |
+
'author' => array('create', 'default', 'filter'),
|
633 |
+
'category' => array('create', 'tag', 'default', 'filter'),
|
634 |
+
);
|
635 |
+
|
636 |
if (is_string($override)) :
|
637 |
$ret = strtolower($override);
|
638 |
endif;
|
639 |
|
640 |
+
if (!is_numeric($override) and !in_array($ret, $set[$what])) :
|
641 |
$ret = get_option('feedwordpress_unfamiliar_'.$what);
|
642 |
+
if (!is_numeric($ret) and !in_array($ret, $set[$what])) :
|
643 |
$ret = 'create';
|
644 |
endif;
|
645 |
endif;
|
973 |
// In case you want to know the external permalink...
|
974 |
$this->post['meta']['syndication_permalink'] = apply_filters('syndicated_item_link', $this->item['link']);
|
975 |
|
976 |
+
// Store a hash of the post content for checking whether something needs to be updated
|
977 |
+
$this->post['meta']['syndication_item_hash'] = $this->update_hash();
|
978 |
+
|
979 |
// Feed-by-feed options for author and category creation
|
980 |
$this->post['named']['unfamiliar']['author'] = $this->feedmeta['unfamiliar author'];
|
981 |
$this->post['named']['unfamiliar']['category'] = $this->feedmeta['unfamiliar category'];
|
1020 |
if (is_array($this->feedmeta['tags'])) :
|
1021 |
$this->post['tags_input'] = array_merge($this->post['tags_input'], $this->feedmeta['tags']);
|
1022 |
endif;
|
1023 |
+
|
1024 |
endif;
|
1025 |
} // SyndicatedPost::SyndicatedPost()
|
1026 |
|
1043 |
FROM $wpdb->posts WHERE guid='$guid'
|
1044 |
");
|
1045 |
|
|
|
|
|
1046 |
if (!$result) :
|
1047 |
$this->_freshness = 2; // New content
|
1048 |
+
else:
|
1049 |
+
$stored_update_hashes = get_post_custom_values('syndication_item_hash', $result->id);
|
1050 |
+
if (count($stored_update_hashes) > 0) :
|
1051 |
+
$stored_update_hash = $stored_update_hashes[0];
|
1052 |
+
$update_hash_changed = ($stored_update_hash != $this->update_hash());
|
1053 |
+
else :
|
1054 |
+
$update_hash_changed = false;
|
1055 |
+
endif;
|
1056 |
+
|
1057 |
+
preg_match('/([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)/', $result->post_modified_gmt, $backref);
|
1058 |
+
|
1059 |
+
$last_rev_ts = gmmktime($backref[4], $backref[5], $backref[6], $backref[2], $backref[3], $backref[1]);
|
1060 |
+
$updated_ts = $this->updated(/*fallback=*/ true, /*default=*/ NULL);
|
1061 |
+
$updated = ((
|
1062 |
+
!is_null($updated_ts)
|
1063 |
+
and ($updated_ts > $last_rev_ts)
|
1064 |
+
) or $update_hash_changed);
|
1065 |
+
|
1066 |
+
if ($updated) :
|
1067 |
+
$this->_freshness = 1; // Updated content
|
1068 |
+
$this->_wp_id = $result->id;
|
1069 |
+
else :
|
1070 |
+
$this->_freshness = 0; // Same old, same old
|
1071 |
+
$this->_wp_id = $result->id;
|
1072 |
+
endif;
|
1073 |
endif;
|
1074 |
endif;
|
1075 |
return $this->_freshness;
|
1107 |
|
1108 |
if (!$this->filtered() and $freshness > 0) :
|
1109 |
# -- Look up, or create, numeric ID for categories
|
1110 |
+
list($pcats, $ptags) = $this->category_ids (
|
1111 |
$this->post['named']['category'],
|
1112 |
+
FeedWordPress::on_unfamiliar('category', $this->post['named']['unfamiliar']['category']),
|
1113 |
+
/*tags_too=*/ true
|
1114 |
);
|
1115 |
+
|
1116 |
+
$this->post['post_category'] = $pcats;
|
1117 |
+
$this->post['tags_input'] = array_merge($this->post['tags_input'], $ptags);
|
1118 |
+
|
1119 |
if (is_null($this->post['post_category'])) :
|
1120 |
// filter mode on, no matching categories; drop the post
|
1121 |
$this->post = NULL;
|
1184 |
|
1185 |
if ($this->use_api('wp_insert_post')) :
|
1186 |
$dbpost['post_pingback'] = false; // Tell WP 2.1 and 2.2 not to process for pingbacks
|
1187 |
+
|
1188 |
+
// This is a ridiculous fucking kludge necessitated by WordPress 2.6 munging authorship meta-data
|
1189 |
+
add_action('_wp_put_post_revision', array($this, 'fix_revision_meta'));
|
1190 |
+
|
1191 |
+
// Kludge to prevent kses filters from stripping the
|
1192 |
+
// content of posts when updating without a logged in
|
1193 |
+
// user who has `unfiltered_html` capability.
|
1194 |
+
add_filter('content_save_pre', array($this, 'avoid_kses_munge'), 11);
|
1195 |
|
1196 |
+
$this->_wp_id = wp_insert_post($dbpost);
|
1197 |
+
|
1198 |
+
// Turn off ridiculous fucking kludges #1 and #2
|
1199 |
+
remove_action('_wp_put_post_revision', array($this, 'fix_revision_meta'));
|
1200 |
+
remove_filter('content_save_pre', array($this, 'avoid_kses_munge'), 11);
|
1201 |
+
|
1202 |
// This should never happen.
|
1203 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
1204 |
+
FeedWordPress::critical_bug('SyndicatedPost (_wp_id problem)', array("dbpost" => $dbpost, "this" => $this), __LINE__);
|
1205 |
endif;
|
1206 |
|
1207 |
// Unfortunately, as of WordPress 2.3, wp_insert_post()
|
1246 |
|
1247 |
// This should never happen.
|
1248 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
1249 |
+
FeedWordPress::critical_bug('SyndicatedPost (_wp_id problem)', array("dbpost" => $dbpost, "this" => $this), __LINE__);
|
1250 |
endif;
|
1251 |
|
1252 |
// WordPress 1.5.x - 2.0.x
|
1277 |
|
1278 |
if ($this->use_api('wp_insert_post')) :
|
1279 |
$dbpost['post_pingback'] = false; // Tell WP 2.1 and 2.2 not to process for pingbacks
|
1280 |
+
|
1281 |
+
// This is a ridiculous fucking kludge necessitated by WordPress 2.6 munging authorship meta-data
|
1282 |
+
add_action('_wp_put_post_revision', array($this, 'fix_revision_meta'));
|
1283 |
+
|
1284 |
+
// Kludge to prevent kses filters from stripping the
|
1285 |
+
// content of posts when updating without a logged in
|
1286 |
+
// user who has `unfiltered_html` capability.
|
1287 |
+
add_filter('content_save_pre', array($this, 'avoid_kses_munge'), 11);
|
1288 |
+
|
1289 |
$this->_wp_id = wp_insert_post($dbpost);
|
1290 |
|
1291 |
+
// Turn off ridiculous fucking kludges #1 and #2
|
1292 |
+
remove_action('_wp_put_post_revision', array($this, 'fix_revision_meta'));
|
1293 |
+
remove_filter('content_save_pre', array($this, 'avoid_kses_munge'), 11);
|
1294 |
+
|
1295 |
// This should never happen.
|
1296 |
if (!is_numeric($this->_wp_id) or ($this->_wp_id == 0)) :
|
1297 |
+
FeedWordPress::critical_bug('SyndicatedPost (_wp_id problem)', array("dbpost" => $dbpost, "this" => $this), __LINE__);
|
1298 |
endif;
|
1299 |
|
1300 |
// Unfortunately, as of WordPress 2.3, wp_insert_post()
|
1329 |
wp_set_post_cats('1', $this->wp_id(), $this->post['post_category']);
|
1330 |
// This should never happen.
|
1331 |
else :
|
1332 |
+
FeedWordPress::critical_bug('SyndicatedPost (_wp_id problem)', array("dbpost" => $dbpost, "this" => $this), __LINE__);
|
1333 |
endif;
|
1334 |
|
1335 |
// Since we are not going through official channels, we need to
|
1342 |
endif;
|
1343 |
} /* SyndicatedPost::update_existing() */
|
1344 |
|
1345 |
+
/**
|
1346 |
+
* SyndicatedPost::fix_revision_meta() - Fixes the way WP 2.6+ fucks up
|
1347 |
+
* meta-data (authorship, etc.) when storing revisions of an updated
|
1348 |
+
* syndicated post.
|
1349 |
+
*
|
1350 |
+
* In their infinite wisdom, the WordPress coders have made it completely
|
1351 |
+
* impossible for a plugin that uses wp_insert_post() to set certain
|
1352 |
+
* meta-data (such as the author) when you store an old revision of an
|
1353 |
+
* updated post. Instead, it uses the WordPress defaults (= currently
|
1354 |
+
* active user ID if the process is running with a user logged in, or
|
1355 |
+
* = #0 if there is no user logged in). This results in bogus authorship
|
1356 |
+
* data for revisions that are syndicated from off the feed, unless we
|
1357 |
+
* use a ridiculous kludge like this to end-run the munging of meta-data
|
1358 |
+
* by _wp_put_post_revision.
|
1359 |
+
*
|
1360 |
+
* @param int $revision_id The revision ID to fix up meta-data
|
1361 |
+
*/
|
1362 |
+
function fix_revision_meta ($revision_id) {
|
1363 |
+
global $wpdb;
|
1364 |
+
|
1365 |
+
$post_author = (int) $this->post['post_author'];
|
1366 |
+
|
1367 |
+
$revision_id = (int) $revision_id;
|
1368 |
+
$wpdb->query("
|
1369 |
+
UPDATE $wpdb->posts
|
1370 |
+
SET post_author={$this->post['post_author']}
|
1371 |
+
WHERE post_type = 'revision' AND ID='$revision_id'
|
1372 |
+
");
|
1373 |
+
} /* SyndicatedPost::fix_revision_meta () */
|
1374 |
+
|
1375 |
+
/**
|
1376 |
+
* SyndicatedPost::avoid_kses_munge() -- If FeedWordPress is processing
|
1377 |
+
* an automatic update, that generally means that wp_insert_post() is
|
1378 |
+
* being called under the user credentials of whoever is viewing the
|
1379 |
+
* blog at the time -- usually meaning no user at all. But if WordPress
|
1380 |
+
* gets a wp_insert_post() when current_user_can('unfiltered_html') is
|
1381 |
+
* false, it will run the content of the post through a kses function
|
1382 |
+
* that strips out lots of HTML tags -- notably <object> and some others.
|
1383 |
+
* This causes problems for syndicating (for example) feeds that contain
|
1384 |
+
* YouTube videos. It also produces an unexpected asymmetry between
|
1385 |
+
* automatically-initiated updates and updates initiated manually from
|
1386 |
+
* the WordPress Dashboard (which are usually initiated under the
|
1387 |
+
* credentials of a logged-in admin, and so don't get run through the
|
1388 |
+
* kses function). So, to avoid the whole mess, what we do here is
|
1389 |
+
* just forcibly disable the kses munging for a single syndicated post,
|
1390 |
+
* by restoring the contents of the `post_content` field.
|
1391 |
+
*
|
1392 |
+
* @param string $content The content of the post, after other filters have gotten to it
|
1393 |
+
* @return string The original content of the post, before other filters had a chance to munge it.
|
1394 |
+
*/
|
1395 |
+
function avoid_kses_munge ($content) {
|
1396 |
+
global $wpdb;
|
1397 |
+
return $wpdb->escape($this->post['post_content']);
|
1398 |
+
}
|
1399 |
+
|
1400 |
// SyndicatedPost::add_rss_meta: adds interesting meta-data to each entry
|
1401 |
// using the space for custom keys. The set of keys and values to add is
|
1402 |
// specified by the keys and values of $post['meta']. This is used to
|
1575 |
} // function SyndicatedPost::author_id ()
|
1576 |
|
1577 |
// look up (and create) category ids from a list of categories
|
1578 |
+
function category_ids ($cats, $unfamiliar_category = 'create', $tags_too = false) {
|
1579 |
global $wpdb;
|
1580 |
|
1581 |
// We need to normalize whitespace because (1) trailing
|
1586 |
// distinction between 'Computers' and 'Computers '
|
1587 |
$cats = array_map('trim', $cats);
|
1588 |
|
1589 |
+
$tags = array();
|
1590 |
+
|
1591 |
$cat_ids = array ();
|
1592 |
foreach ($cats as $cat_name) :
|
1593 |
if (preg_match('/^{#([0-9]+)}$/', $cat_name, $backref)) :
|
1617 |
foreach ($results AS $term) :
|
1618 |
$cat_ids[] = (int) $term->term_id;
|
1619 |
endforeach;
|
1620 |
+
elseif ('tag'==$unfamiliar_category) :
|
1621 |
+
$tags[] = $cat_name;
|
1622 |
elseif ('create'===$unfamiliar_category) :
|
1623 |
$term = wp_insert_term($cat_name, 'category');
|
1624 |
$cat_ids[] = $term['term_id'];
|
1664 |
else :
|
1665 |
$cat_ids = array_unique($cat_ids);
|
1666 |
endif;
|
1667 |
+
|
1668 |
+
if ($tags_too) : $ret = array($cat_ids, $tags);
|
1669 |
+
else : $ret = $cat_ids;
|
1670 |
+
endif;
|
1671 |
+
|
1672 |
+
return $ret;
|
1673 |
} // function SyndicatedPost::category_ids ()
|
1674 |
|
1675 |
function use_api ($tag) {
|
1723 |
|
1724 |
# If everything failed, then default to the current time.
|
1725 |
if (is_null($epoch)) :
|
1726 |
+
if (-1 == $default) :
|
1727 |
+
$epoch = time();
|
1728 |
+
else :
|
1729 |
+
$epoch = $default;
|
1730 |
+
endif;
|
1731 |
endif;
|
1732 |
|
1733 |
return $epoch;
|
1734 |
}
|
1735 |
+
function updated ($fallback = true, $default = -1) {
|
1736 |
$epoch = null;
|
1737 |
|
1738 |
# As far as I know, only dcterms and Atom have reliable ways to
|
1747 |
elseif (isset($this->item['updated'])): // Atom 1.0
|
1748 |
$epoch = @parse_w3cdtf($this->item['updated']);
|
1749 |
elseif ($fallback) : // Fall back to issued / dc:date
|
1750 |
+
$epoch = $this->published(/*fallback=*/ false, /*default=*/ $default);
|
1751 |
endif;
|
1752 |
|
1753 |
# If everything failed, then default to the current time.
|
1754 |
if (is_null($epoch)) :
|
1755 |
+
if (-1 == $default) :
|
1756 |
+
$epoch = time();
|
1757 |
+
else :
|
1758 |
+
$epoch = $default;
|
1759 |
+
endif;
|
1760 |
endif;
|
1761 |
|
1762 |
return $epoch;
|
1763 |
}
|
1764 |
|
1765 |
+
function update_hash () {
|
1766 |
+
return md5(serialize($this->item));
|
1767 |
+
}
|
1768 |
+
|
1769 |
function guid () {
|
1770 |
$guid = null;
|
1771 |
if (isset($this->item['id'])): // Atom 0.3 / 1.0
|
2655 |
endif;
|
2656 |
return $ret;
|
2657 |
}
|
2658 |
+
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: Charles Johnson
|
|
3 |
Donate link: http://projects.radgeek.com/feedwordpress/
|
4 |
Tags: syndication, aggregation, feed, atom, rss
|
5 |
Requires at least: 1.5
|
6 |
-
Tested up to: 2.
|
7 |
-
Stable tag:
|
8 |
|
9 |
FeedWordPress syndicates content from feeds you choose into your WordPress weblog.
|
10 |
|
@@ -23,13 +23,14 @@ to use at [Feminist Blogs](http://feministblogs.org/).
|
|
23 |
|
24 |
FeedWordPress is designed with flexibility, ease of use, and ease of
|
25 |
configuration in mind. You'll need a working installation of WordPress or
|
26 |
-
WordPress MU (versions [2.5][], [2.3][], [2.2][], [2.1][], [2.0][] or
|
27 |
-
and also FTP or SFTP access to your web host. The ability to create
|
28 |
-
your web host is helpful but not absolutely necessary. You *don't*
|
29 |
-
any plain-text configuration files and you *don't* need shell
|
30 |
-
host to make it work. (Although, I should point out, web
|
31 |
-
offer shell access are *bad web hosts*.)
|
32 |
-
|
|
|
33 |
[2.5]: http://codex.wordpress.org/Version_2.5
|
34 |
[2.3]: http://codex.wordpress.org/Version_2.3
|
35 |
[2.2]: http://codex.wordpress.org/Version_2.2
|
@@ -39,11 +40,11 @@ offer shell access are *bad web hosts*.)
|
|
39 |
|
40 |
== Installation ==
|
41 |
|
42 |
-
To use version
|
43 |
|
44 |
-
* an installed and configured copy of WordPress version 2.
|
45 |
-
2.1.x, 2.0.x, or 1.5.x. (FeedWordPress will also work with
|
46 |
-
equivalent versions of WordPress MU.)
|
47 |
|
48 |
* FTP or SFTP access to your web host
|
49 |
|
@@ -79,7 +80,7 @@ To use version 0.993 of FeedWordPress, you will need:
|
|
79 |
|
80 |
= Upgrades =
|
81 |
|
82 |
-
To *upgrade* an existing installation of FeedWordPress to version
|
83 |
|
84 |
1. Download the FeedWordPress archive in zip or gzipped tar format and
|
85 |
extract the files on your computer.
|
3 |
Donate link: http://projects.radgeek.com/feedwordpress/
|
4 |
Tags: syndication, aggregation, feed, atom, rss
|
5 |
Requires at least: 1.5
|
6 |
+
Tested up to: 2.6.3
|
7 |
+
Stable tag: 2008.1030
|
8 |
|
9 |
FeedWordPress syndicates content from feeds you choose into your WordPress weblog.
|
10 |
|
23 |
|
24 |
FeedWordPress is designed with flexibility, ease of use, and ease of
|
25 |
configuration in mind. You'll need a working installation of WordPress or
|
26 |
+
WordPress MU (versions [2.6][], [2.5][], [2.3][], [2.2][], [2.1][], [2.0][] or
|
27 |
+
[1.5][]), and also FTP or SFTP access to your web host. The ability to create
|
28 |
+
cron jobs on your web host is helpful but not absolutely necessary. You *don't*
|
29 |
+
need to tweak any plain-text configuration files and you *don't* need shell
|
30 |
+
access to your web host to make it work. (Although, I should point out, web
|
31 |
+
hosts that *don't* offer shell access are *bad web hosts*.)
|
32 |
+
|
33 |
+
[2.6]: http://codex.wordpress.org/Version_2.6
|
34 |
[2.5]: http://codex.wordpress.org/Version_2.5
|
35 |
[2.3]: http://codex.wordpress.org/Version_2.3
|
36 |
[2.2]: http://codex.wordpress.org/Version_2.2
|
40 |
|
41 |
== Installation ==
|
42 |
|
43 |
+
To use version 2008.1030 of FeedWordPress, you will need:
|
44 |
|
45 |
+
* an installed and configured copy of WordPress version 2.6.x, 2.5.x,
|
46 |
+
2.3.x, 2.2.x, 2.1.x, 2.0.x, or 1.5.x. (FeedWordPress will also work with
|
47 |
+
the equivalent versions of WordPress MU.)
|
48 |
|
49 |
* FTP or SFTP access to your web host
|
50 |
|
80 |
|
81 |
= Upgrades =
|
82 |
|
83 |
+
To *upgrade* an existing installation of FeedWordPress to version 2008.1030:
|
84 |
|
85 |
1. Download the FeedWordPress archive in zip or gzipped tar format and
|
86 |
extract the files on your computer.
|
syndication-options.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
function fwp_syndication_options_page () {
|
3 |
global $wpdb, $wp_db_version;
|
4 |
|
@@ -15,6 +17,7 @@ function fwp_syndication_options_page () {
|
|
15 |
else:
|
16 |
update_option('feedwordpress_cat_id', $_REQUEST['syndication_category']);
|
17 |
update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']);
|
|
|
18 |
update_option('feedwordpress_update_logging', $_REQUEST['update_logging']);
|
19 |
|
20 |
if ('newuser'==$_REQUEST['unfamiliar_author']) :
|
@@ -116,6 +119,7 @@ function fwp_syndication_options_page () {
|
|
116 |
|
117 |
$cat_id = FeedWordPress::link_category_id();
|
118 |
$munge_permalink = get_option('feedwordpress_munge_permalink');
|
|
|
119 |
$update_logging = get_option('feedwordpress_update_logging');
|
120 |
|
121 |
$automatic_updates = get_option('feedwordpress_automatic_updates');
|
@@ -139,7 +143,7 @@ function fwp_syndication_options_page () {
|
|
139 |
if (is_string($ua) and array_key_exists($ua, $unfamiliar_author)) :
|
140 |
$unfamiliar_author[$ua] = ' checked="checked"';
|
141 |
endif;
|
142 |
-
$unfamiliar_category = array ('create'=>'','default'=>'','filter'=>'');
|
143 |
$uc = FeedWordPress::on_unfamiliar('category');
|
144 |
if (is_string($uc) and array_key_exists($uc, $unfamiliar_category)) :
|
145 |
$unfamiliar_category[$uc] = ' checked="checked"';
|
@@ -250,6 +254,17 @@ function fwp_syndication_options_page () {
|
|
250 |
<option value="yes"<?php echo ($munge_permalink=='yes')?' selected="selected"':''; ?>>original website</option>
|
251 |
<option value="no"<?php echo ($munge_permalink=='no')?' selected="selected"':''; ?>>this website</option>
|
252 |
</select></td></tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
</table>
|
254 |
<?php
|
255 |
fwp_option_box_closer();
|
@@ -260,10 +275,12 @@ function fwp_syndication_options_page () {
|
|
260 |
?>
|
261 |
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
262 |
<tr style="vertical-align: top"><th width="27%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
|
263 |
-
<td><
|
264 |
-
<
|
265 |
-
<li><label><input type="radio" name="unfamiliar_category" value="
|
266 |
-
<li><label><input type="radio" name="unfamiliar_category" value="
|
|
|
|
|
267 |
</ul></td></tr>
|
268 |
</table>
|
269 |
<?php
|
@@ -349,4 +366,4 @@ endif;
|
|
349 |
}
|
350 |
|
351 |
fwp_syndication_options_page();
|
352 |
-
|
1 |
<?php
|
2 |
+
require_once(dirname(__FILE__) . '/admin-ui.php');
|
3 |
+
|
4 |
function fwp_syndication_options_page () {
|
5 |
global $wpdb, $wp_db_version;
|
6 |
|
17 |
else:
|
18 |
update_option('feedwordpress_cat_id', $_REQUEST['syndication_category']);
|
19 |
update_option('feedwordpress_munge_permalink', $_REQUEST['munge_permalink']);
|
20 |
+
update_option('feedwordpress_formatting_filters', $_REQUEST['formatting_filters']);
|
21 |
update_option('feedwordpress_update_logging', $_REQUEST['update_logging']);
|
22 |
|
23 |
if ('newuser'==$_REQUEST['unfamiliar_author']) :
|
119 |
|
120 |
$cat_id = FeedWordPress::link_category_id();
|
121 |
$munge_permalink = get_option('feedwordpress_munge_permalink');
|
122 |
+
$formatting_filters = get_option('feedwordpress_formatting_filters');
|
123 |
$update_logging = get_option('feedwordpress_update_logging');
|
124 |
|
125 |
$automatic_updates = get_option('feedwordpress_automatic_updates');
|
143 |
if (is_string($ua) and array_key_exists($ua, $unfamiliar_author)) :
|
144 |
$unfamiliar_author[$ua] = ' checked="checked"';
|
145 |
endif;
|
146 |
+
$unfamiliar_category = array ('create'=>'','default'=>'','filter'=>'', 'tag'=>'');
|
147 |
$uc = FeedWordPress::on_unfamiliar('category');
|
148 |
if (is_string($uc) and array_key_exists($uc, $unfamiliar_category)) :
|
149 |
$unfamiliar_category[$uc] = ' checked="checked"';
|
254 |
<option value="yes"<?php echo ($munge_permalink=='yes')?' selected="selected"':''; ?>>original website</option>
|
255 |
<option value="no"<?php echo ($munge_permalink=='no')?' selected="selected"':''; ?>>this website</option>
|
256 |
</select></td></tr>
|
257 |
+
<tr style="vertical-align:top"><th width="44%" scope="row">Formatting filters:</th>
|
258 |
+
<td width="56%">
|
259 |
+
<select name="formatting_filters" size="1">
|
260 |
+
<option value="no"<?php echo ($formatting_filters!='yes')?' selected="selected"':''; ?>>Protect syndicated posts from formatting filters</option>
|
261 |
+
<option value="yes"<?php echo ($formatting_filters=='yes')?' selected="selected"':''; ?>>Expose syndicated posts to formatting filters</option>
|
262 |
+
</select>
|
263 |
+
<p>If you have trouble getting plugins to work that are supposed to insert
|
264 |
+
elements after posts (like relevant links or a social networking
|
265 |
+
<q>Share This</q> button), try changing this option to see if it fixes your
|
266 |
+
problem.</p>
|
267 |
+
</td></tr>
|
268 |
</table>
|
269 |
<?php
|
270 |
fwp_option_box_closer();
|
275 |
?>
|
276 |
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
277 |
<tr style="vertical-align: top"><th width="27%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
|
278 |
+
<td><p>When one of the categories on a syndicated post is a category that FeedWordPress has not encountered before ...</p>
|
279 |
+
<ul style="margin: 0; padding:0; list-style:none">
|
280 |
+
<li><label><input type="radio" name="unfamiliar_category" value="create"<?php echo $unfamiliar_category['create']; ?>/> create a new category</label></li>
|
281 |
+
<li><label><input type="radio" name="unfamiliar_category" value="tag"<?php echo $unfamiliar_category['tag']; ?>/> create a new tag</label></li>
|
282 |
+
<li><label><input type="radio" name="unfamiliar_category" value="default"<?php echo $unfamiliar_category['default']; ?>/> don't create new categories or tags</li>
|
283 |
+
<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php echo $unfamiliar_category['filter']; ?>/> don't create new categories or tags and don't syndicate posts unless they match at least one familiar category</label></li>
|
284 |
</ul></td></tr>
|
285 |
</table>
|
286 |
<?php
|
366 |
}
|
367 |
|
368 |
fwp_syndication_options_page();
|
369 |
+
|
syndication.php
ADDED
@@ -0,0 +1,1262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(dirname(__FILE__) . '/admin-ui.php');
|
3 |
+
|
4 |
+
################################################################################
|
5 |
+
## ADMIN MENU ADD-ONS: implement Dashboard management pages ####################
|
6 |
+
################################################################################
|
7 |
+
|
8 |
+
if (fwp_test_wp_version(0, FWP_SCHEMA_25)) :
|
9 |
+
define('FWP_UPDATE_CHECKED', 'Update Checked Links');
|
10 |
+
define('FWP_UNSUB_CHECKED', 'Unsubscribe from Checked Links');
|
11 |
+
define('FWP_SYNDICATE_NEW', 'Syndicate »');
|
12 |
+
else :
|
13 |
+
define('FWP_UPDATE_CHECKED', 'Update Checked');
|
14 |
+
define('FWP_UNSUB_CHECKED', 'Unsubscribe');
|
15 |
+
define('FWP_SYNDICATE_NEW', 'Syndicate »');
|
16 |
+
endif;
|
17 |
+
|
18 |
+
function fwp_dashboard_update_if_requested () {
|
19 |
+
global $wpdb;
|
20 |
+
|
21 |
+
if (isset($_POST['update']) or isset($_POST['action']) or isset($_POST['update_uri'])) :
|
22 |
+
$fwp_update_invoke = 'post';
|
23 |
+
else :
|
24 |
+
$fwp_update_invoke = 'get';
|
25 |
+
endif;
|
26 |
+
|
27 |
+
$update_set = array();
|
28 |
+
if (isset($_POST['link_ids']) and is_array($_POST['link_ids']) and ($_POST['action']==FWP_UPDATE_CHECKED)) :
|
29 |
+
$targets = $wpdb->get_results("
|
30 |
+
SELECT * FROM $wpdb->links
|
31 |
+
WHERE link_id IN (".implode(",",$_POST['link_ids']).")
|
32 |
+
");
|
33 |
+
if (is_array($targets)) :
|
34 |
+
foreach ($targets as $target) :
|
35 |
+
$update_set[] = $target->link_rss;
|
36 |
+
endforeach;
|
37 |
+
else : // This should never happen
|
38 |
+
FeedWordPress::critical_bug('fwp_syndication_manage_page::targets', $targets, __LINE__);
|
39 |
+
endif;
|
40 |
+
elseif (isset($_POST['update_uri'])) :
|
41 |
+
$update_set[] = $_POST['update_uri'];
|
42 |
+
endif;
|
43 |
+
|
44 |
+
|
45 |
+
if ($fwp_update_invoke != 'get' and count($update_set) > 0) : // Only do things with side-effects for HTTP POST or command line
|
46 |
+
$feedwordpress =& new FeedWordPress;
|
47 |
+
add_action('feedwordpress_check_feed', 'update_feeds_mention');
|
48 |
+
|
49 |
+
if (fwp_test_wp_version(FWP_SCHEMA_25)) :
|
50 |
+
echo "<div class=\"youare\">\n";
|
51 |
+
else :
|
52 |
+
echo "<div class=\"updated\">\n";
|
53 |
+
endif;
|
54 |
+
echo "<ul>\n";
|
55 |
+
$tdelta = NULL;
|
56 |
+
foreach ($update_set as $uri) :
|
57 |
+
if ($uri == '*') : $uri = NULL; endif;
|
58 |
+
$delta = $feedwordpress->update($uri);
|
59 |
+
if (!is_null($delta)) :
|
60 |
+
if (is_null($tdelta)) :
|
61 |
+
$tdelta = $delta;
|
62 |
+
else :
|
63 |
+
$tdelta['new'] += $delta['new'];
|
64 |
+
$tdelta['updated'] += $delta['updated'];
|
65 |
+
endif;
|
66 |
+
else :
|
67 |
+
echo "<li><p><strong>Error:</strong> There was a problem updating <a href=\"$uri\">$uri</a></p></li>\n";
|
68 |
+
endif;
|
69 |
+
endforeach;
|
70 |
+
echo "</ul>\n";
|
71 |
+
|
72 |
+
if (!is_null($tdelta)) :
|
73 |
+
$mesg = array();
|
74 |
+
if (isset($delta['new'])) : $mesg[] = ' '.$tdelta['new'].' new posts were syndicated'; endif;
|
75 |
+
if (isset($delta['updated'])) : $mesg[] = ' '.$tdelta['updated'].' existing posts were updated'; endif;
|
76 |
+
echo "<p>Update complete.".implode(' and', $mesg)."</p>";
|
77 |
+
echo "\n"; flush();
|
78 |
+
endif;
|
79 |
+
echo "</div> <!-- class=\"updated\" -->\n";
|
80 |
+
elseif (fwp_test_wp_version(FWP_SCHEMA_25)) :
|
81 |
+
?>
|
82 |
+
<p class="youare">Check currently scheduled feeds for new and updated posts.</p>
|
83 |
+
<?php
|
84 |
+
endif;
|
85 |
+
}
|
86 |
+
|
87 |
+
function fwp_syndication_manage_page () {
|
88 |
+
global $wpdb;
|
89 |
+
|
90 |
+
if (FeedWordPress::needs_upgrade()) :
|
91 |
+
fwp_upgrade_page();
|
92 |
+
return;
|
93 |
+
endif;
|
94 |
+
|
95 |
+
?>
|
96 |
+
<?php $cont = true;
|
97 |
+
if (isset($_REQUEST['action'])):
|
98 |
+
if ($_REQUEST['action'] == 'feedfinder' or $_REQUEST['action'] == FWP_SYNDICATE_NEW) : $cont = fwp_feedfinder_page();
|
99 |
+
elseif ($_REQUEST['action'] == 'switchfeed') : $cont = fwp_switchfeed_page();
|
100 |
+
elseif ($_REQUEST['action'] == 'linkedit') : $cont = fwp_linkedit_page();
|
101 |
+
elseif ($_REQUEST['action'] == FWP_UNSUB_CHECKED or $_REQUEST['action'] == 'Unsubscribe') : $cont = fwp_multidelete_page();
|
102 |
+
endif;
|
103 |
+
endif;
|
104 |
+
|
105 |
+
if ($cont):
|
106 |
+
?>
|
107 |
+
<?php
|
108 |
+
$links = FeedWordPress::syndicated_links();
|
109 |
+
|
110 |
+
if (fwp_test_wp_version(0, FWP_SCHEMA_25)) :
|
111 |
+
fwp_dashboard_update_if_requested();
|
112 |
+
endif;
|
113 |
+
|
114 |
+
if ($links): // only display Update panel if there are some links to update....
|
115 |
+
?>
|
116 |
+
<form action="" method="POST">
|
117 |
+
<?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : ?>
|
118 |
+
<div class="wrap">
|
119 |
+
<div id="rightnow">
|
120 |
+
<h3 class="reallynow"><span>Update feeds now</span>
|
121 |
+
<input type="hidden" name="update_uri" value="*" /><input style="float: right; border: none;" class="rbutton" type="submit" name="update" value="Update" />
|
122 |
+
<br class="clear"/></h3>
|
123 |
+
<?php else : ?>
|
124 |
+
<div class="wrap">
|
125 |
+
<h2>Update feeds now</h2>
|
126 |
+
<?php endif; ?>
|
127 |
+
|
128 |
+
<?php
|
129 |
+
if (fwp_test_wp_version(FWP_SCHEMA_25)) :
|
130 |
+
fwp_dashboard_update_if_requested();
|
131 |
+
else :
|
132 |
+
?>
|
133 |
+
<p>Check currently scheduled feeds for new and updated posts.</p>
|
134 |
+
<?php
|
135 |
+
endif;
|
136 |
+
?>
|
137 |
+
|
138 |
+
<?php if (!get_option('feedwordpress_automatic_updates')) : ?>
|
139 |
+
<p class="youhave"><strong>Note:</strong> Automatic updates are currently turned
|
140 |
+
<strong>off</strong>. New posts from your feeds will not be syndicated
|
141 |
+
until you manually check for them here. You can turn on automatic
|
142 |
+
updates under <a href="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/syndication-options.php">Syndication
|
143 |
+
Options</a>.</p>
|
144 |
+
<?php endif; ?>
|
145 |
+
|
146 |
+
<?php if (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
|
147 |
+
<div class="submit"><input type="hidden" name="update_uri" value="*" /><input type="submit" name="update" value="Update" /></div>
|
148 |
+
<?php endif; ?>
|
149 |
+
|
150 |
+
<?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : ?>
|
151 |
+
</div> <!-- id="rightnow" -->
|
152 |
+
<?php endif; ?>
|
153 |
+
</div> <!-- class="wrap" -->
|
154 |
+
</form>
|
155 |
+
<?php
|
156 |
+
endif;
|
157 |
+
?>
|
158 |
+
|
159 |
+
<div class="wrap">
|
160 |
+
<form id="syndicated-links" action="admin.php?page=<?php print $GLOBALS['fwp_path']; ?>/<?php echo basename(__FILE__); ?>" method="post">
|
161 |
+
<h2>Syndicated Sites</h2>
|
162 |
+
<?php $alt_row = true;
|
163 |
+
if ($links): ?>
|
164 |
+
|
165 |
+
<?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : ?>
|
166 |
+
<div class="tablenav">
|
167 |
+
<div class="alignright">
|
168 |
+
<label for="add-uri">Add new source:</label>
|
169 |
+
<input type="text" name="lookup" id="add-uri" value="Website or feed URI" />
|
170 |
+
<script type="text/javascript">
|
171 |
+
jQuery(document).ready( function () {
|
172 |
+
var addUri = jQuery("#add-uri");
|
173 |
+
var box = addUri.get(0);
|
174 |
+
if (box.value==box.defaultValue) { addUri.addClass('form-input-tip'); }
|
175 |
+
addUri.focus(function() {
|
176 |
+
if ( this.value == this.defaultValue )
|
177 |
+
jQuery(this).val( '' ).removeClass( 'form-input-tip' );
|
178 |
+
});
|
179 |
+
addUri.blur(function() {
|
180 |
+
if ( this.value == '' )
|
181 |
+
jQuery(this).val( this.defaultValue ).addClass( 'form-input-tip' );
|
182 |
+
});
|
183 |
+
|
184 |
+
} );
|
185 |
+
</script>
|
186 |
+
|
187 |
+
<input type="hidden" name="action" value="feedfinder" />
|
188 |
+
<input type="submit" class="button-secondary" name="action" value="<?php print FWP_SYNDICATE_NEW; ?>" /></div>
|
189 |
+
|
190 |
+
<div class="alignleft">
|
191 |
+
<input class="button-secondary" type="submit" name="action" value="<?php print FWP_UPDATE_CHECKED; ?>" />
|
192 |
+
<input class="button-secondary delete" type="submit" class="delete" name="action" value="<?php print FWP_UNSUB_CHECKED; ?>" />
|
193 |
+
</div>
|
194 |
+
|
195 |
+
<br class="clear" />
|
196 |
+
</div>
|
197 |
+
<br class="clear" />
|
198 |
+
|
199 |
+
<table class="widefat">
|
200 |
+
<?php else : ?>
|
201 |
+
<table width="100%" cellpadding="3" cellspacing="3">
|
202 |
+
<?php endif; ?>
|
203 |
+
<thead>
|
204 |
+
<tr>
|
205 |
+
<?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : $span = 3; ?>
|
206 |
+
<th class="check-column" scope="col"><input type="checkbox" <?php if (fwp_test_wp_version(FWP_SCHEMA_25, FWP_SCHEMA_26)) : ?>onclick="checkAll(document.getElementById('syndicated-links'));"<?php endif; ?> /></th>
|
207 |
+
<?php else : $span = 4; ?>
|
208 |
+
<?php endif; ?>
|
209 |
+
<th width="20%" scope="col"><?php _e('Name'); ?></th>
|
210 |
+
<th width="40%" scope="col"><?php _e('Feed'); ?></th>
|
211 |
+
<th class="action-links" scope="col" colspan="<?php print $span; ?>"><?php _e('Action'); ?></th>
|
212 |
+
</tr>
|
213 |
+
</thead>
|
214 |
+
|
215 |
+
<tbody>
|
216 |
+
<?php foreach ($links as $link):
|
217 |
+
$alt_row = !$alt_row; ?>
|
218 |
+
<tr<?php echo ($alt_row?' class="alternate"':''); ?>>
|
219 |
+
<?php if (fwp_test_wp_version(FWP_SCHEMA_25)) : ?>
|
220 |
+
<th class="check-column" scope="row"><input type="checkbox" name="link_ids[]" value="<?php echo $link->link_id; ?>" /></th>
|
221 |
+
<?php endif; ?>
|
222 |
+
|
223 |
+
<td><a href="<?php echo wp_specialchars($link->link_url, 'both'); ?>"><?php echo wp_specialchars($link->link_name, 'both'); ?></a></td>
|
224 |
+
<?php
|
225 |
+
if (strlen($link->link_rss) > 0):
|
226 |
+
$caption='Switch Feed';
|
227 |
+
$uri_bits = parse_url($link->link_rss);
|
228 |
+
$uri_bits['host'] = preg_replace('/^www\./i', '', $uri_bits['host']);
|
229 |
+
$display_uri =
|
230 |
+
(isset($uri_bits['user'])?$uri_bits['user'].'@':'')
|
231 |
+
.(isset($uri_bits['host'])?$uri_bits['host']:'')
|
232 |
+
.(isset($uri_bits['port'])?':'.$uri_bits['port']:'')
|
233 |
+
.(isset($uri_bits['path'])?$uri_bits['path']:'')
|
234 |
+
.(isset($uri_bits['query'])?'?'.$uri_bits['query']:'');
|
235 |
+
if (strlen($display_uri) > 32) : $display_uri = substr($display_uri, 0, 32).'…'; endif;
|
236 |
+
?>
|
237 |
+
<td>
|
238 |
+
<strong><a href="<?php echo wp_specialchars($link->link_rss, 'both'); ?>"><?php echo wp_specialchars($display_uri, 'both'); ?></a></strong></td>
|
239 |
+
<?php
|
240 |
+
else:
|
241 |
+
$caption='Find Feed';
|
242 |
+
?>
|
243 |
+
<td style="background-color:#FFFFD0"><p><strong>no
|
244 |
+
feed assigned</strong></p></td>
|
245 |
+
<?php
|
246 |
+
endif;
|
247 |
+
?>
|
248 |
+
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=linkedit" class="edit"><?php _e('Edit')?></a></td>
|
249 |
+
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=feedfinder" class="edit"><?php echo $caption; ?></a></td>
|
250 |
+
<td><a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>&link_id=<?php echo $link->link_id; ?>&action=Unsubscribe" class="delete"><?php _e('Unsubscribe'); ?></a></td>
|
251 |
+
<?php if (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
|
252 |
+
<td><input type="checkbox" name="link_ids[]" value="<?php echo $link->link_id; ?>" /></td>
|
253 |
+
<?php
|
254 |
+
endif;
|
255 |
+
echo "\n\t</tr>";
|
256 |
+
endforeach;
|
257 |
+
?>
|
258 |
+
</tbody>
|
259 |
+
</table>
|
260 |
+
|
261 |
+
<?php if (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
|
262 |
+
<br/><hr/>
|
263 |
+
<div class="submit"><input type="submit" class="delete" name="action" value="<?php print FWP_UNSUB_CHECKED; ?>" />
|
264 |
+
<input type="submit" name="action" value="<?php print FWP_UPDATE_CHECKED; ?>" /></div>
|
265 |
+
<?php endif; ?>
|
266 |
+
|
267 |
+
|
268 |
+
<?php
|
269 |
+
else:
|
270 |
+
?>
|
271 |
+
|
272 |
+
<p>There are no websites currently listed for syndication.</p>
|
273 |
+
|
274 |
+
<?php endif; ?>
|
275 |
+
|
276 |
+
</form>
|
277 |
+
|
278 |
+
</div> <!-- class="wrap" -->
|
279 |
+
|
280 |
+
<?php if (fwp_test_wp_version(0, FWP_SCHEMA_25)) : ?>
|
281 |
+
<div class="wrap">
|
282 |
+
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
283 |
+
<h2>Add a new syndicated site:</h2>
|
284 |
+
<div>
|
285 |
+
<label for="add-uri">Website or newsfeed:</label>
|
286 |
+
<input type="text" name="lookup" id="add-uri" value="URI" size="64" />
|
287 |
+
<input type="hidden" name="action" value="feedfinder" />
|
288 |
+
</div>
|
289 |
+
<div class="submit"><input type="submit" value="Syndicate »" /></div>
|
290 |
+
</form>
|
291 |
+
</div> <!-- class="wrap" -->
|
292 |
+
<?php endif; ?>
|
293 |
+
|
294 |
+
<div style="display: none">
|
295 |
+
<div id="tags-input"></div> <!-- avoid JS error from WP 2.5 bug -->
|
296 |
+
</div>
|
297 |
+
<?php
|
298 |
+
endif;
|
299 |
+
}
|
300 |
+
|
301 |
+
function fwp_feedfinder_page () {
|
302 |
+
global $wpdb;
|
303 |
+
|
304 |
+
$lookup = (isset($_REQUEST['lookup'])?$_REQUEST['lookup']:NULL);
|
305 |
+
|
306 |
+
if (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']!=0)):
|
307 |
+
$link_id = $_REQUEST['link_id'];
|
308 |
+
if (!is_numeric($link_id)) : FeedWordPress::critical_bug('fwp_feedfinder_page::link_id', $link_id, __LINE__); endif;
|
309 |
+
|
310 |
+
$link = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id='".$wpdb->escape($link_id)."'");
|
311 |
+
if (is_object($link)):
|
312 |
+
if (is_null($lookup)) $lookup = $link->link_url;
|
313 |
+
$name = wp_specialchars($link->link_name, 'both');
|
314 |
+
else:
|
315 |
+
die (__("Cheatin' uh ?"));
|
316 |
+
endif;
|
317 |
+
else:
|
318 |
+
$name = "New Syndicated Feed";
|
319 |
+
$link_id = 0;
|
320 |
+
endif;
|
321 |
+
?>
|
322 |
+
<div class="wrap">
|
323 |
+
<h2>Feed Finder: <?php echo $name; ?></h2>
|
324 |
+
<?php
|
325 |
+
$f =& new FeedFinder($lookup);
|
326 |
+
$feeds = $f->find();
|
327 |
+
if (count($feeds) > 0):
|
328 |
+
foreach ($feeds as $key => $f):
|
329 |
+
$rss = fetch_rss($f);
|
330 |
+
if ($rss):
|
331 |
+
$feed_title = isset($rss->channel['title'])?$rss->channel['title']:$rss->channel['link'];
|
332 |
+
$feed_link = isset($rss->channel['link'])?$rss->channel['link']:'';
|
333 |
+
?>
|
334 |
+
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
335 |
+
<fieldset style="clear: both">
|
336 |
+
<legend><?php echo $rss->feed_type; ?> <?php echo $rss->feed_version; ?> feed</legend>
|
337 |
+
|
338 |
+
<?php if ($link_id===0): ?>
|
339 |
+
<input type="hidden" name="feed_title" value="<?php echo wp_specialchars($feed_title, 'both'); ?>" />
|
340 |
+
<input type="hidden" name="feed_link" value="<?php echo wp_specialchars($feed_link, 'both'); ?>" />
|
341 |
+
<?php endif; ?>
|
342 |
+
|
343 |
+
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
344 |
+
<input type="hidden" name="feed" value="<?php echo wp_specialchars($f, 'both'); ?>" />
|
345 |
+
<input type="hidden" name="action" value="switchfeed" />
|
346 |
+
|
347 |
+
<div>
|
348 |
+
<div style="float:right; background-color:#D0D0D0; color: black; width:45%; font-size:70%; border-left: 1px dotted #A0A0A0; padding-left: 0.5em; margin-left: 1.0em">
|
349 |
+
<?php if (count($rss->items) > 0): ?>
|
350 |
+
<?php $item = $rss->items[0]; ?>
|
351 |
+
<h3>Sample Item</h3>
|
352 |
+
<ul>
|
353 |
+
<li><strong>Title:</strong> <a href="<?php echo $item['link']; ?>"><?php echo $item['title']; ?></a></li>
|
354 |
+
<li><strong>Date:</strong> <?php echo isset($item['date_timestamp']) ? date('d-M-y g:i:s a', $item['date_timestamp']) : 'unknown'; ?></li>
|
355 |
+
</ul>
|
356 |
+
<div class="entry">
|
357 |
+
<?php echo (isset($item['content']['encoded'])?$item['content']['encoded']:$item['description']); ?>
|
358 |
+
</div>
|
359 |
+
<?php else: ?>
|
360 |
+
<h3>No Items</h3>
|
361 |
+
<p>FeedWordPress found no posts on this feed.</p>
|
362 |
+
<?php endif; ?>
|
363 |
+
</div>
|
364 |
+
|
365 |
+
<div>
|
366 |
+
<h3>Feed Information</h3>
|
367 |
+
<ul>
|
368 |
+
<li><strong>Website:</strong> <a href="<?php echo $feed_link; ?>"><?php echo is_null($feed_title)?'<em>Unknown</em>':$feed_title; ?></a></li>
|
369 |
+
<li><strong>Feed URI:</strong> <a href="<?php echo wp_specialchars($f, 'both'); ?>"><?php echo wp_specialchars($f, 'both'); ?></a> (<a title="Check feed <<?php echo wp_specialchars($f, 'both'); ?>> for validity" href="http://feedvalidator.org/check.cgi?url=<?php echo urlencode($f); ?>">validate</a>)</li>
|
370 |
+
<li><strong>Encoding:</strong> <?php echo isset($rss->encoding)?wp_specialchars($rss->encoding, 'both'):"<em>Unknown</em>"; ?></li>
|
371 |
+
<li><strong>Description:</strong> <?php echo isset($rss->channel['description'])?wp_specialchars($rss->channel['description'], 'both'):"<em>Unknown</em>"; ?></li>
|
372 |
+
</ul>
|
373 |
+
<div class="submit"><input type="submit" name="Use" value="« Use this feed" /></div>
|
374 |
+
<div class="submit"><input type="submit" name="Cancel" value="« Cancel" /></div>
|
375 |
+
</div>
|
376 |
+
</div>
|
377 |
+
</fieldset>
|
378 |
+
</form>
|
379 |
+
<?php endif;
|
380 |
+
endforeach;
|
381 |
+
else:
|
382 |
+
echo "<p><strong>no feed found</strong></p>";
|
383 |
+
endif;
|
384 |
+
?>
|
385 |
+
</div>
|
386 |
+
|
387 |
+
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
388 |
+
<div class="wrap">
|
389 |
+
<h2>Use another feed</h2>
|
390 |
+
<div><label>Feed:</label>
|
391 |
+
<input type="text" name="lookup" value="URI" />
|
392 |
+
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
393 |
+
<input type="hidden" name="action" value="feedfinder" /></div>
|
394 |
+
<div class="submit"><input type="submit" value="Use this feed »" /></div>
|
395 |
+
</div>
|
396 |
+
</form>
|
397 |
+
<?php
|
398 |
+
return false; // Don't continue
|
399 |
+
}
|
400 |
+
|
401 |
+
function fwp_switchfeed_page () {
|
402 |
+
global $wpdb, $wp_db_version;
|
403 |
+
|
404 |
+
check_admin_referer();
|
405 |
+
if (!isset($_REQUEST['Cancel'])):
|
406 |
+
if (!current_user_can('manage_links')):
|
407 |
+
die (__("Cheatin' uh ?"));
|
408 |
+
elseif (isset($_REQUEST['link_id']) and ($_REQUEST['link_id']==0)):
|
409 |
+
$link_id = FeedWordPress::syndicate_link($_REQUEST['feed_title'], $_REQUEST['feed_link'], $_REQUEST['feed']);
|
410 |
+
if ($link_id): ?>
|
411 |
+
<div class="updated"><p><a href="<?php echo $_REQUEST['feed_link']; ?>"><?php echo wp_specialchars($_REQUEST['feed_title'], 'both'); ?></a>
|
412 |
+
has been added as a contributing site, using the newsfeed at <<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>>.</p></div>
|
413 |
+
<?php else: ?>
|
414 |
+
<div class="updated"><p>There was a problem adding the newsfeed. [SQL: <?php echo wp_specialchars(mysql_error(), 'both'); ?>]</p></div>
|
415 |
+
<?php endif;
|
416 |
+
elseif (isset($_REQUEST['link_id'])):
|
417 |
+
// Update link_rss
|
418 |
+
$result = $wpdb->query("
|
419 |
+
UPDATE $wpdb->links
|
420 |
+
SET
|
421 |
+
link_rss = '".$wpdb->escape($_REQUEST['feed'])."'
|
422 |
+
WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
|
423 |
+
");
|
424 |
+
|
425 |
+
if ($result):
|
426 |
+
$result = $wpdb->get_row("
|
427 |
+
SELECT link_name, link_url FROM $wpdb->links
|
428 |
+
WHERE link_id = '".$wpdb->escape($_REQUEST['link_id'])."'
|
429 |
+
");
|
430 |
+
?>
|
431 |
+
<div class="updated"><p>Feed for <a href="<?php echo $result->link_url; ?>"><?php echo wp_specialchars($result->link_name, 'both'); ?></a>
|
432 |
+
updated to <<a href="<?php echo $_REQUEST['feed']; ?>"><?php echo wp_specialchars($_REQUEST['feed'], 'both'); ?></a>>.</p></div>
|
433 |
+
<?php else: ?>
|
434 |
+
<div class="updated"><p>Nothing was changed.</p></div>
|
435 |
+
<?php endif;
|
436 |
+
endif;
|
437 |
+
endif;
|
438 |
+
return true; // Continue
|
439 |
+
}
|
440 |
+
|
441 |
+
function fwp_linkedit_page () {
|
442 |
+
global $wpdb, $wp_db_version;
|
443 |
+
|
444 |
+
check_admin_referer(); // Make sure we arrived here from the Dashboard
|
445 |
+
|
446 |
+
$special_settings = array ( /* Regular expression syntax is OK here */
|
447 |
+
'cats',
|
448 |
+
'cat_split',
|
449 |
+
'hardcode name',
|
450 |
+
'hardcode url',
|
451 |
+
'hardcode description',
|
452 |
+
'hardcode categories', /* Deprecated */
|
453 |
+
'post status',
|
454 |
+
'comment status',
|
455 |
+
'ping status',
|
456 |
+
'unfamiliar author',
|
457 |
+
'unfamliar categories', /* Deprecated */
|
458 |
+
'unfamiliar category',
|
459 |
+
'map authors',
|
460 |
+
'tags',
|
461 |
+
'update/.*',
|
462 |
+
'feed/.*',
|
463 |
+
'link/.*',
|
464 |
+
);
|
465 |
+
|
466 |
+
if (!current_user_can('manage_links')) :
|
467 |
+
die (__("Cheatin' uh ?"));
|
468 |
+
elseif (isset($_REQUEST['feedfinder'])) :
|
469 |
+
return fwp_feedfinder_page(); // re-route to Feed Finder page
|
470 |
+
else :
|
471 |
+
$link_id = (int) $_REQUEST['link_id'];
|
472 |
+
$link =& new SyndicatedLink($link_id);
|
473 |
+
|
474 |
+
if ($link->found()) :
|
475 |
+
if (isset($GLOBALS['fwp_post']['save'])) :
|
476 |
+
$alter = array ();
|
477 |
+
|
478 |
+
$meta = $link->settings;
|
479 |
+
//if (isset($meta['cats'])):
|
480 |
+
// $meta['cats'] = preg_split(FEEDWORDPRESS_CAT_SEPARATOR_PATTERN, $meta['cats']);
|
481 |
+
//endif;
|
482 |
+
|
483 |
+
// custom feed settings first
|
484 |
+
foreach ($GLOBALS['fwp_post']['notes'] as $mn) :
|
485 |
+
$mn['key0'] = trim($mn['key0']);
|
486 |
+
$mn['key1'] = trim($mn['key1']);
|
487 |
+
if (preg_match("\007^(("
|
488 |
+
.implode(')|(',$special_settings)
|
489 |
+
."))$\007i",
|
490 |
+
$mn['key1'])) :
|
491 |
+
$mn['key1'] = 'user/'.$mn['key1'];
|
492 |
+
endif;
|
493 |
+
|
494 |
+
if (strlen($mn['key0']) > 0) :
|
495 |
+
unset($meta[$mn['key0']]); // out with the old
|
496 |
+
endif;
|
497 |
+
|
498 |
+
if (($mn['action']=='update') and (strlen($mn['key1']) > 0)) :
|
499 |
+
$meta[$mn['key1']] = $mn['value']; // in with the new
|
500 |
+
endif;
|
501 |
+
endforeach;
|
502 |
+
|
503 |
+
// now stuff through the web form
|
504 |
+
// hardcoded feed info
|
505 |
+
if (isset($GLOBALS['fwp_post']['hardcode_name'])) :
|
506 |
+
$meta['hardcode name'] = $GLOBALS['fwp_post']['hardcode_name'];
|
507 |
+
if (FeedWordPress::affirmative($meta, 'hardcode name')) :
|
508 |
+
$alter[] = "link_name = '".$wpdb->escape($GLOBALS['fwp_post']['name'])."'";
|
509 |
+
endif;
|
510 |
+
endif;
|
511 |
+
if (isset($GLOBALS['fwp_post']['hardcode_description'])) :
|
512 |
+
$meta['hardcode description'] = $GLOBALS['fwp_post']['hardcode_description'];
|
513 |
+
if (FeedWordPress::affirmative($meta, 'hardcode description')) :
|
514 |
+
$alter[] = "link_description = '".$wpdb->escape($GLOBALS['fwp_post']['description'])."'";
|
515 |
+
endif;
|
516 |
+
endif;
|
517 |
+
if (isset($GLOBALS['fwp_post']['hardcode_url'])) :
|
518 |
+
$meta['hardcode url'] = $GLOBALS['fwp_post']['hardcode_url'];
|
519 |
+
if (FeedWordPress::affirmative($meta, 'hardcode url')) :
|
520 |
+
$alter[] = "link_url = '".$wpdb->escape($GLOBALS['fwp_post']['linkurl'])."'";
|
521 |
+
endif;
|
522 |
+
endif;
|
523 |
+
|
524 |
+
// Update scheduling
|
525 |
+
if (isset($GLOBALS['fwp_post']['update_schedule'])) :
|
526 |
+
$meta['update/hold'] = $GLOBALS['fwp_post']['update_schedule'];
|
527 |
+
endif;
|
528 |
+
|
529 |
+
// Categories
|
530 |
+
if (isset($GLOBALS['fwp_post']['post_category'])) :
|
531 |
+
$meta['cats'] = array();
|
532 |
+
foreach ($GLOBALS['fwp_post']['post_category'] as $cat_id) :
|
533 |
+
$meta['cats'][] = '{#'.$cat_id.'}';
|
534 |
+
endforeach;
|
535 |
+
else :
|
536 |
+
unset($meta['cats']);
|
537 |
+
endif;
|
538 |
+
|
539 |
+
// Tags
|
540 |
+
if (isset($GLOBALS['fwp_post']['tags_input'])) :
|
541 |
+
$meta['tags'] = array();
|
542 |
+
foreach (explode(',', $GLOBALS['fwp_post']['tags_input']) as $tag) :
|
543 |
+
$meta['tags'][] = trim($tag);
|
544 |
+
endforeach;
|
545 |
+
endif;
|
546 |
+
|
547 |
+
// Post status, comment status, ping status
|
548 |
+
foreach (array('post', 'comment', 'ping') as $what) :
|
549 |
+
$sfield = "feed_{$what}_status";
|
550 |
+
if (isset($GLOBALS['fwp_post'][$sfield])) :
|
551 |
+
if ($GLOBALS['fwp_post'][$sfield]=='site-default') :
|
552 |
+
unset($meta["{$what} status"]);
|
553 |
+
else :
|
554 |
+
$meta["{$what} status"] = $GLOBALS['fwp_post'][$sfield];
|
555 |
+
endif;
|
556 |
+
endif;
|
557 |
+
endforeach;
|
558 |
+
|
559 |
+
// Unfamiliar author, unfamiliar categories
|
560 |
+
foreach (array("author", "category") as $what) :
|
561 |
+
$sfield = "unfamiliar_{$what}";
|
562 |
+
if (isset($GLOBALS['fwp_post'][$sfield])) :
|
563 |
+
if ('site-default'==$GLOBALS['fwp_post'][$sfield]) :
|
564 |
+
unset($meta["unfamiliar {$what}"]);
|
565 |
+
elseif ('newuser'==$GLOBALS['fwp_post'][$sfield]) :
|
566 |
+
$newuser_name = trim($GLOBALS['fwp_post']["{$sfield}_newuser"]);
|
567 |
+
if (strlen($newuser_name) > 0) :
|
568 |
+
$userdata = array();
|
569 |
+
$userdata['ID'] = NULL;
|
570 |
+
|
571 |
+
$userdata['user_login'] = sanitize_user($newuser_name);
|
572 |
+
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
573 |
+
|
574 |
+
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
575 |
+
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
576 |
+
|
577 |
+
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
578 |
+
|
579 |
+
$newuser_id = wp_insert_user($userdata);
|
580 |
+
if (is_numeric($newuser_id)) :
|
581 |
+
$meta["unfamiliar {$what}"] = $newuser_id;
|
582 |
+
else :
|
583 |
+
// TODO: Add some error detection and reporting
|
584 |
+
endif;
|
585 |
+
else :
|
586 |
+
// TODO: Add some error reporting
|
587 |
+
endif;
|
588 |
+
else :
|
589 |
+
$meta["unfamiliar {$what}"] = $GLOBALS['fwp_post'][$sfield];
|
590 |
+
endif;
|
591 |
+
endif;
|
592 |
+
endforeach;
|
593 |
+
|
594 |
+
// Handle author mapping rules
|
595 |
+
if (isset($GLOBALS['fwp_post']['author_rules_name']) and isset($GLOBALS['fwp_post']['author_rules_action'])) :
|
596 |
+
unset($meta['map authors']);
|
597 |
+
foreach ($GLOBALS['fwp_post']['author_rules_name'] as $key => $name) :
|
598 |
+
// Normalize for case and whitespace
|
599 |
+
$name = strtolower(trim($name));
|
600 |
+
$author_action = strtolower(trim($GLOBALS['fwp_post']['author_rules_action'][$key]));
|
601 |
+
|
602 |
+
if (strlen($name) > 0) :
|
603 |
+
if ('newuser' == $author_action) :
|
604 |
+
$newuser_name = trim($GLOBALS['fwp_post']['author_rules_newuser'][$key]);
|
605 |
+
if (strlen($newuser_name) > 0) :
|
606 |
+
$userdata = array();
|
607 |
+
$userdata['ID'] = NULL;
|
608 |
+
|
609 |
+
$userdata['user_login'] = sanitize_user($newuser_name);
|
610 |
+
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
611 |
+
|
612 |
+
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
613 |
+
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
614 |
+
|
615 |
+
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
616 |
+
|
617 |
+
$newuser_id = wp_insert_user($userdata);
|
618 |
+
if (is_numeric($newuser_id)) :
|
619 |
+
$meta['map authors']['name'][$name] = $newuser_id;
|
620 |
+
else :
|
621 |
+
// TODO: Add some error detection and reporting
|
622 |
+
endif;
|
623 |
+
else :
|
624 |
+
// TODO: Add some error reporting
|
625 |
+
endif;
|
626 |
+
else :
|
627 |
+
$meta['map authors']['name'][$name] = $author_action;
|
628 |
+
endif;
|
629 |
+
endif;
|
630 |
+
endforeach;
|
631 |
+
endif;
|
632 |
+
|
633 |
+
if (isset($GLOBALS['fwp_post']['add_author_rule_name']) and isset($GLOBALS['fwp_post']['add_author_rule_action'])) :
|
634 |
+
$name = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_name']));
|
635 |
+
$author_action = strtolower(trim($GLOBALS['fwp_post']['add_author_rule_action']));
|
636 |
+
if (strlen($name) > 0) :
|
637 |
+
if ('newuser' == $author_action) :
|
638 |
+
$newuser_name = trim($GLOBALS['fwp_post']['add_author_rule_newuser']);
|
639 |
+
if (strlen($newuser_name) > 0) :
|
640 |
+
$userdata = array();
|
641 |
+
$userdata['ID'] = NULL;
|
642 |
+
|
643 |
+
$userdata['user_login'] = sanitize_user($newuser_name);
|
644 |
+
$userdata['user_login'] = apply_filters('pre_user_login', $userdata['user_login']);
|
645 |
+
|
646 |
+
$userdata['user_nicename'] = sanitize_title($newuser_name);
|
647 |
+
$userdata['user_nicename'] = apply_filters('pre_user_nicename', $userdata['user_nicename']);
|
648 |
+
|
649 |
+
$userdata['display_name'] = $wpdb->escape($newuser_name);
|
650 |
+
|
651 |
+
$newuser_id = wp_insert_user($userdata);
|
652 |
+
if (is_numeric($newuser_id)) :
|
653 |
+
$meta['map authors']['name'][$name] = $newuser_id;
|
654 |
+
else :
|
655 |
+
// TODO: Add some error detection and reporting
|
656 |
+
endif;
|
657 |
+
else :
|
658 |
+
// TODO: Add some error reporting
|
659 |
+
endif;
|
660 |
+
else :
|
661 |
+
$meta['map authors']['name'][$name] = $author_action;
|
662 |
+
endif;
|
663 |
+
endif;
|
664 |
+
endif;
|
665 |
+
|
666 |
+
if (isset($GLOBALS['fwp_post']['cat_split'])) :
|
667 |
+
if (strlen(trim($GLOBALS['fwp_post']['cat_split'])) > 0) :
|
668 |
+
$meta['cat_split'] = trim($GLOBALS['fwp_post']['cat_split']);
|
669 |
+
else :
|
670 |
+
unset($meta['cat_split']);
|
671 |
+
endif;
|
672 |
+
endif;
|
673 |
+
|
674 |
+
if (is_array($meta['cats'])) :
|
675 |
+
$meta['cats'] = implode(FEEDWORDPRESS_CAT_SEPARATOR, $meta['cats']);
|
676 |
+
endif;
|
677 |
+
if (is_array($meta['tags'])) :
|
678 |
+
$meta['tags'] = implode(FEEDWORDPRESS_CAT_SEPARATOR, $meta['tags']);
|
679 |
+
endif;
|
680 |
+
|
681 |
+
// Collapse the author mapping rule structure back into a flat string
|
682 |
+
if (isset($meta['map authors'])) :
|
683 |
+
$ma = array();
|
684 |
+
foreach ($meta['map authors'] as $rule_type => $author_rules) :
|
685 |
+
foreach ($author_rules as $author_name => $author_action) :
|
686 |
+
$ma[] = $rule_type."\n".$author_name."\n".$author_action;
|
687 |
+
endforeach;
|
688 |
+
endforeach;
|
689 |
+
$meta['map authors'] = implode("\n\n", $ma);
|
690 |
+
endif;
|
691 |
+
|
692 |
+
$notes = '';
|
693 |
+
foreach ($meta as $key => $value) :
|
694 |
+
$notes .= $key . ": ". addcslashes($value, "\0..\37".'\\') . "\n";
|
695 |
+
endforeach;
|
696 |
+
$alter[] = "link_notes = '".$wpdb->escape($notes)."'";
|
697 |
+
|
698 |
+
$alter_set = implode(", ", $alter);
|
699 |
+
|
700 |
+
// issue update query
|
701 |
+
$result = $wpdb->query("
|
702 |
+
UPDATE $wpdb->links
|
703 |
+
SET $alter_set
|
704 |
+
WHERE link_id='$link_id'
|
705 |
+
");
|
706 |
+
$updated_link = true;
|
707 |
+
|
708 |
+
// reload link information from DB
|
709 |
+
$link =& new SyndicatedLink($link_id);
|
710 |
+
else :
|
711 |
+
$updated_link = false;
|
712 |
+
endif;
|
713 |
+
|
714 |
+
$db_link = $link->link;
|
715 |
+
$link_url = wp_specialchars($db_link->link_url, 1);
|
716 |
+
$link_name = wp_specialchars($db_link->link_name, 1);
|
717 |
+
$link_description = wp_specialchars($db_link->link_description, 'both');
|
718 |
+
$link_notes = wp_specialchars($db_link->link_notes, 'both');
|
719 |
+
$link_rss_uri = wp_specialchars($db_link->link_rss, 'both');
|
720 |
+
|
721 |
+
$meta = $link->settings;
|
722 |
+
$post_status_global = get_option('feedwordpress_syndicated_post_status');
|
723 |
+
$comment_status_global = get_option('feedwordpress_syndicated_comment_status');
|
724 |
+
$ping_status_global = get_option('feedwordpress_syndicated_ping_status');
|
725 |
+
|
726 |
+
$status['post'] = array('publish' => '', 'private' => '', 'draft' => '', 'site-default' => '');
|
727 |
+
if (SyndicatedPost::use_api('post_status_pending')) :
|
728 |
+
$status['post']['pending'] = '';
|
729 |
+
endif;
|
730 |
+
|
731 |
+
$status['comment'] = array('open' => '', 'closed' => '', 'site-default' => '');
|
732 |
+
$status['ping'] = array('open' => '', 'closed' => '', 'site-default' => '');
|
733 |
+
|
734 |
+
foreach (array('post', 'comment', 'ping') as $what) :
|
735 |
+
if (isset($meta["{$what} status"])) :
|
736 |
+
$status[$what][$meta["{$what} status"]] = ' checked="checked"';
|
737 |
+
else :
|
738 |
+
$status[$what]['site-default'] = ' checked="checked"';
|
739 |
+
endif;
|
740 |
+
endforeach;
|
741 |
+
|
742 |
+
$unfamiliar['author'] = array ('create' => '','default' => '','filter' => '');
|
743 |
+
$unfamiliar['category'] = array ('create'=>'','tag' => '','default'=>'','filter'=>'');
|
744 |
+
|
745 |
+
foreach (array('author', 'category') as $what) :
|
746 |
+
if (is_string($meta["unfamiliar {$what}"]) and
|
747 |
+
array_key_exists($meta["unfamiliar {$what}"], $unfamiliar[$what])) :
|
748 |
+
$key = $meta["unfamiliar {$what}"];
|
749 |
+
else:
|
750 |
+
$key = 'site-default';
|
751 |
+
endif;
|
752 |
+
$unfamiliar[$what][$key] = ' checked="checked"';
|
753 |
+
endforeach;
|
754 |
+
|
755 |
+
if (is_array($meta['cats'])) : $cats = $meta['cats'];
|
756 |
+
else : $cats = array();
|
757 |
+
endif;
|
758 |
+
|
759 |
+
$dogs = SyndicatedPost::category_ids($cats, /*unfamiliar=*/ NULL);
|
760 |
+
else :
|
761 |
+
die( __('Link not found.') );
|
762 |
+
endif;
|
763 |
+
|
764 |
+
?>
|
765 |
+
<script type="text/javascript">
|
766 |
+
function flip_hardcode (item) {
|
767 |
+
ed=document.getElementById('basics-'+item+'-edit');
|
768 |
+
view=document.getElementById('basics-'+item+'-view');
|
769 |
+
|
770 |
+
o = document.getElementById('basics-hardcode-'+item);
|
771 |
+
if (o.value=='yes') { ed.style.display='inline'; view.style.display='none'; }
|
772 |
+
else { ed.style.display='none'; view.style.display='inline'; }
|
773 |
+
}
|
774 |
+
function flip_newuser (item) {
|
775 |
+
rollup=document.getElementById(item);
|
776 |
+
newuser=document.getElementById(item+'-newuser');
|
777 |
+
sitewide=document.getElementById(item+'-default');
|
778 |
+
if (rollup) {
|
779 |
+
if ('newuser'==rollup.value) {
|
780 |
+
if (newuser) newuser.style.display='block';
|
781 |
+
if (sitewide) sitewide.style.display='none';
|
782 |
+
} else if ('site-default'==rollup.value) {
|
783 |
+
if (newuser) newuser.style.display='none';
|
784 |
+
if (sitewide) sitewide.style.display='block';
|
785 |
+
} else {
|
786 |
+
if (newuser) newuser.style.display='none';
|
787 |
+
if (sitewide) sitewide.style.display='none';
|
788 |
+
}
|
789 |
+
}
|
790 |
+
}
|
791 |
+
</script>
|
792 |
+
|
793 |
+
<?php if ($updated_link) : ?>
|
794 |
+
<div class="updated"><p>Syndicated feed settings updated.</p></div>
|
795 |
+
<?php endif; ?>
|
796 |
+
|
797 |
+
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
798 |
+
<div class="wrap">
|
799 |
+
<input type="hidden" name="link_id" value="<?php echo $link_id; ?>" />
|
800 |
+
<input type="hidden" name="action" value="linkedit" />
|
801 |
+
<input type="hidden" name="save" value="link" />
|
802 |
+
|
803 |
+
<h2>Edit a syndicated feed:</h2>
|
804 |
+
<div id="poststuff">
|
805 |
+
<?php fwp_linkedit_single_submit($status); ?>
|
806 |
+
|
807 |
+
<div id="post-body">
|
808 |
+
<?php fwp_option_box_opener('Feed Information', 'feedinformationdiv'); ?>
|
809 |
+
<table class="editform" width="100%" cellspacing="2" cellpadding="5">
|
810 |
+
<tr>
|
811 |
+
<th scope="row" width="20%"><?php _e('Feed URI:') ?></th>
|
812 |
+
<td width="60%"><a href="<?php echo wp_specialchars($link_rss_uri, 'both'); ?>"><?php echo $link_rss_uri; ?></a>
|
813 |
+
(<a href="<?php echo FEEDVALIDATOR_URI; ?>?url=<?php echo urlencode($link_rss_uri); ?>"
|
814 |
+
title="Check feed <<?php echo wp_specialchars($link_rss_uri, 'both'); ?>> for validity">validate</a>)
|
815 |
+
</td>
|
816 |
+
<td width="20%"><input type="submit" name="feedfinder" value="switch →" style="font-size:smaller" /></td>
|
817 |
+
</tr>
|
818 |
+
<tr>
|
819 |
+
<th scope="row" width="20%"><?php _e('Link Name:') ?></th>
|
820 |
+
<td width="60%"><input type="text" id="basics-name-edit" name="name"
|
821 |
+
value="<?php echo $link_name; ?>" style="width: 95%" />
|
822 |
+
<span id="basics-name-view"><strong><?php echo $link_name; ?></strong></span>
|
823 |
+
</td>
|
824 |
+
<td>
|
825 |
+
<select id="basics-hardcode-name" onchange="flip_hardcode('name')" name="hardcode_name">
|
826 |
+
<option value="no" <?php echo $link->hardcode('name')?'':'selected="selected"'; ?>>update automatically</option>
|
827 |
+
<option value="yes" <?php echo $link->hardcode('name')?'selected="selected"':''; ?>>edit manually</option>
|
828 |
+
</select>
|
829 |
+
</td>
|
830 |
+
</tr>
|
831 |
+
<tr>
|
832 |
+
<th scope="row" width="20%"><?php _e('Short description:') ?></th>
|
833 |
+
<td width="60%">
|
834 |
+
<input id="basics-description-edit" type="text" name="description" value="<?php echo $link_description; ?>" style="width: 95%" />
|
835 |
+
<span id="basics-description-view"><strong><?php echo $link_description; ?></strong></span>
|
836 |
+
</td>
|
837 |
+
<td>
|
838 |
+
<select id="basics-hardcode-description" onchange="flip_hardcode('description')"
|
839 |
+
name="hardcode_description">
|
840 |
+
<option value="no" <?php echo $link->hardcode('description')?'':'selected="selected"'; ?>>update automatically</option>
|
841 |
+
<option value="yes" <?php echo $link->hardcode('description')?'selected="selected"':''; ?>>edit manually</option>
|
842 |
+
</select></td>
|
843 |
+
</tr>
|
844 |
+
<tr>
|
845 |
+
<th width="20%" scope="row"><?php _e('Homepage:') ?></th>
|
846 |
+
<td width="60%">
|
847 |
+
<input id="basics-url-edit" type="text" name="linkurl" value="<?php echo $link_url; ?>" style="width: 95%;" />
|
848 |
+
<a id="basics-url-view" href="<?php echo $link_url; ?>"><?php echo $link_url; ?></a></td>
|
849 |
+
<td>
|
850 |
+
<select id="basics-hardcode-url" onchange="flip_hardcode('url')" name="hardcode_url">
|
851 |
+
<option value="no"<?php echo $link->hardcode('url')?'':' selected="selected"'; ?>>update automatically</option>
|
852 |
+
<option value="yes"<?php echo $link->hardcode('url')?' selected="selected"':''; ?>>edit manually</option>
|
853 |
+
</select></td></tr>
|
854 |
+
|
855 |
+
<tr>
|
856 |
+
<th width="20%"><?php _e('Last update') ?>:</th>
|
857 |
+
<td colspan="2"><?php
|
858 |
+
if (isset($meta['update/last'])) :
|
859 |
+
echo strftime('%x %X', $meta['update/last'])." ";
|
860 |
+
else :
|
861 |
+
echo " none yet";
|
862 |
+
endif;
|
863 |
+
?></td></tr>
|
864 |
+
<tr><th width="20%">Next update:</th>
|
865 |
+
<td colspan="2"><?php
|
866 |
+
$holdem = (isset($meta['update/hold']) ? $meta['update/hold'] : 'scheduled');
|
867 |
+
?>
|
868 |
+
<select name="update_schedule">
|
869 |
+
<option value="scheduled"<?php echo ($holdem=='scheduled')?' selected="selected"':''; ?>>update on schedule <?php
|
870 |
+
echo " (";
|
871 |
+
if (isset($meta['update/ttl']) and is_numeric($meta['update/ttl'])) :
|
872 |
+
if (isset($meta['update/timed']) and $meta['update/timed']=='automatically') :
|
873 |
+
echo 'next: ';
|
874 |
+
$next = $meta['update/last'] + ((int) $meta['update/ttl'] * 60);
|
875 |
+
if (strftime('%x', time()) != strftime('%x', $next)) :
|
876 |
+
echo strftime('%x', $next)." ";
|
877 |
+
endif;
|
878 |
+
echo strftime('%X', $meta['update/last']+((int) $meta['update/ttl']*60));
|
879 |
+
else :
|
880 |
+
echo "every ".$meta['update/ttl']." minute".(($meta['update/ttl']!=1)?"s":"");
|
881 |
+
endif;
|
882 |
+
else:
|
883 |
+
echo "next scheduled update";
|
884 |
+
endif;
|
885 |
+
echo ")";
|
886 |
+
?></option>
|
887 |
+
<option value="next"<?php echo ($holdem=='next')?' selected="selected"':''; ?>>update ASAP</option>
|
888 |
+
<option value="ping"<?php echo ($holdem=='ping')?' selected="selected"':''; ?>>update only when pinged</option>
|
889 |
+
</select></tr>
|
890 |
+
</table>
|
891 |
+
<?php fwp_option_box_closer(); ?>
|
892 |
+
|
893 |
+
<script type="text/javascript">
|
894 |
+
flip_hardcode('name');
|
895 |
+
flip_hardcode('description');
|
896 |
+
flip_hardcode('url');
|
897 |
+
</script>
|
898 |
+
|
899 |
+
<?php fwp_linkedit_periodic_submit(); ?>
|
900 |
+
|
901 |
+
<?php
|
902 |
+
if (!(isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25)) :
|
903 |
+
fwp_option_box_opener('Syndicated Posts', 'syndicatedpostsdiv', 'postbox');
|
904 |
+
?>
|
905 |
+
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
906 |
+
<tr><th width="27%" scope="row" style="vertical-align:top">Publication:</th>
|
907 |
+
<td width="73%" style="vertical-align:top"><ul style="margin:0; list-style:none">
|
908 |
+
<li><label><input type="radio" name="feed_post_status" value="site-default"
|
909 |
+
<?php echo $status['post']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
910 |
+
(currently: <strong><?php echo ($post_status_global ? $post_status_global : 'publish'); ?></strong>)</label></li>
|
911 |
+
<li><label><input type="radio" name="feed_post_status" value="publish"
|
912 |
+
<?php echo $status['post']['publish']; ?> /> Publish posts from this feed immediately</label></li>
|
913 |
+
|
914 |
+
<?php if (SyndicatedPost::use_api('post_status_pending')) : ?>
|
915 |
+
<li><label><input type="radio" name="feed_post_status" value="pending"
|
916 |
+
<?php echo $status['post']['pending']; ?>/> Hold posts from this feed for review; mark as Pending</label></li>
|
917 |
+
<?php endif; ?>
|
918 |
+
|
919 |
+
<li><label><input type="radio" name="feed_post_status" value="draft"
|
920 |
+
<?php echo $status['post']['draft']; ?> /> Save posts from this feed as drafts</label></li>
|
921 |
+
<li><label><input type="radio" name="feed_post_status" value="private"
|
922 |
+
<?php echo $status['post']['private']; ?> /> Save posts from this feed as private posts</label></li>
|
923 |
+
</ul></td>
|
924 |
+
</tr>
|
925 |
+
</table>
|
926 |
+
<?php
|
927 |
+
fwp_option_box_closer();
|
928 |
+
fwp_linkedit_periodic_submit();
|
929 |
+
endif;
|
930 |
+
|
931 |
+
fwp_option_box_opener(__('Categories'), 'categorydiv', 'postbox');
|
932 |
+
fwp_category_box($dogs, 'all syndicated posts from this feed');
|
933 |
+
?>
|
934 |
+
<table>
|
935 |
+
<tr>
|
936 |
+
<th width="20%" scope="row" style="vertical-align:top">Unfamiliar categories:</th>
|
937 |
+
<td width="80%"><p>When one of the categories on a syndicated post is a category that FeedWordPress has not encountered before ...</p>
|
938 |
+
|
939 |
+
<ul style="margin: 0; list-style:none">
|
940 |
+
<li><label><input type="radio" name="unfamiliar_category" value="site-default"<?php echo $unfamiliar['category']['site-default']; ?> /> use the site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
941 |
+
(currently <strong><?php echo FeedWordPress::on_unfamiliar('category'); ?></strong>)</label></li>
|
942 |
+
<li><label><input type="radio" name="unfamiliar_category" value="create"<?php echo $unfamiliar['category']['create']; ?> /> create a new category</label></li>
|
943 |
+
<li><label><input type="radio" name="unfamiliar_category" value="tag"<?php echo $unfamiliar['category']['tag']; ?>/> create a new tag</label></li>
|
944 |
+
<li><label><input type="radio" name="unfamiliar_category" value="default"<?php echo $unfamiliar['category']['default']; ?> /> don't create new categories or tags</label></li>
|
945 |
+
<li><label><input type="radio" name="unfamiliar_category" value="filter"<?php echo $unfamiliar['category']['filter']; ?> /> don't create new categories or tags and don't syndicate posts unless they match at least one familiar category</label></li>
|
946 |
+
</ul></td>
|
947 |
+
</tr>
|
948 |
+
|
949 |
+
<tr>
|
950 |
+
<th width="20%" scope="row" style="vertical-align:top">Multiple categories:</th>
|
951 |
+
<td width="80%">
|
952 |
+
<input type="text" size="20" id="cat_split" name="cat_split" value="<?php if (isset($meta['cat_split'])) : echo htmlspecialchars($meta['cat_split']); endif; ?>" /><br/>
|
953 |
+
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
|
954 |
+
categories in a single category element. The regular expression should match
|
955 |
+
the characters used to separate one category from the next. If the feed uses
|
956 |
+
spaces (like <a href="http://del.icio.us/">del.icio.us</a>), use the pattern "\s".
|
957 |
+
If the feed does not provide multiple categories in a single element, leave this
|
958 |
+
blank.</td>
|
959 |
+
</tr>
|
960 |
+
</table>
|
961 |
+
<?php
|
962 |
+
fwp_option_box_closer();
|
963 |
+
fwp_linkedit_periodic_submit();
|
964 |
+
|
965 |
+
if (isset($wp_db_version) and $wp_db_version >= FWP_SCHEMA_25) :
|
966 |
+
fwp_tags_box($meta['tags']);
|
967 |
+
fwp_linkedit_periodic_submit();
|
968 |
+
endif; ?>
|
969 |
+
|
970 |
+
<?php fwp_option_box_opener('Syndicated Authors', 'authordiv', 'postbox'); ?>
|
971 |
+
<?php $authorlist = fwp_author_list(); ?>
|
972 |
+
<table>
|
973 |
+
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by authors that haven't been syndicated before:</th></tr>
|
974 |
+
<tr>
|
975 |
+
<th style="text-align: left">Posts by new authors</th>
|
976 |
+
<td>
|
977 |
+
<select id="unfamiliar-author" name="unfamiliar_author" onchange="flip_newuser('unfamiliar-author');">
|
978 |
+
<option value="site-default"<?php if (!isset($meta['unfamiliar author'])) : ?>selected="selected"<?php endif; ?>>are handled using site-wide settings</option>
|
979 |
+
<option value="create"<?php if ('create'==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>create a new author account</option>
|
980 |
+
<?php foreach ($authorlist as $author_id => $author_name) : ?>
|
981 |
+
<option value="<?php echo $author_id; ?>"<?php if ($author_id==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>are assigned to <?php echo $author_name; ?></option>
|
982 |
+
<?php endforeach; ?>
|
983 |
+
<option value="newuser">will be assigned to a new user...</option>
|
984 |
+
<option value="filter"<?php if ('filter'==$meta['unfamiliar author']) : ?>selected="selected"<?php endif; ?>>get filtered out</option>
|
985 |
+
</select>
|
986 |
+
</td>
|
987 |
+
<td>
|
988 |
+
<div id="unfamiliar-author-default">Site-wide settings can be set in <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a></div>
|
989 |
+
<div id="unfamiliar-author-newuser">named <input type="text" name="unfamiliar_author_newuser" value="" /></div>
|
990 |
+
</td>
|
991 |
+
</tr>
|
992 |
+
|
993 |
+
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">For posts by specific authors. Blank out a name to delete the rule.</th></tr>
|
994 |
+
|
995 |
+
<?php if (isset($meta['map authors'])) : $i=0; foreach ($meta['map authors'] as $author_rules) : foreach ($author_rules as $author_name => $author_action) : $i++; ?>
|
996 |
+
<tr>
|
997 |
+
<th style="text-align: left">Posts by <input type="text" name="author_rules_name[]" value="<?php echo htmlspecialchars($author_name); ?>" /></th>
|
998 |
+
<td>
|
999 |
+
<select id="author-rules-<?php echo $i; ?>" name="author_rules_action[]" onchange="flip_newuser('author-rules-<?php echo $i; ?>');">
|
1000 |
+
<?php foreach ($authorlist as $local_author_id => $local_author_name) : ?>
|
1001 |
+
<option value="<?php echo $local_author_id; ?>"<?php if ($local_author_id==$author_action) : echo ' selected="selected"'; endif; ?>>are assigned to <?php echo $local_author_name; ?></option>
|
1002 |
+
<?php endforeach; ?>
|
1003 |
+
<option value="newuser">will be assigned to a new user...</option>
|
1004 |
+
<option value="filter"<?php if ('filter'==$author_action) : echo ' selected="selected"'; endif; ?>>get filtered out</option>
|
1005 |
+
</select>
|
1006 |
+
</td>
|
1007 |
+
<td><div id="author-rules-<?php echo $i; ?>-newuser">named <input type="text" name="author_rules_newuser[]" value="" /></div></td>
|
1008 |
+
</tr>
|
1009 |
+
<?php endforeach; endforeach; endif; ?>
|
1010 |
+
|
1011 |
+
<tr><th colspan="3" style="text-align: left; padding-top: 1.0em; border-bottom: 1px dotted black;">Fill in to set up a new rule:</th></tr>
|
1012 |
+
|
1013 |
+
<tr>
|
1014 |
+
<th style="text-align: left">Posts by <input type="text" name="add_author_rule_name" /></th>
|
1015 |
+
<td>
|
1016 |
+
<select id="add-author-rule" name="add_author_rule_action" onchange="flip_newuser('add-author-rule');">
|
1017 |
+
<?php foreach ($authorlist as $author_id => $author_name) : ?>
|
1018 |
+
<option value="<?php echo $author_id; ?>">are assigned to <?php echo $author_name; ?></option>
|
1019 |
+
<?php endforeach; ?>
|
1020 |
+
<option value="newuser">will be assigned to a new user...</option>
|
1021 |
+
<option value="filter">get filtered out</option>
|
1022 |
+
</select>
|
1023 |
+
</td>
|
1024 |
+
<td><div id="add-author-rule-newuser">named <input type="text" name="add_author_rule_newuser" value="" /></div></td>
|
1025 |
+
</tr>
|
1026 |
+
|
1027 |
+
</table>
|
1028 |
+
<?php fwp_option_box_closer(); ?>
|
1029 |
+
|
1030 |
+
<script>
|
1031 |
+
flip_newuser('unfamiliar-author');
|
1032 |
+
<?php for ($j=1; $j<=$i; $j++) : ?>
|
1033 |
+
flip_newuser('author-rules-<?php echo $j; ?>');
|
1034 |
+
<?php endfor; ?>
|
1035 |
+
flip_newuser('add-author-rule');
|
1036 |
+
</script>
|
1037 |
+
|
1038 |
+
<?php
|
1039 |
+
fwp_linkedit_periodic_submit();
|
1040 |
+
fwp_option_box_opener('Comments & Pings', 'commentstatusdiv', 'postbox');
|
1041 |
+
?>
|
1042 |
+
<table class="editform" width="75%" cellspacing="2" cellpadding="5">
|
1043 |
+
<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Comments'); ?>:</th>
|
1044 |
+
<td width="73%"><ul style="margin:0; list-style:none">
|
1045 |
+
<li><label><input type="radio" name="feed_comment_status" value="site-default"
|
1046 |
+
<?php echo $status['comment']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1047 |
+
(currently: <strong><?php echo ($comment_status_global ? $comment_status_global : 'closed'); ?>)</strong></label></li>
|
1048 |
+
<li><label><input type="radio" name="feed_comment_status" value="open"
|
1049 |
+
<?php echo $status['comment']['open']; ?> /> Allow comments on syndicated posts from this feed</label></li>
|
1050 |
+
<li><label><input type="radio" name="feed_comment_status" value="closed"
|
1051 |
+
<?php echo $status['comment']['closed']; ?> /> Don't allow comments on syndicated posts from this feed</label></li>
|
1052 |
+
</ul></td></tr>
|
1053 |
+
|
1054 |
+
<tr><th width="27%" scope="row" style="vertical-align:top"><?php print __('Pings'); ?>:</th>
|
1055 |
+
<td width="73%"><ul style="margin:0; list-style:none">
|
1056 |
+
<li><label><input type="radio" name="feed_ping_status" value="site-default"
|
1057 |
+
<?php echo $status['ping']['site-default']; ?> /> Use site-wide setting from <a href="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/syndication-options.php">Syndication Options</a>
|
1058 |
+
(currently: <strong><?php echo ($ping_status_global ? $ping_status_global : 'closed'); ?>)</strong></label></li>
|
1059 |
+
<li><label><input type="radio" name="feed_ping_status" value="open"
|
1060 |
+
<?php echo $status['ping']['open']; ?> /> Accept pings on syndicated posts from this feed</label></li>
|
1061 |
+
<li><label><input type="radio" name="feed_ping_status" value="closed"
|
1062 |
+
<?php echo $status['ping']['closed']; ?> /> Don't accept pings on syndicated posts from this feed</label></li>
|
1063 |
+
</ul></td></tr>
|
1064 |
+
|
1065 |
+
</table>
|
1066 |
+
<?php fwp_option_box_closer(); ?>
|
1067 |
+
<?php fwp_linkedit_periodic_submit(); ?>
|
1068 |
+
|
1069 |
+
<?php fwp_option_box_opener('Custom Settings (for use in templates)', 'postcustom', 'postbox'); ?>
|
1070 |
+
<div id="postcustomstuff">
|
1071 |
+
<table id="meta-list" cellpadding="3">
|
1072 |
+
<tr>
|
1073 |
+
<th>Key</th>
|
1074 |
+
<th>Value</th>
|
1075 |
+
<th>Action</th>
|
1076 |
+
</tr>
|
1077 |
+
|
1078 |
+
<?php
|
1079 |
+
$i = 0;
|
1080 |
+
foreach ($meta as $key => $value) :
|
1081 |
+
if (!preg_match("\007^((".implode(')|(', $special_settings)."))$\007i", $key)) :
|
1082 |
+
?>
|
1083 |
+
<tr style="vertical-align:top">
|
1084 |
+
<th width="30%" scope="row"><input type="hidden" name="notes[<?php echo $i; ?>][key0]" value="<?php echo wp_specialchars($key, 'both'); ?>" />
|
1085 |
+
<input id="notes-<?php echo $i; ?>-key" name="notes[<?php echo $i; ?>][key1]" value="<?php echo wp_specialchars($key, 'both'); ?>" /></th>
|
1086 |
+
<td width="60%"><textarea rows="2" cols="40" id="notes-<?php echo $i; ?>-value" name="notes[<?php echo $i; ?>][value]"><?php echo wp_specialchars($value, 'both'); ?></textarea></td>
|
1087 |
+
<td width="10%"><select name="notes[<?php echo $i; ?>][action]">
|
1088 |
+
<option value="update">save changes</option>
|
1089 |
+
<option value="delete">delete this setting</option>
|
1090 |
+
</select></td>
|
1091 |
+
</tr>
|
1092 |
+
<?php
|
1093 |
+
$i++;
|
1094 |
+
endif;
|
1095 |
+
endforeach;
|
1096 |
+
?>
|
1097 |
+
<tr>
|
1098 |
+
<th scope="row"><input type="text" size="10" name="notes[<?php echo $i; ?>][key1]" value="" /></th>
|
1099 |
+
<td><textarea name="notes[<?php echo $i; ?>][value]" rows="2" cols="40"></textarea></td>
|
1100 |
+
<td><em>add new setting...</em><input type="hidden" name="notes[<?php echo $i; ?>][action]" value="update" /></td>
|
1101 |
+
</tr>
|
1102 |
+
</table>
|
1103 |
+
<?php fwp_option_box_closer(); ?>
|
1104 |
+
|
1105 |
+
<?php fwp_linkedit_periodic_submit(); ?>
|
1106 |
+
</div> <!-- id="post-body" -->
|
1107 |
+
</div> <!-- id="poststuff" -->
|
1108 |
+
</div>
|
1109 |
+
<?php
|
1110 |
+
endif;
|
1111 |
+
return false; // Don't continue
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
function fwp_multidelete_page () {
|
1115 |
+
global $wpdb;
|
1116 |
+
|
1117 |
+
check_admin_referer(); // Make sure the referers are kosher
|
1118 |
+
|
1119 |
+
$link_ids = (isset($_REQUEST['link_ids']) ? $_REQUEST['link_ids'] : array());
|
1120 |
+
if (isset($_REQUEST['link_id'])) : array_push($link_ids, $_REQUEST['link_id']); endif;
|
1121 |
+
|
1122 |
+
if (!current_user_can('manage_links')):
|
1123 |
+
die (__("Cheatin' uh ?"));
|
1124 |
+
elseif (isset($GLOBALS['fwp_post']['confirm']) and $GLOBALS['fwp_post']['confirm']=='Delete'):
|
1125 |
+
foreach ($GLOBALS['fwp_post']['link_action'] as $link_id => $what) :
|
1126 |
+
$do_it[$what][] = $link_id;
|
1127 |
+
endforeach;
|
1128 |
+
|
1129 |
+
$alter = array();
|
1130 |
+
if (count($do_it['hide']) > 0) :
|
1131 |
+
$hidem = "(".implode(', ', $do_it['hide']).")";
|
1132 |
+
$alter[] = "
|
1133 |
+
UPDATE $wpdb->links
|
1134 |
+
SET link_visible = 'N'
|
1135 |
+
WHERE link_id IN {$hidem}
|
1136 |
+
";
|
1137 |
+
endif;
|
1138 |
+
|
1139 |
+
if (count($do_it['nuke']) > 0) :
|
1140 |
+
$nukem = "(".implode(', ', $do_it['nuke']).")";
|
1141 |
+
|
1142 |
+
// Make a list of the items syndicated from this feed...
|
1143 |
+
$post_ids = $wpdb->get_col("
|
1144 |
+
SELECT post_id FROM $wpdb->postmeta
|
1145 |
+
WHERE meta_key = 'syndication_feed_id'
|
1146 |
+
AND meta_value IN {$nukem}
|
1147 |
+
");
|
1148 |
+
|
1149 |
+
// ... and kill them all
|
1150 |
+
if (count($post_ids) > 0) :
|
1151 |
+
foreach ($post_ids as $post_id) :
|
1152 |
+
wp_delete_post($post_id);
|
1153 |
+
endforeach;
|
1154 |
+
endif;
|
1155 |
+
|
1156 |
+
$alter[] = "
|
1157 |
+
DELETE FROM $wpdb->links
|
1158 |
+
WHERE link_id IN {$nukem}
|
1159 |
+
";
|
1160 |
+
endif;
|
1161 |
+
|
1162 |
+
if (count($do_it['delete']) > 0) :
|
1163 |
+
$deletem = "(".implode(', ', $do_it['delete']).")";
|
1164 |
+
|
1165 |
+
// Make the items syndicated from this feed appear to be locally-authored
|
1166 |
+
$alter[] = "
|
1167 |
+
DELETE FROM $wpdb->postmeta
|
1168 |
+
WHERE meta_key = 'syndication_feed_id'
|
1169 |
+
AND meta_value IN {$deletem}
|
1170 |
+
";
|
1171 |
+
|
1172 |
+
// ... and delete the links themselves.
|
1173 |
+
$alter[] = "
|
1174 |
+
DELETE FROM $wpdb->links
|
1175 |
+
WHERE link_id IN {$deletem}
|
1176 |
+
";
|
1177 |
+
endif;
|
1178 |
+
|
1179 |
+
$errs = array(); $success = array ();
|
1180 |
+
foreach ($alter as $sql) :
|
1181 |
+
$result = $wpdb->query($sql);
|
1182 |
+
if (!$result):
|
1183 |
+
$errs[] = mysql_error();
|
1184 |
+
endif;
|
1185 |
+
endforeach;
|
1186 |
+
|
1187 |
+
if (count($alter) > 0) :
|
1188 |
+
echo "<div class=\"updated\">\n";
|
1189 |
+
if (count($errs) > 0) :
|
1190 |
+
echo "There were some problems processing your ";
|
1191 |
+
echo "unsubscribe request. [SQL: ".implode('; ', $errs)."]";
|
1192 |
+
else :
|
1193 |
+
echo "Your unsubscribe request(s) have been processed.";
|
1194 |
+
endif;
|
1195 |
+
echo "</div>\n";
|
1196 |
+
endif;
|
1197 |
+
|
1198 |
+
return true; // Continue on to Syndicated Sites listing
|
1199 |
+
else :
|
1200 |
+
$targets = $wpdb->get_results("
|
1201 |
+
SELECT * FROM $wpdb->links
|
1202 |
+
WHERE link_id IN (".implode(",",$link_ids).")
|
1203 |
+
");
|
1204 |
+
?>
|
1205 |
+
<form action="admin.php?page=<?php print $GLOBALS['fwp_path'] ?>/<?php echo basename(__FILE__); ?>" method="post">
|
1206 |
+
<div class="wrap">
|
1207 |
+
<input type="hidden" name="action" value="Unsubscribe" />
|
1208 |
+
<input type="hidden" name="confirm" value="Delete" />
|
1209 |
+
|
1210 |
+
<h2>Unsubscribe from Syndicated Links:</h2>
|
1211 |
+
<?php foreach ($targets as $link) :
|
1212 |
+
$link_url = wp_specialchars($link->link_url, 1);
|
1213 |
+
$link_name = wp_specialchars($link->link_name, 1);
|
1214 |
+
$link_description = wp_specialchars($link->link_description, 'both');
|
1215 |
+
$link_rss = wp_specialchars($link->link_rss, 'both');
|
1216 |
+
?>
|
1217 |
+
<fieldset>
|
1218 |
+
<legend><?php echo $link_name; ?></legend>
|
1219 |
+
<table class="editform" width="100%" cellspacing="2" cellpadding="5">
|
1220 |
+
<tr><th scope="row" width="20%"><?php _e('Feed URI:') ?></th>
|
1221 |
+
<td width="80%"><a href="<?php echo $link_rss; ?>"><?php echo $link_rss; ?></a></td></tr>
|
1222 |
+
<tr><th scope="row" width="20%"><?php _e('Short description:') ?></th>
|
1223 |
+
<td width="80%"><?php echo $link_description; ?></span></td></tr>
|
1224 |
+
<tr><th width="20%" scope="row"><?php _e('Homepage:') ?></th>
|
1225 |
+
<td width="80%"><a href="<?php echo $link_url; ?>"><?php echo $link_url; ?></a></td></tr>
|
1226 |
+
<tr style="vertical-align:top"><th width="20%" scope="row">Subscription <?php _e('Options') ?>:</th>
|
1227 |
+
<td width="80%"><ul style="margin:0; padding: 0; list-style: none">
|
1228 |
+
<li><input type="radio" id="hide-<?php echo $link->link_id; ?>"
|
1229 |
+
name="link_action[<?php echo $link->link_id; ?>]" value="hide" />
|
1230 |
+
<label for="hide-<?php echo $link->link_id; ?>">Turn off the subscription for this
|
1231 |
+
syndicated link<br/><span style="font-size:smaller">(Keep the feed information
|
1232 |
+
and all the posts from this feed in the database, but don't syndicate any
|
1233 |
+
new posts from the feed.)</span></label></li>
|
1234 |
+
<li><input type="radio" id="nuke-<?php echo $link->link_id; ?>"
|
1235 |
+
name="link_action[<?php echo $link->link_id; ?>]" value="nuke" />
|
1236 |
+
<label for="nuke-<?php echo $link->link_id; ?>">Delete this syndicated link and all the
|
1237 |
+
posts that were syndicated from it</label></li>
|
1238 |
+
<li><input type="radio" id="delete-<?php echo $link->link_id; ?>"
|
1239 |
+
name="link_action[<?php echo $link->link_id; ?>]" value="delete" />
|
1240 |
+
<label for="delete-<?php echo $link->link_id; ?>">Delete this syndicated link, but
|
1241 |
+
<em>keep</em> posts that were syndicated from it (as if they were authored
|
1242 |
+
locally).</label></li>
|
1243 |
+
<li><input type="radio" id="nothing-<?php echo $link->link_id; ?>"
|
1244 |
+
name="link_action[<?php echo $link->link_id; ?>]" value="nothing" />
|
1245 |
+
<label for="nothing-<?php echo $link->link_id; ?>">Keep this feed as it is. I changed
|
1246 |
+
my mind.</label></li>
|
1247 |
+
</ul>
|
1248 |
+
</table>
|
1249 |
+
</fieldset>
|
1250 |
+
<?php endforeach; ?>
|
1251 |
+
|
1252 |
+
<div class="submit">
|
1253 |
+
<input class="delete" type="submit" name="submit" value="<?php _e('Unsubscribe from selected feeds »') ?>" />
|
1254 |
+
</div>
|
1255 |
+
</div>
|
1256 |
+
<?php
|
1257 |
+
return false; // Don't continue on to Syndicated Sites listing
|
1258 |
+
endif;
|
1259 |
+
}
|
1260 |
+
|
1261 |
+
fwp_syndication_manage_page();
|
1262 |
+
|