updated ticket create to match edit. updated IconsHelper to create template selection

This commit is contained in:
tp_dhu 2025-05-10 08:51:56 +01:00
parent 4a421564c2
commit acb428f4ee
6 changed files with 187 additions and 28 deletions

View File

@ -31,7 +31,28 @@ class IconsHelper extends \Prefab {
static public function icons($node){ static public function icons($node){
// debug_print($node);
$required = ['type', 'path'];
$check = self::checkAttributes($node, $required);
if(!is_null($check)){
return sprintf('<div class="notification is-danger is-light">%s</div>', $check);
}
$attr = $node['@attrib']; $attr = $node['@attrib'];
$type = $attr['type'];
$path = $attr['path'];
$selected = $attr['selected'];
switch($attr['type']){
case 'status-selector':
$selected = Base::instance()->get('GET.status') ?: null;
return '<?php echo \IconsHelper::instance()->renderStatusSelector("'.$selected.'", "'.$path.'"); ?>';
return self::renderStatusSelector($selected, $path);
default:
return '<div class="notification">unknown icon selector type</div>';
}
$tpl = Template::instance(); $tpl = Template::instance();
$f3 = Base::instance(); $f3 = Base::instance();
@ -43,6 +64,42 @@ class IconsHelper extends \Prefab {
} }
private static function checkAttributes($node, array $required){
if(isset($node['@attrib'])){
$attr = $node['@attrib'];
$errors = [];
foreach($required as $key){
if(empty($attr[$key])){
$errors[] = "Error: '$key' is missing.";
}
}
return empty($errors) ? null : implode(" ", $errors);
}
return "Error: '@attrib' is missing";
}
public static function renderStatusSelector($current_status, $path)
{
$output = '<div class="block"><div class="field has-addons">';
foreach (self::$status_icons as $k => $icon) {
$active = ($current_status == $k);
$url = $path . ($active ? '' : '/?status=' . $k);
$class = 'button' . ($active ? ' is-primary' : '');
$output .= '<p class="control">';
$output .= '<a href="' . $url . '" class="' . $class . '">';
$output .= '<span class="icon is-small"><i class="fas fa-' . $icon[0] . '"></i></span>';
$output .= '<span>' . self::$status_names[$k] . '</span>';
$output .= '</a>';
$output .= '</p>';
}
$output .= '</div></div>';
return $output;
}
static function do_the_switch($type, $value){ static function do_the_switch($type, $value){
if($value !== null) { if($value !== null) {

View File

@ -1,24 +1,12 @@
<h1 class="title">Create Ticket Form</h1> <!-- Ticket - View -->
<!-- made to look more in line with view-->
<form action="/ticket/create" method="POST"> <form action="/ticket/create" method="POST">
{{ \CSRFHelper::field() | raw }} {{ \CSRFHelper::field() | raw }}
<div class="is-flex"> <div class="is-flex">
<div class="is-flex-grow-1"> <div class="is-flex-grow-1">
<bulma type="FIELD_INPUT" name="title" value="" class="mr-3"></bulma> <bulma type="FIELD_INPUT" name="title" value="" class="mr-3"></bulma>
</div> </div>
<div class="field is-grouped is-grouped-right"> <div class="field is-grouped">
<div class="control">
<label class="label">Key:</label>
<input class="input" type="text" name="meta_key[]" placeholder="eg. Category">
</div>
<div class="control">
<label class="label">Value:</label>
<input class="input" type="text" name="meta_value[]" placeholder="eg. Urgent">
</div>
</div>
</div>
<div class="field is-grouped is-grouped-right">
<div class="control"> <div class="control">
<a class="button is-secondary" href="/tickets">Cancel</a> <a class="button is-secondary" href="/tickets">Cancel</a>
</div> </div>
@ -26,5 +14,56 @@
<button class="button is-primary" type="submit">Create Ticket</button> <button class="button is-primary" type="submit">Create Ticket</button>
</div> </div>
</div> </div>
</div> </div>
<hr>
<div class="block">
<div class="columns">
<div class="column is-two-thirds">
<div class="block">
<bulma type="FIELD_INPUT" name="created_at" value="" label="Created At:"></bulma>
</div>
<div class="tabs">
<ul>
<li class="is-active">
<a data-tab="write"><span class="icon is-small">
<i class="fas fa-pen" aria-hidden="true"></i></span><span>Write</span>
</a>
</li>
<li>
<a data-tab="preview"><span class="icon is-small">
<i class="fas fa-magnifying-glass"
aria-hidden="true"></i></span><span>Preview</span>
</a>
</li>
</ul>
</div>
<div id="tab-write" class="tab-content block">
<bulma type="FIELD_TEXTAREA" name="description" value="" rows="20"></bulma>
</div>
<div id="tab-preview" class="tab-content content">
<div id="preview-output"></div>
</div>
</div>
<div class="column">
<bulma type="FIELD_SELECT" label="Priority:" name="priority_id"
options="{{@priorities}}" option_value="id" option_name="name" selected="0"></bulma>
<bulma type="FIELD_SELECT" label="Status:" name="status_id"
options="{{@statuses}}" option_value="id" option_name="name" selected="0"></bulma>
<bulma type="FIELD_SELECT" label="Assigned User:" name="assigned_to"
options="{{@users}}" option_value="id" option_name="display_name" selected="0"></bulma>
</div>
</div>
</div>
</form> </form>

View File

@ -0,0 +1,52 @@
<h1 class="title">Create Ticket Form</h1>
<form action="/ticket/create" method="POST">
<bulma type="H_FIELD_INPUT" label="Title:" name="title" value=""></bulma>
<bulma type="H_FIELD_INPUT" label="Created At:" name="created_at" value=""></bulma>
<bulma type="H_FIELD_TEXTAREA" label="Description:" name="description" value=""></bulma>
<!-- priority and status -->
<bulma type="H_FIELD_SELECT_NEW" label="Priority:" name="priority_id"
options="priorities" option_value="id" option_name="name"
selected="2"></bulma>
<bulma type="H_FIELD_SELECT_NEW" label="Status:" name="status_id"
options="statuses" option_value="id" option_name="name"
selected="1"></bulma>
<!-- custom fields -->
<hr>
<div class="block">
<div class="field is-grouped is-grouped-right">
<div class="control">
<label class="label">Key:</label>
<input class="input" type="text" name="meta_key[]" placeholder="eg. Department">
</div>
<div class="control">
<label class="label">Value:</label>
<input class="input" type="text" name="meta_value[]" placeholder="eg. Finance">
</div>
</div>
<div class="field is-grouped is-grouped-right">
<div class="control">
<label class="label">Key:</label>
<input class="input" type="text" name="meta_key[]" placeholder="eg. Category">
</div>
<div class="control">
<label class="label">Value:</label>
<input class="input" type="text" name="meta_value[]" placeholder="eg. Urgent">
</div>
</div>
</div>
<div class="field is-grouped is-grouped-right">
<div class="control">
<a class="button is-secondary" href="/tickets">Cancel</a>
</div>
<div class="control">
<button class="button is-primary" type="submit">Create Ticket</button>
</div>
</div>
</div>
</form>

View File

@ -20,7 +20,13 @@
</div> </div>
</div> </div>
</div> </div>
<div class="block"> <div class="block">
<icons type="status-selector" selected="{{ @GET.status ?: null }}" path="tickets"></icons>25
</div>
<exclude>
<div class="block">
<div class="field has-addons"> <div class="field has-addons">
<!-- TODO: move this into a template --> <!-- TODO: move this into a template -->
<repeat group="{{ IconsHelper::$status_icons}}" key="{{ @k }}" value="{{ @icon }}"> <repeat group="{{ IconsHelper::$status_icons}}" key="{{ @k }}" value="{{ @icon }}">
@ -32,7 +38,8 @@
</p> </p>
</repeat> </repeat>
</div> </div>
</div> </div>
</exclude>
<hr> <hr>
<div id="ticket_list"> <div id="ticket_list">

View File

@ -30,7 +30,6 @@
<div class="block"> <div class="block">
<h6 class="title is-6">Tags <h6 class="title is-6">Tags
<span class="icon"><i class="fas fa-cog"></i></span></h6> <span class="icon"><i class="fas fa-cog"></i></span></h6>
<!-- tags --> <!-- tags -->
<div class="block"> <div class="block">
<div class="tags"> <div class="tags">
@ -45,10 +44,9 @@
<h6 class="title is-6">Projects <h6 class="title is-6">Projects
<span class="icon"><i class="fas fa-cog"></i></span></h6> <span class="icon"><i class="fas fa-cog"></i></span></h6>
<hr> <hr>
<h6 class="title is-6">Assignees</h6> <h6 class="title is-6">Assigned User:</h6>
<check if="{{ @assigned_user }}"> <check if="{{ @assigned_user }}">
<div class="block"> <div class="block">
<h4 class="title">Assigned User</h4>
<p>{{ @assigned_user.display_name ?: @assigned_user.username }}</p> <p>{{ @assigned_user.display_name ?: @assigned_user.username }}</p>
</div> </div>
</check> </check>
@ -84,6 +82,7 @@
</div> </div>
</check> </check>
<form action="/ticket/{{ @ticket.id }}/add-subtask" method="POST"> <form action="/ticket/{{ @ticket.id }}/add-subtask" method="POST">
{{ \CSRFHelper::field() | raw }}
<div class="field"> <div class="field">
<label class="label">Add existing ticket as child ticket (ID):</label> <label class="label">Add existing ticket as child ticket (ID):</label>
<div class="control"> <div class="control">

View File

@ -1,5 +1,10 @@
<?php <?php
function debug_print($obj)
{
printf('<pre>%s</pre>', print_r($obj,1));
}
require '../lib/autoload.php'; require '../lib/autoload.php';
$f3 = \Base::instance(); $f3 = \Base::instance();