getFromDB($entities_id) || !$entity->can($entities_id, UPDATE)) { Html::displayRightError(); } global $DB; if ($action === 'sync') { $metadata = PluginRedmineRedmineapi::syncMetadata(); if ($metadata !== false) { $DB->update('glpi_plugin_redmine_configs', [ 'metadata_cache' => json_encode($metadata) ], ['id' => 1]); PluginRedmineRedmineapi::syncUsers(); Session::addMessageAfterRedirect(__('Metadados sincronizados com sucesso!', 'redmine')); } else { Session::addMessageAfterRedirect(__('Erro ao sincronizar com o Redmine.', 'redmine'), false, ERROR); } } elseif ($action === 'set_category') { $DB->update('glpi_plugin_redmine_entities', [ 'default_category_id' => (int) ($_POST['default_category_id'] ?? 0) ], [ 'entities_id' => $entities_id ]); Session::addMessageAfterRedirect(__('Categoria padrão salva com sucesso!', 'redmine')); } elseif ($action === 'unlink') { $DB->delete('glpi_plugin_redmine_entities', ['entities_id' => $entities_id]); Session::addMessageAfterRedirect(__('Entidade desvinculada do Redmine.', 'redmine')); } elseif ($action === 'process') { $redmine_project_id = $_POST['redmine_project_id'] ?? ''; if (!empty($redmine_project_id)) { // LINK OPERATION $DB->insert('glpi_plugin_redmine_entities', [ 'entities_id' => $entities_id, 'redmine_project_id' => $redmine_project_id ]); Session::addMessageAfterRedirect(__('Entidade vinculada com sucesso!', 'redmine')); } else { // CREATE OPERATION $payload = [ 'name' => $_POST['name'], 'identifier' => $_POST['identifier'], 'description' => $_POST['description'], 'is_public' => !empty($_POST['is_public']) ]; if (!empty($_POST['parent_id'])) { $payload['parent_id'] = $_POST['parent_id']; } if (!empty($_POST['enabled_module_names'])) { $payload['enabled_module_names'] = $_POST['enabled_module_names']; } // Custom fields de projeto (obrigatórios em alguns Redmine). // O empty-choice do dropdown envia '0' — descartar junto com vazios. if (!empty($_POST['custom_field_values']) && is_array($_POST['custom_field_values'])) { $cfv = []; foreach ($_POST['custom_field_values'] as $cfid => $cfval) { if ($cfval !== '' && $cfval !== null && $cfval !== '0' && $cfval !== 0) { $cfv[(string) (int) $cfid] = $cfval; } } if (!empty($cfv)) { $payload['custom_field_values'] = $cfv; } } $new_redmine_id = PluginRedmineRedmineapi::createProjectFull($payload); if ($new_redmine_id) { $DB->insert('glpi_plugin_redmine_entities', [ 'entities_id' => $entities_id, 'redmine_project_id' => $new_redmine_id ]); Session::addMessageAfterRedirect(__('Projeto criado e vinculado à entidade com sucesso!', 'redmine')); } else { Session::addMessageAfterRedirect(__('Erro ao criar projeto no Redmine.', 'redmine'), false, ERROR); } } } Html::redirect($CFG_GLPI["root_doc"] . "/front/entity.form.php?id=" . $entities_id); } Html::displayErrorAndDie("Lost");