Seditio Source
Root |
./othercms/ips_4.3.4/applications/downloads/extensions/core/GroupLimits/Downloads.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 );
            } )
        );
    }
}