Changeset 2735
- Timestamp:
- 03/11/2016 06:04:19 PM (9 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory
- Files:
-
- 1 added
- 4 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/class-customizations.php
r2659 r2735 11 11 12 12 /** 13 * Fetch the instance of the AdminCustomizations class.13 * Fetch the instance of the Customizations class. 14 14 */ 15 15 public static function instance() { … … 19 19 } 20 20 21 /** 22 * Constructor. 23 */ 21 24 private function __construct() { 22 25 // Admin Metaboxes … … 27 30 28 31 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); 29 add_action( 'wp_ajax_save-note', array( $this, 'save_note' ) ); 32 add_action( 'wp_ajax_replyto-comment', array( $this, 'save_custom_comment' ), 0 ); 33 34 add_filter( 'postbox_classes_plugin_internal-notes', array( $this, 'postbox_classes' ) ); 30 35 } 31 36 … … 33 38 * Adds the plugin name into the post editing title. 34 39 * 35 * @global $title The wp-admin title variable.40 * @global string $title The wp-admin title variable. 36 41 * 37 42 * @param string $post_type The post type of the current page … … 40 45 public function replace_title_global( $post_type ) { 41 46 global $title; 47 42 48 if ( 'plugin' === $post_type ) { 43 49 $title = sprintf( $title, get_the_title() ); // esc_html() on output … … 79 85 80 86 add_meta_box( 81 ' plugin-notes',87 'internal-notes', 82 88 __( 'Internal Notes', 'wporg-plugins' ), 83 array( __NAMESPACE__ . '\Metabox\ Notes', 'display' ),89 array( __NAMESPACE__ . '\Metabox\Internal_Notes', 'display' ), 84 90 'plugin', 'normal', 'high' 85 91 ); … … 127 133 128 134 /** 129 * Saves a plugin note. 130 */ 131 public function save_note() { 132 check_admin_referer( 'save-note', 'notce' ); 133 134 if ( empty( $_POST['id'] ) ) { 135 wp_send_json_error( array( 'errorCode' => 'no_post_specified' ) ); 136 } 137 138 if ( ! current_user_can( 'review_plugin', absint( $_POST['id'] ) ) ) { 139 wp_send_json_error( array( 140 'error' => __( 'You do not have sufficient permissions to edit notes on this site.' ), 141 ) ); 142 } 143 144 update_post_meta( absint( $_POST['id'] ), 'note', wp_kses_post( $_POST['note'] ) ); 145 146 wp_send_json_success( array( 147 'note' => wpautop( wp_kses_post( $_POST['note'] ) ), 148 ) ); 135 * Filters the postbox classes for custom comment meta boxes. 136 * 137 * @param array $classes An array of postbox classes. 138 * @return array 139 */ 140 public function postbox_classes( $classes ) { 141 $classes[] = 'comments-meta-box'; 142 143 return array_filter( $classes ); 144 } 145 146 /** 147 * Saves a comment that is not built-in. 148 * 149 * We pretty much have to replicate all of `wp_ajax_replyto_comment()` to be able to comment on draft posts. 150 */ 151 public function save_custom_comment() { 152 $comment_post_ID = (int) $_POST['comment_post_ID']; 153 $post = get_post( $comment_post_ID ); 154 155 if ( 'plugin' !== $post->post_type ) { 156 return; 157 } 158 remove_action( 'wp_ajax_replyto-comment', 'wp_ajax_replyto_comment', 1 ); 159 160 global $wp_list_table; 161 if ( empty( $action ) ) { 162 $action = 'replyto-comment'; 163 } 164 165 check_ajax_referer( $action, '_ajax_nonce-replyto-comment' ); 166 167 if ( ! $post ) { 168 wp_die( - 1 ); 169 } 170 171 if ( ! current_user_can( 'edit_post', $comment_post_ID ) ) { 172 wp_die( - 1 ); 173 } 174 175 if ( empty( $post->post_status ) ) { 176 wp_die( 1 ); 177 } 178 179 $user = wp_get_current_user(); 180 if ( ! $user->exists() ) { 181 wp_die( __( 'Sorry, you must be logged in to reply to a comment.' ) ); 182 } 183 184 $user_ID = $user->ID; 185 $comment_author = wp_slash( $user->display_name ); 186 $comment_author_email = wp_slash( $user->user_email ); 187 $comment_author_url = wp_slash( $user->user_url ); 188 $comment_content = trim( $_POST['content'] ); 189 $comment_type = isset( $_POST['comment_type'] ) ? trim( $_POST['comment_type'] ) : ''; 190 191 if ( current_user_can( 'unfiltered_html' ) ) { 192 if ( ! isset( $_POST['_wp_unfiltered_html_comment'] ) ) { 193 $_POST['_wp_unfiltered_html_comment'] = ''; 194 } 195 196 if ( wp_create_nonce( 'unfiltered-html-comment' ) != $_POST['_wp_unfiltered_html_comment'] ) { 197 kses_remove_filters(); // start with a clean slate 198 kses_init_filters(); // set up the filters 199 } 200 } 201 202 if ( '' == $comment_content ) { 203 wp_die( __( 'ERROR: please type a comment.' ) ); 204 } 205 206 $comment_parent = 0; 207 if ( isset( $_POST['comment_ID'] ) ) { 208 $comment_parent = absint( $_POST['comment_ID'] ); 209 } 210 $comment_auto_approved = false; 211 $comment_data = compact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID' ); 212 213 // Automatically approve parent comment. 214 if ( ! empty( $_POST['approve_parent'] ) ) { 215 $parent = get_comment( $comment_parent ); 216 217 if ( $parent && $parent->comment_approved === '0' && $parent->comment_post_ID == $comment_post_ID ) { 218 if ( ! current_user_can( 'edit_comment', $parent->comment_ID ) ) { 219 wp_die( - 1 ); 220 } 221 222 if ( wp_set_comment_status( $parent, 'approve' ) ) { 223 $comment_auto_approved = true; 224 } 225 } 226 } 227 228 $comment_id = wp_new_comment( $comment_data ); 229 $comment = get_comment( $comment_id ); 230 if ( ! $comment ) { 231 wp_die( 1 ); 232 } 233 234 $position = ( isset( $_POST['position'] ) && (int) $_POST['position'] ) ? (int) $_POST['position'] : '-1'; 235 236 ob_start(); 237 if ( isset( $_REQUEST['mode'] ) && 'dashboard' == $_REQUEST['mode'] ) { 238 require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); 239 _wp_dashboard_recent_comments_row( $comment ); 240 } else { 241 if ( isset( $_REQUEST['mode'] ) && 'single' == $_REQUEST['mode'] ) { 242 $wp_list_table = _get_list_table( 'WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); 243 } else { 244 $wp_list_table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); 245 } 246 $wp_list_table->single_row( $comment ); 247 } 248 $comment_list_item = ob_get_clean(); 249 250 $response = array( 251 'what' => 'comment', 252 'id' => $comment->comment_ID, 253 'data' => $comment_list_item, 254 'position' => $position 255 ); 256 257 $counts = wp_count_comments(); 258 $response['supplemental'] = array( 259 'in_moderation' => $counts->moderated, 260 'i18n_comments_text' => sprintf( 261 _n( '%s Comment', '%s Comments', $counts->approved ), 262 number_format_i18n( $counts->approved ) 263 ), 264 'i18n_moderation_text' => sprintf( 265 _nx( '%s in moderation', '%s in moderation', $counts->moderated, 'comments' ), 266 number_format_i18n( $counts->moderated ) 267 ) 268 ); 269 270 if ( $comment_auto_approved ) { 271 $response['supplemental']['parent_approved'] = $parent->comment_ID; 272 $response['supplemental']['parent_post_id'] = $parent->comment_post_ID; 273 } 274 275 $x = new \WP_Ajax_Response(); 276 $x->add( $response ); 277 $x->send(); 149 278 } 150 279 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/admin/metabox/class-internal-notes.php
r2734 r2735 1 1 <?php 2 2 namespace WordPressdotorg\Plugin_Directory\Admin\Metabox; 3 use WordPressdotorg\Plugin_Directory\ Tools;3 use WordPressdotorg\Plugin_Directory\Admin\Plugin_Comments_List_Table; 4 4 5 5 /** … … 8 8 * @package WordPressdotorg\Plugin_Directory\Admin\Metabox 9 9 */ 10 class Notes {10 class Internal_Notes { 11 11 12 12 /** 13 * 13 * Displays comment box for internal notes. 14 14 */ 15 static function display( $post ) { 16 $note = (string) get_post_meta( $post->ID, 'note', true ); 17 15 static function display() { 16 $wp_list_table = new Plugin_Comments_List_Table( array( 17 'comment_type' => 'internal-note', 18 ) ); 19 wp_nonce_field( 'get-comments', 'add_comment_nonce', false ); 18 20 ?> 19 <div class="view-note hide-if-no-js"> 20 <?php echo empty( $note ) ? __( 'Add note', 'wporg-plugins' ) : wpautop( $note ); ?> 21 </div> 22 <div class="edit-note show-if-no-js" style="display: none;"> 23 <?php wp_nonce_field( 'save-note', 'notce' ); ?> 24 <textarea class="note-content" rows="5" style="width: 100%;"><?php echo $note; ?></textarea> 25 <p> 26 <button type="button" class="button button-primary save-note"><?php _e( 'Save', 'wporg-plugins' ); ?></button> 27 <button type="reset" class="button button-secondary cancel-note"><?php _e( 'Cancel', 'wporg-plugins' ); ?></button> 28 </p> 29 </div> 21 <p class="hide-if-no-js" id="add-new-comment"> 22 <a class="button" href="#commentstatusdiv"><?php _e( 'Add note', 'wporg-plugins' ); ?></a> 23 </p> 30 24 <?php 25 $wp_list_table->display( true ); 26 wp_comment_trashnotice(); 31 27 } 32 28 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php
r2655 r2735 54 54 ), 55 55 'description' => __( 'A Repo Plugin', 'wporg-plugins' ), 56 'supports' => false,56 'supports' => array( 'comments' ), 57 57 'public' => true, 58 58 'show_ui' => true, -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/css/edit-form.css
r2659 r2735 58 58 0 0 2px 1px rgba(30, 140, 190, .8); 59 59 } 60 61 /* Comment meta boxes */ 62 .comments-meta-box #edithead .inside { 63 float: left; 64 padding: 3px 0 2px 5px; 65 margin: 0; 66 text-align: center; 67 } 68 69 .comments-meta-box.postbox .inside, 70 .comments-meta-box .column-comment p { 71 margin: 0; 72 padding: 0; 73 } 74 75 .comments-meta-box .inside .row-actions { 76 line-height:18px; 77 } 78 79 .comments-meta-box .inside .column-author *:not(strong) { 80 display: none; 81 } 82 83 .comments-meta-box #replyrow td { 84 padding: 0; 85 } 86 87 .comments-meta-box p { 88 padding: 8px 10px; 89 margin: 0; 90 } 91 92 .comments-meta-box .comments-box { 93 border: 0 none; 94 } 95 96 .comments-meta-box .comments-box thead th, 97 .comments-meta-box .comments-box thead td { 98 background: transparent; 99 padding: 0 7px 4px; 100 font-style: italic; 101 } 102 103 .comments-meta-box .comments-box tr:last-child td { 104 border-bottom: 0 none; 105 } 106 107 .comments-meta-box #edithead .inside input { 108 width: 160px; 109 } 110 111 @media screen and ( max-width: 782px ) { 112 .comments-meta-box .fixed .column-author { 113 display: none !important; 114 } 115 116 .comments-meta-box #edithead .inside { 117 float: none; 118 text-align: left; 119 padding: 3px 5px; 120 } 121 122 .comments-meta-box #edithead .inside input { 123 width: 100%; 124 } 125 } -
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/js/edit-form.js
r2659 r2735 4 4 5 5 ( function( $, wp ) { 6 7 6 var PluginEdit = { 8 $notesBox: {},9 7 $testedWith: {}, 10 8 $pluginStatus: {}, 11 9 12 10 ready: function() { 13 PluginEdit.$notesBox = $( '#plugin-notes' );14 11 PluginEdit.$testedWith = $( '#tested-with-select' ); 15 12 PluginEdit.$pluginStatus = $( '#plugin-status-select' ); … … 23 20 .on( 'click', '.cancel-plugin-status', PluginEdit.cancelPluginStatus ); 24 21 25 PluginEdit.$notesBox 26 .on( 'click', '.cancel-note', PluginEdit.showNote ) 27 .on( 'click', '.view-note', PluginEdit.editNote ) 28 .on( 'click', '.save-note', PluginEdit.saveNote ); 22 _.each( $( '#post-body' ).find( '.comments-box' ), PluginEdit.loadComments ); 23 24 $( '#add-new-comment' ).on( 'click', 'a.button', function( event ) { 25 event.preventDefault(); 26 27 window.commentReply && commentReply.addcomment( $( '#post_ID' ).val() ); 28 29 $( '#replyrow' ).find( '.comment-reply' ).append( $( '<input/>' ).attr({ 30 type: 'hidden', 31 name: 'comment_type', 32 value: $( '.comments-box' ).data( 'comment-type' ) 33 }) ); 34 } ); 29 35 }, 30 36 … … 67 73 }, 68 74 69 showNote: function() { 70 $( '.view-note', PluginEdit.$notesBox ).show(); 71 $( '.edit-note', PluginEdit.$notesBox ).hide(); 72 }, 75 loadComments: function ( element ) { 76 var $commentsList = $( element ), 77 data = { 78 _ajax_nonce: $( '#add_comment_nonce' ).val(), 79 p: $( '#post_ID' ).val(), 80 mode: 'single', 81 start: 0, 82 number: 20, 83 comment_type: $commentsList.data( 'comment-type' ) 84 }; 73 85 74 editNote: function() {75 var $textarea = $( '.note-content', PluginEdit.$notesBox);86 wp.ajax.post( 'get-comments', data ).always( function( response ) { 87 response = wpAjax.parseAjaxResponse( response ); 76 88 77 $( '.view-note', PluginEdit.$notesBox ).hide(); 78 $( '.edit-note', PluginEdit.$notesBox ).show(); 79 $textarea.text( $textarea.val() ).focus(); 80 }, 89 if ( 'object' == typeof response && response.responses[0] ) { 90 $commentsList.append( response.responses[0].data ).show(); 81 91 82 saveNote: function() { 83 wp.ajax.post( 'save-note', { 84 id: $( '#post_ID' ).val(), 85 note: $( '.note-content', PluginEdit.$notesBox ).val(), 86 notce: $( '#notce' ).val() 87 } ) 88 .done( function( response ) { 89 var note = response.note ? response.note : 'Add note'; 90 91 $( '.view-note', PluginEdit.$notesBox ).html( note ); 92 PluginEdit.showNote(); 93 } ); 92 $( 'a[className*=\':\']' ).unbind(); 93 } 94 } ); 94 95 } 95 96 };
Note: See TracChangeset
for help on using the changeset viewer.