2007-05-25 09:16:21 +02:00
< ? php
2008-10-02 03:03:26 +02:00
/**
* WordPress Post Administration API .
*
* @ package WordPress
* @ subpackage Administration
*/
2007-05-25 09:16:21 +02:00
2008-05-08 19:25:07 +02:00
/**
2008-09-17 02:40:10 +02:00
* Rename $_POST data from form names to DB post columns .
2008-05-08 19:25:07 +02:00
*
* Manipulates $_POST directly .
*
* @ package WordPress
2008-10-02 03:03:26 +02:00
* @ since 2.6 . 0
2008-05-08 19:25:07 +02:00
*
* @ param bool $update Are we updating a pre - existing post ?
2008-10-02 03:03:26 +02:00
* @ param post_data array Array of post data . Defaults to the contents of $_POST .
2008-05-08 19:25:07 +02:00
* @ return object | bool WP_Error on failure , true on success .
*/
2008-09-11 07:50:14 +02:00
function _wp_translate_postdata ( $update = false , $post_data = null ) {
2008-09-11 00:47:03 +02:00
if ( empty ( $post_data ) )
$post_data = & $_POST ;
2008-05-08 19:25:07 +02:00
if ( $update )
2008-09-11 00:47:03 +02:00
$post_data [ 'ID' ] = ( int ) $post_data [ 'post_ID' ];
2008-11-10 19:54:18 +01:00
$post_data [ 'post_content' ] = isset ( $post_data [ 'content' ]) ? $post_data [ 'content' ] : '' ;
$post_data [ 'post_excerpt' ] = isset ( $post_data [ 'excerpt' ]) ? $post_data [ 'excerpt' ] : '' ;
2008-09-11 00:47:03 +02:00
$post_data [ 'post_parent' ] = isset ( $post_data [ 'parent_id' ]) ? $post_data [ 'parent_id' ] : '' ;
if ( isset ( $post_data [ 'trackback_url' ]) )
$post_data [ 'to_ping' ] = $post_data [ 'trackback_url' ];
if ( ! empty ( $post_data [ 'post_author_override' ] ) ) {
$post_data [ 'post_author' ] = ( int ) $post_data [ 'post_author_override' ];
2008-05-08 19:25:07 +02:00
} else {
2008-09-11 00:47:03 +02:00
if ( ! empty ( $post_data [ 'post_author' ] ) ) {
$post_data [ 'post_author' ] = ( int ) $post_data [ 'post_author' ];
2007-05-25 09:16:21 +02:00
} else {
2008-09-11 00:47:03 +02:00
$post_data [ 'post_author' ] = ( int ) $post_data [ 'user_ID' ];
2007-05-25 09:16:21 +02:00
}
2008-05-08 19:25:07 +02:00
}
2007-05-25 09:16:21 +02:00
2008-09-11 00:47:03 +02:00
if ( isset ( $post_data [ 'user_ID' ]) && ( $post_data [ 'post_author' ] != $post_data [ 'user_ID' ]) ) {
if ( 'page' == $post_data [ 'post_type' ] ) {
2008-05-08 19:25:07 +02:00
if ( ! current_user_can ( 'edit_others_pages' ) ) {
return new WP_Error ( 'edit_others_pages' , $update ?
__ ( 'You are not allowed to edit pages as this user.' ) :
__ ( 'You are not allowed to create pages as this user.' )
);
}
2007-05-25 09:16:21 +02:00
} else {
2008-05-08 19:25:07 +02:00
if ( ! current_user_can ( 'edit_others_posts' ) ) {
return new WP_Error ( 'edit_others_posts' , $update ?
__ ( 'You are not allowed to edit posts as this user.' ) :
__ ( 'You are not allowed to post as this user.' )
);
}
2007-05-25 09:16:21 +02:00
}
}
// What to do based on which button they pressed
2008-09-11 00:47:03 +02:00
if ( isset ( $post_data [ 'saveasdraft' ]) && '' != $post_data [ 'saveasdraft' ] )
$post_data [ 'post_status' ] = 'draft' ;
if ( isset ( $post_data [ 'saveasprivate' ]) && '' != $post_data [ 'saveasprivate' ] )
$post_data [ 'post_status' ] = 'private' ;
if ( isset ( $post_data [ 'publish' ]) && ( '' != $post_data [ 'publish' ] ) && ( $post_data [ 'post_status' ] != 'private' ) )
$post_data [ 'post_status' ] = 'publish' ;
if ( isset ( $post_data [ 'advanced' ]) && '' != $post_data [ 'advanced' ] )
$post_data [ 'post_status' ] = 'draft' ;
2008-09-14 14:58:00 +02:00
if ( isset ( $post_data [ 'pending' ]) && '' != $post_data [ 'pending' ] )
$post_data [ 'post_status' ] = 'pending' ;
2007-05-25 09:16:21 +02:00
2008-11-10 19:54:18 +01:00
$previous_status = get_post_field ( 'post_status' , isset ( $post_data [ 'ID' ]) ? $post_data [ 'ID' ] : $post_data [ 'temp_ID' ]);
2008-06-02 23:01:42 +02:00
2008-08-09 07:36:14 +02:00
// Posts 'submitted for approval' present are submitted to $_POST the same as if they were being published.
2008-06-02 23:01:42 +02:00
// Change status from 'publish' to 'pending' if user lacks permissions to publish or to resave published posts.
2008-11-15 00:34:18 +01:00
if ( 'page' == $post_data [ 'post_type' ] ) {
$publish_cap = 'publish_pages' ;
$edit_cap = 'edit_published_pages' ;
} else {
$publish_cap = 'publish_posts' ;
$edit_cap = 'edit_published_posts' ;
}
if ( isset ( $post_data [ 'post_status' ]) && ( 'publish' == $post_data [ 'post_status' ] && ! current_user_can ( $publish_cap )) )
if ( $previous_status != 'publish' || ! current_user_can ( $edit_cap ) )
2008-09-14 14:58:00 +02:00
$post_data [ 'post_status' ] = 'pending' ;
2007-05-25 09:16:21 +02:00
2008-09-14 14:58:00 +02:00
if ( ! isset ( $post_data [ 'post_status' ]) )
$post_data [ 'post_status' ] = $previous_status ;
2008-11-02 03:12:26 +01:00
2008-09-11 00:47:03 +02:00
if ( ! isset ( $post_data [ 'comment_status' ] ))
$post_data [ 'comment_status' ] = 'closed' ;
2007-05-25 09:16:21 +02:00
2008-09-11 00:47:03 +02:00
if ( ! isset ( $post_data [ 'ping_status' ] ))
$post_data [ 'ping_status' ] = 'closed' ;
2007-05-25 09:16:21 +02:00
2008-05-08 19:25:07 +02:00
foreach ( array ( 'aa' , 'mm' , 'jj' , 'hh' , 'mn' ) as $timeunit ) {
2008-09-11 00:47:03 +02:00
if ( ! empty ( $post_data [ 'hidden_' . $timeunit ] ) && $post_data [ 'hidden_' . $timeunit ] != $post_data [ $timeunit ] ) {
$post_data [ 'edit_date' ] = '1' ;
2008-03-17 00:05:16 +01:00
break ;
}
}
2008-09-11 00:47:03 +02:00
if ( ! empty ( $post_data [ 'edit_date' ] ) ) {
$aa = $post_data [ 'aa' ];
$mm = $post_data [ 'mm' ];
$jj = $post_data [ 'jj' ];
$hh = $post_data [ 'hh' ];
$mn = $post_data [ 'mn' ];
$ss = $post_data [ 'ss' ];
2008-07-03 17:55:45 +02:00
$aa = ( $aa <= 0 ) ? date ( 'Y' ) : $aa ;
$mm = ( $mm <= 0 ) ? date ( 'n' ) : $mm ;
2007-05-25 09:16:21 +02:00
$jj = ( $jj > 31 ) ? 31 : $jj ;
2008-07-03 17:55:45 +02:00
$jj = ( $jj <= 0 ) ? date ( 'j' ) : $jj ;
2007-05-25 09:16:21 +02:00
$hh = ( $hh > 23 ) ? $hh - 24 : $hh ;
$mn = ( $mn > 59 ) ? $mn - 60 : $mn ;
$ss = ( $ss > 59 ) ? $ss - 60 : $ss ;
2008-09-11 00:47:03 +02:00
$post_data [ 'post_date' ] = sprintf ( " %04d-%02d-%02d %02d:%02d:%02d " , $aa , $mm , $jj , $hh , $mn , $ss );
$post_data [ 'post_date_gmt' ] = get_gmt_from_date ( $post_data [ 'post_date' ] );
2007-05-25 09:16:21 +02:00
}
2008-09-11 07:50:14 +02:00
return $post_data ;
2008-05-08 19:25:07 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* Update an existing post with values provided in $_POST .
*
* @ since unknown
*
* @ param array $post_data Optional .
* @ return int Post ID .
*/
2008-09-11 00:47:03 +02:00
function edit_post ( $post_data = null ) {
if ( empty ( $post_data ) )
$post_data = & $_POST ;
2008-05-08 19:25:07 +02:00
2008-09-11 00:47:03 +02:00
$post_ID = ( int ) $post_data [ 'post_ID' ];
2008-05-08 19:25:07 +02:00
2008-09-11 00:47:03 +02:00
if ( 'page' == $post_data [ 'post_type' ] ) {
2008-05-08 19:25:07 +02:00
if ( ! current_user_can ( 'edit_page' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this page.' ));
} else {
if ( ! current_user_can ( 'edit_post' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this post.' ));
}
// Autosave shouldn't save too soon after a real save
2008-09-11 00:47:03 +02:00
if ( 'autosave' == $post_data [ 'action' ] ) {
2008-05-08 19:25:07 +02:00
$post =& get_post ( $post_ID );
$now = time ();
$then = strtotime ( $post -> post_date_gmt . ' +0000' );
$delta = AUTOSAVE_INTERVAL / 2 ;
if ( ( $now - $then ) < $delta )
return $post_ID ;
}
2008-09-11 07:50:14 +02:00
$post_data = _wp_translate_postdata ( true , $post_data );
if ( is_wp_error ( $post_data ) )
wp_die ( $post_data -> get_error_message () );
2008-05-08 19:25:07 +02:00
2008-11-15 00:01:16 +01:00
if ( isset ( $post_data [ 'visibility' ]) ) {
switch ( $post_data [ 'visibility' ] ) {
case 'public' :
2008-12-07 10:04:11 +01:00
$post_data [ 'post_password' ] = '' ;
2008-11-15 00:01:16 +01:00
break ;
case 'password' :
unset ( $post_data [ 'sticky' ] );
break ;
case 'private' :
$post_data [ 'post_status' ] = 'private' ;
$post_data [ 'post_password' ] = '' ;
unset ( $post_data [ 'sticky' ] );
break ;
}
2008-11-12 19:36:48 +01:00
}
2007-05-25 09:16:21 +02:00
// Meta Stuff
2008-09-11 00:47:03 +02:00
if ( isset ( $post_data [ 'meta' ]) && $post_data [ 'meta' ] ) {
foreach ( $post_data [ 'meta' ] as $key => $value )
2007-05-25 09:16:21 +02:00
update_meta ( $key , $value [ 'key' ], $value [ 'value' ] );
}
2008-09-11 00:47:03 +02:00
if ( isset ( $post_data [ 'deletemeta' ]) && $post_data [ 'deletemeta' ] ) {
foreach ( $post_data [ 'deletemeta' ] as $key => $value )
2007-05-25 09:16:21 +02:00
delete_meta ( $key );
}
add_meta ( $post_ID );
2008-09-11 00:47:03 +02:00
wp_update_post ( $post_data );
2007-05-25 09:16:21 +02:00
// Reunite any orphaned attachments with their parent
if ( ! $draft_ids = get_user_option ( 'autosave_draft_ids' ) )
$draft_ids = array ();
if ( $draft_temp_id = ( int ) array_search ( $post_ID , $draft_ids ) )
_relocate_children ( $draft_temp_id , $post_ID );
// Now that we have an ID we can fix any attachment anchor hrefs
_fix_attachment_links ( $post_ID );
2008-03-04 01:05:30 +01:00
wp_set_post_lock ( $post_ID , $GLOBALS [ 'current_user' ] -> ID );
2008-08-06 23:31:40 +02:00
if ( current_user_can ( 'edit_others_posts' ) ) {
2008-09-11 00:47:03 +02:00
if ( ! empty ( $post_data [ 'sticky' ]) )
2008-08-06 23:31:40 +02:00
stick_post ( $post_ID );
else
unstick_post ( $post_ID );
}
2008-08-05 07:48:21 +02:00
2007-05-25 09:16:21 +02:00
return $post_ID ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* Updates all bulk edited posts / pages , adding ( but not removing ) tags and
* categories . Skips pages when they would be their own parent or child .
*
* @ since unknown
*
* @ return array
*/
2008-09-25 15:42:34 +02:00
function bulk_edit_posts ( $post_data = null ) {
2008-09-30 12:30:56 +02:00
global $wpdb ;
2008-09-25 15:42:34 +02:00
if ( empty ( $post_data ) )
$post_data = & $_POST ;
2008-12-26 23:35:08 +01:00
if ( isset ( $post_data [ 'post_type' ]) && 'page' == $post_data [ 'post_type' ] ) {
2008-09-25 15:42:34 +02:00
if ( ! current_user_can ( 'edit_pages' ) )
wp_die ( __ ( 'You are not allowed to edit pages.' ) );
} else {
if ( ! current_user_can ( 'edit_posts' ) )
wp_die ( __ ( 'You are not allowed to edit posts.' ) );
}
2009-08-12 12:57:15 +02:00
if ( - 1 == $post_data [ '_status' ] ) {
$post_data [ 'post_status' ] = null ;
unset ( $post_data [ 'post_status' ]);
} else {
$post_data [ 'post_status' ] = $post_data [ '_status' ];
}
unset ( $post_data [ '_status' ]);
2008-12-26 23:35:08 +01:00
$post_IDs = array_map ( 'intval' , ( array ) $post_data [ 'post' ] );
2008-09-25 15:42:34 +02:00
2008-11-11 03:58:24 +01:00
$reset = array ( 'post_author' , 'post_status' , 'post_password' , 'post_parent' , 'page_template' , 'comment_status' , 'ping_status' , 'keep_private' , 'tags_input' , 'post_category' , 'sticky' );
2008-09-30 12:30:56 +02:00
foreach ( $reset as $field ) {
if ( isset ( $post_data [ $field ]) && ( '' == $post_data [ $field ] || - 1 == $post_data [ $field ] ) )
unset ( $post_data [ $field ]);
}
2008-09-25 15:42:34 +02:00
if ( isset ( $post_data [ 'post_category' ]) ) {
if ( is_array ( $post_data [ 'post_category' ]) && ! empty ( $post_data [ 'post_category' ]) )
2009-08-24 21:39:08 +02:00
$new_cats = array_map ( 'absint' , $post_data [ 'post_category' ] );
2008-09-25 15:42:34 +02:00
else
unset ( $post_data [ 'post_category' ]);
}
if ( isset ( $post_data [ 'tags_input' ]) ) {
2008-09-30 12:30:56 +02:00
$new_tags = preg_replace ( '/\s*,\s*/' , ',' , rtrim ( trim ( $post_data [ 'tags_input' ]), ' ,' ) );
$new_tags = explode ( ',' , $new_tags );
2008-09-25 15:42:34 +02:00
}
2008-09-30 12:30:56 +02:00
if ( isset ( $post_data [ 'post_parent' ]) && ( $parent = ( int ) $post_data [ 'post_parent' ]) ) {
$pages = $wpdb -> get_results ( " SELECT ID, post_parent FROM $wpdb->posts WHERE post_type = 'page' " );
$children = array ();
for ( $i = 0 ; $i < 50 && $parent > 0 ; $i ++ ) {
$children [] = $parent ;
foreach ( $pages as $page ) {
if ( $page -> ID == $parent ) {
$parent = $page -> post_parent ;
break ;
}
}
}
2008-09-25 15:42:34 +02:00
}
2008-09-30 12:30:56 +02:00
$updated = $skipped = $locked = array ();
2008-09-25 15:42:34 +02:00
foreach ( $post_IDs as $post_ID ) {
2008-09-30 12:30:56 +02:00
if ( isset ( $children ) && in_array ( $post_ID , $children ) ) {
2008-09-25 15:42:34 +02:00
$skipped [] = $post_ID ;
continue ;
}
2008-11-02 03:12:26 +01:00
2008-09-30 12:30:56 +02:00
if ( wp_check_post_lock ( $post_ID ) ) {
$locked [] = $post_ID ;
continue ;
}
2008-09-25 15:42:34 +02:00
if ( isset ( $new_cats ) ) {
$cats = ( array ) wp_get_post_categories ( $post_ID );
$post_data [ 'post_category' ] = array_unique ( array_merge ( $cats , $new_cats ) );
}
if ( isset ( $new_tags ) ) {
$tags = wp_get_post_tags ( $post_ID , array ( 'fields' => 'names' ));
$post_data [ 'tags_input' ] = array_unique ( array_merge ( $tags , $new_tags ) );
}
$post_data [ 'ID' ] = $post_ID ;
$updated [] = wp_update_post ( $post_data );
2008-11-11 03:58:24 +01:00
2009-08-12 12:57:15 +02:00
if ( isset ( $post_data [ 'sticky' ] ) && current_user_can ( 'edit_others_posts' ) ) {
2008-11-11 03:58:24 +01:00
if ( 'sticky' == $post_data [ 'sticky' ] )
stick_post ( $post_ID );
else
unstick_post ( $post_ID );
}
2008-09-25 15:42:34 +02:00
}
2008-09-30 12:30:56 +02:00
return array ( 'updated' => $updated , 'skipped' => $skipped , 'locked' => $locked );
2008-09-25 15:42:34 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* Default post information to use when populating the " Write Post " form .
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function get_default_post_to_edit () {
if ( ! empty ( $_REQUEST [ 'post_title' ] ) )
2009-05-18 17:11:07 +02:00
$post_title = esc_html ( stripslashes ( $_REQUEST [ 'post_title' ] ));
2007-05-25 09:16:21 +02:00
else if ( ! empty ( $_REQUEST [ 'popuptitle' ] ) ) {
2009-05-18 17:11:07 +02:00
$post_title = esc_html ( stripslashes ( $_REQUEST [ 'popuptitle' ] ));
2007-05-25 09:16:21 +02:00
$post_title = funky_javascript_fix ( $post_title );
} else {
$post_title = '' ;
}
2008-02-22 18:43:56 +01:00
$post_content = '' ;
2007-05-25 09:16:21 +02:00
if ( ! empty ( $_REQUEST [ 'content' ] ) )
2009-05-18 17:11:07 +02:00
$post_content = esc_html ( stripslashes ( $_REQUEST [ 'content' ] ));
2007-05-25 09:16:21 +02:00
else if ( ! empty ( $post_title ) ) {
2009-05-18 17:11:07 +02:00
$text = esc_html ( stripslashes ( urldecode ( $_REQUEST [ 'text' ] ) ) );
2007-05-25 09:16:21 +02:00
$text = funky_javascript_fix ( $text );
2009-05-18 18:00:33 +02:00
$popupurl = esc_url ( $_REQUEST [ 'popupurl' ]);
2008-09-17 02:40:10 +02:00
$post_content = '<a href="' . $popupurl . '">' . $post_title . '</a>' . " \n $text " ;
}
2007-05-25 09:16:21 +02:00
if ( ! empty ( $_REQUEST [ 'excerpt' ] ) )
2009-05-18 17:11:07 +02:00
$post_excerpt = esc_html ( stripslashes ( $_REQUEST [ 'excerpt' ] ));
2007-05-25 09:16:21 +02:00
else
$post_excerpt = '' ;
2008-02-22 18:43:56 +01:00
$post -> ID = 0 ;
$post -> post_name = '' ;
$post -> post_author = '' ;
$post -> post_date = '' ;
2009-03-06 00:06:04 +01:00
$post -> post_date_gmt = '' ;
2008-11-15 00:01:16 +01:00
$post -> post_password = '' ;
2007-05-25 09:16:21 +02:00
$post -> post_status = 'draft' ;
2008-02-02 20:22:14 +01:00
$post -> post_type = 'post' ;
2008-02-22 18:43:56 +01:00
$post -> to_ping = '' ;
$post -> pinged = '' ;
2007-05-25 09:16:21 +02:00
$post -> comment_status = get_option ( 'default_comment_status' );
$post -> ping_status = get_option ( 'default_ping_status' );
$post -> post_pingback = get_option ( 'default_pingback_flag' );
$post -> post_category = get_option ( 'default_category' );
$post -> post_content = apply_filters ( 'default_content' , $post_content );
$post -> post_title = apply_filters ( 'default_title' , $post_title );
$post -> post_excerpt = apply_filters ( 'default_excerpt' , $post_excerpt );
$post -> page_template = 'default' ;
$post -> post_parent = 0 ;
$post -> menu_order = 0 ;
return $post ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ return unknown
*/
2008-02-02 20:22:14 +01:00
function get_default_page_to_edit () {
2008-09-17 02:40:10 +02:00
$page = get_default_post_to_edit ();
$page -> post_type = 'page' ;
return $page ;
2008-02-02 20:22:14 +01:00
}
2008-10-02 03:03:26 +02:00
/**
* Get an existing post and format it for editing .
*
* @ since unknown
*
* @ param unknown_type $id
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function get_post_to_edit ( $id ) {
2007-07-11 21:57:43 +02:00
$post = get_post ( $id , OBJECT , 'edit' );
2007-05-25 11:41:04 +02:00
2007-05-25 09:16:21 +02:00
if ( $post -> post_type == 'page' )
$post -> page_template = get_post_meta ( $id , '_wp_page_template' , true );
return $post ;
}
2008-10-02 03:03:26 +02:00
/**
2009-03-05 23:16:29 +01:00
* Determine if a post exists based on title , content , and date
2008-10-02 03:03:26 +02:00
*
* @ since unknown
*
2009-03-05 23:16:29 +01:00
* @ param string $title Post title
* @ param string $content Optional post content
* @ param string $date Optional post date
* @ return int Post ID if post exists , 0 otherwise .
2008-10-02 03:03:26 +02:00
*/
2009-03-05 23:16:29 +01:00
function post_exists ( $title , $content = '' , $date = '' ) {
2007-05-25 09:16:21 +02:00
global $wpdb ;
2009-03-05 23:16:29 +01:00
$post_title = stripslashes ( sanitize_post_field ( 'post_title' , $title , 0 , 'db' ) );
2009-03-18 03:43:45 +01:00
$post_content = stripslashes ( sanitize_post_field ( 'post_content' , $content , 0 , 'db' ) );
2009-03-05 23:16:29 +01:00
$post_date = stripslashes ( sanitize_post_field ( 'post_date' , $date , 0 , 'db' ) );
2008-10-09 02:19:11 +02:00
2009-03-05 23:16:29 +01:00
$query = " SELECT ID FROM $wpdb->posts WHERE 1=1 " ;
$args = array ();
2007-05-25 09:16:21 +02:00
2009-03-05 23:16:29 +01:00
if ( ! empty ( $date ) ) {
$query .= ' AND post_date = %s' ;
$args [] = $post_date ;
}
if ( ! empty ( $title ) ) {
$query .= ' AND post_title = %s' ;
$args [] = $post_title ;
}
if ( ! empty ( $content ) ) {
$query .= 'AND post_content = %s' ;
$args [] = $post_content ;
}
2009-03-18 03:43:45 +01:00
2009-03-05 23:16:29 +01:00
if ( ! empty ( $args ) )
return $wpdb -> get_var ( $wpdb -> prepare ( $query , $args ) );
2007-05-25 09:16:21 +02:00
return 0 ;
}
2008-10-02 03:03:26 +02:00
/**
* Creates a new post from the " Write Post " form using $_POST information .
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function wp_write_post () {
global $user_ID ;
if ( 'page' == $_POST [ 'post_type' ] ) {
if ( ! current_user_can ( 'edit_pages' ) )
return new WP_Error ( 'edit_pages' , __ ( 'You are not allowed to create pages on this blog.' ) );
} else {
if ( ! current_user_can ( 'edit_posts' ) )
return new WP_Error ( 'edit_posts' , __ ( 'You are not allowed to create posts or drafts on this blog.' ) );
}
// Check for autosave collisions
$temp_id = false ;
if ( isset ( $_POST [ 'temp_ID' ]) ) {
$temp_id = ( int ) $_POST [ 'temp_ID' ];
if ( ! $draft_ids = get_user_option ( 'autosave_draft_ids' ) )
$draft_ids = array ();
foreach ( $draft_ids as $temp => $real )
if ( time () + $temp > 86400 ) // 1 day: $temp is equal to -1 * time( then )
unset ( $draft_ids [ $temp ]);
if ( isset ( $draft_ids [ $temp_id ]) ) { // Edit, don't write
$_POST [ 'post_ID' ] = $draft_ids [ $temp_id ];
unset ( $_POST [ 'temp_ID' ]);
update_user_option ( $user_ID , 'autosave_draft_ids' , $draft_ids );
return edit_post ();
}
}
2008-05-08 19:25:07 +02:00
$translated = _wp_translate_postdata ( false );
if ( is_wp_error ( $translated ) )
return $translated ;
2007-05-25 09:16:21 +02:00
2008-11-15 00:01:16 +01:00
if ( isset ( $_POST [ 'visibility' ]) ) {
switch ( $_POST [ 'visibility' ] ) {
case 'public' :
$_POST [ 'post_password' ] = '' ;
break ;
case 'password' :
unset ( $_POST [ 'sticky' ] );
break ;
case 'private' :
$_POST [ 'post_status' ] = 'private' ;
$_POST [ 'post_password' ] = '' ;
unset ( $_POST [ 'sticky' ] );
break ;
}
2008-11-12 19:36:48 +01:00
}
2007-05-25 09:16:21 +02:00
// Create the post.
$post_ID = wp_insert_post ( $_POST );
2007-09-18 18:32:22 +02:00
if ( is_wp_error ( $post_ID ) )
return $post_ID ;
2007-05-25 09:16:21 +02:00
2007-08-29 19:24:42 +02:00
if ( empty ( $post_ID ) )
return 0 ;
2007-05-25 09:16:21 +02:00
add_meta ( $post_ID );
// Reunite any orphaned attachments with their parent
if ( ! $draft_ids = get_user_option ( 'autosave_draft_ids' ) )
$draft_ids = array ();
if ( $draft_temp_id = ( int ) array_search ( $post_ID , $draft_ids ) )
_relocate_children ( $draft_temp_id , $post_ID );
if ( $temp_id && $temp_id != $draft_temp_id )
_relocate_children ( $temp_id , $post_ID );
// Update autosave collision detection
if ( $temp_id ) {
$draft_ids [ $temp_id ] = $post_ID ;
update_user_option ( $user_ID , 'autosave_draft_ids' , $draft_ids );
}
// Now that we have an ID we can fix any attachment anchor hrefs
_fix_attachment_links ( $post_ID );
2008-03-04 01:05:30 +01:00
wp_set_post_lock ( $post_ID , $GLOBALS [ 'current_user' ] -> ID );
2007-05-25 09:16:21 +02:00
return $post_ID ;
}
2008-10-02 03:03:26 +02:00
/**
2008-10-10 20:21:16 +02:00
* Calls wp_write_post () and handles the errors .
2008-10-02 03:03:26 +02:00
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function write_post () {
$result = wp_write_post ();
if ( is_wp_error ( $result ) )
wp_die ( $result -> get_error_message () );
else
return $result ;
}
//
// Post Meta
//
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $post_ID
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function add_meta ( $post_ID ) {
global $wpdb ;
$post_ID = ( int ) $post_ID ;
2007-06-20 00:42:25 +02:00
$protected = array ( '_wp_attached_file' , '_wp_attachment_metadata' , '_wp_old_slug' , '_wp_page_template' );
2007-06-18 18:28:11 +02:00
2008-11-08 12:18:05 +01:00
$metakeyselect = isset ( $_POST [ 'metakeyselect' ]) ? stripslashes ( trim ( $_POST [ 'metakeyselect' ] ) ) : '' ;
$metakeyinput = isset ( $_POST [ 'metakeyinput' ]) ? stripslashes ( trim ( $_POST [ 'metakeyinput' ] ) ) : '' ;
$metavalue = isset ( $_POST [ 'metavalue' ]) ? maybe_serialize ( stripslashes ( trim ( $_POST [ 'metavalue' ] ) ) ) : '' ;
2007-05-25 09:16:21 +02:00
if ( ( '0' === $metavalue || ! empty ( $metavalue ) ) && ((( '#NONE#' != $metakeyselect ) && ! empty ( $metakeyselect ) ) || ! empty ( $metakeyinput ) ) ) {
2007-09-04 01:32:58 +02:00
// We have a key/value pair. If both the select and the
2007-05-25 09:16:21 +02:00
// input for the key have data, the input takes precedence:
if ( '#NONE#' != $metakeyselect )
$metakey = $metakeyselect ;
if ( $metakeyinput )
$metakey = $metakeyinput ; // default
2007-06-18 18:28:11 +02:00
if ( in_array ( $metakey , $protected ) )
return false ;
2007-10-12 23:12:34 +02:00
wp_cache_delete ( $post_ID , 'post_meta' );
2008-10-10 11:40:30 +02:00
$wpdb -> query ( $wpdb -> prepare ( " INSERT INTO $wpdb->postmeta (post_id,meta_key,meta_value ) VALUES (%s, %s, %s) " , $post_ID , $metakey , $metavalue ) );
2007-05-25 09:16:21 +02:00
return $wpdb -> insert_id ;
}
return false ;
} // add_meta
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $mid
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function delete_meta ( $mid ) {
global $wpdb ;
$mid = ( int ) $mid ;
2008-04-14 18:13:25 +02:00
$post_id = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT post_id FROM $wpdb->postmeta WHERE meta_id = %d " , $mid ) );
2007-10-12 23:12:34 +02:00
wp_cache_delete ( $post_id , 'post_meta' );
2008-04-14 18:13:25 +02:00
return $wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->postmeta WHERE meta_id = %d " , $mid ) );
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* Get a list of previously defined keys .
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function get_meta_keys () {
global $wpdb ;
$keys = $wpdb -> get_col ( "
SELECT meta_key
FROM $wpdb -> postmeta
GROUP BY meta_key
ORDER BY meta_key " );
return $keys ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $mid
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function get_post_meta_by_id ( $mid ) {
global $wpdb ;
$mid = ( int ) $mid ;
2008-04-14 18:13:25 +02:00
$meta = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->postmeta WHERE meta_id = %d " , $mid ) );
2007-05-25 09:16:21 +02:00
if ( is_serialized_string ( $meta -> meta_value ) )
$meta -> meta_value = maybe_unserialize ( $meta -> meta_value );
return $meta ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* Some postmeta stuff .
*
* @ since unknown
*
* @ param unknown_type $postid
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function has_meta ( $postid ) {
global $wpdb ;
2008-04-14 18:13:25 +02:00
return $wpdb -> get_results ( $wpdb -> prepare ( " SELECT meta_key, meta_value, meta_id, post_id
FROM $wpdb -> postmeta WHERE post_id = % d
ORDER BY meta_key , meta_id " , $postid ), ARRAY_A );
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $meta_id
* @ param unknown_type $meta_key
* @ param unknown_type $meta_value
* @ return unknown
*/
2008-05-22 02:01:00 +02:00
function update_meta ( $meta_id , $meta_key , $meta_value ) {
2007-05-25 09:16:21 +02:00
global $wpdb ;
2007-06-18 18:28:11 +02:00
2007-06-20 00:42:25 +02:00
$protected = array ( '_wp_attached_file' , '_wp_attachment_metadata' , '_wp_old_slug' , '_wp_page_template' );
2007-06-18 18:28:11 +02:00
2008-05-22 02:01:00 +02:00
if ( in_array ( $meta_key , $protected ) )
2007-06-18 18:28:11 +02:00
return false ;
2009-04-16 23:55:35 +02:00
if ( '' === trim ( $meta_value ) )
return false ;
2008-05-22 02:01:00 +02:00
$post_id = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT post_id FROM $wpdb->postmeta WHERE meta_id = %d " , $meta_id ) );
2007-10-12 23:12:34 +02:00
wp_cache_delete ( $post_id , 'post_meta' );
2009-04-16 23:55:35 +02:00
$meta_value = maybe_serialize ( stripslashes ( $meta_value ) );
2008-05-22 02:01:00 +02:00
$meta_id = ( int ) $meta_id ;
2008-08-09 07:36:14 +02:00
2008-05-22 02:01:00 +02:00
$data = compact ( 'meta_key' , 'meta_value' );
$where = compact ( 'meta_id' );
return $wpdb -> update ( $wpdb -> postmeta , $data , $where );
2007-05-25 09:16:21 +02:00
}
//
// Private
//
2008-10-02 03:03:26 +02:00
/**
* Replace hrefs of attachment anchors with up - to - date permalinks .
*
* @ since unknown
* @ access private
*
* @ param unknown_type $post_ID
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function _fix_attachment_links ( $post_ID ) {
$post = & get_post ( $post_ID , ARRAY_A );
$search = " #<a[^>]+rel=('| \" )[^' \" ]*attachment[^>]*>#ie " ;
// See if we have any rel="attachment" links
if ( 0 == preg_match_all ( $search , $post [ 'post_content' ], $anchor_matches , PREG_PATTERN_ORDER ) )
return ;
$i = 0 ;
$search = " #[ \ s]+rel=( \" |')(.*?)wp-att-( \ d+) \\ 1#i " ;
foreach ( $anchor_matches [ 0 ] as $anchor ) {
if ( 0 == preg_match ( $search , $anchor , $id_matches ) )
continue ;
$id = ( int ) $id_matches [ 3 ];
// While we have the attachment ID, let's adopt any orphans.
$attachment = & get_post ( $id , ARRAY_A );
if ( ! empty ( $attachment ) && ! is_object ( get_post ( $attachment [ 'post_parent' ] ) ) ) {
$attachment [ 'post_parent' ] = $post_ID ;
// Escape data pulled from DB.
$attachment = add_magic_quotes ( $attachment );
wp_update_post ( $attachment );
}
$post_search [ $i ] = $anchor ;
$post_replace [ $i ] = preg_replace ( " #href=( \" |')[^' \" ]* \\ 1#e " , " stripslashes( 'href= \\ 1' ).get_attachment_link( $id ).stripslashes( ' \\ 1' ) " , $anchor );
++ $i ;
}
$post [ 'post_content' ] = str_replace ( $post_search , $post_replace , $post [ 'post_content' ] );
// Escape data pulled from DB.
$post = add_magic_quotes ( $post );
return wp_update_post ( $post );
}
2008-10-02 03:03:26 +02:00
/**
* Move child posts to a new parent .
*
* @ since unknown
* @ access private
*
* @ param unknown_type $old_ID
* @ param unknown_type $new_ID
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function _relocate_children ( $old_ID , $new_ID ) {
global $wpdb ;
$old_ID = ( int ) $old_ID ;
$new_ID = ( int ) $new_ID ;
2009-03-06 05:27:51 +01:00
return $wpdb -> update ( $wpdb -> posts , array ( 'post_parent' => $new_ID ), array ( 'post_parent' => $old_ID ) );
2007-05-25 09:16:21 +02:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $type
* @ return unknown
*/
2008-02-12 06:51:53 +01:00
function get_available_post_statuses ( $type = 'post' ) {
2008-04-09 22:09:45 +02:00
$stati = wp_count_posts ( $type );
2008-02-12 06:51:53 +01:00
2008-04-09 22:09:45 +02:00
return array_keys ( get_object_vars ( $stati ));
2008-02-12 06:51:53 +01:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $q
* @ return unknown
*/
2007-10-24 01:02:24 +02:00
function wp_edit_posts_query ( $q = false ) {
if ( false === $q )
$q = $_GET ;
2008-08-14 19:00:37 +02:00
$q [ 'm' ] = isset ( $q [ 'm' ]) ? ( int ) $q [ 'm' ] : 0 ;
$q [ 'cat' ] = isset ( $q [ 'cat' ]) ? ( int ) $q [ 'cat' ] : 0 ;
2007-10-10 00:49:42 +02:00
$post_stati = array ( // array( adj, noun )
2009-03-13 04:53:39 +01:00
'publish' => array ( _x ( 'Published' , 'post' ), __ ( 'Published posts' ), _n_noop ( 'Published <span class="count">(%s)</span>' , 'Published <span class="count">(%s)</span>' )),
'future' => array ( _x ( 'Scheduled' , 'post' ), __ ( 'Scheduled posts' ), _n_noop ( 'Scheduled <span class="count">(%s)</span>' , 'Scheduled <span class="count">(%s)</span>' )),
'pending' => array ( _x ( 'Pending Review' , 'post' ), __ ( 'Pending posts' ), _n_noop ( 'Pending Review <span class="count">(%s)</span>' , 'Pending Review <span class="count">(%s)</span>' )),
'draft' => array ( _x ( 'Draft' , 'post' ), _x ( 'Drafts' , 'manage posts header' ), _n_noop ( 'Draft <span class="count">(%s)</span>' , 'Drafts <span class="count">(%s)</span>' )),
'private' => array ( _x ( 'Private' , 'post' ), __ ( 'Private posts' ), _n_noop ( 'Private <span class="count">(%s)</span>' , 'Private <span class="count">(%s)</span>' )),
2009-07-30 15:39:34 +02:00
'trash' => array ( _x ( 'Trash' , 'post' ), __ ( 'Trash posts' ), _n_noop ( 'Trash <span class="count">(%s)</span>' , 'Trash <span class="count">(%s)</span>' )),
2007-10-10 00:49:42 +02:00
);
2008-02-19 07:13:20 +01:00
$post_stati = apply_filters ( 'post_stati' , $post_stati );
2008-02-12 06:51:53 +01:00
$avail_post_stati = get_available_post_statuses ( 'post' );
2007-10-10 00:49:42 +02:00
$post_status_q = '' ;
2008-02-29 22:49:49 +01:00
if ( isset ( $q [ 'post_status' ]) && in_array ( $q [ 'post_status' ], array_keys ( $post_stati ) ) ) {
2007-10-24 01:02:24 +02:00
$post_status_q = '&post_status=' . $q [ 'post_status' ];
2008-02-29 22:49:49 +01:00
$post_status_q .= '&perm=readable' ;
}
2007-10-10 00:49:42 +02:00
2008-08-14 19:00:37 +02:00
if ( isset ( $q [ 'post_status' ]) && 'pending' === $q [ 'post_status' ] ) {
2007-10-10 00:49:42 +02:00
$order = 'ASC' ;
$orderby = 'modified' ;
2008-08-14 19:00:37 +02:00
} elseif ( isset ( $q [ 'post_status' ]) && 'draft' === $q [ 'post_status' ] ) {
2007-10-10 00:49:42 +02:00
$order = 'DESC' ;
$orderby = 'modified' ;
} else {
$order = 'DESC' ;
$orderby = 'date' ;
}
2009-03-27 23:47:47 +01:00
$posts_per_page = get_user_option ( 'edit_per_page' );
if ( empty ( $posts_per_page ) )
$posts_per_page = 15 ;
$posts_per_page = apply_filters ( 'edit_posts_per_page' , $posts_per_page );
2009-03-09 23:14:09 +01:00
2009-05-14 00:28:56 +02:00
wp ( " post_type=post& $post_status_q &posts_per_page= $posts_per_page &order= $order &orderby= $orderby " );
2007-10-10 00:49:42 +02:00
return array ( $post_stati , $avail_post_stati );
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $type
* @ return unknown
*/
2008-02-19 07:13:20 +01:00
function get_available_post_mime_types ( $type = 'attachment' ) {
global $wpdb ;
$types = $wpdb -> get_col ( $wpdb -> prepare ( " SELECT DISTINCT post_mime_type FROM $wpdb->posts WHERE post_type = %s " , $type ));
return $types ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $q
* @ return unknown
*/
2008-02-19 07:13:20 +01:00
function wp_edit_attachments_query ( $q = false ) {
if ( false === $q )
$q = $_GET ;
2008-08-08 19:05:10 +02:00
$q [ 'm' ] = isset ( $q [ 'm' ] ) ? ( int ) $q [ 'm' ] : 0 ;
$q [ 'cat' ] = isset ( $q [ 'cat' ] ) ? ( int ) $q [ 'cat' ] : 0 ;
2008-02-19 07:13:20 +01:00
$q [ 'post_type' ] = 'attachment' ;
2009-09-13 19:58:55 +02:00
$q [ 'post_status' ] = isset ( $q [ 'status' ] ) && 'trash' == $q [ 'status' ] ? 'trash' : 'inherit' ;
2009-03-27 23:47:47 +01:00
$media_per_page = get_user_option ( 'upload_per_page' );
if ( empty ( $media_per_page ) )
$media_per_page = 20 ;
$q [ 'posts_per_page' ] = $media_per_page ;
2008-02-19 07:13:20 +01:00
$post_mime_types = array ( // array( adj, noun )
2009-02-20 20:35:16 +01:00
'image' => array ( __ ( 'Images' ), __ ( 'Manage Images' ), _n_noop ( 'Image <span class="count">(%s)</span>' , 'Images <span class="count">(%s)</span>' )),
'audio' => array ( __ ( 'Audio' ), __ ( 'Manage Audio' ), _n_noop ( 'Audio <span class="count">(%s)</span>' , 'Audio <span class="count">(%s)</span>' )),
'video' => array ( __ ( 'Video' ), __ ( 'Manage Video' ), _n_noop ( 'Video <span class="count">(%s)</span>' , 'Video <span class="count">(%s)</span>' )),
2008-02-19 07:13:20 +01:00
);
$post_mime_types = apply_filters ( 'post_mime_types' , $post_mime_types );
$avail_post_mime_types = get_available_post_mime_types ( 'attachment' );
if ( isset ( $q [ 'post_mime_type' ]) && ! array_intersect ( ( array ) $q [ 'post_mime_type' ], array_keys ( $post_mime_types ) ) )
unset ( $q [ 'post_mime_type' ]);
wp ( $q );
return array ( $post_mime_types , $avail_post_mime_types );
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $id
* @ param unknown_type $page
* @ return unknown
*/
2008-02-08 20:57:50 +01:00
function postbox_classes ( $id , $page ) {
2008-10-09 01:32:34 +02:00
if ( isset ( $_GET [ 'edit' ] ) && $_GET [ 'edit' ] == $id )
return '' ;
2008-01-09 18:46:13 +01:00
$current_user = wp_get_current_user ();
2008-11-25 19:33:04 +01:00
if ( $closed = get_user_option ( 'closedpostboxes_' . $page , 0 , false ) ) {
2008-01-14 01:20:52 +01:00
if ( ! is_array ( $closed ) ) return '' ;
2008-12-27 13:18:38 +01:00
return in_array ( $id , $closed ) ? 'closed' : '' ;
2008-01-14 01:20:52 +01:00
} else {
2008-10-31 21:59:22 +01:00
return '' ;
2008-01-14 01:20:52 +01:00
}
2008-01-09 18:46:13 +01:00
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $id
* @ param unknown_type $title
* @ param unknown_type $name
* @ return unknown
*/
2008-03-05 23:09:28 +01:00
function get_sample_permalink ( $id , $title = null , $name = null ) {
2008-01-17 17:51:32 +01:00
$post = & get_post ( $id );
2008-02-22 18:43:56 +01:00
if ( ! $post -> ID ) {
return array ( '' , '' );
}
2008-01-17 17:51:32 +01:00
$original_status = $post -> post_status ;
$original_date = $post -> post_date ;
$original_name = $post -> post_name ;
2008-03-03 22:02:53 +01:00
2008-03-05 23:09:28 +01:00
// Hack: get_permalink would return ugly permalink for
// drafts, so we will fake, that our post is published
2008-01-17 17:51:32 +01:00
if ( in_array ( $post -> post_status , array ( 'draft' , 'pending' ))) {
$post -> post_status = 'publish' ;
2008-08-09 07:36:14 +02:00
$post -> post_name = sanitize_title ( $post -> post_name ? $post -> post_name : $post -> post_title , $post -> ID );
2008-01-17 17:51:32 +01:00
}
2008-03-05 23:09:28 +01:00
2009-05-25 01:47:49 +02:00
$post -> post_name = wp_unique_post_slug ( $post -> post_name , $post -> ID , $post -> post_status , $post -> post_type , $post -> post_parent );
2009-04-23 22:21:18 +02:00
2008-03-05 23:09:28 +01:00
// If the user wants to set a new name -- override the current one
// Note: if empty name is supplied -- use the title instead, see #6072
2008-01-17 17:51:32 +01:00
if ( ! is_null ( $name )) {
2008-03-05 23:09:28 +01:00
$post -> post_name = sanitize_title ( $name ? $name : $title , $post -> ID );
2008-01-17 17:51:32 +01:00
}
2008-03-02 23:15:30 +01:00
2009-03-18 03:43:45 +01:00
$post -> filter = 'sample' ;
2008-12-17 00:50:39 +01:00
2008-01-17 17:51:32 +01:00
$permalink = get_permalink ( $post , true );
2008-03-02 23:15:30 +01:00
// Handle page hierarchy
if ( 'page' == $post -> post_type ) {
$uri = get_page_uri ( $post -> ID );
2008-03-15 22:27:10 +01:00
$uri = untrailingslashit ( $uri );
$uri = strrev ( stristr ( strrev ( $uri ), '/' ) );
2008-03-02 23:15:30 +01:00
$uri = untrailingslashit ( $uri );
if ( ! empty ( $uri ) )
$uri .= '/' ;
$permalink = str_replace ( '%pagename%' , " ${ uri } %pagename% " , $permalink );
}
2008-05-05 19:08:13 +02:00
$permalink = array ( $permalink , apply_filters ( 'editable_slug' , $post -> post_name ));
2008-01-17 17:51:32 +01:00
$post -> post_status = $original_status ;
$post -> post_date = $original_date ;
$post -> post_name = $original_name ;
2008-12-17 00:50:39 +01:00
unset ( $post -> filter );
2008-01-17 17:51:32 +01:00
return $permalink ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ param unknown_type $id
* @ param unknown_type $new_title
* @ param unknown_type $new_slug
* @ return unknown
*/
2009-02-08 14:38:02 +01:00
function get_sample_permalink_html ( $id , $new_title = null , $new_slug = null ) {
2008-01-17 17:51:32 +01:00
$post = & get_post ( $id );
2008-03-03 22:02:53 +01:00
list ( $permalink , $post_name ) = get_sample_permalink ( $post -> ID , $new_title , $new_slug );
2009-01-29 13:11:52 +01:00
if ( 'publish' == $post -> post_status )
$view_post = 'post' == $post -> post_type ? __ ( 'View Post' ) : __ ( 'View Page' );
2009-03-18 03:43:45 +01:00
2009-01-29 13:11:52 +01:00
if ( false === strpos ( $permalink , '%postname%' ) && false === strpos ( $permalink , '%pagename%' ) ) {
$return = '<strong>' . __ ( 'Permalink:' ) . " </strong> \n " . '<span id="sample-permalink">' . $permalink . " </span> \n " ;
2009-09-10 03:21:03 +02:00
if ( current_user_can ( 'manage_options' ) && ! ( 'page' == get_option ( 'show_on_front' ) && $id == get_option ( 'page_on_front' ) ) )
2009-06-08 23:42:35 +02:00
$return .= '<span id="change-permalinks"><a href="options-permalink.php" class="button" target="_blank">' . __ ( 'Change Permalinks' ) . " </a></span> \n " ;
2009-01-29 13:11:52 +01:00
if ( isset ( $view_post ) )
$return .= " <span id='view-post-btn'><a href=' $permalink ' class='button' target='_blank'> $view_post </a></span> \n " ;
2009-08-10 22:49:09 +02:00
$return = apply_filters ( 'get_sample_permalink_html' , $return , $id , $new_title , $new_slug );
2009-01-29 13:11:52 +01:00
return $return ;
2008-01-17 17:51:32 +01:00
}
2009-01-29 13:11:52 +01:00
2008-02-12 00:19:09 +01:00
$title = __ ( 'Click to edit this part of the permalink' );
2008-11-30 20:09:13 +01:00
if ( function_exists ( 'mb_strlen' )) {
if ( mb_strlen ( $post_name ) > 30 ) {
$post_name_abridged = mb_substr ( $post_name , 0 , 14 ) . '…' . mb_substr ( $post_name , - 14 );
} else {
$post_name_abridged = $post_name ;
}
2008-02-12 00:19:09 +01:00
} else {
2008-11-30 20:09:13 +01:00
if ( strlen ( $post_name ) > 30 ) {
$post_name_abridged = substr ( $post_name , 0 , 14 ) . '…' . substr ( $post_name , - 14 );
} else {
$post_name_abridged = $post_name ;
}
2008-01-17 17:51:32 +01:00
}
2009-01-29 13:11:52 +01:00
2009-03-10 03:14:42 +01:00
$post_name_html = '<span id="editable-post-name" title="' . $title . '">' . $post_name_abridged . '</span>' ;
2008-02-21 21:19:34 +01:00
$display_link = str_replace ( array ( '%pagename%' , '%postname%' ), $post_name_html , $permalink );
2009-01-29 13:11:52 +01:00
$view_link = str_replace ( array ( '%pagename%' , '%postname%' ), $post_name , $permalink );
2008-02-21 18:08:06 +01:00
$return = '<strong>' . __ ( 'Permalink:' ) . " </strong> \n " . '<span id="sample-permalink">' . $display_link . " </span> \n " ;
2009-05-04 14:13:44 +02:00
$return .= '<span id="edit-slug-buttons"><a href="#post_name" class="edit-slug button hide-if-no-js" onclick="edit_permalink(' . $id . '); return false;">' . __ ( 'Edit' ) . " </a></span> \n " ;
2009-03-10 03:14:42 +01:00
$return .= '<span id="editable-post-name-full">' . $post_name . " </span> \n " ;
2009-01-29 13:11:52 +01:00
if ( isset ( $view_post ) )
$return .= " <span id='view-post-btn'><a href=' $view_link ' class='button' target='_blank'> $view_post </a></span> \n " ;
2009-08-10 22:49:09 +02:00
$return = apply_filters ( 'get_sample_permalink_html' , $return , $id , $new_title , $new_slug );
2008-02-21 18:08:06 +01:00
return $return ;
2008-02-05 07:47:27 +01:00
}
2008-01-17 17:51:32 +01:00
2008-10-02 03:03:26 +02:00
/**
2009-09-13 10:34:24 +02:00
* Check to see if the post is currently being edited by another user .
2008-10-02 03:03:26 +02:00
*
2009-09-13 10:34:24 +02:00
* @ since 2.5 . 0
2008-10-02 03:03:26 +02:00
*
2009-09-13 10:34:24 +02:00
* @ param int $post_id ID of the post to check for editing
2008-10-02 03:03:26 +02:00
* @ return bool | int False : not locked or locked by current user . Int : user ID of user with lock .
*/
2008-02-29 10:51:36 +01:00
function wp_check_post_lock ( $post_id ) {
global $current_user ;
if ( ! $post = get_post ( $post_id ) )
return false ;
$lock = get_post_meta ( $post -> ID , '_edit_lock' , true );
$last = get_post_meta ( $post -> ID , '_edit_last' , true );
2008-03-06 07:07:53 +01:00
$time_window = apply_filters ( 'wp_check_post_lock_window' , AUTOSAVE_INTERVAL * 2 );
2008-02-29 10:51:36 +01:00
if ( $lock && $lock > time () - $time_window && $last != $current_user -> ID )
return $last ;
return false ;
}
2008-10-02 03:03:26 +02:00
/**
2009-09-13 10:34:24 +02:00
* Mark the post as currently being edited by the current user
2008-10-02 03:03:26 +02:00
*
2009-09-13 10:34:24 +02:00
* @ since 2.5 . 0
2008-10-02 03:03:26 +02:00
*
2009-09-13 10:34:24 +02:00
* @ param int $post_id ID of the post to being edited
* @ return bool Returns false if the post doesn ' t exist of there is no current user
2008-10-02 03:03:26 +02:00
*/
2008-02-29 10:51:36 +01:00
function wp_set_post_lock ( $post_id ) {
global $current_user ;
if ( ! $post = get_post ( $post_id ) )
return false ;
if ( ! $current_user || ! $current_user -> ID )
return false ;
2008-03-02 21:17:30 +01:00
2008-02-29 10:51:36 +01:00
$now = time ();
if ( ! add_post_meta ( $post -> ID , '_edit_lock' , $now , true ) )
update_post_meta ( $post -> ID , '_edit_lock' , $now );
if ( ! add_post_meta ( $post -> ID , '_edit_last' , $current_user -> ID , true ) )
update_post_meta ( $post -> ID , '_edit_last' , $current_user -> ID );
}
2009-09-13 10:52:39 +02:00
/**
* Outputs the notice message to say that someone else is editing this post at the moment .
*
* @ since 2.9 . 0
* @ return none
*/
function _admin_notice_post_locked () {
global $post ;
$last_user = get_userdata ( get_post_meta ( $post -> ID , '_edit_last' , true ) );
$last_user_name = $last_user ? $last_user -> display_name : __ ( 'Somebody' );
$post_type_name = ( 'page' == $post -> post_type ) ? _x ( 'page' , 'Used to describe page in admin_notice when other user editing.' ) : _x ( 'post' , 'Used to describe post in admin_notice when other user editing.' );
$message = sprintf ( __ ( 'Warning: %1$s is currently editing this %2$s' ), esc_html ( $last_user_name ), esc_html ( $post_type_name ) );
echo " <div class='error'><p> $message </p></div> " ;
}
2008-05-08 19:25:07 +02:00
/**
2008-10-02 03:03:26 +02:00
* Creates autosave data for the specified post from $_POST data .
2008-05-08 19:25:07 +02:00
*
* @ package WordPress
2008-10-02 03:03:26 +02:00
* @ subpackage Post_Revisions
* @ since 2.6 . 0
2008-05-08 19:25:07 +02:00
*
* @ uses _wp_translate_postdata ()
2008-05-30 00:21:36 +02:00
* @ uses _wp_post_revision_fields ()
2008-05-08 19:25:07 +02:00
*/
2008-05-30 00:21:36 +02:00
function wp_create_post_autosave ( $post_id ) {
2008-05-08 19:25:07 +02:00
$translated = _wp_translate_postdata ( true );
if ( is_wp_error ( $translated ) )
return $translated ;
// Only store one autosave. If there is already an autosave, overwrite it.
2008-05-30 00:21:36 +02:00
if ( $old_autosave = wp_get_post_autosave ( $post_id ) ) {
$new_autosave = _wp_post_revision_fields ( $_POST , true );
2008-05-08 19:25:07 +02:00
$new_autosave [ 'ID' ] = $old_autosave -> ID ;
2009-08-19 04:30:42 +02:00
$current_user = wp_get_current_user ();
$new_autosave [ 'post_author' ] = $current_user -> ID ;
2008-05-08 19:25:07 +02:00
return wp_update_post ( $new_autosave );
}
2009-04-29 04:47:41 +02:00
// _wp_put_post_revision() expects unescaped.
$_POST = stripslashes_deep ( $_POST );
2008-05-08 19:25:07 +02:00
// Otherwise create the new autosave as a special post revision
2008-05-30 00:21:36 +02:00
return _wp_put_post_revision ( $_POST , true );
2008-05-08 19:25:07 +02:00
}
2008-08-20 23:42:31 +02:00
/**
2008-10-31 23:47:07 +01:00
* Save draft or manually autosave for showing preview .
*
* @ package WordPress
* @ since 2.7
2008-12-09 19:03:31 +01:00
*
2008-10-31 23:47:07 +01:00
* @ uses wp_write_post ()
* @ uses edit_post ()
* @ uses get_post ()
* @ uses current_user_can ()
* @ uses wp_create_post_autosave ()
2008-12-09 19:03:31 +01:00
*
2008-11-04 14:00:12 +01:00
* @ return str URL to redirect to show the preview
2008-10-31 23:47:07 +01:00
*/
function post_preview () {
2008-11-02 14:56:32 +01:00
$post_ID = ( int ) $_POST [ 'post_ID' ];
if ( $post_ID < 1 )
2008-11-13 01:01:03 +01:00
wp_die ( __ ( 'Preview not available. Please save as a draft first.' ) );
2008-12-09 19:03:31 +01:00
2008-11-02 14:56:32 +01:00
if ( isset ( $_POST [ 'catslist' ]) )
$_POST [ 'post_category' ] = explode ( " , " , $_POST [ 'catslist' ]);
2008-12-09 19:03:31 +01:00
2008-11-02 14:56:32 +01:00
if ( isset ( $_POST [ 'tags_input' ]) )
$_POST [ 'tags_input' ] = explode ( " , " , $_POST [ 'tags_input' ]);
2008-12-09 19:03:31 +01:00
2008-11-02 14:56:32 +01:00
if ( $_POST [ 'post_type' ] == 'page' || empty ( $_POST [ 'post_category' ]) )
2008-10-31 23:47:07 +01:00
unset ( $_POST [ 'post_category' ]);
2008-11-02 14:56:32 +01:00
$_POST [ 'ID' ] = $post_ID ;
$post = get_post ( $post_ID );
2008-10-31 23:47:07 +01:00
2008-11-02 14:56:32 +01:00
if ( 'page' == $post -> post_type ) {
if ( ! current_user_can ( 'edit_page' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this page.' ));
} else {
if ( ! current_user_can ( 'edit_post' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this post.' ));
}
2008-10-31 23:47:07 +01:00
2008-11-02 14:56:32 +01:00
if ( 'draft' == $post -> post_status ) {
$id = edit_post ();
} else { // Non drafts are not overwritten. The autosave is stored in a special post revision.
$id = wp_create_post_autosave ( $post -> ID );
if ( ! is_wp_error ( $id ) )
2008-10-31 23:47:07 +01:00
$id = $post -> ID ;
}
2008-11-04 14:00:12 +01:00
if ( is_wp_error ( $id ) )
wp_die ( $id -> get_error_message () );
if ( $_POST [ 'post_status' ] == 'draft' ) {
$url = add_query_arg ( 'preview' , 'true' , get_permalink ( $id ) );
} else {
$nonce = wp_create_nonce ( 'post_preview_' . $id );
$url = add_query_arg ( array ( 'preview' => 'true' , 'preview_id' => $id , 'preview_nonce' => $nonce ), get_permalink ( $id ) );
}
return $url ;
2008-10-31 23:47:07 +01:00
}
/**
* Adds the TinyMCE editor used on the Write and Edit screens .
2008-12-09 19:03:31 +01:00
*
2008-08-20 23:42:31 +02:00
* @ package WordPress
2008-10-02 18:30:14 +02:00
* @ since 2.7
2009-05-18 22:29:26 +02:00
*
* TinyMCE is loaded separately from other Javascript by using wp - tinymce . php . It outputs concatenated
* and optionaly pre - compressed version of the core and all default plugins . Additional plugins are loaded
* directly by TinyMCE using non - blocking method . Custom plugins can be refreshed by adding a query string
* to the URL when queueing them with the mce_external_plugins filter .
*
* @ param bool $teeny optional Output a trimmed down version used in Press This .
2008-08-20 23:42:31 +02:00
*/
2008-10-02 18:30:14 +02:00
function wp_tiny_mce ( $teeny = false ) {
2009-05-18 22:29:26 +02:00
global $concatenate_scripts , $compress_scripts , $tinymce_version ;
2009-03-18 03:43:45 +01:00
2008-10-02 18:30:14 +02:00
if ( ! user_can_richedit () )
2008-08-20 23:42:31 +02:00
return ;
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$baseurl = includes_url ( 'js/tinymce' );
$mce_locale = ( '' == get_locale () ) ? 'en' : strtolower ( substr ( get_locale (), 0 , 2 ) ); // only ISO 639-1
2008-08-20 23:42:31 +02:00
2008-10-02 18:30:14 +02:00
/*
The following filter allows localization scripts to change the languages displayed in the spellchecker ' s drop - down menu .
By default it uses Google ' s spellchecker API , but can be configured to use PSpell / ASpell if installed on the server .
The + sign marks the default language . More information :
http :// wiki . moxiecode . com / index . php / TinyMCE : Plugins / spellchecker
*/
$mce_spellchecker_languages = apply_filters ( 'mce_spellchecker_languages' , '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
if ( $teeny ) {
$plugins = apply_filters ( 'teeny_mce_plugins' , array ( 'safari' , 'inlinepopups' , 'media' , 'autosave' , 'fullscreen' ) );
$ext_plugins = '' ;
} else {
2009-05-23 00:08:17 +02:00
$plugins = array ( 'safari' , 'inlinepopups' , 'spellchecker' , 'paste' , 'wordpress' , 'media' , 'fullscreen' , 'wpeditimage' , 'wpgallery' , 'tabfocus' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
/*
The following filter takes an associative array of external plugins for TinyMCE in the form 'plugin_name' => 'url' .
It adds the plugin 's name to TinyMCE' s plugins init and the call to PluginManager to load the plugin .
The url should be absolute and should include the js file name to be loaded . Example :
array ( 'myplugin' => 'http://my-site.com/wp-content/plugins/myfolder/mce_plugin.js' )
If the plugin uses a button , it should be added with one of the " $mce_buttons " filters .
*/
$mce_external_plugins = apply_filters ( 'mce_external_plugins' , array ());
2008-11-02 03:12:26 +01:00
2009-01-16 13:58:38 +01:00
$ext_plugins = '' ;
2008-10-02 18:30:14 +02:00
if ( ! empty ( $mce_external_plugins ) ) {
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
/*
The following filter loads external language files for TinyMCE plugins .
It takes an associative array 'plugin_name' => 'path' , where path is the
include path to the file . The language file should follow the same format as
/ tinymce / langs / wp - langs . php and should define a variable $strings that
2008-10-26 08:32:58 +01:00
holds all translated strings .
When this filter is not used , the function will try to load { mce_locale } . js .
If that is not found , en . js will be tried next .
2008-10-02 18:30:14 +02:00
*/
$mce_external_languages = apply_filters ( 'mce_external_languages' , array ());
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$loaded_langs = array ();
$strings = '' ;
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
if ( ! empty ( $mce_external_languages ) ) {
foreach ( $mce_external_languages as $name => $path ) {
2008-12-14 02:12:00 +01:00
if ( @ is_file ( $path ) && @ is_readable ( $path ) ) {
2008-10-02 18:30:14 +02:00
include_once ( $path );
2008-12-14 02:12:00 +01:00
$ext_plugins .= $strings . " \n " ;
2008-10-02 18:30:14 +02:00
$loaded_langs [] = $name ;
}
}
}
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
foreach ( $mce_external_plugins as $name => $url ) {
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
if ( is_ssl () ) $url = str_replace ( 'http://' , 'https://' , $url );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$plugins [] = '-' . $name ;
2008-11-02 03:12:26 +01:00
2008-10-26 08:32:58 +01:00
$plugurl = dirname ( $url );
2008-11-02 03:12:26 +01:00
$strings = $str1 = $str2 = '' ;
2008-10-26 08:32:58 +01:00
if ( ! in_array ( $name , $loaded_langs ) ) {
2008-11-03 19:21:00 +01:00
$path = str_replace ( WP_PLUGIN_URL , '' , $plugurl );
2008-11-02 03:12:26 +01:00
$path = WP_PLUGIN_DIR . $path . '/langs/' ;
2008-10-26 08:32:58 +01:00
if ( function_exists ( 'realpath' ) )
2008-11-03 20:16:29 +01:00
$path = trailingslashit ( realpath ( $path ) );
2008-10-26 08:32:58 +01:00
2008-12-14 02:12:00 +01:00
if ( @ is_file ( $path . $mce_locale . '.js' ) )
$strings .= @ file_get_contents ( $path . $mce_locale . '.js' ) . " \n " ;
2008-10-26 08:32:58 +01:00
2008-12-14 02:12:00 +01:00
if ( @ is_file ( $path . $mce_locale . '_dlg.js' ) )
$strings .= @ file_get_contents ( $path . $mce_locale . '_dlg.js' ) . " \n " ;
2008-11-02 03:12:26 +01:00
if ( 'en' != $mce_locale && empty ( $strings ) ) {
2008-12-14 02:12:00 +01:00
if ( @ is_file ( $path . 'en.js' ) ) {
2008-11-02 03:12:26 +01:00
$str1 = @ file_get_contents ( $path . 'en.js' );
2008-12-14 02:12:00 +01:00
$strings .= preg_replace ( '/([\'"])en\./' , '$1' . $mce_locale . '.' , $str1 , 1 ) . " \n " ;
2008-11-02 03:12:26 +01:00
}
2008-12-14 02:12:00 +01:00
if ( @ is_file ( $path . 'en_dlg.js' ) ) {
2008-11-02 03:12:26 +01:00
$str2 = @ file_get_contents ( $path . 'en_dlg.js' );
2008-12-14 02:12:00 +01:00
$strings .= preg_replace ( '/([\'"])en\./' , '$1' . $mce_locale . '.' , $str2 , 1 ) . " \n " ;
2008-11-02 03:12:26 +01:00
}
2008-10-26 08:32:58 +01:00
}
2008-11-02 03:12:26 +01:00
if ( ! empty ( $strings ) )
2008-10-26 08:32:58 +01:00
$ext_plugins .= " \n " . $strings . " \n " ;
2008-10-02 18:30:14 +02:00
}
2008-10-26 08:32:58 +01:00
$ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . " \n " ;
2008-10-02 18:30:14 +02:00
$ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . " \n " ;
}
}
}
2008-10-26 08:32:58 +01:00
2008-10-02 18:30:14 +02:00
$plugins = implode ( $plugins , ',' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
if ( $teeny ) {
$mce_buttons = apply_filters ( 'teeny_mce_buttons' , array ( 'bold, italic, underline, blockquote, separator, strikethrough, bullist, numlist,justifyleft, justifycenter, justifyright, undo, redo, link, unlink, fullscreen' ) );
$mce_buttons = implode ( $mce_buttons , ',' );
$mce_buttons_2 = $mce_buttons_3 = $mce_buttons_4 = '' ;
} else {
$mce_buttons = apply_filters ( 'mce_buttons' , array ( 'bold' , 'italic' , 'strikethrough' , '|' , 'bullist' , 'numlist' , 'blockquote' , '|' , 'justifyleft' , 'justifycenter' , 'justifyright' , '|' , 'link' , 'unlink' , 'wp_more' , '|' , 'spellchecker' , 'fullscreen' , 'wp_adv' ));
$mce_buttons = implode ( $mce_buttons , ',' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$mce_buttons_2 = apply_filters ( 'mce_buttons_2' , array ( 'formatselect' , 'underline' , 'justifyfull' , 'forecolor' , '|' , 'pastetext' , 'pasteword' , 'removeformat' , '|' , 'media' , 'charmap' , '|' , 'outdent' , 'indent' , '|' , 'undo' , 'redo' , 'wp_help' ));
$mce_buttons_2 = implode ( $mce_buttons_2 , ',' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$mce_buttons_3 = apply_filters ( 'mce_buttons_3' , array ());
$mce_buttons_3 = implode ( $mce_buttons_3 , ',' );
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$mce_buttons_4 = apply_filters ( 'mce_buttons_4' , array ());
$mce_buttons_4 = implode ( $mce_buttons_4 , ',' );
}
$no_captions = ( apply_filters ( 'disable_captions' , '' ) ) ? true : false ;
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
// TinyMCE init settings
$initArray = array (
2009-05-04 12:34:50 +02:00
'mode' => 'specific_textareas' ,
'editor_selector' => 'theEditor' ,
2008-10-02 18:30:14 +02:00
'width' => '100%' ,
'theme' => 'advanced' ,
'skin' => 'wp_theme' ,
'theme_advanced_buttons1' => " $mce_buttons " ,
'theme_advanced_buttons2' => " $mce_buttons_2 " ,
'theme_advanced_buttons3' => " $mce_buttons_3 " ,
'theme_advanced_buttons4' => " $mce_buttons_4 " ,
'language' => " $mce_locale " ,
'spellchecker_languages' => " $mce_spellchecker_languages " ,
'theme_advanced_toolbar_location' => 'top' ,
'theme_advanced_toolbar_align' => 'left' ,
'theme_advanced_statusbar_location' => 'bottom' ,
'theme_advanced_resizing' => true ,
'theme_advanced_resize_horizontal' => false ,
'dialog_type' => 'modal' ,
'relative_urls' => false ,
'remove_script_host' => false ,
'convert_urls' => false ,
'apply_source_formatting' => false ,
'remove_linebreaks' => true ,
'gecko_spellcheck' => true ,
'entities' => '38,amp,60,lt,62,gt' ,
2008-10-28 11:59:26 +01:00
'accessibility_focus' => true ,
2009-03-15 17:55:49 +01:00
'tabfocus_elements' => 'major-publishing-actions' ,
'media_strict' => false ,
2008-10-02 18:30:14 +02:00
'save_callback' => 'switchEditors.saveCallback' ,
'wpeditimage_disable_captions' => $no_captions ,
2008-10-26 08:32:58 +01:00
'plugins' => " $plugins "
2008-08-20 23:42:31 +02:00
);
2008-11-02 03:12:26 +01:00
2009-02-08 19:37:47 +01:00
$mce_css = trim ( apply_filters ( 'mce_css' , '' ), ' ,' );
2009-01-09 14:05:16 +01:00
if ( ! empty ( $mce_css ) )
$initArray [ 'content_css' ] = " $mce_css " ;
2008-10-02 18:30:14 +02:00
// For people who really REALLY know what they're doing with TinyMCE
// You can modify initArray to add, remove, change elements of the config before tinyMCE.init
// Setting "valid_elements", "invalid_elements" and "extended_valid_elements" can be done through "tiny_mce_before_init".
// Best is to use the default cleanup by not specifying valid_elements, as TinyMCE contains full set of XHTML 1.0.
if ( $teeny ) {
$initArray = apply_filters ( 'teeny_mce_before_init' , $initArray );
} else {
$initArray = apply_filters ( 'tiny_mce_before_init' , $initArray );
}
2009-06-04 01:00:57 +02:00
if ( empty ( $initArray [ 'theme_advanced_buttons3' ]) && ! empty ( $initArray [ 'theme_advanced_buttons4' ]) ) {
$initArray [ 'theme_advanced_buttons3' ] = $initArray [ 'theme_advanced_buttons4' ];
$initArray [ 'theme_advanced_buttons4' ] = '' ;
}
2009-01-16 13:58:38 +01:00
if ( ! isset ( $concatenate_scripts ) )
script_concat_settings ();
2008-10-02 18:30:14 +02:00
2009-01-16 13:58:38 +01:00
$language = $initArray [ 'language' ];
$zip = $compress_scripts ? 1 : 0 ;
2009-05-25 01:47:49 +02:00
2009-05-18 22:29:26 +02:00
/**
* Deprecated
2009-05-25 01:47:49 +02:00
*
2009-05-18 22:29:26 +02:00
* The tiny_mce_version filter is not needed since external plugins are loaded directly by TinyMCE .
* These plugins can be refreshed by appending query string to the URL passed to mce_external_plugins filter .
2009-05-25 01:47:49 +02:00
* If the plugin has a popup dialog , a query string can be added to the button action that opens it ( in the plugin ' s code ) .
2009-05-18 22:29:26 +02:00
*/
$version = apply_filters ( 'tiny_mce_version' , '' );
$version = 'ver=' . $tinymce_version . $version ;
2008-08-20 23:42:31 +02:00
2008-10-02 18:30:14 +02:00
if ( 'en' != $language )
include_once ( ABSPATH . WPINC . '/js/tinymce/langs/wp-langs.php' );
$mce_options = '' ;
foreach ( $initArray as $k => $v )
$mce_options .= $k . ':"' . $v . '", ' ;
2008-11-02 03:12:26 +01:00
2008-10-02 18:30:14 +02:00
$mce_options = rtrim ( trim ( $mce_options ), '\n\r,' ); ?>
2008-08-20 23:42:31 +02:00
< script type = " text/javascript " >
2008-11-01 06:03:05 +01:00
/* <![CDATA[ */
2008-10-02 18:30:14 +02:00
tinyMCEPreInit = {
base : " <?php echo $baseurl ; ?> " ,
suffix : " " ,
2009-05-18 22:29:26 +02:00
query : " <?php echo $version ; ?> " ,
2008-10-02 18:30:14 +02:00
mceInit : { < ? php echo $mce_options ; ?> },
2009-01-16 13:58:38 +01:00
load_ext : function ( url , lang ){ var sl = tinymce . ScriptLoader ; sl . markDone ( url + '/langs/' + lang + '.js' ); sl . markDone ( url + '/langs/' + lang + '_dlg.js' );}
2008-10-02 18:30:14 +02:00
};
2008-11-01 06:03:05 +01:00
/* ]]> */
2008-10-02 18:30:14 +02:00
</ script >
2009-01-16 13:58:38 +01:00
< ? php
2009-01-20 21:31:31 +01:00
if ( $concatenate_scripts )
2009-05-18 22:29:26 +02:00
echo " <script type='text/javascript' src=' $baseurl /wp-tinymce.php?c= $zip & $version '></script> \n " ;
2009-01-20 21:31:31 +01:00
else
2009-05-18 22:29:26 +02:00
echo " <script type='text/javascript' src=' $baseurl /tiny_mce.js? $version '></script> \n " ;
2009-01-16 13:58:38 +01:00
2009-01-20 21:31:31 +01:00
if ( 'en' != $language && isset ( $lang ) )
echo " <script type='text/javascript'> \n $lang\n </script> \n " ;
else
2009-05-18 22:29:26 +02:00
echo " <script type='text/javascript' src=' $baseurl /langs/wp-langs-en.js? $version '></script> \n " ;
2009-01-16 13:58:38 +01:00
?>
2008-10-02 18:30:14 +02:00
< script type = " text/javascript " >
2009-05-17 22:19:51 +02:00
/* <![CDATA[ */
2009-01-20 21:31:31 +01:00
< ? php if ( $ext_plugins ) echo " $ext_plugins\n " ; ?>
2009-01-16 13:58:38 +01:00
< ? php if ( $concatenate_scripts ) { ?>
2008-10-02 18:30:14 +02:00
tinyMCEPreInit . go ();
2009-01-16 13:58:38 +01:00
< ? php } else { ?>
( function (){ var t = tinyMCEPreInit , sl = tinymce . ScriptLoader , ln = t . mceInit . language , th = t . mceInit . theme , pl = t . mceInit . plugins ; sl . markDone ( t . base + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/themes/' + th + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/themes/' + th + '/langs/' + ln + '_dlg.js' ); tinymce . each ( pl . split ( ',' ), function ( n ){ if ( n && n . charAt ( 0 ) != '-' ){ sl . markDone ( t . base + '/plugins/' + n + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/plugins/' + n + '/langs/' + ln + '_dlg.js' );}});})();
< ? php } ?>
2008-10-02 18:30:14 +02:00
tinyMCE . init ( tinyMCEPreInit . mceInit );
2009-05-17 22:19:51 +02:00
/* ]]> */
2008-08-20 23:42:31 +02:00
</ script >
< ? php
}