Version 5.0.0 beta 1
This commit is contained in:
1 parent
25ddeb65d6
commit
15c7beabc5
6736 files changed
+627902
-497943
No files matched your search
@@ -11,48 +11,65 @@
|
||||
namespace IPS\core\widgets;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
|
||||
use IPS\core\Achievements\Badge;
|
||||
use IPS\core\Achievements\Rank;
|
||||
use IPS\Db;
|
||||
use IPS\Helpers\Form;
|
||||
use IPS\Helpers\Form\CheckboxSet;
|
||||
use IPS\Helpers\Form\Number;
|
||||
use IPS\Helpers\Form\Translatable;
|
||||
use IPS\Lang;
|
||||
use IPS\Member;
|
||||
use IPS\Member\Group;
|
||||
use IPS\Settings;
|
||||
use IPS\Widget\Customizable;
|
||||
use IPS\Widget\StaticCache;
|
||||
use OutOfRangeException;
|
||||
use function count;
|
||||
use function defined;
|
||||
use function in_array;
|
||||
use function is_array;
|
||||
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* achievements Widget
|
||||
*/
|
||||
class _achievements extends \IPS\Widget\StaticCache
|
||||
class achievements extends StaticCache implements Customizable
|
||||
{
|
||||
/**
|
||||
* @brief Widget Key
|
||||
*/
|
||||
public $key = 'achievements';
|
||||
public string $key = 'achievements';
|
||||
|
||||
/**
|
||||
* @brief App
|
||||
*/
|
||||
public $app = 'core';
|
||||
public string $app = 'core';
|
||||
|
||||
/**
|
||||
* @brief Plugin
|
||||
*/
|
||||
public $plugin = '';
|
||||
|
||||
|
||||
/**
|
||||
* Specify widget configuration
|
||||
*
|
||||
* @param null|\IPS\Helpers\Form $form Form object
|
||||
* @return null|\IPS\Helpers\Form
|
||||
* @param null|Form $form Form object
|
||||
* @return Form
|
||||
*/
|
||||
public function configuration( &$form=null )
|
||||
public function configuration( Form &$form=null ): Form
|
||||
{
|
||||
$form = parent::configuration( $form );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Translatable( 'widget_feed_title', isset( $this->configuration['language_key'] ) ? NULL : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_widget_title' ), FALSE, array( 'app' => 'core', 'key' => ( isset( $this->configuration['language_key'] ) ? $this->configuration['language_key'] : NULL ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'achievements_to_show', isset( $this->configuration['achievements_to_show'] ) ? explode( ',', $this->configuration['achievements_to_show'] ) : [ 'badges', 'ranks' ], TRUE, [ 'options' => [
|
||||
$form->add( new Translatable( 'widget_feed_title', isset( $this->configuration['language_key'] ) ? NULL : Member::loggedIn()->language()->addToStack( 'achievements_widget_title' ), FALSE, array( 'app' => 'core', 'key' => ( $this->configuration['language_key'] ?? NULL ) ) ) );
|
||||
$form->add( new CheckboxSet( 'achievements_to_show', isset( $this->configuration['achievements_to_show'] ) ? explode( ',', $this->configuration['achievements_to_show'] ) : [ 'badges', 'ranks' ], TRUE, [ 'options' => [
|
||||
'badges' => 'block_achievements_badges',
|
||||
'ranks' => 'block_achievements_rank',
|
||||
] ] ) );
|
||||
$form->add( new \IPS\Helpers\Form\Number( 'number_to_show', isset( $this->configuration['number_to_show'] ) ? $this->configuration['number_to_show'] : 5, TRUE, array( 'max' => 25 ) ) );
|
||||
$form->add( new Number( 'number_to_show', $this->configuration['number_to_show'] ?? 5, TRUE, array( 'max' => 25 ) ) );
|
||||
return $form;
|
||||
}
|
||||
|
||||
@@ -62,14 +79,14 @@ class _achievements extends \IPS\Widget\StaticCache
|
||||
* @param array $values Values from form
|
||||
* @return array
|
||||
*/
|
||||
public function preConfig( $values )
|
||||
public function preConfig( array $values ): array
|
||||
{
|
||||
if ( !isset( $this->configuration['language_key'] ) )
|
||||
{
|
||||
$this->configuration['language_key'] = 'widget_title_' . md5( mt_rand() );
|
||||
}
|
||||
$values['language_key'] = $this->configuration['language_key'];
|
||||
\IPS\Lang::saveCustom( 'core', $this->configuration['language_key'], $values['widget_feed_title'] );
|
||||
Lang::saveCustom( 'core', $this->configuration['language_key'], $values['widget_feed_title'] );
|
||||
unset( $values['widget_feed_title'] );
|
||||
|
||||
$values['achievements_to_show'] = implode( ',', $values['achievements_to_show'] );
|
||||
@@ -81,14 +98,14 @@ class _achievements extends \IPS\Widget\StaticCache
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render()
|
||||
public function render(): string
|
||||
{
|
||||
$result = [];
|
||||
$toShow = explode( ',', ( $this->configuration['achievements_to_show'] ?? 'badges,ranks' ) );
|
||||
$countToShow = $this->configuration['number_to_show'] ?? 5;
|
||||
$exclude = json_decode( \IPS\Settings::i()->rules_exclude_groups, TRUE );
|
||||
$exclude = json_decode( Settings::i()->rules_exclude_groups, TRUE );
|
||||
|
||||
foreach( \IPS\Member\Group::groups() as $group )
|
||||
foreach( Group::groups() as $group )
|
||||
{
|
||||
if( ! $group->g_view_board )
|
||||
{
|
||||
@@ -96,74 +113,74 @@ class _achievements extends \IPS\Widget\StaticCache
|
||||
}
|
||||
}
|
||||
|
||||
if ( \is_array( $exclude ) and \count( $exclude ) )
|
||||
if ( is_array( $exclude ) and count( $exclude ) )
|
||||
{
|
||||
$subWhere[] = [ \IPS\Db::i()->in( 'member_group_id', $exclude ) . ' OR ' . \IPS\Db::i()->findInSet( 'mgroup_others', $exclude ) ];
|
||||
$subWhere[] = [ Db::i()->in( 'member_group_id', $exclude ) . ' OR ' . Db::i()->findInSet( 'mgroup_others', $exclude ) ];
|
||||
}
|
||||
|
||||
$subWhere[] = [ 'temp_ban != 0 OR ' . \IPS\Db::i()->bitwiseWhere( \IPS\Member::$bitOptions['members_bitoptions'], 'bw_is_spammer' ) ];
|
||||
$subQuery = \IPS\Db::i()->select( 'member_id', 'core_members', $subWhere );
|
||||
$subWhere[] = [ 'temp_ban != 0 OR ' . Db::i()->bitwiseWhere( Member::$bitOptions['members_bitoptions'], 'bw_is_spammer' ) ];
|
||||
$subQuery = Db::i()->select( 'member_id', 'core_members', $subWhere );
|
||||
|
||||
if ( \IPS\core\Achievements\Badge::show() and \in_array( 'badges', $toShow ) )
|
||||
if ( Badge::show() and in_array( 'badges', $toShow ) )
|
||||
{
|
||||
foreach ( \IPS\Db::i()->select( '*', 'core_member_badges', ( $subQuery ? [ \IPS\Db::i()->in( 'core_member_badges.member', $subQuery, TRUE ) ] : NULL ), 'datetime DESC', $countToShow )->join( 'core_badges', 'core_member_badges.badge=core_badges.id' ) as $earnedBadge )
|
||||
foreach ( Db::i()->select( '*', 'core_member_badges', ( $subQuery ? [ Db::i()->in( 'core_member_badges.member', $subQuery, TRUE ) ] : NULL ), 'datetime DESC', $countToShow )->join( 'core_badges', 'core_member_badges.badge=core_badges.id' ) as $earnedBadge )
|
||||
{
|
||||
try
|
||||
{
|
||||
$member = \IPS\Member::load( $earnedBadge['member'] );
|
||||
$member = Member::load( $earnedBadge['member'] );
|
||||
if ( !$member->member_id )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
throw new OutOfRangeException;
|
||||
}
|
||||
|
||||
$result[] = [
|
||||
'type' => 'badge',
|
||||
'badge' => \IPS\core\Achievements\Badge::constructFromData( $earnedBadge ),
|
||||
'badge' => Badge::constructFromData( $earnedBadge ),
|
||||
'member' => $member,
|
||||
'date' => $earnedBadge['datetime']
|
||||
];
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) { }
|
||||
catch ( OutOfRangeException $e ) { }
|
||||
}
|
||||
}
|
||||
|
||||
if ( \IPS\core\Achievements\Rank::show() and \in_array( 'ranks', $toShow ) )
|
||||
if ( Rank::show() and in_array( 'ranks', $toShow ) )
|
||||
{
|
||||
$query = [ [ 'new_rank IS NOT NULL' ] ];
|
||||
|
||||
if ( $subQuery )
|
||||
{
|
||||
$query[] = [ \IPS\Db::i()->in( 'core_points_log.member', $subQuery, TRUE ) ];
|
||||
$query[] = [ Db::i()->in( 'core_points_log.member', $subQuery, TRUE ) ];
|
||||
}
|
||||
|
||||
foreach ( \IPS\Db::i()->select( '*', 'core_points_log', $query, 'datetime DESC', $countToShow ) as $earnedRank )
|
||||
foreach ( Db::i()->select( '*', 'core_points_log', $query, 'datetime DESC', $countToShow ) as $earnedRank )
|
||||
{
|
||||
try
|
||||
{
|
||||
$member = \IPS\Member::load( $earnedRank['member'] );
|
||||
$member = Member::load( $earnedRank['member'] );
|
||||
if ( !$member->member_id )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
throw new OutOfRangeException;
|
||||
}
|
||||
|
||||
$result[] = [
|
||||
'type' => 'rank',
|
||||
'rank' => \IPS\core\Achievements\Rank::load( $earnedRank['new_rank'] ),
|
||||
'rank' => Rank::load( $earnedRank['new_rank'] ),
|
||||
'member' => $member,
|
||||
'date' => $earnedRank['datetime']
|
||||
];
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) { }
|
||||
catch ( OutOfRangeException $e ) { }
|
||||
}
|
||||
}
|
||||
|
||||
if ( ( \IPS\core\Achievements\Badge::show() and \in_array( 'badges', $toShow ) ) and ( \IPS\core\Achievements\Rank::show() and \in_array( 'ranks', $toShow ) ) )
|
||||
if ( ( Badge::show() and in_array( 'badges', $toShow ) ) and ( Rank::show() and in_array( 'ranks', $toShow ) ) )
|
||||
{
|
||||
usort( $result, function( $a, $b ) { return $b['date'] <=> $a['date']; } );
|
||||
$result = array_splice( $result, 0, $countToShow );
|
||||
}
|
||||
|
||||
return $result ? $this->output( $result, isset( $this->configuration['language_key'] ) ? \IPS\Member::loggedIn()->language()->addToStack( $this->configuration['language_key'], FALSE, array( 'escape' => TRUE ) ) : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_widget_title' ) ) : '';
|
||||
return $result ? $this->output( $result, isset( $this->configuration['language_key'] ) ? Member::loggedIn()->language()->addToStack( $this->configuration['language_key'], FALSE, array( 'escape' => TRUE ) ) : Member::loggedIn()->language()->addToStack( 'achievements_widget_title' ) ) : '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -171,8 +188,8 @@ class _achievements extends \IPS\Widget\StaticCache
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function delete()
|
||||
public function delete() : void
|
||||
{
|
||||
\IPS\Lang::deleteCustom( 'core', $this->configuration['language_key'] );
|
||||
Lang::deleteCustom( 'core', $this->configuration['language_key'] );
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user