Co-Authors Plus - Version 3.1

Version Description

Manage co-authors from quick edit, Jetpack Open Graph support, bug fixes.

Download this release

Release Info

Developer danielbachhuber
Plugin Icon wp plugin Co-Authors Plus
Version 3.1
Comparing to
See all releases

Code changes from version 3.0.7 to 3.1

.travis.yml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: php
2
+
3
+ php:
4
+ - 5.3
5
+ - 5.5
6
+
7
+ env:
8
+ - WP_VERSION=latest
9
+ - WP_VERSION=3.7
10
+
11
+ before_script:
12
+ - bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION
13
+
14
+ script: phpunit
bin/install-wp-tests.sh ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+
3
+ if [ $# -lt 3 ]; then
4
+ echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version]"
5
+ exit 1
6
+ fi
7
+
8
+ DB_NAME=$1
9
+ DB_USER=$2
10
+ DB_PASS=$3
11
+ DB_HOST=${4-localhost}
12
+ WP_VERSION=${5-latest}
13
+
14
+ WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib}
15
+ WP_CORE_DIR=/tmp/wordpress/
16
+
17
+ set -ex
18
+
19
+ install_wp() {
20
+ mkdir -p $WP_CORE_DIR
21
+
22
+ if [ $WP_VERSION == 'latest' ]; then
23
+ local ARCHIVE_NAME='latest'
24
+ else
25
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
26
+ fi
27
+
28
+ wget -nv -O /tmp/wordpress.tar.gz http://wordpress.org/${ARCHIVE_NAME}.tar.gz
29
+ tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR
30
+
31
+ wget -nv -O $WP_CORE_DIR/wp-content/db.php https://raw.github.com/markoheijnen/wp-mysqli/master/db.php
32
+ }
33
+
34
+ install_test_suite() {
35
+ # portable in-place argument for both GNU sed and Mac OSX sed
36
+ if [[ $(uname -s) == 'Darwin' ]]; then
37
+ local ioption='-i .bak'
38
+ else
39
+ local ioption='-i'
40
+ fi
41
+
42
+ # set up testing suite
43
+ mkdir -p $WP_TESTS_DIR
44
+ cd $WP_TESTS_DIR
45
+ svn co --quiet http://develop.svn.wordpress.org/trunk/tests/phpunit/includes/
46
+
47
+ wget -nv -O wp-tests-config.php http://develop.svn.wordpress.org/trunk/wp-tests-config-sample.php
48
+ sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR':" wp-tests-config.php
49
+ sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" wp-tests-config.php
50
+ sed $ioption "s/yourusernamehere/$DB_USER/" wp-tests-config.php
51
+ sed $ioption "s/yourpasswordhere/$DB_PASS/" wp-tests-config.php
52
+ sed $ioption "s|localhost|${DB_HOST}|" wp-tests-config.php
53
+ }
54
+
55
+ install_db() {
56
+ # parse DB_HOST for port or socket references
57
+ local PARTS=(${DB_HOST//\:/ })
58
+ local DB_HOSTNAME=${PARTS[0]};
59
+ local DB_SOCK_OR_PORT=${PARTS[1]};
60
+ local EXTRA=""
61
+
62
+ if ! [ -z $DB_HOSTNAME ] ; then
63
+ if [[ "$DB_SOCK_OR_PORT" =~ ^[0-9]+$ ]] ; then
64
+ EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp"
65
+ elif ! [ -z $DB_SOCK_OR_PORT ] ; then
66
+ EXTRA=" --socket=$DB_SOCK_OR_PORT"
67
+ elif ! [ -z $DB_HOSTNAME ] ; then
68
+ EXTRA=" --host=$DB_HOSTNAME --protocol=tcp"
69
+ fi
70
+ fi
71
+
72
+ # create database
73
+ mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA
74
+ }
75
+
76
+ install_wp
77
+ install_test_suite
78
+ install_db
co-authors-plus.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Co-Authors Plus
4
  Plugin URI: http://wordpress.org/extend/plugins/co-authors-plus/
5
  Description: Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.
6
- Version: 3.0.7
7
  Author: Mohammad Jangda, Daniel Bachhuber, Automattic
8
  Copyright: 2008-2014 Shared and distributed between Mohammad Jangda, Daniel Bachhuber, Weston Ruter
9
 
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
 
25
  */
26
 
27
- define( 'COAUTHORS_PLUS_VERSION', '3.0.7' );
28
 
29
  require_once( dirname( __FILE__ ) . '/template-tags.php' );
30
  require_once( dirname( __FILE__ ) . '/deprecated.php' );
@@ -46,7 +46,7 @@ class coauthors_plus {
46
 
47
  var $gravatar_size = 25;
48
 
49
- var $_pages_whitelist = array( 'post.php', 'post-new.php' );
50
 
51
  var $supported_post_types = array();
52
 
@@ -105,6 +105,9 @@ class coauthors_plus {
105
  add_filter( 'ef_calendar_item_information_fields', array( $this, 'filter_ef_calendar_item_information_fields' ), 10, 2 );
106
  add_filter( 'ef_story_budget_term_column_value', array( $this, 'filter_ef_story_budget_term_column_value' ), 10, 3 );
107
 
 
 
 
108
  }
109
 
110
  function coauthors_plus() {
@@ -115,7 +118,7 @@ class coauthors_plus {
115
  * Register the taxonomy used to managing relationships,
116
  * and the custom post type to store our author data
117
  */
118
- function action_init() {
119
 
120
  // Allow Co-Authors Plus to be easily translated
121
  load_plugin_textdomain( 'co-authors-plus', null, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
@@ -139,7 +142,7 @@ class coauthors_plus {
139
  /**
140
  * Register the 'author' taxonomy and add post type support
141
  */
142
- function action_init_late() {
143
 
144
  // Register new taxonomy so that we can store all of the relationships
145
  $args = array(
@@ -171,7 +174,7 @@ class coauthors_plus {
171
  /**
172
  * Initialize the plugin for the admin
173
  */
174
- function admin_init() {
175
  global $pagenow;
176
 
177
  // Add the main JS script and CSS file
@@ -185,6 +188,9 @@ class coauthors_plus {
185
  add_action( 'manage_posts_custom_column', array( $this, '_filter_manage_posts_custom_column' ) );
186
  add_action( 'manage_pages_custom_column', array( $this, '_filter_manage_posts_custom_column' ) );
187
 
 
 
 
188
  // Hooks to modify the published post number count on the Users WP List Table
189
  add_filter( 'manage_users_columns', array( $this, '_filter_manage_users_columns' ) );
190
  add_filter( 'manage_users_custom_column', array( $this, '_filter_manage_users_custom_column' ), 10, 3 );
@@ -200,8 +206,10 @@ class coauthors_plus {
200
  * add_filter( 'coauthors_guest_authors_enabled', '__return_false' )
201
  *
202
  * @since 3.0
 
 
203
  */
204
- function is_guest_authors_enabled() {
205
  return apply_filters( 'coauthors_guest_authors_enabled', true );
206
  }
207
 
@@ -210,9 +218,9 @@ class coauthors_plus {
210
  *
211
  * @param string $key Key to search by (slug,email)
212
  * @param string $value Value to search for
213
- * @param object|false $coauthor The co-author on success, false on failure
214
  */
215
- function get_coauthor_by( $key, $value, $force = false ) {
216
 
217
  // If Guest Authors are enabled, prioritize those profiles
218
  if ( $this->is_guest_authors_enabled() && isset( $this->guest_authors ) ) {
@@ -239,7 +247,7 @@ class coauthors_plus {
239
  if ( 'login' == $key || 'slug' == $key )
240
  $value = preg_replace( '#^cap\-#', '', $value );
241
  $user = get_user_by( $key, $value );
242
- if ( !$user || !is_user_member_of_blog( $user->ID ) )
243
  return false;
244
  $user->type = 'wpuser';
245
  // However, if guest authors are enabled and there's a guest author linked to this
@@ -265,7 +273,7 @@ class coauthors_plus {
265
  * @param string $post_type The name of the post type we're considering
266
  * @return bool Whether or not it's enabled
267
  */
268
- function is_post_type_enabled( $post_type = null ) {
269
 
270
  if ( ! $post_type )
271
  $post_type = get_post_type();
@@ -277,7 +285,7 @@ class coauthors_plus {
277
  * Removes the standard WordPress Author box.
278
  * We don't need it because the Co-Authors one is way cooler.
279
  */
280
- function remove_authors_box() {
281
 
282
  if ( $this->is_post_type_enabled() )
283
  remove_meta_box( $this->coreauthors_meta_box_name, get_post_type(), 'normal' );
@@ -286,7 +294,7 @@ class coauthors_plus {
286
  /**
287
  * Adds a custom Authors box
288
  */
289
- function add_coauthors_box() {
290
 
291
  if( $this->is_post_type_enabled() && $this->current_user_can_set_authors() )
292
  add_meta_box( $this->coauthors_meta_box_name, __('Authors', 'co-authors-plus'), array( $this, 'coauthors_meta_box' ), get_post_type(), apply_filters( 'coauthors_meta_box_context', 'normal'), apply_filters( 'coauthors_meta_box_priority', 'high'));
@@ -295,7 +303,7 @@ class coauthors_plus {
295
  /**
296
  * Callback for adding the custom author box
297
  */
298
- function coauthors_meta_box( $post ) {
299
  global $post, $coauthors_plus, $current_screen;
300
 
301
  $post_id = $post->ID;
@@ -318,7 +326,11 @@ class coauthors_plus {
318
  // logged in user, so long as force_guest_authors is false. If force_guest_authors = true, we are
319
  // OK with having an empty authoring box.
320
  if ( !$coauthors_plus->force_guest_authors && empty( $coauthors ) ) {
321
- $coauthors[] = $default_user;
 
 
 
 
322
  }
323
  } else {
324
  $coauthors = get_coauthors();
@@ -327,7 +339,7 @@ class coauthors_plus {
327
  $count = 0;
328
  if( !empty( $coauthors ) ) :
329
  ?>
330
- <div id="coauthors-readonly" class="hide-if-js1">
331
  <ul>
332
  <?php
333
  foreach( $coauthors as $coauthor ) :
@@ -364,7 +376,6 @@ class coauthors_plus {
364
 
365
  /**
366
  * Removes the author dropdown from the post quick edit
367
- * It's a bit hacky, but the only way I can figure out :(
368
  */
369
  function remove_quick_edit_authors_box() {
370
  global $pagenow;
@@ -414,7 +425,12 @@ class coauthors_plus {
414
  $args['post_type'] = $post->post_type;
415
  $author_filter_url = add_query_arg( $args, admin_url( 'edit.php' ) );
416
  ?>
417
- <a href="<?php echo esc_url( $author_filter_url ); ?>"><?php echo esc_html( $author->display_name ); ?></a><?php echo ( $count < count( $authors ) ) ? ',' : ''; ?>
 
 
 
 
 
418
  <?php
419
  $count++;
420
  endforeach;
@@ -456,6 +472,27 @@ class coauthors_plus {
456
  return $value;
457
  }
458
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
  /**
460
  * When we update the terms at all, we should update the published post count for each author
461
  */
@@ -519,7 +556,11 @@ class coauthors_plus {
519
  if ( 'wpuser' == $coauthor->type )
520
  $having_terms_and_authors .= $wpdb->prepare( " OR {$wpdb->posts}.post_author = %d", $coauthor->ID );
521
 
522
- $query .= " WHERE ({$having_terms_and_authors}) AND {$wpdb->posts}.post_type = 'post' AND {$wpdb->posts}.post_status = 'publish'";
 
 
 
 
523
 
524
  $query .= $wpdb->prepare( " GROUP BY {$wpdb->posts}.ID HAVING MAX( IF( {$wpdb->term_taxonomy}.taxonomy = '%s', IF( {$having_terms},2,1 ),0 ) ) <> 1 ", $this->coauthor_taxonomy );
525
 
@@ -661,27 +702,6 @@ class coauthors_plus {
661
  }
662
  }
663
 
664
- // Restore the co-author when quick editing because we don't
665
- // allow changing the co-author on quick edit. In wp_insert_post(),
666
- // 'post_author' is set to current user if the $_REQUEST value doesn't exist
667
- if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'inline-save' ) {
668
- $coauthors = get_coauthors( $postarr['ID'] );
669
- if ( is_array( $coauthors ) ) {
670
- $coauthor = $this->get_coauthor_by( 'user_nicename', $coauthors[0]->user_nicename );
671
- if ( 'guest-author' == $coauthor->type && ! empty( $coauthor->linked_account ) ) {
672
- $data['post_author'] = get_user_by( 'login', $coauthor->linked_account )->ID;
673
- } else if ( $coauthor->type == 'wpuser' )
674
- $data['post_author'] = $coauthor->ID;
675
- // Refresh their post publish count too
676
- if ( 'publish' == $postarr['post_status'] || 'publish' == get_post_status( $postarr['ID'] ) ) {
677
- foreach( $coauthors as $coauthor ) {
678
- if ( $author_term = $this->get_author_term( $coauthor ) )
679
- $this->update_author_term_post_count( $author_term );
680
- }
681
- }
682
- }
683
- }
684
-
685
  // If for some reason we don't have the coauthors fields set
686
  if( ! isset( $data['post_author'] ) ) {
687
  $user = wp_get_current_user();
@@ -707,7 +727,7 @@ class coauthors_plus {
707
  if ( ! $this->is_post_type_enabled( $post->post_type ) )
708
  return;
709
 
710
- if ( $this->current_user_can_set_authors() ) {
711
  // if current_user_can_set_authors and nonce valid
712
  if( isset( $_POST['coauthors-nonce'] ) && isset( $_POST['coauthors'] ) ) {
713
  check_admin_referer( 'coauthors-edit', 'coauthors-nonce' );
@@ -733,26 +753,62 @@ class coauthors_plus {
733
 
734
  /**
735
  * Add one or more co-authors as bylines for a post
 
 
 
 
736
  */
737
- function add_coauthors( $post_id, $coauthors, $append = false ) {
738
- global $current_user;
739
 
740
  $post_id = (int) $post_id;
741
  $insert = false;
742
 
743
- // if an array isn't returned, create one and populate with default author
744
- if ( !is_array( $coauthors ) || 0 == count( $coauthors ) || empty( $coauthors ) ) {
 
 
 
 
 
 
 
745
  $coauthors = array( $current_user->user_login );
746
  }
747
 
748
- // Add each co-author to the post meta
749
- foreach( array_unique( $coauthors ) as $key => $author_name ){
 
 
750
 
751
  $author = $this->get_coauthor_by( 'user_nicename', $author_name );
 
752
  $term = $this->update_author_term( $author );
753
- $coauthors[$key] = $term->slug;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  }
755
- return wp_set_post_terms( $post_id, $coauthors, $this->coauthor_taxonomy, $append );
 
756
  }
757
 
758
  /**
@@ -764,10 +820,10 @@ class coauthors_plus {
764
  function delete_user_action($delete_id){
765
  global $wpdb;
766
 
767
- $reassign_id = absint( $_POST['reassign_user'] );
768
 
769
  // If reassign posts, do that -- use coauthors_update_post
770
- if($reassign_id) {
771
  // Get posts belonging to deleted author
772
  $reassign_user = get_user_by( 'id', $reassign_id );
773
  // Set to new author
@@ -835,10 +891,17 @@ class coauthors_plus {
835
  /**
836
  * Checks to see if the current user can set authors or not
837
  */
838
- function current_user_can_set_authors( ) {
839
- global $post, $typenow;
 
 
 
 
 
 
 
 
840
 
841
- $post_type = get_post_type();
842
  // TODO: need to fix this; shouldn't just say no if don't have post_type
843
  if( ! $post_type ) return false;
844
 
@@ -858,8 +921,10 @@ class coauthors_plus {
858
  /**
859
  * Fix for author pages 404ing or not properly displaying on author pages
860
  *
861
- * If an author has no posts, we need to still force the queried object to be
862
- * set in case a site wants to still display the author's profile.
 
 
863
  *
864
  * Alternatively, on an author archive, if the first story has coauthors and
865
  * the first author is NOT the same as the author for the archive,
@@ -867,26 +932,40 @@ class coauthors_plus {
867
  *
868
  * Also, we have to do some hacky WP_Query modification for guest authors
869
  */
870
- function fix_author_page() {
 
 
 
 
871
 
872
- if ( !is_author() )
 
873
  return;
 
 
 
874
 
875
  global $wp_query, $authordata;
876
 
877
- if ( $author_name = sanitize_title( get_query_var( 'author_name' ) ) ) {
878
- $authordata = $this->get_coauthor_by( 'user_nicename', $author_name );
879
- if ( is_object( $authordata ) ) {
880
- $wp_query->queried_object = $authordata;
881
- $wp_query->queried_object_id = $authordata->ID;
882
- }
 
 
 
 
 
 
883
  }
884
  }
885
 
886
  /**
887
  * Main function that handles search-as-you-type for adding authors
888
  */
889
- function ajax_suggest() {
890
 
891
  if( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'coauthors-search' ) )
892
  die();
@@ -910,7 +989,7 @@ class coauthors_plus {
910
  /**
911
  * Get matching authors based on a search value
912
  */
913
- function search_authors( $search = '', $ignored_authors = array() ) {
914
 
915
  // Since 2.7, we're searching against the term description for the fields
916
  // instead of the user details. If the term is missing, we probably need to
@@ -927,9 +1006,9 @@ class coauthors_plus {
927
  ),
928
  'fields' => 'all_with_meta',
929
  );
930
- add_filter( 'pre_user_query', array( $this, 'filter_pre_user_query' ) );
931
  $found_users = get_users( $args );
932
- remove_filter( 'pre_user_query', array( $this, 'filter_pre_user_query' ) );
933
 
934
  foreach( $found_users as $found_user ) {
935
  $term = $this->get_author_term( $found_user );
@@ -974,11 +1053,12 @@ class coauthors_plus {
974
  /**
975
  * Modify get_users() to search display_name instead of user_nicename
976
  */
977
- function filter_pre_user_query( &$user_query ) {
978
 
979
- if ( is_object( $user_query ) )
980
  $user_query->query_where = str_replace( "user_nicename LIKE", "display_name LIKE", $user_query->query_where );
981
- return $user_query;
 
982
  }
983
 
984
  /**
@@ -1013,7 +1093,7 @@ class coauthors_plus {
1013
  'input_box_title' => __( 'Click to change this author, or drag to change their position', 'co-authors-plus' ),
1014
  'search_box_text' => __( 'Search for an author', 'co-authors-plus' ),
1015
  'help_text' => __( 'Click on an author to change them. Drag to change their order. Click on <strong>Remove</strong> to remove them.', 'co-authors-plus' ),
1016
- );
1017
  wp_localize_script( 'co-authors-plus-js', 'coAuthorsPlusStrings', $js_strings );
1018
 
1019
  }
@@ -1060,7 +1140,7 @@ class coauthors_plus {
1060
  /**
1061
  * Adds necessary javascript variables to admin pages
1062
  */
1063
- function js_vars() {
1064
 
1065
  if ( ! $this->is_valid_page() || ! $this->is_post_type_enabled() || ! $this-> current_user_can_set_authors() )
1066
  return;
@@ -1080,31 +1160,15 @@ class coauthors_plus {
1080
 
1081
  /**
1082
  * Helper to only add javascript to necessary pages. Avoids bloat in admin.
 
 
1083
  */
1084
- function is_valid_page() {
1085
  global $pagenow;
1086
 
1087
  return (bool)in_array( $pagenow, $this->_pages_whitelist );
1088
  }
1089
 
1090
- function get_post_id() {
1091
- global $post;
1092
- $post_id = 0;
1093
-
1094
- if ( is_object( $post ) ) {
1095
- $post_id = $post->ID;
1096
- }
1097
-
1098
- if( ! $post_id ) {
1099
- if ( isset( $_GET['post'] ) )
1100
- $post_id = (int) $_GET['post'];
1101
- elseif ( isset( $_POST['post_ID'] ) )
1102
- $post_id = (int) $_POST['post_ID'];
1103
- }
1104
-
1105
- return $post_id;
1106
- }
1107
-
1108
  /**
1109
  * Allows coauthors to edit the post they're coauthors of
1110
  */
@@ -1210,6 +1274,10 @@ class coauthors_plus {
1210
  * Filter Edit Flow's 'ef_calendar_item_information_fields' to add co-authors
1211
  *
1212
  * @see https://github.com/Automattic/Co-Authors-Plus/issues/2
 
 
 
 
1213
  */
1214
  function filter_ef_calendar_item_information_fields( $information_fields, $post_id ) {
1215
 
@@ -1232,6 +1300,11 @@ class coauthors_plus {
1232
  * Filter Edit Flow's 'ef_story_budget_term_column_value' to add co-authors to the story budget
1233
  *
1234
  * @see https://github.com/Automattic/Co-Authors-Plus/issues/2
 
 
 
 
 
1235
  */
1236
  function filter_ef_story_budget_term_column_value( $column_name, $post, $parent_term ) {
1237
 
@@ -1247,6 +1320,41 @@ class coauthors_plus {
1247
  return rtrim( $co_authors_names, ', ' );
1248
  }
1249
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1250
  }
1251
 
1252
  global $coauthors_plus;
@@ -1442,3 +1550,5 @@ function wp_notify_moderator( $comment_id ) {
1442
  return true;
1443
  }
1444
  endif;
 
 
3
  Plugin Name: Co-Authors Plus
4
  Plugin URI: http://wordpress.org/extend/plugins/co-authors-plus/
5
  Description: Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter.
6
+ Version: 3.1
7
  Author: Mohammad Jangda, Daniel Bachhuber, Automattic
8
  Copyright: 2008-2014 Shared and distributed between Mohammad Jangda, Daniel Bachhuber, Weston Ruter
9
 
24
 
25
  */
26
 
27
+ define( 'COAUTHORS_PLUS_VERSION', '3.1' );
28
 
29
  require_once( dirname( __FILE__ ) . '/template-tags.php' );
30
  require_once( dirname( __FILE__ ) . '/deprecated.php' );
46
 
47
  var $gravatar_size = 25;
48
 
49
+ var $_pages_whitelist = array( 'post.php', 'post-new.php', 'edit.php' );
50
 
51
  var $supported_post_types = array();
52
 
105
  add_filter( 'ef_calendar_item_information_fields', array( $this, 'filter_ef_calendar_item_information_fields' ), 10, 2 );
106
  add_filter( 'ef_story_budget_term_column_value', array( $this, 'filter_ef_story_budget_term_column_value' ), 10, 3 );
107
 
108
+ // Support Jetpack Open Graph Tags
109
+ add_filter( 'jetpack_open_graph_tags', array( $this, 'filter_jetpack_open_graph_tags' ), 10, 2 );
110
+
111
  }
112
 
113
  function coauthors_plus() {
118
  * Register the taxonomy used to managing relationships,
119
  * and the custom post type to store our author data
120
  */
121
+ public function action_init() {
122
 
123
  // Allow Co-Authors Plus to be easily translated
124
  load_plugin_textdomain( 'co-authors-plus', null, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
142
  /**
143
  * Register the 'author' taxonomy and add post type support
144
  */
145
+ public function action_init_late() {
146
 
147
  // Register new taxonomy so that we can store all of the relationships
148
  $args = array(
174
  /**
175
  * Initialize the plugin for the admin
176
  */
177
+ public function admin_init() {
178
  global $pagenow;
179
 
180
  // Add the main JS script and CSS file
188
  add_action( 'manage_posts_custom_column', array( $this, '_filter_manage_posts_custom_column' ) );
189
  add_action( 'manage_pages_custom_column', array( $this, '_filter_manage_posts_custom_column' ) );
190
 
191
+ // Add quick-edit author select field
192
+ add_action( 'quick_edit_custom_box', array( $this, '_action_quick_edit_custom_box' ), 10, 2 );
193
+
194
  // Hooks to modify the published post number count on the Users WP List Table
195
  add_filter( 'manage_users_columns', array( $this, '_filter_manage_users_columns' ) );
196
  add_filter( 'manage_users_custom_column', array( $this, '_filter_manage_users_custom_column' ), 10, 3 );
206
  * add_filter( 'coauthors_guest_authors_enabled', '__return_false' )
207
  *
208
  * @since 3.0
209
+ *
210
+ * @return bool
211
  */
212
+ public function is_guest_authors_enabled() {
213
  return apply_filters( 'coauthors_guest_authors_enabled', true );
214
  }
215
 
218
  *
219
  * @param string $key Key to search by (slug,email)
220
  * @param string $value Value to search for
221
+ * @return object|false $coauthor The co-author on success, false on failure
222
  */
223
+ public function get_coauthor_by( $key, $value, $force = false ) {
224
 
225
  // If Guest Authors are enabled, prioritize those profiles
226
  if ( $this->is_guest_authors_enabled() && isset( $this->guest_authors ) ) {
247
  if ( 'login' == $key || 'slug' == $key )
248
  $value = preg_replace( '#^cap\-#', '', $value );
249
  $user = get_user_by( $key, $value );
250
+ if ( ! $user )
251
  return false;
252
  $user->type = 'wpuser';
253
  // However, if guest authors are enabled and there's a guest author linked to this
273
  * @param string $post_type The name of the post type we're considering
274
  * @return bool Whether or not it's enabled
275
  */
276
+ public function is_post_type_enabled( $post_type = null ) {
277
 
278
  if ( ! $post_type )
279
  $post_type = get_post_type();
285
  * Removes the standard WordPress Author box.
286
  * We don't need it because the Co-Authors one is way cooler.
287
  */
288
+ public function remove_authors_box() {
289
 
290
  if ( $this->is_post_type_enabled() )
291
  remove_meta_box( $this->coreauthors_meta_box_name, get_post_type(), 'normal' );
294
  /**
295
  * Adds a custom Authors box
296
  */
297
+ public function add_coauthors_box() {
298
 
299
  if( $this->is_post_type_enabled() && $this->current_user_can_set_authors() )
300
  add_meta_box( $this->coauthors_meta_box_name, __('Authors', 'co-authors-plus'), array( $this, 'coauthors_meta_box' ), get_post_type(), apply_filters( 'coauthors_meta_box_context', 'normal'), apply_filters( 'coauthors_meta_box_priority', 'high'));
303
  /**
304
  * Callback for adding the custom author box
305
  */
306
+ public function coauthors_meta_box( $post ) {
307
  global $post, $coauthors_plus, $current_screen;
308
 
309
  $post_id = $post->ID;
326
  // logged in user, so long as force_guest_authors is false. If force_guest_authors = true, we are
327
  // OK with having an empty authoring box.
328
  if ( !$coauthors_plus->force_guest_authors && empty( $coauthors ) ) {
329
+ if( is_array( $default_user ) ) {
330
+ $coauthors = $default_user;
331
+ } else {
332
+ $coauthors[] = $default_user;
333
+ }
334
  }
335
  } else {
336
  $coauthors = get_coauthors();
339
  $count = 0;
340
  if( !empty( $coauthors ) ) :
341
  ?>
342
+ <div id="coauthors-readonly" class="hide-if-js">
343
  <ul>
344
  <?php
345
  foreach( $coauthors as $coauthor ) :
376
 
377
  /**
378
  * Removes the author dropdown from the post quick edit
 
379
  */
380
  function remove_quick_edit_authors_box() {
381
  global $pagenow;
425
  $args['post_type'] = $post->post_type;
426
  $author_filter_url = add_query_arg( $args, admin_url( 'edit.php' ) );
427
  ?>
428
+ <a href="<?php echo esc_url( $author_filter_url ); ?>"
429
+ data-user_nicename="<?php echo esc_attr( $author->user_nicename ) ?>"
430
+ data-user_email="<?php echo esc_attr( $author->user_email) ?>"
431
+ data-display_name="<?php echo esc_attr( $author->display_name) ?>"
432
+ data-user_login="<?php echo esc_attr( $author->user_login) ?>"
433
+ ><?php echo esc_html( $author->display_name ); ?></a><?php echo ( $count < count( $authors ) ) ? ',' : ''; ?>
434
  <?php
435
  $count++;
436
  endforeach;
472
  return $value;
473
  }
474
 
475
+ /**
476
+ * Quick Edit co-authors box.
477
+ */
478
+ function _action_quick_edit_custom_box( $column_name, $post_type ) {
479
+ if (
480
+ 'coauthors' != $column_name ||
481
+ ! $this->is_post_type_enabled( $post_type ) ||
482
+ ! $this->current_user_can_set_authors()
483
+ )
484
+ return;
485
+ ?>
486
+ <label class="inline-edit-group inline-edit-coauthors">
487
+ <span class="title"><?php _e( 'Authors', 'co-authors-plus' ) ?></span>
488
+ <div id="coauthors-edit" class="hide-if-no-js">
489
+ <p><?php _e( 'Click on an author to change them. Drag to change their order. Click on <strong>Remove</strong> to remove them.', 'co-authors-plus' ); ?></p>
490
+ </div>
491
+ <?php wp_nonce_field( 'coauthors-edit', 'coauthors-nonce' ); ?>
492
+ </label>
493
+ <?php
494
+ }
495
+
496
  /**
497
  * When we update the terms at all, we should update the published post count for each author
498
  */
556
  if ( 'wpuser' == $coauthor->type )
557
  $having_terms_and_authors .= $wpdb->prepare( " OR {$wpdb->posts}.post_author = %d", $coauthor->ID );
558
 
559
+ $post_types = apply_filters( 'coauthors_count_published_post_types', array( 'post' ) );
560
+ $post_types = array_map( 'sanitize_key', $post_types );
561
+ $post_types = "'" . implode( "','", $post_types ) . "'";
562
+
563
+ $query .= " WHERE ({$having_terms_and_authors}) AND {$wpdb->posts}.post_type IN ({$post_types}) AND {$wpdb->posts}.post_status = 'publish'";
564
 
565
  $query .= $wpdb->prepare( " GROUP BY {$wpdb->posts}.ID HAVING MAX( IF( {$wpdb->term_taxonomy}.taxonomy = '%s', IF( {$having_terms},2,1 ),0 ) ) <> 1 ", $this->coauthor_taxonomy );
566
 
702
  }
703
  }
704
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
  // If for some reason we don't have the coauthors fields set
706
  if( ! isset( $data['post_author'] ) ) {
707
  $user = wp_get_current_user();
727
  if ( ! $this->is_post_type_enabled( $post->post_type ) )
728
  return;
729
 
730
+ if ( $this->current_user_can_set_authors( $post ) ) {
731
  // if current_user_can_set_authors and nonce valid
732
  if( isset( $_POST['coauthors-nonce'] ) && isset( $_POST['coauthors'] ) ) {
733
  check_admin_referer( 'coauthors-edit', 'coauthors-nonce' );
753
 
754
  /**
755
  * Add one or more co-authors as bylines for a post
756
+ *
757
+ * @param int
758
+ * @param array
759
+ * @param bool
760
  */
761
+ public function add_coauthors( $post_id, $coauthors, $append = false ) {
762
+ global $current_user, $wpdb;
763
 
764
  $post_id = (int) $post_id;
765
  $insert = false;
766
 
767
+ // Best way to persist order
768
+ if ( $append ) {
769
+ $existing_coauthors = wp_list_pluck( get_coauthors( $post_id ), 'user_login' );
770
+ } else {
771
+ $existing_coauthors = array();
772
+ }
773
+
774
+ // A co-author is always required
775
+ if ( empty( $coauthors ) ) {
776
  $coauthors = array( $current_user->user_login );
777
  }
778
 
779
+ // Set the coauthors
780
+ $coauthors = array_unique( array_merge( $existing_coauthors, $coauthors ) );
781
+ $coauthor_objects = array();
782
+ foreach( $coauthors as &$author_name ){
783
 
784
  $author = $this->get_coauthor_by( 'user_nicename', $author_name );
785
+ $coauthor_objects[] = $author;
786
  $term = $this->update_author_term( $author );
787
+ $author_name = $term->slug;
788
+ }
789
+ wp_set_post_terms( $post_id, $coauthors, $this->coauthor_taxonomy, false );
790
+
791
+ // If the original post_author is no longer assigned,
792
+ // update to the first WP_User $coauthor
793
+ $post_author_user = get_user_by( 'id', get_post( $post_id )->post_author );
794
+ if ( empty( $post_author_user )
795
+ || ! in_array( $post_author_user->user_login, $coauthors ) ) {
796
+ foreach( $coauthor_objects as $coauthor_object ) {
797
+ if ( 'wpuser' == $coauthor_object->type ) {
798
+ $new_author = $coauthor_object;
799
+ break;
800
+ }
801
+ }
802
+ // Uh oh, no WP_Users assigned to the post
803
+ if ( empty( $new_author ) ) {
804
+ return false;
805
+ }
806
+
807
+ $wpdb->update( $wpdb->posts, array( 'post_author' => $new_author->ID ), array( 'ID' => $post_id ) );
808
+ clean_post_cache( $post_id );
809
  }
810
+ return true;
811
+
812
  }
813
 
814
  /**
820
  function delete_user_action($delete_id){
821
  global $wpdb;
822
 
823
+ $reassign_id = isset( $_POST['reassign_user'] ) ? absint( $_POST['reassign_user'] ) : false;
824
 
825
  // If reassign posts, do that -- use coauthors_update_post
826
+ if ( $reassign_id ) {
827
  // Get posts belonging to deleted author
828
  $reassign_user = get_user_by( 'id', $reassign_id );
829
  // Set to new author
891
  /**
892
  * Checks to see if the current user can set authors or not
893
  */
894
+ function current_user_can_set_authors( $post = null ) {
895
+ global $typenow;
896
+
897
+ if ( ! $post ) {
898
+ $post = get_post();
899
+ if ( ! $post )
900
+ return false;
901
+ }
902
+
903
+ $post_type = $post->post_type;
904
 
 
905
  // TODO: need to fix this; shouldn't just say no if don't have post_type
906
  if( ! $post_type ) return false;
907
 
921
  /**
922
  * Fix for author pages 404ing or not properly displaying on author pages
923
  *
924
+ * If an author has no posts, we only want to force the queried object to be
925
+ * the author if they're a member of the blog.
926
+ *
927
+ * If the author does have posts, it doesn't matter that they're not an author.
928
  *
929
  * Alternatively, on an author archive, if the first story has coauthors and
930
  * the first author is NOT the same as the author for the archive,
932
  *
933
  * Also, we have to do some hacky WP_Query modification for guest authors
934
  */
935
+ public function fix_author_page() {
936
+
937
+ if ( ! is_author() ) {
938
+ return;
939
+ }
940
 
941
+ $author_name = sanitize_title( get_query_var( 'author_name' ) );
942
+ if ( ! $author_name ) {
943
  return;
944
+ }
945
+
946
+ $author = $this->get_coauthor_by( 'user_nicename', $author_name );
947
 
948
  global $wp_query, $authordata;
949
 
950
+ if ( is_object( $author ) ) {
951
+ $authordata = $author;
952
+ $term = $this->get_author_term( $authordata );
953
+ }
954
+ if ( ( is_object( $authordata ) && is_user_member_of_blog( $authordata->ID ) )
955
+ || ( ! empty( $term ) && $term->count ) ) {
956
+ $wp_query->queried_object = $authordata;
957
+ $wp_query->queried_object_id = $authordata->ID;
958
+ } else {
959
+ $wp_query->queried_object = $wp_query->queried_object_id = null;
960
+ $wp_query->is_author = $wp_query->is_archive = false;
961
+ $wp_query->is_404 = false;
962
  }
963
  }
964
 
965
  /**
966
  * Main function that handles search-as-you-type for adding authors
967
  */
968
+ public function ajax_suggest() {
969
 
970
  if( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'coauthors-search' ) )
971
  die();
989
  /**
990
  * Get matching authors based on a search value
991
  */
992
+ public function search_authors( $search = '', $ignored_authors = array() ) {
993
 
994
  // Since 2.7, we're searching against the term description for the fields
995
  // instead of the user details. If the term is missing, we probably need to
1006
  ),
1007
  'fields' => 'all_with_meta',
1008
  );
1009
+ add_action( 'pre_user_query', array( $this, 'action_pre_user_query' ) );
1010
  $found_users = get_users( $args );
1011
+ remove_action( 'pre_user_query', array( $this, 'action_pre_user_query' ) );
1012
 
1013
  foreach( $found_users as $found_user ) {
1014
  $term = $this->get_author_term( $found_user );
1053
  /**
1054
  * Modify get_users() to search display_name instead of user_nicename
1055
  */
1056
+ function action_pre_user_query( &$user_query ) {
1057
 
1058
+ if ( is_object( $user_query ) ) {
1059
  $user_query->query_where = str_replace( "user_nicename LIKE", "display_name LIKE", $user_query->query_where );
1060
+ }
1061
+
1062
  }
1063
 
1064
  /**
1093
  'input_box_title' => __( 'Click to change this author, or drag to change their position', 'co-authors-plus' ),
1094
  'search_box_text' => __( 'Search for an author', 'co-authors-plus' ),
1095
  'help_text' => __( 'Click on an author to change them. Drag to change their order. Click on <strong>Remove</strong> to remove them.', 'co-authors-plus' ),
1096
+ );
1097
  wp_localize_script( 'co-authors-plus-js', 'coAuthorsPlusStrings', $js_strings );
1098
 
1099
  }
1140
  /**
1141
  * Adds necessary javascript variables to admin pages
1142
  */
1143
+ public function js_vars() {
1144
 
1145
  if ( ! $this->is_valid_page() || ! $this->is_post_type_enabled() || ! $this-> current_user_can_set_authors() )
1146
  return;
1160
 
1161
  /**
1162
  * Helper to only add javascript to necessary pages. Avoids bloat in admin.
1163
+ *
1164
+ * @return bool
1165
  */
1166
+ public function is_valid_page() {
1167
  global $pagenow;
1168
 
1169
  return (bool)in_array( $pagenow, $this->_pages_whitelist );
1170
  }
1171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1172
  /**
1173
  * Allows coauthors to edit the post they're coauthors of
1174
  */
1274
  * Filter Edit Flow's 'ef_calendar_item_information_fields' to add co-authors
1275
  *
1276
  * @see https://github.com/Automattic/Co-Authors-Plus/issues/2
1277
+ *
1278
+ * @param array $information_fields
1279
+ * @param int $post_id
1280
+ * @return array
1281
  */
1282
  function filter_ef_calendar_item_information_fields( $information_fields, $post_id ) {
1283
 
1300
  * Filter Edit Flow's 'ef_story_budget_term_column_value' to add co-authors to the story budget
1301
  *
1302
  * @see https://github.com/Automattic/Co-Authors-Plus/issues/2
1303
+ *
1304
+ * @param string $column_name
1305
+ * @param object $post
1306
+ * @param object $parent_term
1307
+ * @return string
1308
  */
1309
  function filter_ef_story_budget_term_column_value( $column_name, $post, $parent_term ) {
1310
 
1320
  return rtrim( $co_authors_names, ', ' );
1321
  }
1322
 
1323
+ /**
1324
+ * Filter non-native users added by Co-Author-Plus in Jetpack
1325
+ *
1326
+ * @since 3.1
1327
+ *
1328
+ * @param array $og_tags Required. Array of Open Graph Tags.
1329
+ * @param array $image_dimensions Required. Dimensions for images used.
1330
+ * @return array Open Graph Tags either as they were passed or updated.
1331
+ */
1332
+ public function filter_jetpack_open_graph_tags( $og_tags, $image_dimensions ) {
1333
+
1334
+ if ( is_author() ) {
1335
+ $author = get_queried_object();
1336
+ $og_tags['og:title'] = $author->display_name;
1337
+ $og_tags['og:url'] = get_author_posts_url( $author->ID, $author->user_nicename );
1338
+ $og_tags['og:description'] = $author->description;
1339
+ $og_tags['profile:first_name'] = $author->first_name;
1340
+ $og_tags['profile:last_name'] = $author->last_name;
1341
+ if ( isset( $og_tags['article:author'] ) ) {
1342
+ $og_tags['article:author'] = get_author_posts_url( $author->ID, $author->user_nicename );
1343
+ }
1344
+ } else if ( is_singular() && $this->is_post_type_enabled() ) {
1345
+ $authors = get_coauthors();
1346
+ if ( ! empty( $authors ) ) {
1347
+ $author = array_shift( $authors );
1348
+ if ( isset( $og_tags['article:author'] ) ) {
1349
+ $og_tags['article:author'] = get_author_posts_url( $author->ID, $author->user_nicename );
1350
+ }
1351
+ }
1352
+ }
1353
+
1354
+ // Send back the updated Open Graph Tags
1355
+ return $og_tags;
1356
+ }
1357
+
1358
  }
1359
 
1360
  global $coauthors_plus;
1550
  return true;
1551
  }
1552
  endif;
1553
+
1554
+
composer.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name" : "automattic/co-authors-plus",
3
+ "description": "Multiple bylines and Guest Authors for WordPress",
4
+ "homepage" : "http://wordpress.org/plugins/co-authors-plus/",
5
+ "type" : "wordpress-plugin",
6
+ "license" : "GPL-2.0+",
7
+ "authors" : [
8
+ {
9
+ "name": "Daniel Bachhuber",
10
+ "email": "d@danielbachhuber.com",
11
+ "homepage": "http://danielbachhuber.com",
12
+ "role": "Developer"
13
+ },
14
+ {
15
+ "name" : "Automattic",
16
+ "homepage": "http://automattic.com/"
17
+ }
18
+ ],
19
+ "support" : {
20
+ "issues": "https://github.com/Automattic/Co-Authors-Plus/issues",
21
+ "source": "https://github.com/Automattic/Co-Authors-Plus",
22
+ "forum": "http://wordpress.org/support/plugin/co-authors-plus"
23
+ },
24
+ "require": {
25
+ "composer/installers": "~1.0"
26
+ }
27
+ }
css/co-authors-plus.css CHANGED
@@ -1,3 +1,11 @@
 
 
 
 
 
 
 
 
1
  #coauthors-list {
2
  width: 100%;
3
  padding: 0 5px;
1
+ .inline-edit-group.inline-edit-coauthors {
2
+ display: none;
3
+ }
4
+
5
+ .inline-edit-group.inline-edit-coauthors #coauthors-edit {
6
+ margin-left: 5em;
7
+ }
8
+
9
  #coauthors-list {
10
  width: 100%;
11
  padding: 0 5px;
js/co-authors-plus.js CHANGED
@@ -378,57 +378,67 @@ jQuery(document).ready(function () {
378
  //role
379
  }
380
  */
 
 
381
 
382
- // Add the controls to add co-authors
383
- var $coauthors_div = jQuery('#coauthors-edit');
384
-
385
- if( $coauthors_div.length ) {
386
- // Create the co-authors table
387
- var table = jQuery('<div/>')
388
- .attr('id', 'coauthors-list')
389
- ;
390
- $coauthors_div.append(table);
391
- }
392
-
393
- var $post_coauthor_logins = jQuery('input[name="coauthors[]"]');
394
- var $post_coauthor_names = jQuery('input[name="coauthorsinput[]"]');
395
- var $post_coauthor_emails = jQuery('input[name="coauthorsemails[]"]');
396
- var $post_coauthor_nicenames = jQuery('input[name="coauthorsnicenames[]"]');
397
-
398
- post_coauthors = [];
399
 
400
- for(var i = 0; i < $post_coauthor_logins.length; i++) {
401
- post_coauthors.push({
402
- login: $post_coauthor_logins[i].value,
403
- name: $post_coauthor_names[i].value,
404
- email: $post_coauthor_emails[i].value,
405
- nicename: $post_coauthor_nicenames[i].value
 
 
 
 
 
 
 
 
 
406
  });
407
- }
408
-
409
- // Select authors already added to the post
410
- var addedAlready = [];
411
- //jQuery('#the-list tr').each(function(){
412
- var count = 0;
413
- jQuery.each(post_coauthors, function() {
414
- coauthors_add_coauthor(this, undefined, true, count );
415
- count++;
416
- });
417
 
418
- // Hide the delete button if there's only one co-author
419
- if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length < 2 )
420
- jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass('hidden');
421
 
422
 
423
- // Create new author-suggest and append it to a new row
424
- var newCO = coauthors_create_autosuggest('', false);
425
- coauthors_add_to_table(newCO);
426
 
427
- $coauthors_loading = jQuery('#ajax-loading').clone().attr('id', 'coauthors-loading');
428
- move_loading(newCO);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
429
 
430
- // Remove the read-only coauthors so we don't get craziness
431
- jQuery('#coauthors-readonly').remove();
432
 
433
  function show_loading() {
434
  $coauthors_loading.css('visibility', 'visible');
@@ -456,16 +466,64 @@ jQuery(document).ready(function () {
456
  hide_loading();
457
  });
458
 
459
- // Make co-authors sortable so an editor can control the order of the authors
460
- jQuery('#coauthors-edit').ready(function($) {
461
- $( "#coauthors-list" ).sortable({
462
- axis: 'y',
463
- handle: '.coauthor-tag',
464
- placeholder: 'ui-state-highlight',
465
- items: 'div.coauthor-row:not(div.coauthor-row:last)',
466
- containment: 'parent',
467
- });
468
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
 
470
  });
471
 
378
  //role
379
  }
380
  */
381
+
382
+ var $coauthors_div = null;
383
 
384
+ /**
385
+ * Initialize the Coauthors UI.
386
+ *
387
+ * @param array List of coauthors objects.
388
+ * Each coauthor object should have the (string) properties:
389
+ * login
390
+ * email
391
+ * name
392
+ * nicename
393
+ */
394
+ function coauthors_initialize(post_coauthors) {
395
+ // Add the controls to add co-authors
396
+
397
+ $coauthors_div = jQuery('#coauthors-edit');
 
 
 
398
 
399
+ if( $coauthors_div.length ) {
400
+ // Create the co-authors table
401
+ var table = jQuery('<div/>')
402
+ .attr('id', 'coauthors-list')
403
+ ;
404
+ $coauthors_div.append(table);
405
+ }
406
+
407
+ // Select authors already added to the post
408
+ var addedAlready = [];
409
+ //jQuery('#the-list tr').each(function(){
410
+ var count = 0;
411
+ jQuery.each(post_coauthors, function() {
412
+ coauthors_add_coauthor(this, undefined, true, count );
413
+ count++;
414
  });
 
 
 
 
 
 
 
 
 
 
415
 
416
+ // Hide the delete button if there's only one co-author
417
+ if ( jQuery( '#coauthors-list .coauthor-row .coauthor-tag' ).length < 2 )
418
+ jQuery( '#coauthors-list .coauthor-row .coauthors-author-options' ).addClass('hidden');
419
 
420
 
421
+ // Create new author-suggest and append it to a new row
422
+ var newCO = coauthors_create_autosuggest('', false);
423
+ coauthors_add_to_table(newCO);
424
 
425
+ $coauthors_loading = jQuery('#ajax-loading').clone().attr('id', 'coauthors-loading');
426
+ move_loading(newCO);
427
+
428
+
429
+ // Make co-authors sortable so an editor can control the order of the authors
430
+ jQuery('#coauthors-edit').ready(function($) {
431
+ $( "#coauthors-list" ).sortable({
432
+ axis: 'y',
433
+ handle: '.coauthor-tag',
434
+ placeholder: 'ui-state-highlight',
435
+ items: 'div.coauthor-row:not(div.coauthor-row:last)',
436
+ containment: 'parent',
437
+ });
438
+ });
439
+
440
+ }
441
 
 
 
442
 
443
  function show_loading() {
444
  $coauthors_loading.css('visibility', 'visible');
466
  hide_loading();
467
  });
468
 
469
+ if ( 'post-php' == adminpage ) {
470
+ var $post_coauthor_logins = jQuery('input[name="coauthors[]"]');
471
+ var $post_coauthor_names = jQuery('input[name="coauthorsinput[]"]');
472
+ var $post_coauthor_emails = jQuery('input[name="coauthorsemails[]"]');
473
+ var $post_coauthor_nicenames = jQuery('input[name="coauthorsnicenames[]"]');
474
+
475
+ var post_coauthors = [];
476
+
477
+ for(var i = 0; i < $post_coauthor_logins.length; i++) {
478
+ post_coauthors.push({
479
+ login: $post_coauthor_logins[i].value,
480
+ name: $post_coauthor_names[i].value,
481
+ email: $post_coauthor_emails[i].value,
482
+ nicename: $post_coauthor_nicenames[i].value
483
+ });
484
+ }
485
+
486
+ // Remove the read-only coauthors so we don't get craziness
487
+ jQuery('#coauthors-readonly').remove();
488
+ coauthors_initialize(post_coauthors);
489
+ }
490
+ else if ( 'edit-php' == adminpage ) {
491
+
492
+ var wpInlineEdit = inlineEditPost.edit;
493
+
494
+ inlineEditPost.edit = function( id ) {
495
+
496
+ wpInlineEdit.apply( this, arguments )
497
+
498
+ // get the post ID
499
+ var postId = 0
500
+ if ( typeof( id ) == 'object' )
501
+ postId = parseInt( this.getId( id ) )
502
+
503
+ if ( postId > 0 ) {
504
+
505
+ var $postRow = jQuery( '#post-' + postId )
506
+
507
+ // Move the element to the appropriate position in the view
508
+ // JS hack for core bug: https://core.trac.wordpress.org/ticket/26982
509
+ jQuery('.quick-edit-row .inline-edit-col-left .inline-edit-col').find('.inline-edit-coauthors').remove() // remove any previously added elements
510
+ var el = jQuery('.inline-edit-group.inline-edit-coauthors', '#edit-' + postId );
511
+ el.detach().appendTo('.quick-edit-row .inline-edit-col-left .inline-edit-col').show();
512
+
513
+ // initialize coauthors
514
+ var post_coauthors = jQuery.map(jQuery('.column-coauthors a', $postRow), function(el) {
515
+ return {
516
+ login: jQuery(el).data('user_login'),
517
+ name: jQuery(el).data('display_name'),
518
+ email: jQuery(el).data('user_email'),
519
+ nicename: jQuery(el).data('user_nicename')
520
+ }
521
+ })
522
+ coauthors_initialize(post_coauthors);
523
+
524
+ }
525
+ }
526
+ }
527
 
528
  });
529
 
languages/co-authors-plus-es_ES.mo CHANGED
Binary file
languages/co-authors-plus-es_ES.po CHANGED
@@ -1,94 +1,603 @@
1
- # Copyright (C) 2010 Co-Authors Plus
2
  # This file is distributed under the same license as the Co-Authors Plus package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Co-Authors Plus 2.6.1\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n"
7
- "POT-Creation-Date: 2011-12-30 05:00:31+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-03-12 01:24-0600\n"
12
- "Last-Translator: AA\n"
13
- "Language-Team: LANGUAGE es-ES <LL@li.org>\n"
14
- "X-Poedit-Language: Spanish\n"
15
- "X-Poedit-Country: Mexico\n"
 
16
 
17
- #: co-authors-plus.php:39
18
- msgid " and "
19
- msgstr "y"
20
-
21
- #: co-authors-plus.php:216
22
- msgid "Post Authors"
23
- msgstr "Autores de la entrada"
24
-
25
- #: co-authors-plus.php:254
26
- msgid "<strong>Note:</strong> To edit post authors, please enable javascript or use a javascript-capable browser"
27
- msgstr "<strong>Nota:</strong> Para editar autores de la entrada, por favor habilite javascript o use un programa de consulta que soporte javascript"
28
-
29
- #: co-authors-plus.php:261
30
- #: co-authors-plus.php:743
31
- msgid "Click on an author to change them. Drag to change their order. Click on <strong>Remove</strong> to remove them."
32
- msgstr "Click en el autor para cambiarlo. Arrastrarlo para cambiar el orden. Click en <strong>Remover</strong> para eliminarlos."
33
-
34
- #: co-authors-plus.php:291
35
  msgid "Authors"
36
  msgstr "Autores"
37
 
38
- #: co-authors-plus.php:327
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  msgid "Posts"
40
  msgstr "Entradas"
41
 
42
- #: co-authors-plus.php:343
43
  msgid "View posts by this author"
44
  msgstr "Ver entradas por este autor"
45
 
46
- #: co-authors-plus.php:738
 
 
 
 
47
  msgid "Edit"
48
  msgstr "Editar"
49
 
50
- #: co-authors-plus.php:739
51
  msgid "Remove"
52
- msgstr "Remover"
53
 
54
- #: co-authors-plus.php:740
55
  msgid "Are you sure you want to remove this author?"
56
  msgstr "¿Está seguro de remover este autor?"
57
 
58
- #: co-authors-plus.php:741
59
  msgid "Click to change this author, or drag to change their position"
60
  msgstr "Click para cambiar este autor, o arrastrar para cambiar la posición"
61
 
62
- #: co-authors-plus.php:742
63
  msgid "Search for an author"
64
  msgstr "Buscar un autor"
65
 
66
- #: template-tags.php:71
67
- msgid "No post ID provided for CoAuthorsIterator constructor. Are you not in a loop or is $post not set?"
68
- msgstr "Sin ID de entrada para el contructor de CoAuthorsIterator. ¿no se encuentra en un loop o la entrada $post no está configurada?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
- #: template-tags.php:189
71
- #: template-tags.php:329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  msgid "Posts by %s"
73
  msgstr "Entradas por %s"
74
 
75
- #: template-tags.php:230
76
  msgid "Visit %s&#8217;s website"
77
- msgstr "Visite el sitio web %s&#8217;s "
78
 
79
  #. Plugin Name of the plugin/theme
80
  msgid "Co-Authors Plus"
81
- msgstr ""
82
 
83
  #. Plugin URI of the plugin/theme
84
  msgid "http://wordpress.org/extend/plugins/co-authors-plus/"
85
- msgstr ""
86
 
87
  #. Description of the plugin/theme
88
- msgid "Allows multiple authors to be assigned to a post. This plugin is an extended version of the Co-Authors plugin developed by Weston Ruter."
89
- msgstr "Permite que varios autores sean asignados a una entrada. Este plugin es una versión extendida del plugin Co-Authors desarrolada por Weston Ruter."
 
 
 
 
90
 
91
  #. Author of the plugin/theme
92
- msgid "Mohammad Jangda, Daniel Bachhuber"
93
  msgstr ""
94
-
 
1
+ # Copyright (C) 2012 Co-Authors Plus
2
  # This file is distributed under the same license as the Co-Authors Plus package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Co-Authors Plus 3.0.1-working\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n"
7
+ "POT-Creation-Date: 2012-11-21 21:17:39+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2014-02-27 21:35-0500\n"
12
+ "Last-Translator: \n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+ "X-Generator: Poedit 1.6.4\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "Language: es\n"
17
 
18
+ #: co-authors-plus.php:287 co-authors-plus.php:382 co-authors-plus.php:1158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  msgid "Authors"
20
  msgstr "Autores"
21
 
22
+ #: co-authors-plus.php:342
23
+ msgid ""
24
+ "<strong>Note:</strong> To edit post authors, please enable javascript or use "
25
+ "a javascript-capable browser"
26
+ msgstr ""
27
+ "<strong>Nota:</strong> Para editar autores de esta entrada, por favor "
28
+ "habilite Javascript o use un navegador que lo soporte"
29
+
30
+ #: co-authors-plus.php:349 co-authors-plus.php:956
31
+ msgid ""
32
+ "Click on an author to change them. Drag to change their order. Click on "
33
+ "<strong>Remove</strong> to remove them."
34
+ msgstr ""
35
+ "Haz click en el nombre del autor para cambiarlo; Arrástralo para cambiar el "
36
+ "orden; Haz click en <strong>Borrar</strong> para eliminarlo."
37
+
38
+ #: co-authors-plus.php:425 php/class-coauthors-wp-list-table.php:148
39
  msgid "Posts"
40
  msgstr "Entradas"
41
 
42
+ #: co-authors-plus.php:442
43
  msgid "View posts by this author"
44
  msgstr "Ver entradas por este autor"
45
 
46
+ #: co-authors-plus.php:481
47
+ msgid "No co-author exists for that term"
48
+ msgstr "No hay co-authors para ese término"
49
+
50
+ #: co-authors-plus.php:951 php/class-coauthors-wp-list-table.php:205
51
  msgid "Edit"
52
  msgstr "Editar"
53
 
54
+ #: co-authors-plus.php:952
55
  msgid "Remove"
56
+ msgstr "Borrar"
57
 
58
+ #: co-authors-plus.php:953
59
  msgid "Are you sure you want to remove this author?"
60
  msgstr "¿Está seguro de remover este autor?"
61
 
62
+ #: co-authors-plus.php:954
63
  msgid "Click to change this author, or drag to change their position"
64
  msgstr "Click para cambiar este autor, o arrastrar para cambiar la posición"
65
 
66
+ #: co-authors-plus.php:955
67
  msgid "Search for an author"
68
  msgstr "Buscar un autor"
69
 
70
+ #: co-authors-plus.php:993
71
+ msgid "Mine"
72
+ msgstr "Míos"
73
+
74
+ #: co-authors-plus.php:1230
75
+ msgid "New comment on your post \"%s\""
76
+ msgstr "Nuevo comentario en tu entrada \"%s\""
77
+
78
+ #. translators: 1: comment author, 2: author IP, 3: author domain
79
+ #: co-authors-plus.php:1232 co-authors-plus.php:1349
80
+ msgid "Author : %1$s (IP: %2$s , %3$s)"
81
+ msgstr "Autor : %1$s (IP: %2$s , %3$s)"
82
+
83
+ #: co-authors-plus.php:1233 co-authors-plus.php:1350
84
+ msgid "E-mail : %s"
85
+ msgstr "E-mail : %s"
86
+
87
+ #: co-authors-plus.php:1234 co-authors-plus.php:1244 co-authors-plus.php:1253
88
+ #: co-authors-plus.php:1336 co-authors-plus.php:1343 co-authors-plus.php:1351
89
+ msgid "URL : %s"
90
+ msgstr "URL : %s"
91
+
92
+ #: co-authors-plus.php:1235 co-authors-plus.php:1352
93
+ msgid "Whois : http://whois.arin.net/rest/ip/%s"
94
+ msgstr "Whois : http://whois.arin.net/rest/ip/%s"
95
+
96
+ #: co-authors-plus.php:1236 co-authors-plus.php:1353
97
+ msgid "Comment: "
98
+ msgstr "Comentario: "
99
+
100
+ #: co-authors-plus.php:1237
101
+ msgid "You can see all comments on this post here: "
102
+ msgstr "Ve acá todos los comentarios de esta entrada: "
103
+
104
+ #. translators: 1: blog name, 2: post title
105
+ #: co-authors-plus.php:1239
106
+ msgid "[%1$s] Comment: \"%2$s\""
107
+ msgstr "[%1$s] Comentario: \"%2$s\""
108
+
109
+ #: co-authors-plus.php:1241
110
+ msgid "New trackback on your post \"%s\""
111
+ msgstr "Nuevo trackback en tu entrada \"%s\""
112
+
113
+ #. translators: 1: website name, 2: author IP, 3: author domain
114
+ #. translators: 1: comment author, 2: author IP, 3: author domain
115
+ #: co-authors-plus.php:1243 co-authors-plus.php:1252
116
+ msgid "Website: %1$s (IP: %2$s , %3$s)"
117
+ msgstr "Sitio Web: %1$s (IP: %2$s , %3$s)"
118
+
119
+ #: co-authors-plus.php:1245 co-authors-plus.php:1254
120
+ msgid "Excerpt: "
121
+ msgstr "Resumen: "
122
+
123
+ #: co-authors-plus.php:1246
124
+ msgid "You can see all trackbacks on this post here: "
125
+ msgstr "Puedes ver acá todos los trackbacks de esta entrada: "
126
+
127
+ #. translators: 1: blog name, 2: post title
128
+ #: co-authors-plus.php:1248
129
+ msgid "[%1$s] Trackback: \"%2$s\""
130
+ msgstr "[%1$s] Trackback: \"%2$s\""
131
+
132
+ #: co-authors-plus.php:1250
133
+ msgid "New pingback on your post \"%s\""
134
+ msgstr "Nuevo pingback en tu entrada \"%s\""
135
+
136
+ #: co-authors-plus.php:1255
137
+ msgid "You can see all pingbacks on this post here: "
138
+ msgstr "Puedes ver acá todos los pingbacks de esta entrada: "
139
+
140
+ #. translators: 1: blog name, 2: post title
141
+ #: co-authors-plus.php:1257
142
+ msgid "[%1$s] Pingback: \"%2$s\""
143
+ msgstr "[%1$s] Pingback: \"%2$s\""
144
+
145
+ #: co-authors-plus.php:1260
146
+ msgid "Permalink: %s"
147
+ msgstr "Link permanente: %s"
148
+
149
+ #: co-authors-plus.php:1262 co-authors-plus.php:1359
150
+ msgid "Trash it: %s"
151
+ msgstr "Eliminarlo: %s"
152
+
153
+ #: co-authors-plus.php:1264 co-authors-plus.php:1361
154
+ msgid "Delete it: %s"
155
+ msgstr "Borrarlo: %s"
156
+
157
+ #: co-authors-plus.php:1265 co-authors-plus.php:1362
158
+ msgid "Spam it: %s"
159
+ msgstr "Marcar SPAM: %s"
160
+
161
+ #: co-authors-plus.php:1333
162
+ msgid "A new trackback on the post \"%s\" is waiting for your approval"
163
+ msgstr "Un nuevo trackback en la entrada \"%s\" espera tu aprobación"
164
+
165
+ #: co-authors-plus.php:1335 co-authors-plus.php:1342
166
+ msgid "Website : %1$s (IP: %2$s , %3$s)"
167
+ msgstr "Sitio Web : %1$s (IP: %2$s , %3$s)"
168
+
169
+ #: co-authors-plus.php:1337
170
+ msgid "Trackback excerpt: "
171
+ msgstr "Resumen de trackback: "
172
+
173
+ #: co-authors-plus.php:1340
174
+ msgid "A new pingback on the post \"%s\" is waiting for your approval"
175
+ msgstr "Un nuevo pingback en la entrada \"%s\" espera tu aprobación"
176
+
177
+ #: co-authors-plus.php:1344
178
+ msgid "Pingback excerpt: "
179
+ msgstr "Resumen de pingback: "
180
+
181
+ #: co-authors-plus.php:1347
182
+ msgid "A new comment on the post \"%s\" is waiting for your approval"
183
+ msgstr "Un nuevo comentario en la entrada \"%s\" espera tu aprobación"
184
+
185
+ #: co-authors-plus.php:1357
186
+ msgid "Approve it: %s"
187
+ msgstr "Aprobarlo it: %s"
188
+
189
+ #: co-authors-plus.php:1364
190
+ msgid ""
191
+ "Currently %s comment is waiting for approval. Please visit the moderation "
192
+ "panel:"
193
+ msgid_plural ""
194
+ "Currently %s comments are waiting for approval. Please visit the moderation "
195
+ "panel:"
196
+ msgstr[0] ""
197
+ "%s comentario espera tu aprobación. Por favor visita el panel de moderación:"
198
+ msgstr[1] ""
199
+ "%s comentarios esperan tu aprobación. Por favor visita el panel de "
200
+ "moderación:"
201
+
202
+ #: co-authors-plus.php:1368
203
+ msgid "[%1$s] Please moderate: \"%2$s\""
204
+ msgstr "[%1$s] Por favor moderar: \"%2$s\""
205
+
206
+ #: php/class-coauthors-guest-authors.php:77
207
+ msgid "Guest Author"
208
+ msgstr "Autor Invitado"
209
+
210
+ #: php/class-coauthors-guest-authors.php:78
211
+ msgid "Guest Authors"
212
+ msgstr "Autores Invitados"
213
+
214
+ #: php/class-coauthors-guest-authors.php:79
215
+ msgid "All Guest Authors"
216
+ msgstr "Todos los Autores Invitados"
217
+
218
+ #: php/class-coauthors-guest-authors.php:80
219
+ msgid "Add New Guest Author"
220
+ msgstr "Agregar Nuevo Autor Invitado"
221
+
222
+ #: php/class-coauthors-guest-authors.php:81
223
+ msgid "Edit Guest Author"
224
+ msgstr "Editar Autor Invitado"
225
+
226
+ #: php/class-coauthors-guest-authors.php:82
227
+ msgid "New Guest Author"
228
+ msgstr "Nuevo Autor Invitado"
229
+
230
+ #: php/class-coauthors-guest-authors.php:83
231
+ msgid "View Guest Author"
232
+ msgstr "Ver Autor Invitado"
233
+
234
+ #: php/class-coauthors-guest-authors.php:84
235
+ msgid "Search Guest Authors"
236
+ msgstr "Buscar Autores Invitados"
237
+
238
+ #: php/class-coauthors-guest-authors.php:85
239
+ msgid "No guest authors found"
240
+ msgstr "No se encontraron autores invitados"
241
+
242
+ #: php/class-coauthors-guest-authors.php:86
243
+ msgid "No guest authors found in Trash"
244
+ msgstr "No se encontraron autores invitados en la papelera"
245
+
246
+ #: php/class-coauthors-guest-authors.php:87
247
+ msgid "Update Guest Author"
248
+ msgstr "Actualizar Autor Invitado"
249
+
250
+ #: php/class-coauthors-guest-authors.php:88
251
+ msgid "About the guest author"
252
+ msgstr "Acerca de este autor invitado"
253
+
254
+ #: php/class-coauthors-guest-authors.php:97
255
+ msgctxt "co-authors-plus"
256
+ msgid "Add New"
257
+ msgstr "Agregar Nuevo [co-author-plus]"
258
+
259
+ #: php/class-coauthors-guest-authors.php:153
260
+ #: php/class-coauthors-guest-authors.php:159
261
+ msgid "Guest author updated. <a href=\"%s\">View profile</a>"
262
+ msgstr "Autor invitado actualizado. <a href=\"%s\">Ver perfil</a>"
263
+
264
+ #: php/class-coauthors-guest-authors.php:154
265
+ msgid "Custom field updated."
266
+ msgstr "Campo personalizado actualizado."
267
+
268
+ #: php/class-coauthors-guest-authors.php:155
269
+ msgid "Custom field deleted."
270
+ msgstr "Campo personalizado eliminado."
271
+
272
+ #: php/class-coauthors-guest-authors.php:156
273
+ msgid "Guest author updated."
274
+ msgstr "Autor invitado actualizado"
275
+
276
+ #. translators: %s: date and time of the revision
277
+ #: php/class-coauthors-guest-authors.php:158
278
+ msgid "Guest author restored to revision from %s"
279
+ msgstr "Autor invitado restaurado desde la revisión con fecha %s"
280
+
281
+ #: php/class-coauthors-guest-authors.php:160
282
+ msgid "Guest author saved."
283
+ msgstr "Autor invitado fue guardado."
284
+
285
+ #: php/class-coauthors-guest-authors.php:161
286
+ msgid ""
287
+ "Guest author submitted. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
288
+ msgstr ""
289
+ "Autor invitado enviado. <a target=\"_blank\" href=\"%s\">Vista previa del "
290
+ "perfil</a>"
291
+
292
+ #: php/class-coauthors-guest-authors.php:162
293
+ msgid ""
294
+ "Guest author scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
295
+ "\"%2$s\">Preview profile</a>"
296
+ msgstr ""
297
+ "Autor invitado agendado para: <strong>%1$s</strong>. <a target=\"_blank\" "
298
+ "href=\"%2$s\">Vista previa del perfil profile</a>"
299
+
300
+ #. translators: Publish box date format, see http:php.net/date
301
+ #: php/class-coauthors-guest-authors.php:164
302
+ msgid "M j, Y @ G:i"
303
+ msgstr "M j, Y @ G:i"
304
+
305
+ #: php/class-coauthors-guest-authors.php:165
306
+ msgid ""
307
+ "Guest author updated. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
308
+ msgstr ""
309
+ "Autor invitado actualizado. <a target=\"_blank\" href=\"%s\">Vista previa "
310
+ "del perfil</a>"
311
+
312
+ #: php/class-coauthors-guest-authors.php:182
313
+ #: php/class-coauthors-guest-authors.php:215
314
+ #: php/class-coauthors-guest-authors.php:430
315
+ msgid "Doin' something fishy, huh?"
316
+ msgstr "¿Haciendo traversal, ha??"
317
 
318
+ #: php/class-coauthors-guest-authors.php:185
319
+ #: php/class-coauthors-guest-authors.php:219
320
+ msgid "You don't have permission to perform this action."
321
+ msgstr "No tienes suficientes permisos para realizar esta acción."
322
+
323
+ #: php/class-coauthors-guest-authors.php:224
324
+ #: php/class-coauthors-guest-authors.php:435
325
+ msgid "Guest author can't be deleted because it doesn't exist."
326
+ msgstr "Este Autor invitado no puede ser eliminado porque no existe."
327
+
328
+ #: php/class-coauthors-guest-authors.php:238
329
+ msgid "Co-author does not exists. Try again?"
330
+ msgstr "Co-autor no existe. ¿Intentarlo otra vez?"
331
+
332
+ #: php/class-coauthors-guest-authors.php:246
333
+ msgid "Please make sure to pick an option."
334
+ msgstr "Por favor selecciona una alternativa."
335
+
336
+ #: php/class-coauthors-guest-authors.php:386
337
+ msgid "Guest author deleted."
338
+ msgstr "Autor invitado eliminado."
339
+
340
+ #: php/class-coauthors-guest-authors.php:410
341
+ msgid "Save"
342
+ msgstr "Guardar"
343
+
344
+ #: php/class-coauthors-guest-authors.php:411
345
+ msgid "Unique Slug"
346
+ msgstr "URL única"
347
+
348
+ #: php/class-coauthors-guest-authors.php:413
349
+ msgid "Name"
350
+ msgstr "Nombre"
351
+
352
+ #: php/class-coauthors-guest-authors.php:414
353
+ msgid "Contact Info"
354
+ msgstr "Información de contacto"
355
+
356
+ #: php/class-coauthors-guest-authors.php:439
357
+ msgid "Delete %s"
358
+ msgstr "Eliminar %s"
359
+
360
+ #: php/class-coauthors-guest-authors.php:440
361
+ msgid "You have specified this guest author for deletion:"
362
+ msgstr "Seleccionaste este autor invitado para ser eliminado:"
363
+
364
+ #: php/class-coauthors-guest-authors.php:442
365
+ msgid "What should be done with posts assigned to this guest author?"
366
+ msgstr "¿Qué debemos hacer con las entradas asignadas a este autor invitado?"
367
+
368
+ #: php/class-coauthors-guest-authors.php:443
369
+ msgid ""
370
+ "Note: If you'd like to delete the guest author and all of their posts, you "
371
+ "should delete their posts first and then come back to delete the guest "
372
+ "author."
373
+ msgstr ""
374
+ "Nota: si quieres eliminar este autor invitado y todas sus entradas, primero "
375
+ "debes eliminar las entradas y luego regresar acá para borrar el autor "
376
+ "invitado."
377
+
378
+ #: php/class-coauthors-guest-authors.php:452
379
+ msgid "Reassign to another co-author:"
380
+ msgstr "Reasignar a otro co-autor:"
381
+
382
+ #: php/class-coauthors-guest-authors.php:458
383
+ msgid "Leave posts assigned to the mapped user, %s."
384
+ msgstr "Dejar entrada asignada al autor indicado, %s."
385
+
386
+ #: php/class-coauthors-guest-authors.php:463
387
+ msgid "Remove byline from posts (but leave each post in its current status)."
388
+ msgstr ""
389
+ "Borrar atribución del autor desde las entradas (pero deja cada entrada en su "
390
+ "estado actual)."
391
+
392
+ #: php/class-coauthors-guest-authors.php:466
393
+ msgid "Confirm Deletion"
394
+ msgstr "Confirmar eliminación"
395
+
396
+ #: php/class-coauthors-guest-authors.php:475
397
+ msgid "Add New"
398
+ msgstr "Agregar nuevo"
399
+
400
+ #: php/class-coauthors-guest-authors.php:536
401
+ msgid "WordPress User Mapping"
402
+ msgstr "Asignación de usuarios de WordPress"
403
+
404
+ #: php/class-coauthors-guest-authors.php:538
405
+ msgid "-- Not mapped --"
406
+ msgstr "-- Sin asignación --"
407
+
408
+ #: php/class-coauthors-guest-authors.php:651
409
+ msgid "Guest authors cannot be created without display names."
410
+ msgstr "No se pueden crear Autores invitados sin nombre visible."
411
+
412
+ #: php/class-coauthors-guest-authors.php:658
413
+ msgid ""
414
+ "Guest authors cannot be created with the same user_login value as a user. "
415
+ "Try creating a profile from the user instead"
416
+ msgstr ""
417
+ "No se pueden crear Autores invitados con el mismo user_login que un usuario "
418
+ "existente. Puedes intentar creando un crear un perfil de usuario."
419
+
420
+ #: php/class-coauthors-guest-authors.php:663
421
+ msgid "Display name conflicts with another guest author display name."
422
+ msgstr "Nombre visible ya está en uso por otro autor invitado."
423
+
424
+ #: php/class-coauthors-guest-authors.php:817
425
+ msgid "ID"
426
+ msgstr "ID"
427
+
428
+ #: php/class-coauthors-guest-authors.php:823
429
+ #: php/class-coauthors-wp-list-table.php:143
430
+ msgid "Display Name"
431
+ msgstr "Nombre visible"
432
+
433
+ #: php/class-coauthors-guest-authors.php:829
434
+ #: php/class-coauthors-wp-list-table.php:144
435
+ msgid "First Name"
436
+ msgstr "Nombre"
437
+
438
+ #: php/class-coauthors-guest-authors.php:834
439
+ #: php/class-coauthors-wp-list-table.php:145
440
+ msgid "Last Name"
441
+ msgstr "Apellido"
442
+
443
+ #: php/class-coauthors-guest-authors.php:839
444
+ msgid "Slug"
445
+ msgstr "URL única"
446
+
447
+ #: php/class-coauthors-guest-authors.php:846
448
+ #: php/class-coauthors-wp-list-table.php:146
449
+ msgid "E-mail"
450
+ msgstr "E-mail"
451
+
452
+ #: php/class-coauthors-guest-authors.php:851
453
+ #: php/class-coauthors-wp-list-table.php:147
454
+ msgid "Linked Account"
455
+ msgstr "Cuenta vinculada"
456
+
457
+ #: php/class-coauthors-guest-authors.php:856
458
+ msgid "Website"
459
+ msgstr "Sitio Web"
460
+
461
+ #: php/class-coauthors-guest-authors.php:861
462
+ msgid "AIM"
463
+ msgstr "AIM"
464
+
465
+ #: php/class-coauthors-guest-authors.php:866
466
+ msgid "Yahoo IM"
467
+ msgstr "Yahoo IM"
468
+
469
+ #: php/class-coauthors-guest-authors.php:871
470
+ msgid "Jabber / Google Talk"
471
+ msgstr "Jabber / Google Talk"
472
+
473
+ #: php/class-coauthors-guest-authors.php:876
474
+ msgid "Biographical Info"
475
+ msgstr "Información biográfica"
476
+
477
+ #: php/class-coauthors-guest-authors.php:1006
478
+ msgid "%s is a required field"
479
+ msgstr "%s es un campo obligatorio"
480
+
481
+ #: php/class-coauthors-guest-authors.php:1012
482
+ msgid "user_login cannot duplicate existing guest author or mapped user"
483
+ msgstr ""
484
+ "user_login no puede ser duplicado de un usuario asignado o de otro autor "
485
+ "invitado ya existentes"
486
+
487
+ #: php/class-coauthors-guest-authors.php:1057
488
+ msgid "Guest author does not exist"
489
+ msgstr "Este autor invitado no existe"
490
+
491
+ #: php/class-coauthors-guest-authors.php:1069
492
+ msgid "Reassignment co-author does not exist"
493
+ msgstr "Usuario seleccionado para la reasignación no existe"
494
+
495
+ #: php/class-coauthors-guest-authors.php:1101
496
+ msgid "No user exists with that ID"
497
+ msgstr "No existe un usuario con ese ID"
498
+
499
+ #: php/class-coauthors-guest-authors.php:1158
500
+ msgid "Edit Profile"
501
+ msgstr "Editar Perfil"
502
+
503
+ #: php/class-coauthors-guest-authors.php:1166
504
+ msgid "Create Profile"
505
+ msgstr "Crear Perfil"
506
+
507
+ #: php/class-coauthors-wp-list-table.php:19
508
+ msgid "Co-Authors"
509
+ msgstr "Co-Autores"
510
+
511
+ #: php/class-coauthors-wp-list-table.php:20
512
+ msgid "Co-Author"
513
+ msgstr "Co-Autor"
514
+
515
+ #: php/class-coauthors-wp-list-table.php:81
516
+ msgid "Show all"
517
+ msgstr "Mostrar todos"
518
+
519
+ #: php/class-coauthors-wp-list-table.php:82
520
+ msgid "With linked account"
521
+ msgstr "Con cuenta vinculada"
522
+
523
+ #: php/class-coauthors-wp-list-table.php:83
524
+ msgid "Without linked account"
525
+ msgstr "Sin cuenta vinculada"
526
+
527
+ #: php/class-coauthors-wp-list-table.php:135
528
+ msgid "No matching guest authors were found."
529
+ msgstr "No se encontraron autores"
530
+
531
+ #: php/class-coauthors-wp-list-table.php:206
532
+ msgid "Delete"
533
+ msgstr "Borrar"
534
+
535
+ #: php/class-coauthors-wp-list-table.php:207
536
+ msgid "View Posts"
537
+ msgstr "Ver Entradas"
538
+
539
+ #: php/class-coauthors-wp-list-table.php:257
540
+ msgid "Filter"
541
+ msgstr "Filtrar"
542
+
543
+ #: php/class-wp-cli.php:153
544
+ msgid "Please specify a valid user_login"
545
+ msgstr "Por favor especifique un user_login válido"
546
+
547
+ #: php/class-wp-cli.php:156
548
+ msgid "Please specify a valid co-author login"
549
+ msgstr "Por favor especifique información de ingreso para coautor válida"
550
+
551
+ #: php/class-wp-cli.php:163
552
+ msgid "Skipping - Post #%d already has co-authors assigned: %s"
553
+ msgstr "Ignorando - La entrada #%d ya tiene co-autores asignados: %s"
554
+
555
+ #: php/class-wp-cli.php:168
556
+ msgid "Updating - Adding %s's byline to post #%d"
557
+ msgstr "Actualizando - Agregando información de %s a la entrada #%d"
558
+
559
+ #: php/class-wp-cli.php:173
560
+ msgid "All done! %d posts were affected."
561
+ msgstr "¡Todo listo! %d poseeos fueron afectados."
562
+
563
+ #: template-tags.php:82
564
+ msgid ""
565
+ "No post ID provided for CoAuthorsIterator constructor. Are you not in a loop "
566
+ "or is $post not set?"
567
+ msgstr ""
568
+ "El constructor CoAuthorsIterator no recibió un ID de entrada como parámetro. "
569
+ "Verifica que estás dentro del loop/bucle y que $post esté definida."
570
+
571
+ #: template-tags.php:136
572
+ msgid " and "
573
+ msgstr " y "
574
+
575
+ #: template-tags.php:208 template-tags.php:365
576
  msgid "Posts by %s"
577
  msgstr "Entradas por %s"
578
 
579
+ #: template-tags.php:257
580
  msgid "Visit %s&#8217;s website"
581
+ msgstr "Visite el sitio web %s&#8217;s"
582
 
583
  #. Plugin Name of the plugin/theme
584
  msgid "Co-Authors Plus"
585
+ msgstr "Co-Authors Plus"
586
 
587
  #. Plugin URI of the plugin/theme
588
  msgid "http://wordpress.org/extend/plugins/co-authors-plus/"
589
+ msgstr "http://wordpress.org/extend/plugins/co-authors-plus/"
590
 
591
  #. Description of the plugin/theme
592
+ msgid ""
593
+ "Allows multiple authors to be assigned to a post. This plugin is an extended "
594
+ "version of the Co-Authors plugin developed by Weston Ruter."
595
+ msgstr ""
596
+ "Permite que varios autores sean asignados a una entrada/página. Este plugin "
597
+ "es una versión extendida del plugin Co-Authors desarrollado por Weston Ruter."
598
 
599
  #. Author of the plugin/theme
600
+ msgid "Mohammad Jangda, Daniel Bachhuber, Automattic"
601
  msgstr ""
602
+ "Mohammad Jangda, Daniel Bachhuber, Automattic. Localizado al español por "
603
+ "@sergiomajluf"
languages/co-authors-plus.pot CHANGED
@@ -1,185 +1,186 @@
1
- # Copyright (C) 2012 Co-Authors Plus
2
  # This file is distributed under the same license as the Co-Authors Plus package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Co-Authors Plus 3.0.1-working\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n"
7
- "POT-Creation-Date: 2012-11-21 21:17:39+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: co-authors-plus.php:287 co-authors-plus.php:382 co-authors-plus.php:1158
 
16
  msgid "Authors"
17
  msgstr ""
18
 
19
- #: co-authors-plus.php:342
20
  msgid ""
21
  "<strong>Note:</strong> To edit post authors, please enable javascript or use "
22
  "a javascript-capable browser"
23
  msgstr ""
24
 
25
- #: co-authors-plus.php:349 co-authors-plus.php:956
26
  msgid ""
27
  "Click on an author to change them. Drag to change their order. Click on "
28
  "<strong>Remove</strong> to remove them."
29
  msgstr ""
30
 
31
- #: co-authors-plus.php:425 php/class-coauthors-wp-list-table.php:148
32
  msgid "Posts"
33
  msgstr ""
34
 
35
- #: co-authors-plus.php:442
36
  msgid "View posts by this author"
37
  msgstr ""
38
 
39
- #: co-authors-plus.php:481
40
  msgid "No co-author exists for that term"
41
  msgstr ""
42
 
43
- #: co-authors-plus.php:951 php/class-coauthors-wp-list-table.php:205
44
  msgid "Edit"
45
  msgstr ""
46
 
47
- #: co-authors-plus.php:952
48
  msgid "Remove"
49
  msgstr ""
50
 
51
- #: co-authors-plus.php:953
52
  msgid "Are you sure you want to remove this author?"
53
  msgstr ""
54
 
55
- #: co-authors-plus.php:954
56
  msgid "Click to change this author, or drag to change their position"
57
  msgstr ""
58
 
59
- #: co-authors-plus.php:955
60
  msgid "Search for an author"
61
  msgstr ""
62
 
63
- #: co-authors-plus.php:993
64
  msgid "Mine"
65
  msgstr ""
66
 
67
- #: co-authors-plus.php:1230
68
  msgid "New comment on your post \"%s\""
69
  msgstr ""
70
 
71
  #. translators: 1: comment author, 2: author IP, 3: author domain
72
- #: co-authors-plus.php:1232 co-authors-plus.php:1349
73
  msgid "Author : %1$s (IP: %2$s , %3$s)"
74
  msgstr ""
75
 
76
- #: co-authors-plus.php:1233 co-authors-plus.php:1350
77
  msgid "E-mail : %s"
78
  msgstr ""
79
 
80
- #: co-authors-plus.php:1234 co-authors-plus.php:1244 co-authors-plus.php:1253
81
- #: co-authors-plus.php:1336 co-authors-plus.php:1343 co-authors-plus.php:1351
82
  msgid "URL : %s"
83
  msgstr ""
84
 
85
- #: co-authors-plus.php:1235 co-authors-plus.php:1352
86
  msgid "Whois : http://whois.arin.net/rest/ip/%s"
87
  msgstr ""
88
 
89
- #: co-authors-plus.php:1236 co-authors-plus.php:1353
90
  msgid "Comment: "
91
  msgstr ""
92
 
93
- #: co-authors-plus.php:1237
94
  msgid "You can see all comments on this post here: "
95
  msgstr ""
96
 
97
  #. translators: 1: blog name, 2: post title
98
- #: co-authors-plus.php:1239
99
  msgid "[%1$s] Comment: \"%2$s\""
100
  msgstr ""
101
 
102
- #: co-authors-plus.php:1241
103
  msgid "New trackback on your post \"%s\""
104
  msgstr ""
105
 
106
  #. translators: 1: website name, 2: author IP, 3: author domain
107
  #. translators: 1: comment author, 2: author IP, 3: author domain
108
- #: co-authors-plus.php:1243 co-authors-plus.php:1252
109
  msgid "Website: %1$s (IP: %2$s , %3$s)"
110
  msgstr ""
111
 
112
- #: co-authors-plus.php:1245 co-authors-plus.php:1254
113
  msgid "Excerpt: "
114
  msgstr ""
115
 
116
- #: co-authors-plus.php:1246
117
  msgid "You can see all trackbacks on this post here: "
118
  msgstr ""
119
 
120
  #. translators: 1: blog name, 2: post title
121
- #: co-authors-plus.php:1248
122
  msgid "[%1$s] Trackback: \"%2$s\""
123
  msgstr ""
124
 
125
- #: co-authors-plus.php:1250
126
  msgid "New pingback on your post \"%s\""
127
  msgstr ""
128
 
129
- #: co-authors-plus.php:1255
130
  msgid "You can see all pingbacks on this post here: "
131
  msgstr ""
132
 
133
  #. translators: 1: blog name, 2: post title
134
- #: co-authors-plus.php:1257
135
  msgid "[%1$s] Pingback: \"%2$s\""
136
  msgstr ""
137
 
138
- #: co-authors-plus.php:1260
139
  msgid "Permalink: %s"
140
  msgstr ""
141
 
142
- #: co-authors-plus.php:1262 co-authors-plus.php:1359
143
  msgid "Trash it: %s"
144
  msgstr ""
145
 
146
- #: co-authors-plus.php:1264 co-authors-plus.php:1361
147
  msgid "Delete it: %s"
148
  msgstr ""
149
 
150
- #: co-authors-plus.php:1265 co-authors-plus.php:1362
151
  msgid "Spam it: %s"
152
  msgstr ""
153
 
154
- #: co-authors-plus.php:1333
155
  msgid "A new trackback on the post \"%s\" is waiting for your approval"
156
  msgstr ""
157
 
158
- #: co-authors-plus.php:1335 co-authors-plus.php:1342
159
  msgid "Website : %1$s (IP: %2$s , %3$s)"
160
  msgstr ""
161
 
162
- #: co-authors-plus.php:1337
163
  msgid "Trackback excerpt: "
164
  msgstr ""
165
 
166
- #: co-authors-plus.php:1340
167
  msgid "A new pingback on the post \"%s\" is waiting for your approval"
168
  msgstr ""
169
 
170
- #: co-authors-plus.php:1344
171
  msgid "Pingback excerpt: "
172
  msgstr ""
173
 
174
- #: co-authors-plus.php:1347
175
  msgid "A new comment on the post \"%s\" is waiting for your approval"
176
  msgstr ""
177
 
178
- #: co-authors-plus.php:1357
179
  msgid "Approve it: %s"
180
  msgstr ""
181
 
182
- #: co-authors-plus.php:1364
183
  msgid ""
184
  "Currently %s comment is waiting for approval. Please visit the moderation "
185
  "panel:"
@@ -189,293 +190,294 @@ msgid_plural ""
189
  msgstr[0] ""
190
  msgstr[1] ""
191
 
192
- #: co-authors-plus.php:1368
193
  msgid "[%1$s] Please moderate: \"%2$s\""
194
  msgstr ""
195
 
196
- #: php/class-coauthors-guest-authors.php:77
197
  msgid "Guest Author"
198
  msgstr ""
199
 
200
- #: php/class-coauthors-guest-authors.php:78
201
  msgid "Guest Authors"
202
  msgstr ""
203
 
204
- #: php/class-coauthors-guest-authors.php:79
205
  msgid "All Guest Authors"
206
  msgstr ""
207
 
208
- #: php/class-coauthors-guest-authors.php:80
209
  msgid "Add New Guest Author"
210
  msgstr ""
211
 
212
- #: php/class-coauthors-guest-authors.php:81
213
  msgid "Edit Guest Author"
214
  msgstr ""
215
 
216
- #: php/class-coauthors-guest-authors.php:82
217
  msgid "New Guest Author"
218
  msgstr ""
219
 
220
- #: php/class-coauthors-guest-authors.php:83
221
  msgid "View Guest Author"
222
  msgstr ""
223
 
224
- #: php/class-coauthors-guest-authors.php:84
225
  msgid "Search Guest Authors"
226
  msgstr ""
227
 
228
- #: php/class-coauthors-guest-authors.php:85
229
  msgid "No guest authors found"
230
  msgstr ""
231
 
232
- #: php/class-coauthors-guest-authors.php:86
233
  msgid "No guest authors found in Trash"
234
  msgstr ""
235
 
236
- #: php/class-coauthors-guest-authors.php:87
237
  msgid "Update Guest Author"
238
  msgstr ""
239
 
240
- #: php/class-coauthors-guest-authors.php:88
241
  msgid "About the guest author"
242
  msgstr ""
243
 
244
- #: php/class-coauthors-guest-authors.php:97
245
- msgctxt "co-authors-plus"
246
  msgid "Add New"
247
  msgstr ""
248
 
249
- #: php/class-coauthors-guest-authors.php:153
250
- #: php/class-coauthors-guest-authors.php:159
251
  msgid "Guest author updated. <a href=\"%s\">View profile</a>"
252
  msgstr ""
253
 
254
- #: php/class-coauthors-guest-authors.php:154
255
  msgid "Custom field updated."
256
  msgstr ""
257
 
258
- #: php/class-coauthors-guest-authors.php:155
259
  msgid "Custom field deleted."
260
  msgstr ""
261
 
262
- #: php/class-coauthors-guest-authors.php:156
263
  msgid "Guest author updated."
264
  msgstr ""
265
 
266
  #. translators: %s: date and time of the revision
267
- #: php/class-coauthors-guest-authors.php:158
268
  msgid "Guest author restored to revision from %s"
269
  msgstr ""
270
 
271
- #: php/class-coauthors-guest-authors.php:160
272
  msgid "Guest author saved."
273
  msgstr ""
274
 
275
- #: php/class-coauthors-guest-authors.php:161
276
  msgid ""
277
  "Guest author submitted. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
278
  msgstr ""
279
 
280
- #: php/class-coauthors-guest-authors.php:162
281
  msgid ""
282
  "Guest author scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
283
  "\"%2$s\">Preview profile</a>"
284
  msgstr ""
285
 
286
  #. translators: Publish box date format, see http:php.net/date
287
- #: php/class-coauthors-guest-authors.php:164
288
  msgid "M j, Y @ G:i"
289
  msgstr ""
290
 
291
- #: php/class-coauthors-guest-authors.php:165
292
  msgid ""
293
  "Guest author updated. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
294
  msgstr ""
295
 
296
- #: php/class-coauthors-guest-authors.php:182
297
- #: php/class-coauthors-guest-authors.php:215
298
- #: php/class-coauthors-guest-authors.php:430
299
  msgid "Doin' something fishy, huh?"
300
  msgstr ""
301
 
302
- #: php/class-coauthors-guest-authors.php:185
303
- #: php/class-coauthors-guest-authors.php:219
304
  msgid "You don't have permission to perform this action."
305
  msgstr ""
306
 
307
- #: php/class-coauthors-guest-authors.php:224
308
- #: php/class-coauthors-guest-authors.php:435
309
  msgid "Guest author can't be deleted because it doesn't exist."
310
  msgstr ""
311
 
312
- #: php/class-coauthors-guest-authors.php:238
313
  msgid "Co-author does not exists. Try again?"
314
  msgstr ""
315
 
316
- #: php/class-coauthors-guest-authors.php:246
317
  msgid "Please make sure to pick an option."
318
  msgstr ""
319
 
320
- #: php/class-coauthors-guest-authors.php:386
321
  msgid "Guest author deleted."
322
  msgstr ""
323
 
324
- #: php/class-coauthors-guest-authors.php:410
325
  msgid "Save"
326
  msgstr ""
327
 
328
- #: php/class-coauthors-guest-authors.php:411
329
  msgid "Unique Slug"
330
  msgstr ""
331
 
332
- #: php/class-coauthors-guest-authors.php:413
333
  msgid "Name"
334
  msgstr ""
335
 
336
- #: php/class-coauthors-guest-authors.php:414
337
  msgid "Contact Info"
338
  msgstr ""
339
 
340
- #: php/class-coauthors-guest-authors.php:439
341
  msgid "Delete %s"
342
  msgstr ""
343
 
344
- #: php/class-coauthors-guest-authors.php:440
345
  msgid "You have specified this guest author for deletion:"
346
  msgstr ""
347
 
348
- #: php/class-coauthors-guest-authors.php:442
349
  msgid "What should be done with posts assigned to this guest author?"
350
  msgstr ""
351
 
352
- #: php/class-coauthors-guest-authors.php:443
353
  msgid ""
354
  "Note: If you'd like to delete the guest author and all of their posts, you "
355
  "should delete their posts first and then come back to delete the guest "
356
  "author."
357
  msgstr ""
358
 
359
- #: php/class-coauthors-guest-authors.php:452
360
  msgid "Reassign to another co-author:"
361
  msgstr ""
362
 
363
- #: php/class-coauthors-guest-authors.php:458
364
  msgid "Leave posts assigned to the mapped user, %s."
365
  msgstr ""
366
 
367
- #: php/class-coauthors-guest-authors.php:463
368
  msgid "Remove byline from posts (but leave each post in its current status)."
369
  msgstr ""
370
 
371
- #: php/class-coauthors-guest-authors.php:466
372
  msgid "Confirm Deletion"
373
  msgstr ""
374
 
375
- #: php/class-coauthors-guest-authors.php:475
376
  msgid "Add New"
377
  msgstr ""
378
 
379
- #: php/class-coauthors-guest-authors.php:536
380
  msgid "WordPress User Mapping"
381
  msgstr ""
382
 
383
- #: php/class-coauthors-guest-authors.php:538
384
  msgid "-- Not mapped --"
385
  msgstr ""
386
 
387
- #: php/class-coauthors-guest-authors.php:651
 
388
  msgid "Guest authors cannot be created without display names."
389
  msgstr ""
390
 
391
- #: php/class-coauthors-guest-authors.php:658
392
  msgid ""
393
  "Guest authors cannot be created with the same user_login value as a user. "
394
- "Try creating a profile from the user instead"
395
  msgstr ""
396
 
397
- #: php/class-coauthors-guest-authors.php:663
398
  msgid "Display name conflicts with another guest author display name."
399
  msgstr ""
400
 
401
- #: php/class-coauthors-guest-authors.php:817
402
  msgid "ID"
403
  msgstr ""
404
 
405
- #: php/class-coauthors-guest-authors.php:823
406
  #: php/class-coauthors-wp-list-table.php:143
407
  msgid "Display Name"
408
  msgstr ""
409
 
410
- #: php/class-coauthors-guest-authors.php:829
411
  #: php/class-coauthors-wp-list-table.php:144
412
  msgid "First Name"
413
  msgstr ""
414
 
415
- #: php/class-coauthors-guest-authors.php:834
416
  #: php/class-coauthors-wp-list-table.php:145
417
  msgid "Last Name"
418
  msgstr ""
419
 
420
- #: php/class-coauthors-guest-authors.php:839
421
  msgid "Slug"
422
  msgstr ""
423
 
424
- #: php/class-coauthors-guest-authors.php:846
425
  #: php/class-coauthors-wp-list-table.php:146
426
  msgid "E-mail"
427
  msgstr ""
428
 
429
- #: php/class-coauthors-guest-authors.php:851
430
  #: php/class-coauthors-wp-list-table.php:147
431
  msgid "Linked Account"
432
  msgstr ""
433
 
434
- #: php/class-coauthors-guest-authors.php:856
435
  msgid "Website"
436
  msgstr ""
437
 
438
- #: php/class-coauthors-guest-authors.php:861
439
  msgid "AIM"
440
  msgstr ""
441
 
442
- #: php/class-coauthors-guest-authors.php:866
443
  msgid "Yahoo IM"
444
  msgstr ""
445
 
446
- #: php/class-coauthors-guest-authors.php:871
447
  msgid "Jabber / Google Talk"
448
  msgstr ""
449
 
450
- #: php/class-coauthors-guest-authors.php:876
451
  msgid "Biographical Info"
452
  msgstr ""
453
 
454
- #: php/class-coauthors-guest-authors.php:1006
455
  msgid "%s is a required field"
456
  msgstr ""
457
 
458
- #: php/class-coauthors-guest-authors.php:1012
459
  msgid "user_login cannot duplicate existing guest author or mapped user"
460
  msgstr ""
461
 
462
- #: php/class-coauthors-guest-authors.php:1057
463
  msgid "Guest author does not exist"
464
  msgstr ""
465
 
466
- #: php/class-coauthors-guest-authors.php:1069
467
  msgid "Reassignment co-author does not exist"
468
  msgstr ""
469
 
470
- #: php/class-coauthors-guest-authors.php:1101
471
  msgid "No user exists with that ID"
472
  msgstr ""
473
 
474
- #: php/class-coauthors-guest-authors.php:1158
475
  msgid "Edit Profile"
476
  msgstr ""
477
 
478
- #: php/class-coauthors-guest-authors.php:1166
479
  msgid "Create Profile"
480
  msgstr ""
481
 
@@ -503,53 +505,53 @@ msgstr ""
503
  msgid "No matching guest authors were found."
504
  msgstr ""
505
 
506
- #: php/class-coauthors-wp-list-table.php:206
507
  msgid "Delete"
508
  msgstr ""
509
 
510
- #: php/class-coauthors-wp-list-table.php:207
511
  msgid "View Posts"
512
  msgstr ""
513
 
514
- #: php/class-coauthors-wp-list-table.php:257
515
  msgid "Filter"
516
  msgstr ""
517
 
518
- #: php/class-wp-cli.php:153
519
  msgid "Please specify a valid user_login"
520
  msgstr ""
521
 
522
- #: php/class-wp-cli.php:156
523
  msgid "Please specify a valid co-author login"
524
  msgstr ""
525
 
526
- #: php/class-wp-cli.php:163
527
  msgid "Skipping - Post #%d already has co-authors assigned: %s"
528
  msgstr ""
529
 
530
- #: php/class-wp-cli.php:168
531
  msgid "Updating - Adding %s's byline to post #%d"
532
  msgstr ""
533
 
534
- #: php/class-wp-cli.php:173
535
  msgid "All done! %d posts were affected."
536
  msgstr ""
537
 
538
- #: template-tags.php:82
539
  msgid ""
540
  "No post ID provided for CoAuthorsIterator constructor. Are you not in a loop "
541
  "or is $post not set?"
542
  msgstr ""
543
 
544
- #: template-tags.php:136
545
  msgid " and "
546
  msgstr ""
547
 
548
- #: template-tags.php:208 template-tags.php:365
549
  msgid "Posts by %s"
550
  msgstr ""
551
 
552
- #: template-tags.php:257
553
  msgid "Visit %s&#8217;s website"
554
  msgstr ""
555
 
1
+ # Copyright (C) 2014 Co-Authors Plus
2
  # This file is distributed under the same license as the Co-Authors Plus package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Co-Authors Plus 3.1-beta\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/co-authors-plus\n"
7
+ "POT-Creation-Date: 2014-03-17 15:59:18+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: co-authors-plus.php:300 co-authors-plus.php:401 co-authors-plus.php:487
16
+ #: co-authors-plus.php:1290
17
  msgid "Authors"
18
  msgstr ""
19
 
20
+ #: co-authors-plus.php:362
21
  msgid ""
22
  "<strong>Note:</strong> To edit post authors, please enable javascript or use "
23
  "a javascript-capable browser"
24
  msgstr ""
25
 
26
+ #: co-authors-plus.php:369 co-authors-plus.php:489 co-authors-plus.php:1095
27
  msgid ""
28
  "Click on an author to change them. Drag to change their order. Click on "
29
  "<strong>Remove</strong> to remove them."
30
  msgstr ""
31
 
32
+ #: co-authors-plus.php:449 php/class-coauthors-wp-list-table.php:148
33
  msgid "Posts"
34
  msgstr ""
35
 
36
+ #: co-authors-plus.php:466
37
  msgid "View posts by this author"
38
  msgstr ""
39
 
40
+ #: co-authors-plus.php:531 co-authors-plus.php:548
41
  msgid "No co-author exists for that term"
42
  msgstr ""
43
 
44
+ #: co-authors-plus.php:1090 php/class-coauthors-wp-list-table.php:212
45
  msgid "Edit"
46
  msgstr ""
47
 
48
+ #: co-authors-plus.php:1091
49
  msgid "Remove"
50
  msgstr ""
51
 
52
+ #: co-authors-plus.php:1092
53
  msgid "Are you sure you want to remove this author?"
54
  msgstr ""
55
 
56
+ #: co-authors-plus.php:1093
57
  msgid "Click to change this author, or drag to change their position"
58
  msgstr ""
59
 
60
+ #: co-authors-plus.php:1094
61
  msgid "Search for an author"
62
  msgstr ""
63
 
64
+ #: co-authors-plus.php:1132
65
  msgid "Mine"
66
  msgstr ""
67
 
68
+ #: co-authors-plus.php:1402
69
  msgid "New comment on your post \"%s\""
70
  msgstr ""
71
 
72
  #. translators: 1: comment author, 2: author IP, 3: author domain
73
+ #: co-authors-plus.php:1404 co-authors-plus.php:1521
74
  msgid "Author : %1$s (IP: %2$s , %3$s)"
75
  msgstr ""
76
 
77
+ #: co-authors-plus.php:1405 co-authors-plus.php:1522
78
  msgid "E-mail : %s"
79
  msgstr ""
80
 
81
+ #: co-authors-plus.php:1406 co-authors-plus.php:1416 co-authors-plus.php:1425
82
+ #: co-authors-plus.php:1508 co-authors-plus.php:1515 co-authors-plus.php:1523
83
  msgid "URL : %s"
84
  msgstr ""
85
 
86
+ #: co-authors-plus.php:1407 co-authors-plus.php:1524
87
  msgid "Whois : http://whois.arin.net/rest/ip/%s"
88
  msgstr ""
89
 
90
+ #: co-authors-plus.php:1408 co-authors-plus.php:1525
91
  msgid "Comment: "
92
  msgstr ""
93
 
94
+ #: co-authors-plus.php:1409
95
  msgid "You can see all comments on this post here: "
96
  msgstr ""
97
 
98
  #. translators: 1: blog name, 2: post title
99
+ #: co-authors-plus.php:1411
100
  msgid "[%1$s] Comment: \"%2$s\""
101
  msgstr ""
102
 
103
+ #: co-authors-plus.php:1413
104
  msgid "New trackback on your post \"%s\""
105
  msgstr ""
106
 
107
  #. translators: 1: website name, 2: author IP, 3: author domain
108
  #. translators: 1: comment author, 2: author IP, 3: author domain
109
+ #: co-authors-plus.php:1415 co-authors-plus.php:1424
110
  msgid "Website: %1$s (IP: %2$s , %3$s)"
111
  msgstr ""
112
 
113
+ #: co-authors-plus.php:1417 co-authors-plus.php:1426
114
  msgid "Excerpt: "
115
  msgstr ""
116
 
117
+ #: co-authors-plus.php:1418
118
  msgid "You can see all trackbacks on this post here: "
119
  msgstr ""
120
 
121
  #. translators: 1: blog name, 2: post title
122
+ #: co-authors-plus.php:1420
123
  msgid "[%1$s] Trackback: \"%2$s\""
124
  msgstr ""
125
 
126
+ #: co-authors-plus.php:1422
127
  msgid "New pingback on your post \"%s\""
128
  msgstr ""
129
 
130
+ #: co-authors-plus.php:1427
131
  msgid "You can see all pingbacks on this post here: "
132
  msgstr ""
133
 
134
  #. translators: 1: blog name, 2: post title
135
+ #: co-authors-plus.php:1429
136
  msgid "[%1$s] Pingback: \"%2$s\""
137
  msgstr ""
138
 
139
+ #: co-authors-plus.php:1432
140
  msgid "Permalink: %s"
141
  msgstr ""
142
 
143
+ #: co-authors-plus.php:1434 co-authors-plus.php:1531
144
  msgid "Trash it: %s"
145
  msgstr ""
146
 
147
+ #: co-authors-plus.php:1436 co-authors-plus.php:1533
148
  msgid "Delete it: %s"
149
  msgstr ""
150
 
151
+ #: co-authors-plus.php:1437 co-authors-plus.php:1534
152
  msgid "Spam it: %s"
153
  msgstr ""
154
 
155
+ #: co-authors-plus.php:1505
156
  msgid "A new trackback on the post \"%s\" is waiting for your approval"
157
  msgstr ""
158
 
159
+ #: co-authors-plus.php:1507 co-authors-plus.php:1514
160
  msgid "Website : %1$s (IP: %2$s , %3$s)"
161
  msgstr ""
162
 
163
+ #: co-authors-plus.php:1509
164
  msgid "Trackback excerpt: "
165
  msgstr ""
166
 
167
+ #: co-authors-plus.php:1512
168
  msgid "A new pingback on the post \"%s\" is waiting for your approval"
169
  msgstr ""
170
 
171
+ #: co-authors-plus.php:1516
172
  msgid "Pingback excerpt: "
173
  msgstr ""
174
 
175
+ #: co-authors-plus.php:1519
176
  msgid "A new comment on the post \"%s\" is waiting for your approval"
177
  msgstr ""
178
 
179
+ #: co-authors-plus.php:1529
180
  msgid "Approve it: %s"
181
  msgstr ""
182
 
183
+ #: co-authors-plus.php:1536
184
  msgid ""
185
  "Currently %s comment is waiting for approval. Please visit the moderation "
186
  "panel:"
190
  msgstr[0] ""
191
  msgstr[1] ""
192
 
193
+ #: co-authors-plus.php:1540
194
  msgid "[%1$s] Please moderate: \"%2$s\""
195
  msgstr ""
196
 
197
+ #: php/class-coauthors-guest-authors.php:80
198
  msgid "Guest Author"
199
  msgstr ""
200
 
201
+ #: php/class-coauthors-guest-authors.php:81
202
  msgid "Guest Authors"
203
  msgstr ""
204
 
205
+ #: php/class-coauthors-guest-authors.php:82
206
  msgid "All Guest Authors"
207
  msgstr ""
208
 
209
+ #: php/class-coauthors-guest-authors.php:83
210
  msgid "Add New Guest Author"
211
  msgstr ""
212
 
213
+ #: php/class-coauthors-guest-authors.php:84
214
  msgid "Edit Guest Author"
215
  msgstr ""
216
 
217
+ #: php/class-coauthors-guest-authors.php:85
218
  msgid "New Guest Author"
219
  msgstr ""
220
 
221
+ #: php/class-coauthors-guest-authors.php:86
222
  msgid "View Guest Author"
223
  msgstr ""
224
 
225
+ #: php/class-coauthors-guest-authors.php:87
226
  msgid "Search Guest Authors"
227
  msgstr ""
228
 
229
+ #: php/class-coauthors-guest-authors.php:88
230
  msgid "No guest authors found"
231
  msgstr ""
232
 
233
+ #: php/class-coauthors-guest-authors.php:89
234
  msgid "No guest authors found in Trash"
235
  msgstr ""
236
 
237
+ #: php/class-coauthors-guest-authors.php:90
238
  msgid "Update Guest Author"
239
  msgstr ""
240
 
241
+ #: php/class-coauthors-guest-authors.php:91
242
  msgid "About the guest author"
243
  msgstr ""
244
 
245
+ #: php/class-coauthors-guest-authors.php:100
246
+ msgctxt "guest author"
247
  msgid "Add New"
248
  msgstr ""
249
 
250
+ #: php/class-coauthors-guest-authors.php:156
251
+ #: php/class-coauthors-guest-authors.php:162
252
  msgid "Guest author updated. <a href=\"%s\">View profile</a>"
253
  msgstr ""
254
 
255
+ #: php/class-coauthors-guest-authors.php:157
256
  msgid "Custom field updated."
257
  msgstr ""
258
 
259
+ #: php/class-coauthors-guest-authors.php:158
260
  msgid "Custom field deleted."
261
  msgstr ""
262
 
263
+ #: php/class-coauthors-guest-authors.php:159
264
  msgid "Guest author updated."
265
  msgstr ""
266
 
267
  #. translators: %s: date and time of the revision
268
+ #: php/class-coauthors-guest-authors.php:161
269
  msgid "Guest author restored to revision from %s"
270
  msgstr ""
271
 
272
+ #: php/class-coauthors-guest-authors.php:163
273
  msgid "Guest author saved."
274
  msgstr ""
275
 
276
+ #: php/class-coauthors-guest-authors.php:164
277
  msgid ""
278
  "Guest author submitted. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
279
  msgstr ""
280
 
281
+ #: php/class-coauthors-guest-authors.php:165
282
  msgid ""
283
  "Guest author scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
284
  "\"%2$s\">Preview profile</a>"
285
  msgstr ""
286
 
287
  #. translators: Publish box date format, see http:php.net/date
288
+ #: php/class-coauthors-guest-authors.php:167
289
  msgid "M j, Y @ G:i"
290
  msgstr ""
291
 
292
+ #: php/class-coauthors-guest-authors.php:168
293
  msgid ""
294
  "Guest author updated. <a target=\"_blank\" href=\"%s\">Preview profile</a>"
295
  msgstr ""
296
 
297
+ #: php/class-coauthors-guest-authors.php:185
298
+ #: php/class-coauthors-guest-authors.php:218
299
+ #: php/class-coauthors-guest-authors.php:437
300
  msgid "Doin' something fishy, huh?"
301
  msgstr ""
302
 
303
+ #: php/class-coauthors-guest-authors.php:188
304
+ #: php/class-coauthors-guest-authors.php:222
305
  msgid "You don't have permission to perform this action."
306
  msgstr ""
307
 
308
+ #: php/class-coauthors-guest-authors.php:227
309
+ #: php/class-coauthors-guest-authors.php:442
310
  msgid "Guest author can't be deleted because it doesn't exist."
311
  msgstr ""
312
 
313
+ #: php/class-coauthors-guest-authors.php:241
314
  msgid "Co-author does not exists. Try again?"
315
  msgstr ""
316
 
317
+ #: php/class-coauthors-guest-authors.php:249
318
  msgid "Please make sure to pick an option."
319
  msgstr ""
320
 
321
+ #: php/class-coauthors-guest-authors.php:393
322
  msgid "Guest author deleted."
323
  msgstr ""
324
 
325
+ #: php/class-coauthors-guest-authors.php:417
326
  msgid "Save"
327
  msgstr ""
328
 
329
+ #: php/class-coauthors-guest-authors.php:418
330
  msgid "Unique Slug"
331
  msgstr ""
332
 
333
+ #: php/class-coauthors-guest-authors.php:420
334
  msgid "Name"
335
  msgstr ""
336
 
337
+ #: php/class-coauthors-guest-authors.php:421
338
  msgid "Contact Info"
339
  msgstr ""
340
 
341
+ #: php/class-coauthors-guest-authors.php:446
342
  msgid "Delete %s"
343
  msgstr ""
344
 
345
+ #: php/class-coauthors-guest-authors.php:447
346
  msgid "You have specified this guest author for deletion:"
347
  msgstr ""
348
 
349
+ #: php/class-coauthors-guest-authors.php:449
350
  msgid "What should be done with posts assigned to this guest author?"
351
  msgstr ""
352
 
353
+ #: php/class-coauthors-guest-authors.php:450
354
  msgid ""
355
  "Note: If you'd like to delete the guest author and all of their posts, you "
356
  "should delete their posts first and then come back to delete the guest "
357
  "author."
358
  msgstr ""
359
 
360
+ #: php/class-coauthors-guest-authors.php:459
361
  msgid "Reassign to another co-author:"
362
  msgstr ""
363
 
364
+ #: php/class-coauthors-guest-authors.php:465
365
  msgid "Leave posts assigned to the mapped user, %s."
366
  msgstr ""
367
 
368
+ #: php/class-coauthors-guest-authors.php:470
369
  msgid "Remove byline from posts (but leave each post in its current status)."
370
  msgstr ""
371
 
372
+ #: php/class-coauthors-guest-authors.php:473
373
  msgid "Confirm Deletion"
374
  msgstr ""
375
 
376
+ #: php/class-coauthors-guest-authors.php:482
377
  msgid "Add New"
378
  msgstr ""
379
 
380
+ #: php/class-coauthors-guest-authors.php:543
381
  msgid "WordPress User Mapping"
382
  msgstr ""
383
 
384
+ #: php/class-coauthors-guest-authors.php:545
385
  msgid "-- Not mapped --"
386
  msgstr ""
387
 
388
+ #: php/class-coauthors-guest-authors.php:679
389
+ #: php/class-coauthors-guest-authors.php:688
390
  msgid "Guest authors cannot be created without display names."
391
  msgstr ""
392
 
393
+ #: php/class-coauthors-guest-authors.php:697
394
  msgid ""
395
  "Guest authors cannot be created with the same user_login value as a user. "
396
+ "Try creating a profile from the user on the Manage Users listing instead."
397
  msgstr ""
398
 
399
+ #: php/class-coauthors-guest-authors.php:702
400
  msgid "Display name conflicts with another guest author display name."
401
  msgstr ""
402
 
403
+ #: php/class-coauthors-guest-authors.php:896
404
  msgid "ID"
405
  msgstr ""
406
 
407
+ #: php/class-coauthors-guest-authors.php:903
408
  #: php/class-coauthors-wp-list-table.php:143
409
  msgid "Display Name"
410
  msgstr ""
411
 
412
+ #: php/class-coauthors-guest-authors.php:909
413
  #: php/class-coauthors-wp-list-table.php:144
414
  msgid "First Name"
415
  msgstr ""
416
 
417
+ #: php/class-coauthors-guest-authors.php:914
418
  #: php/class-coauthors-wp-list-table.php:145
419
  msgid "Last Name"
420
  msgstr ""
421
 
422
+ #: php/class-coauthors-guest-authors.php:919
423
  msgid "Slug"
424
  msgstr ""
425
 
426
+ #: php/class-coauthors-guest-authors.php:926
427
  #: php/class-coauthors-wp-list-table.php:146
428
  msgid "E-mail"
429
  msgstr ""
430
 
431
+ #: php/class-coauthors-guest-authors.php:932
432
  #: php/class-coauthors-wp-list-table.php:147
433
  msgid "Linked Account"
434
  msgstr ""
435
 
436
+ #: php/class-coauthors-guest-authors.php:937
437
  msgid "Website"
438
  msgstr ""
439
 
440
+ #: php/class-coauthors-guest-authors.php:943
441
  msgid "AIM"
442
  msgstr ""
443
 
444
+ #: php/class-coauthors-guest-authors.php:948
445
  msgid "Yahoo IM"
446
  msgstr ""
447
 
448
+ #: php/class-coauthors-guest-authors.php:953
449
  msgid "Jabber / Google Talk"
450
  msgstr ""
451
 
452
+ #: php/class-coauthors-guest-authors.php:958
453
  msgid "Biographical Info"
454
  msgstr ""
455
 
456
+ #: php/class-coauthors-guest-authors.php:1122
457
  msgid "%s is a required field"
458
  msgstr ""
459
 
460
+ #: php/class-coauthors-guest-authors.php:1128
461
  msgid "user_login cannot duplicate existing guest author or mapped user"
462
  msgstr ""
463
 
464
+ #: php/class-coauthors-guest-authors.php:1173
465
  msgid "Guest author does not exist"
466
  msgstr ""
467
 
468
+ #: php/class-coauthors-guest-authors.php:1185
469
  msgid "Reassignment co-author does not exist"
470
  msgstr ""
471
 
472
+ #: php/class-coauthors-guest-authors.php:1217
473
  msgid "No user exists with that ID"
474
  msgstr ""
475
 
476
+ #: php/class-coauthors-guest-authors.php:1275
477
  msgid "Edit Profile"
478
  msgstr ""
479
 
480
+ #: php/class-coauthors-guest-authors.php:1284
481
  msgid "Create Profile"
482
  msgstr ""
483
 
505
  msgid "No matching guest authors were found."
506
  msgstr ""
507
 
508
+ #: php/class-coauthors-wp-list-table.php:215
509
  msgid "Delete"
510
  msgstr ""
511
 
512
+ #: php/class-coauthors-wp-list-table.php:217
513
  msgid "View Posts"
514
  msgstr ""
515
 
516
+ #: php/class-coauthors-wp-list-table.php:267
517
  msgid "Filter"
518
  msgstr ""
519
 
520
+ #: php/class-wp-cli.php:220
521
  msgid "Please specify a valid user_login"
522
  msgstr ""
523
 
524
+ #: php/class-wp-cli.php:223
525
  msgid "Please specify a valid co-author login"
526
  msgstr ""
527
 
528
+ #: php/class-wp-cli.php:230
529
  msgid "Skipping - Post #%d already has co-authors assigned: %s"
530
  msgstr ""
531
 
532
+ #: php/class-wp-cli.php:235
533
  msgid "Updating - Adding %s's byline to post #%d"
534
  msgstr ""
535
 
536
+ #: php/class-wp-cli.php:240
537
  msgid "All done! %d posts were affected."
538
  msgstr ""
539
 
540
+ #: template-tags.php:79
541
  msgid ""
542
  "No post ID provided for CoAuthorsIterator constructor. Are you not in a loop "
543
  "or is $post not set?"
544
  msgstr ""
545
 
546
+ #: template-tags.php:133
547
  msgid " and "
548
  msgstr ""
549
 
550
+ #: template-tags.php:233 template-tags.php:468
551
  msgid "Posts by %s"
552
  msgstr ""
553
 
554
+ #: template-tags.php:350
555
  msgid "Visit %s&#8217;s website"
556
  msgstr ""
557
 
php/class-coauthors-guest-authors.php CHANGED
@@ -46,6 +46,9 @@ class CoAuthors_Guest_Authors
46
  // Filter author links and such
47
  add_filter( 'author_link', array( $this, 'filter_author_link' ), 10, 3 );
48
 
 
 
 
49
  // Validate new guest authors
50
  add_filter( 'wp_insert_post_empty_content', array( $this, 'filter_wp_insert_post_empty_content' ), 10, 2 );
51
 
@@ -94,7 +97,7 @@ class CoAuthors_Guest_Authors
94
  'labels' => array(
95
  'name' => $this->labels['plural'],
96
  'singular_name' => $this->labels['singular'],
97
- 'add_new' => _x( 'Add New', 'co-authors-plus' ),
98
  'all_items' => $this->labels['all_items'],
99
  'add_new_item' => $this->labels['add_new_item'],
100
  'edit_item' => $this->labels['edit_item'],
@@ -578,7 +581,19 @@ class CoAuthors_Guest_Authors
578
  echo '<tr><th>';
579
  echo '<label for="' . esc_attr( $pm_key ) . '">' . $field['label'] . '</label>';
580
  echo '</th><td>';
581
- echo '<input type="text" name="' . esc_attr( $pm_key ) . '" value="' . esc_attr( $value ) . '" class="regular-text" />';
 
 
 
 
 
 
 
 
 
 
 
 
582
  echo '</td></tr>';
583
  }
584
  echo '</tbody></table>';
@@ -601,7 +616,20 @@ class CoAuthors_Guest_Authors
601
  echo '<tr><th>';
602
  echo '<label for="' . esc_attr( $pm_key ) . '">' . $field['label'] . '</label>';
603
  echo '</th><td>';
604
- echo '<input type="text" name="' . esc_attr( $pm_key ) . '" value="' . esc_attr( $value ) . '" class="regular-text" />';
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  echo '</td></tr>';
606
  }
607
  echo '</tbody></table>';
@@ -646,7 +674,12 @@ class CoAuthors_Guest_Authors
646
  if ( !isset( $_POST['guest-author-nonce'] ) || !wp_verify_nonce( $_POST['guest-author-nonce'], 'guest-author-nonce' ) )
647
  return $post_data;
648
 
 
 
 
 
649
  $post_data['post_title'] = sanitize_text_field( $_POST['cap-display_name'] );
 
650
  $slug = sanitize_title( get_post_meta( $original_args['ID'], $this->get_post_meta_key( 'user_login' ), true ) );
651
  if ( ! $slug )
652
  $slug = sanitize_title( $_POST['cap-display_name'] );
@@ -862,6 +895,7 @@ class CoAuthors_Guest_Authors
862
  'key' => 'ID',
863
  'label' => __( 'ID', 'co-authors-plus' ),
864
  'group' => 'hidden',
 
865
  ),
866
  // Name
867
  array(
@@ -891,6 +925,7 @@ class CoAuthors_Guest_Authors
891
  'key' => 'user_email',
892
  'label' => __( 'E-mail', 'co-authors-plus' ),
893
  'group' => 'contact-info',
 
894
  ),
895
  array(
896
  'key' => 'linked_account',
@@ -901,6 +936,7 @@ class CoAuthors_Guest_Authors
901
  'key' => 'website',
902
  'label' => __( 'Website', 'co-authors-plus' ),
903
  'group' => 'contact-info',
 
904
  ),
905
  array(
906
  'key' => 'aim',
@@ -1229,7 +1265,8 @@ class CoAuthors_Guest_Authors
1229
  */
1230
  function filter_user_row_actions( $actions, $user_object ) {
1231
 
1232
- if ( ! current_user_can( $this->list_guest_authors_cap ) )
 
1233
  return $actions;
1234
 
1235
  $new_actions = array();
@@ -1243,7 +1280,9 @@ class CoAuthors_Guest_Authors
1243
  'nonce' => wp_create_nonce( 'create-guest-author' ),
1244
  );
1245
  $create_guest_author_link = add_query_arg( $query_args, admin_url( $this->parent_page ) );
1246
- $new_actions['create-guest-author'] = '<a href="' . esc_url( $create_guest_author_link ) . '">' . __( 'Create Profile', 'co-authors-plus' ) . '</a>';
 
 
1247
  }
1248
 
1249
  return $new_actions + $actions;
@@ -1299,4 +1338,44 @@ class CoAuthors_Guest_Authors
1299
 
1300
  }
1301
 
1302
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  // Filter author links and such
47
  add_filter( 'author_link', array( $this, 'filter_author_link' ), 10, 3 );
48
 
49
+ // Over-ride the author feed
50
+ add_filter( 'author_feed_link', array( $this, 'filter_author_feed_link' ), 10, 2 );
51
+
52
  // Validate new guest authors
53
  add_filter( 'wp_insert_post_empty_content', array( $this, 'filter_wp_insert_post_empty_content' ), 10, 2 );
54
 
97
  'labels' => array(
98
  'name' => $this->labels['plural'],
99
  'singular_name' => $this->labels['singular'],
100
+ 'add_new' => _x( 'Add New', 'guest author', 'co-authors-plus' ),
101
  'all_items' => $this->labels['all_items'],
102
  'add_new_item' => $this->labels['add_new_item'],
103
  'edit_item' => $this->labels['edit_item'],
581
  echo '<tr><th>';
582
  echo '<label for="' . esc_attr( $pm_key ) . '">' . $field['label'] . '</label>';
583
  echo '</th><td>';
584
+
585
+ if( !isset( $field['input'] ) ) {
586
+ $field['input'] = "text";
587
+ }
588
+ $field['input'] = apply_filters( 'coauthors_name_field_type_'. $pm_key , $field['input'] );
589
+ switch( $field['input'] ) {
590
+ case "checkbox":
591
+ echo '<input type="checkbox" name="' . esc_attr( $pm_key ) . '"'. checked( '1', $value, false ) .' value="1"/>';
592
+ break;
593
+ default:
594
+ echo '<input type="'. esc_attr( $field['input'] ) .'" name="' . esc_attr( $pm_key ) . '" value="' . esc_attr( $value ) . '" class="regular-text" />';
595
+ break;
596
+ }
597
  echo '</td></tr>';
598
  }
599
  echo '</tbody></table>';
616
  echo '<tr><th>';
617
  echo '<label for="' . esc_attr( $pm_key ) . '">' . $field['label'] . '</label>';
618
  echo '</th><td>';
619
+
620
+ if( !isset( $field['input'] ) ) {
621
+ $field['input'] = "text";
622
+ }
623
+ $field['input'] = apply_filters( 'coauthors_name_field_type_'. $pm_key , $field['input'] );
624
+ switch( $field['input'] ) {
625
+ case "checkbox":
626
+ echo '<input type="checkbox" name="' . esc_attr( $pm_key ) . '"'. checked( '1', $value, false ) .' value="1"/>';
627
+ break;
628
+ default:
629
+ echo '<input type="'. esc_attr( $field['input'] ) .'" name="' . esc_attr( $pm_key ) . '" value="' . esc_attr( $value ) . '" class="regular-text" />';
630
+ break;
631
+ }
632
+
633
  echo '</td></tr>';
634
  }
635
  echo '</tbody></table>';
674
  if ( !isset( $_POST['guest-author-nonce'] ) || !wp_verify_nonce( $_POST['guest-author-nonce'], 'guest-author-nonce' ) )
675
  return $post_data;
676
 
677
+ // Validate the display name
678
+ if ( empty( $_POST['cap-display_name'] ) ) {
679
+ wp_die( __( 'Guest authors cannot be created without display names.', 'co-authors-plus' ) );
680
+ }
681
  $post_data['post_title'] = sanitize_text_field( $_POST['cap-display_name'] );
682
+
683
  $slug = sanitize_title( get_post_meta( $original_args['ID'], $this->get_post_meta_key( 'user_login' ), true ) );
684
  if ( ! $slug )
685
  $slug = sanitize_title( $_POST['cap-display_name'] );
895
  'key' => 'ID',
896
  'label' => __( 'ID', 'co-authors-plus' ),
897
  'group' => 'hidden',
898
+ 'input' => 'hidden',
899
  ),
900
  // Name
901
  array(
925
  'key' => 'user_email',
926
  'label' => __( 'E-mail', 'co-authors-plus' ),
927
  'group' => 'contact-info',
928
+ 'input' => 'email',
929
  ),
930
  array(
931
  'key' => 'linked_account',
936
  'key' => 'website',
937
  'label' => __( 'Website', 'co-authors-plus' ),
938
  'group' => 'contact-info',
939
+ 'input' => 'url',
940
  ),
941
  array(
942
  'key' => 'aim',
1265
  */
1266
  function filter_user_row_actions( $actions, $user_object ) {
1267
 
1268
+ if ( ! current_user_can( $this->list_guest_authors_cap )
1269
+ || is_network_admin() )
1270
  return $actions;
1271
 
1272
  $new_actions = array();
1280
  'nonce' => wp_create_nonce( 'create-guest-author' ),
1281
  );
1282
  $create_guest_author_link = add_query_arg( $query_args, admin_url( $this->parent_page ) );
1283
+ if ( apply_filters( 'coauthors_show_create_profile_user_link', false ) ) {
1284
+ $new_actions['create-guest-author'] = '<a href="' . esc_url( $create_guest_author_link ) . '">' . __( 'Create Profile', 'co-authors-plus' ) . '</a>';
1285
+ }
1286
  }
1287
 
1288
  return $new_actions + $actions;
1338
 
1339
  }
1340
 
1341
+ /**
1342
+ * Filter Author Feed Link for non native authors
1343
+ *
1344
+ * @since 3.1
1345
+ *
1346
+ * @param string $feed_link Required. Original feed link for the author.
1347
+ * @param string $feed Required. Type of feed being generated.
1348
+ * @return string Feed link for the author updated, if needs to be
1349
+ */
1350
+ public function filter_author_feed_link( $feed_link, $feed ) {
1351
+ if ( ! is_author() ) {
1352
+ return $feed_link;
1353
+ }
1354
+
1355
+ // Get author, then check if author is guest-author because
1356
+ // that's the only type that will need to be adjusted
1357
+ $author = get_queried_object();
1358
+ if ( empty ( $author ) || 'guest-author' != $author->type ) {
1359
+ return $feed_link;
1360
+ }
1361
+
1362
+ // The next section is similar to
1363
+ // get_author_feed_link() in wp-includes/link-template.php
1364
+ $permalink_structure = get_option('permalink_structure');
1365
+
1366
+ if ( empty( $feed ) ) {
1367
+ $feed = get_default_feed();
1368
+ }
1369
+
1370
+ if ( '' == $permalink_structure ) {
1371
+ $link = home_url( "?feed=$feed&amp;author=" . $author->ID );
1372
+ } else {
1373
+ $link = get_author_posts_url( $author->ID );
1374
+ $feed_link = ( $feed == get_default_feed() ) ? 'feed' : "feed/$feed";
1375
+ $link = trailingslashit($link) . user_trailingslashit($feed_link, 'feed');
1376
+ }
1377
+
1378
+ return $link;
1379
+ }
1380
+
1381
+ }
php/class-coauthors-wp-list-table.php CHANGED
@@ -201,12 +201,19 @@ class CoAuthors_WP_List_Table extends WP_List_Table {
201
 
202
  $output .= coauthors_get_avatar( $item, 32 );
203
 
204
- // @todo caps check to see whether the user can edit. Otherwise, just show the name
205
- $output .= '<a href="' . esc_url( $item_edit_link ) . '">' . esc_html( $item->display_name ) . '</a>';
 
 
 
206
 
207
  $actions = array();
208
- $actions['edit'] = '<a href="' . esc_url( $item_edit_link ) . '">' . __( 'Edit', 'co-authors-plus' ) . '</a>';
209
- $actions['delete'] = '<a href="' . esc_url( $item_delete_link ) . '">' . __( 'Delete', 'co-authors-plus' ) . '</a>';
 
 
 
 
210
  $actions['view'] = '<a href="' . esc_url( $item_view_link ) . '">' . __( 'View Posts', 'co-authors-plus' ) . '</a>';
211
  $actions = apply_filters( 'coauthors_guest_author_row_actions', $actions, $item );
212
  $output .= $this->row_actions( $actions, false );
201
 
202
  $output .= coauthors_get_avatar( $item, 32 );
203
 
204
+ if ( current_user_can( 'edit_post', $item->ID ) ) {
205
+ $output .= '<a href="' . esc_url( $item_edit_link ) . '">' . esc_html( $item->display_name ) . '</a>';
206
+ } else {
207
+ $output .= esc_html( $item->display_name );
208
+ }
209
 
210
  $actions = array();
211
+ if ( current_user_can( 'edit_post', $item->ID ) ) {
212
+ $actions['edit'] = '<a href="' . esc_url( $item_edit_link ) . '">' . __( 'Edit', 'co-authors-plus' ) . '</a>';
213
+ }
214
+ if ( current_user_can( 'delete_post', $item->ID ) ) {
215
+ $actions['delete'] = '<a href="' . esc_url( $item_delete_link ) . '">' . __( 'Delete', 'co-authors-plus' ) . '</a>';
216
+ }
217
  $actions['view'] = '<a href="' . esc_url( $item_view_link ) . '">' . __( 'View Posts', 'co-authors-plus' ) . '</a>';
218
  $actions = apply_filters( 'coauthors_guest_author_row_actions', $actions, $item );
219
  $output .= $this->row_actions( $actions, false );
phpunit.xml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <phpunit
2
+ bootstrap="tests/bootstrap.php"
3
+ backupGlobals="false"
4
+ colors="true"
5
+ convertErrorsToExceptions="true"
6
+ convertNoticesToExceptions="true"
7
+ convertWarningsToExceptions="true"
8
+ >
9
+ <php>
10
+ <const name="WP_TESTS_MULTISITE" value="1" />
11
+ </php>
12
+ <testsuites>
13
+ <testsuite>
14
+ <directory prefix="test-" suffix=".php">./tests/</directory>
15
+ </testsuite>
16
+ </testsuites>
17
+ </phpunit>
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: batmoo, danielbachhuber, automattic
3
  Tags: authors, users, multiple authors, coauthors, multi-author, publishing
4
  Tested up to: 3.8.1
5
- Requires at least: 3.3
6
- Stable tag: 3.0.7
7
 
8
  Assign multiple bylines to posts, pages, and custom post types via a search-as-you-type input box
9
 
@@ -43,6 +43,9 @@ Yep! There's a template tag called `coauthors_wp_list_authors()` that accepts ma
43
 
44
  == Upgrade Notice ==
45
 
 
 
 
46
  = 3.0.7 =
47
  Support for symlink installations, updated French translation, bug fixes.
48
 
@@ -54,6 +57,19 @@ Bug fixes and minor enhancements
54
 
55
  == Changelog ==
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  = 3.0.7 (Jan. 27, 2014) =
58
  * Better support for installing Co-Authors Plus as a symlinked directory. [Follow these instructions](http://kaspars.net/blog/wordpress/plugins-via-symlinks) to filter `plugins_url`.
59
  * Links to authors' posts pages to comply to hCard microformat, which Google depends on.
2
  Contributors: batmoo, danielbachhuber, automattic
3
  Tags: authors, users, multiple authors, coauthors, multi-author, publishing
4
  Tested up to: 3.8.1
5
+ Requires at least: 3.7
6
+ Stable tag: 3.1
7
 
8
  Assign multiple bylines to posts, pages, and custom post types via a search-as-you-type input box
9
 
43
 
44
  == Upgrade Notice ==
45
 
46
+ = 3.1 =
47
+ Manage co-authors from quick edit, Jetpack Open Graph support, bug fixes.
48
+
49
  = 3.0.7 =
50
  Support for symlink installations, updated French translation, bug fixes.
51
 
57
 
58
  == Changelog ==
59
 
60
+ = 3.1 (Mar. 17, 2014) =
61
+ * Manage co-authors from Quick Edit. Props [mpatek](https://github.com/mpatek).
62
+ * Updated Spanish translation, courtesy of [sergiomajluf](https://github.com/sergiomajluf).
63
+ * Now matches core behavior when displaying author archive on multisite: user of the blog, or previously published author on the blog.
64
+ * Breaking change: "Create Profile" link is no longer shown by default on the Manage Users screen. Instead, it can be enabled with the `coauthors_show_create_profile_user_link` filter.
65
+ * Guest authors work properly with Jetpack Open Graph tags. Props [hibernation](https://github.com/hibernation).
66
+ * Guest author profile editor now supports a few different fields. Props [alpha1](https://github.com/alpha1).
67
+ * New `coauthors_count_published_post_types` filter for specifying the post type(s) used when calculating the user's number of published posts.
68
+ * Bug fix: Ensure `post_author` is set to one of the co-authors assigned to a post.
69
+ * Bug fix: Filter author feed link for guest authors on the author page. Props [hibernation](https://github.com/hibernation).
70
+ * Packages a composer.json file for those using Composer.
71
+ * Beginnings of unit test coverage for core features. Increased minimum required WordPress version to 3.7 because WordPress.org unit testing framework doesn't work reliabilty below that.
72
+
73
  = 3.0.7 (Jan. 27, 2014) =
74
  * Better support for installing Co-Authors Plus as a symlinked directory. [Follow these instructions](http://kaspars.net/blog/wordpress/plugins-via-symlinks) to filter `plugins_url`.
75
  * Links to authors' posts pages to comply to hCard microformat, which Google depends on.
tests/bootstrap.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $_tests_dir = getenv('WP_TESTS_DIR');
4
+ if ( !$_tests_dir ) $_tests_dir = '/tmp/wordpress-tests-lib';
5
+
6
+ require_once $_tests_dir . '/includes/functions.php';
7
+
8
+ function _manually_load_plugin() {
9
+ require dirname( __FILE__ ) . '/../co-authors-plus.php';
10
+ }
11
+ tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
12
+
13
+ require $_tests_dir . '/includes/bootstrap.php';
14
+
15
+ require dirname( __FILE__ ) . '/coauthorsplus-testcase.php';
tests/coauthorsplus-testcase.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Base unit test class for Co-Authors Plus
5
+ */
6
+
7
+ class CoAuthorsPlus_TestCase extends WP_UnitTestCase {
8
+
9
+ protected $suppress = false;
10
+
11
+ public function setUp() {
12
+ global $wpdb;
13
+ parent::setUp();
14
+ $this->suppress = $wpdb->suppress_errors();
15
+
16
+ $_SERVER['REMOTE_ADDR'] = '';
17
+
18
+ $this->author1 = $this->factory->user->create( array( 'role' => 'author', 'user_login' => 'author1' ) );
19
+ $this->editor1 = $this->factory->user->create( array( 'role' => 'editor', 'user_login' => 'editor2' ) );
20
+
21
+ $post = array(
22
+ 'post_author' => $this->author1,
23
+ 'post_status' => 'publish',
24
+ 'post_content' => rand_str(),
25
+ 'post_title' => rand_str(),
26
+ 'post_type' => 'post',
27
+ );
28
+
29
+ $this->author1_post1 = wp_insert_post( $post );
30
+
31
+ $post = array(
32
+ 'post_author' => $this->author1,
33
+ 'post_status' => 'publish',
34
+ 'post_content' => rand_str(),
35
+ 'post_title' => rand_str(),
36
+ 'post_type' => 'post',
37
+ );
38
+
39
+ $this->author1_post2 = wp_insert_post( $post );
40
+
41
+ $page = array(
42
+ 'post_author' => $this->author1,
43
+ 'post_status' => 'publish',
44
+ 'post_content' => rand_str(),
45
+ 'post_title' => rand_str(),
46
+ 'post_type' => 'page',
47
+ );
48
+
49
+ $this->author1_page1 = wp_insert_post( $page );
50
+
51
+ $page = array(
52
+ 'post_author' => $this->author1,
53
+ 'post_status' => 'publish',
54
+ 'post_content' => rand_str(),
55
+ 'post_title' => rand_str(),
56
+ 'post_type' => 'page',
57
+ );
58
+
59
+ $this->author1_page2 = wp_insert_post( $page );
60
+ }
61
+
62
+ public function tearDown() {
63
+ global $wpdb;
64
+ parent::tearDown();
65
+ $wpdb->suppress_errors( $this->suppress );
66
+ }
67
+
68
+ }
tests/test-author-queries.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Test Co-Authors Plus' modifications of author queries
4
+ */
5
+
6
+ class Test_Author_Queries extends CoAuthorsPlus_TestCase {
7
+
8
+ /**
9
+ * On author pages, the queried object should only be set
10
+ * to a user that's not a member of the blog if they
11
+ * have at least one published post. This matches core behavior.
12
+ *
13
+ * @see https://core.trac.wordpress.org/changeset/27290
14
+ */
15
+ function test_author_queried_object_fix() {
16
+ global $wp_rewrite, $coauthors_plus;
17
+
18
+ /**
19
+ * Set up
20
+ */
21
+ $author1 = $this->factory->user->create( array( 'user_login' => 'msauthor1' ) );
22
+ $author2 = $this->factory->user->create( array( 'user_login' => 'msauthor2' ) );
23
+ $blog2 = $this->factory->blog->create( array( 'user_id' => $author1 ) );
24
+
25
+ switch_to_blog( $blog2 );
26
+ $wp_rewrite->init();
27
+
28
+ $blog2_post1 = $this->factory->post->create( array(
29
+ 'post_status' => 'publish',
30
+ 'post_content' => rand_str(),
31
+ 'post_title' => rand_str(),
32
+ 'post_author' => $author1,
33
+ ) );
34
+
35
+ /**
36
+ * Author 1 is an author on the blog
37
+ */
38
+ $this->go_to( get_author_posts_url( $author1 ) );
39
+ $this->assertQueryTrue( 'is_author', 'is_archive' );
40
+
41
+ /**
42
+ * Author 2 is not yet an author on the blog
43
+ */
44
+ $this->go_to( get_author_posts_url( $author2 ) );
45
+ $this->assertQueryTrue( 'is_404' );
46
+
47
+ // Add the user to the blog
48
+ add_user_to_blog( $blog2, $author2, 'author' );
49
+
50
+ /**
51
+ * Author 2 is now on the blog, but not yet published
52
+ */
53
+ $this->go_to( get_author_posts_url( $author2 ) );
54
+ $this->assertQueryTrue( 'is_author', 'is_archive' );
55
+
56
+ // Add the user as an author on the original post
57
+ $author2_obj = get_user_by( 'id', $author2 );
58
+ $coauthors_plus->add_coauthors( $blog2_post1, array( $author2_obj->user_login ), true );
59
+
60
+ /**
61
+ * Author 2 is now on the blog, and published
62
+ */
63
+ $this->go_to( get_author_posts_url( $author2 ) );
64
+ $this->assertQueryTrue( 'is_author', 'is_archive' );
65
+
66
+ // Remove the user from the blog
67
+ remove_user_from_blog( $author2, $blog2 );
68
+
69
+ /**
70
+ * Author 2 was removed from the blog, but still a published author
71
+ */
72
+ $this->go_to( get_author_posts_url( $author2 ) );
73
+ $this->assertQueryTrue( 'is_author', 'is_archive' );
74
+
75
+ // Delete the user from the network
76
+ wpmu_delete_user( $author2 );
77
+
78
+ /**
79
+ * Author 2 is no more
80
+ */
81
+ $this->go_to( get_author_posts_url( $author2 ) );
82
+ $this->assertQueryTrue( 'is_404' );
83
+ $this->assertEquals( false, get_user_by( 'id', $author2 ) );
84
+
85
+ restore_current_blog();
86
+
87
+ }
88
+
89
+ }
tests/test-manage-coauthors.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Test_Manage_CoAuthors extends CoAuthorsPlus_TestCase {
4
+
5
+ /**
6
+ * Test assigning a Co-Author to a post
7
+ */
8
+ public function test_add_coauthor_to_post() {
9
+ global $coauthors_plus;
10
+
11
+ $coauthors = get_coauthors( $this->author1_post1 );
12
+ $this->assertEquals( 1, count( $coauthors ) );
13
+
14
+ // append = true, should preserve order
15
+ $editor1 = get_user_by( 'id', $this->editor1 );
16
+ $coauthors_plus->add_coauthors( $this->author1_post1, array( $editor1->user_login ), true );
17
+ $coauthors = get_coauthors( $this->author1_post1 );
18
+ $this->assertEquals( array( $this->author1, $this->editor1 ), wp_list_pluck( $coauthors, 'ID' ) );
19
+
20
+ // append = false, overrides existing authors
21
+ $coauthors_plus->add_coauthors( $this->author1_post1, array( $editor1->user_login ), false );
22
+ $coauthors = get_coauthors( $this->author1_post1 );
23
+ $this->assertEquals( array( $this->editor1 ), wp_list_pluck( $coauthors, 'ID' ) );
24
+
25
+ }
26
+
27
+ /**
28
+ * When a co-author is assigned to a post, the post author value
29
+ * should be set appropriately
30
+ *
31
+ * @see https://github.com/Automattic/Co-Authors-Plus/issues/140
32
+ */
33
+ public function test_add_coauthor_updates_post_author() {
34
+ global $coauthors_plus;
35
+
36
+ // append = true, preserves existing post_author
37
+ $editor1 = get_user_by( 'id', $this->editor1 );
38
+ $coauthors_plus->add_coauthors( $this->author1_post1, array( $editor1->user_login ), true );
39
+ $this->assertEquals( $this->author1, get_post( $this->author1_post1 )->post_author );
40
+
41
+ // append = false, overrides existing post_author
42
+ $coauthors_plus->add_coauthors( $this->author1_post1, array( $editor1->user_login ), false );
43
+ $this->assertEquals( $this->editor1, get_post( $this->author1_post1 )->post_author );
44
+
45
+ }
46
+
47
+ /**
48
+ * Post published count should default to 'post', but be filterable
49
+ *
50
+ * @see https://github.com/Automattic/Co-Authors-Plus/issues/170
51
+ */
52
+ public function test_post_publish_count_for_coauthor() {
53
+ global $coauthors_plus;
54
+
55
+ $editor1 = get_user_by( 'id', $this->editor1 );
56
+
57
+ /**
58
+ * Two published posts
59
+ */
60
+ $coauthors_plus->add_coauthors( $this->author1_post1, array( $editor1->user_login ) );
61
+ $coauthors_plus->add_coauthors( $this->author1_post2, array( $editor1->user_login ) );
62
+ $this->assertEquals( 2, count_user_posts( $editor1->ID ) );
63
+
64
+ /**
65
+ * One published page too, but no filter
66
+ */
67
+ $coauthors_plus->add_coauthors( $this->author1_page1, array( $editor1->user_login ) );
68
+ $this->assertEquals( 2, count_user_posts( $editor1->ID ) );
69
+
70
+ // Publish count to include posts and pages
71
+ $filter = function() {
72
+ return array( 'post', 'page' );
73
+ };
74
+ add_filter( 'coauthors_count_published_post_types', $filter );
75
+
76
+ /**
77
+ * Two published posts and pages
78
+ */
79
+ $coauthors_plus->add_coauthors( $this->author1_page2, array( $editor1->user_login ) );
80
+ $this->assertEquals( 4, count_user_posts( $editor1->ID ) );
81
+
82
+ // Publish count is just pages
83
+ remove_filter( 'coauthors_count_published_post_types', $filter );
84
+ $filter = function() {
85
+ return array( 'page' );
86
+ };
87
+ add_filter( 'coauthors_count_published_post_types', $filter );
88
+
89
+ /**
90
+ * Just one published page now for the editor
91
+ */
92
+ $author1 = get_user_by( 'id', $this->author1 );
93
+ $coauthors_plus->add_coauthors( $this->author1_page2, array( $author1->user_login ) );
94
+ $this->assertEquals( 1, count_user_posts( $editor1->ID ) );
95
+
96
+ }
97
+
98
+ }