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
92 lines
2.8 KiB
PHP
92 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Value object for CommentStore
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
use Wikimedia\Rdbms\IDatabase;
|
|
|
|
/**
|
|
* CommentStoreComment represents a comment stored by CommentStore. The fields
|
|
* should be considered read-only.
|
|
* @since 1.30
|
|
*/
|
|
class CommentStoreComment {
|
|
|
|
/** @var int|null Comment ID, if any */
|
|
public $id;
|
|
|
|
/** @var string Text version of the comment */
|
|
public $text;
|
|
|
|
/** @var Message Message version of the comment. Might be a RawMessage */
|
|
public $message;
|
|
|
|
/** @var array|null Structured data of the comment */
|
|
public $data;
|
|
|
|
/**
|
|
* @private For use by CommentStore only. Use self::newUnsavedComment() instead.
|
|
* @param int|null $id
|
|
* @param string $text
|
|
* @param Message|null $message
|
|
* @param array|null $data
|
|
*/
|
|
public function __construct( $id, $text, Message $message = null, array $data = null ) {
|
|
$this->id = $id;
|
|
$this->text = $text;
|
|
$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 );
|
|
}
|
|
}
|
|
}
|