GemsTracker/gemstracker-library

View on GitHub
classes/Gems/Snippets/Respondent/DetailsWithAssignmentsSnippet.php

Summary

Maintainability
B
4 hrs
Test Coverage
F
0%
<?php

/**
 *
 * @package    Gems
 * @subpackage Snippets
 * @author     Matijs de Jong <mjong@magnafacta.nl>
 * @copyright  Copyright (c) 2011 Erasmus MC
 * @license    New BSD License
 * @version    $Id$
 */

namespace Gems\Snippets\Respondent;

/**
 * Displays a respondent's details with assigned surveys and tracks in extra columns.
 *
 * @package    Gems
 * @subpackage Snippets
 * @copyright  Copyright (c) 2011 Erasmus MC
 * @license    New BSD License
 * @since      Class available since version 1.1
 */
class DetailsWithAssignmentsSnippet extends \Gems_Snippets_RespondentDetailSnippetAbstract
{
    /**
     * Require
     *
     * @var \Zend_Controller_Request_Abstract
     */
    protected $request;

    /**
     *
     * @var \Gems_Util
     */
    public $util;

    /**
     * Place to set the data to display
     *
     * @param \MUtil_Model_Bridge_VerticalTableBridge $bridge
     * @return void
     */
    protected function addTableCells(\MUtil_Model_Bridge_VerticalTableBridge $bridge)
    {
        $bridge->setColumnCount(1);

        $HTML = \MUtil_Html::create();

        $bridge->tdh($this->getCaption(), array('colspan' => 2));

        // Caption for tracks
        $trackLabel = $this->_('Assigned tracks');
        if ($menuItem = $this->findMenuItem('track', 'index')) {
            $href = $menuItem->toHRefAttribute($this->request, $bridge);
            $bridge->tdh(array('class' => 'linked'))->a($href, $trackLabel);
        } else {
            $bridge->tdh($trackLabel, array('class' => 'linked'));
        }

        $bridge->tr();

        // ROW 1
        $bridge->addItem($bridge->gr2o_patient_nr, $this->_('Respondent nr: '));

        $rowspan = 10;

        // Column for tracks
        $tracksModel = $this->model->getRespondentTracksModel();
        $tracksData  = \MUtil_Lazy::repeat(
            $tracksModel->load(
                array('gr2o_patient_nr' => $this->repeater->gr2o_patient_nr, 'gr2o_id_organization' => $this->repeater->gr2o_id_organization),
                array('gr2t_created' => SORT_DESC)));
        $tracksList  = $HTML->div($tracksData, array('class' => 'tracksList'));
        $tracksList->setOnEmpty($this->_('No tracks'));
        if ($menuItem = $this->findMenuItem('track', 'show-track')) {
            $href = $menuItem->toHRefAttribute($tracksData, array('gr2o_patient_nr' => $this->repeater->gr2o_patient_nr));
            $tracksTarget = $tracksList->p()->a($href);
        } else {
            $tracksTarget = $tracksList->p();
        }
        $tracksTarget->strong($tracksData->gtr_track_name);
        $tracksTarget[] = ' ';
        $tracksTarget->em($tracksData->gr2t_track_info, array('renderWithoutContent' => false));
        $tracksTarget[] = ' ';
        $tracksTarget[] = \MUtil_Lazy::call($this->util->getTranslated()->formatDate, $tracksData->gr2t_created);
        $bridge->td($tracksList, array('rowspan' => $rowspan, 'class' => 'linked tracksList'));

        // OTHER ROWS
        $bridge->addItem(
            $HTML->spaced($bridge->itemIf('grs_last_name', array($bridge->grs_last_name, ',')), $bridge->grs_first_name, $bridge->grs_surname_prefix),
            $this->_('Respondent'));
        $bridge->addItem('grs_gender');
        $bridge->addItem('grs_birthday');
        $bridge->addItem('gr2o_email');
        $bridge->addItem('gr2o_created');
        $bridge->addItem('gr2o_created_by');

        if ($this->onclick) {
            // TODO: can we not use $repeater?
            $href = array('location.href=\'', $this->onclick, '\';');

            foreach ($bridge->tbody() as $tr) {
                foreach ($tr as $td) {
                    if (strpos($td->class, 'linked') === false) {
                        $td->onclick = $href;
                    } else {
                        $td->onclick = 'event.cancelBubble=true;';
                    }
                }
            }
            $bridge->tbody()->onclick = '// Dummy for CSS';
        }
   }
}