Version 4.5.0
This commit is contained in:
1 parent
1a0c7fd3c2
commit
f79dcf067a
3791 files changed
+248032
-76372
No files matched your search
@@ -11,7 +11,7 @@
|
||||
namespace IPS\core\Messenger;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
@@ -43,6 +43,11 @@ class _Conversation extends \IPS\Content\Item
|
||||
* @brief [Content\Item] Include the ability to search this content item in global site searches
|
||||
*/
|
||||
public static $includeInSiteSearch = FALSE;
|
||||
|
||||
/**
|
||||
* @brief [Content\Comment] Icon
|
||||
*/
|
||||
public static $icon = 'envelope';
|
||||
|
||||
/**
|
||||
* Delete Record
|
||||
@@ -185,6 +190,17 @@ class _Conversation extends \IPS\Content\Item
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can Merge?
|
||||
*
|
||||
* @param \IPS\Member|NULL $member The member to check for (NULL for currently logged in member)
|
||||
* @return bool
|
||||
*/
|
||||
public function canMerge( $member=NULL )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get elements for add/edit form
|
||||
*
|
||||
@@ -215,7 +231,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
|
||||
$return['to'] = new \IPS\Helpers\Form\Member( 'messenger_to', $member, TRUE, array( 'multiple' => ( \IPS\Member::loggedIn()->group['g_max_mass_pm'] == -1 ) ? NULL : \IPS\Member::loggedIn()->group['g_max_mass_pm'] ), function ( $members )
|
||||
{
|
||||
if ( is_array( $members ) )
|
||||
if ( \is_array( $members ) )
|
||||
{
|
||||
foreach ( $members as $m )
|
||||
{
|
||||
@@ -301,7 +317,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
protected function processBeforeCreate( $values )
|
||||
{
|
||||
$this->maps = array();
|
||||
$this->to_count = count( $values['messenger_to'] );
|
||||
$this->to_count = \count( $values['messenger_to'] );
|
||||
|
||||
parent::processBeforeCreate( $values );
|
||||
}
|
||||
@@ -319,7 +335,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
$this->first_msg_id = $comment->id;
|
||||
$this->save();
|
||||
|
||||
if ( is_array( $values['messenger_to'] ) )
|
||||
if ( \is_array( $values['messenger_to'] ) )
|
||||
{
|
||||
$members = array_map( function( $member )
|
||||
{
|
||||
@@ -377,7 +393,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
try
|
||||
{
|
||||
$report = \IPS\core\Reports\Report::load( $report );
|
||||
if ( $report->class == 'IPS\core\Messenger\Message' and in_array( $report->content_id, iterator_to_array( \IPS\Db::i()->select( 'msg_id', 'core_message_posts', array( 'msg_topic_id=?', $this->id ) ) ) ) )
|
||||
if ( $report->class == 'IPS\core\Messenger\Message' and \in_array( $report->content_id, iterator_to_array( \IPS\Db::i()->select( 'msg_id', 'core_message_posts', array( 'msg_topic_id=?', $this->id ) ) ) ) )
|
||||
{
|
||||
$_SESSION['report'] = $report->id;
|
||||
return TRUE;
|
||||
@@ -422,6 +438,11 @@ class _Conversation extends \IPS\Content\Item
|
||||
*/
|
||||
public function canDelete( $member=NULL )
|
||||
{
|
||||
if( \IPS\Member::loggedIn()->modPermission( 'can_view_reports' ) )
|
||||
{
|
||||
return TRUE; // Moderators who can manage reported content can "delete" conversations
|
||||
}
|
||||
|
||||
return FALSE; // You don't delete a conversation. It gets deleted automatically when everyone has left.
|
||||
}
|
||||
|
||||
@@ -473,7 +494,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
*/
|
||||
public function get_activeParticipants()
|
||||
{
|
||||
return count( array_filter( $this->maps, function( $map )
|
||||
return \count( array_filter( $this->maps, function( $map )
|
||||
{
|
||||
return $map['map_user_active'];
|
||||
} ) );
|
||||
@@ -574,7 +595,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
/**
|
||||
* @brief Maps cache
|
||||
*/
|
||||
protected $maps = NULL;
|
||||
public $maps = NULL;
|
||||
|
||||
/**
|
||||
* Get maps
|
||||
@@ -594,17 +615,17 @@ class _Conversation extends \IPS\Content\Item
|
||||
/**
|
||||
* Grant a member access
|
||||
*
|
||||
* @param \IPS\Member|array $member The member(s) to grant access
|
||||
* @param \IPS\Member|array $members The member(s) to grant access
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize( $members )
|
||||
{
|
||||
$members = is_array( $members ) ? $members : array( $members );
|
||||
$members = \is_array( $members ) ? $members : array( $members );
|
||||
|
||||
/* Go through each member */
|
||||
foreach ( $members as $member )
|
||||
{
|
||||
if ( is_int( $member ) )
|
||||
if ( \is_int( $member ) )
|
||||
{
|
||||
$member = \IPS\Member::load( $member );
|
||||
}
|
||||
@@ -672,12 +693,12 @@ class _Conversation extends \IPS\Content\Item
|
||||
*/
|
||||
public function deauthorize( $members, $banned=FALSE )
|
||||
{
|
||||
$members = is_array( $members ) ? $members : array( $members );
|
||||
$members = \is_array( $members ) ? $members : array( $members );
|
||||
foreach ( $members as $member )
|
||||
{
|
||||
unset( $this->maps[ $member->member_id ] );
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_user_active' => 0, 'map_user_banned' => $banned ), array( 'map_user_id=? AND map_topic_id=?', $member->member_id, $this->id ) );
|
||||
\IPS\Db::i()->delete( 'core_notifications', array( 'notification_key=? AND item_id = ? AND member=?', 'new_private_message', $this->id, $member->member_id ) );
|
||||
\IPS\Db::i()->delete( 'core_notifications', array( 'notification_key=? AND item_id = ? AND `member`=?', 'new_private_message', $this->id, $member->member_id ) );
|
||||
static::rebuildMessageCounts( $member );
|
||||
}
|
||||
$this->rebuildParticipants();
|
||||
@@ -709,6 +730,11 @@ class _Conversation extends \IPS\Content\Item
|
||||
$this->delete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cache member data we've already looked up so we don't have to do it again
|
||||
*/
|
||||
public static $participantMembers = array();
|
||||
|
||||
/**
|
||||
* @brief Particpant blurb
|
||||
@@ -728,13 +754,37 @@ class _Conversation extends \IPS\Content\Item
|
||||
}
|
||||
|
||||
$people = array();
|
||||
foreach( \IPS\Db::i()->select( 'member_id, name', 'core_members', array( \IPS\Db::i()->in( 'member_id', array_keys( $this->maps() ) ) ) ) as $member )
|
||||
|
||||
$memberIds = array_keys( $this->maps() );
|
||||
|
||||
foreach( $memberIds as $_idx => $memberId )
|
||||
{
|
||||
if ( $member['member_id'] === \IPS\Member::loggedIn()->member_id )
|
||||
if( isset( static::$participantMembers[ $memberId ] ) )
|
||||
{
|
||||
$member['name'] = ( $member['member_id'] == $this->starter_id ) ? \IPS\Member::loggedIn()->language()->addToStack('participant_you_upper') : \IPS\Member::loggedIn()->language()->addToStack('participant_you_lower');
|
||||
if ( $memberId === \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$people[ $memberId ] = ( $memberId == $this->starter_id ) ? \IPS\Member::loggedIn()->language()->addToStack('participant_you_upper') : \IPS\Member::loggedIn()->language()->addToStack('participant_you_lower');
|
||||
}
|
||||
else
|
||||
{
|
||||
$people[ $memberId ] = static::$participantMembers[ $memberId ];
|
||||
}
|
||||
|
||||
unset( $memberIds[ $_idx ] );
|
||||
}
|
||||
}
|
||||
|
||||
if( \count( $memberIds ) )
|
||||
{
|
||||
foreach( \IPS\Db::i()->select( 'member_id, name', 'core_members', array( \IPS\Db::i()->in( 'member_id', $memberIds ) ) ) as $member )
|
||||
{
|
||||
if ( $member['member_id'] === \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
$member['name'] = ( $member['member_id'] == $this->starter_id ) ? \IPS\Member::loggedIn()->language()->addToStack('participant_you_upper') : \IPS\Member::loggedIn()->language()->addToStack('participant_you_lower');
|
||||
}
|
||||
$people[ $member['member_id'] ] = $member['name'];
|
||||
static::$participantMembers[ $member['member_id'] ] = $member['name'];
|
||||
}
|
||||
$people[ $member['member_id'] ] = $member['name'];
|
||||
}
|
||||
|
||||
/* Move the starter to the front of the array */
|
||||
@@ -743,13 +793,13 @@ class _Conversation extends \IPS\Content\Item
|
||||
array_unshift( $people, $starter );
|
||||
unset( $starter );
|
||||
|
||||
if ( count( $people ) == 1 )
|
||||
if ( \count( $people ) == 1 )
|
||||
{
|
||||
$id = key( $people );
|
||||
$name = array_pop( $people );
|
||||
$this->participantBlurb = \IPS\Member::loggedIn()->member_id === $id ? \IPS\Member::loggedIn()->language()->addToStack( 'participant_you_upper' ) : $name;
|
||||
}
|
||||
elseif ( count( $people ) == 2 )
|
||||
elseif ( \count( $people ) == 2 )
|
||||
{
|
||||
$this->participantBlurb = \IPS\Member::loggedIn()->language()->addToStack( 'participant_two', FALSE, array( 'sprintf' => $people ) );
|
||||
}
|
||||
@@ -773,9 +823,9 @@ class _Conversation extends \IPS\Content\Item
|
||||
}
|
||||
|
||||
$sprintf[] = \IPS\Member::loggedIn()->language()->formatList( $others );
|
||||
$sprintf[] = count( $others );
|
||||
$sprintf[] = \count( $others );
|
||||
|
||||
$this->participantBlurb = \IPS\Member::loggedIn()->language()->addToStack( 'participant_three_plus', FALSE, array( 'pluralize' => array( count( $others ) ), 'sprintf' => $sprintf ) );
|
||||
$this->participantBlurb = \IPS\Member::loggedIn()->language()->addToStack( 'participant_three_plus', FALSE, array( 'pluralize' => array( \count( $others ) ), 'sprintf' => $sprintf ) );
|
||||
}
|
||||
|
||||
return $this->participantBlurb;
|
||||
@@ -793,7 +843,7 @@ class _Conversation extends \IPS\Content\Item
|
||||
{
|
||||
$member = ( $member != NULL ) ? $member : \IPS\Member::loggedIn();
|
||||
|
||||
if ( in_array( $to, array_merge( array( 'myconvo' ), array_keys( json_decode( $member->pconversation_filters, TRUE ) ) ) ) )
|
||||
if ( \in_array( $to, array_merge( array( 'myconvo' ), array_keys( json_decode( $member->pconversation_filters, TRUE ) ) ) ) )
|
||||
{
|
||||
\IPS\Db::i()->update( 'core_message_topic_user_map', array( 'map_folder_id' => $to ), array( 'map_user_id=? AND map_topic_id=?', $member->member_id, $this->id ) );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user