responsive
This commit is contained in:
parent
426e1cf80f
commit
af9f714ffb
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||
Copyright (C) 2013 - 2018 Roland Gruber
|
||||
Copyright (C) 2013 - 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
|
||||
|
@ -225,7 +225,7 @@ class pykotaPrinter extends baseModule {
|
|||
* @return htmlElement HTML meta data
|
||||
*/
|
||||
function display_html_attributes() {
|
||||
$container = new htmlTable();
|
||||
$container = new htmlResponsiveRow();
|
||||
// cn
|
||||
$this->addSimpleInputTextField($container, 'cn', _('Printer name'), true);
|
||||
// job size
|
||||
|
@ -239,10 +239,9 @@ class pykotaPrinter extends baseModule {
|
|||
if (!empty($this->attributes['pykotaPassThrough'][0])) {
|
||||
$pykotaPassThroughOption = $this->attributes['pykotaPassThrough'][0];
|
||||
}
|
||||
$pykotaPassThroughSelect = new htmlTableExtendedSelect('pykotaPassThrough', $this->passThroughOptions, array($pykotaPassThroughOption), _('Passthrough'), 'pykotaPassThrough');
|
||||
$pykotaPassThroughSelect = new htmlResponsiveSelect('pykotaPassThrough', $this->passThroughOptions, array($pykotaPassThroughOption), _('Passthrough'), 'pykotaPassThrough');
|
||||
$pykotaPassThroughSelect->setHasDescriptiveElements(true);
|
||||
$container->addElement($pykotaPassThroughSelect);
|
||||
$container->addElement(new htmlSpacer('150px', null), true); // layout fix if many parent groups exist
|
||||
$container->add($pykotaPassThroughSelect, 12);
|
||||
// description
|
||||
$this->addMultiValueInputTextField($container, 'description', _('Description'), false, null, true);
|
||||
// printer groups
|
||||
|
@ -254,21 +253,19 @@ class pykotaPrinter extends baseModule {
|
|||
$parentPrinters[] = $this->printerCache[$groupDN]['cn'];
|
||||
}
|
||||
if (sizeof($parentPrinters) > 0) {
|
||||
$container->addElement(new htmlOutputText(_('Printer groups')));
|
||||
$container->addLabel(new htmlOutputText(_('Printer groups')));
|
||||
$parentPrinterText = new htmlOutputText(implode(', ', $parentPrinters));
|
||||
$parentPrinterText->colspan = 5;
|
||||
$container->addElement($parentPrinterText, true);
|
||||
$container->addField($parentPrinterText, true);
|
||||
}
|
||||
}
|
||||
// printer members
|
||||
$memberLabel = new htmlOutputText(_('Group members'));
|
||||
$memberLabel->alignment = htmlElement::ALIGN_TOP;
|
||||
$container->addElement($memberLabel);
|
||||
$container->addLabel($memberLabel);
|
||||
$addMemberButton = new htmlAccountPageButton(get_class($this), 'members', 'open', 'add.png', true);
|
||||
$addMemberButton->setTitle(_('Add'));
|
||||
$addMemberButton->alignment = htmlElement::ALIGN_TOP;
|
||||
if (!empty($this->attributes['uniqueMember'][0])) {
|
||||
$memberHelp = new htmlHelpLink('uniqueMember');
|
||||
$memberTable = new htmlTable();
|
||||
if (!empty($this->attributes['uniqueMember'][0])) {
|
||||
$memberTable->alignment = htmlElement::ALIGN_TOP;
|
||||
for ($i = 0; $i < sizeof($this->attributes['uniqueMember']); $i++) {
|
||||
$member = $this->attributes['uniqueMember'][$i];
|
||||
|
@ -281,17 +278,16 @@ class pykotaPrinter extends baseModule {
|
|||
$memberTable->addElement($delButton);
|
||||
if ($i == (sizeof($this->attributes['uniqueMember']) - 1)) {
|
||||
$memberTable->addElement($addMemberButton);
|
||||
$memberTable->addElement($memberHelp);
|
||||
}
|
||||
$memberTable->addNewLine();
|
||||
}
|
||||
$container->addElement($memberTable);
|
||||
}
|
||||
else {
|
||||
$container->addElement($addMemberButton);
|
||||
$memberTable->addElement($addMemberButton);
|
||||
$memberTable->addElement($memberHelp);
|
||||
}
|
||||
$memberHelp = new htmlHelpLink('uniqueMember');
|
||||
$memberHelp->alignment = htmlElement::ALIGN_TOP;
|
||||
$container->addElement($memberHelp, true);
|
||||
$container->addField($memberTable);
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
@ -382,13 +378,7 @@ class pykotaPrinter extends baseModule {
|
|||
* @return htmlElement HTML meta data
|
||||
*/
|
||||
function display_html_members() {
|
||||
$return = new htmlTable();
|
||||
$userFilter = '';
|
||||
$userFilterRegex = '';
|
||||
if (isset($_POST['newFilter'])) {
|
||||
$userFilter = $_POST['newFilter'];
|
||||
$userFilterRegex = '/' . str_replace(array('*', '(', ')'), array('.*', '\(', '\)'), $_POST['newFilter']) . '/ui';
|
||||
}
|
||||
$return = new htmlResponsiveRow();
|
||||
$options = array();
|
||||
$this->loadPrinterNameCache();
|
||||
foreach ($this->printerCache as $dn => $attrs) {
|
||||
|
@ -398,10 +388,6 @@ class pykotaPrinter extends baseModule {
|
|||
else {
|
||||
$label = $attrs['cn'];
|
||||
}
|
||||
// skip filtered printers
|
||||
if (!empty($userFilter) && !preg_match($userFilterRegex, $label)) {
|
||||
continue;
|
||||
}
|
||||
// skip own entry
|
||||
if (!$this->getAccountContainer()->isNewAccount && ($this->getAccountContainer()->dn_orig == $dn)) {
|
||||
continue;
|
||||
|
@ -413,22 +399,28 @@ class pykotaPrinter extends baseModule {
|
|||
$options[$label] = $dn;
|
||||
}
|
||||
$size = 20;
|
||||
if (sizeof($options) < 20) $size = sizeof($options);
|
||||
if (sizeof($options) < 20) {
|
||||
$size = sizeof($options);
|
||||
}
|
||||
$membersSelect = new htmlSelect('members', $options, array(), $size);
|
||||
$membersSelect->setHasDescriptiveElements(true);
|
||||
$membersSelect->setMultiSelect(true);
|
||||
$membersSelect->setTransformSingleSelect(false);
|
||||
$return->addElement($membersSelect, true);
|
||||
$return->add($membersSelect, 12);
|
||||
$filterGroup = new htmlGroup();
|
||||
$filterGroup->addElement(new htmlInputField('newFilter', $userFilter));
|
||||
$filterGroup->addElement(new htmlButton('setFilter', _('Filter')));
|
||||
$filterGroup->addElement(new htmlOutputText(_('Filter')));
|
||||
$filterInput = new htmlInputField('newFilter', null);
|
||||
$filterInput->setCSSClasses(array('maxwidth20'));
|
||||
$filterInput->filterSelectBox('members');
|
||||
$filterGroup->addElement($filterInput);
|
||||
$filterGroup->addElement(new htmlHelpLink('filter'));
|
||||
$return->addElement($filterGroup, true);
|
||||
$return->addElement(new htmlSpacer(null, '10px'), true);
|
||||
$buttonTable = new htmlTable();
|
||||
$return->add($filterGroup, 12);
|
||||
$return->addVerticalSpacer('2rem');
|
||||
$buttonTable = new htmlGroup();
|
||||
$buttonTable->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'addMembers', _('Add')));
|
||||
$buttonTable->addElement(new htmlSpacer('0.5rem', null));
|
||||
$buttonTable->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'cancel', _('Cancel')));
|
||||
$return->addElement($buttonTable);
|
||||
$return->add($buttonTable, 12);
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
|
|
@ -296,7 +296,7 @@ class pykotaUser extends baseModule {
|
|||
* @return htmlElement HTML meta data
|
||||
*/
|
||||
function display_html_attributes() {
|
||||
$container = new htmlTable();
|
||||
$container = new htmlResponsiveRow();
|
||||
$modules = $this->getAccountContainer()->get_type()->getModules();
|
||||
if ($this->isStructural() || (isset($this->attributes['objectClass']) && in_array('pykotaAccount', $this->attributes['objectClass']))) {
|
||||
// uid
|
||||
|
@ -315,8 +315,7 @@ class pykotaUser extends baseModule {
|
|||
$page = $this->getAccountContainer()->getAccountModule('inetOrgPerson')->get_alias();
|
||||
}
|
||||
$msg = new htmlStatusMessage('INFO', sprintf(_("Please enter an user name on this page: %s"), $page));
|
||||
$msg->colspan = 5;
|
||||
$container->addElement($msg, true);
|
||||
$container->add($msg, 12);
|
||||
}
|
||||
}
|
||||
// pykotaUserName
|
||||
|
@ -326,42 +325,31 @@ class pykotaUser extends baseModule {
|
|||
if (isset($this->attributes['pykotaBalance'][0])) {
|
||||
$pykotaBalance = $this->attributes['pykotaBalance'][0];
|
||||
}
|
||||
$container->addElement(new htmlOutputText(_('Balance')));
|
||||
$container->addElement(new htmlOutputText($pykotaBalance));
|
||||
$container->addElement(new htmlHelpLink('pykotaBalance'), true);
|
||||
// new payment and balance history
|
||||
$container->addElement(new htmlOutputText(_('Payment')));
|
||||
$newPaymentGroup = new htmlGroup();
|
||||
$newPaymentAmount = new htmlInputField('pykotaBalanceAdd', '', '5em');
|
||||
$newPaymentAmount->setTitle(_('Amount'));
|
||||
$newPaymentGroup->addElement($newPaymentAmount);
|
||||
$newPaymentComment = new htmlInputField('pykotaBalanceComment', '', '20em');
|
||||
$newPaymentComment->setTitle(_('Comment'));
|
||||
$newPaymentGroup->addElement($newPaymentComment);
|
||||
$newPaymentBtn = new htmlButton('addPayment', _('Add'));
|
||||
$newPaymentBtn->setIconClass('createButton');
|
||||
$newPaymentGroup->addElement($newPaymentBtn);
|
||||
$container->addElement($newPaymentGroup);
|
||||
$container->addElement(new htmlHelpLink('pykotaPaymentsAdd'), true);
|
||||
$container->addElement(new htmlOutputText(''));
|
||||
$container->addLabel(new htmlOutputText(_('Balance')));
|
||||
$balanceGroup = new htmlGroup();
|
||||
$balanceGroup->addElement(new htmlOutputText($pykotaBalance));
|
||||
$balanceGroup->addElement(new htmlSpacer('0.5rem', null));
|
||||
$balanceGroup->addElement(new htmlHelpLink('pykotaBalance'));
|
||||
$container->addField($balanceGroup);
|
||||
$container->addLabel(new htmlOutputText(' ', false));
|
||||
$historyGroup = new htmlGroup();
|
||||
$historyGroup->addElement(new htmlAccountPageButton(get_class($this), 'payments', 'open', _('Payment history')));
|
||||
if (!$this->getAccountContainer()->isNewAccount && !empty($this->moduleSettings['pykotaUser_jobSuffix'][0])) {
|
||||
$historyGroup->addElement(new htmlSpacer('5px', null));
|
||||
$historyGroup->addElement(new htmlAccountPageButton(get_class($this), 'jobs', 'open', _('Job history')));
|
||||
}
|
||||
$container->addElement($historyGroup);
|
||||
$container->addElement(new htmlHelpLink('pykotaPayments'), true);
|
||||
$container->addElement(new htmlSpacer(null, '10px'), true);
|
||||
$historyGroup->addElement(new htmlSpacer('5px', null));
|
||||
$historyGroup->addElement(new htmlHelpLink('pykotaPayments'), true);
|
||||
$container->addField($historyGroup);
|
||||
// limit by
|
||||
$limitOption = 'quota';
|
||||
if (!empty($this->attributes['pykotaLimitBy'][0])) {
|
||||
$limitOption = $this->attributes['pykotaLimitBy'][0];
|
||||
}
|
||||
$limitSelect = new htmlTableExtendedSelect('pykotaLimitBy', $this->limitOptions, array($limitOption), _('Limit type'), 'pykotaLimitBy');
|
||||
$limitSelect = new htmlResponsiveSelect('pykotaLimitBy', $this->limitOptions, array($limitOption), _('Limit type'), 'pykotaLimitBy');
|
||||
$limitSelect->setHasDescriptiveElements(true);
|
||||
$limitSelect->setSortElements(false);
|
||||
$container->addElement($limitSelect, true);
|
||||
$container->add($limitSelect, 12);
|
||||
// overcharge factor
|
||||
$this->addSimpleInputTextField($container, 'pykotaOverCharge', _('Overcharge factor'));
|
||||
// cn
|
||||
|
@ -376,17 +364,29 @@ class pykotaUser extends baseModule {
|
|||
if ($this->manageDescription($modules)) {
|
||||
$this->addMultiValueInputTextField($container, 'description', _('Description'), false, null, true);
|
||||
}
|
||||
// new payment
|
||||
$container->add(new htmlSubTitle(_('Payment')), 12);
|
||||
$newPaymentAmount = new htmlResponsiveInputField(_('Amount'), 'pykotaBalanceAdd', '', '5em');
|
||||
$container->add($newPaymentAmount, 12);
|
||||
$newPaymentComment = new htmlResponsiveInputField(_('Comment'), 'pykotaBalanceComment', '', '20em');
|
||||
$container->add($newPaymentComment, 12);
|
||||
$newPaymentBtn = new htmlButton('addPayment', _('Add'));
|
||||
$newPaymentBtn->setIconClass('createButton');
|
||||
$newPaymentGroup = new htmlGroup();
|
||||
$newPaymentGroup->addElement($newPaymentBtn);
|
||||
$newPaymentGroup->addElement(new htmlSpacer('0.5rem', null));
|
||||
$newPaymentGroup->addElement(new htmlHelpLink('pykotaPaymentsAdd'));
|
||||
$container->add($newPaymentGroup, 12, 12, 12, 'text-center');
|
||||
// remove button
|
||||
if (!$this->isStructural()) {
|
||||
$container->addElement(new htmlSpacer(null, '20px'), true);
|
||||
$container->addVerticalSpacer('2rem');
|
||||
$remButton = new htmlButton('remObjectClass', _('Remove PyKota extension'));
|
||||
$remButton->colspan = 5;
|
||||
$container->addElement($remButton);
|
||||
$container->add($remButton, 12, 12, 12, 'text-center');
|
||||
}
|
||||
}
|
||||
else {
|
||||
// add button
|
||||
$container->addElement(new htmlButton('addObjectClass', _('Add PyKota extension')));
|
||||
$container->add(new htmlButton('addObjectClass', _('Add PyKota extension')), 12);
|
||||
}
|
||||
return $container;
|
||||
}
|
||||
|
@ -542,48 +542,44 @@ class pykotaUser extends baseModule {
|
|||
* @return htmlElement HTML meta data
|
||||
*/
|
||||
function display_html_payments() {
|
||||
$container = new htmlTable();
|
||||
$container = new htmlResponsiveRow();
|
||||
$container->setCSSClasses(array('maxrow'));
|
||||
// total paid
|
||||
$total = '';
|
||||
if (!empty($this->attributes['pykotaLifeTimePaid'][0])) {
|
||||
$total = $this->attributes['pykotaLifeTimePaid'][0];
|
||||
}
|
||||
$container->addElement(new htmlOutputText(_('Total paid')));
|
||||
$container->addElement(new htmlOutputText($total));
|
||||
$container->addElement(new htmlHelpLink('pykotaLifeTimePaid'), true);
|
||||
$container->addLabel(new htmlOutputText(_('Total paid')));
|
||||
$totalPaidGroup = new htmlGroup();
|
||||
$totalPaidGroup->addElement(new htmlOutputText($total));
|
||||
$totalPaidGroup->addElement(new htmlSpacer('0.5rem', null));
|
||||
$totalPaidGroup->addElement(new htmlHelpLink('pykotaLifeTimePaid'));
|
||||
$container->addField($totalPaidGroup, 12);
|
||||
// payment/job history
|
||||
if (!empty($this->attributes['pykotaPayments'][0])) {
|
||||
$container->addElement(new htmlSubTitle(_('Payment history')), true);
|
||||
$spacer = new htmlSpacer('10px', null);
|
||||
$historyTable = new htmlTable();
|
||||
$historyTable->colspan = 5;
|
||||
$historyTable->addElement(new htmlOutputText(_('Date')), false, true);
|
||||
$historyTable->addElement($spacer);
|
||||
$historyTable->addElement(new htmlOutputText(_('Amount')), false, true);
|
||||
$historyTable->addElement($spacer);
|
||||
$historyTable->addElement(new htmlOutputText(_('Comment')), true, true);
|
||||
$container->add(new htmlSubTitle(_('Payment history')), 12);
|
||||
$labels = array(_('Date'), _('Amount'), _('Comment'));
|
||||
$data = array();
|
||||
rsort($this->attributes['pykotaPayments']);
|
||||
foreach ($this->attributes['pykotaPayments'] as $payment) {
|
||||
$parts = explode(' # ', $payment);
|
||||
$historyTable->addElement(new htmlOutputText($parts[0]));
|
||||
$historyTable->addElement($spacer);
|
||||
$amount = new htmlOutputText($parts[1]);
|
||||
$amount->alignment = htmlElement::ALIGN_RIGHT;
|
||||
$historyTable->addElement($amount);
|
||||
$historyTable->addElement($spacer);
|
||||
if (!empty($parts[2])) {
|
||||
$historyTable->addElement(new htmlOutputText(base64_decode($parts[2])));
|
||||
$comment = empty($parts[2]) ? '' : base64_decode($parts[2]);
|
||||
$commentField = new htmlOutputText($comment);
|
||||
$amountFied = new htmlOutputText($parts[1]);
|
||||
$data[] = array(
|
||||
new htmlOutputText($parts[0]),
|
||||
$amountFied,
|
||||
$commentField
|
||||
);
|
||||
}
|
||||
$historyTable->addNewLine();
|
||||
}
|
||||
$container->addElement($historyTable, true);
|
||||
$historyTable = new htmlResponsiveTable($labels, $data);
|
||||
$historyTable->setWidths(array('20%', '15%', '65%'));
|
||||
$container->add($historyTable, 12);
|
||||
}
|
||||
// back button
|
||||
$container->addElement(new htmlSpacer(null, '20px'), true);
|
||||
$container->addVerticalSpacer('2rem');
|
||||
$backButton = new htmlAccountPageButton(get_class($this), 'attributes', 'back', _('Back'));
|
||||
$backButton->colspan = 5;
|
||||
$backButton->alignment = htmlElement::ALIGN_LEFT;
|
||||
$container->addElement($backButton, true);
|
||||
$container->add($backButton, 12);
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
@ -603,44 +599,30 @@ class pykotaUser extends baseModule {
|
|||
* @return htmlElement HTML meta data
|
||||
*/
|
||||
function display_html_jobs() {
|
||||
$container = new htmlTable();
|
||||
$container = new htmlResponsiveRow();
|
||||
$container->setCSSClasses(array('maxrow'));
|
||||
// jobs
|
||||
$jobs = $this->getJobs($this->getCurrentUserName(), $this->moduleSettings['pykotaUser_jobSuffix'][0]);
|
||||
$spacer = new htmlSpacer('10px', null);
|
||||
// header
|
||||
$container->addElement(new htmlOutputText(_('Date')), false, true);
|
||||
$container->addElement($spacer);
|
||||
$container->addElement(new htmlOutputText(_('Printer')), false, true);
|
||||
$container->addElement($spacer);
|
||||
$container->addElement(new htmlOutputText(_('Price')), false, true);
|
||||
$container->addElement($spacer);
|
||||
$container->addElement(new htmlOutputText(_('Size')), false, true);
|
||||
$container->addElement($spacer);
|
||||
$title = new htmlOutputText(_('Title'));
|
||||
$title->alignment = htmlElement::ALIGN_LEFT;
|
||||
$container->addElement($title, true, true);
|
||||
// jobs
|
||||
$titles = array(
|
||||
_('Date'), _('Printer'), _('Price'), _('Size'), _('Title')
|
||||
);
|
||||
$data = array();
|
||||
foreach ($jobs as $job) {
|
||||
$container->addElement(new htmlOutputText(formatLDAPTimestamp($job['createtimestamp'][0])));
|
||||
$container->addElement($spacer);
|
||||
$container->addElement(new htmlOutputText($job['pykotaprintername'][0]));
|
||||
$container->addElement($spacer);
|
||||
$price = new htmlOutputText($job['pykotajobprice'][0]);
|
||||
$price->alignment = htmlElement::ALIGN_RIGHT;
|
||||
$container->addElement($price);
|
||||
$container->addElement($spacer);
|
||||
$size = new htmlOutputText($job['pykotajobsize'][0]);
|
||||
$size->alignment = htmlElement::ALIGN_RIGHT;
|
||||
$container->addElement($size);
|
||||
$container->addElement($spacer);
|
||||
$container->addElement(new htmlOutputText($job['pykotatitle'][0]), true);
|
||||
$data[] = array(
|
||||
new htmlOutputText(formatLDAPTimestamp($job['createtimestamp'][0])),
|
||||
new htmlOutputText($job['pykotaprintername'][0]),
|
||||
new htmlOutputText($job['pykotajobprice'][0]),
|
||||
new htmlOutputText($job['pykotajobsize'][0]),
|
||||
new htmlOutputText($job['pykotatitle'][0])
|
||||
);
|
||||
}
|
||||
$table = new htmlResponsiveTable($titles, $data);
|
||||
$table->setWidths(array('20%', '20%', '15%', '15%', '30%'));
|
||||
$container->add($table, 12);
|
||||
// back button
|
||||
$container->addElement(new htmlSpacer(null, '20px'), true);
|
||||
$container->addVerticalSpacer('2rem');
|
||||
$backButton = new htmlAccountPageButton(get_class($this), 'attributes', 'back', _('Back'));
|
||||
$backButton->colspan = 5;
|
||||
$backButton->alignment = htmlElement::ALIGN_LEFT;
|
||||
$container->addElement($backButton, true);
|
||||
$container->add($backButton, 12);
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue