]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/includes/misc.php
WordPress 3.7.2
[autoinstalls/wordpress.git] / wp-admin / includes / misc.php
index f09ef4528909908670ba644c3867afd7d7e9ee8c..5a3b9706c78dfa08fa52db613155255321bd5583 100644 (file)
@@ -7,17 +7,50 @@
  */
 
 /**
  */
 
 /**
- * {@internal Missing Short Description}}
+ * Returns whether the server is running Apache with the mod_rewrite module loaded.
  *
  * @since 2.0.0
  *
  *
  * @since 2.0.0
  *
- * @return unknown
+ * @return bool
  */
 function got_mod_rewrite() {
        $got_rewrite = apache_mod_loaded('mod_rewrite', true);
  */
 function got_mod_rewrite() {
        $got_rewrite = apache_mod_loaded('mod_rewrite', true);
+
+       /**
+        * Filter whether Apache and mod_rewrite are present.
+        *
+        * This filter was previously used to force URL rewriting for other servers,
+        * like nginx. Use the got_url_rewrite filter in got_url_rewrite() instead.
+        *
+        * @see got_url_rewrite()
+        *
+        * @since 2.5.0
+        * @param bool $got_rewrite Whether Apache and mod_rewrite are present.
+        */
        return apply_filters('got_rewrite', $got_rewrite);
 }
 
        return apply_filters('got_rewrite', $got_rewrite);
 }
 
+/**
+ * Returns whether the server supports URL rewriting.
+ *
+ * Detects Apache's mod_rewrite, IIS 7.0+ permalink support, and nginx.
+ *
+ * @since 3.7.0
+ *
+ * @return bool Whether the server supports URL rewriting.
+ */
+function got_url_rewrite() {
+       $got_url_rewrite = ( got_mod_rewrite() || $GLOBALS['is_nginx'] || iis7_supports_permalinks() );
+
+       /**
+        * Filter whether URL rewriting is available.
+        *
+        * @since 3.7.0
+        * @param bool $got_url_rewrite Whether URL rewriting is available.
+        */
+       return apply_filters( 'got_url_rewrite', $got_url_rewrite );
+}
+
 /**
  * {@internal Missing Short Description}}
  *
 /**
  * {@internal Missing Short Description}}
  *
@@ -220,11 +253,10 @@ add_action( 'update_option_page_on_front', 'update_home_siteurl', 10, 2 );
  * @return string
  */
 function url_shorten( $url ) {
  * @return string
  */
 function url_shorten( $url ) {
-       $short_url = str_replace( 'http://', '', stripslashes( $url ));
-       $short_url = str_replace( 'www.', '', $short_url );
+       $short_url = str_replace( array( 'http://', 'www.' ), '', $url );
        $short_url = untrailingslashit( $short_url );
        if ( strlen( $short_url ) > 35 )
        $short_url = untrailingslashit( $short_url );
        if ( strlen( $short_url ) > 35 )
-               $short_url = substr( $short_url, 0, 32 ) . '...';
+               $short_url = substr( $short_url, 0, 32 ) . '…';
        return $short_url;
 }
 
        return $short_url;
 }
 
@@ -264,7 +296,7 @@ function wp_reset_vars( $vars ) {
  */
 function show_message($message) {
        if ( is_wp_error($message) ){
  */
 function show_message($message) {
        if ( is_wp_error($message) ){
-               if ( $message->get_error_data() )
+               if ( $message->get_error_data() && is_string( $message->get_error_data() ) )
                        $message = $message->get_error_message() . ': ' . $message->get_error_data();
                else
                        $message = $message->get_error_message();
                        $message = $message->get_error_message() . ': ' . $message->get_error_data();
                else
                        $message = $message->get_error_message();
@@ -371,7 +403,7 @@ function set_screen_options() {
 }
 
 /**
 }
 
 /**
- * Check if rewrite rule for WordPress already exists in the IIS 7 configuration file
+ * Check if rewrite rule for WordPress already exists in the IIS 7+ configuration file
  *
  * @since 2.8.0
  *
  *
  * @since 2.8.0
  *
@@ -429,7 +461,7 @@ function iis7_delete_rewrite_rule($filename) {
 }
 
 /**
 }
 
 /**
- * Add WordPress rewrite rule to the IIS 7 configuration file.
+ * Add WordPress rewrite rule to the IIS 7+ configuration file.
  *
  * @since 2.8.0
  *
  *
  * @since 2.8.0
  *
@@ -561,3 +593,108 @@ function _ipad_meta() {
        }
 }
 add_action('admin_head', '_ipad_meta');
        }
 }
 add_action('admin_head', '_ipad_meta');
+
+/**
+ * Check lock status for posts displayed on the Posts screen
+ *
+ * @since 3.6
+ */
+function wp_check_locked_posts( $response, $data, $screen_id ) {
+       $checked = array();
+
+       if ( array_key_exists( 'wp-check-locked-posts', $data ) && is_array( $data['wp-check-locked-posts'] ) ) {
+               foreach ( $data['wp-check-locked-posts'] as $key ) {
+                       if ( ! $post_id = absint( substr( $key, 5 ) ) )
+                               continue;
+
+                       if ( ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) && current_user_can( 'edit_post', $post_id ) ) {
+                               $send = array( 'text' => sprintf( __( '%s is currently editing' ), $user->display_name ) );
+
+                               if ( ( $avatar = get_avatar( $user->ID, 18 ) ) && preg_match( "|src='([^']+)'|", $avatar, $matches ) )
+                                       $send['avatar_src'] = $matches[1];
+
+                               $checked[$key] = $send;
+                       }
+               }
+       }
+
+       if ( ! empty( $checked ) )
+               $response['wp-check-locked-posts'] = $checked;
+
+       return $response;
+}
+add_filter( 'heartbeat_received', 'wp_check_locked_posts', 10, 3 );
+
+/**
+ * Check lock status on the New/Edit Post screen and refresh the lock
+ *
+ * @since 3.6
+ */
+function wp_refresh_post_lock( $response, $data, $screen_id ) {
+       if ( array_key_exists( 'wp-refresh-post-lock', $data ) ) {
+               $received = $data['wp-refresh-post-lock'];
+               $send = array();
+
+               if ( ! $post_id = absint( $received['post_id'] ) )
+                       return $response;
+
+               if ( ! current_user_can('edit_post', $post_id) )
+                       return $response;
+
+               if ( ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) ) {
+                       $error = array(
+                               'text' => sprintf( __( '%s has taken over and is currently editing.' ), $user->display_name )
+                       );
+
+                       if ( $avatar = get_avatar( $user->ID, 64 ) ) {
+                               if ( preg_match( "|src='([^']+)'|", $avatar, $matches ) )
+                                       $error['avatar_src'] = $matches[1];
+                       }
+
+                       $send['lock_error'] = $error;
+               } else {
+                       if ( $new_lock = wp_set_post_lock( $post_id ) )
+                               $send['new_lock'] = implode( ':', $new_lock );
+               }
+
+               $response['wp-refresh-post-lock'] = $send;
+       }
+
+       return $response;
+}
+add_filter( 'heartbeat_received', 'wp_refresh_post_lock', 10, 3 );
+
+/**
+ * Check nonce expiration on the New/Edit Post screen and refresh if needed
+ *
+ * @since 3.6
+ */
+function wp_refresh_post_nonces( $response, $data, $screen_id ) {
+       if ( array_key_exists( 'wp-refresh-post-nonces', $data ) ) {
+               $received = $data['wp-refresh-post-nonces'];
+               $response['wp-refresh-post-nonces'] = array( 'check' => 1 );
+
+               if ( ! $post_id = absint( $received['post_id'] ) )
+                       return $response;
+
+               if ( ! current_user_can( 'edit_post', $post_id ) || empty( $received['post_nonce'] ) )
+                       return $response;
+
+               if ( 2 === wp_verify_nonce( $received['post_nonce'], 'update-post_' . $post_id ) ) {
+                       $response['wp-refresh-post-nonces'] = array(
+                               'replace' => array(
+                                       'autosavenonce' => wp_create_nonce('autosave'),
+                                       'getpermalinknonce' => wp_create_nonce('getpermalink'),
+                                       'samplepermalinknonce' => wp_create_nonce('samplepermalink'),
+                                       'closedpostboxesnonce' => wp_create_nonce('closedpostboxes'),
+                                       '_ajax_linking_nonce' => wp_create_nonce( 'internal-linking' ),
+                                       '_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ),
+                               ),
+                               'heartbeatNonce' => wp_create_nonce( 'heartbeat-nonce' ),
+                       );
+               }
+       }
+
+       return $response;
+}
+add_filter( 'heartbeat_received', 'wp_refresh_post_nonces', 10, 3 );