예제 #1
0
 /**
  * @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();
     }
 }
예제 #2
0
파일: smf_2_api.php 프로젝트: rxadmin/ufoai
/**
 * 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);
 }