$tpl) { $tid = $tpl['id'] ?? ''; if ($tid === '') continue; $edit_links_by_id[$tid] = add_query_arg( [ 'action' => 'edit', 'tpl_index' => $idx, 'aigude_tpl_nonce'=> $tpl_nonce, ], $prompts_page_url ); } // Sort templates for display: provider → language → title. $templates_sorted = $templates; usort($templates_sorted, static function ($a, $b) { $pa = strtolower($a['target_provider'] ?? ''); $pb = strtolower($b['target_provider'] ?? ''); if ($pa !== $pb) { return strcmp($pa, $pb); } // Use language label for user-friendly ordering (fallback to code). $la_label = strtolower(AIGUDE_Tools_Plugin::describe_target_language_choice($a['target_provider'] ?? '', $a['target_lang'] ?? '')['label'] ?? ($a['target_lang'] ?? '')); $lb_label = strtolower(AIGUDE_Tools_Plugin::describe_target_language_choice($b['target_provider'] ?? '', $b['target_lang'] ?? '')['label'] ?? ($b['target_lang'] ?? '')); if ($la_label !== $lb_label) { return strcmp($la_label, $lb_label); } $ta = strtolower($a['title'] ?? ''); $tb = strtolower($b['title'] ?? ''); return strcmp($ta, $tb); }); $templates = $templates_sorted; // Group templates by provider for clearer separation in selects. $grouped_templates = []; foreach ($templates as $tpl) { $prov = strtolower($tpl['target_provider'] ?? ''); $label = $prov !== '' ? AIGUDE_Tools_Plugin::get_translation_provider_label($prov) : __('(No provider)', 'aigude-tools'); if (!isset($grouped_templates[$prov])) { $grouped_templates[$prov] = ['label' => $label, 'items' => []]; } $tid = $tpl['id'] ?? ''; if ($tid !== '' && isset($edit_links_by_id[$tid])) { $tpl['edit_url'] = $edit_links_by_id[$tid]; } $grouped_templates[$prov]['items'][] = $tpl; } ?>