/** * Overloading: allow rendering specific decorators * * Call renderDecoratorName() to render a specific decorator. * * @param string $method * @param array $args * @return \MUtil_Html_HtmlElement or at least something that implements the \MUtil_Html_HtmlInterface interface * @throws \Zend_Form_Exception for invalid decorator or invalid method call */ public function __call($method, $args) { if ('render' == substr($method, 0, 6)) { return parent::__call($method, $args); } $elem = \MUtil_Html::createArray($method, $args); $value = $this->getValue(); if (!$value instanceof \MUtil_Html_ElementInterface) { $value = new \MUtil_Html_Sequence(); } $value->append($elem); $this->setValue($value); return $elem; }
/** * Get the action links for the specified items. * * @param boolean $remove Optional, set to true to remove the item from this list. * @param string $contr1 Controller name * @param string $action1 Action name, continues in pairs * @return \MUtil_Html_Sequence */ public function getActionLinks($remove, $contr1, $action1 = null, $contr2 = null, $action2 = null) { $args = func_get_args(); $count = func_num_args(); $results = new \MUtil_Html_Sequence(); $results->setGlue($this->getGlue()); for ($i = 1; $i < $count; $i++) { if ($result = $this->getActionLink($args[$i], $args[++$i], $remove)) { $results->append($result); } } return $results; }
/** * A ModelAbstract->setOnLoad() function that takes care of transforming a * dateformat read from the database to a \Zend_Date format * * If empty or \Zend_Db_Expression (after save) it will return just the value * currently there are no checks for a valid date format. * * @see \MUtil_Model_ModelAbstract * * @param mixed $value The value being saved * @param boolean $isNew True when a new item is being saved * @param string $name The name of the current field * @param array $context Optional, the other values being saved * @param boolean $isPost True when passing on post data * @return \MUtil_Date|\Zend_Db_Expr|string */ public function calculateDuration($value, $isNew = false, $name = null, array $context = array(), $isPost = false) { $surveyId = isset($context['gsu_id_survey']) ? $context['gsu_id_survey'] : false; if (!$surveyId) { return $this->_('incalculable'); } $fields['cnt'] = 'COUNT(DISTINCT gto_id_token)'; $fields['avg'] = 'AVG(CASE WHEN gto_duration_in_sec > 0 THEN gto_duration_in_sec ELSE NULL END)'; $fields['std'] = 'STDDEV_POP(CASE WHEN gto_duration_in_sec > 0 THEN gto_duration_in_sec ELSE NULL END)'; $select = $this->loader->getTracker()->getTokenSelect($fields); $select->forSurveyId($surveyId)->onlyCompleted(); $row = $select->fetchRow(); if ($row) { $trs = $this->util->getTranslated(); $seq = new \MUtil_Html_Sequence(); $seq->setGlue(\MUtil_Html::create('br', $this->view)); $seq->sprintf($this->_('Answered surveys: %d.'), $row['cnt']); $seq->sprintf($this->_('Average answer time: %s.'), $row['cnt'] ? $trs->formatTimeUnknown($row['avg']) : $this->_('n/a')); $seq->sprintf($this->_('Standard deviation: %s.'), $row['cnt'] ? $trs->formatTimeUnknown($row['std']) : $this->_('n/a')); if ($row['cnt']) { // Picked solution from http://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql $sql = "SELECT t1.gto_duration_in_sec as median_val\r\n FROM (SELECT @rownum:=@rownum+1 as `row_number`, gto_duration_in_sec\r\n FROM gems__tokens, (SELECT @rownum:=0) r\r\n WHERE gto_id_survey = ? AND gto_completion_time IS NOT NULL\r\n ORDER BY gto_duration_in_sec\r\n ) AS t1,\r\n (SELECT count(*) as total_rows\r\n FROM gems__tokens\r\n WHERE gto_id_survey = ? AND gto_completion_time IS NOT NULL\r\n ) as t2\r\n WHERE t1.row_number = floor(total_rows / 2) + 1"; $med = $this->db->fetchOne($sql, array($surveyId, $surveyId)); if ($med) { $seq->sprintf($this->_('Median value: %s.'), $trs->formatTimeUnknown($med)); } // \MUtil_Echo::track($row, $med, $sql, $select->getSelect()->__toString()); } else { $seq->append(sprintf($this->_('Median value: %s.'), $this->_('n/a'))); } return $seq; } }
/** * Displays the content * * @param string $value * @return string */ public function formatTable($value) { if (null === $value || is_scalar($value)) { return $value; } if (is_array($value)) { $i = 0; $output = new \MUtil_Html_Sequence(); $output->setGlue($this->_separator); foreach ($value as $val) { if ($i++ > $this->_maxTable) { $output->append($this->_more); break; } $output->append($val); } return $output; } return \MUtil_Html_TableElement::createArray($value); }