summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/api/kolab_api_service_form_value.php60
-rw-r--r--lib/api/kolab_api_service_user.php6
-rw-r--r--lib/client/kolab_client_task_user.php8
-rw-r--r--lib/kolab_api_controller.php2
-rw-r--r--public_html/js/kolab_admin.js12
5 files changed, 47 insertions, 41 deletions
diff --git a/lib/api/kolab_api_service_form_value.php b/lib/api/kolab_api_service_form_value.php
index c778e5e..fa7ee28 100644
--- a/lib/api/kolab_api_service_form_value.php
+++ b/lib/api/kolab_api_service_form_value.php
@@ -48,16 +48,6 @@ class kolab_api_service_form_value extends kolab_api_service
*/
public function generate($getdata, $postdata)
{
- if (empty($postdata['attribute'])) {
- throw new Exception($this->controller->translate('form_value.noattribute'), 35);
- }
-
- $method_name = 'generate_' . strtolower($postdata['attribute']);
-
- if (!method_exists($this, $method_name)) {
- throw new Exception($this->controller->translate('form_value.unknownattribute'), 36);
- }
-
if (isset($postdata['user_type_id'])) {
$attribs = $this->user_type_attributes($postdata['user_type_id']);
}
@@ -68,7 +58,24 @@ class kolab_api_service_form_value extends kolab_api_service
$attribs = array();
}
- return $this->{$method_name}($postdata, $attribs);
+ $attributes = (array) $postdata['attributes'];
+ $result = array();
+
+ foreach ($attributes as $attr_name) {
+ if (empty($attr_name)) {
+ continue;
+ }
+
+ $method_name = 'generate_' . strtolower($attr_name);
+
+ if (!method_exists($this, $method_name)) {
+ continue;
+ }
+
+ $result[$attr_name] = $this->{$method_name}($postdata, $attribs);
+ }
+
+ return $result;
}
@@ -84,7 +91,7 @@ class kolab_api_service_form_value extends kolab_api_service
$cn = trim($postdata['givenname'] . " " . $postdata['sn']);
- return array("cn" => $cn);
+ return $cn;
}
}
@@ -103,7 +110,7 @@ class kolab_api_service_form_value extends kolab_api_service
$displayname = $postdata['sn'] . ", " . $displayname;
}
- return array("displayname" => $displayname);
+ return $displayname;
}
}
@@ -114,7 +121,7 @@ class kolab_api_service_form_value extends kolab_api_service
// TODO: Take a policy to use a known group ID, a known group (by name?)
// and/or create user private groups.
- return array('gidnumber' => 500);
+ return 500;
}
}
@@ -143,8 +150,7 @@ class kolab_api_service_form_value extends kolab_api_service
}
// TODO: Home directory base path from configuration?
-
- return array('homedirectory' => '/home/'.$uid);
+ return '/home/' . $uid;
}
}
@@ -181,7 +187,7 @@ class kolab_api_service_form_value extends kolab_api_service
$x++;
}
- return array('mail' => $mail);
+ return $mail;
}
}
@@ -189,15 +195,19 @@ class kolab_api_service_form_value extends kolab_api_service
{
if (isset($attribs['auto_form_fields']) && isset($attribs['auto_form_fields']['uidnumber'])) {
// This value is determined by the Kolab Daemon
- return array('mailhost' => '');
+ return '';
}
}
private function generate_password($postdata, $attribs = array())
{
exec("head -c 200 /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c15", $userpassword_plain);
- $userpassword_plain = $userpassword_plain[0];
- return array('password' => $userpassword_plain);
+ return $userpassword_plain[0];
+ }
+
+ private function generate_userpassword($postdata, $attribs = array())
+ {
+ return $this->generate_password($postdata, $attribs);
}
private function generate_uid($postdata, $attribs = array())
@@ -224,7 +234,7 @@ class kolab_api_service_form_value extends kolab_api_service
$x++;
}
- return array('uid' => $uid);
+ return $uid;
}
}
@@ -235,14 +245,8 @@ class kolab_api_service_form_value extends kolab_api_service
// TODO: Actually poll $auth for users with a uidNumber set, and take the next one.
- return array('uidnumber' => 500);
+ return 500;
}
}
- private function generate_userpassword($postdata, $attribs = array())
- {
- $password = $this->generate_password($getdata, $postdata, $attribs);
- return array('userpassword' => $password['password']);
- }
-
}
diff --git a/lib/api/kolab_api_service_user.php b/lib/api/kolab_api_service_user.php
index 32f6b22..d8e79e7 100644
--- a/lib/api/kolab_api_service_user.php
+++ b/lib/api/kolab_api_service_user.php
@@ -62,9 +62,9 @@ class kolab_api_service_user extends kolab_api_service
if (isset($uta['auto_form_fields'])) {
foreach ($uta['auto_form_fields'] as $key => $value) {
if (empty($postdata[$key])) {
- $postdata['attribute'] = $key;
- $res = $form_service->generate($getdata, $postdata);
- $postdata[$key] = $res[$key];
+ $postdata['attributes'] = array($key);
+ $res = $form_service->generate($getdata, $postdata);
+ $postdata[$key] = $res[$key];
}
$user_attributes[$key] = $postdata[$key];
}
diff --git a/lib/client/kolab_client_task_user.php b/lib/client/kolab_client_task_user.php
index b18a2b3..51ced0c 100644
--- a/lib/client/kolab_client_task_user.php
+++ b/lib/client/kolab_client_task_user.php
@@ -476,7 +476,7 @@ class kolab_client_task_user extends kolab_client_task
'maxlength' => 50,
);
- if (!empty($field['data'])) {
+ if (is_array($field) && !empty($field['data'])) {
foreach ($field['data'] as $fd) {
$event_fields[$fd][] = $idx;
}
@@ -505,7 +505,11 @@ class kolab_client_task_user extends kolab_client_task
if (!empty($field['values'])) {
$_fields[$idx]['options'] = array_combine($field['values'], $field['values']);
}
+ else {
+ $_fields[$idx]['options'] = array('');
+ }
break;
+
default:
$_fields[$idx]['type'] = kolab_form::INPUT_TEXT;
if (isset($field['maxlength'])) {
@@ -545,7 +549,7 @@ class kolab_client_task_user extends kolab_client_task
if ($add_mode) {
if (empty($data['userpassword'])) {
// Pre-populate password fields
- $post = array('attribute' => 'userpassword');
+ $post = array('attributes' => array('userpassword'));
$pass = $this->api->post('form_value.generate', null, $post);
$data['userpassword'] = $pass->get('userpassword');
}
diff --git a/lib/kolab_api_controller.php b/lib/kolab_api_controller.php
index b216a0e..cc23849 100644
--- a/lib/kolab_api_controller.php
+++ b/lib/kolab_api_controller.php
@@ -84,8 +84,6 @@ class kolab_api_controller
*/
public function get_service($service)
{
- error_log($service);
-
// we are the system!
if ($service == 'system') {
return $this;
diff --git a/public_html/js/kolab_admin.js b/public_html/js/kolab_admin.js
index d0c7361..08b6f31 100644
--- a/public_html/js/kolab_admin.js
+++ b/public_html/js/kolab_admin.js
@@ -438,9 +438,10 @@ function kolab_admin()
this.form_value_change = function(events)
{
- var i, j, data, e, elem, name, elem_name,
+ var i, j, e, elem, name, elem_name,
form = $('#'+this.env.form_id),
- type_id = $('[name="user_type_id"]', form).val();
+ type_id = $('[name="user_type_id"]', form).val(),
+ data = {user_type_id: type_id, attributes: []};
this.set_busy(true, 'loading');
@@ -451,16 +452,15 @@ function kolab_admin()
if (!e)
continue;
- data = {user_type_id: type_id, attribute: name};
+ data.attributes.push(name);
for (j=0; j<e.data.length; j++) {
elem_name = e.data[j];
- if (elem = $('[name="'+elem_name+'"]', form))
+ if (!data[elem_name] && (elem = $('[name="'+elem_name+'"]', form)))
data[elem_name] = elem.val();
}
-
- this.api_post('form_value.generate', data, 'form_value_response');
}
+ this.api_post('form_value.generate', data, 'form_value_response');
this.set_busy(false);
};