Changeset 7754 for sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/user-content.php
- Timestamp:
- 10/19/2018 10:56:22 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/user-content.php
r7492 r7754 51 51 52 52 // Enable shortcodes for comments 53 add_filter( 'comment_text', 'do_shortcode' );53 add_filter( 'comment_text', 'do_shortcode' ); 54 54 55 55 // Customize allowed tags … … 68 68 add_action( 'edit_comment', array( __CLASS__, 'comment_edit_allowed_html' ) ); 69 69 70 // Adds hidden fields to a comment form for editing 71 add_filter( 'comment_form_submit_field', array( __CLASS__, 'add_hidden_fields' ), 10, 2 ); 70 72 } 71 73 … … 149 151 150 152 $allowed_protocols = array( 'http', 'https' ); 151 152 $comment_content = wp_kses( $comment_content, $allowed_html, $allowed_protocols ); 153 $commentdata['comment_content'] = preg_replace( '/\r?\n|\r/', '', $comment_content ); 153 $comment_content = wp_kses( $comment_content, $allowed_html, $allowed_protocols ); 154 155 // Replace newlines with a space. 156 $commentdata['comment_content'] = preg_replace( '/\r?\n|\r/', ' ', $comment_content ); 154 157 155 158 return $commentdata; … … 168 171 wp_enqueue_script( 'wporg-developer-user-notes-feedback', get_template_directory_uri() . '/js/user-notes-feedback.js', array( 'jquery', 'quicktags' ), '20180323', true ); 169 172 wp_localize_script( 'wporg-developer-user-notes-feedback', 'wporg_note_feedback', array( 170 'show' => __( 'Show Feedback', 'wporg' ),171 'hide' => __( 'Hide Feedback', 'wporg' ),173 'show' => __( 'Show Feedback', 'wporg' ), 174 'hide' => __( 'Hide Feedback', 'wporg' ), 172 175 ) ); 173 176 } … … 177 180 * Sets the default language for SyntaxHighlighter shortcode. 178 181 * 179 * @param 182 * @param array $atts Shortcode attributes. 180 183 * @return array 181 184 */ … … 188 191 * Subverts capital_P_dangit for SyntaxHighlighter shortcode. 189 192 * 190 * @param 193 * @param string $code 191 194 * @return string 192 195 */ … … 196 199 197 200 /** 201 * Add hidden fields to the comment form if the context is 'edit' 202 * 203 * @param string $submit_field HTML string with the submit button fields. 204 * @param array $args Arguments for the comment form. 205 * @return HTML string with the submit button fields. 206 */ 207 public static function add_hidden_fields( $submit_field, $args ) { 208 $context = isset( $args['context'] ) ? $args['context'] : ''; 209 $comment = isset( $args['comment_edit'] ) ? $args['comment_edit'] : false; 210 if ( ! ( $comment && ( 'edit' === $context ) ) ) { 211 return $submit_field; 212 } 213 214 $comment_id = isset( $comment->comment_ID ) ? $comment->comment_ID : 0; 215 216 return $submit_field . self::get_edit_fields( $comment_id, $instance = 0 ); 217 } 218 219 /** 220 * Get the comment form arguments by context. 221 * 222 * @param WP_Comment|false $comment Comment object or false. Default false. 223 * @param string $context Context of arguments. Accepts 'edit' or empty string. 224 * @return array Array with comment form arguments. 225 */ 226 public static function comment_form_args( $comment = false, $context = '' ) { 227 $label = _x( 'Add Note or Feedback', 'noun', 'wporg' ); 228 if ( 'edit' === $context ) { 229 $label = _x( 'Edit Note', 'noun', 'wporg' ); 230 } 231 232 $user_identity = wp_get_current_user(); 233 234 $args = array( 235 'logged_in_as' => '<p class="logged-in-as">' 236 . sprintf( 237 /* translators: 1: user profile link, 2: accessibility text, 3: user name, 4: logout URL */ 238 __( '<a href="%1$s" aria-label="%2$s">Logged in as %3$s</a>. <a href="%4$s">Log out?</a>' ), 239 'https://profiles.wordpress.org/' . esc_attr( $user_identity->user_nicename ), 240 /* translators: %s: user name */ 241 esc_attr( sprintf( __( 'Logged in as %s. Edit your profile.' ), $user_identity->display_name ) ), 242 $user_identity->display_name, 243 wp_logout_url( apply_filters( 'the_permalink', get_permalink() ) ) 244 ) 245 . '</p><p><ul><li>' 246 . __( 'Notes should supplement code reference entries, for example examples, tips, explanations, use-cases, and best practices.', 'wporg' ) 247 . '</li><li>' 248 . __( 'Feedback can be to report errors or omissions with the documentation on this page. Such feedback will not be publicly posted.', 'wporg' ) 249 . '</li><li>' 250 /* translators: 1: php button, 2: js button, 3: inline code button */ 251 . sprintf( 252 __( 'You can enter text and code. Use the %1$s, %2$s, or %3$s buttons to wrap code snippets.', 'wporg' ), 253 '<span class="text-button">php</span>', 254 '<span class="text-button">js</span>', 255 '<span class="text-button">' . __( 'inline code', 'wporg' ) . '</span>' 256 ) 257 . '</li></ul></p>', 258 'comment_notes_after' => '<p>' . __( 'Submission Notes:', 'wporg' ) . '</p>' . self::get_editor_rules(), 259 'label_submit' => $label, 260 'cancel_reply_link' => '', 261 'must_log_in' => '<p>' . sprintf( 262 __( 'You must <a href="%s">log in</a> before being able to contribute a note or feedback.', 'wporg' ), 263 'https://login.wordpress.org/?redirect_to=' . urlencode( get_comments_link() ) 264 ) . '</p>', 265 'title_reply' => '', //'Add Example' 266 'title_reply_to' => '', 267 ); 268 269 if ( class_exists( 'DevHub_Note_Preview' ) ) { 270 $args['comment_notes_after'] = DevHub_Note_Preview::comment_preview() . $args['comment_notes_after']; 271 $args['class_form'] = "comment-form tab-container"; 272 } 273 274 $args['comment_field'] = self::wp_editor_comments( $label, $comment ); 275 276 // Args for adding hidden links after the comment form submit field. 277 $args['context'] = $context; 278 $args['comment_edit'] = $comment; 279 280 if ( $comment && ( 'edit' === $context ) ) { 281 $comment_id = isset( $comment->comment_ID ) ? $comment->comment_ID : 0; 282 $post_id = isset( $comment->comment_post_ID ) ? $comment->comment_post_ID : 0; 283 284 $args['action'] = get_permalink( $post_id ) . '#comment-' . $comment_id; 285 } 286 287 return $args; 288 } 289 290 /** 198 291 * Capture an {@see wp_editor()} instance as the 'User Contributed Notes' comment form. 199 292 * 200 293 * Uses output buffering to capture the editor instance for use with the {@see comments_form()}. 201 294 * 295 * @param string $label Label used for the editor. 296 * @param WP_Comment|false $comment Comment object or false. Default false. 202 297 * @return string HTML output for the wp_editor-ized comment form. 203 298 */ 204 public static function wp_editor_comments() { 299 public static function wp_editor_comments( $label, $comment = false ) { 300 $content = isset( $comment->comment_content ) ? trim( $comment->comment_content ) : ''; 301 302 // wp_kses() converts htmlspecialchars in source code. 303 $content = $content ? htmlspecialchars_decode( $content ) : ''; 304 205 305 ob_start(); 206 echo '<h3><label for="comment">' . _x( 'Add Note or Feedback', 'noun', 'wporg' ). '</label></h3>';306 echo '<h3><label for="comment">' . $label . '</label></h3>'; 207 307 208 308 if ( class_exists( 'DevHub_Note_Preview' ) ) { 209 echo '<ul class="tablist" style="display:none;">';309 echo "<ul class='tablist' style='display: none;'>"; 210 310 echo '<li><a href="#comment-form-comment">' . __( 'Write', 'wporg' ) . '</a></li>'; 211 311 echo '<li><a href="#comment-preview">' . __( 'Preview', 'wporg' ) . '</a></li></ul>'; 212 312 } 213 313 314 echo '<div class="comment-form-comment tab-section" id="comment-form-comment">'; 315 wp_editor( $content, 'comment', array( 316 'media_buttons' => false, 317 'editor_css' => self::get_editor_style(), 318 'textarea_name' => 'comment', 319 'textarea_rows' => 8, 320 'quicktags' => array( 321 'buttons' => 'strong,em,ul,ol,li' 322 ), 323 'teeny' => true, 324 'tinymce' => false, 325 ) ); 326 echo '</div>'; 327 return ob_get_clean(); 328 } 329 330 /** 331 * Capture an {@see wp_editor()} instance as the 'User Contributed Notes' feedback form. 332 * 333 * Uses output buffering to capture the editor instance. 334 * 335 * @param WP_Comment|false $comment Comment object or false. Default false. 336 * @param string $display Display the editor. Default 'show'. 337 * @param bool $edit True if the editor used for editing a note. Default false. 338 * @return string HTML output for the wp_editor-ized feedback form. 339 */ 340 public static function wp_editor_feedback( $comment, $display = 'show', $edit = false ) { 341 342 if ( ! ( isset( $comment->comment_ID ) && absint( $comment->comment_ID ) ) ) { 343 return ''; 344 } 345 346 $comment_id = absint( $comment->comment_ID ); 347 348 static $instance = 0; 349 $instance++; 350 351 $display = ( 'hide' === $display ) ? ' style="display: none;"' : ''; 352 $parent = $comment_id; 353 $action = site_url( '/wp-comments-post.php' ); 354 $title = __( 'Add feedback to this note', 'wporg' ); 355 $button_text = __( 'Add Feedback', 'wporg' ); 356 $post_id = isset( $comment->comment_post_ID ) ? $comment->comment_post_ID : get_the_ID(); 357 $content = ''; 358 $form_type = ''; 359 $note_link = ''; 360 $class = ''; 361 362 if ( $edit ) { 363 $content = isset( $comment->comment_content ) ? $comment->comment_content : ''; 364 $title = __( 'Edit feedback', 'wporg' ); 365 $form_type = '-edit'; 366 $button_text = __( 'Edit Note', 'wporg' ); 367 $post_url = get_permalink( $post_id ); 368 $action = $post_url ? $post_url . '#comment-' . $comment_id : ''; 369 $parent = isset( $comment->comment_parent ) ? $comment->comment_parent : 0; 370 $parent_author = \DevHub\get_note_author( $parent ); 371 $class = ' edit-feedback-editor'; 372 373 if ( $parent && $post_url && $parent_author ) { 374 $post_url = $post_url . '#comment-' . $parent; 375 $parent_note = sprintf( __( 'note %d', 'wporg' ), $parent ); 376 377 /* translators: 1: note, 2: note author name */ 378 $note_link = sprintf( __( '%1$s by %2$s', 'wporg' ), "<a href='{$post_url}'>{$parent_note}</a>", $parent_author ); 379 } 380 } 381 382 $allowed_tags = ''; 383 foreach ( array( '<strong>', '<em>', '<code>', '<a>' ) as $tag ) { 384 $allowed_tags .= '<code>' . htmlentities( $tag ) . '</code>, '; 385 } 386 387 ob_start(); 388 echo "<div id='feedback-editor-{$comment_id}' class='feedback-editor{$class}'{$display}>\n"; 389 if ( ! $edit ) { 390 echo "<p class='feedback-editor-title'>{$title}</p>\n"; 391 } 392 393 echo "<form id='feedback-form-{$instance}{$form_type}' class='feedback-form' method='post' action='{$action}' name='feedback-form-{$instance}'>\n"; 394 echo self::get_editor_rules( 'feedback', $note_link ); 395 wp_editor( $content, 'feedback-' . $instance, array( 396 'media_buttons' => false, 397 'textarea_name' => 'comment', 398 'textarea_rows' => 3, 399 'quicktags' => array( 400 'buttons' => 'strong,em' 401 ), 402 'editor_css' => self::get_editor_style(), 403 'teeny' => true, 404 'tinymce' => false, 405 ) ); 406 407 echo '<p><strong>' . __( 'Note', 'wporg' ) . '</strong>: ' . __( 'No newlines allowed', 'wporg' ) . '. '; 408 printf( __( 'Allowed tags: %s', 'wporg' ), trim( $allowed_tags, ', ' ) ) . "</p>\n"; 409 echo "<p><input id='submit-{$instance}' class='submit' type='submit' value='{$button_text}' name='submit-{$instance}'>\n"; 410 echo "<input type='hidden' name='comment_post_ID' value='{$post_id}' id='comment_post_ID-{$instance}' />\n"; 411 echo "<input type='hidden' name='comment_parent' id='comment_parent-{$instance}' value='{$parent}' />\n"; 412 413 if ( $edit ) { 414 echo self::get_edit_fields( $comment_id, $instance ); 415 } 416 417 echo "</p>\n</form>\n</div><!-- #feedback-editor-{$comment_id} -->\n"; 418 return ob_get_clean(); 419 } 420 421 /** 422 * Get the rules list for the comment form. 423 * 424 * @param string $context Accepts 'feedback' or empty sring. 425 * @param string $note_link Link to parent note. 426 * @return string Editor rules. 427 */ 428 public static function get_editor_rules( $context = '', $note_link = '' ) { 429 $license_rule = sprintf( 430 /* translators: 1: GFDL link */ 431 __( '<strong>NOTE:</strong> All contributions are licensed under %s and are moderated before appearing on the site.', 'wporg' ), 432 '<a href="https://gnu.org/licenses/fdl.html">GFDL</a>' 433 ); 434 435 if ( 'feedback' === $context ) { 436 $feedback_rule = __( 'Use this form to report errors or to add additional information to this note.', 'wporg' ); 437 if ( $note_link ) { 438 $feedback_rule = sprintf( __( 'Use this form to report errors or to add additional information to %s.', 'wporg' ), $note_link ); 439 } 440 441 return '<ul><li>' 442 . __( 'Feedback is part of the documentation.', 'wporg' ) . ' ' 443 . $feedback_rule 444 . '</li><li>' 445 . __( 'This form is not for support requests, spam, bug reports, complaints, or self-promotion. Entries of this nature will be deleted.', 'wporg' ) 446 . '</li><li class="user-notes-are-gpl">' 447 . $license_rule 448 . '</li></ul>'; 449 } 450 451 return '<ul><li>' 452 . __( 'This form is not for support requests, discussions, spam, bug reports, complaints, or self-promotion. Entries of this nature will be deleted.', 'wporg' ) 453 . '</li><li>' 454 . __( 'In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key. In some cases the Esc key will need to be pressed twice before the Tab key will allow you to continue.', 'wporg' ) 455 . '</li><li class="user-notes-are-gpl">' 456 . $license_rule 457 . '</li></ul>'; 458 } 459 460 /** 461 * Get the editor styles. 462 * 463 * @return string Editor styles. 464 */ 465 public static function get_editor_style() { 214 466 $style = '<style type="text/css">'; 215 467 ob_start(); 216 468 include get_stylesheet_directory() . '/stylesheets/editor-style.css'; 217 469 $style .= ob_get_clean(); 218 $style .=' </style>'; 219 220 echo '<div class="comment-form-comment tab-section" id="comment-form-comment">'; 221 wp_editor( '', 'comment', array( 222 'media_buttons' => false, 223 'editor_css' => $style, 224 'textarea_name' => 'comment', 225 'textarea_rows' => 8, 226 'quicktags' => array( 227 'buttons' => 'strong,em,ul,ol,li' 228 ), 229 'teeny' => true, 230 'tinymce' => false, 231 ) ); 232 echo '</div>'; 233 return ob_get_clean(); 234 } 235 236 /** 237 * Capture an {@see wp_editor()} instance as the 'User Contributed Notes' feedback form. 238 * 239 * Uses output buffering to capture the editor instance. 240 * 241 * @return string HTML output for the wp_editor-ized feedback form. 242 */ 243 public static function wp_editor_feedback( $comment, $display = 'show', $content = '' ) { 244 245 if ( ! ( isset( $comment->comment_ID ) && absint( $comment->comment_ID ) ) ) { 246 return ''; 247 } 248 249 $comment_id = absint( $comment->comment_ID ); 250 251 static $instance = 0; 252 $instance++; 253 254 $display = ( 'hide' === $display ) ? ' style="display: none;"' : ''; 255 $title = __( 'Add feedback to this note', 'wporg' ); 256 $form_type = ''; 257 $button_text = __( 'Add Feedback', 'wporg' ); 258 259 if ( $content ) { 260 $title = __( 'Edit feedback', 'wporg' ); 261 $form_type = '-edit'; 262 $button_text = __( 'Edit Feedback', 'wporg' ); 263 } 264 265 $allowed_tags = ''; 266 foreach ( array( '<strong>', '<em>', '<code>', '<a>' ) as $tag ) { 267 $allowed_tags .= '<code>' . htmlentities( $tag ) . '</code>, '; 268 } 269 270 ob_start(); 271 echo "<div id='feedback-editor-{$comment_id}' class='feedback-editor'{$display}>\n"; 272 echo "<p class='feedback-editor-title'>{$title}</p>\n"; 273 echo '<form id="feedback-form-' . $instance . $form_type . '" class="feedback-form" method="post" action="' . site_url( '/wp-comments-post.php' ) . '" name="feedback-form-' . $instance ."\">\n"; 274 275 wp_editor( '', 'feedback-' . $instance, array( 276 'media_buttons' => false, 277 'textarea_name' => 'comment', 278 'textarea_rows' => 3, 279 'quicktags' => array( 280 'buttons' => 'strong,em' 281 ), 282 'teeny' => true, 283 'tinymce' => false, 284 ) ); 285 286 echo '<p><strong>' . __( 'Note', 'wporg' ) . '</strong>: ' . __( 'No newlines allowed', 'wporg' ) . '. '; 287 printf( __( 'Allowed tags: %s', 'wporg' ), trim( $allowed_tags, ', ' ) ) . "</p>\n"; 288 echo "<p><input id='submit-{$instance}' class='submit' type='submit' value='Add Feedback' name='submit-{$instance}'>\n"; 289 echo "<input type='hidden' name='comment_post_ID' value='" . get_the_ID() . "' id='comment_post_ID-{$instance}' />\n"; 290 echo "<input type='hidden' name='comment_parent' id='comment_parent-{$instance}' value='{$comment_id}' />\n"; 291 echo "</p>\n</form>\n</div><!-- #feedback-editor-{$comment_id} -->\n"; 292 return ob_get_clean(); 470 $style .= ' </style>'; 471 return $style; 472 } 473 474 /** 475 * Get the hidden input fields HTML used for editing a note. 476 * 477 * @param int $comment_id Comment ID. 478 * @param integer $instance Comment form instance number used in HTML id's. 479 * @return string Hidden input fields HTML. 480 */ 481 public static function get_edit_fields( $comment_id, $instance = 0 ) { 482 $fields = "<input type='hidden' name='comment_ID' id='comment_ID-{$instance}' value='{$comment_id}' />\n"; 483 $fields .= "<input type='hidden' name='update_user_note' id='update_user_note-{$instance}' value='1' />\n"; 484 $fields .= wp_nonce_field( 'update_user_note_' . $comment_id, '_wpnonce', true, false ); 485 486 return $fields; 293 487 } 294 488
Note: See TracChangeset
for help on using the changeset viewer.