http://www.mediawiki.org/wiki/Special:Code/MediaWiki/91939
Revision: 91939 Author: zhenya Date: 2011-07-12 07:48:34 +0000 (Tue, 12 Jul 2011) Log Message: ----------- wrongly deleted it in previous revision Added Paths: ----------- trunk/extensions/SocialProfile/UserBoard/SpecialUserBoard.php Added: trunk/extensions/SocialProfile/UserBoard/SpecialUserBoard.php =================================================================== --- trunk/extensions/SocialProfile/UserBoard/SpecialUserBoard.php (rev 0) +++ trunk/extensions/SocialProfile/UserBoard/SpecialUserBoard.php 2011-07-12 07:48:34 UTC (rev 91939) @@ -0,0 +1,328 @@ +<?php +if ( !defined( 'MEDIAWIKI' ) ) { + die(); +} +/** + * Display User Board messages for a user + * + * @file + * @ingroup Extensions + * @author David Pean <david.p...@gmail.com> + * @copyright Copyright © 2007, Wikia Inc. + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later + */ + +class SpecialViewUserBoard extends SpecialPage { + + /** + * Constructor + */ + public function __construct() { + parent::__construct( 'UserBoard' ); + } + + /** + * Show the special page + * + * @param $params Mixed: parameter(s) passed to the page or null + */ + public function execute( $params ) { + global $wgUser, $wgOut, $wgRequest, $wgScriptPath, $wgUserBoardScripts; + + // Add CSS + $wgOut->addExtensionStyle( $wgUserBoardScripts . '/UserBoard.css' ); + + $ub_messages_show = 25; + $user_name = $wgRequest->getVal( 'user' ); + $user_name_2 = $wgRequest->getVal( 'conv' ); + $user_id_2 = ''; // Prevent E_NOTICE + $page = $wgRequest->getVal( 'page' ); + + /** + * Redirect Non-logged in users to Login Page + * It will automatically return them to the UserBoard page + */ + if ( $wgUser->getID() == 0 && $user_name == '' ) { + $login = SpecialPage::getTitleFor( 'Userlogin' ); + $wgOut->redirect( $login->getFullURL( 'returnto=Special:UserBoard' ) ); + return false; + } + + /** + * If no user is set in the URL, we assume its the current user + */ + if ( !$user_name ) { + $user_name = $wgUser->getName(); + } + $user_id = User::idFromName( $user_name ); + $user = Title::makeTitle( NS_USER, $user_name ); + $user_safe = str_replace( '&', '%26', $user_name ); + + if ( $user_name_2 ) { + $user_id_2 = User::idFromName( $user_name_2 ); + $user_2 = Title::makeTitle( NS_USER, $user_name ); + $user_safe_2 = urlencode( $user_name_2 ); + } + + /** + * Error message for username that does not exist (from URL) + */ + if ( $user_id == 0 ) { + $wgOut->showErrorPage( 'error', 'userboard_noexist' ); + return false; + } + + /** + * Config for the page + */ + $per_page = $ub_messages_show; + if ( !$page || !is_numeric( $page ) ) { + $page = 1; + } + + $b = new UserBoard(); + $ub_messages = $b->getUserBoardMessages( $user_id, $user_id_2, $ub_messages_show, $page ); + + if ( !$user_id_2 ) { + $stats = new UserStats( $user_id, $user_name ); + $stats_data = $stats->getUserStats(); + $total = $stats_data['user_board']; + // If user is viewing their own board or is allowed to delete + // others' board messages, show the total count of board messages + // to them (public + private messages) + if ( $wgUser->getName() == $user_name || $wgUser->isAllowed( 'userboard-delete' ) ) { + $total = $total + $stats_data['user_board_priv']; + } + } else { + $total = $b->getUserBoardToBoardCount( $user_id, $user_id_2 ); + } + + if ( !$user_id_2 ) { + if ( !( $wgUser->getName() == $user_name ) ) { + $wgOut->setPageTitle( wfMsg( 'userboard_owner', $user_name ) ); + } else { + $b->clearNewMessageCount( $wgUser->getID() ); + $wgOut->setPageTitle( wfMsg( 'userboard_yourboard' ) ); + } + } else { + if ( $wgUser->getName() == $user_name ) { + $wgOut->setPageTitle( wfMsg( 'userboard_yourboardwith', $user_name_2 ) ); + } else { + $wgOut->setPageTitle( wfMsg( 'userboard_otherboardwith', $user_name, $user_name_2 ) ); + } + } + + $output = '<div class="user-board-top-links">'; + $output .= '<a href="' . $user->escapeFullURL() . '">< ' . wfMsg( 'userboard_backprofile', $user_name ) . '</a>'; + $output .= '</div>'; + $output .= "<script type=\"text/javascript\">/*<![CDATA[*/ + var _DELETE_CONFIRM = \"" . wfMsg( 'userboard_confirmdelete' ) . "\"; + var posted = 0; + function send_message() { + if( document.getElementById('message').value && !posted ) { + posted = 1; + encodedName = encodeURIComponent( document.getElementById('user_name_to').value ); + encodedMsg = encodeURIComponent( document.getElementById('message').value ); + messageType = document.getElementById('message_type').value; + sajax_request_type = 'POST'; + sajax_do_call( 'wfSendBoardMessage', [ encodedName, encodedMsg, messageType, {$per_page} ], function( originalRequest ) { + posted = 0; + if( document.getElementById('user_name_from').value ) { // its a board to board + user_1 = document.getElementById('user_name_from').value; + user_2 = document.getElementById('user_name_to').value; + } else { + user_1 = document.getElementById('user_name_to').value; + user_2 = ''; + } + var params = ( user_2 ) ? '&conv=' + user_2 : ''; + var url = wgScriptPath + '/index.php?title=Special:UserBoard&user=' + user_1 + params; + window.location = url; + } + ); + } + } + + function delete_message( id ) { + if( confirm( _DELETE_CONFIRM ) ) { + sajax_request_type = 'POST'; + sajax_do_call( 'wfDeleteBoardMessage', [ id ], function( originalRequest ) { + window.location.reload(); + }); + } + } + /*]]>*/</script>"; + + $board_to_board = ''; // Prevent E_NOTICE + + if ( $page == 1 ) { + $start = 1; + } else { + $start = ( $page - 1 ) * $per_page + 1; + } + $end = $start + ( count( $ub_messages ) ) - 1; + + if ( $wgUser->getName() != $user_name ) { + $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL( $wgUser->getName(), $user_name ) . '">' . wfMsg( 'userboard_boardtoboard' ) . '</a>'; + } + + if ( $total ) { + $output .= '<div class="user-page-message-top"> + <span class="user-page-message-count" style="font-size:11px;color:#666666;">' + . wfMsg( 'userboard_showingmessages', $total, $start, $end, $end - $start + 1 ) . + ".</span> {$board_to_board}</span> + </div>"; + } + + /** + * Build next/prev nav + */ + if ( $user_id_2 ) { + $qs = "&conv={$user_safe_2}"; + } + $numofpages = $total / $per_page; + + if ( $numofpages > 1 ) { + $output .= '<div class="page-nav">'; + if ( $page > 1 ) { + $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ( $page - 1 ) . "{$qs}\">" . wfMsg( 'userboard_prevpage' ) . '</a>'; + } + + if ( ( $total % $per_page ) != 0 ) { + $numofpages++; + } + if ( $numofpages >= 9 && $page < $total ) { + $numofpages = 9 + $page; + if ( $numofpages >= ( $total / $per_page ) ) { + $numofpages = ( $total / $per_page ) + 1; + } + } + + for ( $i = 1; $i <= $numofpages; $i++ ) { + if ( $i == $page ) { + $output .= ( $i . ' ' ); + } else { + $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=$i{$qs}\">$i</a> "; + } + } + + if ( ( $total - ( $per_page * $page ) ) > 0 ) { + $output .= ' <a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ( $page + 1 ) . "{$qs}\">" . wfMsg( 'userboard_nextpage' ) . '</a>'; + } + $output .= '</div><p>'; + } + + /** + * Build next/prev nav + */ + $can_post = false; + $user_name_from = ''; // Prevent E_NOTICE + + if ( !$user_id_2 ) { + if ( $wgUser->getName() != $user_name ) { + $can_post = true; + $user_name_to = htmlspecialchars( $user_name, ENT_QUOTES ); + } + } else { + if ( $wgUser->getName() == $user_name ) { + $can_post = true; + $user_name_to = htmlspecialchars( $user_name_2, ENT_QUOTES ); + $user_name_from = htmlspecialchars( $user_name, ENT_QUOTES ); + } + } + if ( $wgUser->isBlocked() ) { + // only let them post to admins + $user_to = User::newFromId( $user_id ); + $user_to->loadFromId(); + // if( !$user_to->isAllowed( 'delete' ) ) { + $can_post = false; + // } + } + + if ( $can_post ) { + if ( $wgUser->isLoggedIn() && !$wgUser->isBlocked() ) { + $output .= '<div class="user-page-message-form"> + <input type="hidden" id="user_name_to" name="user_name_to" value="' . $user_name_to . '"/> + <input type="hidden" id="user_name_from" name="user_name_from" value="' . $user_name_from . '"/> + <span style="color:#797979;">' . wfMsg( 'userboard_messagetype' ) . ' </span> + <select id="message_type"> + <option value="0">' . wfMsg( 'userboard_public' ) . '</option> + <option value="1">' . wfMsg( 'userboard_private' ) . '</option> + </select> + <p> + <textarea name="message" id="message" cols="63" rows="4"></textarea> + + <div class="user-page-message-box-button"> + <input type="button" value="' . wfMsg( 'userboard_sendbutton' ) . '" class="site-button" onclick="javascript:send_message();" /> + </div> + + </div>'; + } else { + $login_link = SpecialPage::getTitleFor( 'Userlogin' ); + $output .= '<div class="user-page-message-form">' + . wfMsg( 'userboard_loggedout', $login_link->escapeFullURL() ) . + '</div>'; + } + } + $output .= '<div id="user-page-board">'; + + if ( $ub_messages ) { + foreach ( $ub_messages as $ub_message ) { + $user = Title::makeTitle( NS_USER, $ub_message['user_name_from'] ); + $avatar = new wAvatar( $ub_message['user_id_from'], 'm' ); + + $board_to_board = ''; + $board_link = ''; + $ub_message_type_label = ''; + $delete_link = ''; + if ( $wgUser->getName() != $ub_message['user_name_from'] ) { + $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL( $user_name, $ub_message['user_name_from'] ) . '">' . wfMsg( 'userboard_boardtoboard' ) . '</a>'; + $board_link = '<a href="' . UserBoard::getUserBoardURL( $ub_message['user_name_from'] ) . '">' . wfMsg( 'userboard_sendmessage', $ub_message['user_name_from'] ) . '</a>'; + } else { + $board_link = '<a href="' . UserBoard::getUserBoardURL( $ub_message['user_name_from'] ) . '">' . wfMsg( 'userboard_myboard' ) . '</a>'; + } + if ( $wgUser->getName() == $ub_message['user_name'] || $wgUser->isAllowed( 'userboard-delete' ) ) { + $delete_link = "<span class=\"user-board-red\"> + <a href=\"javascript:void(0);\" onclick=\"javascript:delete_message({$ub_message['id']})\">" . wfMsg( 'userboard_delete' ) . '</a> + </span>'; + } + if ( $ub_message['type'] == 1 ) { + $ub_message_type_label = '(' . wfMsg( 'userboard_private' ) . ')'; + } + + // had global function to cut link text if too long and no breaks + // $ub_message_text = preg_replace_callback( "/(<a[^>]*>)(.*?)(<\/a>)/i", 'cut_link_text', $ub_message['message_text'] ); + $ub_message_text = $ub_message['message_text']; + + $output .= "<div class=\"user-board-message\" style=\"width:550px\"> + <div class=\"user-board-message-from\"> + <a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}}\">{$ub_message['user_name_from']} </a> {$ub_message_type_label} + </div> + <div class=\"user-board-message-time\">" + . wfMsgHtml( 'userboard_posted_ago', $b->getTimeAgo( $ub_message['timestamp'] ) ) . + "</div> + <div class=\"user-board-message-content\"> + <div class=\"user-board-message-image\"> + <a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}\">{$avatar->getAvatarURL()}</a> + </div> + <div class=\"user-board-message-body\"> + {$ub_message_text} + </div> + <div class=\"cleared\"></div> + </div> + <div class=\"user-board-message-links\"> + {$board_link} + {$board_to_board} + {$delete_link} + </div> + </div>"; + } + } else { + $invite_title = SpecialPage::getTitleFor( 'InviteContacts' ); + $output .= '<p>' . wfMsg( 'userboard_nomessages', $invite_title->escapeFullURL() ) . '</p>'; + } + + $output .= '</div>'; + + $wgOut->addHTML( $output ); + } +} Property changes on: trunk/extensions/SocialProfile/UserBoard/SpecialUserBoard.php ___________________________________________________________________ Added: svn:eol-style + native _______________________________________________ MediaWiki-CVS mailing list MediaWiki-CVS@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs