['fas fa-circle-dot has-text-success', "new"], 'in_progress' => ['fas fa-circle-play has-text-link', "reload"], 'on_hold' => ['fas fa-pause-circle has-text-warning',"pause"], 'completed' => ['fas fa-check has-text-danger', "check"] ]; static public $status_names = [ 'open' => 'Open', 'in_progress' => 'In Progress', 'on_hold' => 'On Hold', 'completed' => 'Completed' ]; static public $priority_icons = [ 'Low' => ['fas fa-circle-down',"green"], 'Medium' => ['fas fa-circle-dot', "yellow"], 'High' => ['fas fa-circle-up', "red"] ]; static public $priority_colors = [ 'Low' => 'success', 'Medium' => 'warning', 'High' => 'danger', '' => 'info' ]; static public function icons($node){ // debug_print($node); $required = ['type', 'path']; $check = self::checkAttributes($node, $required); if(!is_null($check)){ return sprintf('
%s
', $check); } $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 'renderStatusSelector("'.$selected.'", "'.$path.'"); ?>'; return self::renderStatusSelector($selected, $path); default: return '
unknown icon selector type
'; } $tpl = Template::instance(); $f3 = Base::instance(); $context = $f3->hive(); $inner = $tpl->token($node[0], $context); return ''; } 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 = '
'; foreach (self::$status_icons as $k => $icon) { $active = ($current_status == $k); $url = $path . ($active ? '' : '/?status=' . $k); $class = 'button' . ($active ? ' is-primary' : ''); $output .= '

'; $output .= ''; $output .= ''; $output .= '' . self::$status_names[$k] . ''; $output .= ''; $output .= '

'; } $output .= '
'; return $output; } static function do_the_switch($type, $value){ if($value !== null) { $value = str_replace(' ', '_', strtolower($value)); } $icon_class = ''; switch(strtolower($type)){ case 'status': $icon_class = IconsHelper::$status_icons[$value] ?? ['fas fa-question-circle has-text-info', "🔲"]; break; case 'priority': $icon_class = IconsHelper::$priority_icons[$value] ?? ['fas fa-question-circle', "🔲"]; $icon_color = IconsHelper::$priority_colors[$value] ?? 'info'; break; default: $icon_class = 'fas fa-question-circle'; } if($type == 'priority'){ // return '

' return ' '; } else { return ''; } return ''.$icon_class[1].''; } } \Template::instance()->extend('icons', 'IconsHelper::icons');