You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

221 lines
10 KiB

{extends "layout_view.tpl"}
{block name="title"}
{title}{$title}{/title}
{/block}
{block name="navigation"}
<div class="navbar btn-group">
{permission name=goal_admin}
<a class="btn btn-primary" href="{service controller=goal action=admin}">{tr}Goal Administration{/tr}</a>
{/permission}
<a class="btn btn-primary" href="{service controller=goal action=show goalId=$goal.goalId}">{tr}View Goal{/tr}</a>
</div>
{/block}
{block name="content"}
<form method="post" action="{service controller=goal action=edit goalId=$goal.goalId}">
{tabset}
{tab name="{tr}General{/tr}"}
<div class="mb-3 row">
<div class="form-check offset-md-3">
<input type="checkbox" name="enabled" class="form-check-input" value="1" {if $goal.enabled}checked{/if}>
<label class="form-check-label" for="enabled">
{tr}Enabled{/tr}
</label>
</div>
</div>
<div class="mb-3 row">
<label for="name" class="col-form-label col-md-3">{tr}Name{/tr}</label>
<div class="col-md-9">
<input type="text" name="name" class="form-control" value="{$goal.name|escape}">
</div>
</div>
<div class="mb-3 row">
<label for="description" class="col-form-label col-md-3">{tr}Description{/tr}</label>
<div class="col-md-9">
<textarea name="description" class="form-control">{$goal.description|escape}</textarea>
</div>
</div>
{/tab}
{tab name="{tr}Eligibility{/tr}"}
<div class="mb-3 row">
<label class="col-form-label col-md-3">{tr}Goal Attribution{/tr}</label>
<div class="col-md-9">
<label class="form-label">
<input type="radio" name="type" value="user" {if $goal.type neq 'group'}checked{/if}>
{tr}Individual Goal{/tr}
</label>
<label class="form-label">
<input type="radio" name="type" value="group" {if $goal.type eq 'group'}checked{/if}>
{tr}Group Goal{/tr}
</label>
</div>
</div>
<div class="mb-3 row">
<label for="eligible" class="col-form-label col-md-3">{tr}Groups{/tr}</label>
<div class="col-md-9">
<select name="eligible[]" class="form-select" multiple>
{foreach $groups as $groupName}
<option value="{$groupName|escape}" {if in_array($groupName, $goal.eligible)} selected {/if}>{$groupName|escape}</option>
{/foreach}
</select>
</div>
</div>
{/tab}
{tab name="{tr}Conditions{/tr}"}
<div class="mb-3 row">
<label class="col-form-label col-md-3">{tr}Range Type{/tr}</label>
<div class="col-md-9">
<label class="form-label">
<input name="range_type" type="radio" value="rolling" {if $goal.daySpan} checked {/if} data-bs-target="#date-span">
{tr}Rolling{/tr}
</label>
<label class="form-label">
<input name="range_type" type="radio" value="fixed" {if ! $goal.daySpan} checked {/if} data-bs-target="#date-from,#date-to">
{tr}Fixed{/tr}
</label>
</div>
</div>
<div class="mb-3 row" id="date-span">
<label class="col-form-label col-md-3" for="daySpan">{tr}Time span{/tr}</label>
<div class="col-md-9">
<input class="form-control" name="daySpan" type="number" value="{$goal.daySpan|escape}">
<div class="form-text">
{tr}In days{/tr}
</div>
</div>
</div>
<div class="mb-3 row" id="date-from">
<label class="col-form-label col-md-3" for="from">{tr}From{/tr}</label>
<div class="col-md-9">
<input class="form-control" name="from" type="datetime" value="{$goal.from|escape}" placeholder="{tr}YYYY-MM-DD HH:MM:SS{/tr}">
</div>
</div>
<div class="mb-3 row" id="date-to">
<label class="col-form-label col-md-3" for="to">{tr}To{/tr}</label>
<div class="col-md-9">
<input class="form-control" name="to" type="datetime" value="{$goal.to|escape}" placeholder="{tr}YYYY-MM-DD HH:MM:SS{/tr}">
</div>
</div>
{jq}
$(':radio[name=range_type]').change(function () {
if ($(this).is(':checked')) {
$(':radio[name=range_type]').each(function () {
$($(this).data('target')).hide();
});
$($(this).data('target')).show();
}
}).change();
{/jq}
<div id="conditions">
{service_inline controller=goal action=render_conditions conditions=$goal.conditions|json_encode}
</div>
{/tab}
{tab name="{tr}Rewards{/tr}"}
<p>{tr}Rewards are given to individuals achieving the goal or group members for group goals.{/tr}</p>
<div id="rewards">
{service_inline controller=goal action=render_rewards rewards=$goal.rewards|json_encode}
</div>
{/tab}
{/tabset}
{jq}
var init = function (options) {
var $container = $(options.container);
var updateBlock = function (updater, postLoad) {
var $input = $(options.input);
var current = JSON.parse($input.val());
updater(current);
$container.load(options.getUrl(current), postLoad);
};
$container.on('click', '.btn.add', function (e) {
e.preventDefault();
$.openModal({
remote: $.service('goal', options.editAction, {
modal: 1
}),
open: function () {
$('form', this).submit(ajaxSubmitEventHandler(function (data) {
updateBlock(function (current) {
current.push(data[options.dataKey]);
}, function () {
$('#bootstrap-modal').modal('hide');
});
}));
}
});
});
$container.on('click', 'a.edit', function (e) {
e.preventDefault();
var key = $(this).data('element');
updateBlock(function (current) {
// Read the selected element, open an edit window
var element = current[key];
element.modal = 1;
$.openModal({
remote: $.service('goal', options.editAction, element),
open: function () {
$('form', this).submit(ajaxSubmitEventHandler(function (data) {
updateBlock(function (current) {
// Store back at the same position
current[key] = data[options.dataKey];
}, function () {
$('#bootstrap-modal').modal('hide');
});
}));
}
});
});
});
$container.on('click', '.delete', function (e) {
e.preventDefault();
var key = $(this).data('element');
updateBlock(function (current) {
// Remove the selected element - no warning, this is not saved yet
delete current[key];
});
});
};
init({
container: '#conditions',
input: 'input[name=conditions]',
editAction: 'edit_condition',
dataKey: 'condition',
getUrl: function (current) {
return $.service('goal', 'render_conditions', {
conditions: JSON.stringify(current)
});
}
});
init({
container: '#rewards',
input: 'input[name=rewards]',
editAction: 'edit_reward',
dataKey: 'reward',
getUrl: function (current) {
return $.service('goal', 'render_rewards', {
rewards: JSON.stringify(current)
});
}
});
{/jq}
<div class="mb-3 row">
<div class="offset-md-3 col-md-9">
<input type="submit" class="btn btn-primary" value="{tr}Save{/tr}">
<a href="{service controller=goal action=admin}" class="btn btn-link">{tr}Cancel{/tr}</a>
</div>
</div>
</form>
{/block}