101 lines
2.8 KiB
PHP
101 lines
2.8 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2008-2017 Horde LLC (http://www.horde.org/)
|
|
*
|
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
* @author Michael Rubinsky <mrubinsk@horde.org>
|
|
* @license http://www.horde.org/licenses/bsd BSD
|
|
* @category Horde
|
|
* @package Horde_Content
|
|
*/
|
|
class Content_Users_Manager
|
|
{
|
|
/**
|
|
* Database adapter
|
|
* @var Horde_Db_Adapter
|
|
*/
|
|
protected $_db;
|
|
|
|
/**
|
|
* Tables
|
|
* @var array
|
|
*/
|
|
protected $_tables = array(
|
|
'users' => 'rampage_users',
|
|
);
|
|
|
|
public function __construct(Horde_Db_Adapter $db)
|
|
{
|
|
$this->_db = $db;
|
|
}
|
|
|
|
/**
|
|
* Ensure that an array of users exist in storage. Create any that don't,
|
|
* return user_ids for all.
|
|
*
|
|
* @param array $users An array of users. Values typed as an integer
|
|
* are assumed to already be an user_id.
|
|
*
|
|
* @return array An array of user_ids.
|
|
*/
|
|
public function ensureUsers($users)
|
|
{
|
|
if (!is_array($users)) {
|
|
$users = array($users);
|
|
}
|
|
|
|
$userIds = array();
|
|
$userName = array();
|
|
|
|
// Anything already typed as an integer is assumed to be a user id.
|
|
foreach ($users as $userIndex => $user) {
|
|
if (is_int($user)) {
|
|
$userIds[$userIndex] = $user;
|
|
} else {
|
|
$userName[$user] = $userIndex;
|
|
}
|
|
}
|
|
|
|
// Get the ids for any users that already exist.
|
|
try {
|
|
if (count($userName)) {
|
|
$userName;
|
|
$sql = 'SELECT user_id, user_name FROM ' . $this->_t('users')
|
|
. ' WHERE user_name IN (' . implode(',', array_map(array($this, 'toDriver'), array_keys($userName))) . ')';
|
|
|
|
foreach ($this->_db->selectAll($sql) as $row) {
|
|
$userIndex = $userName[$row['user_name']];
|
|
unset($userName[$row['user_name']]);
|
|
$userIds[$userIndex] = $row['user_id'];
|
|
}
|
|
}
|
|
|
|
// Create any users that didn't already exist
|
|
foreach ($userName as $user => $userIndex) {
|
|
$userIds[$userIndex] = $this->_db->insert('INSERT INTO ' . $this->_t('users') . ' (user_name) VALUES (' . $this->toDriver($user) . ')');
|
|
}
|
|
} catch (Horde_Db_Exception $e) {
|
|
throw new Content_Exception($e);
|
|
}
|
|
|
|
return $userIds;
|
|
}
|
|
|
|
/**
|
|
* Shortcut for getting a table name.
|
|
*
|
|
* @param string $tableType
|
|
*
|
|
* @return string Configured table name.
|
|
*/
|
|
protected function _t($tableType)
|
|
{
|
|
return $this->_db->quoteTableName($this->_tables[$tableType]);
|
|
}
|
|
|
|
public function toDriver($value)
|
|
{
|
|
return $this->_db->quoteString(Horde_String::convertCharset($value, 'UTF-8', $this->_db->getOption('charset')));
|
|
}
|
|
}
|