summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordonncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36>2006-11-30 18:54:22 +0000
committerdonncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36>2006-11-30 18:54:22 +0000
commit9415bbca12c01c39da58e0ed2c4e6b44ff833e5d (patch)
tree72e6c3da0cf5b18f808b7b5002ffd41f3edc0904
parent475ef251608d4d8a4d44a86d99693c416a1159fd (diff)
downloadwordpress-mu-9415bbca12c01c39da58e0ed2c4e6b44ff833e5d.tar.gz
wordpress-mu-9415bbca12c01c39da58e0ed2c4e6b44ff833e5d.tar.xz
wordpress-mu-9415bbca12c01c39da58e0ed2c4e6b44ff833e5d.zip
WP Merge to 4559
git-svn-id: http://svn.automattic.com/wordpress-mu/trunk@816 7be80a69-a1ef-0310-a953-fb0f7c49ff36
-rw-r--r--wp-admin/admin-functions.php54
-rw-r--r--wp-admin/cat-js.php2
-rw-r--r--wp-admin/comment.php16
-rw-r--r--wp-admin/dbx-admin-key-js.php24
-rw-r--r--wp-admin/edit-comments.php10
-rw-r--r--wp-admin/edit-page-form.php2
-rw-r--r--wp-admin/edit.php4
-rw-r--r--wp-admin/export.php65
-rw-r--r--wp-admin/import/blogger.php8
-rw-r--r--wp-admin/import/wordpress.php34
-rw-r--r--wp-admin/link-add.php2
-rw-r--r--wp-admin/link-manager.php4
-rw-r--r--wp-admin/moderation.php2
-rw-r--r--wp-admin/plugins.php10
-rw-r--r--wp-admin/upgrade-functions.php3
-rw-r--r--wp-admin/upload-js.php36
-rw-r--r--wp-admin/upload.css1
-rw-r--r--wp-admin/users.php8
-rw-r--r--wp-commentsrss2.php2
-rw-r--r--wp-includes/bookmark-template.php5
-rw-r--r--wp-includes/class-simplepie.php5285
-rw-r--r--wp-includes/default-filters.php5
-rw-r--r--wp-includes/formatting.php4
-rw-r--r--wp-includes/general-template.php6
-rw-r--r--wp-includes/gettext.php6
-rw-r--r--wp-includes/js/autosave.js.php10
-rw-r--r--wp-includes/js/list-manipulation-js.php4
-rw-r--r--wp-includes/js/tinymce/wp-mce-help.php2
-rw-r--r--wp-includes/js/wp-ajax-js.php2
-rw-r--r--wp-includes/kses.php2
-rw-r--r--wp-includes/post-template.php14
-rw-r--r--wp-includes/query.php34
-rw-r--r--wp-includes/rewrite.php10
-rw-r--r--wp-includes/theme.php33
-rw-r--r--wp-includes/wp-db.php87
35 files changed, 374 insertions, 5422 deletions
diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php
index 8da7ff0..aaf16ca 100644
--- a/wp-admin/admin-functions.php
+++ b/wp-admin/admin-functions.php
@@ -444,7 +444,7 @@ function edit_user( $user_id = 0 ) {
$user->user_email = wp_specialchars( trim( $_POST['email'] ));
if ( isset( $_POST['url'] ) ) {
$user->user_url = wp_specialchars( trim( $_POST['url'] ));
- $user->user_url = preg_match( '/^(https?|ftps?|mailto|news|gopher):/is', $user->user_url ) ? $user->user_url : 'http://'.$user->user_url;
+ $user->user_url = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url;
}
if ( isset( $_POST['first_name'] ))
$user->first_name = wp_specialchars( trim( $_POST['first_name'] ));
@@ -558,7 +558,7 @@ function edit_link( $link_id = '' ) {
wp_die( __("Cheatin' uh ?" ));
$_POST['link_url'] = wp_specialchars( $_POST['link_url'] );
- $_POST['link_url'] = preg_match( '/^(https?|ftps?|mailto|news|gopher):/is', $_POST['link_url'] ) ? $_POST['link_url'] : 'http://' . $_POST['link_url'];
+ $_POST['link_url'] = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $_POST['link_url']) ? $_POST['link_url'] : 'http://' . $_POST['link_url'];
$_POST['link_name'] = wp_specialchars( $_POST['link_name'] );
$_POST['link_image'] = wp_specialchars( $_POST['link_image'] );
$_POST['link_rss'] = wp_specialchars( $_POST['link_rss'] );
@@ -598,7 +598,10 @@ function return_categories_list( $parent = 0 ) {
}
function sort_cats( $cat1, $cat2 ) {
- return strcasecmp( $cat1['cat_name'], $cat2['cat_name'] );
+ if ( $cat1['checked'] || $cat2['checked'] )
+ return ( $cat1['checked'] && !$cat2['checked'] ) ? -1 : 1;
+ else
+ return strcasecmp( $cat1['cat_name'], $cat2['cat_name'] );
}
function get_nested_categories( $default = 0, $parent = 0 ) {
@@ -758,7 +761,7 @@ function _cat_row( $category, $level, $name_override = false ) {
<th scope='row' style='text-align: center'>$category->cat_ID</th>
<td>" . ( $name_override ? $name_override : $pad . ' ' . $category->cat_name ) . "</td>
<td>$category->category_description</td>
- <td align='center'>$category->category_count</td>
+ <td align='center'><a href='edit.php?cat=$category->cat_ID'>$category->category_count</a></td>
<td align='center'>$category->link_count</td>
<td>$edit</td>\n\t</tr>\n";
}
@@ -1037,7 +1040,8 @@ function meta_form() {
GROUP BY meta_key
ORDER BY meta_id DESC
LIMIT $limit" );
- natcasesort( $keys );
+ if ( $keys )
+ natcasesort($keys);
?>
<h3><?php _e( 'Add a new custom field:' ) ?></h3>
<table id="newmeta" cellspacing="3" cellpadding="3">
@@ -1991,13 +1995,14 @@ function wp_import_handle_upload() {
return $file;
$url = $file['url'];
+ $type = $file['type'];
$file = addslashes( $file['file'] );
$filename = basename( $file );
// Construct the object array
$object = array( 'post_title' => $filename,
'post_content' => $url,
- 'post_mime_type' => 'import',
+ 'post_mime_type' => $type,
'guid' => $url
);
@@ -2077,6 +2082,43 @@ function wp_reset_vars( $vars ) {
}
}
+
+function wp_check_for_changed_slugs($post_id) {
+ if ( !strlen($_POST['wp-old-slug']) )
+ return $post_id;
+
+ $post = &get_post($post_id);
+
+ // we're only concerned with published posts
+ if ( $post->post_status != 'publish' || $post->post_type != 'post' )
+ return $post_id;
+
+ // only bother if the slug has changed
+ if ( $post->post_name == $_POST['wp-old-slug'] )
+ return $post_id;
+
+ $old_slugs = get_post_meta($post_id, '_wp_old_slug');
+
+ // if we haven't added this old slug before, add it now
+ if ( !count($old_slugs) || !in_array($_POST['wp-old-slug'], $old_slugs) )
+ add_post_meta($post_id, '_wp_old_slug', $_POST['wp-old-slug']);
+
+ // if the new slug was used previously, delete it from the list
+ if ( in_array($post->post_name, $old_slugs) )
+ delete_post_meta($post_id, '_wp_old_slug', $post->post_name);
+
+ return $post_id;
+}
+
+
+function wp_remember_old_slug() {
+ global $post;
+ $name = wp_specialchars($post->post_name); // just in case
+ if ( strlen($name) )
+ echo '<input type="hidden" id="wp-old-slug" name="wp-old-slug" value="' . $name . '" />';
+}
+
+
// If siteurl or home changed, reset cookies and flush rewrite rules.
function update_home_siteurl( $old_value, $value ) {
global $wp_rewrite, $user_login, $user_pass_md5;
diff --git a/wp-admin/cat-js.php b/wp-admin/cat-js.php
index e1b0e28..35df2c8 100644
--- a/wp-admin/cat-js.php
+++ b/wp-admin/cat-js.php
@@ -8,7 +8,7 @@ function newCatAddIn() {
var jaxcat = $('jaxcat');
if ( !jaxcat )
return false;
- jaxcat.update('<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="<?php _e('Add'); ?>"/><span id="howto"><?php _e('Separate multiple categories with commas.'); ?></span></span>');
+ jaxcat.update('<span id="ajaxcat"><input type="text" name="newcat" id="newcat" size="16" autocomplete="off"/><input type="button" name="Button" id="catadd" value="<?php echo js_escape(__('Add')); ?>"/><span id="howto"><?php js_escape(__('Separate multiple categories with commas.')); ?></span></span>');
$('newcat').onkeypress = function(e) { return killSubmit("catList.ajaxAdder('category','jaxcat');", e); };
$('catadd').onclick = function() { catList.ajaxAdder('category', 'jaxcat'); };
}
diff --git a/wp-admin/comment.php b/wp-admin/comment.php
index 8ce3cd8..a583264 100644
--- a/wp-admin/comment.php
+++ b/wp-admin/comment.php
@@ -18,7 +18,7 @@ case 'editcomment':
$comment = (int) $_GET['c'];
if ( ! $comment = get_comment($comment) )
- wp_die(sprintf(__('Oops, no comment with this ID. <a href="%s">Go back</a>!'), 'javascript:history.go(-1)'));
+ wp_die(__('Oops, no comment with this ID.').sprintf(' <a href="%s">'.__('Go back').'</a>!', 'javascript:history.go(-1)'));
if ( !current_user_can('edit_post', $comment->comment_post_ID) )
wp_die( __('You are not allowed to edit comments on this post.') );
@@ -40,7 +40,7 @@ case 'mac':
$nonce_action .= $comment;
if ( ! $comment = get_comment($comment) )
- wp_die(sprintf(__('Oops, no comment with this ID. <a href="%s">Go back</a>!'), 'edit.php'));
+ wp_die(__('Oops, no comment with this ID.').sprintf(' <a href="%s">'.__('Go back').'</a>!', 'edit.php'));
if ( !current_user_can('edit_post', $comment->comment_post_ID) )
wp_die( 'cdc' == $action ? __('You are not allowed to delete comments on this post.') : __('You are not allowed to edit comments on this post, so you cannot approve this comment.') );
@@ -49,11 +49,11 @@ case 'mac':
<div class="narrow">
<?php if ( 'spam' == $_GET['dt'] ) { ?>
-<p><?php _e('<strong>Caution:</strong> You are about to mark the following comment as spam:'); ?></p>
+<p><?php echo '<strong>'.__('Caution:').'</strong> '.__('You are about to mark the following comment as spam:'); ?></p>
<?php } elseif ( 'cdc' == $action ) { ?>
-<p><?php _e('<strong>Caution:</strong> You are about to delete the following comment:'); ?></p>
+<p><?php echo '<strong>'.__('Caution:').'</strong> '.__('You are about to delete the following comment:'); ?></p>
<?php } else { ?>
-<p><?php _e('<strong>Caution:</strong> You are about to approve the following comment:'); ?></p>
+<p><?php echo '<strong>'.__('Caution:').'</strong> '.__('You are about to approve the following comment:'); ?></p>
<?php } ?>
<p><?php _e('Are you sure you want to do that?'); ?></p>
@@ -116,7 +116,7 @@ case 'deletecomment':
}
if ( ! $comment = get_comment($comment) )
- wp_die(sprintf(__('Oops, no comment with this ID. <a href="%s">Go back</a>!'), 'edit-comments.php'));
+ wp_die(__('Oops, no comment with this ID.').sprintf(' <a href="%s">'.__('Go back').'</a>!', 'edit-comments.php'));
if ( !current_user_can('edit_post', $comment->comment_post_ID) )
wp_die( __('You are not allowed to edit comments on this post.') );
@@ -145,7 +145,7 @@ case 'unapprovecomment':
}
if ( ! $comment = get_comment($comment) )
- wp_die(sprintf(__('Oops, no comment with this ID. <a href="%s">Go back</a>!'), 'edit.php'));
+ wp_die(__('Oops, no comment with this ID.').sprintf(' <a href="%s">'.__('Go back').'</a>!', 'edit.php'));
if ( !current_user_can('edit_post', $comment->comment_post_ID) )
wp_die( __('You are not allowed to edit comments on this post, so you cannot disapprove this comment.') );
@@ -171,7 +171,7 @@ case 'approvecomment':
}
if ( ! $comment = get_comment($comment) )
- wp_die(sprintf(__('Oops, no comment with this ID. <a href="%s">Go back</a>!'), 'edit.php'));
+ wp_die(__('Oops, no comment with this ID.').sprintf(' <a href="%s">'.__('Go back').'</a>!', 'edit.php'));
if ( !current_user_can('edit_post', $comment->comment_post_ID) )
wp_die( __('You are not allowed to edit comments on this post, so you cannot approve this comment.') );
diff --git a/wp-admin/dbx-admin-key-js.php b/wp-admin/dbx-admin-key-js.php
index 9746a8c..eb5e1a4 100644
--- a/wp-admin/dbx-admin-key-js.php
+++ b/wp-admin/dbx-admin-key-js.php
@@ -32,12 +32,12 @@ addLoadEvent( function()
'10', // animate re-ordering [frames per transition, or '0' for no effect]
'yes', // include open/close toggle buttons ['yes'|'no']
'closed', // default state ['open'|'closed']
- 'open', // word for "open", as in "open this box"
- 'close', // word for "close", as in "close this box"
- 'click-down and drag to move this box', // sentence for "move this box" by mouse
- 'click to %toggle% this box', // pattern-match sentence for "(open|close) this box" by mouse
- 'use the arrow keys to move this box', // sentence for "move this box" by keyboard
- ', or press the enter key to %toggle% it', // pattern-match sentence-fragment for "(open|close) this box" by keyboard
+ '<?php echo js_escape(__('open')); ?>', // word for "open", as in "open this box"
+ '<?php echo js_escape(__('close')); ?>', // word for "close", as in "close this box"
+ '<?php echo js_escape(__('click-down and drag to move this box')); ?>', // sentence for "move this box" by mouse
+ '<?php echo js_escape(__('click to %toggle% this box')); ?>', // pattern-match sentence for "(open|close) this box" by mouse
+ '<?php echo js_escape(__('use the arrow keys to move this box')); ?>', // sentence for "move this box" by keyboard
+ '<?php echo js_escape(__(', or press the enter key to %toggle% it')); ?>', // pattern-match sentence-fragment for "(open|close) this box" by keyboard
'%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts
);
@@ -57,12 +57,12 @@ addLoadEvent( function()
'10', // animate re-ordering [frames per transition, or '0' for no effect]
'yes', // include open/close toggle buttons ['yes'|'no']
'closed', // default state ['open'|'closed']
- 'open', // word for "open", as in "open this box"
- 'close', // word for "close", as in "close this box"
- 'click-down and drag to move this box', // sentence for "move this box" by mouse
- 'click to %toggle% this box', // pattern-match sentence for "(open|close) this box" by mouse
- 'use the arrow keys to move this box', // sentence for "move this box" by keyboard
- ', or press the enter key to %toggle% it', // pattern-match sentence-fragment for "(open|close) this box" by keyboard
+ '<?php echo js_escape(__('open')); ?>', // word for "open", as in "open this box"
+ '<?php echo js_escape(__('close')); ?>', // word for "close", as in "close this box"
+ '<?php echo js_escape(__('click-down and drag to move this box')); ?>', // sentence for "move this box" by mouse
+ '<?php echo js_escape(__('click to %toggle% this box')); ?>', // pattern-match sentence for "(open|close) this box" by mouse
+ '<?php echo js_escape(__('use the arrow keys to move this box')); ?>', // sentence for "move this box" by keyboard
+ '<?php echo js_escape(__(', or press the enter key to %toggle% it')); ?>', // pattern-match sentence-fragment for "(open|close) this box" by keyboard
'%mytitle% [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts
);
});
diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php
index 488a055..fda618c 100644
--- a/wp-admin/edit-comments.php
+++ b/wp-admin/edit-comments.php
@@ -157,12 +157,12 @@ $start = " start='$offset'";
<?php
if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
echo " <a href='comment.php?action=editcomment&amp;c=".$comment->comment_ID."'>" . __('Edit') . '</a>';
- echo ' | <a href="' . wp_nonce_url('comment.php?action=deletecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . '" onclick="return deleteSomething( \'comment\', ' . $comment->comment_ID . ', \'' . sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), js_escape($comment->comment_author)) . "', theCommentList );\">" . __('Delete') . '</a> ';
+ echo ' | <a href="' . wp_nonce_url('comment.php?action=deletecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . '" onclick="return deleteSomething( \'comment\', ' . $comment->comment_ID . ', \'' . js_escape(sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), $comment->comment_author)) . "', theCommentList );\">" . __('Delete') . '</a> ';
if ( ('none' != $comment_status) && ( current_user_can('moderate_comments') ) ) {
echo '<span class="unapprove"> | <a href="' . wp_nonce_url('comment.php?action=unapprovecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'unapprove-comment_' . $comment->comment_ID) . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\', theCommentList );">' . __('Unapprove') . '</a> </span>';
echo '<span class="approve"> | <a href="' . wp_nonce_url('comment.php?action=approvecomment&amp;p=' . $comment->comment_post_ID . '&amp;c=' . $comment->comment_ID, 'approve-comment_' . $comment->comment_ID) . '" onclick="return dimSomething( \'comment\', ' . $comment->comment_ID . ', \'unapproved\', theCommentList );">' . __('Approve') . '</a> </span>';
}
- echo " | <a href=\"" . wp_nonce_url("comment.php?action=deletecomment&amp;dt=spam&amp;p=" . $comment->comment_post_ID . "&amp;c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . sprintf(__("You are about to mark as spam this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to mark as spam."), js_escape( $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . "</a> ";
+ echo " | <a href=\"" . wp_nonce_url("comment.php?action=deletecomment&amp;dt=spam&amp;p=" . $comment->comment_post_ID . "&amp;c=" . $comment->comment_ID, 'delete-comment_' . $comment->comment_ID) . "\" onclick=\"return deleteSomething( 'comment-as-spam', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to mark as spam this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to mark as spam."), $comment->comment_author)) . "', theCommentList );\">" . __('Spam') . "</a> ";
}
$post = get_post($comment->comment_post_ID);
$post_title = wp_specialchars( $post->post_title, 'double' );
@@ -223,14 +223,14 @@ $post_title = ('' == $post_title) ? "# $comment->comment_post_ID" : $post_title;
<td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
echo "<a href='comment.php?action=editcomment&amp;c=$comment->comment_ID' class='edit'>" . __('Edit') . "</a>"; } ?></td>
<td><?php if ( current_user_can('edit_post', $comment->comment_post_ID) ) {
- echo "<a href=\"comment.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;c=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), js_escape( $comment->comment_author )) . "', theCommentList );\" class='delete'>" . __('Delete') . "</a> ";
+ echo "<a href=\"comment.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;c=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), $comment->comment_author )) . "', theCommentList );\" class='delete'>" . __('Delete') . "</a> ";
} ?></td>
</tr>
<?php
} // end foreach
?></table>
-<p class="submit"><input type="submit" name="delete_button" class="delete" value="<?php _e('Delete Checked Comments &raquo;') ?>" onclick="var numchecked = getNumChecked(document.getElementById('deletecomments')); if(numchecked < 1) { alert('<?php _e("Please select some comments to delete"); ?>'); return false } return confirm('<?php printf(__("You are about to delete %s comments permanently \\n \'Cancel\' to stop, \'OK\' to delete."), "' + numchecked + '"); ?>')" />
- <input type="submit" name="spam_button" value="<?php _e('Mark Checked Comments as Spam &raquo;') ?>" onclick="return confirm('<?php _e("You are about to mark these comments as spam \\n \'Cancel\' to stop, \'OK\' to mark as spam.") ?>')" /></p>
+<p class="submit"><input type="submit" name="delete_button" class="delete" value="<?php _e('Delete Checked Comments &raquo;') ?>" onclick="var numchecked = getNumChecked(document.getElementById('deletecomments')); if(numchecked < 1) { alert('<?php echo js_escape(__("Please select some comments to delete")); ?>'); return false } return confirm('<?php echo js_escape(sprintf(__("You are about to delete %s comments permanently \\n \'Cancel\' to stop, \'OK\' to delete.")), "' + numchecked + '"); ?>')" />
+ <input type="submit" name="spam_button" value="<?php _e('Mark Checked Comments as Spam &raquo;') ?>" onclick="return confirm('<?php echo js_escape(__("You are about to mark these comments as spam \\n \'Cancel\' to stop, \'OK\' to mark as spam.")); ?>')" /></p>
</form>
<div id="ajax-response"></div>
<?php
diff --git a/wp-admin/edit-page-form.php b/wp-admin/edit-page-form.php
index 5f80f26..42135ce 100644
--- a/wp-admin/edit-page-form.php
+++ b/wp-admin/edit-page-form.php
@@ -188,7 +188,7 @@ list_meta($metadata);
<?php if ('edit' == $action) :
$delete_nonce = wp_create_nonce( 'delete-page_' . $post_ID );
if ( current_user_can('delete_page', $post->ID) ) ?>
- <input name="deletepost" class="button delete" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this page') ?>" <?php echo "onclick=\"if ( confirm('" . sprintf(__("You are about to delete this page \'%s\'\\n \'Cancel\' to stop, \'OK\' to delete."), js_escape($post->post_title) ) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
+ <input name="deletepost" class="button delete" type="submit" id="deletepost" tabindex="10" value="<?php _e('Delete this page') ?>" <?php echo "onclick=\"if ( confirm('" . js_escape(sprintf(__("You are about to delete this page \'%s\'\\n \'Cancel\' to stop, \'OK\' to delete."), $post->post_title )) . "') ) { document.forms.post._wpnonce.value = '$delete_nonce'; return true;}return false;\""; ?> />
<?php endif; ?>
</div>
diff --git a/wp-admin/edit.php b/wp-admin/edit.php
index 395bc6b..529ca15 100644
--- a/wp-admin/edit.php
+++ b/wp-admin/edit.php
@@ -127,11 +127,11 @@ if ( count($arc_result) ) { ?>
<?php
// define the columns to display, the syntax is 'internal name' => 'display name'
$posts_columns = array(
- 'id' => __('ID'),
+ 'id' => '<div style="text-align: center">' . __('ID') . '</div>',
'date' => __('When'),
'title' => __('Title'),
'categories' => __('Categories'),
- 'comments' => __('Comments'),
+ 'comments' => '<div style="text-align: center">' . __('Comments') . '</div>',
'author' => __('Author')
);
$posts_columns = apply_filters('manage_posts_columns', $posts_columns);
diff --git a/wp-admin/export.php b/wp-admin/export.php
index 8f740fc..2f69320 100644
--- a/wp-admin/export.php
+++ b/wp-admin/export.php
@@ -61,6 +61,68 @@ if ( isset( $_GET['author'] ) && $_GET['author'] != 'all' ) {
}
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC");
+
+$categories = (array) $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories LEFT JOIN $wpdb->post2cat ON (category_id = cat_id) LEFT JOIN $wpdb->posts ON (post_id <=> id) $where GROUP BY cat_id");
+
+function wxr_missing_parents($categories) {
+ if ( !is_array($categories) || empty($categories) )
+ return array();
+
+ foreach ( $categories as $category )
+ $parents[$category->cat_ID] = $category->category_parent;
+
+ $parents = array_unique(array_diff($parents, array_keys($parents)));
+
+ if ( $zero = array_search('0', $parents) )
+ unset($parents[$zero]);
+
+ return $parents;
+}
+
+while ( $parents = wxr_missing_parents($categories) ) {
+ $found_parents = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename, category_description, category_parent, posts_private, links_private FROM $wpdb->categories WHERE cat_ID IN (" . join(', ', $parents) . ")");
+ if ( is_array($found_parents) && count($found_parents) )
+ $categories = array_merge($categories, $found_parents);
+ else
+ break;
+}
+
+// Put them in order to be inserted with no child going before its parent
+$pass = 0;
+$passes = 1000 + count($categories);
+while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) {
+ if ( $cat->category_parent == 0 || isset($cats[$cat->category_parent]) ) {
+ $cats[$cat->cat_ID] = $cat;
+ } else {
+ $categories[] = $cat;
+ }
+}
+unset($categories);
+
+function wxr_cdata($str) {
+ if ( seems_utf8($str) == false )
+ $str = utf8_encode($str);
+
+ // $str = ent2ncr(wp_specialchars($str));
+
+ $str = "<![CDATA[$str" . ( ( substr($str, -1) == ']' ) ? ' ' : '') . "]]>";
+
+ return $str;
+}
+
+function wxr_cat_name($c) {
+ if ( empty($c->cat_name) )
+ return;
+
+ echo '<wp:cat_name>' . wxr_cdata($c->cat_name) . '</wp:cat_name>';
+}
+
+function wxr_category_description($c) {
+ if ( empty($c->category_description) )
+ return;
+
+ echo '<wp:category_description>' . wxr_cdata($c->category_description) . '</wp:category_description>';
+}
?>
<!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. -->
<!-- It contains information about your blog's posts, comments, and categories. -->
@@ -87,6 +149,9 @@ $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_dat
<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></pubDate>
<generator>http://wordpress.org/?v=<?php bloginfo_rss('version'); ?></generator>
<language><?php echo get_option('rss_language'); ?></language>
+<?php if ( $cats ) : foreach ( $cats as $c ) : ?>
+ <wp:category><wp:category_nicename><?php echo $c->category_nicename; ?></wp:category_nicename><wp:category_parent><?php echo $c->category_parent ? $cats[$c->category_parent]->cat_name : ''; ?></wp:category_parent><wp:posts_private><?php echo $c->posts_private ? '1' : '0'; ?></wp:posts_private><wp:links_private><?php echo $c->links_private ? '1' : '0'; ?></wp:links_private><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category>
+<?php endforeach; endif; ?>
<?php do_action('rss2_head'); ?>
<?php if ($posts) { foreach ($posts as $post) { start_wp(); ?>
<item>
diff --git a/wp-admin/import/blogger.php b/wp-admin/import/blogger.php
index d7df5ad..060a5e9 100644
--- a/wp-admin/import/blogger.php
+++ b/wp-admin/import/blogger.php
@@ -10,7 +10,7 @@ class Blogger_Import {
$title = __('Import Blogger');
$welcome = __('Howdy! This importer allows you to import posts and comments from your Blogger account into your WordPress blog.');
$noiframes = __('This feature requires iframe support.');
- $warning = __('This will delete everything saved by the Blogger importer except your posts and comments. Are you sure you want to do this?');
+ $warning = js_escape(__('This will delete everything saved by the Blogger importer except your posts and comments. Are you sure you want to do this?'));
$reset = __('Reset this importer');
$incompat = __('Your web server is not properly configured to use this importer. Please enable the CURL extension for PHP and then reload this page.');
@@ -255,7 +255,7 @@ class Blogger_Import {
'blog-options-basic' => false,
'blog-options-archiving' => array('archiveFrequency' => 'm'),
'blog-publishing' => array('publishMode'=>'0', 'blogID' => "$id", 'subdomain' => mt_rand().mt_rand(), 'pingWeblogs' => 'false'),
- 'blog-formatting' => array('timeStampFormat' => '0', 'convertLineBreaks'=>'false', 'floatAlignment'=>'false'),
+ 'blog-formatting' => array('timeStampFormat' => '0', 'encoding'=>'UTF-8', 'convertLineBreaks'=>'false', 'floatAlignment'=>'false'),
'blog-comments' => array('commentsTimeStampFormat' => '0'),
'template-edit' => array( 'templateText' => str_replace('%title%', trim($blogsary[2][$key]), $template) )
);
@@ -349,7 +349,7 @@ class Blogger_Import {
$form = "<div style='height:0px;width:0px;overflow:hidden;'>";
$form.= $body;
$form.= "</div><script type='text/javascript'>forms=document.getElementsByTagName('form');for(i=0;i<forms.length;i++){if(forms[i].action.search('{$blog_opt}')){forms[i].submit();break;}}</script>";
- $output.= '<p>'.sprintf('<strong>%s</strong> in progress, please wait...', $blog_opt)."</p>\n";
+ $output.= '<p>'.sprintf(__('<strong>%s</strong> in progress, please wait...'), $blog_opt)."</p>\n";
} else {
$output.= "<p>$blog_opt</p>\n";
}
@@ -428,7 +428,7 @@ class Blogger_Import {
$user_email = $wpdb->escape($post_author_email);
$user_password = substr(md5(uniqid(microtime())), 0, 6);
$result = wp_create_user( $user_login, $user_password, $user_email );
- $status.= sprintf('Registered user <strong>%s</strong>.', $user_login);
+ $status.= sprintf(__('Registered user <strong>%s</strong>.'), $user_login);
$this->import['blogs'][$_GET['blog']]['newusers'][] = $user_login;
}
$userdata = get_userdatabylogin( $post_author_name );
diff --git a/wp-admin/import/wordpress.php b/wp-admin/import/wordpress.php
index ac965b8..109d0a7 100644
--- a/wp-admin/import/wordpress.php
+++ b/wp-admin/import/wordpress.php
@@ -69,6 +69,8 @@ class WP_Import {
$importdata = preg_replace("/(\r\n|\n|\r)/", "\n", $importdata);
preg_match_all('|<item>(.*?)</item>|is', $importdata, $this->posts);
$this->posts = $this->posts[1];
+ preg_match_all('|<wp:category>(.*?)</wp:category>|is', $importdata, $this->categories);
+ $this->categories = $this->categories[1];
}
function get_wp_authors() {
@@ -160,6 +162,35 @@ class WP_Import {
$this->wp_authors_form();
}
+ function process_categories() {
+ global $wpdb;
+
+ $cat_names = (array) $wpdb->get_col("SELECT cat_name FROM $wpdb->categories");
+
+ while ( $c = array_shift($this->categories) ) {
+ $cat_name = trim(str_replace(array ('<![CDATA[', ']]>'), '', $this->get_tag( $c, 'wp:cat_name' )));
+
+ // If the category exists we leave it alone
+ if ( in_array($cat_name, $cat_names) )
+ continue;
+
+ $category_nicename = $this->get_tag( $c, 'wp:category_nicename' );
+ $posts_private = (int) $this->get_tag( $c, 'wp:posts_private' );
+ $links_private = (int) $this->get_tag( $c, 'wp:links_private' );
+
+ $parent = $this->get_tag( $c, 'wp:category_parent' );
+
+ if ( empty($parent) )
+ $category_parent = '0';
+ else
+ $category_parent = (int) category_exists($parent);
+
+ $catarr = compact('category_nicename', 'category_parent', 'posts_private', 'links_private', 'posts_private', 'cat_name');
+
+ $cat_ID = wp_insert_category($catarr);
+ }
+ }
+
function process_posts() {
global $wpdb;
$i = -1;
@@ -189,7 +220,7 @@ class WP_Import {
$cat_index = 0;
foreach ($categories as $category) {
- $categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category));
+ $categories[$cat_index] = $wpdb->escape($this->unhtmlentities(str_replace(array ('<![CDATA[', ']]>'), '', $category)));
$cat_index++;
}
@@ -260,6 +291,7 @@ class WP_Import {
$this->file = get_attached_file($this->id);
$this->get_authors_from_post();
$this->get_entries();
+ $this->process_categories();
$this->process_posts();
}
diff --git a/wp-admin/link-add.php b/wp-admin/link-add.php
index 2f66e44..c871e53 100644
--- a/wp-admin/link-add.php
+++ b/wp-admin/link-add.php
@@ -29,7 +29,7 @@ require('admin-header.php');
<div id="wp-link-bookmarklet" class="wrap">
<h3><?php _e('Add Link Bookmarklet'); ?></h3>
<p><?php _e('Right click on the following link and choose "Bookmark This Link..." to create an add link shortcut. Right now this only works on Mozilla or Netscape, but we’re working on it.'); ?></p>
-<?php printf(__('<p><a href="%s" title="Link add bookmarklet">Link This</a></p>'), "javascript:void(linkmanpopup=window.open('" . get_option('siteurl') . "/wp-admin/link-add.php?action=popup&amp;linkurl='+escape(location.href)+'&amp;name='+escape(document.title),'LinkManager','scrollbars=yes,width=750,height=550,left=15,top=15,status=yes,resizable=yes'));linkmanpopup.focus();window.focus();linkmanpopup.focus();") ?>
+<?php printf('<p><a href="%s" title="'.__('Link add bookmarklet').'">'.__('Link This').'</a></p>', "javascript:void(linkmanpopup=window.open('" . get_option('siteurl') . "/wp-admin/link-add.php?action=popup&amp;linkurl='+escape(location.href)+'&amp;name='+escape(document.title),'LinkManager','scrollbars=yes,width=750,height=550,left=15,top=15,status=yes,resizable=yes'));linkmanpopup.focus();window.focus();linkmanpopup.focus();") ?>
</div>
<?php
diff --git a/wp-admin/link-manager.php b/wp-admin/link-manager.php
index abb1d37..0a4d4e8 100644
--- a/wp-admin/link-manager.php
+++ b/wp-admin/link-manager.php
@@ -161,7 +161,7 @@ if ($links)
<?php
echo '<td><a href="link.php?link_id='.$link->link_id.'&amp;action=edit" class="edit">'.__('Edit').'</a></td>';
- echo '<td><a href="' . wp_nonce_url('link.php?link_id='.$link->link_id.'&amp;action=delete', 'delete-bookmark_' . $link->link_id ) . '"'." onclick=\"return deleteSomething( 'link', $link->link_id , '".sprintf(__("You are about to delete the &quot;%s&quot; link to %s.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), js_escape($link->link_name), js_escape($link->link_url)).'\' );" class="delete">'.__('Delete').'</a></td>';
+ echo '<td><a href="' . wp_nonce_url('link.php?link_id='.$link->link_id.'&amp;action=delete', 'delete-bookmark_' . $link->link_id ) . '"'." onclick=\"return deleteSomething( 'link', $link->link_id , '".js_escape(sprintf(__("You are about to delete the &quot;%s&quot; link to %s.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), $link->link_name, $link->link_url )).'\' );" class="delete">'.__('Delete').'</a></td>';
echo '<td align="center"><input type="checkbox" name="linkcheck[]" value="'.$link->link_id.'" /></td>';
echo "\n </tr>\n";
}
@@ -171,7 +171,7 @@ if ($links)
<div id="ajax-response"></div>
-<p class="submit"><input type="submit" class="button" name="deletebookmarks" id="deletebookmarks" value="<?php _e('Delete Checked Links') ?> &raquo;" onclick="return confirm('<?php _e("You are about to delete these links permanently \\n \'Cancel\' to stop, \'OK\' to delete.") ?>')" /></p>
+<p class="submit"><input type="submit" class="button" name="deletebookmarks" id="deletebookmarks" value="<?php _e('Delete Checked Links') ?> &raquo;" onclick="return confirm('<?php echo js_escape(__("You are about to delete these links permanently \\n \'Cancel\' to stop, \'OK\' to delete.")); ?>')" /></p>
</form>
</div>
diff --git a/wp-admin/moderation.php b/wp-admin/moderation.php
index e9fc505..8999741 100644
--- a/wp-admin/moderation.php
+++ b/wp-admin/moderation.php
@@ -135,7 +135,7 @@ $i = 0;
<?php comment_text() ?>
<p><?php comment_date('M j, g:i A'); ?> &#8212; [ <?php
echo '<a href="comment.php?action=editcomment&amp;c='.$comment->comment_ID.'">' . __('Edit') . '</a> | ';
-echo " <a href=\"post.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), js_escape($comment->comment_author)) . "', theCommentList );\">" . __('Delete ') . "</a> | "; ?>
+echo " <a href=\"post.php?action=deletecomment&amp;p=".$comment->comment_post_ID."&amp;comment=".$comment->comment_ID."\" onclick=\"return deleteSomething( 'comment', $comment->comment_ID, '" . js_escape(sprintf(__("You are about to delete this comment by &quot;%s&quot;.\\n&quot;Cancel&quot; to stop, &quot;OK&quot; to delete."), $comment->comment_author )) . "', theCommentList );\">" . __('Delete ') . "</a> | "; ?>
<?php
$post = get_post($comment->comment_post_ID);
$post_title = wp_specialchars( $post->post_title, 'double' );
diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php
index f224937..d8fce65 100644
--- a/wp-admin/plugins.php
+++ b/wp-admin/plugins.php
@@ -112,7 +112,15 @@ if (empty($plugins)) {
} else {
$toggle = "<a href='" . wp_nonce_url("plugins.php?action=activate&amp;plugin=$plugin_file", 'activate-plugin_' . $plugin_file) . "' title='".__('Activate this plugin')."' class='edit'>".__('Activate')."</a>";
}
- $plugin_data['Description'] = wp_kses($plugin_data['Description'], array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()) ); ;
+
+ $plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
+
+ // Sanitize all displayed data
+ $plugin_data['Title'] = wp_kses($plugin_data['Title'], $plugins_allowedtags);
+ $plugin_data['Version'] = wp_kses($plugin_data['Version'], $plugins_allowedtags);
+ $plugin_data['Description'] = wp_kses($plugin_data['Description'], $plugins_allowedtags);
+ $plugin_data['Author'] = wp_kses($plugin_data['Author'], $plugins_allowedtags);
+
if ( $style != '' )
$style = 'class="' . $style . '"';
if ( is_writable(ABSPATH . 'wp-content/plugins/' . $plugin_file) )
diff --git a/wp-admin/upgrade-functions.php b/wp-admin/upgrade-functions.php
index 1c8c8fd..2349dca 100644
--- a/wp-admin/upgrade-functions.php
+++ b/wp-admin/upgrade-functions.php
@@ -175,6 +175,9 @@ function upgrade_all() {
if ( $wp_current_db_version < 3845 )
upgrade_210();
+ if ( $wp_current_db_version < 4351 )
+ upgrade_old_slugs();
+
$wp_rewrite->flush_rules();
update_option('db_version', $wp_db_version);
diff --git a/wp-admin/upload-js.php b/wp-admin/upload-js.php
index ca51e3f..5ee62c1 100644
--- a/wp-admin/upload-js.php
+++ b/wp-admin/upload-js.php
@@ -97,20 +97,20 @@ addLoadEvent( function() {
h += "<form name='uploadoptions' id='uploadoptions' class='alignleft'>";
h += "<table>";
if ( this.currentImage.thumb ) {
- h += "<tr><th style='padding-bottom:.5em'><?php echo addslashes(__('Show:')); ?></th><td style='padding-bottom:.5em'>";
- h += "<label for='display-thumb'><input type='radio' name='display' id='display-thumb' value='thumb' checked='checked' /> <?php echo addslashes(__('Thumbnail')); ?></label><br />";
- h += "<label for='display-full'><input type='radio' name='display' id='display-full' value='full' /> <?php echo addslashes(__('Full size')); ?></label>";
+ h += "<tr><th style='padding-bottom:.5em'><?php echo js_escape(__('Show:')); ?></th><td style='padding-bottom:.5em'>";
+ h += "<label for='display-thumb'><input type='radio' name='display' id='display-thumb' value='thumb' checked='checked' /> <?php echo js_escape(__('Thumbnail')); ?></label><br />";
+ h += "<label for='display-full'><input type='radio' name='display' id='display-full' value='full' /> <?php echo js_escape(__('Full size')); ?></label>";
h += "</td></tr>";
}
- h += "<tr><th><?php echo addslashes(__('Link to:')); ?></th><td>";
- h += "<label for='link-file'><input type='radio' name='link' id='link-file' value='file' checked='checked'/> <?php echo addslashes(__('File')); ?></label><br />";
- h += "<label for='link-page'><input type='radio' name='link' id='link-page' value='page' /> <?php echo addslashes(__('Page')); ?></label><br />";
- h += "<label for='link-none'><input type='radio' name='link' id='link-none' value='none' /> <?php echo addslashes(__('None')); ?></label>";
+ h += "<tr><th><?php echo js_escape(__('Link to:')); ?></th><td>";
+ h += "<label for='link-file'><input type='radio' name='link' id='link-file' value='file' checked='checked'/> <?php echo js_escape(__('File')); ?></label><br />";
+ h += "<label for='link-page'><input type='radio' name='link' id='link-page' value='page' /> <?php echo js_escape(__('Page')); ?></label><br />";
+ h += "<label for='link-none'><input type='radio' name='link' id='link-none' value='none' /> <?php echo js_escape(__('None')); ?></label>";
h += "</td></tr>";
h += "<tr><td colspan='2'><p class='submit'>";
- h += "<input type='button' class='button' name='send' onclick='theFileList.sendToEditor(" + id + ")' value='<?php echo addslashes(__('Send to editor')); ?> &raquo;' />";
+ h += "<input type='button' class='button' name='send' onclick='theFileList.sendToEditor(" + id + ")' value='<?php echo js_escape(__('Send to editor &raquo;')); ?>' />";
h += "</p></td></tr></table>";
h += "</form>";
@@ -134,22 +134,22 @@ addLoadEvent( function() {
var params = $H(this.params);
params.ID = '';
params.action = '';
- h += "<a href='" + this.urlData[0] + '?' + params.toQueryString() + "' title='Browse your files' class='back'>&laquo; Back</a>";
+ h += "<a href='" + this.urlData[0] + '?' + params.toQueryString() + "' title='<?php echo js_escape(__('Browse your files')); ?>' class='back'>&laquo; <?php echo js_escape(__('Back')); ?></a>";
} else {
- h += "<a href='#' onclick='return theFileList.cancelView();' title='Browse your files' class='back'>&laquo; Back</a>";
+ h += "<a href='#' onclick='return theFileList.cancelView();' title='<?php echo js_escape(__('Browse your files')); ?>' class='back'>&laquo; <?php echo js_escape(__('Back')); ?></a>";
}
h += "<div id='file-title'>"
if ( !this.currentImage.isImage )
- h += "<h2><a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='Direct link to file'>" + this.currentImage.title + "</a></h2>";
+ h += "<h2><a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='<?php echo js_escape(__('Direct link to file')); ?>'>" + this.currentImage.title + "</a></h2>";
else
h += "<h2>" + this.currentImage.title + "</h2>";
h += " &#8212; <span>";
- h += "<a href='#' onclick='return theFileList.imageView(" + id + ");'>Insert</a>"
+ h += "<a href='#' onclick='return theFileList.imageView(" + id + ");'><?php js_escape(__('Insert')); ?></a>"
h += "</span>";
h += '</div>'
h += "<div id='upload-file-view' class='alignleft'>";
if ( this.currentImage.isImage ) {
- h += "<a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='Direct link to file'>";
+ h += "<a href='" + this.currentImage.srcBase + this.currentImage.src + "' onclick='return false;' title='<?php echo js_escape(__('Direct link to file')); ?>'>";
h += "<img src='" + ( this.currentImage.thumb ? this.currentImage.thumb : this.currentImage.src ) + "' alt='" + this.currentImage.title + "' width='" + this.currentImage.width + "' height='" + this.currentImage.height + "' />";
h += "</a>";
} else
@@ -158,20 +158,20 @@ addLoadEvent( function() {
h += "<table><col /><col class='widefat' /><tr>"
- h += "<th scope='row'><label for='url'>URL</label></th>";
+ h += "<th scope='row'><label for='url'><?php echo js_escape(__('URL')); ?></label></th>";
h += "<td><input type='text' id='url' class='readonly' value='" + this.currentImage.srcBase + this.currentImage.src + "' readonly='readonly' /></td>";
h += "</tr><tr>";
- h += "<th scope='row'><label for='post_title'>Title</label></th>";
+ h += "<th scope='row'><label for='post_title'><?php echo js_escape(__('Title')); ?></label></th>";
h += "<td><input type='text' id='post_title' name='post_title' value='" + this.currentImage.title + "' /></td>";
h += "</tr><tr>";
- h += "<th scope='row'><label for='post_content'>Description</label></th>";
+ h += "<th scope='row'><label for='post_content'><?php echo js_escape(__('Description')); ?></label></th>";
h += "<td><textarea name='post_content' id='post_content'>" + this.currentImage.description + "</textarea></td>";
- h += "</tr><tr id='buttons' class='submit'><td colspan='2'><input type='button' id='delete' name='delete' class='delete alignleft' value='Delete File' onclick='theFileList.deleteFile(" + id + ");' />";
+ h += "</tr><tr id='buttons' class='submit'><td colspan='2'><input type='button' id='delete' name='delete' class='delete alignleft' value='<?php echo js_escape(__('Delete File')); ?>' onclick='theFileList.deleteFile(" + id + ");' />";
h += "<input type='hidden' name='from_tab' value='" + this.tab + "' />";
h += "<input type='hidden' name='action' id='action-value' value='save' />";
h += "<input type='hidden' name='ID' value='" + id + "' />";
h += "<input type='hidden' name='_wpnonce' value='" + this.nonce + "' />";
- h += "<div class='submit'><input type='submit' value='Save &raquo;' /></div>";
+ h += "<div class='submit'><input type='submit' value='<?php echo js_escape(__('Save &raquo;')); ?>' /></div>";
h += "</td></tr></table></form>";
new Insertion.Top('upload-content', h);
diff --git a/wp-admin/upload.css b/wp-admin/upload.css
index a74ec18..efa9512 100644
--- a/wp-admin/upload.css
+++ b/wp-admin/upload.css
@@ -143,7 +143,6 @@ h2 {
}
#upload-files a.file-link.image {
- line-height: 128px;
font-size: 2px;
letter-spacing: 0;
}
diff --git a/wp-admin/users.php b/wp-admin/users.php
index 46ba6ca..3c260ab 100644
--- a/wp-admin/users.php
+++ b/wp-admin/users.php
@@ -2,11 +2,11 @@
require_once('admin.php');
require_once( ABSPATH . WPINC . '/registration.php');
+if ( !current_user_can('edit_users') )
+ wp_die(__('Cheatin&#8217; uh?'));
+
$title = __('Users');
-if ( current_user_can('edit_users') )
- $parent_file = 'users.php';
-else
- $parent_file = 'profile.php';
+$parent_file = 'users.php';
$action = $_REQUEST['action'];
$update = '';
diff --git a/wp-commentsrss2.php b/wp-commentsrss2.php
index a0434d9..28b52d0 100644
--- a/wp-commentsrss2.php
+++ b/wp-commentsrss2.php
@@ -34,7 +34,7 @@ if (have_posts()) :
LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE comment_post_ID = '" . get_the_ID() . "'
AND $wpdb->comments.comment_approved = '1' AND $wpdb->posts.post_status = 'publish'
AND post_date_gmt < '" . gmdate("Y-m-d H:i:59") . "'
- ORDER BY comment_date_gmt DESC LIMIT " . get_option('posts_per_rss') );
+ ORDER BY comment_date_gmt ASC" );
} else { // if no post id passed in, we'll just ue the last 10 comments.
$comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email,
comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID,
diff --git a/wp-includes/bookmark-template.php b/wp-includes/bookmark-template.php
index 93a4cf4..e27e8bc 100644
--- a/wp-includes/bookmark-template.php
+++ b/wp-includes/bookmark-template.php
@@ -107,7 +107,7 @@ function get_links($category = -1,
if ( $show_updated )
if (substr($row->link_updated_f, 0, 2) != '00')
- $title .= ' (Last updated ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * 3600)) . ')';
+ $title .= ' ('.__('Last updated') . ' ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * 3600)) . ')';
if ( '' != $title )
$title = ' title="' . $title . '"';
@@ -319,7 +319,8 @@ function wp_list_bookmarks($args = '') {
$defaults = array('orderby' => 'name', 'order' => 'ASC', 'limit' => -1, 'category' => '',
'category_name' => '', 'hide_invisible' => 1, 'show_updated' => 0, 'echo' => 1,
'categorize' => 1, 'title_li' => __('Bookmarks'), 'title_before' => '<h2>', 'title_after' => '</h2>',
- 'category_orderby' => 'name', 'category_order' => 'ASC', 'class' => 'linkcat');
+ 'category_orderby' => 'name', 'category_order' => 'ASC', 'class' => 'linkcat',
+ 'category_before' => '<li id="%id" class="%class">', 'category_after' => '</li>');
$r = array_merge($defaults, $r);
extract($r);
diff --git a/wp-includes/class-simplepie.php b/wp-includes/class-simplepie.php
deleted file mode 100644
index d5c36b9..0000000
--- a/wp-includes/class-simplepie.php
+++ /dev/null
@@ -1,5285 +0,0 @@
-<?php
-/****************************************************
-SIMPLEPIE
-A PHP-Based RSS and Atom Feed Framework
-Takes the hard work out of managing a complete RSS/Atom solution.
-
-Version: "Lemon Meringue"
-Updated: 13 October 2006
-Copyright: 2004-2006 Ryan Parman, Geoffrey Sneddon
-http://simplepie.org
-
-*****************************************************
-LICENSE:
-
-GNU Lesser General Public License 2.1 (LGPL)
-http://creativecommons.org/licenses/LGPL/2.1/
-
-*****************************************************
-Please submit all bug reports and feature requests to the SimplePie forums.
-http://simplepie.org/support/
-
-****************************************************/
-
-class SimplePie
-{
- // SimplePie Info
- var $name = 'SimplePie';
- var $version = 'Lemon Meringue';
- var $build = '20061013';
- var $url = 'http://simplepie.org/';
- var $useragent;
- var $linkback;
-
- // Other objects, instances created here so we can set options on them
- var $sanitize;
-
- // Options
- var $rss_url;
- var $file;
- var $timeout = 10;
- var $xml_dump = false;
- var $enable_cache = true;
- var $max_minutes = 60;
- var $cache_location = './cache';
- var $order_by_date = true;
- var $input_encoding = false;
- var $cache_class = 'SimplePie_Cache';
- var $locator_class = 'SimplePie_Locator';
- var $parser_class = 'SimplePie_Parser';
-
- // Misc. variables
- var $data;
- var $error;
-
- function SimplePie($feed_url = null, $cache_location = null, $cache_max_minutes = null)
- {
- // Couple of variables built up from other variables
- $this->useragent = $this->name . '/' . $this->version . ' (Feed Parser; ' . $this->url . '; Allow like Gecko) Build/' . $this->build;
- $this->linkback = '<a href="' . $this->url . '" title="' . $this->name . ' ' . $this->version . '">' . $this->name . '</a>';
-
- // Other objects, instances created here so we can set options on them
- $this->sanitize = new SimplePie_Sanitize;
-
- // Set options if they're passed to the constructor
- if (!is_null($feed_url))
- {
- $this->feed_url($feed_url);
- }
-
- if (!is_null($cache_location))
- {
- $this->cache_location($cache_location);
- }
-
- if (!is_null($cache_max_minutes))
- {
- $this->cache_max_minutes($cache_max_minutes);
- }
-
- // If we've passed an xmldump variable in the URL, snap into XMLdump mode
- if (isset($_GET['xmldump']))
- {
- $this->enable_xmldump(true);
- }
-
- // Only init the script if we're passed a feed URL
- if (!is_null($feed_url))
- {
- return $this->init();
- }
- }
-
- function feed_url($url)
- {
- $this->rss_url = SimplePie_Misc::fix_protocol($url, 1);
- }
-
- function set_file(&$file)
- {
- if (is_a($file, 'SimplePie_File'))
- {
- $this->rss_url = $file->url;
- $this->file =& $file;
- }
- }
-
- function set_timeout($timeout = 10)
- {
- $this->timeout = (int) $timeout;
- }
-
- function set_raw_data($data)
- {
- $this->raw_data = trim((string) $data);
- }
-
- function enable_xmldump($enable = false)
- {
- $this->xml_dump = (bool) $enable;
- }
-
- function enable_caching($enable = true)
- {
- $this->enable_cache = (bool) $enable;
- }
-
- function cache_max_minutes($minutes = 60)
- {
- $this->max_minutes = (float) $minutes;
- }
-
- function cache_location($location = './cache')
- {
- $this->cache_location = (string) $location;
- }
-
- function order_by_date($enable = true)
- {
- $this->order_by_date = (bool) $enable;
- }
-
- function input_encoding($encoding = false)
- {
- if ($encoding)
- {
- $this->input_encoding = (string) $encoding;
- }
- else
- {
- $this->input_encoding = false;
- }
- }
-
- function set_cache_class($class = 'SimplePie_Cache')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Cache'))
- {
- $this->cache_class = $class;
- return true;
- }
- return false;
- }
-
- function set_locator_class($class = 'SimplePie_Locator')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Locator'))
- {
- $this->locator_class = $class;
- return true;
- }
- return false;
- }
-
- function set_parser_class($class = 'SimplePie_Parser')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Parser'))
- {
- $this->parser_class = $class;
- return true;
- }
- return false;
- }
-
- function set_sanitize_class($object = 'SimplePie_Sanitize')
- {
- if (class_exists($object))
- {
- $this->sanitize = new $object;
- return true;
- }
- return false;
- }
-
- function set_useragent($ua)
- {
- $this->useragent = (string) $ua;
- }
-
- function bypass_image_hotlink($get = false)
- {
- $this->sanitize->bypass_image_hotlink($get);
- }
-
- function bypass_image_hotlink_page($page = false)
- {
- $this->sanitize->bypass_image_hotlink_page($page);
- }
-
- function replace_headers($enable = false)
- {
- $this->sanitize->replace_headers($enable);
- }
-
- function remove_div($enable = true)
- {
- $this->sanitize->remove_div($enable);
- }
-
- function strip_ads($enable = false)
- {
- $this->sanitize->strip_ads($enable);
- }
-
- function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'), $encode = null)
- {
- $this->sanitize->strip_htmltags($tags);
- if (!is_null($encode))
- {
- $this->sanitize->encode_instead_of_strip($tags);
- }
- }
-
- function encode_instead_of_strip($enable = true)
- {
- $this->sanitize->encode_instead_of_strip($enable);
- }
-
- function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
- {
- $this->sanitize->strip_attributes($attribs);
- }
-
- function output_encoding($encoding = 'UTF-8')
- {
- $this->sanitize->output_encoding($encoding);
- }
-
- function set_item_class($class = 'SimplePie_Item')
- {
- return $this->sanitize->set_item_class($class);
- }
-
- function set_author_class($class = 'SimplePie_Author')
- {
- return $this->sanitize->set_author_class($class);
- }
-
- function set_enclosure_class($class = 'SimplePie_Enclosure')
- {
- return $this->sanitize->set_enclosure_class($class);
- }
-
- function init()
- {
- if (!(function_exists('version_compare') && ((version_compare(phpversion(), '4.3.2', '>=') && version_compare(phpversion(), '5', '<')) || version_compare(phpversion(), '5.0.3', '>='))) || !extension_loaded('xml') || !extension_loaded('pcre'))
- {
- return false;
- }
- if ($this->sanitize->bypass_image_hotlink && !empty($_GET[$this->sanitize->bypass_image_hotlink]))
- {
- if (get_magic_quotes_gpc())
- {
- $_GET[$this->sanitize->bypass_image_hotlink] = stripslashes($_GET[$this->sanitize->bypass_image_hotlink]);
- }
- SimplePie_Misc::display_file($_GET[$this->sanitize->bypass_image_hotlink], 10, $this->useragent);
- }
-
- if (isset($_GET['js']))
- {
- $embed = <<<EOT
-function embed_odeo(link) {
- document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
-}
-
-function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
- if (placeholder != '') {
- document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
- }
- else {
- document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
- }
-}
-
-function embed_flash(bgcolor, width, height, link, loop, type) {
- document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
-}
-
-function embed_wmedia(width, height, link) {
- document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
-}
-EOT;
-
- if (function_exists('ob_gzhandler'))
- {
- ob_start('ob_gzhandler');
- }
- header('Content-type: text/javascript; charset: UTF-8');
- header('Cache-Control: must-revalidate');
- header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
- echo $embed;
- exit;
- }
-
- if (!empty($this->rss_url) || !empty($this->raw_data))
- {
- $this->data = array();
- $cache = false;
-
- if (!empty($this->rss_url))
- {
- // Decide whether to enable caching
- if ($this->enable_cache && preg_match('/^http(s)?:\/\//i', $this->rss_url))
- {
- $cache = new $this->cache_class($this->cache_location, sha1($this->rss_url), 'spc');
- }
- // If it's enabled and we don't want an XML dump, use the cache
- if ($cache && !$this->xml_dump)
- {
- // Load the Cache
- $this->data = $cache->load();
- if (!empty($this->data))
- {
- // If we've hit a sha1 collision just rerun it with caching disabled
- if (isset($this->data['url']) && $this->data['url'] != $this->rss_url)
- {
- $cache = false;
- }
- // If we've got a feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL
- else if (!empty($this->data['feed_url']))
- {
- $this->feed_url($this->data['feed_url']);
- return $this->init();
- }
- // If the cache is new enough
- else if ($cache->mtime() + $this->max_minutes * 60 < time())
- {
- // If we have last-modified and/or etag set
- if (!empty($this->data['last-modified']) || !empty($this->data['etag']))
- {
- $headers = array();
- if (!empty($this->data['last-modified']))
- {
- $headers['if-modified-since'] = $this->data['last-modified'];
- }
- if (!empty($this->data['etag']))
- {
- $headers['if-none-match'] = $this->data['etag'];
- }
- $file = new SimplePie_File($this->rss_url, $this->timeout/10, 5, $headers, $this->useragent);
- if ($file->success)
- {
- $headers = $file->headers();
- if ($headers['status']['code'] == 304)
- {
- $cache->touch();
- return true;
- }
- }
- unset($file);
- }
- // If we don't have last-modified or etag set, just clear the cache
- else
- {
- $cache->unlink();
- }
- }
- // If the cache is still valid, just return true
- else
- {
- return true;
- }
- }
- // If the cache is empty, delete it
- else
- {
- $cache->unlink();
- }
- }
- $this->data = array();
- // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
- if (!isset($file))
- {
- if (is_a($this->file, 'SimplePie_File') && $this->file->url == $this->rss_url)
- {
- $file =& $this->file;
- }
- else
- {
- $file = new SimplePie_File($this->rss_url, $this->timeout, 5, null, $this->useragent);
- }
- }
- // If the file connection has an error, set SimplePie::error to that and quit
- if (!$file->success)
- {
- $this->error = $file->error;
- return false;
- }
-
- // Check if the supplied URL is a feed, if it isn't, look for it.
- $locate = new $this->locator_class($file, $this->timeout, $this->useragent);
- if (!$locate->is_feed($file))
- {
- $feed = $locate->find();
- if ($feed)
- {
- if ($cache && !$cache->save(array('url' => $this->rss_url, 'feed_url' => $feed)))
- {
- $this->error = "$cache->name is not writeable";
- SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
- }
- $this->rss_url = $feed;
- return $this->init();
- }
- else
- {
- $this->error = "A feed could not be found at $this->rss_url";
- SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
- return false;
- }
- }
-
- $headers = $file->headers();
- $data = trim($file->body());
- $file->close();
- unset($file);
- }
- else
- {
- $data = $this->raw_data;
- }
-
- // First check to see if input has been overridden.
- if (!empty($this->input_encoding))
- {
- $encoding = $this->input_encoding;
- }
- // Second try HTTP headers
- else if (!empty($headers['content-type']) && preg_match('/charset\s*=\s*([^;]*)/i', $headers['content-type'], $charset))
- {
- $encoding = $charset[1];
- }
- // Then prolog, if at the very start of the document
- else if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog) && preg_match('/encoding\s*=\s*("([^"]*)"|\'([^\']*)\')/Ui', $prolog[1], $encoding))
- {
- $encoding = substr($encoding[1], 1, -1);
- }
- // UTF-32 Big Endian BOM
- else if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
- {
- $encoding = 'UTF-32be';
- }
- // UTF-32 Little Endian BOM
- else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
- {
- $encoding = 'UTF-32';
- }
- // UTF-16 Big Endian BOM
- else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
- {
- $encoding = 'UTF-16be';
- }
- // UTF-16 Little Endian BOM
- else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
- {
- $encoding = 'UTF-16le';
- }
- // UTF-8 BOM
- else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
- {
- $encoding = 'UTF-8';
- }
- // Fallback to the default
- else
- {
- $encoding = null;
- }
-
- // Change the encoding to UTF-8 (as we always use UTF-8 internally)
- $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
-
- // Start parsing
- $data = new $this->parser_class($data, 'UTF-8', $this->xml_dump);
- // If we want the XML, just output that and quit
- if ($this->xml_dump)
- {
- header('Content-type: text/xml; charset=UTF-8');
- echo $data->data;
- exit;
- }
- // If it's parsed fine
- else if (!$data->error_code)
- {
- // Parse the data, and make it sane
- $this->sanitize->parse_data_array($data->data, $this->rss_url);
- unset($data);
- // Get the sane data
- $this->data['feedinfo'] = $this->sanitize->feedinfo;
- unset($this->sanitize->feedinfo);
- $this->data['info'] = $this->sanitize->info;
- unset($this->sanitize->info);
- $this->data['items'] = $this->sanitize->items;
- unset($this->sanitize->items);
- $this->data['feedinfo']['encoding'] = $this->sanitize->output_encoding;
- $this->data['url'] = $this->rss_url;
-
- // Store the headers that we need
- if (!empty($headers['last-modified']))
- {
- $this->data['last-modified'] = $headers['last-modified'];
- }
- if (!empty($headers['etag']))
- {
- $this->data['etag'] = $headers['etag'];
- }
-
- // If we want to order it by date, check if all items have a date, and then sort it
- if ($this->order_by_date && !empty($this->data['items']))
- {
- $do_sort = true;
- foreach ($this->data['items'] as $item)
- {
- if (!$item->get_date('U'))
- {
- $do_sort = false;
- break;
- }
- }
- if ($do_sort)
- {
- usort($this->data['items'], create_function('$a, $b', 'if ($a->get_date(\'U\') == $b->get_date(\'U\')) return 1; return ($a->get_date(\'U\') < $b->get_date(\'U\')) ? 1 : -1;'));
- }
- }
-
- // Cache the file if caching is enabled
- if ($cache && !$cache->save($this->data))
- {
- $this->error = "$cache->name is not writeable";
- SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
- }
- return true;
- }
- // If we have an error, just set SimplePie::error to it and quit
- else
- {
- $this->error = "XML error: $data->error_string at line $data->current_line, column $data->current_column";
- SimplePie_Misc::error($this->error, E_USER_WARNING, __FILE__, __LINE__);
- return false;
- }
- }
- }
-
- function get_encoding()
- {
- if (!empty($this->data['feedinfo']['encoding']))
- {
- return $this->data['feedinfo']['encoding'];
- }
- else
- {
- return false;
- }
- }
-
- function handle_content_type($mime = 'text/html')
- {
- if (!headers_sent())
- {
- $header = "Content-type: $mime;";
- if ($this->get_encoding())
- {
- $header .= ' charset=' . $this->get_encoding();
- }
- else
- {
- $header .= ' charset=UTF-8';
- }
- header($header);
- }
- }
-
- function get_type()
- {
- if (!empty($this->data['feedinfo']['type']))
- {
- return $this->data['feedinfo']['type'];
- }
- else
- {
- return false;
- }
- }
-
- function get_version()
- {
- if (!empty($this->data['feedinfo']['version']))
- {
- return $this->data['feedinfo']['version'];
- }
- else
- {
- return false;
- }
- }
-
- function get_favicon($check = false, $alternate = null)
- {
- if (!empty($this->data['info']['link']['alternate'][0]))
- {
- $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $this->get_feed_link());
-
- if ($check)
- {
- $file = new SimplePie_File($favicon, $this->timeout/10, 5, null, $this->useragent);
- $headers = $file->headers();
- $file->close();
-
- if ($headers['status']['code'] == 200)
- {
- return $favicon;
- }
- }
- else
- {
- return $favicon;
- }
- }
- if (!is_null($alternate))
- {
- return $alternate;
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_url()
- {
- if (!empty($this->rss_url))
- {
- return $this->rss_url;
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_feed()
- {
- if (!empty($this->rss_url))
- {
- return SimplePie_Misc::fix_protocol($this->rss_url, 2);
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_outlook()
- {
- if (!empty($this->rss_url))
- {
- return 'outlook' . SimplePie_Misc::fix_protocol($this->rss_url, 2);
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_podcast()
- {
- if (!empty($this->rss_url))
- {
- return SimplePie_Misc::fix_protocol($this->rss_url, 3);
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_aol()
- {
- if ($this->subscribe_url())
- {
- return 'http://feeds.my.aol.com/add.jsp?url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_bloglines()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.bloglines.com/sub/' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_eskobo()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.eskobo.com/?AddToMyPage=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_feedfeeds()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.feedfeeds.com/add?feed=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_feedlounge()
- {
- if ($this->subscribe_url())
- {
- return 'http://my.feedlounge.com/external/subscribe?url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_feedster()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.feedster.com/myfeedster.php?action=addrss&amp;confirm=no&amp;rssurl=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_google()
- {
- if ($this->subscribe_url())
- {
- return 'http://fusion.google.com/add?feedurl=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_gritwire()
- {
- if ($this->subscribe_url())
- {
- return 'http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_msn()
- {
- if ($this->subscribe_url())
- {
- $url = 'http://my.msn.com/addtomymsn.armx?id=rss&amp;ut=' . rawurlencode($this->subscribe_url());
- if ($this->get_feed_link())
- {
- $url .= '&amp;ru=' . rawurlencode($this->get_feed_link());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_netvibes()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.netvibes.com/subscribe.php?url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_newsburst()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.newsburst.com/Source/?add=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_newsgator()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.newsgator.com/ngs/subscriber/subext.aspx?url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_odeo()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.odeo.com/listen/subscribe?feed=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_pluck()
- {
- if ($this->subscribe_url())
- {
- return 'http://client.pluck.com/pluckit/prompt.aspx?GCID=C12286x053&amp;a=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_podnova()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.podnova.com/index_your_podcasts.srf?action=add&amp;url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_rojo()
- {
- if ($this->subscribe_url())
- {
- return 'http://www.rojo.com/add-subscription?resource=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function subscribe_yahoo()
- {
- if ($this->subscribe_url())
- {
- return 'http://add.my.yahoo.com/rss?url=' . rawurlencode($this->subscribe_url());
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_title()
- {
- if (!empty($this->data['info']['title']))
- {
- return $this->data['info']['title'];
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_link()
- {
- if (!empty($this->data['info']['link']['alternate'][0]))
- {
- return $this->data['info']['link']['alternate'][0];
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_links()
- {
- if (!empty($this->data['info']['link']))
- {
- return $this->data['info']['link'];
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_description()
- {
- if (!empty($this->data['info']['description']))
- {
- return $this->data['info']['description'];
- }
- else if (!empty($this->data['info']['dc:description']))
- {
- return $this->data['info']['dc:description'];
- }
- else if (!empty($this->data['info']['tagline']))
- {
- return $this->data['info']['tagline'];
- }
- else if (!empty($this->data['info']['subtitle']))
- {
- return $this->data['info']['subtitle'];
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_copyright()
- {
- if (!empty($this->data['info']['copyright']))
- {
- return $this->data['info']['copyright'];
- }
- else
- {
- return false;
- }
- }
-
- function get_feed_language()
- {
- if (!empty($this->data['info']['language']))
- {
- return $this->data['info']['language'];
- }
- else if (!empty($this->data['info']['xml:lang']))
- {
- return $this->data['info']['xml:lang'];
- }
- else
- {
- return false;
- }
- }
-
- function get_image_exist()
- {
- if (!empty($this->data['info']['image']['url']) || !empty($this->data['info']['image']['logo']))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- function get_image_title()
- {
- if (!empty($this->data['info']['image']['title']))
- {
- return $this->data['info']['image']['title'];
- }
- else
- {
- return false;
- }
- }
-
- function get_image_url()
- {
- if (!empty($this->data['info']['image']['url']))
- {
- return $this->data['info']['image']['url'];
- }
- else if (!empty($this->data['info']['image']['logo']))
- {
- return $this->data['info']['image']['logo'];
- }
- else
- {
- return false;
- }
- }
-
- function get_image_link()
- {
- if (!empty($this->data['info']['image']['link']))
- {
- return $this->data['info']['image']['link'];
- }
- else
- {
- return false;
- }
- }
-
- function get_image_width()
- {
- if (!empty($this->data['info']['image']['width']))
- {
- return $this->data['info']['image']['width'];
- }
- else
- {
- return false;
- }
- }
-
- function get_image_height()
- {
- if (!empty($this->data['info']['image']['height']))
- {
- return $this->data['info']['image']['height'];
- }
- else
- {
- return false;
- }
- }
-
- function get_item_quantity($max = 0)
- {
- if (!empty($this->data['items']))
- {
- $qty = sizeof($this->data['items']);
- }
- else
- {
- $qty = 0;
- }
- if ($max == 0)
- {
- return $qty;
- }
- else
- {
- return ($qty > $max) ? $max : $qty;
- }
- }
-
- function get_item($key = 0)
- {
- if (!empty($this->data['items'][$key]))
- {
- return $this->data['items'][$key];
- }
- else
- {
- return false;
- }
- }
-
- function get_items($start = 0, $end = 0)
- {
- if ($this->get_item_quantity() > 0)
- {
- if ($end == 0)
- {
- return array_slice($this->data['items'], $start);
- }
- else
- {
- return array_slice($this->data['items'], $start, $end);
- }
- }
- else
- {
- return false;
- }
- }
-}
-
-class SimplePie_Item
-{
- var $data;
-
- function SimplePie_Item($data)
- {
- $this->data =& $data;
- }
-
- function get_id()
- {
- if (!empty($this->data['guid']['data']))
- {
- return $this->data['guid']['data'];
- }
- else if (!empty($this->data['id']))
- {
- return $this->data['id'];
- }
- else
- {
- return false;
- }
- }
-
- function get_title()
- {
- if (!empty($this->data['title']))
- {
- return $this->data['title'];
- }
- else if (!empty($this->data['dc:title']))
- {
- return $this->data['dc:title'];
- }
- else
- {
- return false;
- }
- }
-
- function get_description()
- {
- if (!empty($this->data['content']))
- {
- return $this->data['content'];
- }
- else if (!empty($this->data['encoded']))
- {
- return $this->data['encoded'];
- }
- else if (!empty($this->data['summary']))
- {
- return $this->data['summary'];
- }
- else if (!empty($this->data['description']))
- {
- return $this->data['description'];
- }
- else if (!empty($this->data['dc:description']))
- {
- return $this->data['dc:description'];
- }
- else if (!empty($this->data['longdesc']))
- {
- return $this->data['longdesc'];
- }
- else
- {
- return false;
- }
- }
-
- function get_category($key = 0)
- {
- $categories = $this->get_categories();
- if (!empty($categories[$key]))
- {
- return $categories[$key];
- }
- else
- {
- return false;
- }
- }
-
- function get_categories()
- {
- $categories = array();
- if (!empty($this->data['category']))
- {
- $categories = array_merge($categories, $this->data['category']);
- }
- if (!empty($this->data['subject']))
- {
- $categories = array_merge($categories, $this->data['subject']);
- }
- if (!empty($this->data['term']))
- {
- $categories = array_merge($categories, $this->data['term']);
- }
- if (!empty($categories))
- {
- return array_unique($categories);
- }
- else
- {
- return false;
- }
- }
-
- function get_author($key = 0)
- {
- $authors = $this->get_authors();
- if (!empty($authors[$key]))
- {
- return $authors[$key];
- }
- else
- {
- return false;
- }
- }
-
- function get_authors()
- {
- $authors = array();
- if (!empty($this->data['author']))
- {
- $authors = array_merge($authors, $this->data['author']);
- }
- if (!empty($this->data['creator']))
- {
- $authors = array_merge($authors, $this->data['creator']);
- }
- if (!empty($authors))
- {
- return array_unique($authors);
- }
- else
- {
- return false;
- }
- }
-
- function get_date($date_format = 'j F Y, g:i a')
- {
- if (!empty($this->data['pubdate']))
- {
- return date($date_format, $this->data['pubdate']);
- }
- else if (!empty($this->data['dc:date']))
- {
- return date($date_format, $this->data['dc:date']);
- }
- else if (!empty($this->data['issued']))
- {
- return date($date_format, $this->data['issued']);
- }
- else if (!empty($this->data['published']))
- {
- return date($date_format, $this->data['published']);
- }
- else if (!empty($this->data['modified']))
- {
- return date($date_format, $this->data['modified']);
- }
- else if (!empty($this->data['updated']))
- {
- return date($date_format, $this->data['updated']);
- }
- else
- {
- return false;
- }
- }
-
- function get_permalink()
- {
- $link = $this->get_link(0);
- $enclosure = $this->get_enclosure(0);
- if (!empty($link))
- {
- return $link;
- }
- else if (!empty($enclosure))
- {
- return $enclosure->get_link();
- }
- else
- {
- return false;
- }
- }
-
- function get_link($key = 0, $rel = 'alternate')
- {
- $links = $this->get_links($rel);
- if (!empty($links[$key]))
- {
- return $links[$key];
- }
- else
- {
- return false;
- }
- }
-
- function get_links($rel = 'alternate')
- {
- if ($rel == 'alternate')
- {
- $links = array();
- if (!empty($this->data['link'][$rel]))
- {
- $links = $this->data['link'][$rel];
- }
- if (!empty($this->data['guid']['data']) && $this->data['guid']['permalink'] == true)
- {
- $links[] = $this->data['guid']['data'];
- }
- return $links;
- }
- else if (!empty($this->data['link'][$rel]))
- {
- return $this->data['link'][$rel];
- }
- else
- {
- return false;
- }
- }
-
- function get_enclosure($key = 0)
- {
- $enclosures = $this->get_enclosures();
- if (!empty($enclosures[$key]))
- {
- return $enclosures[$key];
- }
- else
- {
- return false;
- }
- }
-
- function get_enclosures()
- {
- $enclosures = array();
- $links = $this->get_links('enclosure');
- if (!empty($this->data['enclosures']))
- {
- $enclosures = array_merge($enclosures, $this->data['enclosures']);
- }
- if (!empty($links))
- {
- $enclosures = array_merge($enclosures, $links);
- }
- if (!empty($enclosures))
- {
- return array_unique($enclosures);
- }
- else
- {
- return false;
- }
- }
-
- function add_to_blinklist()
- {
- if ($this->get_permalink())
- {
- $url = 'http://www.blinklist.com/index.php?Action=Blink/addblink.php&amp;Description=&amp;Url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;Title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_blogmarks()
- {
- if ($this->get_permalink())
- {
- $url = 'http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_delicious()
- {
- if ($this->get_permalink())
- {
- $url = 'http://del.icio.us/post/?v=3&amp;url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_digg()
- {
- if ($this->get_permalink())
- {
- return 'http://digg.com/submit?phase=2&amp;URL=' . rawurlencode($this->get_permalink());
- }
- else
- {
- return false;
- }
- }
-
- function add_to_furl()
- {
- if ($this->get_permalink())
- {
- $url = 'http://www.furl.net/storeIt.jsp?u=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;t=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_magnolia()
- {
- if ($this->get_permalink())
- {
- $url = 'http://ma.gnolia.com/bookmarklet/add?url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_myweb20()
- {
- if ($this->get_permalink())
- {
- $url = 'http://myweb2.search.yahoo.com/myresults/bookmarklet?u=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;t=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_newsvine()
- {
- if ($this->get_permalink())
- {
- $url = 'http://www.newsvine.com/_wine/save?u=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;h=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_reddit()
- {
- if ($this->get_permalink())
- {
- $url = 'http://reddit.com/submit?url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_segnalo()
- {
- if ($this->get_permalink())
- {
- $url = 'http://segnalo.com/post.html.php?url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_simpy()
- {
- if ($this->get_permalink())
- {
- $url = 'http://www.simpy.com/simpy/LinkAdd.do?href=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_smarking()
- {
- if ($this->get_permalink())
- {
- return 'http://smarking.com/editbookmark/?url=' . rawurlencode($this->get_permalink());
- }
- else
- {
- return false;
- }
- }
-
- function add_to_spurl()
- {
- if ($this->get_permalink())
- {
- $url = 'http://www.spurl.net/spurl.php?v=3&amp;url=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function add_to_wists()
- {
- if ($this->get_permalink())
- {
- $url = 'http://wists.com/r.php?c=&amp;r=' . rawurlencode($this->get_permalink());
- if ($this->get_title())
- {
- $url .= '&amp;title=' . rawurlencode($this->get_title());
- }
- return $url;
- }
- else
- {
- return false;
- }
- }
-
- function search_technorati()
- {
- if ($this->get_permalink())
- {
- return 'http://www.technorati.com/search/' . rawurlencode($this->get_permalink());
- }
- else
- {
- return false;
- }
- }
-}
-
-class SimplePie_Author
-{
- var $name;
- var $link;
- var $email;
-
- // Constructor, used to input the data
- function SimplePie_Author($name, $link, $email)
- {
- $this->name = $name;
- $this->link = $link;
- $this->email = $email;
- }
-
- function get_name()
- {
- if (!empty($this->name))
- {
- return $this->name;
- }
- else
- {
- return false;
- }
- }
-
- function get_link()
- {
- if (!empty($this->link))
- {
- return $this->link;
- }
- else
- {
- return false;
- }
- }
-
- function get_email()
- {
- if (!empty($this->email))
- {
- return $this->email;
- }
- else
- {
- return false;
- }
- }
-}
-
-class SimplePie_Enclosure
-{
- var $link;
- var $type;
- var $length;
-
- // Constructor, used to input the data
- function SimplePie_Enclosure($link, $type, $length)
- {
- $this->link = $link;
- $this->type = $type;
- $this->length = $length;
- }
-
- function get_link()
- {
- if (!empty($this->link))
- {
- if (class_exists('idna_convert'))
- {
- $idn = new idna_convert;
- $this->link = $idn->encode($this->link);
- }
- return $this->link;
- }
- else
- {
- return false;
- }
- }
-
- function get_extension()
- {
- if (!empty($this->link))
- {
- return pathinfo($this->link, PATHINFO_EXTENSION);
- }
- else
- {
- return false;
- }
- }
-
- function get_type()
- {
- if (!empty($this->type))
- {
- return $this->type;
- }
- else
- {
- return false;
- }
- }
-
- function get_length()
- {
- if (!empty($this->length))
- {
- return $this->length;
- }
- else
- {
- return false;
- }
- }
-
- function get_size()
- {
- $length = $this->get_length();
- if (!empty($length))
- {
- return round($length/1048576, 2);
- }
- else
- {
- return false;
- }
- }
-
- function native_embed($options='')
- {
- return $this->embed($options, true);
- }
-
- function embed($options = '', $native = false)
- {
- // Set up defaults
- $audio = '';
- $video = '';
- $alt = '';
- $altclass = '';
- $loop = 'false';
- $width = 'auto';
- $height = 'auto';
- $bgcolor = '#ffffff';
-
- // Process options and reassign values as necessary
- if (is_array($options))
- {
- extract($options);
- }
- else
- {
- $options = explode(',', $options);
- foreach($options as $option)
- {
- $opt = explode(':', $option, 2);
- if (isset($opt[0], $opt[1]))
- {
- $opt[0] = trim($opt[0]);
- $opt[1] = trim($opt[1]);
- switch ($opt[0])
- {
- case 'audio':
- $audio = $opt[1];
- break;
-
- case 'video':
- $video = $opt[1];
- break;
-
- case 'alt':
- $alt = $opt[1];
- break;
-
- case 'altclass':
- $altclass = $opt[1];
- break;
-
- case 'loop':
- $loop = $opt[1];
- break;
-
- case 'width':
- $width = $opt[1];
- break;
-
- case 'height':
- $height = $opt[1];
- break;
-
- case 'bgcolor':
- $bgcolor = $opt[1];
- break;
- }
- }
- }
- }
-
- $type = strtolower($this->get_type());
-
- // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
- if (!in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video', 'application/x-shockwave-flash', 'application/futuresplash', 'application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
- {
- switch (strtolower($this->get_extension()))
- {
- // Audio mime-types
- case 'aac':
- case 'adts':
- $type = 'audio/acc';
- break;
-
- case 'aif':
- case 'aifc':
- case 'aiff':
- case 'cdda':
- $type = 'audio/aiff';
- break;
-
- case 'bwf':
- $type = 'audio/wav';
- break;
-
- case 'kar':
- case 'mid':
- case 'midi':
- case 'smf':
- $type = 'audio/midi';
- break;
-
- case 'm4a':
- $type = 'audio/x-m4a';
- break;
-
- case 'mp3':
- case 'swa':
- $type = 'audio/mp3';
- break;
-
- case 'wav':
- $type = 'audio/wav';
- break;
-
- case 'wax':
- $type = 'audio/x-ms-wax';
- break;
-
- case 'wma':
- $type = 'audio/x-ms-wma';
- break;
-
- // Video mime-types
- case '3gp':
- case '3gpp':
- $type = 'video/3gpp';
- break;
-
- case '3g2':
- case '3gp2':
- $type = 'video/3gpp2';
- break;
-
- case 'asf':
- $type = 'video/x-ms-asf';
- break;
-
- case 'm1a':
- case 'm1s':
- case 'm1v':
- case 'm15':
- case 'm75':
- case 'mp2':
- case 'mpa':
- case 'mpeg':
- case 'mpg':
- case 'mpm':
- case 'mpv':
- $type = 'video/mpeg';
- break;
-
- case 'm4v':
- $type = 'video/x-m4v';
- break;
-
- case 'mov':
- case 'qt':
- $type = 'video/quicktime';
- break;
-
- case 'mp4':
- case 'mpg4':
- $type = 'video/mp4';
- break;
-
- case 'sdv':
- $type = 'video/sd-video';
- break;
-
- case 'wm':
- $type = 'video/x-ms-wm';
- break;
-
- case 'wmv':
- $type = 'video/x-ms-wmv';
- break;
-
- case 'wvx':
- $type = 'video/x-ms-wvx';
- break;
-
- // Flash mime-types
- case 'spl':
- $type = 'application/futuresplash';
- break;
-
- case 'swf':
- $type = 'application/x-shockwave-flash';
- break;
- }
- }
-
- $mime = explode('/', $type, 2);
- $mime = $mime[0];
-
- // Process values for 'auto'
- if ($width == 'auto')
- {
- if ($mime == 'video')
- {
- $width = '320';
- }
- else
- {
- $width = '100%';
- }
- }
- if ($height == 'auto')
- {
- if ($mime == 'audio')
- {
- $height = 0;
- }
- else if ($mime == 'video')
- {
- $height = 240;
- }
- else
- {
- $height = 256;
- }
- }
-
- // Set proper placeholder value
- if ($mime == 'audio')
- {
- $placeholder = $audio;
- }
- else if ($mime == 'video')
- {
- $placeholder = $video;
- }
-
- $embed = '';
-
- // Make sure the JS library is included
- // (I know it'll be included multiple times, but I can't think of a better way to do this automatically)
- if (!$native)
- {
- $embed .= '<script type="text/javascript" src="?js"></script>';
- }
-
- // Odeo Feed MP3's
- if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com') {
- if ($native)
- {
- $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
- }
- else
- {
- $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
- }
- }
-
- // QuickTime 7 file types. Need to test with QuickTime 6.
- else if (in_array($type, array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'x-audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video')))
- {
- $height += 16;
- if ($native)
- {
- if ($placeholder != "") {
- $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
- }
- else {
- $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width+\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://www.apple.com/quicktime/download/\"></embed>";
- }
- }
- else
- {
- $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
- }
- }
-
- // Flash
- else if (in_array($type, array('application/x-shockwave-flash', 'application/futuresplash')))
- {
- if ($native)
- {
- $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
- }
- else
- {
- $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
- }
- }
-
- // Windows Media
- else if (in_array($type, array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx')))
- {
- $height += 45;
- if ($native)
- {
- $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
- }
- else
- {
- $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
- }
- }
-
- // Everything else
- else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
-
- return $embed;
- }
-}
-
-class SimplePie_File
-{
- var $url;
- var $useragent;
- var $success = true;
- var $headers = array();
- var $body;
- var $fp;
- var $redirects = 0;
- var $error;
- var $method;
-
- function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null)
- {
- if (class_exists('idna_convert'))
- {
- $idn = new idna_convert;
- $url = $idn->encode($url);
- }
- $this->url = $url;
- $this->useragent = $useragent;
- if (preg_match('/^http(s)?:\/\//i', $url))
- {
- if (empty($useragent))
- {
- $useragent = ini_get('user_agent');
- $this->useragent = $useragent;
- }
- if (!is_array($headers))
- {
- $headers = array();
- }
- if (extension_loaded('curl') && version_compare(SimplePie_Misc::get_curl_version(), '7.10', '>='))
- {
- $this->method = 'curl';
- $fp = curl_init();
- $headers2 = array();
- foreach ($headers as $key => $value)
- {
- $headers2[] = "$key: $value";
- }
- curl_setopt($fp, CURLOPT_ENCODING, '');
- curl_setopt($fp, CURLOPT_URL, $url);
- curl_setopt($fp, CURLOPT_HEADER, 1);
- curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
- curl_setopt($fp, CURLOPT_REFERER, $url);
- curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
- curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
- if (!ini_get('open_basedir') && !ini_get('safe_mode'))
- {
- curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
- curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
- }
-
- $this->headers = trim(curl_exec($fp));
- if (curl_errno($fp))
- {
- $this->error = 'cURL error: ' . curl_error($fp);
- $this->success = false;
- return false;
- }
- else
- {
- $info = curl_getinfo($fp);
- $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 2);
- $this->body = array_pop($this->headers);
- $this->headers = array_pop($this->headers);
- $this->headers = $this->parse_headers($this->headers);
- if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
- {
- $this->redirects++;
- return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent);
- }
- }
- }
- else
- {
- $this->method = 'fsockopen';
- $url_parts = parse_url($url);
- if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
- {
- $url_parts['host'] = "ssl://$url_parts[host]";
- $url_parts['port'] = 443;
- }
- if (!isset($url_parts['port']))
- {
- $url_parts['port'] = 80;
- }
- $this->fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
- if (!$this->fp)
- {
- $this->error = 'fsockopen error: ' . $errstr;
- $this->success = false;
- return false;
- }
- else
- {
- stream_set_timeout($this->fp, $timeout);
- $get = (isset($url_parts['query'])) ? "$url_parts[path]?$url_parts[query]" : $url_parts['path'];
- $out = "GET $get HTTP/1.0\r\n";
- $out .= "Host: $url_parts[host]\r\n";
- $out .= "User-Agent: $useragent\r\n";
- if (function_exists('gzinflate'))
- {
- $out .= "Accept-Encoding: gzip,deflate\r\n";
- }
-
- if (!empty($url_parts['user']) && !empty($url_parts['pass']))
- {
- $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
- }
- foreach ($headers as $key => $value)
- {
- $out .= "$key: $value\r\n";
- }
- $out .= "Connection: Close\r\n\r\n";
- fwrite($this->fp, $out);
-
- $info = stream_get_meta_data($this->fp);
- $data = '';
- while (strpos($data, "\r\n\r\n") === false && !$info['timed_out'])
- {
- $data .= fgets($this->fp, 128);
- $info = stream_get_meta_data($this->fp);
- }
- if (!$info['timed_out'])
- {
- $this->headers = $this->parse_headers($data);
- if (($this->headers['status']['code'] == 301 || $this->headers['status']['code'] == 302 || $this->headers['status']['code'] == 303 || $this->headers['status']['code'] == 307) && !empty($this->headers['location']) && $this->redirects < $redirects)
- {
- $this->redirects++;
- return $this->SimplePie_File($this->headers['location'], $timeout, $redirects, $headers, $useragent);
- }
- }
- else
- {
- $this->close();
- $this->error = 'fsocket timed out';
- $this->success = false;
- return false;
- }
- }
- }
- return $this->headers['status']['code'];
- }
- else
- {
- $this->method = 'fopen';
- if ($this->fp = fopen($url, 'r'))
- {
- return true;
- }
- else
- {
- $this->error = 'fopen could not open the file';
- $this->success = false;
- return false;
- }
- }
- }
-
- function headers()
- {
- return $this->headers;
- }
-
- function body()
- {
- if (is_null($this->body))
- {
- if ($this->fp)
- {
- $info = stream_get_meta_data($this->fp);
- $this->body = '';
- while (!$info['eof'] && !$info['timed_out'])
- {
- $this->body .= fread($this->fp, 1024);
- $info = stream_get_meta_data($this->fp);
- }
- if (!$info['timed_out'])
- {
- $this->body = trim($this->body);
- if ($this->method == 'fsockopen' && !empty($this->headers['content-encoding']) && $this->headers['content-encoding'] == 'gzip')
- {
- $this->body = substr($this->body, 10);
- $this->body = gzinflate($this->body);
- }
- $this->close();
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- return $this->body;
- }
-
- function close()
- {
- if (!is_null($this->fp))
- {
- if (fclose($this->fp))
- {
- $this->fp = null;
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
-
- function parse_headers($headers)
- {
- $headers = explode("\r\n", trim($headers));
- $status = array_shift($headers);
- foreach ($headers as $header)
- {
- $data = explode(':', $header, 2);
- $head[strtolower(trim($data[0]))] = trim($data[1]);
- }
- if (preg_match('/HTTP\/[0-9\.]+ ([0-9]+)(.*)$/i', $status, $matches))
- {
- if (isset($head['status']))
- {
- unset($head['status']);
- }
- $head['status']['code'] = $matches[1];
- $head['status']['name'] = trim($matches[2]);
- }
- return $head;
- }
-}
-
-class SimplePie_Cache
-{
- var $location;
- var $filename;
- var $extension;
- var $name;
-
- function SimplePie_Cache($location, $filename, $extension)
- {
- $this->location = $location;
- $this->filename = rawurlencode($filename);
- $this->extension = rawurlencode($extension);
- $this->name = "$location/$this->filename.$this->extension";
- }
-
- function save($data)
- {
- if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
- {
- $fp = fopen($this->name, 'w');
- if ($fp)
- {
- fwrite($fp, serialize($data));
- fclose($fp);
- return true;
- }
- }
- return false;
- }
-
- function load()
- {
- if (file_exists($this->name) && is_readable($this->name))
- {
- return unserialize(file_get_contents($this->name));
- }
- return false;
- }
-
- function mtime()
- {
- if (file_exists($this->name))
- {
- return filemtime($this->name);
- }
- return false;
- }
-
- function touch()
- {
- if (file_exists($this->name))
- {
- return touch($this->name);
- }
- return false;
- }
-
- function unlink()
- {
- if (file_exists($this->name))
- {
- return unlink($this->name);
- }
- return false;
- }
-}
-
-class SimplePie_Misc
-{
- function absolutize_url($relative, $base)
- {
- $relative = trim($relative);
- $base = trim($base);
- if (!empty($relative))
- {
- $relative = SimplePie_Misc::parse_url($relative, false);
- $relative = array('scheme' => $relative[2], 'authority' => $relative[3], 'path' => $relative[5], 'query' => $relative[7], 'fragment' => $relative[9]);
- if (!empty($relative['scheme']))
- {
- $target = $relative;
- }
- else if (!empty($base))
- {
- $base = SimplePie_Misc::parse_url($base, false);
- $base = array('scheme' => $base[2], 'authority' => $base[3], 'path' => $base[5], 'query' => $base[7], 'fragment' => $base[9]);
- $target['scheme'] = $base['scheme'];
- if (!empty($relative['authority']))
- {
- $target = array_merge($relative, $target);
- }
- else
- {
- $target['authority'] = $base['authority'];
- if (!empty($relative['path']))
- {
- if (strpos($relative['path'], '/') === 0)
- {
- $target['path'] = $relative['path'];
- }
- else
- {
- if (!empty($base['path']))
- {
- $target['path'] = dirname("$base[path].") . '/' . $relative['path'];
- }
- else
- {
- $target['path'] = '/' . $relative['path'];
- }
- }
- if (!empty($relative['query']))
- {
- $target['query'] = $relative['query'];
- }
- $input = $target['path'];
- $target['path'] = '';
- while (!empty($input))
- {
- if (strpos($input, '../') === 0)
- {
- $input = substr($input, 3);
- }
- else if (strpos($input, './') === 0)
- {
- $input = substr($input, 2);
- }
- else if (strpos($input, '/./') === 0)
- {
- $input = substr_replace($input, '/', 0, 3);
- }
- else if (strpos($input, '/.') === 0 && SimplePie_Misc::strendpos($input, '/.') === 0)
- {
- $input = substr_replace($input, '/', -2);
- }
- else if (strpos($input, '/../') === 0)
- {
- $input = substr_replace($input, '/', 0, 4);
- $target['path'] = preg_replace('/(\/)?([^\/]+)$/U', '', $target['path']);
- }
- else if (strpos($input, '/..') === 0 && SimplePie_Misc::strendpos($input, '/..') === 0)
- {
- $input = substr_replace($input, '/', 0, 3);
- $target['path'] = preg_replace('/(\/)?([^\/]+)$/U', '', $target['path']);
- }
- else if ($input == '.' || $input == '..')
- {
- $input = '';
- }
- else
- {
- if (preg_match('/^(.+)(\/|$)/U', $input, $match))
- {
- $target['path'] .= $match[1];
- $input = substr_replace($input, '', 0, strlen($match[1]));
- }
- }
- }
- }
- else
- {
- if (!empty($base['path']))
- {
- $target['path'] = $base['path'];
- }
- else
- {
- $target['path'] = '/';
- }
- if (!empty($relative['query']))
- {
- $target['query'] = $relative['query'];
- }
- else if (!empty($base['query']))
- {
- $target['query'] = $base['query'];
- }
- }
- }
- if (!empty($relative['fragment']))
- {
- $target['fragment'] = $relative['fragment'];
- }
- }
- else
- {
- return false;
- }
- $return = '';
- if (!empty($target['scheme']))
- {
- $return .= "$target[scheme]:";
- }
- if (!empty($target['authority']))
- {
- $return .= $target['authority'];
- }
- if (!empty($target['path']))
- {
- $return .= $target['path'];
- }
- if (!empty($target['query']))
- {
- $return .= "?$target[query]";
- }
- if (!empty($target['fragment']))
- {
- $return .= "#$target[fragment]";
- }
- }
- else
- {
- $return = $base;
- }
- return $return;
- }
-
- function strendpos($haystack, $needle)
- {
- return strlen($haystack) - strpos($haystack, $needle) - strlen($needle);
- }
-
- function get_element($realname, $string)
- {
- $return = array();
- $name = preg_quote($realname, '/');
- preg_match_all("/<($name)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))*)\s*((\/)?>|>(.*)<\/$name>)/msiU", $string, $matches, PREG_SET_ORDER);
- for ($i = 0; $i < count($matches); $i++)
- {
- $return[$i]['tag'] = $realname;
- $return[$i]['full'] = $matches[$i][0];
- if (strlen($matches[$i][10]) <= 2)
- {
- $return[$i]['self_closing'] = true;
- }
- else
- {
- $return[$i]['self_closing'] = false;
- $return[$i]['content'] = $matches[$i][12];
- }
- $return[$i]['attribs'] = array();
- if (!empty($matches[$i][2]))
- {
- preg_match_all('/((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(\S+))\s/msiU', ' ' . $matches[$i][2] . ' ', $attribs, PREG_SET_ORDER);
- for ($j = 0; $j < count($attribs); $j++)
- {
- $return[$i]['attribs'][strtoupper($attribs[$j][1])]['data'] = $attribs[$j][count($attribs[$j])-1];
- $first = substr($attribs[$j][2], 0, 1);
- $return[$i]['attribs'][strtoupper($attribs[$j][1])]['split'] = ($first == '"' || $first == "'") ? $first : '"';
- }
- }
- }
- return $return;
- }
-
- function element_implode($element)
- {
- $full = "<$element[tag]";
- foreach ($element['attribs'] as $key => $value)
- {
- $key = strtolower($key);
- $full .= " $key=$value[split]$value[data]$value[split]";
- }
- if ($element['self_closing'])
- {
- $full .= ' />';
- }
- else
- {
- $full .= ">$element[content]</$element[tag]>";
- }
- return $full;
- }
-
- function error($message, $level, $file, $line)
- {
- switch ($level)
- {
- case E_USER_ERROR:
- $note = 'PHP Error';
- break;
- case E_USER_WARNING:
- $note = 'PHP Warning';
- break;
- case E_USER_NOTICE:
- $note = 'PHP Notice';
- break;
- default:
- $note = 'Unknown Error';
- break;
- }
- error_log("$note: $message in $file on line $line", 0);
- return $message;
- }
-
- function display_file($url, $timeout = 10, $useragent = null)
- {
- $file = new SimplePie_File($url, $timeout, 5, null, $useragent);
- $headers = $file->headers();
- if ($file->body() !== false)
- {
- header('Content-type: ' . $headers['content-type']);
- echo $file->body();
- exit;
- }
- }
-
- function fix_protocol($url, $http = 1)
- {
- $parsed = SimplePie_Misc::parse_url($url);
- if (!empty($parsed['scheme']) && strtolower($parsed['scheme']) != 'http' && strtolower($parsed['scheme']) != 'https')
- {
- return SimplePie_Misc::fix_protocol("$parsed[authority]$parsed[path]$parsed[query]$parsed[fragment]", $http);
- }
- if (!file_exists($url) && empty($parsed['scheme']))
- {
- return SimplePie_Misc::fix_protocol("http://$url", $http);
- }
-
- if ($http == 2 && !empty($parsed['scheme']))
- {
- return "feed:$url";
- }
- else if ($http == 3 && strtolower($parsed['scheme']) == 'http')
- {
- return substr_replace($url, 'podcast', 0, 4);
- }
- else
- {
- return $url;
- }
- }
-
- function parse_url($url, $parse_match = true)
- {
- preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/i', $url, $match);
- if (empty($match[0]))
- {
- return false;
- }
- else
- {
- for ($i = 6; $i < 10; $i++)
- {
- if (!isset($match[$i]))
- {
- $match[$i] = '';
- }
- }
- if ($parse_match)
- {
- $match = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[6], 'fragment' => $match[8]);
- }
- return $match;
- }
- }
-
- function change_encoding($data, $input, $output)
- {
- $input = SimplePie_Misc::encoding($input);
- $output = SimplePie_Misc::encoding($output);
-
- if ($input != $output)
- {
- if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data))
- {
- return iconv($input['encoding'], "$output[encoding]//TRANSLIT", $data);
- }
- else if (function_exists('iconv') && $input['use_iconv'] && $output['use_iconv'] && iconv($input['encoding'], $output['encoding'], $data))
- {
- return iconv($input['encoding'], $output['encoding'], $data);
- }
- else if (function_exists('mb_convert_encoding') && $input['use_mbstring'] && $output['use_mbstring'])
- {
- return mb_convert_encoding($data, $output['encoding'], $input['encoding']);
- }
- else if ($input['encoding'] == 'ISO-8859-1' && $output['encoding'] == 'UTF-8')
- {
- return utf8_encode($data);
- }
- else if ($input['encoding'] == 'UTF-8' && $output['encoding'] == 'ISO-8859-1')
- {
- return utf8_decode($data);
- }
- }
- return $data;
- }
-
- function encoding($encoding)
- {
- $return['use_mbstring'] = false;
- $return['use_iconv'] = false;
- switch (strtolower($encoding))
- {
-
- // 7bit
- case '7bit':
- case '7-bit':
- $return['encoding'] = '7bit';
- $return['use_mbstring'] = true;
- break;
-
- // 8bit
- case '8bit':
- case '8-bit':
- $return['encoding'] = '8bit';
- $return['use_mbstring'] = true;
- break;
-
- // ARMSCII-8
- case 'armscii-8':
- case 'armscii':
- $return['encoding'] = 'ARMSCII-8';
- $return['use_iconv'] = true;
- break;
-
- // ASCII
- case 'us-ascii':
- case 'ascii':
- $return['encoding'] = 'US-ASCII';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // BASE64
- case 'base64':
- case 'base-64':
- $return['encoding'] = 'BASE64';
- $return['use_mbstring'] = true;
- break;
-
- // Big5 - Traditional Chinese, mainly used in Taiwan
- case 'big5':
- case '950':
- $return['encoding'] = 'BIG5';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // Big5 with Hong Kong extensions, Traditional Chinese
- case 'big5-hkscs':
- $return['encoding'] = 'BIG5-HKSCS';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // byte2be
- case 'byte2be':
- $return['encoding'] = 'byte2be';
- $return['use_mbstring'] = true;
- break;
-
- // byte2le
- case 'byte2le':
- $return['encoding'] = 'byte2le';
- $return['use_mbstring'] = true;
- break;
-
- // byte4be
- case 'byte4be':
- $return['encoding'] = 'byte4be';
- $return['use_mbstring'] = true;
- break;
-
- // byte4le
- case 'byte4le':
- $return['encoding'] = 'byte4le';
- $return['use_mbstring'] = true;
- break;
-
- // EUC-CN
- case 'euc-cn':
- case 'euccn':
- $return['encoding'] = 'EUC-CN';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // EUC-JISX0213
- case 'euc-jisx0213':
- case 'eucjisx0213':
- $return['encoding'] = 'EUC-JISX0213';
- $return['use_iconv'] = true;
- break;
-
- // EUC-JP
- case 'euc-jp':
- case 'eucjp':
- $return['encoding'] = 'EUC-JP';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // EUCJP-win
- case 'euc-jp-win':
- case 'eucjp-win':
- case 'eucjpwin':
- $return['encoding'] = 'EUCJP-win';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // EUC-KR
- case 'euc-kr':
- case 'euckr':
- $return['encoding'] = 'EUC-KR';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // EUC-TW
- case 'euc-tw':
- case 'euctw':
- $return['encoding'] = 'EUC-TW';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // GB18030 - Simplified Chinese, national standard character set
- case 'gb18030-2000':
- case 'gb18030':
- $return['encoding'] = 'GB18030';
- $return['use_iconv'] = true;
- break;
-
- // GB2312 - Simplified Chinese, national standard character set
- case 'gb2312':
- case '936':
- $return['encoding'] = 'GB2312';
- $return['use_mbstring'] = true;
- break;
-
- // GBK
- case 'gbk':
- $return['encoding'] = 'GBK';
- $return['use_iconv'] = true;
- break;
-
- // Georgian-Academy
- case 'georgian-academy':
- $return['encoding'] = 'Georgian-Academy';
- $return['use_iconv'] = true;
- break;
-
- // Georgian-PS
- case 'georgian-ps':
- $return['encoding'] = 'Georgian-PS';
- $return['use_iconv'] = true;
- break;
-
- // HTML-ENTITIES
- case 'html-entities':
- case 'htmlentities':
- $return['encoding'] = 'HTML-ENTITIES';
- $return['use_mbstring'] = true;
- break;
-
- // HZ
- case 'hz':
- $return['encoding'] = 'HZ';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-2022-CN
- case 'iso-2022-cn':
- case 'iso2022-cn':
- case 'iso2022cn':
- $return['encoding'] = 'ISO-2022-CN';
- $return['use_iconv'] = true;
- break;
-
- // ISO-2022-CN-EXT
- case 'iso-2022-cn-ext':
- case 'iso2022-cn-ext':
- case 'iso2022cn-ext':
- case 'iso2022cnext':
- $return['encoding'] = 'ISO-2022-CN';
- $return['use_iconv'] = true;
- break;
-
- // ISO-2022-JP
- case 'iso-2022-jp':
- case 'iso2022-jp':
- case 'iso2022jp':
- $return['encoding'] = 'ISO-2022-JP';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-2022-JP-1
- case 'iso-2022-jp-1':
- case 'iso2022-jp-1':
- case 'iso2022jp-1':
- case 'iso2022jp1':
- $return['encoding'] = 'ISO-2022-JP-1';
- $return['use_iconv'] = true;
- break;
-
- // ISO-2022-JP-2
- case 'iso-2022-jp-2':
- case 'iso2022-jp-2':
- case 'iso2022jp-2':
- case 'iso2022jp2':
- $return['encoding'] = 'ISO-2022-JP-2';
- $return['use_iconv'] = true;
- break;
-
- // ISO-2022-JP-3
- case 'iso-2022-jp-3':
- case 'iso2022-jp-3':
- case 'iso2022jp-3':
- case 'iso2022jp3':
- $return['encoding'] = 'ISO-2022-JP-3';
- $return['use_iconv'] = true;
- break;
-
- // ISO-2022-KR
- case 'iso-2022-kr':
- case 'iso2022-kr':
- case 'iso2022kr':
- $return['encoding'] = 'ISO-2022-KR';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-1
- case 'iso-8859-1':
- case 'iso8859-1':
- $return['encoding'] = 'ISO-8859-1';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-2
- case 'iso-8859-2':
- case 'iso8859-2':
- $return['encoding'] = 'ISO-8859-2';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-3
- case 'iso-8859-3':
- case 'iso8859-3':
- $return['encoding'] = 'ISO-8859-3';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-4
- case 'iso-8859-4':
- case 'iso8859-4':
- $return['encoding'] = 'ISO-8859-4';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-5
- case 'iso-8859-5':
- case 'iso8859-5':
- $return['encoding'] = 'ISO-8859-5';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-6
- case 'iso-8859-6':
- case 'iso8859-6':
- $return['encoding'] = 'ISO-8859-6';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-7
- case 'iso-8859-7':
- case 'iso8859-7':
- $return['encoding'] = 'ISO-8859-7';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-8
- case 'iso-8859-8':
- case 'iso8859-8':
- $return['encoding'] = 'ISO-8859-8';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-9
- case 'iso-8859-9':
- case 'iso8859-9':
- $return['encoding'] = 'ISO-8859-9';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-10
- case 'iso-8859-10':
- case 'iso8859-10':
- $return['encoding'] = 'ISO-8859-10';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // mbstring/iconv functions don't appear to support 11 & 12
-
- // ISO-8859-13
- case 'iso-8859-13':
- case 'iso8859-13':
- $return['encoding'] = 'ISO-8859-13';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-14
- case 'iso-8859-14':
- case 'iso8859-14':
- $return['encoding'] = 'ISO-8859-14';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-15
- case 'iso-8859-15':
- case 'iso8859-15':
- $return['encoding'] = 'ISO-8859-15';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // ISO-8859-16
- case 'iso-8859-16':
- case 'iso8859-16':
- $return['encoding'] = 'ISO-8859-16';
- $return['use_iconv'] = true;
- break;
-
- // JIS
- case 'jis':
- $return['encoding'] = 'JIS';
- $return['use_mbstring'] = true;
- break;
-
- // JOHAB - Korean
- case 'johab':
- $return['encoding'] = 'JOHAB';
- $return['use_iconv'] = true;
- break;
-
- // Russian
- case 'koi8-r':
- case 'koi8r':
- $return['encoding'] = 'KOI8-R';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // Turkish
- case 'koi8-t':
- case 'koi8t':
- $return['encoding'] = 'KOI8-T';
- $return['use_iconv'] = true;
- break;
-
- // Ukrainian
- case 'koi8-u':
- case 'koi8u':
- $return['encoding'] = 'KOI8-U';
- $return['use_iconv'] = true;
- break;
-
- // Russian+Ukrainian
- case 'koi8-ru':
- case 'koi8ru':
- $return['encoding'] = 'KOI8-RU';
- $return['use_iconv'] = true;
- break;
-
- // Macintosh (Mac OS Classic)
- case 'macintosh':
- $return['encoding'] = 'Macintosh';
- $return['use_iconv'] = true;
- break;
-
- // MacArabic (Mac OS Classic)
- case 'macarabic':
- $return['encoding'] = 'MacArabic';
- $return['use_iconv'] = true;
- break;
-
- // MacCentralEurope (Mac OS Classic)
- case 'maccentraleurope':
- $return['encoding'] = 'MacCentralEurope';
- $return['use_iconv'] = true;
- break;
-
- // MacCroatian (Mac OS Classic)
- case 'maccroatian':
- $return['encoding'] = 'MacCroatian';
- $return['use_iconv'] = true;
- break;
-
- // MacCyrillic (Mac OS Classic)
- case 'maccyrillic':
- $return['encoding'] = 'MacCyrillic';
- $return['use_iconv'] = true;
- break;
-
- // MacGreek (Mac OS Classic)
- case 'macgreek':
- $return['encoding'] = 'MacGreek';
- $return['use_iconv'] = true;
- break;
-
- // MacHebrew (Mac OS Classic)
- case 'machebrew':
- $return['encoding'] = 'MacHebrew';
- $return['use_iconv'] = true;
- break;
-
- // MacIceland (Mac OS Classic)
- case 'maciceland':
- $return['encoding'] = 'MacIceland';
- $return['use_iconv'] = true;
- break;
-
- // MacRoman (Mac OS Classic)
- case 'macroman':
- $return['encoding'] = 'MacRoman';
- $return['use_iconv'] = true;
- break;
-
- // MacRomania (Mac OS Classic)
- case 'macromania':
- $return['encoding'] = 'MacRomania';
- $return['use_iconv'] = true;
- break;
-
- // MacThai (Mac OS Classic)
- case 'macthai':
- $return['encoding'] = 'MacThai';
- $return['use_iconv'] = true;
- break;
-
- // MacTurkish (Mac OS Classic)
- case 'macturkish':
- $return['encoding'] = 'MacTurkish';
- $return['use_iconv'] = true;
- break;
-
- // MacUkraine (Mac OS Classic)
- case 'macukraine':
- $return['encoding'] = 'MacUkraine';
- $return['use_iconv'] = true;
- break;
-
- // MuleLao-1
- case 'mulelao-1':
- case 'mulelao1':
- $return['encoding'] = 'MuleLao-1';
- $return['use_iconv'] = true;
- break;
-
- // Shift_JIS
- case 'shift_jis':
- case 'sjis':
- case '932':
- $return['encoding'] = 'Shift_JIS';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // Shift_JISX0213
- case 'shift-jisx0213':
- case 'shiftjisx0213':
- $return['encoding'] = 'Shift_JISX0213';
- $return['use_iconv'] = true;
- break;
-
- // SJIS-win
- case 'sjis-win':
- case 'sjiswin':
- case 'shift_jis-win':
- $return['encoding'] = 'SJIS-win';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // TCVN - Vietnamese
- case 'tcvn':
- $return['encoding'] = 'TCVN';
- $return['use_iconv'] = true;
- break;
-
- // TDS565 - Turkish
- case 'tds565':
- $return['encoding'] = 'TDS565';
- $return['use_iconv'] = true;
- break;
-
- // TIS-620 Thai
- case 'tis-620':
- case 'tis620':
- $return['encoding'] = 'TIS-620';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-2
- case 'ucs-2':
- case 'ucs2':
- case 'utf-16':
- case 'utf16':
- $return['encoding'] = 'UCS-2';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-2BE
- case 'ucs-2be':
- case 'ucs2be':
- case 'utf-16be':
- case 'utf16be':
- $return['encoding'] = 'UCS-2BE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-2LE
- case 'ucs-2le':
- case 'ucs2le':
- case 'utf-16le':
- case 'utf16le':
- $return['encoding'] = 'UCS-2LE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-2-INTERNAL
- case 'ucs-2-internal':
- case 'ucs2internal':
- $return['encoding'] = 'UCS-2-INTERNAL';
- $return['use_iconv'] = true;
- break;
-
- // UCS-4
- case 'ucs-4':
- case 'ucs4':
- case 'utf-32':
- case 'utf32':
- $return['encoding'] = 'UCS-4';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-4BE
- case 'ucs-4be':
- case 'ucs4be':
- case 'utf-32be':
- case 'utf32be':
- $return['encoding'] = 'UCS-4BE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-4LE
- case 'ucs-4le':
- case 'ucs4le':
- case 'utf-32le':
- case 'utf32le':
- $return['encoding'] = 'UCS-4LE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-4-INTERNAL
- case 'ucs-4-internal':
- case 'ucs4internal':
- $return['encoding'] = 'UCS-4-INTERNAL';
- $return['use_iconv'] = true;
- break;
-
- // UCS-16
- case 'ucs-16':
- case 'ucs16':
- $return['encoding'] = 'UCS-16';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-16BE
- case 'ucs-16be':
- case 'ucs16be':
- $return['encoding'] = 'UCS-16BE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-16LE
- case 'ucs-16le':
- case 'ucs16le':
- $return['encoding'] = 'UCS-16LE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-32
- case 'ucs-32':
- case 'ucs32':
- $return['encoding'] = 'UCS-32';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-32BE
- case 'ucs-32be':
- case 'ucs32be':
- $return['encoding'] = 'UCS-32BE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UCS-32LE
- case 'ucs-32le':
- case 'ucs32le':
- $return['encoding'] = 'UCS-32LE';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UTF-7
- case 'utf-7':
- case 'utf7':
- $return['encoding'] = 'UTF-7';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // UTF7-IMAP
- case 'utf-7-imap':
- case 'utf7-imap':
- case 'utf7imap':
- $return['encoding'] = 'UTF7-IMAP';
- $return['use_mbstring'] = true;
- break;
-
- // VISCII - Vietnamese ASCII
- case 'viscii':
- $return['encoding'] = 'VISCII';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Central & Eastern Europe
- case 'cp1250':
- case 'windows-1250':
- case 'win-1250':
- case '1250':
- $return['encoding'] = 'Windows-1250';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Cyrillic
- case 'cp1251':
- case 'windows-1251':
- case 'win-1251':
- case '1251':
- $return['encoding'] = 'Windows-1251';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // Windows-specific Western Europe
- case 'cp1252':
- case 'windows-1252':
- case '1252':
- $return['encoding'] = 'Windows-1252';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
-
- // Windows-specific Greek
- case 'cp1253':
- case 'windows-1253':
- case '1253':
- $return['encoding'] = 'Windows-1253';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Turkish
- case 'cp1254':
- case 'windows-1254':
- case '1254':
- $return['encoding'] = 'Windows-1254';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Hebrew
- case 'cp1255':
- case 'windows-1255':
- case '1255':
- $return['encoding'] = 'Windows-1255';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Arabic
- case 'cp1256':
- case 'windows-1256':
- case '1256':
- $return['encoding'] = 'Windows-1256';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Baltic
- case 'cp1257':
- case 'windows-1257':
- case '1257':
- $return['encoding'] = 'Windows-1257';
- $return['use_iconv'] = true;
- break;
-
- // Windows-specific Vietnamese
- case 'cp1258':
- case 'windows-1258':
- case '1258':
- $return['encoding'] = 'Windows-1258';
- $return['use_iconv'] = true;
- break;
-
- // Default to UTF-8
- default:
- $return['encoding'] = 'UTF-8';
- $return['use_iconv'] = true;
- $return['use_mbstring'] = true;
- break;
- }
-
- // Then, return it.
- return $return;
- }
-
- function get_curl_version()
- {
- $curl = 0;
- if (is_array(curl_version()))
- {
- $curl = curl_version();
- $curl = $curl['version'];
- }
- else
- {
- $curl = curl_version();
- $curl = explode(' ', $curl);
- $curl = explode('/', $curl[0]);
- $curl = $curl[1];
- }
- return $curl;
- }
-
- function is_a_class($class1, $class2)
- {
- if (class_exists($class1))
- {
- $classes = array(strtolower($class1));
- while ($class1 = get_parent_class($class1))
- {
- $classes[] = strtolower($class1);
- }
- return in_array(strtolower($class2), $classes);
- }
- else
- {
- return false;
- }
- }
-}
-
-class SimplePie_Locator
-{
- var $useragent;
- var $timeout;
- var $file;
- var $local;
- var $elsewhere;
-
- function SimplePie_Locator(&$file, $timeout = 10, $useragent = null)
- {
- if (!is_a($file, 'SimplePie_File'))
- {
- $this->file = new SimplePie_File($file, $timeout, $useragent);
- }
- else
- {
- $this->file =& $file;
- }
- $this->useragent = $useragent;
- $this->timeout = $timeout;
- }
-
-
- function find()
- {
- if ($this->is_feed($this->file))
- {
- return $this->file->url;
- }
-
- $autodiscovery = $this->autodiscovery($this->file);
- if ($autodiscovery)
- {
- return $autodiscovery;
- }
-
- if ($this->get_links($this->file))
- {
- if (!empty($this->local))
- {
- $extension_local = $this->extension($this->local);
- if ($extension_local)
- {
- return $extension_local;
- }
-
- $body_local = $this->body($this->local);
- if ($body_local)
- {
- return $body_local;
- }
- }
-
- if (!empty($this->elsewhere))
- {
- $extension_elsewhere = $this->extension($this->elsewhere);
- if ($extension_elsewhere)
- {
- return $extension_elsewhere;
- }
-
- $body_elsewhere = $this->body($this->elsewhere);
- if ($body_elsewhere)
- {
- return $body_elsewhere;
- }
- }
- }
- return false;
- }
-
- function is_feed(&$file)
- {
- if (!is_a($file, 'SimplePie_File'))
- {
- if (isset($this))
- {
- $file2 = new SimplePie_File($file, $this->timeout, 5, null, $this->useragent);
- }
- else
- {
- $file2 = new SimplePie_File($file);
- }
- $file2->body();
- $file2->close();
- }
- else
- {
- $file2 =& $file;
- }
- $body = preg_replace('/<\!-(.*)-\>/msiU', '', $file2->body());
- if (preg_match('/<(\w+\:)?rss/msiU', $body) || preg_match('/<(\w+\:)?RDF/mi', $body) || preg_match('/<(\w+\:)?feed/mi', $body))
- {
- return true;
- }
- return false;
- }
-
- function autodiscovery(&$file)
- {
- $links = SimplePie_Misc::get_element('link', $file->body());
- $done = array();
- foreach ($links as $link)
- {
- if (!empty($link['attribs']['TYPE']['data']) && !empty($link['attribs']['HREF']['data']))
- {
- $type = strtolower(trim($link['attribs']['TYPE']['data']));
- $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['HREF']['data']), $this->file->url);
- if (!in_array($href, $done) && in_array($type, array('application/rss+xml', 'application/atom+xml', 'application/rdf+xml', 'application/xml+rss', 'application/xml+atom', 'application/xml+rdf', 'application/xml', 'application/x.atom+xml', 'text/xml')))
- {
- $feed = $this->is_feed($href);
- if ($feed)
- {
- return $href;
- }
- }
- $done[] = $href;
- }
- }
- return false;
- }
-
- function get_links(&$file)
- {
- $links = SimplePie_Misc::get_element('a', $file->body());
- foreach ($links as $link)
- {
- if (!empty($link['attribs']['HREF']['data']))
- {
- $href = trim($link['attribs']['HREF']['data']);
- $parsed = SimplePie_Misc::parse_url($href);
- if (empty($parsed['scheme']) || $parsed['scheme'] != 'javascript')
- {
- $current = SimplePie_Misc::parse_url($this->file->url);
- if (empty($parsed['authority']) || $parsed['authority'] == $current['authority'])
- {
- $this->local[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
- }
- else
- {
- $this->elsewhere[] = SimplePie_Misc::absolutize_url($href, $this->file->url);
- }
- }
- }
- }
- if (!empty($this->local))
- {
- $this->local = array_unique($this->local);
- }
- if (!empty($this->elsewhere))
- {
- $this->elsewhere = array_unique($this->elsewhere);
- }
- if (!empty($this->local) || !empty($this->elsewhere))
- {
- return true;
- }
- return false;
- }
-
- function extension(&$array)
- {
- foreach ($array as $key => $value)
- {
- $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
- if (in_array(strrchr($value, '.'), array('.rss', '.rdf', '.atom', '.xml')))
- {
- if ($this->is_feed($value))
- {
- return $value;
- }
- else
- {
- unset($array[$key]);
- }
- }
- }
- return false;
- }
-
- function body(&$array)
- {
- foreach ($array as $key => $value)
- {
- $value = SimplePie_Misc::absolutize_url($value, $this->file->url);
- if (preg_match('/(rss|rdf|atom|xml)/i', $value))
- {
- if ($this->is_feed($value))
- {
- return $value;
- }
- else
- {
- unset($array[$key]);
- }
- }
- }
- return false;
- }
-}
-
-class SimplePie_Parser
-{
- var $encoding;
- var $data;
- var $namespaces = array('xml' => 'HTTP://WWW.W3.ORG/XML/1998/NAMESPACE', 'atom' => 'ATOM', 'rss2' => 'RSS', 'rdf' => 'RDF', 'rss1' => 'RSS', 'dc' => 'DC', 'xhtml' => 'XHTML', 'content' => 'CONTENT');
- var $xml;
- var $error_code;
- var $error_string;
- var $current_line;
- var $current_column;
- var $current_byte;
- var $tag_name;
- var $inside_item;
- var $item_number = 0;
- var $inside_channel;
- var $author_number= 0;
- var $category_number = 0;
- var $enclosure_number = 0;
- var $link_number = 0;
- var $item_link_number = 0;
- var $inside_image;
- var $attribs;
- var $is_first;
- var $inside_author;
-
-
- function SimplePie_Parser($data, $encoding, $return_xml = false)
- {
- $this->encoding = $encoding;
-
- // Strip BOM:
- // UTF-32 Big Endian BOM
- if (strpos($data, sprintf('%c%c%c%c', 0x00, 0x00, 0xFE, 0xFF)) === 0)
- {
- $data = substr($data, 4);
- }
- // UTF-32 Little Endian BOM
- else if (strpos($data, sprintf('%c%c%c%c', 0xFF, 0xFE, 0x00, 0x00)) === 0)
- {
- $data = substr($data, 4);
- }
- // UTF-16 Big Endian BOM
- else if (strpos($data, sprintf('%c%c', 0xFE, 0xFF)) === 0)
- {
- $data = substr($data, 2);
- }
- // UTF-16 Little Endian BOM
- else if (strpos($data, sprintf('%c%c', 0xFF, 0xFE)) === 0)
- {
- $data = substr($data, 2);
- }
- // UTF-8 BOM
- else if (strpos($data, sprintf('%c%c%c', 0xEF, 0xBB, 0xBF)) === 0)
- {
- $data = substr($data, 3);
- }
-
- // Make sure the XML prolog is sane and has the correct encoding
- if (preg_match('/^<\?xml(.*)?>/msiU', $data, $prolog))
- {
- $data = substr_replace($data, '', 0, strlen($prolog[0]));
- }
- $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
-
- // Add an internal attribute to CDATA sections
- $data = preg_replace_callback('/<(\S+)((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'))*)\s*(\/>|>\s*<\!\[CDATA\[(.*)<\/\\1>)/msiU', array(&$this, 'spencoded'), $data);
-
- // Put some data into CDATA blocks
- // If we're RSS
- if ((stristr($data, '<rss') || preg_match('/<([a-z0-9]+\:)?RDF/mi', $data)) && (preg_match('/<([a-z0-9]+\:)?channel/mi', $data) || preg_match('/<([a-z0-9]+\:)?item/mi', $data)))
- {
- $sp_elements = array(
- 'author',
- 'description',
- 'link',
- 'title',
- );
- }
- // Or if we're Atom
- else
- {
- $sp_elements = array(
- 'content',
- 'copyright',
- 'name',
- 'subtitle',
- 'summary',
- 'tagline',
- 'title',
- );
- }
- foreach ($sp_elements as $full)
- {
- $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|>(.*)<\/$full>)/msiU", array(&$this, 'add_cdata'), $data);
- }
- foreach ($sp_elements as $full)
- {
- // Deal with CDATA within CDATA (this can be caused by us inserting CDATA above)
- $data = preg_replace_callback("/<($full)((\s*((\w+:)?\w+)\s*=\s*(\"([^\"]*)\"|'([^']*)'))*)\s*(\/>|><!\[CDATA\[(.*)\]\]><\/$full>)/msiU", array(&$this, 'cdata_in_cdata'), $data);
- }
-
- // Return the XML, if so desired
- if ($return_xml)
- {
- $this->data =& $data;
- return;
- }
-
- // Create the parser
- $this->xml = xml_parser_create_ns($encoding);
- xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
- xml_set_object($this->xml, $this);
- xml_set_character_data_handler($this->xml, 'data_handler');
- xml_set_element_handler($this->xml, 'start_handler', 'end_handler');
- xml_set_start_namespace_decl_handler($this->xml, 'start_name_space');
- xml_set_end_namespace_decl_handler($this->xml, 'end_name_space');
-
- // Parse!
- if (!xml_parse($this->xml, $data))
- {
- $this->data = null;
- $this->error_code = xml_get_error_code($this->xml);
- $this->error_string = xml_error_string($this->error_code);
- }
- $this->current_line = xml_get_current_line_number($this->xml);
- $this->current_column = xml_get_current_column_number($this->xml);
- $this->current_byte = xml_get_current_byte_index($this->xml);
- xml_parser_free($this->xml);
- return;
- }
-
- function add_cdata($match)
- {
- if (isset($match[10]))
- {
- $match[10] = preg_replace('/^\s*<\!\[CDATA\[(.*)]]>\s*$/msiU', '\\1', $match[10]);
- return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
- }
- return $match[0];
- }
-
- function spencoded($match)
- {
- if (isset($match[10]))
- {
- return "<$match[1]$match[2] spencoded=\"false\"><![CDATA[$match[10]</$match[1]>";
- }
- return $match[0];
- }
-
- function cdata_in_cdata($match)
- {
- if (isset($match[10]))
- {
- $match[10] = preg_replace_callback('/<!\[CDATA\[(.*)\]\]>/msiU', array(&$this, 'real_cdata_in_cdata'), $match[10]);
- return "<$match[1]$match[2]><![CDATA[$match[10]]]></$match[1]>";
- }
- return $match[0];
- }
-
- function real_cdata_in_cdata($match)
- {
- return htmlentities($match[1], ENT_NOQUOTES, $this->encoding);
- }
-
- function do_add_content(&$array, $data)
- {
- if ($this->is_first)
- {
- $array['data'] = $data;
- $array['attribs'] = $this->attribs;
- }
- else
- {
- $array['data'] .= $data;
- }
- }
-
- function start_handler($parser, $name, $attribs)
- {
- $this->tag_name = $name;
- $this->attribs = $attribs;
- $this->is_first = true;
- switch ($this->tag_name)
- {
- case 'ITEM':
- case $this->namespaces['rss2'] . ':ITEM':
- case $this->namespaces['rss1'] . ':ITEM':
- case 'ENTRY':
- case $this->namespaces['atom'] . ':ENTRY':
- $this->inside_item = true;
- $this->do_add_content($this->data['items'][$this->item_number], '');
- break;
-
- case 'CHANNEL':
- case $this->namespaces['rss2'] . ':CHANNEL':
- case $this->namespaces['rss1'] . ':CHANNEL':
- $this->inside_channel = true;
- break;
-
- case 'RSS':
- case $this->namespaces['rss2'] . ':RSS':
- $this->data['feedinfo']['type'] = 'RSS';
- $this->do_add_content($this->data['feeddata'], '');
- if (!empty($attribs['VERSION']))
- {
- $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
- }
- break;
-
- case $this->namespaces['rdf'] . ':RDF':
- $this->data['feedinfo']['type'] = 'RSS';
- $this->do_add_content($this->data['feeddata'], '');
- $this->data['feedinfo']['version'] = 1;
- break;
-
- case 'FEED':
- case $this->namespaces['atom'] . ':FEED':
- $this->data['feedinfo']['type'] = 'Atom';
- $this->do_add_content($this->data['feeddata'], '');
- if (!empty($attribs['VERSION']))
- {
- $this->data['feedinfo']['version'] = trim($attribs['VERSION']);
- }
- break;
-
- case 'IMAGE':
- case $this->namespaces['rss2'] . ':IMAGE':
- case $this->namespaces['rss1'] . ':IMAGE':
- if ($this->inside_channel)
- {
- $this->inside_image = true;
- }
- break;
- }
-
- if (!empty($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom' && ($this->tag_name == 'AUTHOR' || $this->tag_name == $this->namespaces['atom'] . ':AUTHOR'))
- {
- $this->inside_author = true;
- }
- $this->data_handler($this->xml, '');
- }
-
- function data_handler($parser, $data)
- {
- if ($this->inside_item)
- {
- switch ($this->tag_name)
- {
- case 'TITLE':
- case $this->namespaces['rss1'] . ':TITLE':
- case $this->namespaces['rss2'] . ':TITLE':
- case $this->namespaces['atom'] . ':TITLE':
- $this->do_add_content($this->data['items'][$this->item_number]['title'], $data);
- break;
-
- case $this->namespaces['dc'] . ':TITLE':
- $this->do_add_content($this->data['items'][$this->item_number]['dc:title'], $data);
- break;
-
- case 'CONTENT':
- case $this->namespaces['atom'] . ':CONTENT':
- $this->do_add_content($this->data['items'][$this->item_number]['content'], $data);
- break;
-
- case $this->namespaces['content'] . ':ENCODED':
- $this->do_add_content($this->data['items'][$this->item_number]['encoded'], $data);
- break;
-
- case 'SUMMARY':
- case $this->namespaces['atom'] . ':SUMMARY':
- $this->do_add_content($this->data['items'][$this->item_number]['summary'], $data);
- break;
-
- case 'LONGDESC':
- $this->do_add_content($this->data['items'][$this->item_number]['longdesc'], $data);
- break;
-
- case 'DESCRIPTION':
- case $this->namespaces['rss1'] . ':DESCRIPTION':
- case $this->namespaces['rss2'] . ':DESCRIPTION':
- $this->do_add_content($this->data['items'][$this->item_number]['description'], $data);
- break;
-
- case $this->namespaces['dc'] . ':DESCRIPTION':
- $this->do_add_content($this->data['items'][$this->item_number]['dc:description'], $data);
- break;
-
- case 'LINK':
- case $this->namespaces['rss1'] . ':LINK':
- case $this->namespaces['rss2'] . ':LINK':
- case $this->namespaces['atom'] . ':LINK':
- $this->do_add_content($this->data['items'][$this->item_number]['link'][$this->item_link_number], $data);
- break;
-
- case 'ENCLOSURE':
- case $this->namespaces['rss1'] . ':ENCLOSURE':
- case $this->namespaces['rss2'] . ':ENCLOSURE':
- case $this->namespaces['atom'] . ':ENCLOSURE':
- $this->do_add_content($this->data['items'][$this->item_number]['enclosure'][$this->enclosure_number], $data);
- break;
-
- case 'GUID':
- case $this->namespaces['rss1'] . ':GUID':
- case $this->namespaces['rss2'] . ':GUID':
- $this->do_add_content($this->data['items'][$this->item_number]['guid'], $data);
- break;
-
- case 'ID':
- case $this->namespaces['atom'] . ':ID':
- $this->do_add_content($this->data['items'][$this->item_number]['id'], $data);
- break;
-
- case 'PUBDATE':
- case $this->namespaces['rss1'] . ':PUBDATE':
- case $this->namespaces['rss2'] . ':PUBDATE':
- $this->do_add_content($this->data['items'][$this->item_number]['pubdate'], $data);
- break;
-
- case $this->namespaces['dc'] . ':DATE':
- $this->do_add_content($this->data['items'][$this->item_number]['dc:date'], $data);
- break;
-
- case 'ISSUED':
- case $this->namespaces['atom'] . ':ISSUED':
- $this->do_add_content($this->data['items'][$this->item_number]['issued'], $data);
- break;
-
- case 'PUBLISHED':
- case $this->namespaces['atom'] . ':PUBLISHED':
- $this->do_add_content($this->data['items'][$this->item_number]['published'], $data);
- break;
-
- case 'MODIFIED':
- case $this->namespaces['atom'] . ':MODIFIED':
- $this->do_add_content($this->data['items'][$this->item_number]['modified'], $data);
- break;
-
- case 'UPDATED':
- case $this->namespaces['atom'] . ':UPDATED':
- $this->do_add_content($this->data['items'][$this->item_number]['updated'], $data);
- break;
-
- case 'CATEGORY':
- case $this->namespaces['rss1'] . ':CATEGORY':
- case $this->namespaces['rss2'] . ':CATEGORY':
- case $this->namespaces['atom'] . ':CATEGORY':
- $this->do_add_content($this->data['items'][$this->item_number]['category'][$this->category_number], $data);
- break;
-
- case $this->namespaces['dc'] . ':SUBJECT':
- $this->do_add_content($this->data['items'][$this->item_number]['subject'][$this->category_number], $data);
- break;
-
- case $this->namespaces['dc'] . ':CREATOR':
- $this->do_add_content($this->data['items'][$this->item_number]['creator'][$this->author_number], $data);
- break;
-
- case 'AUTHOR':
- case $this->namespaces['rss1'] . ':AUTHOR':
- case $this->namespaces['rss2'] . ':AUTHOR':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['rss'], $data);
- break;
- }
-
- if ($this->inside_author)
- {
- switch ($this->tag_name)
- {
- case 'NAME':
- case $this->namespaces['atom'] . ':NAME':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['name'], $data);
- break;
-
- case 'URL':
- case $this->namespaces['atom'] . ':URL':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['url'], $data);
- break;
-
- case 'URI':
- case $this->namespaces['atom'] . ':URI':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['uri'], $data);
- break;
-
- case 'HOMEPAGE':
- case $this->namespaces['atom'] . ':HOMEPAGE':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['homepage'], $data);
- break;
-
- case 'EMAIL':
- case $this->namespaces['atom'] . ':EMAIL':
- $this->do_add_content($this->data['items'][$this->item_number]['author'][$this->author_number]['email'], $data);
- break;
- }
- }
- }
-
- else if (($this->inside_channel && !$this->inside_image) || (isset($this->data['feedinfo']['type']) && $this->data['feedinfo']['type'] == 'Atom'))
- {
- switch ($this->tag_name)
- {
- case 'TITLE':
- case $this->namespaces['rss1'] . ':TITLE':
- case $this->namespaces['rss2'] . ':TITLE':
- case $this->namespaces['atom'] . ':TITLE':
- $this->do_add_content($this->data['info']['title'], $data);
- break;
-
- case 'LINK':
- case $this->namespaces['rss1'] . ':LINK':
- case $this->namespaces['rss2'] . ':LINK':
- case $this->namespaces['atom'] . ':LINK':
- $this->do_add_content($this->data['info']['link'][$this->link_number], $data);
- break;
-
- case 'DESCRIPTION':
- case $this->namespaces['rss1'] . ':DESCRIPTION':
- case $this->namespaces['rss2'] . ':DESCRIPTION':
- $this->do_add_content($this->data['info']['description'], $data);
- break;
-
- case $this->namespaces['dc'] . ':DESCRIPTION':
- $this->do_add_content($this->data['info']['dc:description'], $data);
- break;
-
- case 'TAGLINE':
- case $this->namespaces['atom'] . ':TAGLINE':
- $this->do_add_content($this->data['info']['tagline'], $data);
- break;
-
- case 'SUBTITLE':
- case $this->namespaces['atom'] . ':SUBTITLE':
- $this->do_add_content($this->data['info']['subtitle'], $data);
- break;
-
- case 'COPYRIGHT':
- case $this->namespaces['rss1'] . ':COPYRIGHT':
- case $this->namespaces['rss2'] . ':COPYRIGHT':
- case $this->namespaces['atom'] . ':COPYRIGHT':
- $this->do_add_content($this->data['info']['copyright'], $data);
- break;
-
- case 'LANGUAGE':
- case $this->namespaces['rss1'] . ':LANGUAGE':
- case $this->namespaces['rss2'] . ':LANGUAGE':
- $this->do_add_content($this->data['info']['language'], $data);
- break;
-
- case 'LOGO':
- case $this->namespaces['atom'] . ':LOGO':
- $this->do_add_content($this->data['info']['logo'], $data);
- break;
-
- }
- }
-
- else if ($this->inside_channel && $this->inside_image)
- {
- switch ($this->tag_name)
- {
- case 'TITLE':
- case $this->namespaces['rss1'] . ':TITLE':
- case $this->namespaces['rss2'] . ':TITLE':
- $this->do_add_content($this->data['info']['image']['title'], $data);
- break;
-
- case 'URL':
- case $this->namespaces['rss1'] . ':URL':
- case $this->namespaces['rss2'] . ':URL':
- $this->do_add_content($this->data['info']['image']['url'], $data);
- break;
-
- case 'LINK':
- case $this->namespaces['rss1'] . ':LINK':
- case $this->namespaces['rss2'] . ':LINK':
- $this->do_add_content($this->data['info']['image']['link'], $data);
- break;
-
- case 'WIDTH':
- case $this->namespaces['rss1'] . ':WIDTH':
- case $this->namespaces['rss2'] . ':WIDTH':
- $this->do_add_content($this->data['info']['image']['width'], $data);
- break;
-
- case 'HEIGHT':
- case $this->namespaces['rss1'] . ':HEIGHT':
- case $this->namespaces['rss2'] . ':HEIGHT':
- $this->do_add_content($this->data['info']['image']['height'], $data);
- break;
- }
- }
- $this->is_first = false;
- }
-
- function end_handler($parser, $name)
- {
- $this->tag_name = '';
- switch ($name)
- {
- case 'ITEM':
- case $this->namespaces['rss1'] . ':ITEM':
- case $this->namespaces['rss2'] . ':ITEM':
- case 'ENTRY':
- case $this->namespaces['atom'] . ':ENTRY':
- $this->inside_item = false;
- $this->item_number++;
- $this->author_number = 0;
- $this->category_number = 0;
- $this->enclosure_number = 0;
- $this->item_link_number = 0;
- break;
-
- case 'CHANNEL':
- case $this->namespaces['rss1'] . ':CHANNEL':
- case $this->namespaces['rss2'] . ':CHANNEL':
- $this->inside_channel = false;
- break;
-
- case 'IMAGE':
- case $this->namespaces['rss1'] . ':IMAGE':
- case $this->namespaces['rss2'] . ':IMAGE':
- $this->inside_image = false;
- break;
-
- case 'AUTHOR':
- case $this->namespaces['rss1'] . ':AUTHOR':
- case $this->namespaces['rss2'] . ':AUTHOR':
- case $this->namespaces['atom'] . ':AUTHOR':
- $this->author_number++;
- $this->inside_author = false;
- break;
-
- case 'CATEGORY':
- case $this->namespaces['rss1'] . ':CATEGORY':
- case $this->namespaces['rss2'] . ':CATEGORY':
- case $this->namespaces['atom'] . ':CATEGORY':
- case $this->namespaces['dc'] . ':SUBJECT':
- $this->category_number++;
- break;
-
- case 'ENCLOSURE':
- case $this->namespaces['rss1'] . ':ENCLOSURE':
- case $this->namespaces['rss2'] . ':ENCLOSURE':
- $this->enclosure_number++;
- break;
-
- case 'LINK':
- case $this->namespaces['rss1'] . ':LINK':
- case $this->namespaces['rss2'] . ':LINK':
- case $this->namespaces['atom'] . ':LINK':
- if ($this->inside_item)
- {
- $this->item_link_number++;
- }
- else
- {
- $this->link_number++;
- }
- break;
- }
- }
-
- function start_name_space($parser, $prefix, $uri = null)
- {
- $prefix = strtoupper($prefix);
- $uri = strtoupper($uri);
- if ($prefix == 'ATOM' || $uri == 'HTTP://WWW.W3.ORG/2005/ATOM' || $uri == 'HTTP://PURL.ORG/ATOM/NS#')
- {
- $this->namespaces['atom'] = $uri;
- }
- else if ($prefix == 'RSS2' || $uri == 'HTTP://BACKEND.USERLAND.COM/RSS2')
- {
- $this->namespaces['rss2'] = $uri;
- }
- else if ($prefix == 'RDF' || $uri == 'HTTP://WWW.W3.ORG/1999/02/22-RDF-SYNTAX-NS#')
- {
- $this->namespaces['rdf'] = $uri;
- }
- else if ($prefix == 'RSS' || $uri == 'HTTP://PURL.ORG/RSS/1.0/' || $uri == 'HTTP://MY.NETSCAPE.COM/RDF/SIMPLE/0.9/')
- {
- $this->namespaces['rss1'] = $uri;
- }
- else if ($prefix == 'DC' || $uri == 'HTTP://PURL.ORG/DC/ELEMENTS/1.1/')
- {
- $this->namespaces['dc'] = $uri;
- }
- else if ($prefix == 'XHTML' || $uri == 'HTTP://WWW.W3.ORG/1999/XHTML')
- {
- $this->namespaces['xhtml'] = $uri;
- $this->xhtml_prefix = $prefix;
- }
- else if ($prefix == 'CONTENT' || $uri == 'HTTP://PURL.ORG/RSS/1.0/MODULES/CONTENT/')
- {
- $this->namespaces['content'] = $uri;
- }
- }
-
- function end_name_space($parser, $prefix)
- {
- if ($key = array_search(strtoupper($prefix), $this->namespaces))
- {
- if ($key == 'atom')
- {
- $this->namespaces['atom'] = 'ATOM';
- }
- else if ($key == 'rss2')
- {
- $this->namespaces['rss2'] = 'RSS';
- }
- else if ($key == 'rdf')
- {
- $this->namespaces['rdf'] = 'RDF';
- }
- else if ($key == 'rss1')
- {
- $this->namespaces['rss1'] = 'RSS';
- }
- else if ($key == 'dc')
- {
- $this->namespaces['dc'] = 'DC';
- }
- else if ($key == 'xhtml')
- {
- $this->namespaces['xhtml'] = 'XHTML';
- $this->xhtml_prefix = 'XHTML';
- }
- else if ($key == 'content')
- {
- $this->namespaces['content'] = 'CONTENT';
- }
- }
- }
-}
-
-class SimplePie_Sanitize
-{
- // Private vars
- var $feedinfo;
- var $info;
- var $items;
- var $feed_xmlbase;
- var $item_xmlbase;
- var $attribs;
- var $cached_entities;
-
- // Options
- var $remove_div = true;
- var $strip_ads = false;
- var $replace_headers = false;
- var $bypass_image_hotlink = false;
- var $bypass_image_hotlink_page = false;
- var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
- var $encode_instead_of_strip = false;
- var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur');
- var $input_encoding = 'UTF-8';
- var $output_encoding = 'UTF-8';
- var $item_class = 'SimplePie_Item';
- var $author_class = 'SimplePie_Author';
- var $enclosure_class = 'SimplePie_Enclosure';
-
- function remove_div($enable = true)
- {
- $this->remove_div = (bool) $enable;
- }
-
- function strip_ads($enable = false)
- {
- $this->strip_ads = (bool) $enable;
- }
-
- function replace_headers($enable = false)
- {
- $this->enable_headers = (bool) $enable;
- }
-
- function bypass_image_hotlink($get = false)
- {
- if ($get)
- {
- $this->bypass_image_hotlink = (string) $get;
- }
- else
- {
- $this->bypass_image_hotlink = false;
- }
- }
-
- function bypass_image_hotlink_page($page = false)
- {
- if ($page)
- {
- $this->bypass_image_hotlink_page = (string) $page;
- }
- else
- {
- $this->bypass_image_hotlink_page = false;
- }
- }
-
- function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
- {
- if ($tags)
- {
- if (is_array($tags))
- {
- $this->strip_htmltags = $tags;
- }
- else
- {
- $this->strip_htmltags = explode(',', $tags);
- }
- }
- else
- {
- $this->strip_htmltags = false;
- }
- }
-
- function encode_instead_of_strip($enable = false)
- {
- $this->encode_instead_of_strip = (bool) $enable;
- }
-
- function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur'))
- {
- if ($attribs)
- {
- if (is_array($attribs))
- {
- $this->strip_attributes = $attribs;
- }
- else
- {
- $this->strip_attributes = explode(',', $attribs);
- }
- }
- else
- {
- $this->strip_attributes = false;
- }
- }
-
- function input_encoding($encoding = 'UTF-8')
- {
- $this->input_encoding = (string) $encoding;
- }
-
- function output_encoding($encoding = 'UTF-8')
- {
- $this->output_encoding = (string) $encoding;
- }
-
- function set_item_class($class = 'SimplePie_Item')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Item'))
- {
- $this->item_class = $class;
- return true;
- }
- return false;
- }
-
- function set_author_class($class = 'SimplePie_Author')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Author'))
- {
- $this->author_class = $class;
- return true;
- }
- return false;
- }
-
- function set_enclosure_class($class = 'SimplePie_Enclosure')
- {
- if (SimplePie_Misc::is_a_class($class, 'SimplePie_Enclosure'))
- {
- $this->enclosure_class = $class;
- return true;
- }
- return false;
- }
-
- function parse_data_array(&$data, $url)
- {
- // Feed Info (Type and Version)
- if (!empty($data['feedinfo']['type']))
- {
- $this->feedinfo = $data['feedinfo'];
- }
-
- // Feed level xml:base
- if (!empty($data['feeddata']['attribs']['XML:BASE']))
- {
- $this->feed_xmlbase = $data['feeddata']['attribs']['XML:BASE'];
- }
- else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
- {
- $this->feed_xmlbase = $data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
- }
- // FeedBurner feeds use alternate link
- else if (strpos($url, 'http://feeds.feedburner.com/') !== 0)
- {
- $this->feed_xmlbase = SimplePie_Misc::parse_url($url);
- if (empty($this->feed_xmlbase['authority']))
- {
- $this->feed_xmlbase = preg_replace('/^' . preg_quote(realpath($_SERVER['DOCUMENT_ROOT']), '/') . '/', '', realpath($url));
- }
- else
- {
- $this->feed_xmlbase = $url;
- }
- }
-
-
- // Feed link(s)
- if (!empty($data['info']['link']))
- {
- foreach ($data['info']['link'] as $link)
- {
- if (empty($link['attribs']['REL']))
- {
- $rel = 'alternate';
- }
- else
- {
- $rel = strtolower($link['attribs']['REL']);
- }
- if ($rel == 'enclosure')
- {
- $href = null;
- $type = null;
- $length = null;
- if (!empty($link['data']))
- {
- $href = $this->sanitize($link['data'], $link['attribs'], true);
- }
- else if (!empty($link['attribs']['HREF']))
- {
- $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
- }
- if (!empty($link['attribs']['TYPE'])) {
- $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
- }
- if (!empty($link['attribs']['LENGTH'])) {
- $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
- }
- $this->info['link']['enclosure'][] = new $this->enclosure_class($href, $type, $length);
- }
- else
- {
- if (!empty($link['data']))
- {
- $this->info['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
- }
- else if (!empty($link['attribs']['HREF']))
- {
- $this->info['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
- }
- }
- }
- }
-
- // Use the first alternate link if we don't have any feed xml:base
- if (empty($this->feed_xmlbase) && !empty($this->info['link']['alternate'][0]))
- {
- $this->feed_xmlbase = $this->info['link']['alternate'][0];
- }
-
- // Feed Title
- if (!empty($data['info']['title']['data']))
- {
- $this->info['title'] = $this->sanitize($data['info']['title']['data'], $data['info']['title']['attribs']);
- }
-
- // Feed Descriptions
- if (!empty($data['info']['description']['data']))
- {
- $this->info['description'] = $this->sanitize($data['info']['description']['data'], $data['info']['description']['attribs']);
- }
- if (!empty($data['info']['dc:description']['data']))
- {
- $this->info['dc:description'] = $this->sanitize($data['info']['dc:description']['data'], $data['info']['dc:description']['attribs']);
- }
- if (!empty($data['info']['tagline']['data']))
- {
- $this->info['tagline'] = $this->sanitize($data['info']['tagline']['data'], $data['info']['tagline']['attribs']);
- }
- if (!empty($data['info']['subtitle']['data']))
- {
- $this->info['subtitle'] = $this->sanitize($data['info']['subtitle']['data'], $data['info']['subtitle']['attribs']);
- }
-
- // Feed Language
- if (!empty($data['info']['language']['data']))
- {
- $this->info['language'] = $this->sanitize($data['info']['language']['data'], $data['info']['language']['attribs']);
- }
- if (!empty($data['feeddata']['attribs']['XML:LANG']))
- {
- $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['XML:LANG'], null);
- }
- else if (!empty($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG']))
- {
- $this->info['xml:lang'] = $this->sanitize($data['feeddata']['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:LANG'], null);
- }
-
- // Feed Copyright
- if (!empty($data['info']['copyright']['data']))
- {
- $this->info['copyright'] = $this->sanitize($data['info']['copyright']['data'], $data['info']['copyright']['attribs']);
- }
-
- // Feed Image
- if (!empty($data['info']['image']['title']['data']))
- {
- $this->info['image']['title'] = $this->sanitize($data['info']['image']['title']['data'], $data['info']['image']['title']['attribs']);
- }
- if (!empty($data['info']['image']['url']['data']))
- {
- $this->info['image']['url'] = $this->sanitize($data['info']['image']['url']['data'], $data['info']['image']['url']['attribs'], true);
- }
- if (!empty($data['info']['logo']['data']))
- {
- $this->info['image']['logo'] = $this->sanitize($data['info']['logo']['data'], $data['info']['logo']['attribs'], true);
- }
- if (!empty($data['info']['image']['link']['data']))
- {
- $this->info['image']['link'] = $this->sanitize($data['info']['image']['link']['data'], $data['info']['image']['link']['attribs'], true);
- }
- if (!empty($data['info']['image']['width']['data']))
- {
- $this->info['image']['width'] = $this->sanitize($data['info']['image']['width']['data'], $data['info']['image']['width']['attribs']);
- }
- if (!empty($data['info']['image']['height']['data']))
- {
- $this->info['image']['height'] = $this->sanitize($data['info']['image']['height']['data'], $data['info']['image']['height']['attribs']);
- }
-
- // Items
- if (!empty($data['items']))
- {
- foreach ($data['items'] as $key => $item)
- {
- $newitem = null;
-
- // Item level xml:base
- if (!empty($item['attribs']['XML:BASE']))
- {
- $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['XML:BASE'], $this->feed_xmlbase);
- }
- else if (!empty($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
- {
- $this->item_xmlbase = SimplePie_Misc::absolutize_url($item['attribs']['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'], $this->feed_xmlbase);
- }
- else
- {
- $this->item_xmlbase = null;
- }
-
- // Title
- if (!empty($item['title']['data'])) {
- $newitem['title'] = $this->sanitize($item['title']['data'], $item['title']['attribs']);
- }
- if (!empty($item['dc:title']['data']))
- {
- $newitem['dc:title'] = $this->sanitize($item['dc:title']['data'], $item['dc:title']['attribs']);
- }
-
- // Description
- if (!empty($item['content']['data']))
- {
- $newitem['content'] = $this->sanitize($item['content']['data'], $item['content']['attribs']);
- }
- if (!empty($item['encoded']['data']))
- {
- $newitem['encoded'] = $this->sanitize($item['encoded']['data'], $item['encoded']['attribs']);
- }
- if (!empty($item['summary']['data']))
- {
- $newitem['summary'] = $this->sanitize($item['summary']['data'], $item['summary']['attribs']);
- }
- if (!empty($item['description']['data']))
- {
- $newitem['description'] = $this->sanitize($item['description']['data'], $item['description']['attribs']);
- }
- if (!empty($item['dc:description']['data']))
- {
- $newitem['dc:description'] = $this->sanitize($item['dc:description']['data'], $item['dc:description']['attribs']);
- }
- if (!empty($item['longdesc']['data']))
- {
- $newitem['longdesc'] = $this->sanitize($item['longdesc']['data'], $item['longdesc']['attribs']);
- }
-
- // Link(s)
- if (!empty($item['link']))
- {
- foreach ($item['link'] as $link)
- {
- if (empty($link['attribs']['REL']))
- {
- $rel = 'alternate';
- }
- else
- {
- $rel = strtolower($link['attribs']['REL']);
- }
- if ($rel == 'enclosure')
- {
- $href = null;
- $type = null;
- $length = null;
- if (!empty($link['data']))
- {
- $href = $this->sanitize($link['data'], $link['attribs'], true);
- }
- else if (!empty($link['attribs']['HREF']))
- {
- $href = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
- }
- if (!empty($link['attribs']['TYPE'])) {
- $type = $this->sanitize($link['attribs']['TYPE'], $link['attribs']);
- }
- if (!empty($link['attribs']['LENGTH'])) {
- $length = $this->sanitize($link['attribs']['LENGTH'], $link['attribs']);
- }
- if (!empty($href))
- {
- $newitem['link'][$rel][] = new $this->enclosure_class($href, $type, $length);
- }
- }
- else
- {
- if (!empty($link['data']))
- {
- $newitem['link'][$rel][] = $this->sanitize($link['data'], $link['attribs'], true);
- }
- else if (!empty($link['attribs']['HREF']))
- {
- $newitem['link'][$rel][] = $this->sanitize($link['attribs']['HREF'], $link['attribs'], true);
- }
- }
- }
- }
-
- // Enclosure(s)
- if (!empty($item['enclosure']))
- {
- foreach ($item['enclosure'] as $enclosure)
- {
- if (!empty($enclosure['attribs']['URL']))
- {
- $type = null;
- $length = null;
- $href = $this->sanitize($enclosure['attribs']['URL'], $enclosure['attribs'], true);
- if (!empty($enclosure['attribs']['TYPE']))
- {
- $type = $this->sanitize($enclosure['attribs']['TYPE'], $enclosure['attribs']);
- }
- if (!empty($enclosure['attribs']['LENGTH']))
- {
- $length = $this->sanitize($enclosure['attribs']['LENGTH'], $enclosure['attribs']);
- }
- $newitem['enclosures'][] = new $this->enclosure_class($href, $type, $length);
- }
- }
- }
-
- // ID
- if (!empty($item['guid']['data']))
- {
- if (!empty($item['guid']['attribs']['ISPERMALINK']) && strtolower($item['guid']['attribs']['ISPERMALINK']) == 'false')
- {
- $newitem['guid']['permalink'] = false;
- }
- else
- {
- $newitem['guid']['permalink'] = true;
- }
- $newitem['guid']['data'] = $this->sanitize($item['guid']['data'], $item['guid']['attribs']);
- }
- if (!empty($item['id']['data']))
- {
- $newitem['id'] = $this->sanitize($item['id']['data'], $item['id']['attribs']);
- }
-
- // Date
- if (!empty($item['pubdate']['data']))
- {
- $newitem['pubdate'] = $this->parse_date($this->sanitize($item['pubdate']['data'], $item['pubdate']['attribs']));
- }
- if (!empty($item['dc:date']['data']))
- {
- $newitem['dc:date'] = $this->parse_date($this->sanitize($item['dc:date']['data'], $item['dc:date']['attribs']));
- }
- if (!empty($item['issued']['data']))
- {
- $newitem['issued'] = $this->parse_date($this->sanitize($item['issued']['data'], $item['issued']['attribs']));
- }
- if (!empty($item['published']['data']))
- {
- $newitem['published'] = $this->parse_date($this->sanitize($item['published']['data'], $item['published']['attribs']));
- }
- if (!empty($item['modified']['data']))
- {
- $newitem['modified'] = $this->parse_date($this->sanitize($item['modified']['data'], $item['modified']['attribs']));
- }
- if (!empty($item['updated']['data']))
- {
- $newitem['updated'] = $this->parse_date($this->sanitize($item['updated']['data'], $item['updated']['attribs']));
- }
-
- // Categories
- if (!empty($item['category']))
- {
- foreach ($item['category'] as $category)
- {
- if (!empty($category['data']))
- {
- $newitem['category'][] = $this->sanitize($category['data'], $category['attribs']);
- }
- else if (!empty($category['attribs']['TERM']))
- {
- $newitem['term'][] = $this->sanitize($category['attribs']['TERM'], $category['attribs']);
- }
- }
- }
- if (!empty($item['subject']))
- {
- foreach ($item['subject'] as $category)
- {
- if (!empty($category['data']))
- {
- $newitem['subject'][] = $this->sanitize($category['data'], $category['attribs']);
- }
- }
- }
-
- // Author
- if (!empty($item['creator']))
- {
- foreach ($item['creator'] as $creator)
- {
- if (!empty($creator['data']))
- {
- $newitem['creator'][] = new $this->author_class($this->sanitize($creator['data'], $creator['attribs']), null, null);
- }
- }
- }
- if (!empty($item['author']))
- {
- foreach ($item['author'] as $author)
- {
- $name = null;
- $link = null;
- $email = null;
- if (!empty($author['rss']))
- {
- $sane = $this->sanitize($author['rss']['data'], $author['rss']['attribs']);
- if (preg_match('/(.*)@(.*) \((.*)\)/msiU', $sane, $matches)) {
- $name = trim($matches[3]);
- $email = trim("$matches[1]@$matches[2]");
- } else {
- $email = $sane;
- }
- }
- else
- {
- if (!empty($author['name']))
- {
- $name = $this->sanitize($author['name']['data'], $author['name']['attribs']);
- }
- if (!empty($author['url']))
- {
- $link = $this->sanitize($author['url']['data'], $author['url']['attribs'], true);
- }
- else if (!empty($author['uri']))
- {
- $link = $this->sanitize($author['uri']['data'], $author['uri']['attribs'], true);
- }
- else if (!empty($author['homepage']))
- {
- $link = $this->sanitize($author['homepage']['data'], $author['homepage']['attribs'], true);
- }
- if (!empty($author['email'])) {
- $email = $this->sanitize($author['email']['data'], $author['email']['attribs']);
- }
- }
- $newitem['author'][] = new $this->author_class($name, $link, $email);
- }
- }
- unset($data['items'][$key]);
- $this->items[] = new $this->item_class($newitem);
- }
- }
- }
-
- function sanitize($data, $attribs, $is_url = false)
- {
- $this->attribs = $attribs;
- if (isset($this->feedinfo['type']) && $this->feedinfo['type'] == 'Atom')
- {
- if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'base64') || (!empty($attribs['TYPE']) && $attribs['TYPE'] == 'application/octet-stream'))
- {
- $data = trim($data);
- $data = base64_decode($data);
- }
- else if ((!empty($attribs['MODE']) && $attribs['MODE'] == 'escaped' || !empty($attribs['TYPE']) && ($attribs['TYPE'] == 'html' || $attribs['TYPE'] == 'text/html')) && (empty($attribs['SPENCODED']) || $attribs['SPENCODED'] != 'false'))
- {
- $data = $this->entities_decode($data);
- }
- if (!empty($attribs['TYPE']) && ($attribs['TYPE'] == 'xhtml' || $attribs['TYPE'] == 'application/xhtml+xml'))
- {
- if ($this->remove_div)
- {
- $data = preg_replace('/<div( .*)?>/msiU', '', strrev(preg_replace('/>vid\/</i', '', strrev($data), 1)), 1);
- }
- else
- {
- $data = preg_replace('/<div( .*)?>/msiU', '<div>', $data, 1);
- }
- }
- }
- else
- {
- if (empty($attribs['SPENCODED']) || $attribs['SPENCODED'] != 'false')
- {
- $data = $this->entities_decode($data);
- }
- }
- $data = trim($data);
- $data = str_replace(' spencoded="false">', '>', $data);
-
- // If Strip Ads is enabled, strip them.
- if ($this->strip_ads)
- {
- $data = preg_replace('/<a (.*)href=(.*)click\.phdo\?s=(.*)<\/a>/msiU', '', $data); // Pheedo links (tested with Dooce.com)
- $data = preg_replace('/<p(.*)>(.*)<a href="http:\/\/ad.doubleclick.net\/jump\/(.*)<\/p>/msiU', '', $data); // Doubleclick links (tested with InfoWorld.com)
- $data = preg_replace('/<p><map (.*)name=(.*)google_ad_map(.*)<\/p>/msiU', '', $data); // Google AdSense for Feeds (tested with tuaw.com).
- // Feedflare, from Feedburner
- }
-
- // Replace H1, H2, and H3 tags with the less important H4 tags.
- // This is because on a site, the more important headers might make sense,
- // but it most likely doesn't fit in the context of RSS-in-a-webpage.
- if ($this->replace_headers)
- {
- $data = preg_replace('/<h[1-3]((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*>/msiU', '<h4\\1>', $data);
- $data = preg_replace('/<\/h[1-3]>/i', '</h4>', $data);
- }
-
- if ($is_url)
- {
- $data = $this->replace_urls($data, true);
- }
- else
- {
- $data = preg_replace_callback('/<(\S+)((\s*((\w+:)?\w+)\s*=\s*("([^"]*)"|\'([^\']*)\'|(.*)))*)\s*(\/>|>(.*)<\/\S+>)/msiU', array(&$this, 'replace_urls'), $data);
- }
-
- // If Bypass Image Hotlink is enabled, rewrite all the image tags.
- if ($this->bypass_image_hotlink)
- {
- $images = SimplePie_Misc::get_element('img', $data);
- foreach ($images as $img)
- {
- if (!empty($img['attribs']['SRC']['data']))
- {
- $pre = '';
- if ($this->bypass_image_hotlink_page)
- {
- $pre = $this->bypass_image_hotlink_page;
- }
- $pre .= "?$this->bypass_image_hotlink=";
- $img['attribs']['SRC']['data'] = $pre . rawurlencode(strtr($img['attribs']['SRC']['data'], array_flip(get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES))));
- $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
- }
- }
- }
-
- // Strip out HTML tags and attributes that might cause various security problems.
- // Based on recommendations by Mark Pilgrim at:
- // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
- if ($this->strip_htmltags)
- {
- foreach ($this->strip_htmltags as $tag)
- {
- $data = preg_replace_callback("/<($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*(\/>|>(.*)<\/($tag)((\s*((\w+:)?\w+)(\s*=\s*(\"([^\"]*)\"|'([^']*)'|(.*)))?)*)\s*>)/msiU", array(&$this, 'do_strip_htmltags'), $data);
- }
- }
-
- if ($this->strip_attributes)
- {
- foreach ($this->strip_attributes as $attrib)
- {
- $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
- $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
- $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
- }
- }
-
- // Convert encoding
- $data = SimplePie_Misc::change_encoding($data, $this->input_encoding, $this->output_encoding);
-
- return $data;
- }
-
- function do_strip_htmltags($match)
- {
- if ($this->encode_instead_of_strip)
- {
- if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
- {
- return "&lt;$match[1]$match[2]&gt;$match[12]&lt;/$match[1]&gt;";
- }
- else if (isset($match[12]))
- {
- return "&lt;$match[1]$match[2]&gt;&lt;/$match[1]&gt;";
- }
- else
- {
- return "&lt;$match[1]$match[2]/&gt;";
- }
- }
- else
- {
- if (isset($match[12]) && !in_array(strtolower($match[1]), array('script', 'style')))
- {
- return $match[12];
- }
- else
- {
- return '';
- }
- }
- }
-
- function replace_urls($data, $raw_url = false)
- {
- if (!empty($this->attribs['XML:BASE']))
- {
- $xmlbase = $attribs['XML:BASE'];
- }
- else if (!empty($this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE']))
- {
- $xmlbase = $this->attribs['HTTP://WWW.W3.ORG/XML/1998/NAMESPACE:BASE'];
- }
- if (!empty($xmlbase))
- {
- if (!empty($this->item_xmlbase))
- {
- $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->item_xmlbase);
- }
- else
- {
- $xmlbase = SimplePie_Misc::absolutize_url($xmlbase, $this->feed_xmlbase);
- }
- }
- else if (!empty($this->item_xmlbase))
- {
- $xmlbase = $this->item_xmlbase;
- }
- else
- {
- $xmlbase = $this->feed_xmlbase;
- }
-
- if ($raw_url)
- {
- return SimplePie_Misc::absolutize_url($data, $xmlbase);
- }
- else
- {
- $attributes = array(
- 'background',
- 'href',
- 'src',
- 'longdesc',
- 'usemap',
- 'codebase',
- 'data',
- 'classid',
- 'cite',
- 'action',
- 'profile',
- 'for'
- );
- foreach ($attributes as $attribute)
- {
- if (preg_match("/$attribute='(.*)'/siU", $data[0], $attrib) || preg_match("/$attribute=\"(.*)\"/siU", $data[0], $attrib) || preg_match("/$attribute=(.*)[ |\/|>]/siU", $data[0], $attrib))
- {
- $new_tag = str_replace($attrib[1], SimplePie_Misc::absolutize_url($attrib[1], $xmlbase), $attrib[0]);
- $data[0] = str_replace($attrib[0], $new_tag, $data[0]);
- }
- }
- return $data[0];
- }
- }
-
- function entities_decode($data)
- {
- return preg_replace_callback('/&(#)?(x)?([0-9a-z]+);/mi', array(&$this, 'do_entites_decode'), $data);
- }
-
- function do_entites_decode($data)
- {
- if (isset($this->cached_entities[$data[0]]))
- {
- return $this->cached_entities[$data[0]];
- }
- else
- {
- $return = SimplePie_Misc::change_encoding(html_entity_decode($data[0], ENT_QUOTES), 'ISO-8859-1', $this->input_encoding);
- if ($return == $data[0])
- {
- $return = SimplePie_Misc::change_encoding(preg_replace_callback('/&#([0-9a-fx]+);/mi', array(&$this, 'replace_num_entity'), $data[0]), 'UTF-8', $this->input_encoding);
- }
- $this->cached_entities[$data[0]] = $return;
- return $return;
- }
- }
-
- /*
- * Escape numeric entities
- * From a PHP Manual note (on html_entity_decode())
- * Copyright (c) 2005 by "php dot net at c dash ovidiu dot tk",
- * "emilianomartinezluque at yahoo dot com" and "hurricane at cyberworldz dot org".
- *
- * This material may be distributed only subject to the terms and conditions set forth in
- * the Open Publication License, v1.0 or later (the latest version is presently available at
- * http://www.opencontent.org/openpub/).
- */
- function replace_num_entity($ord)
- {
- $ord = $ord[1];
- if (preg_match('/^x([0-9a-f]+)$/i', $ord, $match))
- {
- $ord = hexdec($match[1]);
- }
- else
- {
- $ord = intval($ord);
- }
-
- $no_bytes = 0;
- $byte = array();
- if ($ord < 128)
- {
- return chr($ord);
- }
- if ($ord < 2048)
- {
- $no_bytes = 2;
- }
- else if ($ord < 65536)
- {
- $no_bytes = 3;
- }
- else if ($ord < 1114112)
- {
- $no_bytes = 4;
- }
- else
- {
- return;
- }
- switch ($no_bytes)
- {
- case 2:
- $prefix = array(31, 192);
- break;
-
- case 3:
- $prefix = array(15, 224);
- break;
-
- case 4:
- $prefix = array(7, 240);
- break;
- }
-
- for ($i = 0; $i < $no_bytes; $i++)
- {
- $byte[$no_bytes-$i-1] = (($ord & (63 * pow(2,6*$i))) / pow(2,6*$i)) & 63 | 128;
- }
- $byte[0] = ($byte[0] & $prefix[0]) | $prefix[1];
-
- $ret = '';
- for ($i = 0; $i < $no_bytes; $i++)
- {
- $ret .= chr($byte[$i]);
- }
- return $ret;
- }
-
- function parse_date($date)
- {
- $military_timezone = array('A' => '-0100', 'B' => '-0200', 'C' => '-0300', 'D' => '-0400', 'E' => '-0500', 'F' => '-0600', 'G' => '-0700', 'H' => '-0800', 'I' => '-0900', 'K' => '-1000', 'L' => '-1100', 'M' => '-1200', 'N' => '+0100', 'O' => '+0200', 'P' => '+0300', 'Q' => '+0400', 'R' => '+0500', 'S' => '+0600', 'T' => '+0700', 'U' => '+0800', 'V' => '+0900', 'W' => '+1000', 'X' => '+1100', 'Y' => '+1200', 'Z' => '-0000');
- $north_american_timezone = array('GMT' => '-0000', 'EST' => '-0500', 'EDT' => '-0400', 'CST' => '-0600', 'CDT' => '-0500', 'MST' => '-0700', 'MDT' => '-0600', 'PST' => '-0800', 'PDT' => '-0700');
- if (preg_match('/([0-9]{2,4})-?([0-9]{2})-?([0-9]{2})T([0-9]{2}):?([0-9]{2})(:?([0-9]{2}(\.[0-9]*)?))?(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
- {
- if (!isset($matches[7]))
- {
- $matches[7] = '';
- }
- if (!isset($matches[9]))
- {
- $matches[9] = '';
- }
- $matches[7] = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
- switch (strlen($matches[9]))
- {
- case 0:
- $timezone = '';
- break;
-
- case 1:
- $timezone = $military_timezone[strtoupper($matches[9])];
- break;
-
- case 2:
- $timezone = '-0000';
- break;
-
- case 3:
- $timezone = $north_american_timezone[strtoupper($matches[9])];
- break;
-
- case 5:
- $timezone = $matches[9];
- break;
-
- case 6:
- $timezone = substr_replace($matches[9], '', 3, 1);
- break;
- }
- $date = strtotime("$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[7] $timezone");
- }
- else if (preg_match('/([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{2}|[0-9]{4})\s*([0-9]{2}):([0-9]{2})(:([0-9]{2}(\.[0-9]*)?))?\s*(UT|GMT|EST|EDT|CST|CDT|MST|MDT|PST|PDT|[a-z]|(\\+|-)[0-9]{4}|(\\+|-)[0-9]{2}:[0-9]{2})?/i', $date, $matches))
- {
- $three_month = array('Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12);
- $month = $three_month[$matches[2]];
- if (strlen($matches[3]) == 2)
- {
- $year = ($matches[3] < 70) ? "20$matches[3]" : "19$matches[3]";
- }
- else
- {
- $year = $matches[3];
- }
- if (!isset($matches[7]))
- {
- $matches[7] = '';
- }
- if (!isset($matches[9]))
- {
- $matches[9] = '';
- }
- $second = str_pad(round($matches[7]), 2, '0', STR_PAD_LEFT);
- switch (strlen($matches[9]))
- {
- case 0:
- $timezone = '';
- break;
-
- case 1:
- $timezone = $military_timezone[strtoupper($matches[9])];
- break;
-
- case 2:
- $timezone = '-0000';
- break;
-
- case 3:
- $timezone = $north_american_timezone[strtoupper($matches[9])];
- break;
-
- case 5:
- $timezone = $matches[9];
- break;
-
- case 6:
- $timezone = substr_replace($matches[9], '', 3, 1);
- break;
- }
- $date = strtotime("$year-$month-$matches[1] $matches[4]:$matches[5]:$second $timezone");
- }
- else
- {
- $date = strtotime($date);
- }
- return ($date > 0) ? $date : false;
- }
-}
-
-?> \ No newline at end of file
diff --git a/wp-includes/default-filters.php b/wp-includes/default-filters.php
index 4dd3f7d..e36f09f 100644
--- a/wp-includes/default-filters.php
+++ b/wp-includes/default-filters.php
@@ -147,6 +147,11 @@ add_filter('mce_plugins', '_mce_load_rtl_plugin');
add_filter('mce_buttons', '_mce_add_direction_buttons');
add_filter('tiny_mce_config_url', '_mce_config_url');
+// Redirect Old Slugs
+add_action('template_redirect', 'wp_old_slug_redirect');
+add_action('edit_post', 'wp_check_for_changed_slugs');
+add_action('edit_form_advanced', 'wp_remember_old_slug');
+
// Actions
add_action('wp_head', 'rsd_link');
add_action('wp_head', 'locale_stylesheet');
diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php
index 14b100a..6d98947 100644
--- a/wp-includes/formatting.php
+++ b/wp-includes/formatting.php
@@ -56,8 +56,8 @@ function wpautop($pee, $br = 1) {
$pee = $pee . "\n"; // just to make things a little easier, pad the end
$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
// Space things out a little
- $pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])[^>]*>)!', "\n$1", $pee);
- $pee = preg_replace('!(</(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6])>)!', "$1\n\n", $pee);
+ $pee = preg_replace('!(<(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|input|param|script)[^>]*>)!', "\n$1", $pee);
+ $pee = preg_replace('!(</(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|input|param|script)>)!', "$1\n\n", $pee);
$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
$pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end
diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php
index 017cedb..cb80691 100644
--- a/wp-includes/general-template.php
+++ b/wp-includes/general-template.php
@@ -344,7 +344,7 @@ function wp_get_archives($args = '') {
$afterafter = $after;
foreach ( $arcresults as $arcresult ) {
$url = get_month_link($arcresult->year, $arcresult->month);
- $text = sprintf('%s %d', $wp_locale->get_month($arcresult->month), $arcresult->year);
+ $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);
if ( $show_post_count )
$after = '&nbsp;('.$arcresult->posts.')' . $afterafter;
echo get_archives_link($url, $text, $format, $before, $after);
@@ -368,7 +368,7 @@ function wp_get_archives($args = '') {
$afterafter = $after;
foreach ( $arcresults as $arcresult ) {
$url = get_day_link($arcresult->year, $arcresult->month, $arcresult->dayofmonth);
- $date = sprintf("%d-%02d-%02d 00:00:00", $arcresult->year, $arcresult->month, $arcresult->dayofmonth);
+ $date = sprintf(__('%1$d-%2$02d-%3$02d 00:00:00'), $arcresult->year, $arcresult->month, $arcresult->dayofmonth);
$text = mysql2date($archive_day_date_format, $date);
if ($show_post_count)
$after = '&nbsp;('.$arcresult->posts.')'.$afterafter;
@@ -388,7 +388,7 @@ function wp_get_archives($args = '') {
$arc_week = get_weekstartend($arcresult->yyyymmdd, get_option('start_of_week'));
$arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']);
$arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']);
- $url = sprintf('%s/%s%sm%s%s%sw%s%d', get_option('home'), '', '?', '=', $arc_year, '&amp;', '=', $arcresult->week);
+ $url = sprintf(__('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d'), get_option('home'), '', '?', '=', $arc_year, '&amp;', '=', $arcresult->week);
$text = $arc_week_start . $archive_week_separator . $arc_week_end;
if ($show_post_count)
$after = '&nbsp;('.$arcresult->posts.')'.$afterafter;
diff --git a/wp-includes/gettext.php b/wp-includes/gettext.php
index cd08044..ed94ca9 100644
--- a/wp-includes/gettext.php
+++ b/wp-includes/gettext.php
@@ -63,10 +63,12 @@ class gettext_reader {
function readint() {
if ($this->BYTEORDER == 0) {
// low endian
- return array_shift(unpack('V', $this->STREAM->read(4)));
+ $low_end = unpack('V', $this->STREAM->read(4));
+ return array_shift($low_end);
} else {
// big endian
- return array_shift(unpack('N', $this->STREAM->read(4)));
+ $big_end = unpack('N', $this->STREAM->read(4));
+ return array_shift($big_end);
}
}
diff --git a/wp-includes/js/autosave.js.php b/wp-includes/js/autosave.js.php
index 2e76230..934bfa0 100644
--- a/wp-includes/js/autosave.js.php
+++ b/wp-includes/js/autosave.js.php
@@ -38,9 +38,9 @@ function autosave_update_post_ID() {
var message;
if(isNaN(res)) {
- message = "<?php _e('Error: '); ?>" + response;
+ message = "<?php js_escape(__('Error: ')); ?>" + response;
} else {
- message = "<?php _e('Saved at '); ?>" + autosave_cur_time();
+ message = "<?php js_escape(__('Saved at ')); ?>" + autosave_cur_time();
$('post_ID').name = "post_ID";
$('post_ID').value = res;
// We need new nonces
@@ -60,7 +60,7 @@ function autosave_update_post_ID() {
}
function autosave_loading() {
- $('autosave').innerHTML = "<?php _e('Saving Draft...'); ?>";
+ $('autosave').innerHTML = "<?php js_escape(__('Saving Draft...')); ?>";
}
function autosave_saved() {
@@ -69,9 +69,9 @@ function autosave_saved() {
var message;
if(isNaN(res)) {
- message = "<?php _e('Error: '); ?>" + response;
+ message = "<?php js_escape(__('Error: ')); ?>" + response;
} else {
- message = "<?php _e('Saved at '); ?>" + autosave_cur_time() + ".";
+ message = "<?php js_escape(__('Saved at ')); ?>" + autosave_cur_time() + ".";
}
$('autosave').innerHTML = message;
}
diff --git a/wp-includes/js/list-manipulation-js.php b/wp-includes/js/list-manipulation-js.php
index 112d19f..eb67077 100644
--- a/wp-includes/js/list-manipulation-js.php
+++ b/wp-includes/js/list-manipulation-js.php
@@ -1,6 +1,6 @@
<?php @require_once('../../wp-config.php'); cache_javascript_headers(); ?>
addLoadEvent(function(){theList=new listMan();});
-function deleteSomething(what,id,message,obj){if(!obj)obj=theList;if(!message)message="<?php printf(__('Are you sure you want to delete this %s?'),"'+what+'"); ?>";if(confirm(message))return obj.ajaxDelete(what,id);else return false;}
+function deleteSomething(what,id,message,obj){if(!obj)obj=theList;if(!message)message="<?php printf(js_escape(__('Are you sure you want to delete this %s?')),"'+what+'"); ?>";if(confirm(message))return obj.ajaxDelete(what,id);else return false;}
function dimSomething(what,id,dimClass,obj){if(!obj)obj=theList;return obj.ajaxDimmer(what,id,dimClass);}
var listMan = Class.create();
@@ -47,7 +47,7 @@ Object.extend(listMan.prototype, {
if ( tempObj.showLink )
tempObj.showLink = id;
});
- ajaxAdd.myResponseElement.update(tempObj.showLink ? ( "<div id='jumplink' class='updated fade'><p><a href='#" + what + '-' + tempObj.showLink + "'><?php _e('Jump to new item'); ?></a></p></div>" ) : '');
+ ajaxAdd.myResponseElement.update(tempObj.showLink ? ( "<div id='jumplink' class='updated fade'><p><a href='#" + what + '-' + tempObj.showLink + "'><?php js_escape(__('Jump to new item')); ?></a></p></div>" ) : '');
}
if ( tempObj.addComplete && typeof tempObj.addComplete == 'function' )
tempObj.addComplete( what, where, update, transport );
diff --git a/wp-includes/js/tinymce/wp-mce-help.php b/wp-includes/js/tinymce/wp-mce-help.php
index d9d376b..2daf7ef 100644
--- a/wp-includes/js/tinymce/wp-mce-help.php
+++ b/wp-includes/js/tinymce/wp-mce-help.php
@@ -164,7 +164,7 @@
<div id="content4" class="hidden">
<h2><?php _e('About TinyMCE'); ?></h2>
- <p><?php printf(__('Version: %s'), '2.0RC4') ?></p>
+ <p><?php printf(__('Version: %s'), '2.0.8') ?></p>
<p><?php printf(__('TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under %sLGPL</a> by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.'), '<a href="'.get_bloginfo('home').'/wp-includes/js/tinymce/license.txt" target="_blank" title="'.__('GNU Library General Public Licence').'">') ?></p>
<p><?php _e('Copyright &copy; 2005, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.') ?></p>
<p><?php _e('For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.') ?></p>
diff --git a/wp-includes/js/wp-ajax-js.php b/wp-includes/js/wp-ajax-js.php
index 0d4cf2b..3bb32ce 100644
--- a/wp-includes/js/wp-ajax-js.php
+++ b/wp-includes/js/wp-ajax-js.php
@@ -81,7 +81,7 @@ Ajax.Responders.register( {
return;
wpBeforeUnload = window.onbeforeunload;
window.onbeforeunload = function() {
- return "<?php _e("Slow down, I'm still sending your data!"); ?>";
+ return "<?php js_escape(__("Slow down, I'm still sending your data!")); ?>";
}
},
onLoading: function() { // Can switch to onLoaded if we lose data
diff --git a/wp-includes/kses.php b/wp-includes/kses.php
index 4a5bd94..7f536a5 100644
--- a/wp-includes/kses.php
+++ b/wp-includes/kses.php
@@ -277,7 +277,7 @@ if (!CUSTOM_TAGS) {
// 'ul' => array(),
);
}
-function wp_kses($string, $allowed_html, $allowed_protocols = array ('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'feed', 'gopher', 'mailto'))
+function wp_kses($string, $allowed_html, $allowed_protocols = array ('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'))
###############################################################################
# This function makes sure that only the allowed HTML element names, attribute
# names and attribute values plus only sane HTML entities will occur in
diff --git a/wp-includes/post-template.php b/wp-includes/post-template.php
index 2a4795c..5c51359 100644
--- a/wp-includes/post-template.php
+++ b/wp-includes/post-template.php
@@ -328,10 +328,12 @@ function get_the_attachment_link($id = 0, $fullsize = false, $max_dims = false)
if ( ('attachment' != $_post->post_type) || ('' == $_post->guid) )
return __('Missing Attachment');
+ $post_title = wp_specialchars( $_post->post_title, 1 );
+
if (! empty($_post->guid) ) {
$innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims);
- return "<a href=\"{$_post->guid}\" title=\"{$_post->post_title}\" >{$innerHTML}</a>";
+ return "<a href='$_post->guid' title='$post_title'>$innerHTML</a>";
} else {
$p .= __('Missing Attachment');
@@ -401,11 +403,11 @@ function get_attachment_icon($id = 0, $fullsize = false, $max_dims = false) {
if ( $actual_aspect >= $desired_aspect ) {
$height = $actual_aspect * $max_dims[0];
- $constraint = "width=\"{$max_dims[0]}\" ";
+ $constraint = "width='{$max_dims[0]}' ";
$post->iconsize = array($max_dims[0], $height);
} else {
$width = $max_dims[1] / $actual_aspect;
- $constraint = "height=\"{$max_dims[1]}\" ";
+ $constraint = "height='{$max_dims[1]}' ";
$post->iconsize = array($width, $max_dims[1]);
}
} else {
@@ -413,7 +415,9 @@ function get_attachment_icon($id = 0, $fullsize = false, $max_dims = false) {
}
}
- $icon = "<img src=\"{$src}\" title=\"{$post->post_title}\" alt=\"{$post->post_title}\" {$constraint}/>";
+ $post_title = wp_specialchars( $post->post_title, 1 );
+
+ $icon = "<img src='$src' title='$post_title' alt='$post_title' $constraint/>";
return apply_filters('attachment_icon', $icon, $post->ID);
}
@@ -426,7 +430,7 @@ function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false)
$post = & get_post($id);
- $innerHTML = $post->post_title;
+ $innerHTML = wp_specialchars( $post->post_title, 1 );
return apply_filters('attachment_innerHTML', $innerHTML, $post->ID);
}
diff --git a/wp-includes/query.php b/wp-includes/query.php
index 6f5fbf0..337e149 100644
--- a/wp-includes/query.php
+++ b/wp-includes/query.php
@@ -1116,6 +1116,40 @@ class WP_Query {
}
}
+
+// Redirect old slugs
+function wp_old_slug_redirect () {
+ global $wp_query;
+ if ( is_404() && '' != $wp_query->query_vars['name'] ) :
+ global $wpdb;
+
+ $query = "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND meta_key = '_wp_old_slug' AND meta_value='" . $wp_query->query_vars['name'] . "'";
+
+ // if year, monthnum, or day have been specified, make our query more precise
+ // just in case there are multiple identical _wp_old_slug values
+ if ( '' != $wp_query->query_vars['year'] )
+ $query .= " AND YEAR(post_date) = '{$wp_query->query_vars['year']}'";
+ if ( '' != $wp_query->query_vars['monthnum'] )
+ $query .= " AND MONTH(post_date) = '{$wp_query->query_vars['monthnum']}'";
+ if ( '' != $wp_query->query_vars['day'] )
+ $query .= " AND DAYOFMONTH(post_date) = '{$wp_query->query_vars['day']}'";
+
+ $id = (int) $wpdb->get_var($query);
+
+ if ( !$id )
+ return;
+
+ $link = get_permalink($id);
+
+ if ( !$link )
+ return;
+
+ wp_redirect($link, '301'); // Permanent redirect
+ exit;
+ endif;
+}
+
+
//
// Private helper functions
//
diff --git a/wp-includes/rewrite.php b/wp-includes/rewrite.php
index 4b35e3b..2411787 100644
--- a/wp-includes/rewrite.php
+++ b/wp-includes/rewrite.php
@@ -700,6 +700,14 @@ class WP_Rewrite {
// robots.txt
$robots_rewrite = array('robots.txt$' => $this->index . '?robots=1');
+ //Default Feed rules - These are require to allow for the direct access files to work with permalink structure starting with %category%
+ $default_feeds = array( 'wp-atom.php$' => $this->index .'?feed=atom',
+ 'wp-rdf.php$' => $this->index .'?feed=rdf',
+ 'wp-rss.php$' => $this->index .'?feed=rss',
+ 'wp-rss2.php$' => $this->index .'?feed=rss2',
+ 'wp-feed.php$' => $this->index .'?feed=feed',
+ 'wp-commentsrss2.php$' => $this->index . '?feed=rss2&withcomments=1');
+
// Post
$post_rewrite = $this->generate_rewrite_rules($this->permalink_structure, EP_PERMALINK);
$post_rewrite = apply_filters('post_rewrite_rules', $post_rewrite);
@@ -734,7 +742,7 @@ class WP_Rewrite {
$page_rewrite = apply_filters('page_rewrite_rules', $page_rewrite);
// Put them together.
- $this->rules = array_merge($robots_rewrite, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules);
+ $this->rules = array_merge($robots_rewrite, $default_feeds, $page_rewrite, $root_rewrite, $comments_rewrite, $search_rewrite, $category_rewrite, $author_rewrite, $date_rewrite, $post_rewrite, $this->extra_rules);
do_action_ref_array('generate_rewrite_rules', array(&$this));
$this->rules = apply_filters('rewrite_rules_array', $this->rules);
diff --git a/wp-includes/theme.php b/wp-includes/theme.php
index 46f7249..ca1ae60 100644
--- a/wp-includes/theme.php
+++ b/wp-includes/theme.php
@@ -55,36 +55,37 @@ function get_template_directory_uri() {
return apply_filters('template_directory_uri', $template_dir_uri, $template);
}
-function get_theme_data($theme_file) {
- $theme_data = implode('', file($theme_file));
- preg_match("|Theme Name:(.*)|i", $theme_data, $theme_name);
- preg_match("|Theme URI:(.*)|i", $theme_data, $theme_uri);
- preg_match("|Description:(.*)|i", $theme_data, $description);
- preg_match("|Author:(.*)|i", $theme_data, $author_name);
- preg_match("|Author URI:(.*)|i", $theme_data, $author_uri);
- preg_match("|Template:(.*)|i", $theme_data, $template);
- if ( preg_match("|Version:(.*)|i", $theme_data, $version) )
- $version = trim($version[1]);
+function get_theme_data( $theme_file ) {
+ $theme_data = implode( '', file( $theme_file ) );
+ $theme_data = str_replace ( '\r', '\n', $theme_data );
+ preg_match( '|Theme Name:(.*)|i', $theme_data, $theme_name );
+ preg_match( '|Theme URI:(.*)|i', $theme_data, $theme_uri );
+ preg_match( '|Description:(.*)|i', $theme_data, $description );
+ preg_match( '|Author:(.*)|i', $theme_data, $author_name );
+ preg_match( '|Author URI:(.*)|i', $theme_data, $author_uri );
+ preg_match( '|Template:(.*)|i', $theme_data, $template );
+ if ( preg_match( '|Version:(.*)|i', $theme_data, $version ) )
+ $version = trim( $version[1] );
else
$version ='';
- if ( preg_match("|Status:(.*)|i", $theme_data, $status) )
+ if ( preg_match('|Status:(.*)|i', $theme_data, $status) )
$status = trim($status[1]);
else
$status = 'publish';
- $description = wptexturize(trim($description[1]));
+ $description = wptexturize( trim( $description[1] ) );
$name = $theme_name[1];
- $name = trim($name);
+ $name = trim( $name );
$theme = $name;
if ( '' == $author_uri[1] ) {
- $author = trim($author_name[1]);
+ $author = trim( $author_name[1] );
} else {
- $author = '<a href="' . trim($author_uri[1]) . '" title="' . __('Visit author homepage') . '">' . trim($author_name[1]) . '</a>';
+ $author = '<a href="' . trim( $author_uri[1] ) . '" title="' . __('Visit author homepage') . '">' . trim( $author_name[1] ) . '</a>';
}
- return array('Name' => $name, 'Title' => $theme, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template[1], 'Status' => $status);
+ return array( 'Name' => $name, 'Title' => $theme, 'Description' => $description, 'Author' => $author, 'Version' => $version, 'Template' => $template[1], 'Status' => $status );
}
function get_themes() {
diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php
index e1fe61e..06682f2 100644
--- a/wp-includes/wp-db.php
+++ b/wp-includes/wp-db.php
@@ -37,9 +37,13 @@ class wpdb {
var $optiongroup_options;
var $postmeta;
- // ==================================================================
- // DB Constructor - connects to the server and selects a database
-
+ /**
+ * Connects to the database server and selects a database
+ * @param string $dbuser
+ * @param string $dbpassword
+ * @param string $dbname
+ * @param string $dbhost
+ */
function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
if( defined( "WP_USE_MULTIPLE_DB" ) && CONSTANT( "WP_USE_MULTIPLE_DB" ) == true ) {
@@ -64,9 +68,10 @@ class wpdb {
$this->select($dbname, $this->dbh);
}
- // ==================================================================
- // Select a DB (if another one needs to be selected)
-
+ /**
+ * Selects a database using the current class's $this->dbh
+ * @param string $db name
+ */
function select($db, &$dbh) {
if (!@mysql_select_db($db, $dbh)) {
$this->bail("
@@ -80,9 +85,12 @@ class wpdb {
}
}
- // ====================================================================
- // Format a string correctly for safe insert under all PHP conditions
-
+ /**
+ * Escapes content for insertion into the database, for security
+ *
+ * @param string $string
+ * @return string query safe string
+ */
function escape($string) {
return addslashes( $string ); // Disable rest for now, causing problems
if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' )
@@ -259,9 +267,13 @@ class wpdb {
return $return_val;
}
- // ==================================================================
- // Get one variable from the DB - see docs for more detail
-
+ /**
+ * Get one variable from the database
+ * @param string $query (can be null as well, for caching, see codex)
+ * @param int $x = 0 row num to return
+ * @param int $y = 0 col num to return
+ * @return mixed results
+ */
function get_var($query=null, $x = 0, $y = 0) {
$this->func_call = "\$db->get_var(\"$query\",$x,$y)";
if ( $query )
@@ -276,9 +288,13 @@ class wpdb {
return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null;
}
- // ==================================================================
- // Get one row from the DB - see docs for more detail
-
+ /**
+ * Get one row from the database
+ * @param string $query
+ * @param string $output ARRAY_A | ARRAY_N | OBJECT
+ * @param int $y row num to return
+ * @return mixed results
+ */
function get_row($query = null, $output = OBJECT, $y = 0) {
$this->func_call = "\$db->get_row(\"$query\",$output,$y)";
if ( $query )
@@ -298,10 +314,12 @@ class wpdb {
}
}
- // ==================================================================
- // Function to get 1 column from the cached result set based in X index
- // se docs for usage and info
-
+ /**
+ * Gets one column from the database
+ * @param string $query (can be null as well, for caching, see codex)
+ * @param int $x col num to return
+ * @return array results
+ */
function get_col($query = null , $x = 0) {
if ( $query )
$this->query($query);
@@ -313,9 +331,12 @@ class wpdb {
return $new_array;
}
- // ==================================================================
- // Return the the query as a result set - see docs for more details
-
+ /**
+ * Return an entire result set from the database
+ * @param string $query (can also be null to pull from the cache)
+ * @param string $output ARRAY_A | ARRAY_N | OBJECT
+ * @return mixed results
+ */
function get_results($query = null, $output = OBJECT) {
$this->func_call = "\$db->get_results(\"$query\", $output)";
@@ -342,11 +363,12 @@ class wpdb {
}
}
-
- // ==================================================================
- // Function to get column meta data info pertaining to the last query
- // see docs for more info and usage
-
+ /**
+ * Grabs column metadata from the last query
+ * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill
+ * @param int $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type
+ * @return mixed results
+ */
function get_col_info($info_type = 'name', $col_offset = -1) {
if ( $this->col_info ) {
if ( $col_offset == -1 ) {
@@ -362,6 +384,9 @@ class wpdb {
}
}
+ /**
+ * Starts the timer, for debugging purposes
+ */
function timer_start() {
$mtime = microtime();
$mtime = explode(' ', $mtime);
@@ -369,6 +394,10 @@ class wpdb {
return true;
}
+ /**
+ * Stops the debugging timer
+ * @return int total time spent on the query, in milliseconds
+ */
function timer_stop($precision = 3) {
$mtime = microtime();
$mtime = explode(' ', $mtime);
@@ -377,6 +406,10 @@ class wpdb {
return $time_total;
}
+ /**
+ * Wraps fatal errors in a nice header and footer and dies.
+ * @param string $message
+ */
function bail($message) { // Just wraps errors in a nice header and footer
if ( !$this->show_errors )
return false;