94 lines
2.1 KiB
PHP
94 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* @brief Group Limits
|
|
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
|
|
* @copyright (c) Invision Power Services, Inc.
|
|
* @license https://www.invisioncommunity.com/legal/standards/
|
|
* @package Invision Community
|
|
* @subpackage Downloads
|
|
* @since 21 Nov 2013
|
|
*/
|
|
|
|
namespace IPS\downloads\extensions\core\GroupLimits;
|
|
|
|
/* To prevent PHP errors (extending class does not exist) revealing path */
|
|
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
|
{
|
|
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Group Limits
|
|
*
|
|
* This extension is used to define which limit values "win" when a user has secondary groups defined
|
|
*/
|
|
class _Downloads
|
|
{
|
|
/**
|
|
* Get group limits by priority
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getLimits()
|
|
{
|
|
return array (
|
|
'exclude' => array(),
|
|
'lessIsMore' => array( 'idm_wait_period' ),
|
|
'neg1IsBest' => array(),
|
|
'zeroIsBest' => array( 'idm_throttling' ),
|
|
'callback' => array( 'idm_restrictions' => function( $a, $b, $k )
|
|
{
|
|
// Decode
|
|
if ( isset( $a[ $k ] ) AND $a[ $k ] )
|
|
{
|
|
$a = json_decode( $a[ $k ], TRUE );
|
|
}
|
|
else
|
|
{
|
|
if( !isset( $b[ $k ] ) )
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return $b[ $k ];
|
|
}
|
|
if ( isset( $b[ $k ] ) AND $b[ $k ] )
|
|
{
|
|
$b = json_decode( $b[ $k ], TRUE );
|
|
}
|
|
else
|
|
{
|
|
if( !isset( $a[ $k ] ) )
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return json_encode( $a[ $k ] );
|
|
}
|
|
$return = array();
|
|
|
|
// Lower is better
|
|
foreach ( array( 'limit_sim', 'min_posts' ) as $k )
|
|
{
|
|
$return[ $k ] = ( $a[ $k ] < $b[ $k ] ) ? $a[ $k ] : $b[ $k ];
|
|
}
|
|
|
|
// Higher is better
|
|
foreach ( array( 'daily_bw', 'weekly_bw', 'monthly_bw', 'daily_dl', 'weekly_dl', 'monthly_dl' ) as $k )
|
|
{
|
|
if( $a[ $k ] == 0 OR $b[ $k ] == 0 )
|
|
{
|
|
$return[ $k ] = 0;
|
|
continue;
|
|
}
|
|
|
|
$return[ $k ] = ( $a[ $k ] > $b[ $k ] ) ? $a[ $k ] : $b[ $k ];
|
|
}
|
|
|
|
// Encode
|
|
return json_encode( $return );
|
|
} )
|
|
);
|
|
}
|
|
} |