/** * @param array $data */ public function OnUserChangePassword(array $data) { if (!defined('SMF') || SMF != 'API') { return; } if (!smfapi_getUserByUsername($data['user']->username)) { if (!$this->addUserToSMF($data['user']->username)) { return; } } smfapi_updateMemberData($data['user']->username, array('password' => sha1(strtolower($data['user']->username) . smfapi_unHtmlspecialchars($data['newpassword'])))); $contexts = $this->smfGetContexts(); if (in_array($this->modx->context->key, $contexts) && $this->modx->user->username == $data['user']->username) { smfapi_logout($data['user']->username); smfapi_login($data['user']->username); @session_write_close(); } }
/** * Delete personal messages * * Deletes the personal messages for a member or an array of members. * Called by the delete member function * * @param array $personal_messages the messages to delete * @param string $folder the folder to delete from * @param int || array $owner the member id(s) that need message deletion * @return bool whether deletion occurred or not * @since 0.1.0 */ function smfapi_deleteMessages($personal_messages, $folder = null, $owner = null) { global $user_info, $smcFunc; if ($owner === null) { $owner = array($user_info['id']); } elseif (empty($owner)) { return false; } elseif (!is_array($owner)) { $owner = array($owner); } if (null !== $personal_messages) { if (empty($personal_messages) || !is_array($personal_messages)) { return false; } foreach ($personal_messages as $index => $delete_id) { $personal_messages[$index] = (int) $delete_id; } $where = 'AND id_pm IN ({array_int:pm_list})'; } else { $where = ''; } if ('sent' == $folder || null === $folder) { $smcFunc['db_query']('', ' UPDATE {db_prefix}personal_messages SET deleted_by_sender = {int:is_deleted} WHERE id_member_from IN ({array_int:member_list}) AND deleted_by_sender = {int:not_deleted}' . $where, array('member_list' => $owner, 'is_deleted' => 1, 'not_deleted' => 0, 'pm_list' => $personal_messages !== null ? array_unique($personal_messages) : array())); } if ('sent' != $folder || null === $folder) { // calculate the number of messages each member's gonna lose... $request = $smcFunc['db_query']('', ' SELECT id_member, COUNT(*) AS num_deleted_messages, CASE WHEN is_read & 1 >= 1 THEN 1 ELSE 0 END AS is_read FROM {db_prefix}pm_recipients WHERE id_member IN ({array_int:member_list}) AND deleted = {int:not_deleted}' . $where . ' GROUP BY id_member, is_read', array('member_list' => $owner, 'not_deleted' => 0, 'pm_list' => $personal_messages !== null ? array_unique($personal_messages) : array())); // ...and update the statistics accordingly - now including unread messages while ($row = $smcFunc['db_fetch_assoc']($request)) { if ($row['is_read']) { smfapi_updateMemberData($row['id_member'], array('instant_messages' => $where == '' ? 0 : 'instant_messages - ' . $row['num_deleted_messages'])); } else { smfapi_updateMemberData($row['id_member'], array('instant_messages' => $where == '' ? 0 : 'instant_messages - ' . $row['num_deleted_messages'], 'unread_messages' => $where == '' ? 0 : 'unread_messages - ' . $row['num_deleted_messages'])); } // if this is the current member we need to make their message count correct if ($user_info['id'] == $row['id_member']) { $user_info['messages'] -= $row['num_deleted_messages']; if (!$row['is_read']) { $user_info['unread_messages'] -= $row['num_deleted_messages']; } } } $smcFunc['db_free_result']($request); // do the actual deletion $smcFunc['db_query']('', ' UPDATE {db_prefix}pm_recipients SET deleted = {int:is_deleted} WHERE id_member IN ({array_int:member_list}) AND deleted = {int:not_deleted}' . $where, array('member_list' => $owner, 'is_deleted' => 1, 'not_deleted' => 0, 'pm_list' => $personal_messages !== null ? array_unique($personal_messages) : array())); } // if sender and recipients all have deleted their message, it can be removed $request = $smcFunc['db_query']('', ' SELECT pm.id_pm AS sender, pmr.id_pm FROM {db_prefix}personal_messages AS pm LEFT JOIN {db_prefix}pm_recipients AS pmr ON (pmr.id_pm = pm.id_pm AND pmr.deleted = {int:not_deleted}) WHERE pm.deleted_by_sender = {int:is_deleted} ' . str_replace('id_pm', 'pm.id_pm', $where) . ' GROUP BY sender, pmr.id_pm HAVING pmr.id_pm IS null', array('not_deleted' => 0, 'is_deleted' => 1, 'pm_list' => $personal_messages !== null ? array_unique($personal_messages) : array())); $remove_pms = array(); while ($row = $smcFunc['db_fetch_assoc']($request)) { $remove_pms[] = $row['sender']; } $smcFunc['db_free_result']($request); if (!empty($remove_pms)) { $smcFunc['db_query']('', ' DELETE FROM {db_prefix}personal_messages WHERE id_pm IN ({array_int:pm_list})', array('pm_list' => $remove_pms)); $smcFunc['db_query']('', ' DELETE FROM {db_prefix}pm_recipients WHERE id_pm IN ({array_int:pm_list})', array('pm_list' => $remove_pms)); } // any cached numbers may be wrong now smfapi_cachePutData('labelCounts:' . $user_info['id'], null, 720); return true; }
/** * Short description * * Long description * * @param * @return */ protected function update_memberData() { try { $this->loadApi(); } catch (Exception $e) { throw new \Exception($e->getMessage()); } $this->info = unserialize($this->info); $this->data = smfapi_updateMemberData($this->member, $this->info); }