<?php
-// $Id$
// Drupalish, but does not use Drupal itself to generate the form
function build_site_form ($register_mode) {
$form = array();
- $form['site:name'] = array('title' => 'Site name', 'required' => TRUE,
- 'maxlength' => 40, 'size' => 20,
- 'comment' => '<strong>Site Information</strong>:');
- $form['site:login_base'] = array('title' => 'Login base', 'required' => TRUE,
- 'maxlength' => 16, 'size' => 10);
- $form['site:abbreviated_name'] = array('title' => 'Abbreviated name', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 12);
- $form['site:url'] = array('title' => 'URL', 'required' => TRUE,
- 'maxlength' => 30, 'size' => 30);
- $form['site:latitude'] = array('title' => 'Latitude', 'required' => FALSE,
- 'maxlength' => 10, 'size' => 10, 'type' => 'double');
- $form['site:longitude'] = array('title' => 'Longitude', 'required' => FALSE,
- 'maxlength' => 10, 'size' => 10, 'type' => 'double');
-
- $form['address:line1'] = array('title' => 'Address', 'required' => TRUE,
- 'maxlength' => 40, 'size' => 30,
- 'comment' => '<strong>Postal address</strong>:');
- $form['address:line2'] = array('title' => 'Address (2)', 'required' => FALSE,
- 'maxlength' => 40, 'size' => 30);
- $form['address:line3'] = array('title' => 'Address (3)', 'required' => FALSE,
- 'maxlength' => 40, 'size' => 30);
- $form['address:city'] = array('title' => 'City', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['address:postalcode'] = array('title' => 'Postal Code', 'required' => TRUE,
- 'maxlength' => 10, 'size' => 10);
-# would have liked it *not* required but it is mandatory in the DB - sigh
- $form['address:state'] = array('title' => 'State', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['address:country'] = array('title' => 'Country', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
-
- $form['pi:first_name'] = array('title' => 'PI First Name', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20,
- 'comment' => '<strong>Principal Investigator Information</strong>:');
- $form['pi:last_name'] = array('title' => 'PI Last Name', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['pi:title'] = array('title' => 'PI Title', 'required' => FALSE,
- 'maxlength' => 6, 'size' => 6);
- $form['pi:phone'] = array('title' => 'PI Phone', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['pi:email'] = array('title' => 'PI email', 'required' => TRUE,
- 'maxlength' => 40, 'size' => 20);
+ $form['site:name'] = array(
+ 'title' => 'Site name', 'required' => TRUE,
+ 'maxlength' => 40, 'size' => 20,
+ 'comment' => '<span class="bold">Site Information</span>');
+ $form['site:login_base'] = array(
+ 'title' => 'Login base', 'required' => TRUE,
+ 'maxlength' => 16, 'size' => 10);
+ $form['site:abbreviated_name'] = array(
+ 'title' => 'Abbreviated name', 'required' => TRUE,
+ 'maxlength' => 40, 'size' => 20);
+ $form['site:url'] = array(
+ 'title' => 'URL', 'required' => TRUE,
+ 'maxlength' => 128, 'size' => 30);
+ $form['site:latitude'] = array(
+ 'title' => 'Latitude', 'required' => TRUE,
+ 'maxlength' => 10, 'size' => 10, 'type' => 'double');
+ $form['site:longitude'] = array(
+ 'title' => 'Longitude', 'required' => TRUE,
+ 'maxlength' => 10, 'size' => 10, 'type' => 'double');
+
+ $form['pi:first_name'] = array(
+ 'title' => 'PI First Name', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20,
+ 'comment' => '<span class="bold">Principal Investigator Information</span>');
+ $form['pi:last_name'] = array(
+ 'title' => 'PI Last Name', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['pi:title'] = array(
+ 'title' => 'PI Title', 'required' => FALSE,
+ 'maxlength' => 6, 'size' => 6);
+ $form['pi:phone'] = array(
+ 'title' => 'PI Phone', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['pi:email'] = array(
+ 'title' => 'PI email', 'required' => TRUE,
+ 'maxlength' => 40, 'size' => 20);
if ($register_mode) {
- $form['pi:password'] = array('title' => 'PI password', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20, 'type' => 'password');
+ $form['pi:password'] = array(
+ 'title' => 'PI password', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20, 'type' => 'password');
}
copyValue("edit-pi:title","edit-tech:title");
copyValue("edit-pi:phone","edit-tech:phone");
copyValue("edit-pi:email","edit-tech:email");
-copyValue("edit-pi:password","edit-tech:password")'
-</input>
+copyValue("edit-pi:password","edit-tech:password")'
+</input>
EOF;
}
- $form['tech:first_name'] = array('title' => 'Tech First Name', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20,
- 'comment' => '<strong>Technical Contact Information</strong>:' . $fill_from_pi_button);
- $form['tech:last_name'] = array('title' => 'Tech Last Name', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['tech:title'] = array('title' => 'Tech Title', 'required' => FALSE,
- 'maxlength' => 6, 'size' => 6);
- $form['tech:phone'] = array('title' => 'Tech Phone', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20);
- $form['tech:email'] = array('title' => 'Tech email', 'required' => TRUE,
- 'maxlength' => 40, 'size' => 20);
+ $form['tech:first_name'] = array(
+
+ 'title' => 'Tech First Name', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20,
+ 'comment' => '<span class="bold">Technical Contact Information</span>' . $fill_from_pi_button);
+ $form['tech:last_name'] = array(
+ 'title' => 'Tech Last Name', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['tech:title'] = array(
+ 'title' => 'Tech Title', 'required' => FALSE,
+ 'maxlength' => 6, 'size' => 6);
+ $form['tech:phone'] = array(
+ 'title' => 'Tech Phone', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['tech:email'] = array(
+ 'title' => 'Tech email', 'required' => TRUE,
+ 'maxlength' => 40, 'size' => 20);
if ($register_mode) {
- $form['tech:password'] = array('title' => 'Tech password', 'required' => TRUE,
- 'maxlength' => 20, 'size' => 20, 'type' => 'password');
- $form['tech:user-role'] = array('type' => 'boolean', 'title' => 'Need user role', 'default' => TRUE);
+ $form['tech:password'] = array(
+ 'title' => 'Tech password', 'required' => TRUE,
+ 'maxlength' => 20, 'size' => 20, 'type' => 'password');
+ $form['tech:user-role'] = array(
+ 'type' => 'boolean', 'title' => 'Need user role', 'default' => TRUE);
}
+ $form['address:line1'] = array(
+ 'title' => 'Address', 'required' => FALSE,
+ 'maxlength' => 40, 'size' => 30,
+ 'comment' => '<span class="bold">Postal address</span>');
+ $form['address:line2'] = array(
+ 'title' => 'Address (2)', 'required' => FALSE,
+ 'maxlength' => 40, 'size' => 30);
+ $form['address:line3'] = array(
+ 'title' => 'Address (3)', 'required' => FALSE,
+ 'maxlength' => 40, 'size' => 30);
+ $form['address:city'] = array(
+ 'title' => 'City', 'required' => FALSE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['address:postalcode'] = array(
+ 'title' => 'Postal Code', 'required' => FALSE,
+ 'maxlength' => 10, 'size' => 10);
+# would have liked it *not* required but it is mandatory in the DB - sigh
+ $form['address:state'] = array(
+ 'title' => 'State', 'required' => FALSE,
+ 'maxlength' => 20, 'size' => 20);
+ $form['address:country'] = array(
+ 'title' => 'Country', 'required' => FALSE,
+ 'maxlength' => 20, 'size' => 20);
+
return $form;
}
-// input :
+// input :
// $form : the form as defined above
// $request : usually $_REQUEST
// $input : a dict ('site'=>$site ..)
// fill with values form the form
foreach ($form as $fullname => $item) {
- list($objname,$field) = split(":",$fullname);
+ list($objname,$field) = explode(":",$fullname);
$raw_input=$request[$fullname];
if (!empty($raw_input)) {
$empty_form = FALSE;
// implement type conversion
switch ($item['type']) {
case 'double':
- $input[$objname][$field] = doubleval(trim($raw_input));
- break;
+ $input[$objname][$field] = doubleval(trim($raw_input));
+ break;
case 'int':
- $input[$objname][$field] = intval(trim($raw_input));
- break;
+ $input[$objname][$field] = intval(trim($raw_input));
+ break;
case 'boolean':
- $input[$objname][$field] = ($raw_input=="yes");
- break;
+ $input[$objname][$field] = ($raw_input=="yes");
+ break;
case 'password':
case 'raw':
- $input[$objname][$field] = $raw_input;
- break;
+ $input[$objname][$field] = $raw_input;
+ break;
default:
- $input[$objname][$field] = trim($raw_input);
- break;
+ $input[$objname][$field] = trim($raw_input);
+ break;
}
} else {
switch ($item['type']) {
case 'double':
- $input[$objname][$field] = 0.0;
- break;
+ $input[$objname][$field] = 0.0;
+ break;
case 'int':
- $input[$objname][$field] = 0;
- break;
+ $input[$objname][$field] = 0;
+ break;
case 'boolean':
- if (array_key_exists($field,$request)) {
- $input[$objname][$field]=FALSE;
- }
- break;
+ if (array_key_exists($field,$request)) {
+ $input[$objname][$field]=FALSE;
+ }
+ break;
default:
- $input[$objname][$field] = '';
- break;
+ $input[$objname][$field] = '';
+ break;
}
}
}
function form_check_required ($form, $input) {
$missing = array();
foreach ($form as $fullname => $item) {
- list($objname,$field) = split(":",$fullname);
+ list($objname, $field) = explode(":", $fullname);
if ($item['required'] && empty($input[$objname][$field])) {
$missing[] = $item['title'];
}
}
- if (empty($missing))
+ if (empty($missing))
return "";
$error = "<ul>";
foreach ($missing as $field) {
return $error;
}
+// 2022 may 07
+// some additional checks to stay clear of some robots triggering
+// site registration storms
+// would detect an error if any of the folowing fields are
+// only numbers (the attack typically fills everything with '1')
+// besides, need to dig a bit because
+// the site registration that we get can't be Deleted
+// because some fields are missing (PI Phone and Tech Phone for example)
+function form_check_non_numeric($form, $input) {
+ $to_check = ["name", "login_base", "abbreviated_name", "url"];
+ $only_numeric = array();
+// var_dump($form);
+ foreach ($form as $fullname => $item) {
+ list($objname, $field) = explode(":", $fullname);
+ if (in_array($field, $to_check) && is_numeric($input[$objname][$field])) {
+ $only_numeric[] = $item['title'];
+ }
+ }
+ if (empty($only_numeric))
+ return "";
+ $error = "<ul>";
+ foreach ($only_numeric as $field) {
+ $error .= "<li> Field '$field' can not be only numeric.</li>";
+ }
+ $error .= "</ul>";
+ return $error;
+}
+
// displays the actual form, with values from $input
// if $outline_missing is set, missing required fields are outlined
// fields typed as 'password' are displayed differently
function form_render_details ($details, $site_form, $input, $outline_missing) {
foreach ($site_form as $fullname => $item) {
-
- list($objname,$field) = split(":",$fullname);
-
+
+ list($objname,$field) = explode(":",$fullname);
+
// render the comment field
if ( ! empty($item['comment'])) {
$details->space();
if ($item['type'] == 'boolean') {
// compute boolean default : whether we have this in the request
if (array_key_exists($field,$input[$objname])) {
- $default = $input[$objname][$field] ;
+ $default = $input[$objname][$field] ;
} else { // or not - in which case we use the form default
- $default = ($item['default'] == TRUE);
+ $default = ($item['default'] == TRUE);
}
if ($default) {
- $checkedyes = "checked='checked'";
- $checkedno = "";
+ $checkedyes = "checked='checked'";
+ $checkedno = "";
} else {
- $checkedyes = "";
- $checkedno = "checked='checked'";
+ $checkedyes = "";
+ $checkedno = "checked='checked'";
}
$right_part = <<<EOF
<input type='radio' id="check-$fullname" name="$fullname" value="yes" $checkedyes> Yes
$maxlength = $item['maxlength'];
$size = $item['size'];
$right_part= <<<EOF
-<input type="$type" id="edit-$fullname" name="$fullname" value="$value"
-size="$size" maxlength="$maxlength"
-class="form-text $class" />
+<input type="$type" id="edit-$fullname" name="$fullname" value="$value"
+size="$size" maxlength="$maxlength"
+class="form-text $class" />
EOF;
}