| @@ -69,16 +69,22 @@ | ||
| 69 | 69 | * |
| 70 | 70 | * @package s2Member\Option_Forces |
| 71 | 71 | * @since 3.5 |
| 72 | 72 | * |
| 73 | - * @param string $demotion_role Expects a demotion Role to be passed by the caller. | |
| 74 | - * @return string Demotion Role, as configured by s2Member. | |
| 73 | + * @param string $demotion_role Expects the role to demote the user to. | |
| 74 | + * @return string Role users are demoted to, as configured by s2Member. | |
| 75 | 75 | */ |
| 76 | 76 | public static function force_demotion_role ($demotion_role = FALSE) |
| 77 | 77 | { |
| 78 | 78 | do_action("ws_plugin__s2member_before_force_demotion_role", get_defined_vars ()); |
| 79 | 79 | |
| 80 | - return apply_filters("ws_plugin__s2member_force_demotion_role", ($demotion_role = "subscriber"), get_defined_vars ()); | |
| 80 | + //260916.1840 Use the administrator's configured EOT destination first; the long-standing filter remains the final developer override. | |
| 81 | + $demotion_role = !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"] : "subscriber"; | |
| 82 | + //260916.2306 Validate registered-role existence here, after s2Member is fully loaded; doing this in bootstrap option validation can initialize WordPress roles too early. | |
| 83 | + if(in_array($demotion_role, array('administrator', 'editor', 'author', 'contributor', 's2member_pending_deletion'), TRUE) || !get_role($demotion_role)) | |
| 84 | + $demotion_role = "subscriber"; | |
| 85 | + | |
| 86 | + return apply_filters("ws_plugin__s2member_force_demotion_role", $demotion_role, get_defined_vars ()); | |
| 81 | 87 | } |
| 82 | 88 | /** |
| 83 | 89 | * Allows new Users to be created on a Multisite Network. |
| 84 | 90 | * |