responsive

This commit is contained in:
Roland Gruber 2019-08-23 22:03:29 +02:00
parent 9fa374e2b4
commit 493150ab6f
4 changed files with 87 additions and 90 deletions

View File

@ -1,10 +1,9 @@
<?php
/*
$Id$
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2008 Thomas Manninger
2008 - 2017 Roland Gruber
2008 - 2019 Roland Gruber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -356,7 +355,7 @@ class ddns extends baseModule {
public function display_html_attributes() {
$this->attributes = &$this->getAccountContainer()->getAccountModule('dhcp_settings')->attributes;
$this->orig = &$this->getAccountContainer()->getAccountModule('dhcp_settings')->orig;
$return = new htmlTable();
$return = new htmlResponsiveRow();
// check if DHCP main settings and valid DHCP entry
if ($this->isRootNode()) {
if (!in_array_ignore_case('dhcpService', $this->attributes['objectClass']) && !in_array_ignore_case('dhcpServer', $this->attributes['objectClass'])) {
@ -364,21 +363,21 @@ class ddns extends baseModule {
return $return;
}
// DHCP main settings
$return->addElement(new htmlTableExtendedInputCheckbox('active', $this->isDynDNSActivated(), _('Activate DynDNS'), 'active'), true);
$return->addElement(new htmlTableExtendedInputCheckbox('insert_fixed', $this->addFixIPs(), _('Add fix IP addresses to DNS'), 'fixed_ips'), true);
$return->addElement(new htmlTableExtendedInputCheckbox('client_insert', $this->isIgnoreClientUpdates(), _('Disable client updates'), 'client_insert'), true);
$keyInput = new htmlTableExtendedInputField(_('Path to key for DNS updates'), 'key_path', $this->getUpdateKey(), 'keypath');
$return->addElement($keyInput);
$return->add(new htmlResponsiveInputCheckbox('active', $this->isDynDNSActivated(), _('Activate DynDNS'), 'active'), 12);
$return->add(new htmlResponsiveInputCheckbox('insert_fixed', $this->addFixIPs(), _('Add fix IP addresses to DNS'), 'fixed_ips'), 12);
$return->add(new htmlResponsiveInputCheckbox('client_insert', $this->isIgnoreClientUpdates(), _('Disable client updates'), 'client_insert'), 12);
$keyInput = new htmlResponsiveInputField(_('Path to key for DNS updates'), 'key_path', $this->getUpdateKey(), 'keypath');
$return->add($keyInput, 12);
}
else {
// Account edit
if (!$this->check_if_ddns_is_enable()) {
$return->addElement(new htmlOutputText(_("DDNS ist not activated. You can activate it in the DHCP settings (DDNS).")));
$return->add(new htmlOutputText(_("DDNS ist not activated. You can activate it in the DHCP settings (DDNS).")), 12);
}
else {
// DNS server
$serverInput = new htmlTableExtendedInputField(_('IP address of the DNS server'), 'ip', $this->getDNSServer(), 'dns');
$return->addElement($serverInput, true);
$serverInput = new htmlResponsiveInputField(_('IP address of the DNS server'), 'ip', $this->getDNSServer(), 'dns');
$return->add($serverInput, 12);
$zones = $this->getZoneNames();
$zone = '';
@ -390,11 +389,11 @@ class ddns extends baseModule {
$revzone = $zones[1];
}
// zone name
$zoneInput = new htmlTableExtendedInputField(_('Zone name'), 'zone', $zone, 'zone');
$return->addElement($zoneInput, true);
$zoneInput = new htmlResponsiveInputField(_('Zone name'), 'zone', $zone, 'zone');
$return->add($zoneInput, 12);
// reverse zone name
$revZoneInput = new htmlTableExtendedInputField(_('Reverse zone name'), 'zone_reverse', $revzone, 'zone_reverse');
$return->addElement($revZoneInput);
$revZoneInput = new htmlResponsiveInputField(_('Reverse zone name'), 'zone_reverse', $revzone, 'zone_reverse');
$return->add($revZoneInput, 12);
}
}

View File

@ -3,7 +3,7 @@
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2008 Thomas Manninger
2008 - 2018 Roland Gruber
2008 - 2019 Roland Gruber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -566,11 +566,11 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
* @return htmlElement HTML meta data
*/
public function display_html_attributes() {
$return = new htmlTable();
$return = new htmlResponsiveRow();
// check if DHCP main settings and valid DHCP entry
if ($this->isRootNode()) {
if (!in_array_ignore_case('dhcpService', $this->attributes['objectClass']) && !in_array_ignore_case('dhcpServer', $this->attributes['objectClass'])) {
$return->addElement(new htmlStatusMessage('ERROR', _('Please set your LDAP suffix to an LDAP entry with object class "dhcpService" or "dhcpServer".')));
$return->add(new htmlStatusMessage('ERROR', _('Please set your LDAP suffix to an LDAP entry with object class "dhcpService" or "dhcpServer".')), 12);
return $return;
}
}
@ -580,23 +580,22 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
if (isset($this->attributes['cn'][0])) {
$cn = $this->attributes['cn'][0];
}
$subnetInput = new htmlTableExtendedInputField(_('Subnet'), 'cn', $cn, 'subnet');
$subnetInput = new htmlResponsiveInputField(_('Subnet'), 'cn', $cn, 'subnet');
$subnetInput->setRequired(true);
$return->addElement($subnetInput);
$return->addElement(new htmlOutputText(_('Example') . ": 192.168.10.0"), true);
$return->add($subnetInput, 12);
}
// domain name
$return->addElement(new htmlTableExtendedInputField(_('Domain name'), 'domainname', $this->getDHCPOption('domain-name'), 'domainname'), true);
$return->add(new htmlResponsiveInputField(_('Domain name'), 'domainname', $this->getDHCPOption('domain-name'), 'domainname'), 12);
// lease Time
$leasetimeInput = new htmlTableExtendedInputField(_('Lease time'), 'lease_time', $this->getDefaultLeaseTime(), 'leasetime');
$leasetimeInput = new htmlResponsiveInputField(_('Lease time'), 'lease_time', $this->getDefaultLeaseTime(), 'leasetime');
$leasetimeInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
$return->addElement($leasetimeInput, true);
$return->add($leasetimeInput, 12);
// max lease time
$max_leasetimeInput = new htmlTableExtendedInputField(_('Maximum lease time'), 'max_lease_time', $this->getMaxLeaseTime(), 'max_leasetime');
$max_leasetimeInput = new htmlResponsiveInputField(_('Maximum lease time'), 'max_lease_time', $this->getMaxLeaseTime(), 'max_leasetime');
$max_leasetimeInput->setValidationRule(htmlElement::VALIDATE_NUMERIC);
$return->addElement($max_leasetimeInput, true);
$return->add($max_leasetimeInput, 12);
// DNS
$return->addElement(new htmlTableExtendedInputField(_('DNS'), 'dns', $this->getDHCPOption('domain-name-servers'), 'dns'), true);
$return->add(new htmlResponsiveInputField(_('DNS'), 'dns', $this->getDHCPOption('domain-name-servers'), 'dns'), 12);
// domain search
$domainSearchEntries = $this->getDHCPOption('domain-search');
if ($domainSearchEntries === null) {
@ -606,9 +605,9 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
$this->attributes['INFO_domain-search'] = $domainSearchEntries;
$this->addMultiValueInputTextField($return, 'INFO_domain-search', _('Search domains'));
// gateway
$return->addElement(new htmlTableExtendedInputField(_('Default gateway'), 'routers', $this->getDHCPOption('routers'), 'gateway'), true);
$return->add(new htmlResponsiveInputField(_('Default gateway'), 'routers', $this->getDHCPOption('routers'), 'gateway'), 12);
// netbios name servers
$return->addElement(new htmlTableExtendedInputField(_('Netbios name servers'), 'netbios', $this->getDHCPOption('netbios-name-servers'), 'netbios'), true);
$return->add(new htmlResponsiveInputField(_('Netbios name servers'), 'netbios', $this->getDHCPOption('netbios-name-servers'), 'netbios'), 12);
// netbios node type
$nodeType = $this->getDHCPOption('netbios-node-type');
if ($nodeType == '') {
@ -618,9 +617,9 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
foreach ($this->all_netbios_node_types as $key => $value) {
$nodeOptions[$value] = $key;
}
$nodeSelect = new htmlTableExtendedSelect('netbios_node_type', $nodeOptions, array($nodeType), _('Netbios node type'), 'netbios_type');
$nodeSelect = new htmlResponsiveSelect('netbios_node_type', $nodeOptions, array($nodeType), _('Netbios node type'), 'netbios_type');
$nodeSelect->setHasDescriptiveElements(true);
$return->addElement($nodeSelect, true);
$return->add($nodeSelect, 12);
if (!$this->isRootNode()) {
// unknown clients
@ -629,17 +628,13 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
$unknownClients = '-';
}
$unknownClientsOptions = array_flip($this->allowDenyOptions);
$unknownClientsSelect = new htmlTableExtendedSelect('unknownClients', $unknownClientsOptions, array($unknownClients), _('Unknown clients'), 'unknownClients');
$unknownClientsSelect = new htmlResponsiveSelect('unknownClients', $unknownClientsOptions, array($unknownClients), _('Unknown clients'), 'unknownClients');
$unknownClientsSelect->setHasDescriptiveElements(true);
$return->addElement($unknownClientsSelect, true);
$return->add($unknownClientsSelect, 12);
// subnetmask
$subnetMaskInput = new htmlTableExtendedInputField(_('Subnet mask'), 'subnet', $this->getDHCPOption('subnet-mask'), 'subnetmask');
$subnetMaskInput = new htmlResponsiveInputField(_('Subnet mask'), 'subnet', $this->getDHCPOption('subnet-mask'), 'subnetmask');
$subnetMaskInput->setRequired(true);
$return->addElement($subnetMaskInput, true);
// netmask
$return->addElement(new htmlOutputText(_('Net mask')));
$return->addElement(new htmlOutputText($this->attributes['dhcpNetMask'][0]));
$return->addElement(new htmlHelpLink('netmask'), true);
$return->add($subnetMaskInput, 12);
}
// description
@ -647,7 +642,12 @@ By default, the nodes are configured as H-Nodes which fits for small networks. I
if (isset($this->attributes['dhcpComments'][0])) {
$description = $this->attributes['dhcpComments'][0];
}
$return->addElement(new htmlTableExtendedInputField(_('Description'), 'description', $description, 'description'), true);
$return->add(new htmlResponsiveInputField(_('Description'), 'description', $description, 'description'), 12);
if (!$this->isRootNode()) {
// netmask
$return->addLabel(new htmlOutputText(_('Net mask')));
$return->addField(new htmlOutputText($this->attributes['dhcpNetMask'][0]));
}
return $return;
}

View File

@ -2,7 +2,7 @@
/*
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2009 - 2018 Roland Gruber
Copyright (C) 2009 - 2019 Roland Gruber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -270,7 +270,7 @@ class eduPerson extends baseModule {
* @return htmlElement HTML meta data
*/
function display_html_attributes() {
$return = new htmlTable();
$return = new htmlResponsiveRow();
if (in_array('eduPerson', $this->attributes['objectClass'])) {
// principal name
$this->addSimpleInputTextField($return, 'eduPersonPrincipalName', _('Principal name'));
@ -279,18 +279,18 @@ class eduPerson extends baseModule {
if (isset($this->attributes['eduPersonPrimaryAffiliation'][0])) {
$primaryAffiliation = array($this->attributes['eduPersonPrimaryAffiliation'][0]);
}
$return->addElement(new htmlTableExtendedSelect('primaryAffiliation', $this->affiliationTypes, $primaryAffiliation, _('Primary affiliation'), 'primaryAffiliation'), true);
$return->add(new htmlResponsiveSelect('primaryAffiliation', $this->affiliationTypes, $primaryAffiliation, _('Primary affiliation'), 'primaryAffiliation'), 12);
// scoped affiliations
$scopedAffiliationLabel = new htmlOutputText(_('Scoped affiliations'));
$scopedAffiliationLabel->alignment = htmlElement::ALIGN_TOP;
$return->addElement($scopedAffiliationLabel);
$return->addLabel($scopedAffiliationLabel);
$scopedAffiliations = new htmlTable();
if (isset($this->attributes['eduPersonScopedAffiliation'][0])) {
for ($i = 0; $i < sizeof($this->attributes['eduPersonScopedAffiliation']); $i++) {
$parts = explode('@', $this->attributes['eduPersonScopedAffiliation'][$i]);
$scopedAffiliationPrefix = array($parts[0]);
$scopedAffiliation = substr($this->attributes['eduPersonScopedAffiliation'][$i], strlen($parts[0]) + 1);
$scopedAffiliationContainer = new htmlGroup();
$scopedAffiliationContainer = new htmlTable();
$scopedAffiliationContainer->addElement(new htmlSelect('scopedAffiliationPrefix' . $i, $this->affiliationTypes, $scopedAffiliationPrefix));
$scopedAffiliationContainer->addElement(new htmlOutputText('@'));
$scopedAffiliationContainer->addElement(new htmlInputField('scopedAffiliation' . $i, $scopedAffiliation));
@ -305,38 +305,35 @@ class eduPerson extends baseModule {
$scopedAffiliationContainer = new htmlGroup();
$scopedAffiliationContainer->addElement(new htmlOutputText('-'));
$scopedAffiliationContainer->addElement(new htmlSpacer('10px', null));
$scopedAffiliationContainer->addElement(new htmlButton('addeduPersonScopedAffiliation', 'add.png', true));
$scopedAffiliationContainer->addElement(new htmlButton('addeduPersonScopedAffiliation', 'add.png'));
$scopedAffiliationContainer->addElement(new htmlHelpLink('scopedAffiliation'), true);
$scopedAffiliations->addElement($scopedAffiliationContainer);
}
$return->addElement($scopedAffiliations);
$scopedAffiliationHelp = new htmlHelpLink('scopedAffiliation');
$scopedAffiliationHelp->alignment = htmlElement::ALIGN_TOP;
$return->addElement($scopedAffiliationHelp, true);
$return->addField($scopedAffiliations);
// affiliations
$affiliations = new htmlTable();
if (isset($this->attributes['eduPersonAffiliation'][0])) {
for ($i = 0; $i < sizeof($this->attributes['eduPersonAffiliation']); $i++) {
$affiliations->addElement(new htmlSelect('affiliation' . $i, $this->affiliationTypes, array($this->attributes['eduPersonAffiliation'][$i])));
$affiliationButton = new htmlButton('delAffiliation' . $i, 'del.png', true);
$affiliations->addElement($affiliationButton, true);
$affiliations->addElement($affiliationButton);
if ($i === 0) {
$affiliations->addElement(new htmlHelpLink('affiliation'));
}
$affiliations->addNewLine();
}
}
else {
$affiliations->addElement(new htmlOutputText('-'), true);
$affiliations->addElement(new htmlOutputText('-'));
$affiliations->addElement(new htmlHelpLink('affiliation'), true);
}
$affiliations->addElement(new htmlSelect('affiliation', $this->affiliationTypes));
$affiliations->addElement(new htmlButton('newAffiliation', 'add.png', true));
$affiliationLabel = new htmlOutputText(_('Affiliations'));
$affiliationLabel->alignment = htmlElement::ALIGN_TOP;
$return->addElement($affiliationLabel);
$return->addElement($affiliations);
$affiliationHelp = new htmlHelpLink('affiliation');
$affiliationHelp->alignment = htmlElement::ALIGN_TOP;
$return->addElement($affiliationHelp, true);
$return->addElement(new htmlOutputText(''));
$newAffiliationContainer = new htmlTable();
$newAffiliationContainer->addElement(new htmlSelect('affiliation', $this->affiliationTypes));
$newAffiliationContainer->addElement(new htmlButton('newAffiliation', 'add.png', true));
$return->addElement($newAffiliationContainer);
$return->addElement(new htmlOutputText(''), true);
$return->addLabel($affiliationLabel);
$return->addField($affiliations);
$return->addVerticalSpacer('0.5rem');
// nick names
$this->addMultiValueInputTextField($return, 'eduPersonNickname', _('Nick names'));
// entitlements
@ -350,13 +347,12 @@ class eduPerson extends baseModule {
// assurance profiles
$this->addMultiValueInputTextField($return, 'eduPersonAssurance', _('Assurance profiles'));
// remove button
$return->addElement(new htmlSpacer(null, '10px'), true);
$return->addVerticalSpacer('2rem');
$addButton = new htmlButton('remObjectClass', _('Remove EDU person extension'));
$addButton->colspan = 3;
$return->addElement($addButton);
$return->add($addButton, 12, 12, 12, 'text-center');
}
else {
$return->addElement(new htmlButton('addObjectClass', _('Add EDU person extension')));
$return->add(new htmlButton('addObjectClass', _('Add EDU person extension')), 12);
}
return $return;
}

View File

@ -3,11 +3,10 @@ use \LAM\PDF\PDFTable;
use \LAM\PDF\PDFTableCell;
use \LAM\PDF\PDFTableRow;
/*
$Id$
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
Copyright (C) 2008 Thomas Manninger
2008 - 2018 Roland Gruber
2008 - 2019 Roland Gruber
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -449,27 +448,29 @@ class fixed_ip extends baseModule {
$this->fixed_ip = array();
}
$pcs = array();
$messages = array();
foreach($this->fixed_ip AS $id => $arr) {
// pc name
$pcError = "";
$existsInDifferentDn = !empty($_POST['pc_' . $id]) && $this->hostNameExists($_POST['pc_' . $id]);
if (!$this->processed) {
$pcError = "";
$existsInDifferentDn = false;
if (!empty($_POST['pc_' . $id])) {
$existsInDifferentDn = $this->hostNameExists($_POST['pc_' . $id]);
}
elseif (strlen($this->fixed_ip[$id]['cn'])>20) {
$pcError = _("The PC name may not be longer than 20 characters.");
}
elseif (strlen($this->fixed_ip[$id]['cn'])<2) {
$pcError = _("The PC name needs to be at least 2 characters long.");
}
elseif (in_array($this->fixed_ip[$id]['cn'], $pcs) ) {
$pcError = _("This PC name already exists.");
}
elseif (isset($_POST['pc_'.$id]) && !preg_match("/^[A-Za-z0-9\\._-]*$/", $_POST['pc_'.$id])) {
$pcError = _("The PC name may only contain A-Z, a-z and 0-9.");
}
elseif ($existsInDifferentDn !== false) {
$pcError = sprintf(_('This PC name already exists in %s. Use e.g. %s.'), $existsInDifferentDn[0], $existsInDifferentDn[1]);
if ($this->processed) {
if (strlen($this->fixed_ip[$id]['cn']) > 20) {
$messages[] = new htmlStatusMessage('ERROR', _("The PC name may not be longer than 20 characters."), htmlspecialchars($this->fixed_ip[$id]['cn']));
}
elseif (strlen($this->fixed_ip[$id]['cn']) < 2) {
$messages[] = new htmlStatusMessage('ERROR', _("The PC name needs to be at least 2 characters long."), htmlspecialchars($this->fixed_ip[$id]['cn']));
}
elseif (in_array($this->fixed_ip[$id]['cn'], $pcs) ) {
$messages[] = new htmlStatusMessage('ERROR', _("This PC name already exists."), htmlspecialchars($this->fixed_ip[$id]['cn']));
}
elseif (isset($_POST['pc_' . $id]) && !preg_match("/^[A-Za-z0-9\\._-]*$/", $_POST['pc_' . $id])) {
$messages[] = new htmlStatusMessage('ERROR', _("The PC name may only contain A-Z, a-z and 0-9."), htmlspecialchars($_POST['pc_' . $id]));
}
elseif ($existsInDifferentDn !== false) {
$messages[] = new htmlStatusMessage('ERROR', sprintf(_('This PC name already exists in %s. Use e.g. %s.'), $existsInDifferentDn[0], $existsInDifferentDn[1]));
}
}
$pcs[] = $this->fixed_ip[$id]['cn'];
@ -508,9 +509,6 @@ class fixed_ip extends baseModule {
$ipError = _("The IP address is already in use.");
}
$error = '';
if ($pcError != '') {
$error .= ' ' . $pcError;
}
if ($macError != '') {
$error .= ' ' . $macError;
}
@ -545,6 +543,10 @@ class fixed_ip extends baseModule {
$return->addElement(new htmlInputCheckbox('active_add', true));
$return->addElement(new htmlButton('add_ip', 'add.png', true), true);
foreach ($messages as $message) {
$return->addElement($message, true);
}
// add existing host entry
if (!empty($this->hostCache)) {
$return->addVerticalSpace('20px');