diff --git a/lam/docs/modules-specification.htm b/lam/docs/modules-specification.htm
index fb7871d8..12184279 100644
--- a/lam/docs/modules-specification.htm
+++ b/lam/docs/modules-specification.htm
@@ -492,7 +492,10 @@ help: help ID
string
example: example value
boolean
-required: true, if user must set a value for this column
+required: true, if user must set a value for this column
+ boolean unique: true if
+all values of this column must be different values (optional)
diff --git a/lam/lib/modules/posixGroup.inc b/lam/lib/modules/posixGroup.inc
index 2714548a..f9c7ba4c 100644
--- a/lam/lib/modules/posixGroup.inc
+++ b/lam/lib/modules/posixGroup.inc
@@ -59,7 +59,9 @@ class posixGroup extends baseModule {
$partialAccounts[$i]['cn'] = $rawAccounts[$i][$ids['posixGroup_cn']];
}
else {
- $errors[] =$this->messages['cn'][2];
+ $errMsg = $this->messages['cn'][3];
+ array_push($errMsg, array($i));
+ $errors[] = $errMsg;
}
// GID
if ($rawAccounts[$i][$ids['posixGroup_gid']] == "") {
@@ -69,6 +71,11 @@ class posixGroup extends baseModule {
elseif (get_preg($rawAccounts[$i][$ids['posixGroup_gid']], 'digit')) {
$partialAccounts[$i]['gidNumber'] = $rawAccounts[$i][$ids['posixGroup_gid']];
}
+ else {
+ $errMsg = $this->messages['gidNumber'][8];
+ array_push($errMsg, array($i));
+ $errors[] = $errMsg;
+ }
// description (UTF-8, no regex check needed)
if ($rawAccounts[$i][$ids['posixGroup_description']] == "") {
$partialAccounts[$i]['description'] = $partialAccounts[$i]['cn'];
@@ -293,13 +300,14 @@ class posixGroup extends baseModule {
'description' => _('Group name'),
'help' => 'cn',
'example' => _('adminstrators'),
- 'required' => true
+ 'required' => true,
+ 'unique' => true
),
array(
'name' => 'posixGroup_gid',
'description' => _('GID number'),
'help' => 'gidNumber',
- 'example' => _('2034'),
+ 'example' => '2034',
'required' => false
),
array(
@@ -410,9 +418,11 @@ class posixGroup extends baseModule {
$this->messages['gidNumber'][5] = array('ERROR', _('Minimum GID number'), _('Minimum GID number is invalid or empty!'));
$this->messages['gidNumber'][6] = array('ERROR', _('Maximum GID number'), _('Maximum GID number is invalid or empty!'));
$this->messages['gidNumber'][7] = array('ERROR', _('Maximum GID number'), _('Maximum GID number must be greater than minimum GID number!'));
+ $this->messages['gidNumber'][8] = array('ERROR', _('Account %s: posixGroup_gid'), _('GID number has to be a numeric value!'));
$this->messages['cn'][0] = array('WARN', _('Groupname'), _('You are using a capital letters. This can cause problems because windows isn\'t case-sensitive.'));
$this->messages['cn'][1] = array('WARN', _('Groupname'), _('Groupname in use. Selected next free groupname.'));
$this->messages['cn'][2] = array('ERROR', _('Groupname'), _('Groupname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !'));
+ $this->messages['cn'][3] = array('ERROR', _('Account %s: posixGroup_cn'), _('Groupname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !'));
$this->messages['memberUID'][0] = array('ERROR', 'Account %s: posixGroup_members', _("This value must be a list of user names separated by semicolons."));
}
diff --git a/lam/templates/massBuildAccounts.php b/lam/templates/massBuildAccounts.php
index a58758f3..043943db 100644
--- a/lam/templates/massBuildAccounts.php
+++ b/lam/templates/massBuildAccounts.php
@@ -87,8 +87,8 @@ echo "\n";
if ($_FILES['inputfile'] && ($_FILES['inputfile']['size'] > 0)) {
// check if input file is well formated
- $data = array();
- $ids = array();
+ $data = array(); // input values without first row
+ $ids = array(); // =>
// get input fields from modules
$columns = getUploadColumns($_POST['scope']);
// read input file
@@ -101,8 +101,10 @@ if ($_FILES['inputfile'] && ($_FILES['inputfile']['size'] > 0)) {
while (($line = fgetcsv($handle, 2000)) !== false ) { // account rows
$data[] = $line;
}
- // check if all required attributes are given
+
$errors = array();
+
+ // check if all required columns are present
$checkcolumns = array();
$columns = call_user_func_array('array_merge', $columns);
for ($i = 0; $i < sizeof($columns); $i++) {
@@ -111,6 +113,8 @@ if ($_FILES['inputfile'] && ($_FILES['inputfile']['size'] > 0)) {
else $errors[] = array(_("A required column is missing in your CSV file."), $columns[$i]['name']);
}
}
+
+ // check if all required attributes are given
$invalidColumns = array();
$id_names = array_keys($ids);
for ($i = 0; $i < sizeof($checkcolumns); $i++) {
@@ -130,10 +134,27 @@ if ($_FILES['inputfile'] && ($_FILES['inputfile']['size'] > 0)) {
for ($i = 0; $i < sizeof($invalidColumns); $i++) {
$errors[] = array(_("One or more values of the required column \"$invalidColumns[$i]\" are missing."), "");
}
+
+ // check if values in unique columns are correct
+ for ($i = 0; $i < sizeof($columns); $i++) {
+ if ($columns[$i]['unique'] == true) {
+ $colNumber = $ids[$columns[$i]['name']];
+ $values_given = array();
+ for ($r = 0; $r < sizeof($data); $r++) {
+ $values_given[] = $data[$r][$colNumber];
+ }
+ $values_unique = array_unique($values_given);
+ if (sizeof($values_given) != sizeof($values_unique)) {
+ $errors[] = array(_("This column is defined to include unique entries but duplicates were found:"), $columns[$i]['name']);
+ }
+ }
+ }
+
// if input data is invalid just display error messages (max 50)
if (sizeof($errors) > 0) {
for ($i = 0; $i < sizeof($errors); $i++) StatusMessage("ERROR", $errors[$i][0], $errors[$i][1]);
}
+
// let modules build accounts
else {
$accounts = buildUploadAccounts($_POST['scope'], $data, $ids);