chill-bundles/Timeline/TimelineReportProvider.php
Julien Fastré ae6553ae0d Add timeline to report
refs #357 and refs #224

Squashed commit of the following:

commit 1393a2b283566f428e13160da18487c2a0bbea78
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Thu Feb 26 12:13:56 2015 +0100

    add summary_fields in timeline

    The tests and fixtures are adapted accordingly

commit d0374961c2b03a334ff724fbe2995d082d7d7e01
Author: Julien Fastré <julien@fastre.info>
Date:   Thu Feb 26 10:36:56 2015 +0100

    fix namespace

commit c2d71a17301d923cb20ae295f7d1efef8727a643
Author: Julien Fastré <julien@fastre.info>
Date:   Mon Feb 23 21:59:26 2015 +0100

    Improve rendering in person context

commit 827d3116a36f8b86bc2dcd79926e42a3d472bb70
Author: Julien Fastré <julien@fastre.info>
Date:   Mon Feb 23 16:34:43 2015 +0100

    add test for timeline page

commit d93aa527190a6038b4c58dff3af81568c377cd0f
Author: Julien Fastré <julien@fastre.info>
Date:   Mon Feb 23 16:34:07 2015 +0100

    add message for timeline

commit 63de4ddc2c7eca8530b3cc6e122d44840340329d
Author: Julien Fastré <julien@fastre.info>
Date:   Mon Feb 23 13:48:32 2015 +0100

    create timeline provider
2015-02-26 12:15:36 +01:00

142 lines
3.9 KiB
PHP

<?php
/*
* Chill is a software for social workers
* Copyright (C) 2015 Champs Libres <info@champs-libres.coop>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Chill\ReportBundle\Timeline;
use Chill\MainBundle\Timeline\TimelineProviderInterface;
use Doctrine\ORM\EntityManager;
/**
* Provide report for inclusion in timeline
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Champs Libres <info@champs-libres.coop>
*/
class TimelineReportProvider implements TimelineProviderInterface
{
/**
*
* @var EntityManager
*/
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
/**
*
* {@inheritDoc}
*/
public function fetchQuery($context, array $args)
{
$this->checkContext($context);
$metadata = $this->em->getClassMetadata('ChillReportBundle:Report');
return array(
'id' => $metadata->getColumnName('id'),
'type' => 'report',
'date' => $metadata->getColumnName('date'),
'FROM' => $metadata->getTableName(),
'WHERE' => sprintf('%s = %d',
$metadata
->getAssociationMapping('person')['joinColumns'][0]['name'],
$args['person']->getId())
);
}
/**
*
* {@inheritDoc}
*/
public function getEntities(array $ids)
{
$reports = $this->em->getRepository('ChillReportBundle:Report')
->findBy(array('id' => $ids));
$result = array();
foreach($reports as $report) {
$result[$report->getId()] = $report;
}
return $result;
}
/**
*
* {@inheritDoc}
*/
public function getEntityTemplate($entity, $context, array $args)
{
$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,
'person' => $args['person'],
'user' => $entity->getUser()
)
);
}
/**
*
* {@inheritDoc}
*/
public function supportsType($type)
{
return $type === 'report';
}
/**
* check if the context is supported
*
* @param string $context
* @throws \LogicException if the context is not supported
*/
private function checkContext($context)
{
if ($context !== 'person') {
throw new \LogicException("The context '$context' is not "
. "supported. Currently only 'person' is supported");
}
}
}