diff --git a/sources/admin/ManageMembers.controller.php b/sources/admin/ManageMembers.controller.php index dec0f5e366..54334fc3a3 100644 --- a/sources/admin/ManageMembers.controller.php +++ b/sources/admin/ManageMembers.controller.php @@ -1036,13 +1036,6 @@ public function action_approve() // Approve / activate this member. approveMembers($conditions); - // Do we have to let the integration code know about the activations? - if (!empty($modSettings['integrate_activate'])) - { - foreach ($member_info as $member) - call_integration_hook('integrate_activate', array($member['username'])); - } - // Check for email. if ($_POST['todo'] == 'okemail') { diff --git a/sources/controllers/ProfileAccount.controller.php b/sources/controllers/ProfileAccount.controller.php index 3063503e26..7264e6c261 100644 --- a/sources/controllers/ProfileAccount.controller.php +++ b/sources/controllers/ProfileAccount.controller.php @@ -520,19 +520,17 @@ public function action_activateaccount() if (isset($_REQUEST['save']) && isset($user_profile[$memID]['is_activated']) && $user_profile[$memID]['is_activated'] != 1) { + require_once(SUBSDIR . '/Members.subs.php'); + // If we are approving the deletion of an account, we do something special ;) if ($user_profile[$memID]['is_activated'] == 4) { - require_once(SUBSDIR . '/Members.subs.php'); deleteMembers($context['id_member']); redirectexit(); } - // Let the integrations know of the activation. - call_integration_hook('integrate_activate', array($user_profile[$memID]['member_name'])); - // Actually update this member now, as it guarantees the unapproved count can't get corrupted. - updateMemberData($context['id_member'], array('is_activated' => $user_profile[$memID]['is_activated'] >= 10 ? 11 : 1, 'validation_code' => '')); + approveMembers(array('members' => array($context['id_member']), 'activated_status' => $user_profile[$memID]['is_activated'])) // Log what we did? logAction('approve_member', array('member' => $memID), 'admin'); diff --git a/sources/controllers/Register.controller.php b/sources/controllers/Register.controller.php index dbf7ceaeda..055e5cfdac 100644 --- a/sources/controllers/Register.controller.php +++ b/sources/controllers/Register.controller.php @@ -589,7 +589,7 @@ public function action_register2($verifiedOpenID = false) } else { - call_integration_hook('integrate_activate', array($regOptions['username'])); + call_integration_hook('integrate_activate', array($regOptions['username'], 1, 1)); setLoginCookie(60 * $modSettings['cookieTime'], $memberID, hash('sha256', Util::strtolower($regOptions['username']) . $regOptions['password'] . $regOptions['register_vars']['password_salt'])); @@ -649,8 +649,6 @@ public function action_activate() } // Change their email address? (they probably tried a fake one first :P.) - require_once(SUBSDIR . '/Auth.subs.php'); - if (isset($_POST['new_email'], $_REQUEST['passwd']) && validateLoginPassword($_REQUEST['passwd'], $row['passwd'], $row['member_name'], true) && ($row['is_activated'] == 0 || $row['is_activated'] == 2)) { if (empty($modSettings['registration_method']) || $modSettings['registration_method'] == 3) @@ -718,12 +716,10 @@ public function action_activate() return; } - - // Let the integration know that they've been activated! - call_integration_hook('integrate_activate', array($row['member_name'])); + require_once(SUBSDIR . '/Members.subs.php'); // Validation complete - update the database! - updateMemberData($row['id_member'], array('is_activated' => 1, 'validation_code' => '')); + approveMembers(array('members' => array($row['id_member'], array('activated_status' => 0))); // Also do a proper member stat re-evaluation. updateStats('member', false); diff --git a/sources/subs/Members.subs.php b/sources/subs/Members.subs.php index b0f39911fd..31b40978f7 100644 --- a/sources/subs/Members.subs.php +++ b/sources/subs/Members.subs.php @@ -1978,13 +1978,29 @@ function approveMembers($conditions) ); // @todo maybe an hook here? - $query_cond = array(); + $query = false; foreach ($conditions as $key => $dummy) + { if (isset($available_conditions[$key])) + { + if ($key === 'time_before') + $query = true; $query_cond[] = $available_conditions[$key]; + } + } - $conditions['is_activated'] = 1; + if ($query) + { + $data = retrieveMemberData($conditions); + $members_id = $data['members']; + } + else + { + $members_id = $conditions['members']; + } + + $conditions['is_activated'] = $conditions['activated_status'] >= 10 ? 11 : 1; $conditions['blank_string'] = ''; // Approve/activate this member. @@ -1994,6 +2010,12 @@ function approveMembers($conditions) WHERE is_activated = {int:activated_status}' . implode('', $query_cond), $conditions ); + + // Let the integration know that they've been activated! + foreach ($members_id as $member_id) + call_integration_hook('integrate_activate', array($member_id, $conditions['activated_status'], $conditions['is_activated'])); + + return $conditions['is_activated']; } /**