FIX: Initiating a loan from a product no longer requires the user to already exist.
Loans created on the checkout page and the product page used different functions to look up users, causing inconsistent behaviour. Now both use the "advanced" user lookup that will initialize users that don't currently exist in the system.
This commit is contained in:
parent
e953f6c7a5
commit
e640c24515
@ -81,7 +81,7 @@ class Ajax extends Responder {
|
||||
private function checkout_product() {
|
||||
$user = null;
|
||||
try {
|
||||
$user = new User($_POST['user'], 'name');
|
||||
$user = $this->user_init($_POST['user'], null);
|
||||
} catch(Exception $e) {
|
||||
return new Failure(i18n('Invalid user ID.'));
|
||||
}
|
||||
|
@ -20,57 +20,6 @@ class CheckoutPage extends Page {
|
||||
}
|
||||
}
|
||||
|
||||
protected function user_init($name, $email) {
|
||||
$nameuser = null;
|
||||
$emailuser = null;
|
||||
if($name) {
|
||||
try {
|
||||
$nameuser = new User($name, 'name');
|
||||
} catch(Exception $ue) {
|
||||
# The user wasn't found locally
|
||||
try {
|
||||
$this->ldap->get_user($name);
|
||||
$nameuser = User::create_user($name);
|
||||
} catch(Exception $le) {
|
||||
$err = i18n("Username {name} not found.",
|
||||
$name);
|
||||
throw new Exception($err);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($email) {
|
||||
try {
|
||||
$search = $email;
|
||||
if(strpos($email, '@') === false) {
|
||||
$search = $email .'@dsv.su.se';
|
||||
}
|
||||
# Lookup email directly in ldap since we don't store it
|
||||
$uid = $this->ldap->search_email($search);
|
||||
} catch(Exception $le) {
|
||||
$err = i18n('Email address {address} not found.',
|
||||
$search);
|
||||
throw new Exception($err);
|
||||
}
|
||||
try {
|
||||
$emailuser = new User($uid, 'name');
|
||||
} catch(Exception $ue) {
|
||||
# User wasn't found locally, so initialize a new user
|
||||
$emailuser = User::create_user($uid);
|
||||
}
|
||||
}
|
||||
if($nameuser && $emailuser) {
|
||||
if($nameuser != $emailuser) {
|
||||
$err = i18n('Username and email match different users.');
|
||||
throw new Exception($err);
|
||||
}
|
||||
return $nameuser;
|
||||
}
|
||||
if($nameuser) {
|
||||
return $nameuser;
|
||||
}
|
||||
return $emailuser;
|
||||
}
|
||||
|
||||
protected function render_body() {
|
||||
$username = $this->userstr;
|
||||
$email = $this->emailstr;
|
||||
|
@ -27,6 +27,57 @@ abstract class Responder {
|
||||
|
||||
abstract public function render();
|
||||
|
||||
final protected function user_init($name, $email) {
|
||||
$nameuser = null;
|
||||
$emailuser = null;
|
||||
if($name) {
|
||||
try {
|
||||
$nameuser = new User($name, 'name');
|
||||
} catch(Exception $ue) {
|
||||
# The user wasn't found locally
|
||||
try {
|
||||
$this->ldap->get_user($name);
|
||||
$nameuser = User::create_user($name);
|
||||
} catch(Exception $le) {
|
||||
$err = i18n("Username {name} not found.",
|
||||
$name);
|
||||
throw new Exception($err);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($email) {
|
||||
try {
|
||||
$search = $email;
|
||||
if(strpos($email, '@') === false) {
|
||||
$search = $email .'@dsv.su.se';
|
||||
}
|
||||
# Lookup email directly in ldap since we don't store it
|
||||
$uid = $this->ldap->search_email($search);
|
||||
} catch(Exception $le) {
|
||||
$err = i18n('Email address {address} not found.',
|
||||
$search);
|
||||
throw new Exception($err);
|
||||
}
|
||||
try {
|
||||
$emailuser = new User($uid, 'name');
|
||||
} catch(Exception $ue) {
|
||||
# User wasn't found locally, so initialize a new user
|
||||
$emailuser = User::create_user($uid);
|
||||
}
|
||||
}
|
||||
if($nameuser && $emailuser) {
|
||||
if($nameuser != $emailuser) {
|
||||
$err = i18n('Username and email match different users.');
|
||||
throw new Exception($err);
|
||||
}
|
||||
return $nameuser;
|
||||
}
|
||||
if($nameuser) {
|
||||
return $nameuser;
|
||||
}
|
||||
return $emailuser;
|
||||
}
|
||||
|
||||
final protected function escape_tags($tags) {
|
||||
foreach($tags as $key => $tag) {
|
||||
$tags[$key] = $this->escape_string(strtolower($tag));
|
||||
|
Loading…
x
Reference in New Issue
Block a user