Skip to content

Commit

Permalink
Fix merge conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
Benn Oshrin committed Oct 7, 2023
2 parents 7803506 + 18d0893 commit 8008f1e
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 111 deletions.
9 changes: 9 additions & 0 deletions app/resources/locales/en_US/information.po
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,15 @@ msgstr "Please select the collaboration (CO) you wish to manage."
msgid "entity.id"
msgstr "ID: {0}"

msgid "noattrs"
msgstr "No attributes"

msgid "notset"
msgstr "not set"

msgid "pagination.format"
msgstr "Page {{page}} of {{pages}}, Viewing {{start}}-{{end}} of {{count}}"

msgid "ExternalIdentities.source"
msgstr "This External Identity was created from {0} ({1})"

Expand Down
6 changes: 3 additions & 3 deletions app/src/Controller/DashboardsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -325,9 +325,9 @@ public function search() {

// Gather our search string.
$q = '';
if(!empty($this->request->getQuery('q'))) {
if(!empty($this->request->getData('q'))) {
// A search was passed in from the form on the Global Search bar.
$q = trim($this->request->getQuery('q'));
$q = trim($this->request->getData('q'));
}

// Only process the request if we have a string of non-space characters
Expand Down Expand Up @@ -412,7 +412,7 @@ public function search() {

$this->Flash->information(__d('result',
'search.exact',
[filter_var($this->request->getQuery('q'), FILTER_SANITIZE_SPECIAL_CHARS),
[filter_var($this->request->getData('q'), FILTER_SANITIZE_SPECIAL_CHARS),
__d('controller', $matchClass, [1])]));

// Redirect to the matchClass controller
Expand Down
11 changes: 11 additions & 0 deletions app/src/Model/Table/ExternalIdentitiesTable.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,17 @@ public function initialize(array $config): void {
]);

$this->setIndexContains(['PrimaryName']);
$this->setViewContains([
'PrimaryName',
'Addresses',
'AdHocAttributes',
'EmailAddresses',
'Identifiers',
'Names',
'Pronouns',
'TelephoneNumbers',
'Urls'
]);

$this->setViewContains([
'PrimaryName',
Expand Down
147 changes: 83 additions & 64 deletions app/src/View/Helper/FieldHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -208,76 +208,95 @@ public function control(string $fieldName,
*/

public function dateControl(string $fieldName, string $dateType=DateTypeEnum::Standard): string {
// A datetime field will be rendered as a plain text input with adjacent date and time pickers
// that will interact with the field value. Allowing direct access to the input field is for
// accessibility purposes.

$pickerType = $dateType;
// Special-case the very common "valid_from" and "valid_through" fields so we won't need
// to specify their types in fields.inc.
if($fieldName == 'valid_from') {
$pickerType = DateTypeEnum::FromTime;
}
if($fieldName == 'valid_through') {
$pickerType = DateTypeEnum::ThroughTime;
}

// Append the timezone to the label -- TODO: see that the timezone gets output to the display
$label = __d('field', $fieldName.".tz", [$this->_View->get('vv_tz')]);

// Create the options array for the (text input) form control
$coptions = [];
$coptions['class'] = 'form-control datepicker';

if($pickerType == DateTypeEnum::DateOnly) {
$coptions['placeholder'] = 'YYYY-MM-DD';
$coptions['pattern'] = '\d{4}-\d{2}-\d{2}';
$coptions['title'] = __d('field', 'datepicker.enterDate');
if($this->action == 'view') {
// return the date as plaintext
$coptions = [];
$entity = $this->getView()->get('vv_obj');
if (!empty($entity->$fieldName)) {
// Adjust the time back to the user's timezone
if ($dateType == DateTypeEnum::DateOnly) {
$controlCode = '<time>' . $entity->$fieldName->i18nFormat("yyyy-MM-dd", $this->getView()->get('vv_tz')) . '</time>';
} else {
$controlCode = '<time>' . $entity->$fieldName->i18nFormat("yyyy-MM-dd HH:mm:ss", $this->getView()->get('vv_tz')) . '</time>';
}
} else {
$controlCode = __d('information', 'notset');
}
// Return this to the generic control() function
return $this->control($fieldName, $coptions, ctrlCode: $controlCode, labelIsTextOnly: true);

} else {
$coptions['placeholder'] = 'YYYY-MM-DD HH:MM:SS';
$coptions['pattern'] = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}';
$coptions['title'] = __d('field', 'datepicker.enterDateTime');
}
$coptions['id'] = str_replace("_", "-", $fieldName);
// A datetime field will be rendered as a plain text input with adjacent date and time pickers
// that will interact with the field value. Allowing direct access to the input field is for
// accessibility purposes.

$pickerType = $dateType;
// Special-case the very common "valid_from" and "valid_through" fields so we won't need
// to specify their types in fields.inc.
if ($fieldName == 'valid_from') {
$pickerType = DateTypeEnum::FromTime;
}
if ($fieldName == 'valid_through') {
$pickerType = DateTypeEnum::ThroughTime;
}

$entity = $this->getView()->get('vv_obj');
// Append the timezone to the label -- TODO: see that the timezone gets output to the display
$label = __d('field', $fieldName . ".tz", [$this->_View->get('vv_tz')]);

// Default the picker date to today
$now = FrozenTime::now();
$pickerDate = $now->i18nFormat('yyyy-MM-dd');

// Get the existing values, if present
if(!empty($entity->$fieldName)) {
// Adjust the time back to the user's timezone
if($pickerType == DateTypeEnum::DateOnly) {
$coptions['value'] = $entity->$fieldName->i18nFormat("yyyy-MM-dd", $this->getView()->get('vv_tz'));
// Create the options array for the (text input) form control
$coptions = [];
$coptions['class'] = 'form-control datepicker';

if ($pickerType == DateTypeEnum::DateOnly) {
$coptions['placeholder'] = 'YYYY-MM-DD';
$coptions['pattern'] = '\d{4}-\d{2}-\d{2}';
$coptions['title'] = __d('field', 'datepicker.enterDate');
} else {
$coptions['value'] = $entity->$fieldName->i18nFormat("yyyy-MM-dd HH:mm:ss", $this->getView()->get('vv_tz'));
$coptions['placeholder'] = 'YYYY-MM-DD HH:MM:SS';
$coptions['pattern'] = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}';
$coptions['title'] = __d('field', 'datepicker.enterDateTime');
}
$pickerDate = $entity->$fieldName->i18nFormat("yyyy-MM-dd", $this->getView()->get('vv_tz'));
}

// Set the date picker floor year value (-100 years)
$pickerDateFT = new FrozenTime($pickerDate);
$pickerDateFT = $pickerDateFT->subYears(100);
$pickerFloor = $pickerDateFT->i18nFormat("yyyy-MM-dd");

$date_picker_args = [
'fieldName' => $fieldName,
'pickerDate' => $pickerDate,
'pickerType' => $pickerType,
'pickerFloor' => $pickerFloor
];

// Create a text field to hold our value and call the datePicker
$controlCode = $this->Form->text($fieldName, $coptions)
. $this->getView()->element('datePicker', $date_picker_args);
$coptions['id'] = str_replace("_", "-", $fieldName);

// Specify a class on the <li> form control wrapper
$liClass = "fields-datepicker";

// Pass everything to the generic control() function
return $this->control($fieldName, $coptions, ctrlCode: $controlCode, cssClass: $liClass);
$entity = $this->getView()->get('vv_obj');

// Default the picker date to today
$now = FrozenTime::now();
$pickerDate = $now->i18nFormat('yyyy-MM-dd');

// Get the existing values, if present
if(!empty($entity->$fieldName)) {
// Adjust the time back to the user's timezone
if($pickerType == DateTypeEnum::DateOnly) {
$coptions['value'] = $entity->$fieldName->i18nFormat("yyyy-MM-dd", $this->getView()->get('vv_tz'));
} else {
$coptions['value'] = $entity->$fieldName->i18nFormat("yyyy-MM-dd HH:mm:ss", $this->getView()->get('vv_tz'));
}
$pickerDate = $entity->$fieldName->i18nFormat("yyyy-MM-dd", $this->getView()->get('vv_tz'));
}

// Set the date picker floor year value (-100 years)
$pickerDateFT = new FrozenTime($pickerDate);
$pickerDateFT = $pickerDateFT->subYears(100);
$pickerFloor = $pickerDateFT->i18nFormat("yyyy-MM-dd");

$date_picker_args = [
'fieldName' => $fieldName,
'pickerDate' => $pickerDate,
'pickerType' => $pickerType,
'pickerFloor' => $pickerFloor
];

// Create a text field to hold our value and call the datePicker
$controlCode = $this->Form->text($fieldName, $coptions)
. $this->getView()->element('datePicker', $date_picker_args);

// Specify a class on the <li> form control wrapper
$liClass = "fields-datepicker";

// Pass everything to the generic control() function
return $this->control($fieldName, $coptions, ctrlCode: $controlCode, cssClass: $liClass);
}
}

/**
Expand Down
1 change: 1 addition & 0 deletions app/templates/ExternalIdentities/columns.inc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
$indexColumns = [
'name' => [
'type' => 'link',
'action' => 'view',
'model' => 'primary_name',
'field' => 'full_name',
// XXX see comments in the controller about sorting on given vs family
Expand Down
1 change: 1 addition & 0 deletions app/templates/ExternalIdentityRoles/columns.inc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
$indexColumns = [
'title' => [
'type' => 'link',
'action' => 'view',
'sortable' => true
],
'affiliation_type_id' => [
Expand Down
3 changes: 1 addition & 2 deletions app/templates/ExternalIdentityRoles/fields.inc
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/

// This view does not currently support read-only
if($vv_action == 'add' || $vv_action == 'edit') {
if($vv_action == 'add' || $vv_action == 'edit' || $vv_action == 'view') {
print $this->Field->control('affiliation_type_id', labelText: __d('field', 'affiliation'));

print $this->Field->control('status', ['empty' => false]);
Expand Down
37 changes: 20 additions & 17 deletions app/templates/element/mveaCanvas.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
?>
<div id="mvea-canvas-title-container">
<h2><?= __d('information','global.attributes') ?></h2>
<?php if(!empty($vv_add_menu_links)): ?>
<?php if(!empty($vv_add_menu_links) && $vv_action == 'edit'): ?>
<div id="mvea-add-menu-container" class="field-actions">
<?= $this->element('menuAction', $action_args) ?>
</div>
Expand All @@ -92,22 +92,25 @@
?>
<div id="mvea-canvas" class="co-cards">
<div id="mvea-canvas-attributes-js" class="row row-cols-1 g-4<?= ($widgetCount > 1) ? ' row-cols-md-2' : ''?>">
<?php
foreach($attributes as $attr) {
if(!empty(($vv_obj[$attr]))) {
print $this->element(
'mveaJs',
[
'htmlId' => 'mvea-canvas-' . $attr . '-js',
'parentId' => $objId,
'mveaType' => $attr,
'entityType' => $vv_entity_type
]
);
<?php if($widgetCount == 0): ?>
<div class="no-attributes"><?= __d('information','noattrs') ?></div>
<?php else: ?>
<?php
foreach ($attributes as $attr) {
if (!empty(($vv_obj[$attr]))) {
print $this->element(
'mveaJs',
[
'htmlId' => 'mvea-canvas-' . $attr . '-js',
'parentId' => $objId,
'mveaType' => $attr,
'entityType' => $vv_entity_type
]
);
}
}
}
// TODO: Add the DOB as its own special card (CFM-261)
print $this->element('mveaModal');
?>
?>
<?php endif; ?>
<?= $this->element('mveaModal') ?>
</div>
</div>
5 changes: 3 additions & 2 deletions app/templates/element/mveaJs.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
$htmlId = $htmlId;
$parentId = $parentId;
$mveaType = $mveaType; // the type of MVEA we will fetch
$entityType = $entityType; // the type of entity continaing the MVEA (person, person_role, external_identity)
$entityType = $entityType; // the type of entity continaing the MVEA (person, person_role, external_identity, external_identity_role)

// Get the camel-case controller name and generate the title
$mveaController = Cake\Utility\Inflector::camelize($mveaType);
Expand Down Expand Up @@ -63,7 +63,8 @@
mveaType: '<?= $mveaType ?>',
mveaController: '<?= Cake\Utility\Inflector::dasherize($mveaController) ?>',
mveaTitle: '<?= $title ?>',
webroot: '<?= $this->request->getAttribute('webroot') ?>'
webroot: '<?= $this->request->getAttribute('webroot') ?>',
action: '<?= $vv_action ?>'
},
txt: JSON.parse('<?= json_encode($vueHelper->locales()) ?>'),
isLoading: true
Expand Down
7 changes: 3 additions & 4 deletions app/templates/element/searchGlobal.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*/

$options = [
'type' => 'get',
'type' => 'post',
'url' => [
'plugin' => null,
'controller' => 'dashboards',
Expand All @@ -52,16 +52,15 @@
['class' => 'visually-hidden']
);
$globalSearchInputClass = 'global-search-query';
if(!empty($this->request->getQuery('q'))) {
if(!empty($this->request->getData('q'))) {
$globalSearchInputClass .= ' has-value';
}
print $this->Form->input(
'q',
[
'id' => 'q',
'class' => $globalSearchInputClass,
'placeholder' => __d('field','search.placeholder'),
'value' => $this->request->getQuery('q')
'placeholder' => __d('field','search.placeholder')
]
);
print $this->Form->button(
Expand Down
23 changes: 7 additions & 16 deletions app/templates/element/subnavigation.php
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,9 @@
print $this->Html->link(
__d('controller', 'People', [1]),
[ 'controller' => 'people',
// TODO: the following test needs to be made based on read-only status of the Person
'action' => $curAction == 'view' ? 'view' : 'edit',
// TODO: the following test needs to be made based on read-only status of the Person only
//'action' => $curAction == 'view' ? 'view' : 'edit',
'action' => 'edit',
$curId
],
['class' => $linkClass]
Expand Down Expand Up @@ -323,26 +324,16 @@
<li class="list-inline-item">
<?php
// Properties
$cc = 'people';
$cc = 'external-identities';
$cid = $curId;
if($isPersonTab) {
$cid = $parentId;
}
if($isPersonRole) {
$cc = 'person-roles';
$cid = !empty($vv_person_role_id) ? $vv_person_role_id : $curId;
}
if($isExternalId) {
$cc = 'external-identities';
if(!empty($vv_ei_id)) {
$cid = $vv_ei_id;
}
if(!empty($vv_ei_id)) {
$cid = $vv_ei_id;
}
$linkClass = ($subActive == 'properties') ? 'nav-link active' : 'nav-link';
print $this->Html->link(
__d('controller', 'Properties', [99]),
[ 'controller' => $cc,
'action' => 'edit',
'action' => 'view',
$cid
],
['class' => $linkClass]
Expand Down
Loading

0 comments on commit 8008f1e

Please sign in to comment.