WordPress.org

Make WordPress Core

Ticket #23625: 23625.5.diff

File 23625.5.diff, 3.2 KB (added by wonderboymusic, 2 years ago)
  • wp-includes/post-formats.php

    diff --git wp-includes/post-formats.php wp-includes/post-formats.php
    index 828447b..e8cca29 100644
    function post_formats_compat( $content, $id = 0 ) { 
    420420 
    421421        return $output; 
    422422} 
     423 
     424/** 
     425 * Deliberately interpret passed content as a chat transcript that is optionally 
     426 * followed by commentary 
     427 * 
     428 * If the content does not contain username syntax, assume that it does not contain 
     429 * chat logs and return 
     430 * 
     431 * @since 3.6.0 
     432 * 
     433 * Example: 
     434 * 
     435 * One stanza of chat: 
     436 * Scott: Hey, let's chat! 
     437 * Helen: No. 
     438 * 
     439 * $stanzas = array( 
     440 *     array( 
     441 *         array( 
     442 *             'time' => '', 
     443 *             'author' => 'Scott', 
     444 *             'messsage' => "Hey, let's chat!" 
     445 *         ), 
     446 *         array( 
     447 *             'time' => '', 
     448 *             'author' => 'Helen', 
     449 *             'message' => 'No.' 
     450 *         ) 
     451 *     ) 
     452 * ) 
     453 * @param string $content A string which might contain chat data. 
     454 * @param boolean $remove Whether to remove the found data from the passed content. 
     455 * @return array A chat log as structured data 
     456 */ 
     457function get_content_chat( &$content, $remove = false ) { 
     458        $trimmed = trim( $content ); 
     459        $newline_regex = '#^(\[.+?\])?\s?([^:]+):#'; 
     460 
     461        if ( empty( $trimmed ) || ! preg_match( $newline_regex, $trimmed ) ) 
     462                return array(); 
     463 
     464        $last_index = 0; 
     465        $stanzas = array(); 
     466        $lines = explode( "\n", make_clickable( $trimmed ) ); 
     467 
     468        $author = $time = ''; 
     469        $data = array(); 
     470        $stanza = array(); 
     471 
     472        foreach ( $lines as $index => $line ) { 
     473                $line = trim( $line ); 
     474 
     475                if ( empty( $line ) ) { 
     476                        if ( ! empty( $author ) ) { 
     477                                $stanza[] = array( 
     478                                        'time' => $time, 
     479                                        'author' => $author, 
     480                                        'message' => join( ' ', $data ) 
     481                                ); 
     482                        } 
     483 
     484                        $stanzas[] = $stanza; 
     485                        $last_index = $index; 
     486                        $stanza = array(); 
     487                        $author = $time = ''; 
     488                        $data = array(); 
     489                        if ( ! empty( $lines[$index + 1] ) && ! strstr( $lines[$index + 1], ':' ) ) 
     490                                break; 
     491                } 
     492 
     493                $matches = array(); 
     494                $matched = preg_match( $newline_regex, $line, $matches ); 
     495                if ( $matched && ( ! empty( $matches[1] ) || ! preg_match( '#\s#', $matches[2] ) ) ) { 
     496                        if ( ! empty( $author ) ) { 
     497                                $stanza[] = array( 
     498                                        'time' => $time, 
     499                                        'author' => $author, 
     500                                        'message' => join( ' ', $data ) 
     501                                ); 
     502                                $data = array(); 
     503                        } 
     504 
     505                        $time = $matches[1]; 
     506                        $author = $matches[2]; 
     507                        $data[] = trim( str_replace( $matches[0], '', $line ) ); 
     508                } elseif ( preg_match( '#\S#', $line ) ) { 
     509                        $data[] = $line; 
     510                } 
     511        } 
     512 
     513        if ( ! empty( $author ) ) { 
     514                $stanza[] = array( 
     515                        'time' => $time, 
     516                        'author' => $author, 
     517                        'message' => trim( join( ' ', $data ) ) 
     518                ); 
     519        } 
     520 
     521        if ( ! empty( $stanza ) ) 
     522                $stanzas[] = $stanza; 
     523 
     524        if ( $remove ) 
     525                $content = trim( join( "\n", array_slice( $lines, $last_index ) ) ); 
     526 
     527        return $stanzas; 
     528} 
     529 
     530/** 
     531 * Retrieve structured chat data from the current or passed post 
     532 * 
     533 * @since 3.6.0 
     534 * 
     535 * @param int $id Optional. Post ID 
     536 * @return array 
     537 */ 
     538function get_the_chat( $id = 0 ) { 
     539        $post = empty( $id ) ? get_post() : get_post( $id ); 
     540        if ( empty( $post ) ) 
     541                return array(); 
     542 
     543        $data = get_content_chat( $post->post_content ); 
     544        if ( empty( $data ) ) 
     545                return array(); 
     546 
     547        return $data; 
     548} 
     549 No newline at end of file