fix show empty values in timeline

This commit is contained in:
Julien Fastré 2016-01-05 13:15:35 +01:00
parent b672074823
commit e939a809b1
2 changed files with 63 additions and 16 deletions

View File

@ -21,6 +21,8 @@ services:
- '@doctrine.orm.entity_manager'
- '@chill.main.security.authorization.helper'
- '@security.token_storage'
- '@chill.custom_field.helper'
- '%chill_custom_fields.show_empty_values%'
tags:
- { name: chill.timeline, context: 'person' }

View File

@ -28,6 +28,8 @@ use Symfony\Component\Security\Core\Role\Role;
use Doctrine\ORM\Mapping\ClassMetadata;
use Chill\PersonBundle\Entity\Person;
use Chill\MainBundle\Entity\Scope;
use Chill\CustomFieldsBundle\Service\CustomFieldsHelper;
use Chill\ReportBundle\Entity\Report;
/**
* Provide report for inclusion in timeline
@ -56,8 +58,17 @@ class TimelineReportProvider implements TimelineProviderInterface
*/
protected $user;
/**
*
* @var CustomFieldsHelper
*/
protected $customFieldsHelper;
protected $showEmptyValues;
public function __construct(EntityManager $em, AuthorizationHelper $helper,
TokenStorage $storage)
TokenStorage $storage, CustomFieldsHelper $customFieldsHelper,
$showEmptyValues)
{
$this->em = $em;
$this->helper = $helper;
@ -68,6 +79,8 @@ class TimelineReportProvider implements TimelineProviderInterface
}
$this->user = $storage->getToken()->getUser();
$this->customFieldsHelper = $customFieldsHelper;
$this->showEmptyValues = $showEmptyValues;
}
/**
@ -169,30 +182,62 @@ class TimelineReportProvider implements TimelineProviderInterface
{
$this->checkContext($context);
//gather all custom fields which should appears in summary
$customFieldsInSummary = array();
if (array_key_exists('summary_fields', $entity->getCFGroup()->getOptions())) {
foreach ($entity->getCFGroup()->getCustomFields() as $customField) {
if (in_array($customField->getSlug(),
$entity->getCFGroup()->getOptions()['summary_fields'])) {
$customFieldsInSummary[] = $customField;
}
}
}
return array(
'template' => 'ChillReportBundle:Timeline:report_person_context.html.twig',
'template_data' => array(
'report' => $entity,
'custom_fields_in_summary' => $customFieldsInSummary,
'custom_fields_in_summary' => $this->getFieldsToRender($entity, $context),
'person' => $args['person'],
'user' => $entity->getUser()
)
);
}
protected function getFieldsToRender(Report $entity, $context, array $args = array())
{
//gather all custom fields which should appears in summary
$gatheredFields = array();
if (array_key_exists('summary_fields', $entity->getCFGroup()->getOptions())) {
// keep in memory title
$title = null;
$subtitle = null;
foreach ($entity->getCFGroup()->getCustomFields() as $customField) {
if (in_array($customField->getSlug(),
$entity->getCFGroup()->getOptions()['summary_fields'])) {
// if we do not want to show empty values
if ($this->showEmptyValues === false) {
if ($customField->getType() === 'title') {
$options = $customField->getOptions();
switch($options['type']) {
case 'title': $title = $customField; break;
case 'subtitle': $subtitle = $customField; break;
}
} else {
if ($this->customFieldsHelper->isEmptyValue($entity->getCFData(), $customField)
=== false) {
if ($title !== NULL) {
$gatheredFields[] = $title;
$title = null;
}
if ($subtitle !== NULL) {
$gatheredFields[] = $subtitle;
$subtitle = null;
}
$gatheredFields[] = $customField;
}
}
} else {
$gatheredFields[] = $customField;
}
}
}
}
return $gatheredFields;
}
/**
*