Skip to content

Instantly share code, notes, and snippets.

@norv
Created May 23, 2012 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save norv/2773218 to your computer and use it in GitHub Desktop.
Save norv/2773218 to your computer and use it in GitHub Desktop.
<?php
namespace smCore\storage;
use smCore\storage\Storage, smCore\cache\Cache;
/**
* Database services concerning members. This class' methods allow us to retrieve, add and update
* information in/from the database about members.
* Every method deals with the necessary query/queries alone, as much as possible, thus allowing a single
* point where potential other Storage classes may override the query, for performance or other needs.
*/
class UserStorage
{
/**
* Retrieve all registered members
* Specify approval status, and banning status.
*
* @param bool $approved
* @param bool $notBanned
*/
public static function loadMembers($approved = false, $notBanned = false)
{
// @todo
}
/**
* NB: This works on SMF database structure (modified)
* not original smCore.
*
* @param $name
* @return array|null
*/
public static function getMemberForName($name)
{
$request = database()->query('', '
SELECT passwd, id_member, lngfile, is_activated, email_address, member_name, password_salt, passwd_flood
FROM {db_prefix}members
WHERE ' . (database()->isCaseSensitive() ? 'LOWER(member_name) = LOWER({string:user_name})' : 'member_name = {string:user_name}') . '
LIMIT 1',
array(
'user_name' => database()->isCaseSensitive() ? strtolower($name) : $name,
)
);
if (database()->num_rows($request) == 0)
return null;
$userSettings = database()->fetch_assoc($request);
database()->free_result($request);
return $userSettings;
}
/**
* NB: This works on SMF database structure (simplified)
* not original smCore.
*
* @param $email
* @return array|null
*/
public static function getMemberForEmail($email)
{
$request = database()->query('', '
SELECT passwd, id_member, lngfile, is_activated, email_address,
member_name, password_salt, passwd_flood
FROM {db_prefix}members
WHERE email_address = {string:email}
LIMIT 1',
array(
'email' => $email,
)
);
if (database()->num_rows($request) == 0)
return null;
$userSettings = database()->fetch_assoc($request);
database()->free_result($request);
return $userSettings;
}
public static function getMembersInGroup($group)
{
// ;
}
public static function loadMembersForIDs($ids)
{
//
$select = database()->query('', '
SELECT id_user, user_display_name FROM {db_prefix}users
WHERE id_user IN $ids', array(
$ids)
);
$result = database()->query($select);
if (database()->affectedRows($result) > 0)
{
$users = array();
while ($row = database()->fetch_row($result))
$users[$row->id_user] = $row->user_display_name;
return $users;
}
return false;
}
public static function loadMemberForID($id)
{
// Load their settings.
// Add cache here
$request = database()->query('', '
SELECT m.*
FROM {db_prefix}members AS m
WHERE mem.id_member = {int:id_member}
LIMIT 1',
array(
'id_member' => $id,
)
);
$user_settings = database()->fetch_assoc($request);
database()->free_result($request);
}
return $user_settings;
}
/**
* Load users whose display name matches the string given.
* The string only has to be a part of the name.
*
* @static
* @param $name
* @return array|bool
*/
public static function loadMembersForName($name)
{
$result = database()->query("
SELECT id_member, display_name
FROM {db_prefix}members
WHERE display_name LIKE ?", array('%' . $name . '%'));
if (database()->affectedRows($result) > 0)
{
$users = array();
while ($row = database()->fetch_row($result))
$users[] = array(
'id' => $row->id_user,
'label' => $row->user_display_name,
'value' => $row->user_display_name,
);
return $users;
}
return false;
}
public static function deleteMembers($members)
{
// delete these members
// and all their associated data
// trigger the deletion event for modules
}
/**
* Retrieve a list of members with the given permission
* for the eventually specified resource.
* (for a forum, this may be a board)
*
* @param string $permission
* @param int $resource
* @return array
*/
public static function membersAllowedTo($permission, $resource)
{
//
}
/**
* Retrieve a list of groups/roles with the given permission
* for the eventually specified resource.
* (for a forum, this may be a board)
*
* @param string $permission
* @param int $resource
* @return array
*/
public static function groupsAllowedTo($permission, $resource)
{
//
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment