Version 4.7.6

This commit is contained in:
Neo committed 2025-12-19 16:05:19 -08:00
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;
}
}