Verified Commit 3d5ecfe1 authored by Côme Chilliet's avatar Côme Chilliet
Browse files

:sparkles: feat(registrations) Use placeholder icons and improve display of values

Dates and linked objects should be prettier in registration management
 and edition.
Also status will get translated.

issue #5850
Showing with 90 additions and 40 deletions
+90 -40
......@@ -33,18 +33,6 @@ class GeneralizedTimeDisplayAttribute extends GeneralizedTimeDateAttribute
}
}
class UserLinkAttribute extends DisplayLDAPAttribute
{
function renderFormInput ()
{
try {
return objects::link($this->value, 'user');
} catch (NonExistingLdapNodeException $e) {
return '<a><img src="geticon.php?context=status&amp;icon=dialog-warning&amp;size=16" alt="warning" class="center"/>&nbsp;'.sprintf(_('Unknown user: %s'), $this->value).'</a>';
}
}
}
class auditEvent extends simplePlugin
{
public $base;
......@@ -79,7 +67,7 @@ class auditEvent extends simplePlugin
'fdAuditDateTime', TRUE
),
new DisplayLDAPAttribute (_('Action'), _('Action type'), 'fdAuditAction', TRUE),
new UserLinkAttribute (_('Author'), _('Action author'), 'fdAuditAuthorDN', TRUE),
new ObjectLinkAttribute (_('Author'), _('Action author'), 'fdAuditAuthorDN', TRUE, 'user'),
new DisplayLDAPAttribute (_('Object type'), _('Object type'), 'fdAuditObjectType', TRUE),
new DisplayLDAPAttribute (_('Object'), _('Target object'), 'fdAuditObject', TRUE),
new DisplayLDAPArrayAttribute(_('Attributes'), _('Target attributes'), 'fdAuditAttributes', FALSE),
......
......@@ -25,12 +25,11 @@ class invitation extends simplePlugin
return array(
'plShortName' => _('Invitation'),
'plDescription' => _('Invitation to fill a public form'),
'plIcon' => '',
'plObjectClass' => array('fdInvitation'),
'plObjectType' => array('invitation' => array(
'name' => _('Invitation'),
'ou' => get_ou('invitationRDN'),
'icon' => '',
'icon' => 'geticon.php?context=types&icon=application&size=16',
)),
'plForeignKeys' => array(
'fdInvitationFormDN' => 'publicForm',
......
......@@ -26,7 +26,7 @@ class invitationManagement extends management
'plShortName' => _('Invitations'),
'plTitle' => _('Invitations management'),
'plDescription' => _('Manage invitations'),
'plIcon' => '',
'plIcon' => 'geticon.php?context=categories&icon=applications-other&size=48',
'plSection' => 'accounts',
'plManages' => array('invitation'),
......
......@@ -20,20 +20,59 @@
class RegistrationLastChangeAttribute extends DisplayLDAPAttribute
{
static function renderValue($value)
{
if (empty($value)) {
return $value;
}
list($ldapDate, $author) = explode('|', $value, 2);
try {
$date = new DateTime($ldapDate);
} catch (Exception $e) {
msg_dialog::display(_('Error'), $e->getMessage(), ERROR_DIALOG);
$date = new DateTime();
}
$date->setTimezone(timezone::getDefaultTimeZone());
try {
$author = objects::link($author, 'user');
} catch (NonExistingLdapNodeException $e) {
$author = '<img src="geticon.php?context=types&amp;icon=application&amp;size=16" alt="" class="center"/>&nbsp;'.$author;
}
return sprintf(_('%s - by %s'), $date->format('Y-m-d H:i:s'), $author);
}
function renderFormInput ()
{
$value = $this->getValue();
if (!empty($value)) {
list($ldapDate, $author) = explode('|', $value, 2);
try {
$date = LdapGeneralizedTime::fromString($ldapDate);
} catch (LdapGeneralizedTimeBadFormatException $e) {
msg_dialog::display(_('Error'), $e->getMessage(), ERROR_DIALOG);
$date = new DateTime();
}
$date->setTimezone(timezone::getDefaultTimeZone());
$value = sprintf(_('%s - by %s'), $date->format('Y-m-d H:i:s'), $author);
$value = static::renderValue($this->getValue());
if ($this->allowSmarty) {
return $value;
} else {
return '{literal}'.$value.'{/literal}';
}
}
}
class RegistrationStateAttribute extends DisplayLDAPAttribute
{
static function renderValue($value)
{
$values = array(
'sent' => array(_('Sent'), 'geticon.php?context=action&amp;icon=up&amp;size=16'),
'filled' => array(_('Filled'), 'geticon.php?context=applications&amp;icon=ldap&amp;size=16'),
'accepted' => array(_('Accepted'), 'geticon.php?context=status&amp;icon=task-complete&amp;size=16'),
'rejected' => array(_('Rejected'), 'geticon.php?context=status&amp;icon=task-failure&amp;size=16'),
);
if (isset($values[$value])) {
return sprintf('<img src="%2$s" alt="" class="center"/>&nbsp;%1$s', $values[$value][0], $values[$value][1]);
}
return $value;
}
function renderFormInput ()
{
$value = static::renderValue($this->getValue());
if ($this->allowSmarty) {
return $value;
} else {
......@@ -49,12 +88,11 @@ class registration extends simplePlugin
return array(
'plShortName' => _('Registration'),
'plDescription' => _('Registration sent through a public form'),
'plIcon' => '',
'plObjectClass' => array('fdRegistration'),
'plObjectType' => array('registration' => array(
'name' => _('Registration'),
'ou' => get_ou('registrationRDN'),
'icon' => '',
'icon' => 'geticon.php?context=types&icon=contact&size=16',
'mainAttr' => 'fdRegistrationEmailAddress',
)),
'plForeignKeys' => array(
......@@ -77,7 +115,7 @@ class registration extends simplePlugin
_('Email address'), _('Email address which the invitation was sent to'),
'fdRegistrationEmailAddress', TRUE
),
new DisplayLDAPAttribute(
new RegistrationStateAttribute(
_('Status'), _('State of this registration'),
'fdRegistrationState', FALSE
),
......@@ -85,13 +123,15 @@ class registration extends simplePlugin
_('Last change'), _('Date and author of the last state change'),
'fdRegistrationLastChange', FALSE
),
new DisplayLDAPAttribute(
new ObjectLinkAttribute(
_('Invitation'), _('Invitation object used to create this registration'),
'fdRegistrationInvitationDN', FALSE
'fdRegistrationInvitationDN', FALSE,
'invitation'
),
new DisplayLDAPAttribute(
new ObjectLinkAttribute(
_('User object'), _('User object created by this registration'),
'fdRegistrationUserDN', FALSE
'fdRegistrationUserDN', FALSE,
'user'
),
new HiddenAttribute('fdRegistrationToken'),
)
......
......@@ -18,6 +18,29 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*!
* \brief Column rendering registration state and last change
*/
class RegistrationColumn extends LinkColumn
{
function renderCell(ListingEntry $entry)
{
$value = $this->getAttributeValue($entry);
if ($value == '') {
return '&nbsp;';
} else {
if ($this->attributes[0] == 'fdRegistrationState') {
$value = RegistrationStateAttribute::renderValue($value);
} elseif ($this->attributes[0] == 'fdRegistrationLastChange') {
$value = RegistrationLastChangeAttribute::renderValue($value);
} else {
$value = htmlentities($value, ENT_COMPAT, 'UTF-8');
}
return '<a href="?plug='.$_GET['plug'].'&amp;PID='.$entry->getPid().'&amp;act=listing_edit_'.$entry->row.'" title="'.$entry->dn.'">'.$value.'</a>';
}
}
}
class registrationManagement extends management
{
/* Deactivate copy/paste and snapshots */
......@@ -25,11 +48,11 @@ class registrationManagement extends management
public static $skipSnapshots = TRUE;
public static $columns = array(
array('ObjectTypeColumn', array()),
array('LinkColumn', array('attributes' => 'nameAttr', 'label' => 'Email')),
array('LinkColumn', array('attributes' => 'fdRegistrationState', 'label' => 'Status')),
array('LinkColumn', array('attributes' => 'fdRegistrationLastChange', 'label' => 'Last change')),
array('ActionsColumn', array('label' => 'Actions')),
array('ObjectTypeColumn', array()),
array('LinkColumn', array('attributes' => 'nameAttr', 'label' => 'Email')),
array('RegistrationColumn', array('attributes' => 'fdRegistrationState', 'label' => 'Status')),
array('RegistrationColumn', array('attributes' => 'fdRegistrationLastChange', 'label' => 'Last change')),
array('ActionsColumn', array('label' => 'Actions')),
);
public $neededAttrs = array(
......@@ -43,7 +66,7 @@ class registrationManagement extends management
'plShortName' => _('Registrations'),
'plTitle' => _('Registrations management'),
'plDescription' => _('Manage registrations'),
'plIcon' => '',
'plIcon' => 'geticon.php?context=types&icon=contact&size=48',
'plSection' => 'accounts',
'plManages' => array('registration'),
......
  • SonarQube analysis reported 1 issue

    • :information_source: 1 info

    Note: The following issues were found on lines that were not modified in the commit. Because these issues can't be reported as line comments, they are summarized here:

    1. :information_source: Complete the task associated to this "TODO" comment. :blue_book:
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment