From: Brad Jorsch Date: Mon, 11 Sep 2017 18:27:01 +0000 (-0400) Subject: Add CommentStoreComment::newUnsavedComment() X-Git-Tag: 1.31.0-rc.0~2120^2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/bilan.php?a=commitdiff_plain;h=01271ff6d898f3ad269950973e3ccc94ce2fef4b;p=lhc%2Fweb%2Fwiklou.git Add CommentStoreComment::newUnsavedComment() Revision (or more accurately, its upcoming MCR replacement) should allow for the full flexibility of CommentStore in its interface, and the most straightforward way to do that is to use CommentStoreComment. But for that to work sanely, we need a non-@private way to create a new CommentStoreComment that hasn't been saved to the database yet. Change-Id: I76028e8ef3da4568a16e098cdfbc806a67b814e3 --- diff --git a/includes/CommentStore.php b/includes/CommentStore.php index 2ed21d1995..b8a31e6f02 100644 --- a/includes/CommentStore.php +++ b/includes/CommentStore.php @@ -367,26 +367,7 @@ class CommentStore { * @return CommentStoreComment */ public function createComment( IDatabase $dbw, $comment, array $data = null ) { - global $wgContLang; - - if ( !$comment instanceof CommentStoreComment ) { - if ( $data !== null ) { - foreach ( $data as $k => $v ) { - if ( substr( $k, 0, 1 ) === '_' ) { - throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' ); - } - } - } - if ( $comment instanceof Message ) { - $message = clone $comment; - $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg - ->setInterfaceMessageFlag( true ) - ->text(); - $comment = new CommentStoreComment( null, $text, $message, $data ); - } else { - $comment = new CommentStoreComment( null, $comment, null, $data ); - } - } + $comment = CommentStoreComment::newUnsavedComment( $comment, $data ); # Truncate comment in a Unicode-sensitive manner $comment->text = $this->lang->truncate( $comment->text, self::MAX_COMMENT_LENGTH ); diff --git a/includes/CommentStoreComment.php b/includes/CommentStoreComment.php index afc1374223..3920ba083f 100644 --- a/includes/CommentStoreComment.php +++ b/includes/CommentStoreComment.php @@ -42,7 +42,7 @@ class CommentStoreComment { public $data; /** - * @private For use by CommentStore only + * @private For use by CommentStore only. Use self::newUnsavedComment() instead. * @param int|null $id * @param string $text * @param Message|null $message @@ -54,4 +54,39 @@ class CommentStoreComment { $this->message = $message ?: new RawMessage( '$1', [ $text ] ); $this->data = $data; } + + /** + * Create a new, unsaved CommentStoreComment + * + * @param string|Message|CommentStoreComment $comment Comment text or Message object. + * A CommentStoreComment is also accepted here, in which case it is returned unchanged. + * @param array|null $data Structured data to store. Keys beginning with '_' are reserved. + * Ignored if $comment is a CommentStoreComment. + * @return CommentStoreComment + */ + public static function newUnsavedComment( $comment, array $data = null ) { + global $wgContLang; + + if ( $comment instanceof CommentStoreComment ) { + return $comment; + } + + if ( $data !== null ) { + foreach ( $data as $k => $v ) { + if ( substr( $k, 0, 1 ) === '_' ) { + throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' ); + } + } + } + + if ( $comment instanceof Message ) { + $message = clone $comment; + $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg + ->setInterfaceMessageFlag( true ) + ->text(); + return new CommentStoreComment( null, $text, $message, $data ); + } else { + return new CommentStoreComment( null, $comment, null, $data ); + } + } }