Version 4.1.19
This commit is contained in:
1 parent
28bd025b35
commit
2bd5025018
2674 files changed
+233518
-77766
No files matched your search
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Messenger
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 5 Jul 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -47,7 +47,7 @@ class _messenger extends \IPS\Content\Controller
|
||||
|
||||
if ( \IPS\Member::loggedIn()->members_disable_pm AND \IPS\Member::loggedIn()->members_disable_pm != 2 AND \IPS\Request::i()->do != 'enableMessenger' )
|
||||
{
|
||||
\IPS\Output::i()->error( 'messenger_disabled_can_enable', '2C137/A', 403, '' );
|
||||
\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack('messenger_disabled_can_enable', FALSE, array( 'sprintf' => array( \IPS\Http\URL::internal( 'app=core&module=messaging&controller=messenger&do=enableMessenger', 'front', 'messaging' )->csrf() ) ) ), '2C137/A', 403, '' );
|
||||
}
|
||||
else if ( \IPS\Member::loggedIn()->members_disable_pm == 2 )
|
||||
{
|
||||
@@ -60,7 +60,6 @@ class _messenger extends \IPS\Content\Controller
|
||||
{
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'jquery/jquery-ui.js', 'core', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'jquery/jquery-touchpunch.js', 'core', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'jquery/jquery.slimscroll.js', 'core', 'interface' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_model_messages.js', 'core' ) );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js('front_messages.js', 'core' ) );
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'styles/messaging.css' ) );
|
||||
@@ -68,7 +67,7 @@ class _messenger extends \IPS\Content\Controller
|
||||
}
|
||||
|
||||
/* Set Session Location */
|
||||
\IPS\Session::i()->setLocation( \IPS\Http\Url::internal( 'app=core&module=messaging&controller=messenger', NULL, 'messenger' ), array(), 'loc_using_messenger' );
|
||||
\IPS\Session::i()->setLocation( \IPS\Http\Url::internal( 'app=core&module=messaging&controller=messenger', NULL, 'messaging' ), array(), 'loc_using_messenger' );
|
||||
|
||||
parent::execute();
|
||||
}
|
||||
@@ -86,7 +85,7 @@ class _messenger extends \IPS\Content\Controller
|
||||
$folders = array( 'myconvo' => \IPS\Member::loggedIn()->language()->addToStack('messenger_folder_inbox') );
|
||||
if ( \IPS\Member::loggedIn()->pconversation_filters )
|
||||
{
|
||||
$folders = array_merge( $folders, array_filter( json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE ) ) );
|
||||
$folders = $folders + array_filter( json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE ) );
|
||||
}
|
||||
|
||||
/* Are we looking at a specific folder? */
|
||||
@@ -116,6 +115,30 @@ class _messenger extends \IPS\Content\Controller
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( \IPS\Request::i()->id );
|
||||
|
||||
/* If this message triggered a PM popup and we view it directly, it will no longer be marked as unread but msg_show_notification for
|
||||
the member will still be set, causing the next oldest PM to show in a popup erroneously. If this is the latest unread PM, reset
|
||||
msg_show_notification now to prevent the popup from showing. */
|
||||
if( \IPS\Member::loggedIn()->msg_show_notification )
|
||||
{
|
||||
$latestConversation = NULL;
|
||||
|
||||
try
|
||||
{
|
||||
$latestConversation = \IPS\Db::i()->select( 'map_topic_id', 'core_message_topic_user_map', array( 'map_user_id=? AND map_user_active=1 AND map_has_unread=1 AND map_ignore_notification=0', \IPS\Member::loggedIn()->member_id ), 'map_last_topic_reply DESC' )->first();
|
||||
}
|
||||
catch ( \UnderflowException $e ) { }
|
||||
|
||||
if( $latestConversation == $conversation->id )
|
||||
{
|
||||
\IPS\Member::loggedIn()->msg_show_notification = FALSE;
|
||||
\IPS\Member::loggedIn()->save();
|
||||
}
|
||||
}
|
||||
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_read_time' => time(), 'map_has_unread' => 0 ), array( 'map_user_id=? AND map_topic_id=?', \IPS\Member::loggedIn()->member_id, $conversation->id ) );
|
||||
\IPS\core\Messenger\Conversation::rebuildMessageCounts( \IPS\Member::loggedIn() );
|
||||
|
||||
if ( \IPS\Request::i()->isAjax() and \IPS\Request::i()->getRow )
|
||||
{
|
||||
$row = \IPS\Db::i()->select(
|
||||
@@ -127,15 +150,14 @@ class _messenger extends \IPS\Content\Controller
|
||||
'core_message_posts.msg_topic_id=core_message_topics.mt_id'
|
||||
)->join(
|
||||
'core_message_topic_user_map',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id AND core_message_topic_user_map.map_user_id=' . intval( \IPS\Member::loggedIn()->member_id )
|
||||
)->first();
|
||||
$row['last_message'] = \IPS\core\Messenger\Conversation::load( $row['mt_id'] )->comments( 1, 0, 'date', 'desc' );
|
||||
$row['participants'] = \IPS\core\Messenger\Conversation::load( $row['mt_id'] )->participantBlurb();
|
||||
|
||||
\IPS\Output::i()->json( \IPS\Theme::i()->getTemplate( 'messaging' )->messageListRow( $row, FALSE ) );
|
||||
\IPS\Output::i()->json( \IPS\Theme::i()->getTemplate( 'messaging' )->messageListRow( $row, FALSE, $folders ) );
|
||||
}
|
||||
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_read_time' => time(), 'map_has_unread' => 0 ), array( 'map_user_id=? AND map_topic_id=?', \IPS\Member::loggedIn()->member_id, $conversation->id ) );
|
||||
\IPS\core\Messenger\Conversation::rebuildMessageCounts( \IPS\Member::loggedIn() );
|
||||
|
||||
\IPS\Output::i()->title = $conversation->title;
|
||||
$baseUrl = $baseUrl->setQueryString( 'id', \IPS\Request::i()->id );
|
||||
|
||||
@@ -194,35 +216,68 @@ class _messenger extends \IPS\Content\Controller
|
||||
}
|
||||
|
||||
/* Do we need a filter? */
|
||||
$where = array( array( 'map_user_id=? AND map_user_active=1', \IPS\Member::loggedIn()->member_id ) );
|
||||
$where = array( array( 'core_message_topic_user_map.map_user_id=? AND core_message_topic_user_map.map_user_active=1', \IPS\Member::loggedIn()->member_id ) );
|
||||
if ( \IPS\Request::i()->filter == 'mine' )
|
||||
{
|
||||
$where[] = array( 'map_is_starter=1' );
|
||||
$where[] = array( 'core_message_topic_user_map.map_is_starter=1' );
|
||||
}
|
||||
elseif( \IPS\Request::i()->filter == 'not_mine' )
|
||||
{
|
||||
$where[] = array( 'map_is_starter=0' );
|
||||
$where[] = array( 'core_message_topic_user_map.map_is_starter=0' );
|
||||
}
|
||||
|
||||
elseif( \IPS\Request::i()->filter == 'read' )
|
||||
{
|
||||
$where[] = array( 'core_message_topic_user_map.map_has_unread=0' );
|
||||
}
|
||||
elseif( \IPS\Request::i()->filter == 'not_read' )
|
||||
{
|
||||
$where[] = array( 'core_message_topic_user_map.map_has_unread=1' );
|
||||
}
|
||||
|
||||
/* Add a folder filter */
|
||||
if ( !isset( \IPS\Request::i()->overview ) )
|
||||
{
|
||||
if ( !is_null( $folder ) AND isset( $folders[ $folder ] ) )
|
||||
{
|
||||
$where[] = array( 'map_folder_id=?', $folder );
|
||||
$where[] = array( 'core_message_topic_user_map.map_folder_id=?', $folder );
|
||||
}
|
||||
else
|
||||
{
|
||||
$where[] = array( 'map_folder_id=?', 'myconvo' );
|
||||
$where[] = array( 'core_message_topic_user_map.map_folder_id=?', 'myconvo' );
|
||||
}
|
||||
}
|
||||
|
||||
/* If we're searching, get the results */
|
||||
$perPage = 25;
|
||||
$perPage = 25;
|
||||
$iterator = array();
|
||||
|
||||
if ( \IPS\Request::i()->q )
|
||||
{
|
||||
$where[] = array( "( MATCH(core_message_topics.mt_title) AGAINST ('" . \IPS\Db::i()->escape_string( \IPS\Request::i()->q ) . "' IN BOOLEAN MODE) OR
|
||||
MATCH(core_message_posts.msg_post) AGAINST ('" . \IPS\Db::i()->escape_string( \IPS\Request::i()->q ) . "' IN BOOLEAN MODE) )" );
|
||||
$query = array();
|
||||
if ( isset( \IPS\Request::i()->search ) and $searchValues = \IPS\Request::i()->valueFromArray('search') )
|
||||
{
|
||||
if ( isset( $searchValues['topic'] ) )
|
||||
{
|
||||
$query[] = \IPS\Content\Search\Mysql\Query::matchClause( "core_message_topics.mt_title", \IPS\Request::i()->q, '+', FALSE );
|
||||
}
|
||||
if ( isset( $searchValues['post'] ) )
|
||||
{
|
||||
$query[] = \IPS\Content\Search\Mysql\Query::matchClause( "core_message_posts.msg_post", \IPS\Request::i()->q, '+', FALSE );
|
||||
}
|
||||
if ( isset( $searchValues['recipient'] ) )
|
||||
{
|
||||
$query[] = "receiving_member.name LIKE '%" . \IPS\Db::i()->escape_string( \IPS\Request::i()->q ) . "%'";
|
||||
}
|
||||
if ( isset( $searchValues['sender'] ) )
|
||||
{
|
||||
$query[] = "sending_member.name LIKE '%" . \IPS\Db::i()->escape_string( \IPS\Request::i()->q ) . "%'";
|
||||
}
|
||||
|
||||
if ( count( $query ) )
|
||||
{
|
||||
$where[] = '(' . implode( ' OR ', $query ) . ')';
|
||||
}
|
||||
}
|
||||
|
||||
/* Get a count */
|
||||
try
|
||||
@@ -236,6 +291,22 @@ class _messenger extends \IPS\Content\Controller
|
||||
'core_message_topic_user_map',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
)
|
||||
->join(
|
||||
array( 'core_message_topic_user_map', 'sender_map' ),
|
||||
'sender_map.map_topic_id=core_message_topics.mt_id AND sender_map.map_is_starter=1'
|
||||
)
|
||||
->join(
|
||||
array( 'core_message_topic_user_map', 'receiver_map' ),
|
||||
'receiver_map.map_topic_id=core_message_topics.mt_id AND receiver_map.map_is_starter=0'
|
||||
)
|
||||
->join(
|
||||
array( 'core_members', 'sending_member' ),
|
||||
'sending_member.member_id=sender_map.map_user_id'
|
||||
)
|
||||
->join(
|
||||
array( 'core_members', 'receiving_member' ),
|
||||
'receiving_member.member_id=receiver_map.map_user_id'
|
||||
)
|
||||
->first();
|
||||
}
|
||||
catch( \UnderflowException $e )
|
||||
@@ -243,38 +314,75 @@ class _messenger extends \IPS\Content\Controller
|
||||
$count = 0;
|
||||
}
|
||||
|
||||
/* Get iterator */
|
||||
$iterator = \IPS\Db::i()->select(
|
||||
'core_message_topic_user_map.*, core_message_topics.*',
|
||||
'core_message_posts',
|
||||
$where,
|
||||
( in_array( \IPS\Request::i()->sortBy, array( 'mt_last_post_time', 'mt_start_time', 'mt_replies' ) ) ? \IPS\Request::i()->sortBy : 'mt_last_post_time' ) . ' DESC',
|
||||
array( ( intval( \IPS\Request::i()->listPage ?: 1 ) - 1 ) * $perPage, $perPage ),
|
||||
'msg_topic_id'
|
||||
)->join(
|
||||
'core_message_topics',
|
||||
'core_message_posts.msg_topic_id=core_message_topics.mt_id'
|
||||
)->join(
|
||||
'core_message_topic_user_map',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
);
|
||||
/* Performance: if count is 0, don't bother selecting ... it's a wasted query */
|
||||
if( $count )
|
||||
{
|
||||
/* Because of strict group by, we first need to select the ids, then grab those topics */
|
||||
$sortColumn = ( in_array( \IPS\Request::i()->sortBy, array( 'mt_last_post_time', 'mt_start_time', 'mt_replies' ) ) ? \IPS\Request::i()->sortBy : 'mt_last_post_time' );
|
||||
$iterator = \IPS\Db::i()->select(
|
||||
'core_message_posts.msg_topic_id',
|
||||
'core_message_posts',
|
||||
$where,
|
||||
$sortColumn . ' DESC',
|
||||
array( ( intval( \IPS\Request::i()->listPage ?: 1 ) - 1 ) * $perPage, $perPage ),
|
||||
array( 'msg_topic_id', $sortColumn )
|
||||
)->join(
|
||||
'core_message_topics',
|
||||
'core_message_posts.msg_topic_id=core_message_topics.mt_id'
|
||||
)->join(
|
||||
'core_message_topic_user_map',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
)
|
||||
->join(
|
||||
array( 'core_message_topic_user_map', 'sender_map' ),
|
||||
'sender_map.map_topic_id=core_message_topics.mt_id AND sender_map.map_is_starter=1'
|
||||
)
|
||||
->join(
|
||||
array( 'core_message_topic_user_map', 'receiver_map' ),
|
||||
'receiver_map.map_topic_id=core_message_topics.mt_id AND receiver_map.map_is_starter=0'
|
||||
)
|
||||
->join(
|
||||
array( 'core_members', 'sending_member' ),
|
||||
'sending_member.member_id=sender_map.map_user_id'
|
||||
)
|
||||
->join(
|
||||
array( 'core_members', 'receiving_member' ),
|
||||
'receiving_member.member_id=receiver_map.map_user_id'
|
||||
);
|
||||
|
||||
/* Get iterator */
|
||||
$iterator = \IPS\Db::i()->select(
|
||||
'core_message_topic_user_map.*, core_message_topics.*',
|
||||
'core_message_topic_user_map',
|
||||
array( 'map_topic_id IN(' . implode( ',', iterator_to_array( $iterator ) ) . ')' ),
|
||||
( in_array( \IPS\Request::i()->sortBy, array( 'mt_last_post_time', 'mt_start_time', 'mt_replies' ) ) ? \IPS\Request::i()->sortBy : 'mt_last_post_time' ) . ' DESC',
|
||||
array( ( intval( \IPS\Request::i()->listPage ?: 1 ) - 1 ) * $perPage, $perPage )
|
||||
)->join(
|
||||
'core_message_topics',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get a count */
|
||||
$count = \IPS\Db::i()->select( 'COUNT(*)', 'core_message_topic_user_map', $where )->first();
|
||||
|
||||
/* Get iterator */
|
||||
$iterator = \IPS\Db::i()->select(
|
||||
'core_message_topic_user_map.*, core_message_topics.*',
|
||||
'core_message_topic_user_map',
|
||||
$where,
|
||||
( in_array( \IPS\Request::i()->sortBy, array( 'mt_last_post_time', 'mt_start_time', 'mt_replies' ) ) ? \IPS\Request::i()->sortBy : 'mt_last_post_time' ) . ' DESC',
|
||||
array( ( intval( \IPS\Request::i()->listPage ?: 1 ) - 1 ) * $perPage, $perPage )
|
||||
)->join(
|
||||
'core_message_topics',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
);
|
||||
/* Performance: if $count is 0, don't bother selecting ... it's a wasted query */
|
||||
if( $count )
|
||||
{
|
||||
/* Get iterator */
|
||||
$iterator = \IPS\Db::i()->select(
|
||||
'core_message_topic_user_map.*, core_message_topics.*',
|
||||
'core_message_topic_user_map',
|
||||
$where,
|
||||
( in_array( \IPS\Request::i()->sortBy, array( 'mt_last_post_time', 'mt_start_time', 'mt_replies' ) ) ? \IPS\Request::i()->sortBy : 'mt_last_post_time' ) . ' DESC',
|
||||
array( ( intval( \IPS\Request::i()->listPage ?: 1 ) - 1 ) * $perPage, $perPage )
|
||||
)->join(
|
||||
'core_message_topics',
|
||||
'core_message_topic_user_map.map_topic_id=core_message_topics.mt_id'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/* Build the message list */
|
||||
@@ -292,7 +400,15 @@ class _messenger extends \IPS\Content\Controller
|
||||
\IPS\core\Messenger\Conversation::rebuildMessageCounts( \IPS\Member::loggedIn() );
|
||||
|
||||
/* Display */
|
||||
$pagination = \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->pagination( $baseUrl->setQueryString('_list', 1), ceil( $count / $perPage ), ( \IPS\Request::i()->listPage ?: 1 ), $perPage, TRUE, 'listPage' );
|
||||
$listUrl = $baseUrl;
|
||||
$baseUrl = $baseUrl->setQueryString('_list', 1);
|
||||
|
||||
if( isset( \IPS\Request::i()->filter ) )
|
||||
{
|
||||
$baseUrl = $baseUrl->setQueryString('filter', \IPS\Request::i()->filter );
|
||||
}
|
||||
|
||||
$pagination = \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->pagination( $baseUrl, ceil( $count / $perPage ), ( \IPS\Request::i()->listPage ?: 1 ), $perPage, TRUE, 'listPage' );
|
||||
if ( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
if( \IPS\Request::i()->id )
|
||||
@@ -301,11 +417,15 @@ class _messenger extends \IPS\Content\Controller
|
||||
}
|
||||
elseif( \IPS\Request::i()->overview )
|
||||
{
|
||||
\IPS\Output::i()->json( array( 'data' => \IPS\Theme::i()->getTemplate('messaging')->messageListRows( $conversations, $pagination, TRUE ) ) );
|
||||
\IPS\Output::i()->json( array(
|
||||
'data' => \IPS\Theme::i()->getTemplate('messaging')->messageListRows( $conversations, $pagination, TRUE, $folders ),
|
||||
'pagination' => $pagination,
|
||||
'listBaseUrl' => $listUrl->setQueryString( array( 'sortBy' => \IPS\Request::i()->sortBy, 'filter' => \IPS\Request::i()->filter ) )->stripQueryString( 'id' )
|
||||
) );
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate('messaging')->messageListRows( $conversations, $pagination, TRUE ), 200, 'text/html' );
|
||||
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate('messaging')->messageListRows( $conversations, $pagination, TRUE, $folders ), 200, 'text/html' );
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -328,6 +448,42 @@ class _messenger extends \IPS\Content\Controller
|
||||
\IPS\Output::i()->output = $form->customTemplate( array( call_user_func_array( array( \IPS\Theme::i(), 'getTemplate' ), array( 'forms', 'core' ) ), 'popupTemplate' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Move messages form
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function moveForm()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$folders = json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE );
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'move_message_to', NULL, FALSE, array( 'options' => array_merge( array( 'myconvo' => 'inbox' ), $folders ) ) ) );
|
||||
|
||||
if ( $values = $form->values() )
|
||||
{
|
||||
$ids = explode( ',', \IPS\Request::i()->ids );
|
||||
foreach( $ids as $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( $id );
|
||||
$conversation->moveConversation( \IPS\Request::i()->move_message_to );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=core&module=messaging&controller=messenger&folder=' . \IPS\Request::i()->move_message_to, 'front', 'messenger' ) );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = 'messenger_move';
|
||||
\IPS\Output::i()->output = $form->customTemplate( array( call_user_func_array( array( \IPS\Theme::i(), 'getTemplate' ), array( 'forms', 'core' ) ), 'popupTemplate' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Folder
|
||||
*
|
||||
@@ -335,6 +491,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function addFolder()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'messenger_add_folder_name', NULL, TRUE ) );
|
||||
if ( $values = $form->values() )
|
||||
@@ -386,6 +544,9 @@ class _messenger extends \IPS\Content\Controller
|
||||
protected function deleteFolder()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Make sure the user confirmed the deletion */
|
||||
\IPS\Request::i()->confirmedDelete();
|
||||
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_user_active' => FALSE, 'map_left_time' => time() ), array( 'map_user_id=? AND map_folder_id=?', \IPS\Member::loggedIn()->member_id, \IPS\Request::i()->folder ) );
|
||||
|
||||
@@ -436,7 +597,9 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function renameFolder()
|
||||
{
|
||||
$folders = json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE );
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$folders = json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE );
|
||||
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'messenger_add_folder_name', $folders[ \IPS\Request::i()->folder ], TRUE ) );
|
||||
@@ -472,6 +635,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function blockParticipant()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( \IPS\Request::i()->id );
|
||||
@@ -513,6 +678,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function addParticipant()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( \IPS\Request::i()->id );
|
||||
@@ -525,7 +692,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
{
|
||||
foreach ( explode( ',', \IPS\Request::i()->member_names ) as $name )
|
||||
{
|
||||
$memberToAdd = \IPS\Member::load( $name, 'name' );
|
||||
/* We have to html_entity_decode because the javascript code sends the encoded name here */
|
||||
$memberToAdd = \IPS\Member::load( html_entity_decode( $name, ENT_QUOTES, 'UTF-8' ), 'name' );
|
||||
if ( $memberToAdd->member_id )
|
||||
{
|
||||
$members[] = $memberToAdd;
|
||||
@@ -564,6 +732,11 @@ class _messenger extends \IPS\Content\Controller
|
||||
throw new \InvalidArgumentException( \IPS\Member::loggedIn()->language()->addToStack('messenger_member_left', FALSE, array( 'sprintf' => array( $member->name ) ) ) );
|
||||
}
|
||||
|
||||
if ( !$conversation::memberCanReceiveNewMessage( $member, \IPS\Member::loggedIn() ) )
|
||||
{
|
||||
throw new \InvalidArgumentException( \IPS\Member::loggedIn()->language()->addToStack('meesnger_err_bad_recipient', FALSE, array( 'sprintf' => array( $member->name ) ) ) );
|
||||
}
|
||||
|
||||
$maps = $conversation->authorize( $member );
|
||||
$ids[] = $member->member_id;
|
||||
|
||||
@@ -615,6 +788,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function notifications()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( \IPS\Request::i()->id );
|
||||
@@ -634,14 +809,12 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function move()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$conversation = \IPS\core\Messenger\Conversation::loadAndCheckPerms( \IPS\Request::i()->id );
|
||||
|
||||
if ( in_array( \IPS\Request::i()->to, array_merge( array( 'myconvo' ), array_keys( json_decode( \IPS\Member::loggedIn()->pconversation_filters, TRUE ) ) ) ) )
|
||||
{
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_folder_id' => \IPS\Request::i()->to ), array( 'map_user_id=? AND map_topic_id=?', \IPS\Member::loggedIn()->member_id, $conversation->id ) );
|
||||
}
|
||||
$conversation->moveConversation( \IPS\Request::i()->to );
|
||||
|
||||
if ( \IPS\Request::i()->isAjax() )
|
||||
{
|
||||
@@ -665,6 +838,8 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function leaveConversation()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$ids = \IPS\Request::i()->id;
|
||||
@@ -706,9 +881,10 @@ class _messenger extends \IPS\Content\Controller
|
||||
*/
|
||||
protected function enableMessenger()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
\IPS\Member::loggedIn()->members_disable_pm = 0;
|
||||
\IPS\Member::loggedIn()->save();
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=core&module=messaging&controller=messenger', 'front', 'messenger' ), 'messenger_enabled' );
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=core&module=messaging&controller=messenger', 'front', 'messaging' ), 'messenger_enabled' );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user