/** * Copied from parent, but insert chart instead of table after commented out part * * @param \Zend_View_Abstract $view * @return type */ public function getHtmlOutput(\Zend_View_Abstract $view) { $snippets = array(); $data = $this->getModel()->load(); // Find the first token with answers foreach ($data as $tokenData) { $token = $this->loader->getTracker()->getToken($tokenData)->refresh(); $tokenAnswers = $token->getRawAnswers(); if (!empty($tokenAnswers)) { break; } } // Some spacing with previous elements $snippets[] = \MUtil_Html::create()->p(\MUtil_Html::raw(' '), array('style' => 'clear:both;')); $config = $this->getConfig($token); // Fallback to all score elements in one chart when no config found if (!is_array($config)) { $config = array(); foreach ($tokenAnswers as $key => $value) { if (substr(strtolower($key), 0, 5) == 'score') { $config[0]['question_code'][] = $key; } } } // Set the default options $defaultOptions = array('data' => $data, 'showHeaders' => false, 'showButtons' => false); // Add all configured charts foreach ($config as $chartOptions) { $chartOptions = $chartOptions + $defaultOptions; $snippets[] = $this->loader->getSnippetLoader($this)->getSnippet('Survey_Display_BarChartSnippet', $chartOptions); } // Clear the floats $snippets[] = \MUtil_Html::create()->p(array('class' => 'chartfooter')); return $snippets; }
public function getHtmlOutput(\Zend_View_Abstract $view) { parent::getHtmlOutput($view); $respondentModel = $this->model; $respondentData = $this->data; $respondentId = $this->respondentId; $html = $this->getHtmlSequence(); if (empty($this->data)) { $html->p()->b(sprintf($this->_('Unknown respondent %s'), $respondentId)); return $html; } $bridge = $respondentModel->getBridgeFor('itemTable', array('class' => 'browser table')); $bridge->setRepeater(\MUtil_Lazy::repeat(array($respondentData))); $bridge->th($this->_('Respondent information'), array('colspan' => 4)); $bridge->setColumnCount(2); foreach ($respondentModel->getItemsOrdered() as $name) { if ($label = $respondentModel->get($name, 'label')) { $bridge->addItem($name, $label); } } $tableContainer = \MUtil_Html::create()->div(array('class' => 'table-container')); $tableContainer[] = $bridge->getTable(); $html->h2($this->_('Respondent information') . ': ' . $respondentId); $html[] = $tableContainer; $html->hr(); return $html; }
/** * Adds columns from the model to the bridge that creates the browse table. * * Adds a button column to the model, if such a button exists in the model. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @rturn void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { $model->setIfExists('gr2o_opened', 'tableDisplay', 'small'); $model->setIfExists('grs_email', 'formatFunction', array('MUtil_Html_AElement', 'ifmail')); if ($menuItem = $this->findAllowedMenuItem('show')) { $bridge->addItemLink($menuItem->toActionLinkLower($this->getRequest(), $bridge)); } // Newline placeholder $br = \MUtil_Html::create('br'); // Display separator and phone sign only if phone exist. $phonesep = $bridge->itemIf($bridge->grs_phone_1, \MUtil_Html::raw('☏ ')); $citysep = $bridge->itemIf($bridge->grs_zipcode, \MUtil_Html::raw(' ')); if ($this->currentUser->hasPrivilege('pr.respondent.multiorg')) { $bridge->addMultiSort('gr2o_patient_nr', $br, 'gor_name'); //, \MUtil_Html::raw(' '), 'gr2o_opened'); } else { $bridge->addMultiSort('gr2o_patient_nr', $br, 'gr2o_opened'); } $bridge->addMultiSort('name', $br, 'grs_email'); $bridge->addMultiSort('grs_address_1', $br, 'grs_zipcode', $citysep, 'grs_city'); $bridge->addMultiSort('grs_birthday', $br, $phonesep, 'grs_phone_1'); if ($menuItem = $this->findAllowedMenuItem('edit')) { $bridge->addItemLink($menuItem->toActionLinkLower($this->getRequest(), $bridge)); } }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); $user = $this->loader->getCurrentUser(); if ($user->hasPrivilege('pr.respondent.select-on-track')) { $tracks = $this->searchData['__active_tracks']; $masks['show_all'] = $this->_('(all)'); $masks['show_without_track'] = $this->_('(no track)'); if (count($tracks) > 1) { $masks['show_with_track'] = $this->_('(with track)'); } if (count($tracks) > 1) { $elements[] = $this->_createSelectElement('gr2t_id_track', $masks + $tracks); } else { $element = $this->_createRadioElement('gr2t_id_track', $masks + $tracks); $element->setSeparator(' '); $elements[] = $element; } $lineBreak = true; } else { $lineBreak = false; } if ($user->hasPrivilege('pr.respondent.show-deleted')) { $elements[] = $this->_createCheckboxElement('grc_success', $this->_('Show active')); } if ($this->model->isMultiOrganization()) { $element = $this->_createSelectElement(\MUtil_Model::REQUEST_ID2, $user->getRespondentOrganizations(), $this->_('(all organizations)')); if ($lineBreak) { $element->setLabel($this->_('Organization'))->setAttrib('onchange', 'this.form.submit();'); $elements[] = \MUtil_Html::create('br'); } $elements[] = $element; } return $elements; }
/** * Creates a model for getModel(). Called only for each new $action. * * The parameters allow you to easily adapt the model to the current action. The $detailed * parameter was added, because the most common use of action is a split between detailed * and summarized actions. * * @param boolean $detailed True when the current action is not in $summarizedActions. * @param string $action The current action. * @return \MUtil_Model_ModelAbstract */ public function createModel($detailed, $action) { $rcLib = $this->util->getReceptionCodeLibrary(); $yesNo = $this->util->getTranslated()->getYesNo(); $model = new \MUtil_Model_TableModel('gems__reception_codes'); $model->copyKeys(); // The user can edit the keys. $model->set('grc_id_reception_code', 'label', $this->_('Code'), 'size', '10'); $model->set('grc_description', 'label', $this->_('Description'), 'size', '30'); $model->set('grc_success', 'label', $this->_('Is success code'), 'multiOptions', $yesNo, 'elementClass', 'CheckBox', 'description', $this->_('This reception code is a success code.')); $model->set('grc_active', 'label', $this->_('Active'), 'multiOptions', $yesNo, 'elementClass', 'CheckBox', 'description', $this->_('Only active codes can be selected.')); if ($detailed) { $model->set('desc1', 'elementClass', 'Html', 'label', ' ', 'value', \MUtil_Html::create('h4', $this->_('Can be assigned to'))); } $model->set('grc_for_respondents', 'label', $this->_('Respondents'), 'multiOptions', $yesNo, 'elementClass', 'CheckBox', 'description', $this->_('This reception code can be assigned to a respondent.')); $model->set('grc_for_tracks', 'label', $this->_('Tracks'), 'multiOptions', $yesNo, 'elementClass', 'CheckBox', 'description', $this->_('This reception code can be assigned to a track.')); $model->set('grc_for_surveys', 'label', $this->_('Tokens'), 'multiOptions', $rcLib->getSurveyApplicationValues(), 'description', $this->_('This reception code can be assigned to a token.')); if ($detailed) { $model->set('desc2', 'elementClass', 'Html', 'label', ' ', 'value', \MUtil_Html::create('h4', $this->_('Additional actions'))); } $model->set('grc_redo_survey', 'label', $this->_('Redo survey'), 'multiOptions', $rcLib->getRedoValues(), 'description', $this->_('Redo a survey on this reception code.')); $model->set('grc_overwrite_answers', 'label', $this->_('Overwrite existing consents'), 'multiOptions', $yesNo, 'elementClass', 'CheckBox', 'description', $this->_('Remove the consent from already answered surveys.')); if ($detailed) { $model->set('grc_id_reception_code', 'validator', $model->createUniqueValidator('grc_id_reception_code')); $model->set('grc_description', 'validator', $model->createUniqueValidator('grc_description')); } if ($this->project->multiLocale) { $model->set('grc_description', 'description', 'ENGLISH please! Use translation file to translate.'); } \Gems_Model::setChangeFieldsByPrefix($model, 'grc'); return $model; }
/** * Place to set the data to display * * @param \MUtil_Model_Bridge_VerticalTableBridge $bridge * @return void */ protected function addTableCells(\MUtil_Model_Bridge_VerticalTableBridge $bridge) { $HTML = \MUtil_Html::create(); $bridge->caption($this->getCaption()); $br = $HTML->br(); $address[] = $bridge->grs_address_1; $address[] = $br; if ($this->model->has('grs_address_2')) { $address[] = $bridge->grs_address_2; $address[] = $bridge->itemIf('grs_address_2', $br); } $address[] = $bridge->grs_zipcode; $address[] = $bridge->itemIf('grs_zipcode', new \MUtil_Html_Raw(' ')); $address[] = $bridge->grs_city; // ROW 0 $label = $this->model->get('gr2o_patient_nr', 'label'); // Try to read label from model... if (empty($label)) { $label = $this->_('Respondent nr: '); // ...but have a fall-back } $bridge->addItem($bridge->gr2o_patient_nr, $label); $bridge->addItem($HTML->spaced($bridge->itemIf('grs_last_name', array($bridge->grs_last_name, ',')), $bridge->grs_gender, $bridge->grs_first_name, $bridge->grs_surname_prefix), $this->_('Respondent')); // ROW 1 $bridge->addItem('grs_birthday'); $bridge->addItem('grs_phone_1'); // ROW 2 $bridge->addItem('grs_email'); $bridge->addItem($address, $this->_('Address')); }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ public function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { $model->set('gr2o_patient_nr', 'label', $this->_('Respondent')); $model->set('gto_round_description', 'label', $this->_('Round / Details')); $model->set('gto_valid_from', 'label', $this->_('Valid from')); $model->set('gto_valid_until', 'label', $this->_('Valid until')); $model->set('gto_mail_sent_date', 'label', $this->_('Contact date')); $model->set('respondent_name', 'label', $this->_('Name')); $HTML = \MUtil_Html::create(); $bridge->setDefaultRowClass(\MUtil_Html_TableElement::createAlternateRowClass('even', 'even', 'odd', 'odd')); $bridge->addColumn($this->getTokenLinks($bridge), ' ')->rowspan = 2; // Space needed because TableElement does not look at rowspans $bridge->addSortable('gto_valid_from'); $bridge->addSortable('gto_valid_until'); $bridge->addMultiSort('gr2o_patient_nr', $HTML->raw('; '), 'respondent_name'); $bridge->addMultiSort('ggp_name', array($this->getActionLinks($bridge))); $bridge->tr(); $bridge->addSortable('gto_mail_sent_date'); $bridge->addSortable('gto_completion_time'); if ($this->escort instanceof \Gems_Project_Tracks_SingleTrackInterface) { $bridge->addMultiSort('gto_round_description', $HTML->raw('; '), 'gsu_survey_name'); } else { $model->set('gr2t_track_info', 'tableDisplay', 'smallData'); $model->set('gto_round_description', 'tableDisplay', 'smallData'); $bridge->addMultiSort('gtr_track_name', 'gr2t_track_info', $bridge->gtr_track_name->if($HTML->raw(' » ')), 'gsu_survey_name', 'gto_round_description'); } $bridge->addSortable('assigned_by'); }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); if ($elements) { $elements[] = null; // break into separate spans } if ($this->periodSelector) { $dates = array('_gto_valid_from gto_valid_until' => $this->_('Is valid during'), '-gto_valid_from gto_valid_until' => $this->_('Is valid within'), 'gto_valid_from' => $this->_('Valid from'), 'gto_valid_until' => $this->_('Valid until'), 'gto_mail_sent_date' => $this->_('E-Mailed on'), 'gto_completion_time' => $this->_('Completion date')); $this->_addPeriodSelectors($elements, $dates); $elements[] = null; // break into separate spans } $allowedOrgs = $this->getOrganizationList($data); $orgWhere = "(INSTR(gtr_organizations, '|" . implode("|') > 0 OR INSTR(gtr_organizations, '|", array_keys($allowedOrgs)) . "|') > 0)"; $elements[] = $this->_('Select:'); $elements[] = \MUtil_Html::create('br'); // Add track selection if ($this->multiTracks) { $elements[] = $this->_createSelectElement('gto_id_track', $this->getAllTrackTypes($orgWhere, $data), $this->_('(all tracks)')); } $elements[] = $this->_createSelectElement('gto_round_description', $this->getAllTrackRounds($orgWhere, $data), $this->_('(all rounds)')); $elements[] = $this->_createSelectElement('gto_id_survey', $this->getAllSurveys($orgWhere, $data), $this->_('(all surveys)')); $options = array('all' => $this->_('(all actions)'), 'open' => $this->_('Open'), 'notmailed' => $this->_('Not emailed'), 'tomail' => $this->_('To email'), 'toremind' => $this->_('Needs reminder'), 'hasnomail' => $this->_('Missing email'), 'toanswer' => $this->_('Yet to Answer'), 'answered' => $this->_('Answered'), 'missed' => $this->_('Missed'), 'removed' => $this->_('Removed')); $elements[] = $this->_createSelectElement('main_filter', $options); $elements[] = $this->_createSelectElement('gsu_id_primary_group', $this->getAllGroups($orgWhere, $data), $this->_('(all fillers)')); // Select organisation if (count($allowedOrgs) > 1) { $elements[] = $this->_createSelectElement('gto_id_organization', $allowedOrgs, $this->_('(all organizations)')); } $elements[] = $this->_createSelectElement('gr2t_created_by', $this->getAllCreators($allowedOrgs, $data), $this->_('(all staff)')); return $elements; }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); $elements[] = new \Zend_Form_Element_Hidden(\MUtil_Model::REQUEST_ID); $elements[] = $this->_createSelectElement('gtf_field_type', $this->model, $this->_('(all types)')); $elements[] = \MUtil_Html::create('br'); return $elements; }
protected function _showTable($caption, $data, $nested = false) { $tableContainer = \MUtil_Html::create()->div(array('class' => 'table-container')); $table = \MUtil_Html_TableElement::createArray($data, $caption, $nested); $table->class = 'browser table'; $tableContainer[] = $table; $this->html[] = $tableContainer; }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { $bridge->gr2t_id_respondent_track; // Data needed for edit button $bridge->gr2o_id_organization; // Data needed for edit button $HTML = \MUtil_Html::create(); // Get the buttons $respMenu = $this->menu->findAllowedController('respondent', 'show'); if ($respMenu) { $respondentButton = $respMenu->toActionLink($this->request, $bridge, $this->_('Show respondent')); $respondentButton->appendAttrib('class', 'rightFloat'); } else { $respondentButton = null; } $trackMenu = $this->menu->findAllowedController('respondent', 'show-track'); if ($trackMenu) { $trackButton = $trackMenu->toActionLink($this->request, $bridge, $this->_('Show track')); $trackButton->appendAttrib('class', 'rightFloat'); } else { $trackButton = null; } // Row with dates and patient data $bridge->tr(array('onlyWhenChanged' => true, 'class' => 'even')); $bridge->addSortable('gr2o_patient_nr'); $bridge->addSortable('respondent_name')->colspan = 2; if ($this->multiTracks) { $bridge->addSortable('grs_birthday'); $bridge->addMultiSort('grs_city', array($respondentButton)); $model->set('gr2t_track_info', 'tableDisplay', 'smallData'); // Row with track info $bridge->tr(array('onlyWhenChanged' => true, 'class' => 'even')); $td = $bridge->addMultiSort('gtr_track_name', 'gr2t_track_info'); $td->class = 'indentLeft'; $td->colspan = 4; $td->renderWithoutContent = false; // Do not display this cell and thus this row if there is not content $td = $bridge->addMultiSort('progress', array($trackButton)); $td->renderWithoutContent = false; // Do not display this cell and thus this row if there is not content } else { $bridge->addSortable('grs_birthday'); $bridge->addMultiSort('progress', array($respondentButton)); } $bridge->tr(array('class' => array('odd', $bridge->row_class), 'title' => $bridge->gto_comment)); $bridge->addColumn($this->createShowTokenButton($bridge))->class = 'rightAlign'; $bridge->addSortable('gto_valid_from'); $bridge->addSortable('gto_valid_until'); $model->set('gto_round_description', 'tableDisplay', 'smallData'); $bridge->addMultiSort('gsu_survey_name', 'gto_round_description')->colspan = 2; $bridge->tr(array('class' => array('odd', $bridge->row_class), 'title' => $bridge->gto_comment)); $bridge->addColumn(); $bridge->addSortable('gto_mail_sent_date'); $bridge->addSortable('gto_completion_time'); $bridge->addSortable('gto_id_token'); $bridge->addMultiSort('ggp_name', array($this->createActionButtons($bridge))); }
/** * 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('grs_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'; } }
/** * Set column usage to use for the browser. * * Must be an array of arrays containing the input for TableBridge->setMultisort() * * @return array or false */ public function getBrowseColumns() { // Newline placeholder $br = \MUtil_Html::create('br'); $sp = \MUtil_Html::raw(' '); $columns[10] = array('glo_name', $br, 'glo_organizations'); $columns[20] = array('glo_url', $br, 'glo_url_route'); $columns[30] = array('glo_address_1', $br, 'glo_zipcode', \MUtil_Html::raw(' '), 'glo_city'); $columns[40] = array(\MUtil_Html::raw('☏ '), 'glo_phone_1', $br, 'glo_filter', $sp, 'glo_match_to'); return $columns; }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { if (!$this->columns) { $br = \MUtil_Html::create('br'); $this->columns[10] = array('gla_created', $br, 'gls_name'); $this->columns[20] = array('gla_message'); $this->columns[30] = array('staff_name', $br, 'gla_role'); $this->columns[40] = array('respondent_name', $br, 'gla_organization'); } parent::addBrowseTableColumns($bridge, $model); }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); $groups = $this->util->getDbLookup()->getGroups(); $elements[] = $this->_createSelectElement('gsu_id_primary_group', $groups, $this->_('(all groups)')); $states = array('act' => $this->_('Active'), 'sok' => $this->_('OK in source, not active'), 'nok' => $this->_('Blocked in source')); $elements[] = $this->_createSelectElement('status', $states, $this->_('(every state)')); $elements[] = \MUtil_Html::create('br'); $yesNo = $this->util->getTranslated()->getYesNo(); $elements[] = $this->_createSelectElement('gsu_insertable', $yesNo, $this->_('(any insertable)')); return $elements; }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { // Search text $elements = parent::getAutoSearchElements($data); $this->_addPeriodSelectors($elements, array('grco_created' => $this->_('Date sent'))); $br = \MUtil_Html::create()->br(); $elements[] = null; $dbLookup = $this->util->getDbLookup(); $elements[] = $this->_createSelectElement('gto_id_track', $this->util->getTrackData()->getAllTracks(), $this->_('(select a track)')); $elements[] = $this->_createSelectElement('gto_id_survey', $this->util->getTrackData()->getAllSurveys(), $this->_('(all surveys)')); $elements[] = $this->_createSelectElement('grco_organization', $this->loader->getCurrentUser()->getRespondentOrganizations(), $this->_('(all organizations)')); return $elements; }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { // Search text $elements = parent::getAutoSearchElements($data); $this->_addPeriodSelectors($elements, array('grco_created' => $this->_('Date sent'))); $br = \MUtil_Html::create()->br(); $elements[] = null; $dbLookup = $this->util->getDbLookup(); $elements[] = $this->_createSelectElement('gto_id_track', $this->getRespondentTrackNames(), $this->_('(select a track)')); $elements[] = $this->_createSelectElement('gto_id_survey', $this->getRespondentSurveyNames(), $this->_('(select a survey)')); $elements[] = $this->_createSelectElement('status', $this->util->getTokenData()->getEveryStatus(), $this->_('(select a status)')); return $elements; }
/** * * @param \MUtil_Model_Bridge_TableBridge $bridge */ protected function addTokenLinks(\MUtil_Model_Bridge_TableBridge $bridge) { $title = \MUtil_Html::create()->strong($this->_('+')); $showLinks[] = $this->createMenuLink($bridge, 'track', 'show', $title); // Remove nulls $showLinks = array_filter($showLinks); if ($showLinks) { foreach ($showLinks as $showLink) { if ($showLink) { $showLink->title = array($this->_('Token'), $bridge->gto_id_token->strtoupper()); } } } $bridge->addItemLink($showLinks); }
/** * Create the snippets content * * This is a stub function either override getHtmlOutput() or override render() * * @param \Zend_View_Abstract $view Just in case it is needed here * @return \MUtil_Html_HtmlInterface Something that can be rendered */ public function getHtmlOutput(\Zend_View_Abstract $view) { $data = $this->getModel()->loadFirst(); if ($data && isset($data['relpath'])) { $nameForUser = $data['relpath']; } else { $nameForUser = $this->request->getParam(\MUtil_Model::REQUEST_ID, $this->_('unknown')); } if (!($data && file_exists($data['fullpath']))) { $this->addMessage(sprintf($this->_('The file "%s" does not exist on the server.'), $nameForUser)); return \MUtil_Html::create('pInfo', sprintf($this->_('The file "%s" could not be imported.'), $nameForUser)); } // \MUtil_Echo::track($data); return $this->_('Token'); }
public function displayDate($date) { if (!$date instanceof \Zend_Date) { return $date; } $div = \MUtil_Html::create('div'); $div->class = 'calendar'; if (0 < $date->getYear()->getTimestamp()) { $div->span(ucfirst($date->toString(\Zend_Date::WEEKDAY . ' ' . \Zend_Date::DAY_SHORT . ' ' . \Zend_Date::MONTH_NAME . ' ' . \Zend_Date::YEAR)))->class = 'date'; } // $div->strong($date->toString()); // $div->br(); $td = $div->span($date->toString(\Zend_Date::TIME_SHORT)); $td->class = 'time middleAlign'; $td->append(' '); $td->img()->src = 'stopwatch.png'; return $div; }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); if ($elements) { $br = \MUtil_Html::create('br'); $elements[] = $this->_createSelectElement('gtr_track_class', $this->model, $this->_('(all track engines)')); $elements[] = $br; $optionsA = $this->util->getTranslated()->getYesNo(); $elementA = $this->_createSelectElement('gtr_active', $optionsA, $this->_('(both)')); $elementA->setLabel($this->model->get('gtr_active', 'label')); $elements[] = $elementA; $user = $this->loader->getCurrentUser(); $optionsO = $user->getRespondentOrganizations(); $elementO = $this->_createSelectElement('org', $optionsO, $this->_('(all organizations)')); $elements[] = $elementO; } return $elements; }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { // \MUtil_Model::$verbose = true; // // Initiate data retrieval for stuff needed by links $bridge->gr2o_patient_nr; $bridge->gr2o_id_organization; $bridge->gr2t_id_respondent_track; $HTML = \MUtil_Html::create(); $roundDescription[] = $HTML->if($bridge->gto_round_description, $HTML->small(' [', $bridge->gto_round_description, ']')); $roundDescription[] = $HTML->small(' [', $bridge->createSortLink('gto_round_description'), ']'); $roundIcon[] = \MUtil_Lazy::iif($bridge->gto_icon_file, \MUtil_Html::create('img', array('src' => $bridge->gto_icon_file, 'class' => 'icon')), \MUtil_Lazy::iif($bridge->gro_icon_file, \MUtil_Html::create('img', array('src' => $bridge->gro_icon_file, 'class' => 'icon')))); if ($menuItem = $this->findMenuItem('track', 'show-track')) { $href = $menuItem->toHRefAttribute($this->request, $bridge); $track1 = $HTML->if($bridge->gtr_track_name, $HTML->a($href, $bridge->gtr_track_name)); } else { $track1 = $bridge->gtr_track_name; } $track[] = array($track1, $HTML->if($bridge->gr2t_track_info, $HTML->small(' [', $bridge->gr2t_track_info, ']'))); $track[] = array($bridge->createSortLink('gtr_track_name'), $HTML->small(' [', $bridge->createSortLink('gr2t_track_info'), ']')); $bridge->addMultiSort($track); $bridge->addMultiSort('gsu_survey_name', $roundDescription, $roundIcon); $bridge->addSortable('ggp_name'); $bridge->addSortable('calc_used_date', null, $HTML->if($bridge->is_completed, 'disabled date', 'enabled date')); $bridge->addSortable('gto_changed'); $bridge->addSortable('assigned_by', $this->_('Assigned by')); $project = \GemsEscort::getInstance()->project; // If we are allowed to see the result of the survey, show them $user = $this->loader->getCurrentUser(); if ($user->hasPrivilege('pr.respondent.result')) { $bridge->addSortable('gto_result', $this->_('Score'), 'date'); } $bridge->useRowHref = false; $actionLinks[] = $this->createMenuLink($bridge, 'track', 'answer'); $actionLinks[] = array($bridge->ggp_staff_members->if($this->createMenuLink($bridge, 'ask', 'take'), $bridge->calc_id_token->strtoupper()), 'class' => $bridge->ggp_staff_members->if(null, $bridge->calc_id_token->if('token'))); // calc_id_token is empty when the survey has been completed // Remove nulls $actionLinks = array_filter($actionLinks); if ($actionLinks) { $bridge->addItemLink($actionLinks); } $this->addTokenLinks($bridge); }
/** * Create the snippets content * * This is a stub function either override getHtmlOutput() or override render() * * @param \Zend_View_Abstract $view Just in case it is needed here * @return \MUtil_Html_HtmlInterface Something that can be rendered */ public function getHtmlOutput(\Zend_View_Abstract $view) { $html = $this->getHtmlSequence(); if ($this->trackName) { $html->h3(sprintf($this->_('Surveys in %s track'), $this->trackName)); } $trackRepeater = $this->getRepeater($this->trackId); $table = $html->div(array('class' => 'table-container'))->table($trackRepeater, array('class' => 'browser table')); if ($link = $this->findMenuItem('project-tracks', 'questions')) { $table->tr()->onclick = array('location.href=\'', $link->toHRefAttribute($trackRepeater), '\';'); $table->addColumn($link->toActionLinkLower($trackRepeater)); } $surveyName[] = $trackRepeater->gsu_survey_name; $surveyName[] = \MUtil_Lazy::iif($trackRepeater->gro_icon_file, \MUtil_Html::create('img', array('src' => $trackRepeater->gro_icon_file, 'class' => 'icon'))); $table->addColumn($surveyName, $this->_('Survey')); $table->addColumn($trackRepeater->gro_round_description, $this->_('Details')); $table->addColumn($trackRepeater->ggp_name, $this->_('By')); $table->addColumn($trackRepeater->gsu_survey_description->call(array(__CLASS__, 'oneLine')), $this->_('Description')); return $html; }
/** * Creates a model for getModel(). Called only for each new $action. * * The parameters allow you to easily adapt the model to the current action. The $detailed * parameter was added, because the most common use of action is a split between detailed * and summarized actions. * * @param boolean $detailed True when the current action is not in $summarizedActions. * @param string $action The current action. * @return \MUtil_Model_ModelAbstract */ public function createModel($detailed, $action) { $model = new \MUtil_Model_FolderModel(GEMS_ROOT_DIR . '/var/logs', null, $this->recursive); if ($this->recursive) { $model->set('relpath', 'label', $this->_('File (local)'), 'maxlength', 255, 'size', 40, 'validators', array('File_Path', 'File_IsRelativePath')); $model->set('filename', 'elementClass', 'Exhibitor'); } if ($detailed || !$this->recursive) { $model->set('filename', 'label', $this->_('Filename'), 'size', 30, 'maxlength', 255); } if ($detailed) { $model->set('path', 'label', $this->_('Path'), 'elementClass', 'Exhibitor'); $model->set('fullpath', 'label', $this->_('Full name'), 'elementClass', 'Exhibitor'); $model->set('extension', 'label', $this->_('Type'), 'elementClass', 'Exhibitor'); $model->set('content', 'label', $this->_('Content'), 'formatFunction', array(\MUtil_Html::create(), 'pre'), 'elementClass', 'TextArea'); } $model->set('size', 'label', $this->_('Size'), 'formatFunction', array('MUtil_File', 'getByteSized'), 'elementClass', 'Exhibitor'); $model->set('changed', 'label', $this->_('Changed on'), 'dateFormat', $this->util->getTranslated()->dateTimeFormatString, 'elementClass', 'Exhibitor'); return $model; }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { $bridge->tr()->class = $bridge->row_class; if ($showMenuItem = $this->getShowMenuItem()) { $bridge->addItemLink($showMenuItem->toActionLinkLower($this->request, $bridge)); } // make sure search results are highlighted $this->applyTextMarker(); $br = \MUtil_Html::create()->br(); $orgName[] = \MUtil_Lazy::iff($bridge->gor_url, \MUtil_Html_AElement::a($bridge->gor_name, array('href' => $bridge->gor_url, 'target' => '_blank', 'class' => 'globe')), $bridge->gor_name); $orgName[] = $bridge->createSortLink('gor_name'); $mailName[] = \MUtil_Lazy::iff($bridge->gor_contact_email, \MUtil_Html_AElement::email(\MUtil_Lazy::first($bridge->gor_contact_name, $bridge->gor_contact_email), array('href' => array('mailto:', $bridge->gor_contact_email))), $bridge->gor_contact_name); $mailName[] = $bridge->createSortLink('gor_contact_name'); $bridge->addMultiSort($orgName, $br, 'gor_task', $br, 'gor_location'); $bridge->addMultiSort($mailName, $br, 'gor_active', $br, 'gor_has_login'); $bridge->addMultiSort('gor_add_respondents', $br, 'gor_has_respondents', $br, 'gor_respondent_group'); $bridge->add('gor_accessible_by'); if ($editMenuItem = $this->getEditMenuItem()) { $bridge->addItemLink($editMenuItem->toActionLinkLower($this->request, $bridge)); } }
/** * Hook that loads the form data from $_POST or the model * * Or from whatever other source you specify here. */ protected function loadFormData() { parent::loadFormData(); if (isset($this->formData['gor_id_organization']) && $this->formData['gor_id_organization']) { $model = $this->getModel(); // Strip self from list of organizations $multiOptions = $model->get('gor_accessible_by', 'multiOptions'); unset($multiOptions[$this->formData['gor_id_organization']]); $model->set('gor_accessible_by', 'multiOptions', $multiOptions); // Show allowed organisations $org = $this->loader->getOrganization($this->formData['gor_id_organization']); $allowedOrgs = $org->getAllowedOrganizations(); //Strip self unset($allowedOrgs[$this->formData['gor_id_organization']]); $display = join(', ', $allowedOrgs); if (!$display) { $display = \MUtil_Html::create('em', $this->_('No access to other organizations.')); } $model->set('allowed', 'value', $display); } }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { $bridge->gr2o_id_organization; if ($menuItem = $this->menu->find(array('controller' => 'appointment', 'action' => 'show', 'allowed' => true))) { $appButton = $menuItem->toActionLink($this->request, $bridge, $this->_('Show appointment')); } else { $appButton = null; } if ($menuItem = $this->menu->find(array('controller' => 'respondent', 'action' => 'show', 'allowed' => true))) { $respButton = $menuItem->toActionLink($this->request, $bridge, $this->_('Show respondent')); } else { $respButton = null; } $br = \MUtil_Html::create('br'); $sp = \MUtil_Html::raw(' '); $table = $bridge->getTable(); $table->appendAttrib('class', 'calendar'); $table->tbody()->getFirst(true)->appendAttrib('class', $bridge->row_class); // Row with dates and patient data $table->tr(array('onlyWhenChanged' => true, 'class' => 'date')); $bridge->addSortable('date_only', $this->_('Date'), array('class' => 'date'))->colspan = 4; // Row with dates and patient data $bridge->tr(array('onlyWhenChanged' => true, 'class' => 'time middleAlign')); $td = $bridge->addSortable('gap_admission_time'); $td->append(' '); $td->img()->src = 'stopwatch.png'; $td->title = $bridge->date_only; // Add title, to make sure row displays when time is same as time for previous day $bridge->addSortable('gor_name'); $bridge->addSortable('glo_name')->colspan = 2; $bridge->tr()->class = array('odd', $bridge->row_class); $bridge->addColumn($appButton)->class = 'middleAlign'; $bridge->addMultiSort('gr2o_patient_nr', $sp, 'gap_subject', $br, 'name'); // $bridge->addColumn(array($bridge->gr2o_patient_nr, $br, $bridge->name)); $bridge->addMultiSort(array($this->_('With')), array(' '), 'gas_name', $br, 'gaa_name', array(' '), 'gapr_name'); // $bridge->addColumn(array($bridge->gaa_name, $br, $bridge->gapr_name)); $bridge->addColumn($respButton)->class = 'middleAlign rightAlign'; unset($table[\MUtil_Html_TableElement::THEAD]); }
/** * Create the snippets content * * This is a stub function either override getHtmlOutput() or override render() * * @param \Zend_View_Abstract $view Just in case it is needed here * @return \MUtil_Html_HtmlInterface Something that can be rendered */ public function getHtmlOutput(\Zend_View_Abstract $view) { $tabs = $this->getTabs(); $tabCount = count($tabs); if ($tabs && ($this->displaySingleTab || $tabCount > 1)) { // Is there a better helper to include JS? $view->headScript()->appendFile($this->basepath->getBasePath() . '/gems/js/jquery.horizontalScrollMenu.js'); $script = '(function($) {$(".' . $this->class . '").horizontalScrollMenu();}(jQuery));'; $view->inlineScript()->appendScript($script); // Set the correct parameters $this->getCurrentTab(); $scrollContainer = \MUtil_Html::create()->div(); if ($tabCount > $this->scrollFromSize) { $scrollContainer->a('#', $this->prevLabel, array('class' => 'prev')); } else { $scrollContainer->span(array('class' => 'prev disabled'))->raw(str_repeat(' ', strlen($this->prevLabel))); } $tabRow = $scrollContainer->div(array('class' => 'container'))->ul(); foreach ($tabs as $tabId => $content) { $li = $tabRow->li(array('class' => $this->tabClass)); if (strlen($content) > $this->tabLabelLength) { $content = substr($content, 0, $this->tabLabelLength) . $this->tabLabelCutOffString; } $li->a($this->getParameterKeysFor($tabId) + $this->href, $content); if ($tabId == $this->currentTab) { $li->appendAttrib('class', $this->tabActiveClass); } } if ($tabCount > $this->scrollFromSize) { $scrollContainer->a('#', $this->nextLabel, array('class' => 'next')); } else { $scrollContainer->span(array('class' => 'next disabled'))->raw(str_repeat(' ', strlen($this->nextLabel))); } return $scrollContainer; } else { return null; } }
/** * Adds columns from the model to the bridge that creates the browse table. * * Overrule this function to add different columns to the browse table, without * having to recode the core table building code. * * @param \MUtil_Model_Bridge_TableBridge $bridge * @param \MUtil_Model_ModelAbstract $model * @return void */ protected function addBrowseTableColumns(\MUtil_Model_Bridge_TableBridge $bridge, \MUtil_Model_ModelAbstract $model) { if ($model->has('row_class')) { $bridge->getTable()->tbody()->getFirst(true)->appendAttrib('class', $bridge->row_class); } if ($this->showMenu) { $showMenuItems = $this->getShowMenuItems(); foreach ($showMenuItems as $menuItem) { $bridge->addItemLink($menuItem->toActionLinkLower($this->request, $bridge)); } } // Newline placeholder $br = \MUtil_Html::create('br'); $by = \MUtil_Html::raw($this->_(' / ')); $sp = \MUtil_Html::raw(' '); // make sure search results are highlighted $this->applyTextMarker(); $bridge->addMultiSort('grco_created', $br, 'gr2o_patient_nr', $sp, 'respondent_name', $br, 'grco_address', $br, 'gtr_track_name'); $bridge->addMultiSort('grco_id_token', $br, 'assigned_by', $br, 'grco_sender', $br, 'gsu_survey_name'); $bridge->addMultiSort('status', $by, 'filler', $br, 'grco_topic'); if ($this->showMenu) { $items = $this->findMenuItems('track', 'show'); $links = array(); $params = array('gto_id_token' => $bridge->gto_id_token, \Gems_Model::ID_TYPE => 'token'); $title = \MUtil_Html::create('strong', $this->_('+')); foreach ($items as $item) { if ($item instanceof \Gems_Menu_SubMenuItem) { $bridge->addItemLink($item->toActionLinkLower($this->request, $params, $title)); } } } $bridge->getTable()->appendAttrib('class', 'compliance'); $tbody = $bridge->tbody(); $td = $tbody[0][0]; $td->appendAttrib('class', \MUtil_Lazy::method($this->util->getTokenData(), 'getStatusClass', $bridge->getLazy('status'))); }
/** * Returns a text element for autosearch. Can be overruled. * * The form / html elements to search on. Elements can be grouped by inserting null's between them. * That creates a distinct group of elements * * @param array $data The $form field values (can be usefull, but no need to set them) * @return array Of \Zend_Form_Element's or static tekst to add to the html or null for group breaks. */ protected function getAutoSearchElements(array $data) { $elements = parent::getAutoSearchElements($data); $user = $this->loader->getCurrentUser(); if ($user->hasPrivilege('pr.respondent.select-on-track')) { $elements[] = $this->_createCheckboxElement('show_with_track', $this->_('Has track')); $elements[] = $this->_createCheckboxElement('show_without_track', $this->_('No track')); $lineBreak = true; } else { $lineBreak = false; } if ($user->hasPrivilege('pr.respondent.show-deleted')) { $elements[] = $this->_createCheckboxElement('grc_success', $this->_('Show active')); } if ($this->model->isMultiOrganization()) { $element = $this->_createSelectElement(\MUtil_Model::REQUEST_ID2, $user->getRespondentOrganizations(), $this->_('(all organizations)')); if ($lineBreak) { $element->setLabel($this->_('Organization')); $elements[] = \MUtil_Html::create('br'); } $elements[] = $element; } return $elements; }