Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add "reward maker" ext #1194

Draft
wants to merge 13 commits into
base: develop
Choose a base branch
from
Prev Previous commit
Next Next commit
fixes
CH3RVB committed Jul 18, 2024
commit ca20b8a713fe3db2cfa1524e2697854f67b425b4
2 changes: 1 addition & 1 deletion app/Http/Controllers/Admin/Data/RewardController.php
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ public function editReward(Request $request, RewardManager $service, $model, $id
}

$data = $request->only([
'reward_id', 'reward_type', 'quantity',
'rewardable_type', 'rewardable_id', 'reward_quantity'
]);

if ($id && $service->editRewards($object, $data)) {
13 changes: 7 additions & 6 deletions app/Models/ObjectReward.php
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of having an object reward model why not just have the stored assets array?

Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@ class ObjectReward extends Model
* @var array
*/
protected $fillable = [
'object_id', 'object_type', 'reward_id', 'reward_type', 'quantity',
'object_id', 'object_type', 'rewardable_id', 'rewardable_type', 'quantity',
];

/**
@@ -34,6 +34,7 @@ public function object()
switch ($this->object_type) {
case 'Prompt':
return $this->belongsTo('App\Models\Prompt\Prompt', 'object_id');
break;
}
return null;
}
@@ -43,19 +44,19 @@ public function object()
*/
public function reward()
{
switch ($this->reward_type)
switch ($this->rewardable_type)
{
case 'Item':
return $this->belongsTo('App\Models\Item\Item', 'reward_id');
return $this->belongsTo('App\Models\Item\Item', 'rewardable_id');
break;
case 'Currency':
return $this->belongsTo('App\Models\Currency\Currency', 'reward_id');
return $this->belongsTo('App\Models\Currency\Currency', 'rewardable_id');
break;
case 'LootTable':
return $this->belongsTo('App\Models\Loot\LootTable', 'reward_id');
return $this->belongsTo('App\Models\Loot\LootTable', 'rewardable_id');
break;
case 'Raffle':
return $this->belongsTo('App\Models\Raffle\Raffle', 'reward_id');
return $this->belongsTo('App\Models\Raffle\Raffle', 'rewardable_id');
break;
}
return null;
23 changes: 15 additions & 8 deletions app/Services/RewardManager.php
Original file line number Diff line number Diff line change
@@ -34,14 +34,14 @@ public function editRewards($object, $data)

$object->objectRewards()->delete();

if (isset($data['reward_type'])) {
foreach ($data['reward_type'] as $key => $type) {
if (isset($data['rewardable_type'])) {
foreach ($data['rewardable_type'] as $key => $type) {
ObjectReward::create([
'object_id' => $object->id,
'object_type' => class_basename($object),
'reward_type' => $type,
'reward_id' => $data['reward_id'][$key],
'quantity' => $data['quantity'][$key],
'rewardable_type' => $type,
'rewardable_id' => $data['rewardable_id'][$key] ?? null,
'quantity' => $data['reward_quantity'][$key],
]);
}
}
@@ -73,9 +73,15 @@ public function grantRewards($object, $user, $recipient, $logtype, $logdata)
throw new \Exception("Invalid user.");
}

$rewards = createAssetsArray();

foreach ($object->objectRewards as $reward) {
addAsset($rewards, $reward->reward, $reward->quantity);
}

// Distribute user rewards
if (!$rewards = fillUserAssets($object->objectRewards, $user, $recipient, $logtype, $logdata)) {
throw new \Exception("Failed to distribute rewards to user.");
if (!($rewards = fillUserAssets($rewards, null, $recipient, $logtype, $logdata))) {
throw new \Exception('Failed to distribute rewards to user.');
}
flash('Rewards granted successfully.')->success();

@@ -85,4 +91,5 @@ public function grantRewards($object, $user, $recipient, $logtype, $logdata)
}
return $this->rollbackReturn(false);
}
}

}
Original file line number Diff line number Diff line change
@@ -17,8 +17,8 @@ public function up()
$table->increments('id');
$table->integer('object_id');
$table->string('object_type');
$table->integer('reward_id');
$table->string('reward_type')->default('Item');
$table->integer('rewardable_id');
$table->string('rewardable_type')->default('Item');
$table->integer('quantity')->unsigned();
});
}
@@ -30,6 +30,6 @@ public function up()
*/
public function down()
{
//
Schema::dropIfExists('object_rewards');
}
}
}
4 changes: 2 additions & 2 deletions resources/views/widgets/_reward_display.blade.php
Original file line number Diff line number Diff line change
@@ -11,10 +11,10 @@
<tbody>
@foreach ($object->objectRewards as $reward)
<tr>
<td>{!! $reward->reward->displayName !!} ({{ $reward->reward_type }})</td>
<td>{!! $reward->reward->displayName !!}</td>
<td>{{ $reward->quantity }}</td>
</tr>
@endforeach
</tbody>
</table>
<hr class="my-4 w-75" />
<hr class="my-4 w-75" />
55 changes: 23 additions & 32 deletions resources/views/widgets/_reward_maker.blade.php
Original file line number Diff line number Diff line change
@@ -25,29 +25,30 @@
<tr>
<th width="35%">Reward Type</th>
<th width="35%">Reward</th>
<th width="35%">Quantity</th>
<th width="20%">Quantity</th>
<th width="10%"></th>
</tr>
</thead>
<tbody id="rewardTableBody">
@if ($rewards)
@foreach ($rewards as $reward)
<tr class="reward-row">
<td>{!! Form::select('reward_type[]', ['Item' => 'Item', 'Currency' => 'Currency', 'LootTable' => 'Loot Table', 'Raffle' => 'Raffle Ticket'], $reward->reward_type, ['class' => 'form-control reward-type', 'placeholder' => 'Select reward Type']) !!}</td>
<td>{!! Form::select('rewardable_type[]', ['Item' => 'Item', 'Currency' => 'Currency', 'LootTable' => 'Loot Table', 'Raffle' => 'Raffle'], $reward->rewardable_type, [
'class' => 'form-control reward-type selectize',
'placeholder' => 'Select Reward Type',
]) !!}</td>
<td class="reward-row-select">
@if ($reward->reward_type == 'Item')
{!! Form::select('reward_id[]', $items, $reward->reward_id, ['class' => 'form-control item-select selectize', 'placeholder' => 'Select Item']) !!}
@elseif($reward->reward_type == 'Currency')
{!! Form::select('reward_id[]', $currencies, $reward->reward_id, ['class' => 'form-control currency-select selectize', 'placeholder' => 'Select Currency']) !!}
@elseif($reward->reward_type == 'LootTable')
{!! Form::select('reward_id[]', $tables, $reward->reward_id, ['class' => 'form-control table-select selectize', 'placeholder' => 'Select Loot Table']) !!}
@elseif($reward->reward_type == 'Raffle')
{!! Form::select('reward_id[]', $raffles, $reward->reward_id, ['class' => 'form-control raffle-select selectize', 'placeholder' => 'Select Raffle']) !!}
@if ($reward->rewardable_type == 'Item')
{!! Form::select('rewardable_id[]', $items, $reward->rewardable_id, ['class' => 'form-control item-select selectize', 'placeholder' => 'Select Item']) !!}
@elseif($reward->rewardable_type == 'Currency')
{!! Form::select('rewardable_id[]', $currencies, $reward->rewardable_id, ['class' => 'form-control currency-select selectize', 'placeholder' => 'Select Currency']) !!}
@elseif($reward->rewardable_type == 'LootTable')
{!! Form::select('rewardable_id[]', $tables, $reward->rewardable_id, ['class' => 'form-control table-select selectize', 'placeholder' => 'Select Loot Table']) !!}
@elseif($reward->rewardable_type == 'Raffle')
{!! Form::select('rewardable_id[]', $raffles, $reward->rewardable_id, ['class' => 'form-control raffle-select selectize', 'placeholder' => 'Select Raffle']) !!}
@endif
</td>
<td>
{!! Form::number('quantity[]', $reward->quantity, ['class' => 'form-control', 'placeholder' => 'Set Quantity', 'min' => 1]) !!}
</td>
<td>{!! Form::text('reward_quantity[]', $reward->quantity, ['class' => 'form-control']) !!}</td>
<td class="text-right"><a href="#" class="btn btn-danger remove-reward-button">Remove</a></td>
</tr>
@endforeach
@@ -60,7 +61,7 @@


<div class="text-right">
{!! Form::submit('Edit', ['class' => 'btn btn-primary']) !!}
{!! Form::submit('Edit Rewards', ['class' => 'btn btn-primary']) !!}
</div>

{!! Form::close() !!}
@@ -71,17 +72,17 @@
<table class="table table-sm">
<tbody id="rewardRow">
<tr class="reward-row">
<td>{!! Form::select('reward_type[]', ['Item' => 'Item', 'Currency' => 'Currency', 'LootTable' => 'Loot Table', 'Raffle' => 'Raffle Ticket'], null, ['class' => 'form-control reward-type', 'placeholder' => 'Select Reward Type']) !!}</td>
<td>{!! Form::select('rewardable_type[]', ['Item' => 'Item', 'Currency' => 'Currency', 'LootTable' => 'Loot Table', 'Raffle' => 'Raffle'], null, ['class' => 'form-control reward-type selectize', 'placeholder' => 'Select Reward Type']) !!}</td>
<td class="reward-row-select"></td>
<td>{!! Form::number('quantity[]', null, ['class' => 'form-control', 'placeholder' => 'Set Quantity', 'min' => 1]) !!} </td>
<td>{!! Form::text('reward_quantity[]', 1, ['class' => 'form-control']) !!}</td>
<td class="text-right"><a href="#" class="btn btn-danger remove-reward-button">Remove</a></td>
</tr>
</tbody>
</table>
{!! Form::select('reward_id[]', $items, null, ['class' => 'form-control item-select', 'placeholder' => 'Select Item']) !!}
{!! Form::select('reward_id[]', $currencies, null, ['class' => 'form-control currency-select', 'placeholder' => 'Select Currency']) !!}
{!! Form::select('reward_id[]', $tables, null, ['class' => 'form-control table-select', 'placeholder' => 'Select Loot Table']) !!}
{!! Form::select('reward_id[]', $raffles, null, ['class' => 'form-control raffle-select', 'placeholder' => 'Select Raffle']) !!}
{!! Form::select('rewardable_id[]', $items, null, ['class' => 'form-control item-select', 'placeholder' => 'Select Item']) !!}
{!! Form::select('rewardable_id[]', $currencies, null, ['class' => 'form-control currency-select', 'placeholder' => 'Select Currency']) !!}
{!! Form::select('rewardable_id[]', $tables, null, ['class' => 'form-control table-select', 'placeholder' => 'Select Loot Table']) !!}
{!! Form::select('rewardable_id[]', $raffles, null, ['class' => 'form-control raffle-select', 'placeholder' => 'Select Raffle']) !!}
</div>


@@ -93,57 +94,47 @@
var $currencySelect = $('#rewardRowData').find('.currency-select');
var $tableSelect = $('#rewardRowData').find('.table-select');
var $raffleSelect = $('#rewardRowData').find('.raffle-select');


$('#rewardTableBody .selectize').selectize();
attachRewardTypeListener($('#rewardTableBody .reward-type'));
attachRemoveListener($('#rewardTableBody .remove-reward-button'));

$('#addReward').on('click', function(e) {
e.preventDefault();
var $clone = $rewardRow.clone();
$rewardTable.append($clone);
$clone.find('.selectize').selectize();
attachRewardTypeListener($clone.find('.reward-type'));
attachRemoveListener($clone.find('.remove-reward-button'));
});

$('.reward-type').on('change', function(e) {
var val = $(this).val();
var $cell = $(this).parent().find('.reward-row-select');

var $clone = null;
if (val == 'Item') $clone = $itemSelect.clone();
else if (val == 'Currency') $clone = $currencySelect.clone();
else if (val == 'LootTable') $clone = $tableSelect.clone();
else if (val == 'Raffle') $clone = $raffleSelect.clone();

$cell.html('');
$cell.append($clone);
});

function attachRewardTypeListener(node) {
node.on('change', function(e) {
var val = $(this).val();
var $cell = $(this).parent().parent().find('.reward-row-select');

var $clone = null;
if (val == 'Item') $clone = $itemSelect.clone();
else if (val == 'Currency') $clone = $currencySelect.clone();
else if (val == 'LootTable') $clone = $tableSelect.clone();
else if (val == 'Raffle') $clone = $raffleSelect.clone();

$cell.html('');
$cell.append($clone);
$clone.selectize();
});
}

function attachRemoveListener(node) {
node.on('click', function(e) {
e.preventDefault();
$(this).parent().parent().remove();
});
}

});
</script>
</script>