0 ) { // Give grep a chance to find the usages: // comments-time-days, comments-time-hours, comments-time-minutes, comments-time-seconds, comments-time-months $timeStr = wfMessage( "comments-time-{$timename}", $time[$timeabrv] )->parse(); } if ( $timeStr ) { $timeStr .= ' '; } return $timeStr; } static function getTimeAgo( $time ) { $timeArray = self::dateDiff( time(), $time ); $timeStr = ''; $timeStrMo = self::getTimeOffset( $timeArray, 'mo', 'months' ); $timeStrD = self::getTimeOffset( $timeArray, 'd', 'days' ); $timeStrH = self::getTimeOffset( $timeArray, 'h', 'hours' ); $timeStrM = self::getTimeOffset( $timeArray, 'm', 'minutes' ); $timeStrS = self::getTimeOffset( $timeArray, 's', 'seconds' ); if ( $timeStrMo ) { $timeStr = $timeStrMo; } else { $timeStr = $timeStrD; if ( $timeStr < 2 ) { $timeStr .= $timeStrH; $timeStr .= $timeStrM; if ( !$timeStr ) { $timeStr .= $timeStrS; } } } if ( !$timeStr ) { $timeStr = wfMessage( 'comments-time-seconds', 1 )->parse(); } return $timeStr; } /** * Makes sure that link text is not too long by changing too long links to * http://www.abc....xyz.html * * @param $matches Array * @return String shortened URL */ public static function cutCommentLinkText( $matches ) { $tagOpen = $matches[1]; $linkText = $matches[2]; $tagClose = $matches[3]; $image = preg_match( "/ 30 ) { $start = substr( $linkText, 0, ( 30 / 2 ) - 3 ); $end = substr( $linkText, strlen( $linkText ) - ( 30 / 2 ) + 3, ( 30 / 2 ) - 3 ); $linkText = trim( $start ) . wfMessage( 'ellipsis' )->escaped() . trim( $end ); } return $tagOpen . $linkText . $tagClose; } /** * Simple spam check -- checks the supplied text against MediaWiki's * built-in regex-based spam filters * * @param $text String: text to check for spam patterns * @return Boolean true if it contains spam, otherwise false */ public static function isSpam( $text ) { global $wgSpamRegex, $wgSummarySpamRegex; $retVal = false; // Allow to hook other anti-spam extensions so that sites that use, // for example, AbuseFilter, Phalanx or SpamBlacklist can add additional // checks Hooks::run( 'Comments::isSpam', [ &$text, &$retVal ] ); if ( $retVal ) { // Should only be true here... return $retVal; } // Run text through $wgSpamRegex (and $wgSummarySpamRegex if it has been specified) if ( $wgSpamRegex && preg_match( $wgSpamRegex, $text ) ) { return true; } if ( $wgSummarySpamRegex && is_array( $wgSummarySpamRegex ) ) { foreach ( $wgSummarySpamRegex as $spamRegex ) { if ( preg_match( $spamRegex, $text ) ) { return true; } } } return $retVal; } /** * Checks the supplied text for links * * @param $text String: text to check * @return Boolean true if it contains links, otherwise false */ public static function haveLinks( $text ) { $linkPatterns = [ '/(https?)|(ftp):\/\//', '/=\\s*[\'"]?\\s*mailto:/', ]; foreach ( $linkPatterns as $linkPattern ) { if ( preg_match( $linkPattern, $text ) ) { return true; } } return false; } /** * Blocks comments from a user * * @param User $blocker The user who is blocking someone else's comments * @param int $userId User ID of the guy whose comments we want to block * @param mixed $userName User name of the same guy */ public static function blockUser( $blocker, $userId, $userName ) { $dbw = wfGetDB( DB_MASTER ); Wikimedia\suppressWarnings(); // E_STRICT bitching $date = date( 'Y-m-d H:i:s' ); Wikimedia\restoreWarnings(); $dbw->insert( 'Comments_block', [ 'cb_user_id' => $blocker->getId(), 'cb_user_name' => $blocker->getName(), 'cb_user_id_blocked' => $userId, 'cb_user_name_blocked' => $userName, 'cb_date' => $date ], __METHOD__ ); } /** * Fetches the list of blocked users from the database * * @param int $userId User ID for whom we're getting the blocks(?) * @return array List of comment-blocked users */ static function getBlockList( $userId ) { $blockList = []; $dbr = wfGetDB( DB_REPLICA ); $res = $dbr->select( 'Comments_block', 'cb_user_name_blocked', [ 'cb_user_id' => $userId ], __METHOD__ ); foreach ( $res as $row ) { $blockList[] = $row->cb_user_name_blocked; } return $blockList; } static function isUserCommentBlocked( $userId, $userIdBlocked ) { $dbr = wfGetDB( DB_REPLICA ); $s = $dbr->selectRow( 'Comments_block', [ 'cb_id' ], [ 'cb_user_id' => $userId, 'cb_user_id_blocked' => $userIdBlocked ], __METHOD__ ); if ( $s !== false ) { return true; } else { return false; } } /** * Deletes a user from your personal comment-block list. * * @param int $userId Your user ID * @param int $userIdBlocked User ID of the blocked user */ public static function deleteBlock( $userId, $userIdBlocked ) { $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'Comments_block', [ 'cb_user_id' => $userId, 'cb_user_id_blocked' => $userIdBlocked ], __METHOD__ ); } /** * Sort threads ascending * * @param $x * @param $y * @return int */ public static function sortAsc( $x, $y ) { // return -1 - x goes above y // return 1 - x goes below y // return 0 - order irrelevant (only when x == y) if ( $x[0]->timestamp < $y[0]->timestamp ) { return -1; } else { return 1; } } /** * Sort threads descending * * @param $x * @param $y * @return int */ public static function sortDesc( $x, $y ) { // return -1 - x goes above y // return 1 - x goes below y // return 0 - order irrelevant (only when x == y) if ( $x[0]->timestamp > $y[0]->timestamp ) { return -1; } else { return 1; } } /** * Sort threads by score * * @param $x * @param $y */ public static function sortScore( $x, $y ) { // return -1 - x goes above y // return 1 - x goes below y // return 0 - order irrelevant (only when x == y) if ( $x[0]->currentScore > $y[0]->currentScore ) { return -1; } else { return 1; } } /** * Sort the comments purely by the time, from earliest to latest * * @param $x * @param $y * @return int */ public static function sortTime( $x, $y ) { // return -1 - x goes above y // return 1 - x goes below y // return 0 - order irrelevant (only when x == y) if ( $x->timestamp == $y->timestamp ) { return 0; } elseif ( $x->timestamp < $y->timestamp ) { return -1; } else { return 1; } } }