Version 4.7.6
This commit is contained in:
1 parent
8ba7d43898
commit
7b7404e741
1085 files changed
+30590
-7837
No files matched your search
@@ -98,6 +98,11 @@ class _Report extends \IPS\Content\Item implements \IPS\Content\ReadMarkers
|
||||
* @brief Title
|
||||
*/
|
||||
public static $title = 'report';
|
||||
|
||||
/**
|
||||
* @brief [Content\Item] Include these items in trending content
|
||||
*/
|
||||
public static $includeInTrending = FALSE;
|
||||
|
||||
/**
|
||||
* Should posting this increment the poster's post count?
|
||||
@@ -602,4 +607,113 @@ class _Report extends \IPS\Content\Item implements \IPS\Content\ReadMarkers
|
||||
'read', 'unread', 'report_status_1', 'report_status_2', 'report_status_3'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the where clause for finding reports
|
||||
*
|
||||
* @param \IPS\Member|null $member Member to base permissions on
|
||||
* @return array
|
||||
*/
|
||||
public static function where( \IPS\Member $member=NULL ): array
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
$classWhere = [];
|
||||
$extensionWhere = [];
|
||||
$viewPermIds = [];
|
||||
$perms = $member->modPermissions();
|
||||
|
||||
foreach( \IPS\Db::i()->select( 'app, perm_id', 'core_permission_index', \IPS\Db::i()->findInSet( 'perm_view', $member->permissionArray() ) . " OR perm_view='*'" ) as $perm )
|
||||
{
|
||||
$viewPermIds[ $perm['app'] ][] = $perm['perm_id'];
|
||||
}
|
||||
|
||||
foreach ( array_merge( ['IPS\core\Messenger\Conversation', 'IPS\core\Messenger\Message'], array_values( \IPS\Content::routedClasses( FALSE, TRUE ) ) ) as $class )
|
||||
{
|
||||
/* Got nodes? */
|
||||
$item = NULL;
|
||||
if ( is_subclass_of( $class, "IPS\Content\Item" ) )
|
||||
{
|
||||
$item = $class;
|
||||
}
|
||||
else if ( is_subclass_of( $class, "IPS\Content\Comment" ) or is_subclass_of( $class, "IPS\Content\Review" ) )
|
||||
{
|
||||
if ( isset( $class::$itemClass ) )
|
||||
{
|
||||
$item = $class::$itemClass;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! $item )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$extensionWhereClause = '';
|
||||
if ( isset( $item::$containerNodeClass ) )
|
||||
{
|
||||
$container = $item::$containerNodeClass;
|
||||
if ( isset( $container::$modPerm ) )
|
||||
{
|
||||
if ( isset( $perms[$container::$modPerm] ) and $perms[$container::$modPerm] != '*' and $perms[$container::$modPerm] != '-1')
|
||||
{
|
||||
$extensionWhereClause = ' AND ' . \IPS\Db::i()->in( 'node_id', $perms[$container::$modPerm] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$workingClass = $class;
|
||||
if ( isset( $workingClass::$itemClass ) )
|
||||
{
|
||||
$workingClass = $workingClass::$itemClass;
|
||||
}
|
||||
if ( isset( $workingClass::$containerNodeClass ) )
|
||||
{
|
||||
$workingClass = $workingClass::$containerNodeClass;
|
||||
}
|
||||
if ( isset( $workingClass::$permissionMap ) and isset( $workingClass::$permissionMap['read'] ) and $workingClass::$permissionMap['read'] !== 'view' )
|
||||
{
|
||||
if ( !isset( $permIds[ $class::$application ][ $workingClass::$permissionMap['read'] ] ) )
|
||||
{
|
||||
$permIds[ $class::$application ][ $workingClass::$permissionMap['read'] ] = iterator_to_array( \IPS\Db::i()->select( 'perm_id', 'core_permission_index', "(" . \IPS\Db::i()->findInSet( 'perm_' . $workingClass::$permissionMap['read'], \IPS\Member::loggedIn()->permissionArray() ) . " OR perm_" . $workingClass::$permissionMap['read'] . "='*' ) AND app='{$class::$application}'" ) );
|
||||
}
|
||||
|
||||
if( isset( $viewPermIds[ $class::$application ] ) AND !empty( $permIds[ $class::$application ][ $workingClass::$permissionMap['read'] ] ) )
|
||||
{
|
||||
$classWhere[] = "( ( class='" . str_replace( '\\', '\\\\', $class ) . "' AND ( perm_id IN(" . implode( ',', array_intersect( $viewPermIds[ $class::$application ], $permIds[ $class::$application ][ $workingClass::$permissionMap['read'] ] ) ) . ") ) OR perm_id IS NULL )" . $extensionWhereClause . ")";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isset( $class::$application ) and isset( $viewPermIds[ $class::$application ] ) )
|
||||
{
|
||||
$classWhere[] = "( ( class='" . str_replace( '\\', '\\\\', $class ) . "' AND ( perm_id IN(" . implode( ',', $viewPermIds[ $class::$application ] ) . ") ) OR perm_id IS NULL )" . $extensionWhereClause . ")";
|
||||
}
|
||||
else
|
||||
{
|
||||
$classWhere[] = "( class='" . str_replace( '\\', '\\\\', $class ) . "' )";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [ '(' . implode( ' OR ', array_values( $classWhere ) ) . ')' ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Can view this entry
|
||||
*
|
||||
* @param \IPS\Member|NULL $member The member or NULL for currently logged in member.
|
||||
* @return bool
|
||||
*/
|
||||
public function canView( $member = NULL )
|
||||
{
|
||||
$member = $member ?: \IPS\Member::loggedIn();
|
||||
|
||||
$return = parent::canView($member);
|
||||
|
||||
if ( $return AND $member->modPermission('can_view_reports') )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user