diff --git a/bin/msg/head.es b/bin/msg/head.es index 7b04fcc..bdcf780 100644 --- a/bin/msg/head.es +++ b/bin/msg/head.es @@ -57,6 +57,8 @@ proj_010="El tipo de proyecto seleccionado no es válido" proj_011="Proyecto creado exitosamente en:" proj_012="Ingrese una descripción del proyecto" proj_013="Breve descripción del propósito y alcance del proyecto (máximo 3 líneas)" +proj_014="Seleccione la licencia del proyecto" +proj_015="Esta licencia determinará los términos de uso y distribución del software" vldt_001="no puede estar en blanco..." vldt_002="Contraseña incorrecta! Intente nuevamente." diff --git a/bin/project_create.sh b/bin/project_create.sh index 236af14..38534ad 100755 --- a/bin/project_create.sh +++ b/bin/project_create.sh @@ -34,10 +34,45 @@ source "$MSG_DIR/head.es" title="${head_000} ${head_002}" apps_title="${proj_001}" PROJECT_FOLDER="" +PROJECT_NAME="" +PROJECT_PATH="" PROJECT_TYPE="" PROJECT_DESCRIPTION="" +PROJECT_LICENSE="" +PROJECT_LICENSE_TEXT="" VALID_TYPES=("ansible" "odoo" "sp32home" "nodejs" "python" "cobol" "otros") +# Estructura de datos para licencias: nombre, badge, texto corto +declare -A LICENSE_BADGES +LICENSE_BADGES["AGPL-3.0"]="https://img.shields.io/badge/License-AGPL--3.0-blue.svg" +LICENSE_BADGES["GPL-3.0"]="https://img.shields.io/badge/License-GPL--3.0-blue.svg" +LICENSE_BADGES["LGPL-3.0"]="https://img.shields.io/badge/License-LGPL--3.0-blue.svg" +LICENSE_BADGES["MIT"]="https://img.shields.io/badge/License-MIT-yellow.svg" +LICENSE_BADGES["Apache-2.0"]="https://img.shields.io/badge/License-Apache_2.0-blue.svg" +LICENSE_BADGES["BSD-3-Clause"]="https://img.shields.io/badge/License-BSD_3--Clause-blue.svg" +LICENSE_BADGES["BSD-2-Clause"]="https://img.shields.io/badge/License-BSD_2--Clause-orange.svg" +LICENSE_BADGES["CC-BY-4.0"]="https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg" +LICENSE_BADGES["CC-BY-SA-4.0"]="https://img.shields.io/badge/License-CC_BY--SA_4.0-lightgrey.svg" +LICENSE_BADGES["CC0-1.0"]="https://img.shields.io/badge/License-CC0_1.0-lightgrey.svg" +LICENSE_BADGES["EPL-2.0"]="https://img.shields.io/badge/License-EPL_2.0-red.svg" +LICENSE_BADGES["MPL-2.0"]="https://img.shields.io/badge/License-MPL_2.0-brightgreen.svg" +LICENSE_BADGES["Unlicense"]="https://img.shields.io/badge/license-Unlicense-blue.svg" + +declare -A LICENSE_TEXTS +LICENSE_TEXTS["AGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Affero de GNU (AGPL-3.0)." +LICENSE_TEXTS["GPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General de GNU (GPL-3.0)." +LICENSE_TEXTS["LGPL-3.0"]="Este proyecto está licenciado bajo la Licencia Pública General Menor de GNU (LGPL-3.0)." +LICENSE_TEXTS["MIT"]="Este proyecto está licenciado bajo la Licencia MIT." +LICENSE_TEXTS["Apache-2.0"]="Este proyecto está licenciado bajo la Licencia Apache 2.0." +LICENSE_TEXTS["BSD-3-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 3 cláusulas." +LICENSE_TEXTS["BSD-2-Clause"]="Este proyecto está licenciado bajo la Licencia BSD de 2 cláusulas." +LICENSE_TEXTS["CC-BY-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution 4.0 International." +LICENSE_TEXTS["CC-BY-SA-4.0"]="Este proyecto está licenciado bajo Creative Commons Attribution-ShareAlike 4.0 International." +LICENSE_TEXTS["CC0-1.0"]="Este proyecto está dedicado al dominio público bajo Creative Commons Zero v1.0 Universal." +LICENSE_TEXTS["EPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública Eclipse 2.0." +LICENSE_TEXTS["MPL-2.0"]="Este proyecto está licenciado bajo la Licencia Pública de Mozilla 2.0." +LICENSE_TEXTS["Unlicense"]="Este proyecto está en el dominio público bajo The Unlicense." + # Verifica que dialog esté instalado if ! command -v dialog &> /dev/null; then echo "${head_001}" @@ -153,6 +188,44 @@ function request_project_description() { fi } +# Función para solicitar la licencia del proyecto +function request_project_license() { + # Construir las opciones para el diálogo + OPTIONS="" + + # Obtenemos todas las claves del array asociativo + license_keys=("${!LICENSE_BADGES[@]}") + + # Ordenamos las claves alfabéticamente + IFS=$'\n' sorted_keys=($(sort <<<"${license_keys[*]}")) + unset IFS + + # Establecemos AGPL-3.0 como seleccionada por defecto (es la licencia predeterminada del proyecto) + for license in "${sorted_keys[@]}"; do + if [ "$license" == "AGPL-3.0" ]; then + OPTIONS="$OPTIONS $license \"$license\" on" + else + OPTIONS="$OPTIONS $license \"$license\" off" + fi + done + + dialog_input_radio "${proj_014}" "${proj_015}" "$OPTIONS" + + if [ $codex -ne 0 ]; then + echo "${head_canceled}" + exit 1 + fi + + PROJECT_LICENSE="$value" + PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}" + + # Si por alguna razón no se encuentra la licencia, usamos AGPL-3.0 por defecto + if [ -z "$PROJECT_LICENSE_TEXT" ]; then + PROJECT_LICENSE="AGPL-3.0" + PROJECT_LICENSE_TEXT="${LICENSE_TEXTS[$PROJECT_LICENSE]}" + fi +} + # Función para crear la estructura del proyecto function create_project_structure() { # Crear la carpeta del proyecto @@ -210,7 +283,7 @@ EOF cat > "$PROJECT_PATH/README.md" << EOF # $PROJECT_NAME -![License](https://img.shields.io/badge/License-AGPL--3.0-blue.svg) +![License](${LICENSE_BADGES[$PROJECT_LICENSE]}) ![Status](https://img.shields.io/badge/Status-En%20Desarrollo-yellow) ## 📋 Descripción @@ -349,7 +422,7 @@ Para configurar el entorno de desarrollo, siga las instrucciones en [docs/setup. ## 📄 Licencia -Este proyecto está licenciado bajo la Licencia Pública General Affero de GNU (AGPL-3.0). +$PROJECT_LICENSE_TEXT Ver el archivo [LICENSE](LICENSE) para más detalles. ## 👥 Autores @@ -411,6 +484,9 @@ EOF # Crear archivo de configuración para indicar el tipo de proyecto echo "$PROJECT_TYPE" > "$PROJECT_PATH/.protype" + # Guardar información de la licencia en un archivo + echo "$PROJECT_LICENSE" > "$PROJECT_PATH/.license" + # Mostrar mensaje de éxito dialog_error_box "$head_info" "${proj_011}\n$PROJECT_PATH" } @@ -428,6 +504,9 @@ function main() { # Solicitar tipo de proyecto request_project_type + # Solicitar licencia del proyecto + request_project_license + # Solicitar descripción del proyecto request_project_description