What you have is probably the best way to keep invalid values from being saved. The PHP Validation code will allow you to check a value and print a message under it if it's invalid, but it will still be saved (maybe you knew that already and that's why you created the thread).
What you might be able to do in your plugin is print an error message then redirect back to the option page like:
(You'd want to use a real error phrase name, but I'm not sure of the other parameters you'd want). I don't think there's any easy way to get the error message to display under the value unless you let it save the invalid values (that is a reasonable option - you could check the values the mod code and use defaults if they're invalid, put in PHP validation code for your fields, and then whenever someone goes to the adminCP they'll see the error message).
Thank you so much for your reply! I did just what you suggested and it all works PERFECT. If the user set the first option to "yes" then the following three are required to be entered if the user does not enter them (before saving) the missing field error appears automatically (because of the validation code), if the user still tries to save (after a missing fields warning popup) the error message from the plugin appears and nothing saves and the user is redirected back to the option group! Truly idiot proof. This is what I used for future references (replace params with your own if using this code):
Plugin:
Hook: admin_options_processing
PHP Code:
if ($settings['cotw_sotw_pay_credits'] == 1) {
if (empty($settings['cotw_sotw_first_place_prize'])) { define('CP_REDIRECT', 'options.php?do=options&dogroup=cotw_sotw_options' . $vbulletin->GPC['grouptitle']); print_stop_message('cotw_missing_param', $vbulletin->GPC['title']); if (empty($settings['cotw_sotw_second_place_prize'])) { define('CP_REDIRECT', 'options.php?do=options&dogroup=cotw_sotw_options' . $vbulletin->GPC['grouptitle']); print_stop_message('cotw_missing_param', $vbulletin->GPC['title']); if (empty($settings['cotw_sotw_third_place_prize'])) { define('CP_REDIRECT', 'options.php?do=options&dogroup=cotw_sotw_options' . $vbulletin->GPC['grouptitle']); print_stop_message('cotw_missing_param', $vbulletin->GPC['title']); } } }
}
Validation code for each option:
PHP Code:
global $vbulletin;
if ($vbulletin->options['cotw_sotw_pay_credits'] == 1) {
if (empty($data)) {
$error = 'invalid_value'; return false;
} else {
return true; } } else { return true; }
Thank you so much for your help kh99 and nhawk. Couldn't have asked for more. :up: