예제 #1
0
파일: Html.php 프로젝트: GemsTracker/MUtil
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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;
     }
 }
예제 #4
0
 /**
  * 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);
 }