| @@ -69,16 +69,26 @@ | ||
| 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 | + * @param \WP_User|null $user Optional user being demoted, for EOT-specific destination filters. | |
| 75 | + * @return string Role users are demoted to, as configured by s2Member. | |
| 75 | 76 | */ |
| 76 | - public static function force_demotion_role ($demotion_role = FALSE) | |
| 77 | + public static function force_demotion_role ($demotion_role = FALSE, $user = NULL) | |
| 77 | 78 | { |
| 78 | 79 | do_action("ws_plugin__s2member_before_force_demotion_role", get_defined_vars ()); |
| 79 | 80 | |
| 80 | - return apply_filters("ws_plugin__s2member_force_demotion_role", ($demotion_role = "subscriber"), get_defined_vars ()); | |
| 81 | + //260916.1840 Use the administrator's configured EOT destination first; the long-standing filter remains the final developer override. | |
| 82 | + $demotion_role = !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"]) ? $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["eot_demotion_to_role"] : "subscriber"; | |
| 83 | + //260916.2306 Validate registered-role existence here, after s2Member is fully loaded; doing this in bootstrap option validation can initialize WordPress roles too early. | |
| 84 | + if(in_array($demotion_role, array('administrator', 'editor', 'author', 'contributor', 's2member_pending_deletion'), TRUE) || !get_role($demotion_role)) | |
| 85 | + $demotion_role = "subscriber"; | |
| 86 | + | |
| 87 | + //261007.2005 Resolve user-specific EOT destinations before the established final developer override. | |
| 88 | + $demotion_role = apply_filters("ws_plugin__s2member_eot_demotion_role", $demotion_role, get_defined_vars ()); | |
| 89 | + | |
| 90 | + return apply_filters("ws_plugin__s2member_force_demotion_role", $demotion_role, get_defined_vars ()); | |
| 81 | 91 | } |
| 82 | 92 | /** |
| 83 | 93 | * Allows new Users to be created on a Multisite Network. |
| 84 | 94 | * |