From 3a2b3598eae4da09db890f2fedc356418cb719b6 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Tue, 10 Feb 2009 19:41:20 +0000 Subject: [PATCH] first part of EDU person --- lam/lib/modules/eduPerson.inc | 305 ++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 lam/lib/modules/eduPerson.inc diff --git a/lam/lib/modules/eduPerson.inc b/lam/lib/modules/eduPerson.inc new file mode 100644 index 00000000..42e6c860 --- /dev/null +++ b/lam/lib/modules/eduPerson.inc @@ -0,0 +1,305 @@ +autoAddObjectClasses = false; + } + + /** + * Returns meta data that is interpreted by parent class + * + * @return array array with meta data + * + * @see baseModule::get_metaData() + */ + function get_metaData() { + $return = array(); + // icon + $return['icon'] = 'uid.png'; + // manages host accounts + $return["account_types"] = array("user"); + // alias name + $return["alias"] = _("EDU person"); + // module dependencies + $return['dependencies'] = array('depends' => array(), 'conflicts' => array()); + // managed object classes + $return['objectClasses'] = array('eduPerson'); + // managed attributes + $return['attributes'] = array('eduPersonAffiliation', 'eduPersonNickname', + 'eduPersonOrgDN', 'eduPersonOrgUnitDN', + 'eduPersonPrimaryAffiliation', 'eduPersonPrincipalName', + 'eduPersonEntitlement', 'eduPersonPrimaryOrgUnitDN', + 'eduPersonScopedAffiliation'); + // help Entries + $return['help'] = array( + 'primaryAffiliation' => array( + "Headline" => _("Primary affiliation"), + "Text" => _("Specifies the person's primary relationship to the institution in broad categories such as student, faculty, staff, alum, etc.") + ), + 'nickName' => array( + "Headline" => _("Nick names"), + "Text" => _("This is a list of nick names for this user.") + ), + 'affiliation' => array( + "Headline" => _("Affiliations"), + "Text" => _("Specifies the person's relationship(s) to the institution in broad categories such as student, faculty, staff, alum, etc.") + ), + 'principalName' => array( + "Headline" => _("Principal name"), + "Text" => _("The \"NetID\" of the person for the purposes of inter-institutional authentication.") . + " " . _("It should be represented in the form \"user@scope\" where scope defines a local security domain.") + )); + // upload fields + $return['upload_columns'] = array( + array( + 'name' => 'ieee802Device_mac', + 'description' => _('MAC address'), + 'help' => 'macList', + 'example' => '00:01:02:DE:EF:18' + ) + ); + // available PDF fields + $return['PDF_fields'] = array( + 'affiliation', 'nickname', 'orgDN', 'orgUnitDN', + 'primaryAffiliation', 'principalName', 'entitlement', + 'primaryOrgUnitDN', 'scopedAffiliation' + ); + return $return; + } + + /** + * This function fills the error message array with messages + */ + function load_Messages() { + $this->messages['principalName'][0] = array('ERROR', 'Principal name is invalid!'); + $this->messages['principalName'][1] = array('ERROR', _('Account %s:') . ' eduPerson_principalName', 'Principal name is invalid!'); + } + + /** + * Returns the HTML meta data for the main account page. + * + * @return array HTML meta data + */ + function display_html_attributes() { + if (isset($_POST['form_subpage_eduPerson_attributes_addObjectClass'])) { + $this->attributes['objectClass'][] = 'eduPerson'; + } + $return = array(); + if (in_array('eduPerson', $this->attributes['objectClass'])) { + // principal name + $principal = ''; + if (isset($this->attributes['eduPersonPrincipalName'][0])) { + $principal = $this->attributes['eduPersonPrincipalName'][0]; + } + $return[] = array( + array('kind' => 'text', 'text' => _('Principal name')), + array('kind' => 'input', 'type' => 'text', 'name' => 'principalName', 'value' => $principal), + array('kind' => 'help', 'value' => 'principalName') + ); + // primary affiliation + $primaryAffiliation = array(); + if (isset($this->attributes['eduPersonPrimaryAffiliation'][0])) { + $primaryAffiliation = array($this->attributes['eduPersonPrimaryAffiliation'][0]); + } + $return[] = array( + array('kind' => 'text', 'text' => _('Primary affiliation')), + array('kind' => 'select', 'name' => 'primaryAffiliation', 'options' => $this->affiliationTypes, 'options_selected' => $primaryAffiliation), + array('kind' => 'help', 'value' => 'primaryAffiliation') + ); + // affiliations + $affiliations = array(); + if (isset($this->attributes['eduPersonAffiliation'][0])) { + for ($i = 0; $i < sizeof($this->attributes['eduPersonAffiliation']); $i++) { + $affiliations[] = array( + array('kind' => 'select', 'name' => 'affiliation' . $i, 'options' => $this->affiliationTypes, 'options_selected' => array($this->attributes['eduPersonAffiliation'][$i])), + array('kind' => 'input', 'type' => 'submit', 'name' => 'delAffiliation' . $i, 'image' => 'delete.png', 'value' => ' ', 'title' => _('Delete')) + ); + } + } + else { + $affiliations = array(array(array('kind' => 'text', 'text' => '-'))); + } + $return[] = array( + array('kind' => 'text', 'text' => _('Affiliations'), 'td' => array('valign' => 'top')), + array('kind' => 'table', 'value' => $affiliations), + array('kind' => 'help', 'value' => 'affiliation', 'td' => array('valign' => 'top')) + ); + $return[] = array( + array('kind' => 'text', 'text' => ' '), + array('kind' => 'table', 'value' => array(array( + array('kind' => 'select', 'name' => 'affiliation', 'options' => $this->affiliationTypes), + array('kind' => 'input', 'type' => 'submit', 'name' => 'newAffiliation', 'image' => 'add.png', 'value' => ' ', 'title' => _('Add')) + ))), + array('kind' => 'text', 'text' => ' ')); + // nick names + $nicks = array(); + if (isset($this->attributes['eduPersonNickname'][0])) { + for ($i = 0; $i < sizeof($this->attributes['eduPersonNickname']); $i++) { + $nicks[] = array( + array('kind' => 'input', 'name' => 'nickName' . $i, 'type' => 'text', 'value' => $this->attributes['eduPersonNickname'][$i]), + array('kind' => 'input', 'type' => 'submit', 'name' => 'delNickName' . $i, 'image' => 'delete.png', 'value' => ' ', 'title' => _('Delete')) + ); + } + } + else { + $nicks = array(array(array('kind' => 'text', 'text' => '-'))); + } + $return[] = array( + array('kind' => 'text', 'text' => _('Nick names'), 'td' => array('valign' => 'top')), + array('kind' => 'table', 'value' => $nicks), + array('kind' => 'help', 'value' => 'nickName', 'td' => array('valign' => 'top')) + ); + $return[] = array( + array('kind' => 'text', 'text' => ' '), + array('kind' => 'table', 'value' => array(array( + array('kind' => 'input', 'name' => 'nickName', 'type' => 'text', 'value' => ''), + array('kind' => 'input', 'type' => 'submit', 'name' => 'newNickName', 'image' => 'add.png', 'value' => ' ', 'title' => _('Add')) + ))), + array('kind' => 'text', 'text' => ' ')); + } + else { + $return[] = array( + array('kind' => 'text', 'text' => ' '), + array('kind' => 'input', 'type' => 'submit', 'name' => 'form_subpage_eduPerson_attributes_addObjectClass', 'value' => _('Add EDU person extension')) + ); + } + return $return; + } + + /** + * Processes user input of the primary module page. + * It checks if all input values are correct and updates the associated LDAP attributes. + * + * @return array list of info/error messages + */ + function process_attributes() { + $errors = array(); + // primary affiliation + $this->attributes['eduPersonPrimaryAffiliation'][0] = $_POST['primaryAffiliation']; + // principal name + $this->attributes['eduPersonPrincipalName'][0] = $_POST['principalName']; + if ($_POST['principalName'] != '') { + if (eregi('^[0-9a-z_\\.@-]+$', $_POST['principalName']) === false) { + $errors[] = $this->messages['principalName'][0]; + } + } + // affiliations + $this->attributes['eduPersonAffiliation'] = array(); + $i = 0; + while (isset($_POST['affiliation' . $i])) { + if (!isset($_POST['delAffiliation' . $i]) && ($_POST['affiliation' . $i] != '')) { + $this->attributes['eduPersonAffiliation'][] = $_POST['affiliation' . $i]; + } + $i++; + } + if (isset($_POST['newAffiliation']) && ($_POST['affiliation'] != '')) { + $this->attributes['eduPersonAffiliation'][] = $_POST['affiliation']; + } + $this->attributes['eduPersonAffiliation'] = array_unique($this->attributes['eduPersonAffiliation']); + // nick names + $this->attributes['eduPersonNickname'] = array(); + $i = 0; + while (isset($_POST['nickName' . $i])) { + if (!isset($_POST['delNickName' . $i]) && ($_POST['nickName' . $i] != '')) { + $this->attributes['eduPersonNickname'][] = $_POST['nickName' . $i]; + } + $i++; + } + if (isset($_POST['newNickName']) && ($_POST['nickName'] != '')) { + $this->attributes['eduPersonNickname'][] = $_POST['nickName']; + } + $this->attributes['eduPersonNickname'] = array_unique($this->attributes['eduPersonNickname']); + return $errors; + } + + /** + * In this function the LDAP account is built up. + * + * @param array $rawAccounts list of hash arrays (name => value) from user input + * @param array $partialAccounts list of hash arrays (name => value) which are later added to LDAP + * @param array $ids list of IDs for column position (e.g. "posixAccount_uid" => 5) + * @return array list of error messages if any + */ + function build_uploadAccounts($rawAccounts, $ids, &$partialAccounts) { + $messages = array(); + for ($i = 0; $i < sizeof($rawAccounts); $i++) { + // add object class + if (!in_array("eduPerson", $partialAccounts[$i]['objectClass'])) $partialAccounts[$i]['objectClass'][] = "eduPerson"; + // primary affiliation + if ($rawAccounts[$i][$ids['eduPerson_primaryAffiliation']] != "") { + + } + } + return $messages; + } + + /** + * Returns the PDF entries for this module. + * + * @return array list of possible PDF entries + */ + function get_pdfEntries() { + $return = array(); + if (isset($this->attributes['eduPersonPrimaryAffiliation'][0])) { + $return['eduPerson_primaryAffiliation'][0] = '' . _('Primary affiliation') . '' . $this->attributes['eduPersonPrimaryAffiliation'][0] . ''; + } + if (isset($this->attributes['eduPersonPrincipalName'][0])) { + $return['eduPerson_principalName'][0] = '' . _('Principal name') . '' . $this->attributes['eduPersonPrincipalName'][0] . ''; + } + if (isset($this->attributes['eduPersonNickname'][0])) { + sort($this->attributes['eduPersonNickname']); + $return['eduPerson_nickname'][0] = '' . _('Nick names') . '' . implode(', ', $this->attributes['eduPersonNickname']) . ''; + } + if (isset($this->attributes['eduPersonAffiliation'][0])) { + sort($this->attributes['eduPersonAffiliation']); + $return['eduPerson_affiliation'][0] = '' . _('Affiliations') . '' . implode(', ', $this->attributes['eduPersonAffiliation']) . ''; + } + return $return; + } + +} + + +?>