LABEL_CREATE_ANOTHER_ACCOUNT = _('Create another user'); $this->LABEL_BACK_TO_ACCOUNT_LIST = _('Back to user list'); } /** * Returns the alias name of this account type. * * @return string alias name */ function getAlias() { return _("Users"); } /** * Returns the description of this account type. * * @return string description */ function getDescription() { return _("User accounts (e.g. Unix, Samba and Kolab)"); } /** * Returns the class name for the list object. * * @return string class name */ function getListClassName() { return "lamUserList"; } /** * Returns the default attribute list for this account type. * * @return string attribute list */ function getDefaultListAttributes() { return "#uid;#givenName;#sn;#uidNumber;#gidNumber"; } /** * Returns a list of attributes which have a translated description. * This is used for the head row in the list view. * * @return array list of descriptions */ function getListAttributeDescriptions() { return array ( "uid" => _("User ID"), "uidnumber" => _("UID number"), "gidnumber" => _("GID number"), "cn" => _("User name"), "host" => _("Allowed hosts"), "givenname" => _("First name"), "sn" => _("Last name"), "homedirectory" => _("Home directory"), "loginshell" => _("Login shell"), "mail" => _("E-Mail"), "gecos" => _("Description"), "jpegphoto" => _('Photo') ); } } /** * Generates the list view. * * @package lists * @author Roland Gruber * */ class lamUserList extends lamList { /** Controls if GID number is translated to group name */ private $trans_primary = false; /** translates GID to group name */ private $trans_primary_hash = array(); /** ID for config option */ const TRANS_PRIMARY_OPTION_NAME = "LU_TP"; /** * Constructor * * @param string $type account type * @return lamList list object */ public function __construct($type) { parent::__construct($type); $this->labels = array( 'nav' => _("%s user(s) found"), 'error_noneFound' => _("No users found!"), 'newEntry' => _("New user"), 'deleteEntry' => _("Delete user(s)")); } /** * Sets some internal parameters. */ protected function listGetParams() { parent::listGetParams(); // generate hash table for group translation if ($this->trans_primary == "on" && !$this->refresh && (sizeof($this->trans_primary_hash) == 0)) { $this->refreshPrimaryGroupTranslation(); } } /** * Rereads the entries from LDAP. */ protected function listRefreshData() { parent::listRefreshData(); if ($this->trans_primary == "on") { $this->refreshPrimaryGroupTranslation(); } } /** * Refreshes the GID to group name cache. */ protected function refreshPrimaryGroupTranslation() { $this->trans_primary_hash = array(); $grp_suffix = $_SESSION['config']->get_Suffix('group'); $filter = "objectClass=posixGroup"; $attrs = array("cn", "gidNumber"); $entries = searchLDAPByAttribute(null, null, 'posixGroup', $attrs, array('group')); for ($i = 0; $i < sizeof($entries); $i++) { $this->trans_primary_hash[$entries[$i]['gidnumber'][0]] = $entries[$i]['cn'][0]; } } /** * Prints the content of a cell in the account list for a given LDAP entry and attribute. * * @param array $entry LDAP attributes * @param string $attribute attribute name */ protected function listPrintTableCellContent(&$entry, &$attribute) { // check if there is something to display at all if (!isset($entry[$attribute]) || !is_array($entry[$attribute]) || (sizeof($entry[$attribute]) < 1)) return; // translate GID to group name if (($attribute == "gidnumber") && ($this->trans_primary == "on")) { if (isset($this->trans_primary_hash[$entry[$attribute][0]])) { echo $this->trans_primary_hash[$entry[$attribute][0]]; } else { parent::listPrintTableCellContent($entry, $attribute); } } // show user photos elseif ($attribute == "jpegphoto") { if (sizeof($entry[$attribute][0]) < 100) { // looks like we have read broken binary data, reread photo $result = @ldap_read($_SESSION['ldap']->server(), escapeDN($entry['dn']), $attribute . "=*", array($attribute), 0, 0, 0, LDAP_DEREF_NEVER); if ($result) { $tempEntry = @ldap_first_entry($_SESSION['ldap']->server(), $result); if ($tempEntry) { $binData = ldap_get_values_len($_SESSION['ldap']->server(), $tempEntry, $attribute); $entry[$attribute] = $binData; } } } $imgNumber = $_SESSION['ldap']->new_rand(); $jpeg_filename = 'jpg' . $imgNumber . '.jpg'; $outjpeg = @fopen(dirname(__FILE__) . '/../../tmp/' . $jpeg_filename, "wb"); fwrite($outjpeg, $entry[$attribute][0]); fclose ($outjpeg); $photoFile = '../../tmp/' . $jpeg_filename; $imgSize = getimagesize($photoFile); $minSize = 64; if ($imgSize[0] < 64) { $minSize = $imgSize[0]; } $imgTitle = _('Click to switch between thumbnail and original size.'); echo "\"""; echo ''; } elseif (($attribute == 'mail') || ($attribute == 'rfc822Mailbox')) { if (isset($entry[$attribute][0]) && ($entry[$attribute][0] != '')) { for ($i = 0; $i < sizeof($entry[$attribute]); $i++) { if ($i > 0) { echo ", "; } echo "" . $entry[$attribute][$i] . "\n"; } } } // print all other attributes else { parent::listPrintTableCellContent($entry, $attribute); } } /** * Returns a list of lamListTool objects to display next to the edit/delete buttons. * * @return lamListTool[] tools */ protected function getAdditionalTools() { if (isLAMProVersion() && checkIfPasswordChangeIsAllowed()) { $passwordTool = new lamListTool(_('Change password'), 'key.png', 'changePassword.php'); return array($passwordTool); } return array(); } /** * Returns a list of possible configuration options. * * @return array list of lamListOption objects */ protected function listGetAllConfigOptions() { $options = parent::listGetAllConfigOptions(); $options[] = new lamBooleanListOption(_('Translate GID number to group name'), self::TRANS_PRIMARY_OPTION_NAME); return $options; } /** * Called when the configuration options changed. */ protected function listConfigurationChanged() { parent::listConfigurationChanged(); $tpOption = $this->listGetConfigOptionByID(self::TRANS_PRIMARY_OPTION_NAME); $this->trans_primary = $tpOption->isSelected(); } } ?>