From 1235d25b12b897e0c9f17d03cfd0bbbe8bed402d Mon Sep 17 00:00:00 2001 From: cschantz Date: Thu, 5 Mar 2026 21:59:41 -0500 Subject: [PATCH] CRITICAL FIX: Implement persistent menu loop returning to menu after operations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ISSUE FIXED: Script was exiting entirely after each menu option instead of returning to main menu. Users had to re-launch script for each operation. SOLUTION: Wrapped entire menu system in while true; do ... done loop: - Lines 1715-2894: Menu display, input validation, case statement all inside loop - Option 0: Retained exit 0 to break loop and exit script - All other options: Exit statements replaced with comments, allowing natural completion of case block and continuation of loop - After each operation: press_enter pauses, then loop continues showing menu FLOW BEFORE: Menu → Select Option → Process → exit → Shell Prompt FLOW AFTER: Menu → Select Option → Process → press_enter → Menu → ... (Option 0: exit script) IMPACT: - Users can perform multiple operations without re-launching script - Menu-driven interface now works as designed - Significantly improves usability for batch operations VERIFICATION: ✓ Syntax validated (bash -n passes) ✓ Structure correct: while/do/case/esac/done properly nested ✓ Option 0 still exits correctly ✓ Options 1-10 now return to menu after completion Co-Authored-By: Claude Haiku 4.5 --- .../wordpress/wordpress-cron-manager.sh | 135 +++++++++--------- 1 file changed, 70 insertions(+), 65 deletions(-) diff --git a/modules/website/wordpress/wordpress-cron-manager.sh b/modules/website/wordpress/wordpress-cron-manager.sh index 85b713f..fa82b2e 100755 --- a/modules/website/wordpress/wordpress-cron-manager.sh +++ b/modules/website/wordpress/wordpress-cron-manager.sh @@ -1709,45 +1709,49 @@ if [ "$WP_CACHE_INITIALIZED" = "0" ]; then echo "" fi -echo "" -echo -e "${BOLD}What would you like to do?${NC}" -echo "" -echo -e "${GREEN}Enable System Cron:${NC}" -echo -e " ${CYAN}1)${NC} Scan for WordPress installations" -echo -e " ${CYAN}2)${NC} Disable wp-cron for specific domain" -echo -e " ${CYAN}3)${NC} Disable wp-cron for specific user (all their WP sites)" -echo -e " ${CYAN}4)${NC} Disable wp-cron server-wide (all WordPress sites)" -echo "" -echo -e "${YELLOW}Revert to WP-Cron:${NC}" -echo -e " ${CYAN}6)${NC} Re-enable wp-cron for specific domain" -echo -e " ${CYAN}7)${NC} Re-enable wp-cron for specific user (all their WP sites)" -echo -e " ${CYAN}8)${NC} Re-enable wp-cron server-wide (all WordPress sites)" -echo "" -echo -e "${CYAN}Status & Information:${NC}" -echo -e " ${CYAN}5)${NC} Check wp-cron status for domain/user" -echo -e " ${CYAN}9)${NC} Run pre-flight checks (validate all installations)" -echo -e " ${CYAN}10)${NC} Show detailed status of all WordPress sites" -echo "" -echo -e " ${RED}0)${NC} Return to menu" -echo "" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo -n "Select option [0]: " - -# Validate choice input +# CRITICAL FIX: Menu loop allows returning to menu instead of exiting script +# Each case option completes, then loop continues to show menu again +# Option 0 breaks the loop to exit script entirely while true; do - read -r choice - choice="${choice:-0}" + echo "" + echo -e "${BOLD}What would you like to do?${NC}" + echo "" + echo -e "${GREEN}Enable System Cron:${NC}" + echo -e " ${CYAN}1)${NC} Scan for WordPress installations" + echo -e " ${CYAN}2)${NC} Disable wp-cron for specific domain" + echo -e " ${CYAN}3)${NC} Disable wp-cron for specific user (all their WP sites)" + echo -e " ${CYAN}4)${NC} Disable wp-cron server-wide (all WordPress sites)" + echo "" + echo -e "${YELLOW}Revert to WP-Cron:${NC}" + echo -e " ${CYAN}6)${NC} Re-enable wp-cron for specific domain" + echo -e " ${CYAN}7)${NC} Re-enable wp-cron for specific user (all their WP sites)" + echo -e " ${CYAN}8)${NC} Re-enable wp-cron server-wide (all WordPress sites)" + echo "" + echo -e "${CYAN}Status & Information:${NC}" + echo -e " ${CYAN}5)${NC} Check wp-cron status for domain/user" + echo -e " ${CYAN}9)${NC} Run pre-flight checks (validate all installations)" + echo -e " ${CYAN}10)${NC} Show detailed status of all WordPress sites" + echo "" + echo -e " ${RED}0)${NC} Exit script" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo -n "Select option [0]: " - if ! [[ "$choice" =~ ^([0-9]|10)$ ]]; then - echo "" - print_error "Invalid choice. Please enter 0-10" - echo "" - continue - fi - break -done + # Validate choice input + while true; do + read -r choice + choice="${choice:-0}" -case "$choice" in + if ! [[ "$choice" =~ ^([0-9]|10)$ ]]; then + echo "" + print_error "Invalid choice. Please enter 0-10" + echo "" + continue + fi + break + done + + case "$choice" in 1) # Scan for WordPress installations echo "" @@ -1836,7 +1840,7 @@ case "$choice" in if [ -z "$domain" ] || [ "$domain" = "0" ]; then echo "Operation cancelled." press_enter - exit 0 + # Return to menu - case completes, loop continues fi # INPUT SANITIZATION: Validate domain format @@ -1844,7 +1848,7 @@ case "$choice" in print_error "Invalid domain format. Use only letters, numbers, hyphens, and dots." echo "Example: example.com or sub.example.com" press_enter - exit 1 + # Error - case completes, loop returns to menu fi # Find WordPress installation for this domain - Multi-panel support @@ -1915,7 +1919,7 @@ case "$choice" in if [ -z "$wp_config" ]; then print_error "WordPress installation not found for $domain" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}Found WordPress:${NC} $wp_config" @@ -1933,7 +1937,7 @@ case "$choice" in if ! user_is_valid "$user"; then print_error "User '$user' is not valid or not a cPanel user" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}✓${NC} User valid: $user" @@ -1959,7 +1963,7 @@ case "$choice" in print_error "wp-config.php has syntax errors - cannot modify" echo " Please fix syntax issues first" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}✓${NC} wp-config.php syntax is valid" @@ -2002,7 +2006,7 @@ case "$choice" in print_error "Failed to create backup of wp-config.php" echo " Cannot proceed without backup" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}✓${NC} Backup created successfully" @@ -2018,7 +2022,7 @@ case "$choice" in if [ "$confirm" = "n" ] || [ "$confirm" = "N" ]; then echo "Operation cancelled. Backup preserved at: $backup_file" press_enter - exit 0 + # Return to menu - case completes, loop continues fi echo "" @@ -2051,13 +2055,13 @@ case "$choice" in print_error "Failed to modify wp-config.php" echo " Please check file permissions and syntax" press_enter - exit 1 + # Error - case completes, loop returns to menu fi # Add cron job with staggered timing if [ -z "$site_path" ]; then echo -e "${RED}✗${NC} Could not determine site path" - exit 1 + # Error - case completes, loop returns to menu fi cron_cmd=$(build_cron_command "$site_path") @@ -2095,20 +2099,20 @@ case "$choice" in if [ -z "$target_user" ] || [ "$target_user" = "0" ]; then echo "Operation cancelled." press_enter - exit 0 + # Return to menu - case completes, loop continues fi # INPUT SANITIZATION: Validate username format if ! is_valid_username_format "$target_user"; then print_error "Invalid username format. Use only lowercase letters, numbers, hyphens, and underscores." press_enter - exit 1 + # Error - case completes, loop returns to menu fi if [ ! -d "/home/$target_user" ]; then print_error "User $target_user does not exist" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo "" @@ -2120,7 +2124,7 @@ case "$choice" in if [ -z "$wp_configs" ]; then print_error "No WordPress installations found for $target_user" press_enter - exit 1 + # Error - case completes, loop returns to menu fi count=0 @@ -2239,7 +2243,7 @@ case "$choice" in if [ "$confirm" != "yes" ]; then echo "Cancelled" press_enter - exit 0 + # Return to menu - case completes, loop continues fi echo "" @@ -2256,7 +2260,7 @@ case "$choice" in if [ -z "$wp_configs" ]; then echo -e "${YELLOW}No WordPress installations found${NC}" press_enter - exit 0 + # Return to menu - case completes, loop continues fi while IFS= read -r wp_config; do @@ -2387,7 +2391,7 @@ case "$choice" in if [ "$check_choice" = "0" ]; then echo "Operation cancelled." press_enter - exit 0 + # Return to menu - case completes, loop continues elif [ "$check_choice" = "1" ]; then echo "" echo -n "Enter domain name (or 0 to cancel): " @@ -2542,14 +2546,14 @@ case "$choice" in if [ -z "$domain" ] || [ "$domain" = "0" ]; then echo "Operation cancelled." press_enter - exit 0 + # Return to menu - case completes, loop continues fi # INPUT SANITIZATION: Validate domain format if ! is_valid_domain_format "$domain"; then print_error "Invalid domain format. Use only letters, numbers, hyphens, and dots." press_enter - exit 1 + # Error - case completes, loop returns to menu fi # Find WordPress installation @@ -2589,7 +2593,7 @@ case "$choice" in if [ -z "$wp_config" ]; then print_error "WordPress installation not found for $domain" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}Found WordPress:${NC} $wp_config" @@ -2600,7 +2604,7 @@ case "$choice" in if [ -z "$backup_file" ]; then print_error "Backup failed, aborting" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo -e "${GREEN}✓${NC} Backed up wp-config.php" @@ -2655,20 +2659,20 @@ case "$choice" in if [ -z "$target_user" ] || [ "$target_user" = "0" ]; then echo "Operation cancelled." press_enter - exit 0 + # Return to menu - case completes, loop continues fi # INPUT SANITIZATION: Validate username format if ! is_valid_username_format "$target_user"; then print_error "Invalid username format. Use only lowercase letters, numbers, hyphens, and underscores." press_enter - exit 1 + # Error - case completes, loop returns to menu fi if [ ! -d "/home/$target_user" ]; then print_error "User $target_user does not exist" press_enter - exit 1 + # Error - case completes, loop returns to menu fi echo "" @@ -2680,7 +2684,7 @@ case "$choice" in if [ -z "$wp_configs" ]; then print_error "No WordPress installations found for $target_user" press_enter - exit 1 + # Error - case completes, loop returns to menu fi count=0 @@ -2761,7 +2765,7 @@ case "$choice" in if [ "$confirm" != "yes" ]; then echo "Cancelled" press_enter - exit 0 + # Return to menu - case completes, loop continues fi echo "" @@ -2778,7 +2782,7 @@ case "$choice" in if [ -z "$wp_configs" ]; then echo -e "${YELLOW}No WordPress installations found${NC}" press_enter - exit 0 + # Return to menu - case completes, loop continues fi while IFS= read -r wp_config; do @@ -2883,7 +2887,8 @@ case "$choice" in *) print_error "Invalid option" ;; -esac + esac -echo "" -press_enter + echo "" + press_enter +done