added possibility to mark upload columns as containing unique entries

This commit is contained in:
Roland Gruber 2004-10-09 11:09:53 +00:00
parent e8a916a68b
commit 81aa810c0c
3 changed files with 41 additions and 7 deletions

View File

@ -492,7 +492,10 @@ help:</span> help ID</li>
<li><span style="font-weight: bold;"><span style="font-style: italic;">string</span>
example:</span> example value</li>
<li><span style="font-weight: bold;"><span style="font-style: italic;">boolean</span>
required:</span> true, if user must set a value for this column<br>
required:</span> true, if user must set a value for this column</li>
<li><span style="font-weight: bold;">boolean unique:</span> true if
all values of this column must be different values <span
style="font-style: italic; font-weight: bold;">(optional)</span><br>
</li>
</ul>
<br>

View File

@ -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."));
}

View File

@ -87,8 +87,8 @@ echo "<body>\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(); // <column name> => <column number for $data>
// 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);