Files
oc-server3/htdocs/okapi/services/users/by_usernames.php
2014-10-08 10:06:07 +02:00

76 lines
2.5 KiB
PHP

<?php
namespace okapi\services\users\by_usernames;
use okapi\Okapi;
use okapi\Db;
use okapi\OkapiRequest;
use okapi\ParamMissing;
use okapi\InvalidParam;
use okapi\services\caches\search\SearchAssistant;
use okapi\OkapiServiceRunner;
use okapi\OkapiInternalRequest;
class WebService
{
public static function options()
{
return array(
'min_auth_level' => 1
);
}
public static function call(OkapiRequest $request)
{
$usernames = $request->get_parameter('usernames');
if (!$usernames) throw new ParamMissing('usernames');
$usernames = explode("|", $usernames);
if (count($usernames) > 500)
throw new InvalidParam('usernames', "Maximum allowed number of referenced users ".
"is 500. You provided ".count($usernames)." usernames.");
$fields = $request->get_parameter('fields');
if (!$fields)
throw new ParamMissing('fields');
# There's no need to validate the fields parameter as the 'users'
# method does this (it will raise a proper exception on invalid values).
$rs = Db::query("
select username, uuid
from user
where username collate utf8_general_ci in ('".implode("','", array_map('mysql_real_escape_string', $usernames))."')
");
$lower_username2useruuid = array();
while ($row = mysql_fetch_assoc($rs))
{
$lower_username2useruuid[mb_strtolower($row['username'], 'utf-8')] = $row['uuid'];
}
mysql_free_result($rs);
# Retrieve data for the found user_uuids.
if (count($lower_username2useruuid) > 0)
{
$id_results = OkapiServiceRunner::call('services/users/users', new OkapiInternalRequest(
$request->consumer, $request->token, array('user_uuids' => implode("|", array_values($lower_username2useruuid)),
'fields' => $fields)));
} else {
$id_results = array();
}
# Map user_uuids back to usernames. Also check which usernames were not found
# and mark them with null.
$results = array();
foreach ($usernames as $username)
{
if (!isset($lower_username2useruuid[mb_strtolower($username, 'utf-8')]))
$results[$username] = null;
else
$results[$username] = $id_results[$lower_username2useruuid[mb_strtolower($username, 'utf-8')]];
}
return Okapi::formatted_response($request, $results);
}
}