Version 4.7.0
This commit is contained in:
1 parent
517a5e1f70
commit
8ba7d43898
1933 files changed
+65613
-11332
No files matched your search
@@ -161,7 +161,7 @@ class _Rule extends \IPS\Node\Model
|
||||
$extraElements[] = $filterElement;
|
||||
}
|
||||
|
||||
$awardTo = $achievementAction->awardOptions();
|
||||
$awardTo = $achievementAction->awardOptions( $this->filters );
|
||||
$awardSubjectField = new \IPS\Helpers\Form\Custom( "{$exploded[1]}_{$exploded[5]}_award_subject", [ 'points' => $this->points_subject, 'badge' => $this->badge_subject ], FALSE, [
|
||||
'getHtml' => function( $field ) {
|
||||
return \IPS\Theme::i()->getTemplate('achievements')->awardField( $field->name, $field->value );
|
||||
@@ -228,7 +228,7 @@ class _Rule extends \IPS\Node\Model
|
||||
{
|
||||
if ( isset( $values[$values['achievement_rule_action'] . '_award_' . $type . '_badge'] ) )
|
||||
{
|
||||
if ( $values[$values['achievement_rule_action'] . '_award_subject']['badge'] )
|
||||
if ( $values[$values['achievement_rule_action'] . '_award_' . $type]['badge'] )
|
||||
{
|
||||
\IPS\Lang::saveCustom( 'core', "core_award_" . $type . "_badge_{$this->id}", $values[$values['achievement_rule_action'] . '_award_' . $type . '_badge'] );
|
||||
}
|
||||
@@ -244,7 +244,7 @@ class _Rule extends \IPS\Node\Model
|
||||
$return = [
|
||||
'action' => $values['achievement_rule_action'],
|
||||
'filters' => $filters ? json_encode( $filters ) : NULL,
|
||||
'milestone' => isset( $filters['milestone'] ) ? $filters['milestone'] : NULL,
|
||||
'milestone' => ( isset( $filters['milestone'] ) and \is_numeric( $filters['milestone'] ) ) ? $filters['milestone'] : NULL,
|
||||
'points_subject'=> \intval( $values[ $values['achievement_rule_action'] . '_award_subject' ]['points'] ),
|
||||
'badge_subject' => $values[ $values['achievement_rule_action'] . '_award_subject' ]['badge'] ? \intval( $values[ $values['achievement_rule_action'] . '_award_subject' ]['badge'] ): NULL,
|
||||
'points_other' => \intval( isset( $values[ $values['achievement_rule_action'] . '_award_other' ] ) ? $values[ $values['achievement_rule_action'] . '_award_other' ]['points'] : 0 ),
|
||||
@@ -322,10 +322,33 @@ class _Rule extends \IPS\Node\Model
|
||||
{
|
||||
parent::delete();
|
||||
|
||||
\IPS\Db::i()->delete( 'core_achievements_log_milestones', array( 'milestone_rule=?', $this->id ) );
|
||||
|
||||
\IPS\Lang::deleteCustom( 'core', "core_award_subject_badge_{$this->id}" );
|
||||
\IPS\Lang::deleteCustom( 'core', "core_award_other_badge_{$this->id}" );
|
||||
}
|
||||
|
||||
/**
|
||||
* [Node] Clone the rule
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __clone()
|
||||
{
|
||||
if ( $this->skipCloneDuplication === TRUE ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$oldId = $this->id;
|
||||
|
||||
parent::__clone();
|
||||
|
||||
foreach ( array( 'subject' => "core_award_subject_badge_{$this->id}", 'other' => "core_award_other_badge_{$this->id}") as $fieldKey => $langKey ) {
|
||||
$oldLangKey = str_replace( $this->id, $oldId, $langKey );
|
||||
\IPS\Lang::saveCustom( 'core', $langKey, iterator_to_array(\IPS\Db::i()->select( 'word_custom, lang_id', 'core_sys_lang_words', array('word_key=?', $oldLangKey ) )->setKeyField('lang_id')->setValueField('word_custom' ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get details about the rebuild progress so far
|
||||
*
|
||||
@@ -360,6 +383,7 @@ class _Rule extends \IPS\Node\Model
|
||||
public static function rebuildAllAchievements( ?\IPS\DateTime $time )
|
||||
{
|
||||
\IPS\Db::i()->delete( 'core_achievements_log' );
|
||||
\IPS\Db::i()->delete( 'core_achievements_log_milestones' );
|
||||
\IPS\Db::i()->delete( 'core_points_log' );
|
||||
\IPS\Db::i()->delete( 'core_member_badges', [ 'rule > 0' ] ); /* 0 is a manually awarded badge. Don't hate the coder, hate the player */
|
||||
\IPS\Db::i()->update( 'core_members', [ 'achievements_points' => 0 ] );
|
||||
@@ -410,7 +434,12 @@ class _Rule extends \IPS\Node\Model
|
||||
{
|
||||
foreach( $rules as $ruleId => $rule )
|
||||
{
|
||||
static::load( $ruleId )->delete();
|
||||
try
|
||||
{
|
||||
static::load( $ruleId )->delete();
|
||||
}
|
||||
catch( \OutOfRangeException $e ){}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -450,6 +479,12 @@ class _Rule extends \IPS\Node\Model
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Skip the forum related rule if we don't have forums installed */
|
||||
if ( $xml->name == 'action' AND !static::canImport( $xml->readString() ) )
|
||||
{
|
||||
continue 2;
|
||||
}
|
||||
|
||||
switch ( $xml->name )
|
||||
{
|
||||
case 'action':
|
||||
@@ -566,4 +601,49 @@ class _Rule extends \IPS\Node\Model
|
||||
|
||||
unset( \IPS\Data\Store::i()->achievementRules );
|
||||
}
|
||||
|
||||
/**
|
||||
* Only import the node if the application is installed
|
||||
*
|
||||
* @param string $value Actionname
|
||||
* @return bool
|
||||
*/
|
||||
public static function canImport( string $value ) : bool
|
||||
{
|
||||
$appKey = explode( '_', $value );
|
||||
return \IPS\Application::appIsEnabled( $appKey[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Does this rule have a milestone set?
|
||||
*
|
||||
* @param array|null $filters Actionname
|
||||
* @return bool
|
||||
*/
|
||||
public static function ruleHasMilestone( ?array $filters ): bool
|
||||
{
|
||||
if ( \is_array( $filters ) and \count( $filters ) )
|
||||
{
|
||||
foreach( $filters as $key => $value )
|
||||
{
|
||||
if ( mb_substr( $key, 0, 9 ) == 'milestone' )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* [Node] Get the title to store in the log
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function titleForLog()
|
||||
{
|
||||
$exploded = explode( '_', $this->action );
|
||||
return \IPS\Lang::load( \IPS\Lang::defaultLanguage() )->get( 'AchievementAction__' . $exploded[1] . '_title' ) . " #" . $this->id;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user