Skip to content
Snippets Groups Projects
Commit 365b38ee authored by jaapjansma's avatar jaapjansma
Browse files

Merge branch 'only-one-date-when-same-day' into 'main'

Show only one date when both dates are the same day

See merge request !129
parents 9bf8a10c 508519f9
No related branches found
No related tags found
1 merge request!129Show only one date when both dates are the same day
......@@ -9,6 +9,7 @@ namespace Civi\DataProcessor\FieldOutputHandler;
use CRM_Dataprocessor_ExtensionUtil as E;
use Civi\DataProcessor\Source\SourceInterface;
use Civi\DataProcessor\DataSpecification\FieldSpecification;
use DateTime;
class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
......@@ -36,6 +37,8 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
*/
protected $separator;
protected bool $omitEndDate = FALSE;
/**
* Initialize the processor
*
......@@ -49,6 +52,8 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
[$this->dataSourceDateEnd, $this->dateEnd] = $this->initializeField($configuration['date_end'], $configuration['date_end_datasource'], $alias . '_date_end');
$this->formatDateOnly = isset($configuration['format_date_only']) ? $configuration['format_date_only'] : false;
$this->separator = isset($configuration['separator']) ? $configuration['separator'] : false;
$this->omitEndDate = isset($configuration['omit_end_date_when_same_day']) ? $configuration['omit_end_date_when_same_day'] : FALSE;
}
/**
......@@ -70,6 +75,8 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
'placeholder' => E::ts('- select -'),
));
$form->add('checkbox', 'omit_end_date_when_same_day', E::ts('Hide end date when same day'));
$form->add('text', 'format_date_only', E::ts('Format date only'), array(
'style' => 'min-width:250px',
'class' => 'huge',
......@@ -96,6 +103,10 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
}
}
if (isset($configuration['omit_end_date_when_same_day'])) {
$defaults['omit_end_date_when_same_day'] = $configuration['omit_end_date_when_same_day'];
}
$form->setDefaults($defaults);
}
......@@ -123,6 +134,8 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
$configuration['date_end'] = $field;
$configuration['date_end_datasource'] = $datasource;
$configuration['omit_end_date_when_same_day'] = isset($submittedValues['omit_end_date_when_same_day']) ? $submittedValues['omit_end_date_when_same_day'] : FALSE;
foreach (array('separator', 'format_date_only') as $key) {
$configuration[$key] = isset($submittedValues[$key]) ? $submittedValues[$key] : false;
}
......@@ -140,21 +153,52 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
*/
public function formatField($rawRecord, $formattedRecord) {
$output = new FieldOutput($rawRecord[$this->inputFieldSpec->alias]);
$rawValue = $rawRecord[$this->inputFieldSpec->alias];
if (($this->format || $this->formatDateOnly) && $rawValue) {
$output->formattedValue = $this->formatHelper($rawValue);
}
$output2 = new FieldOutput($rawRecord[$this->dateEnd->alias]);
$rawValue2 = $rawRecord[$this->dateEnd->alias];
if ($rawValue2) {
if ($this->format || $this->formatDateOnly) {
$output2->formattedValue = $this->formatHelper($rawValue2);
}
if ($this->separator) {
$output->formattedValue .= $this->separator;
$isSameDay = FALSE;
if ($this->omitEndDate && isset($output->rawValue)) {
$startDate = new DateTime($output->rawValue);
$startDay = $startDate->format('Y-m-d');
$endDate = new DateTime($rawValue2);
$endDay = $endDate->format('Y-m-d');
if ($startDay === $endDay) {
$isSameDay = TRUE;
}
}
if ($isSameDay) {
if ($this->formatDateOnly && str_ends_with($rawValue2, ' 00:00:00')) {
return $output;
}
// time separator
if ($this->separator) {
$output->formattedValue .= $this->separator;
}
$onlyTime = preg_replace('#.+(\d{2}:\d{2})([ A-Za-z]*)$#', '$1$2', $output2->formattedValue);
$output->formattedValue .= $onlyTime;
}
else {
if ($this->separator) {
$output->formattedValue .= $this->separator;
}
$output->formattedValue .= $output2->formattedValue;
}
$output->formattedValue .= $output2->formattedValue;
}
return $output;
......@@ -173,7 +217,7 @@ class DateRangeFieldOutputHandler extends DateFieldOutputHandler {
* @throws \Exception
*/
protected function formatHelper($raw_value) {
$date = new \DateTime($raw_value);
$date = new DateTime($raw_value);
if ($this->formatDateOnly && str_ends_with($raw_value, ' 00:00:00')) {
$format = $this->formatDateOnly;
}
......
......@@ -17,6 +17,11 @@
</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.omit_end_date_when_same_day.label}</div>
<div class="content">{$form.omit_end_date_when_same_day.html}</div>
<div class="clear"></div>
</div>
<hr >
<div class="crm-section">
<div class="label">{$form.format_date_only.label}</div>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment