예제 #1
0
 /**
  * Function to allow overruling of transform for certain models
  *
  * @param \MUtil_Model_ModelAbstract $model Parent model
  * @param \MUtil_Model_ModelAbstract $sub Sub model
  * @param array $data The nested data rows
  * @param array $join The join array
  * @param string $name Name of sub model
  * @param boolean $new True when loading a new item
  * @param boolean $isPostData With post data, unselected multiOptions values are not set so should be added
  */
 protected function transformLoadSubModel(\MUtil_Model_ModelAbstract $model, \MUtil_Model_ModelAbstract $sub, array &$data, array $join, $name, $new, $isPostData)
 {
     if (1 === count($join)) {
         // Suimple implementation
         $mkey = key($join);
         $skey = reset($join);
         $mfor = \MUtil_Ra::column($mkey, $data);
         // \MUtil_Echo::track($mfor);
         if ($new) {
             $sdata = $sub->loadNew(1);
         } else {
             $sdata = $sub->load(array($skey => $mfor));
         }
         // \MUtil_Echo::track($sdata);
         if ($sdata) {
             $skeys = array_flip(\MUtil_Ra::column($skey, $sdata));
             $empty = array_fill_keys(array_keys(reset($sdata)), null);
             foreach ($data as &$mrow) {
                 $mfind = $mrow[$mkey];
                 if (isset($skeys[$mfind])) {
                     $mrow += $sdata[$skeys[$mfind]];
                 } else {
                     $mrow += $empty;
                 }
             }
         } else {
             $empty = array_fill_keys($sub->getItemNames(), null);
             foreach ($data as &$mrow) {
                 $mrow += $empty;
             }
         }
         // \MUtil_Echo::track($mrow);
     } else {
         // Multi column implementation
         $empty = array_fill_keys($sub->getItemNames(), null);
         foreach ($data as &$mrow) {
             $filter = $sub->getFilter();
             foreach ($join as $from => $to) {
                 if (isset($mrow[$from])) {
                     $filter[$to] = $mrow[$from];
                 }
             }
             if ($new) {
                 $sdata = $sub->loadNew();
             } else {
                 $sdata = $sub->loadFirst($filter);
             }
             if ($sdata) {
                 $mrow += $sdata;
             } else {
                 $mrow += $empty;
             }
             // \MUtil_Echo::track($sdata, $mrow);
         }
     }
 }
예제 #2
0
 public function addAnswers(array $inputRows)
 {
     $tokens = \MUtil_Ra::column('gto_id_token', $inputRows);
     $answerRows = $this->source->getRawTokenAnswerRows(array('token' => $tokens), $this->survey->getSurveyId());
     $emptyRow = array_fill_keys($this->getItemNames(), null);
     $resultRows = array();
     $answerTokens = \MUtil_Ra::column('token', $answerRows);
     foreach ($inputRows as $row) {
         $tokenId = $row['gto_id_token'];
         $idx = array_search($tokenId, $answerTokens);
         if ($idx !== false && isset($answerRows[$idx])) {
             $resultRows[$tokenId] = $row + $answerRows[$idx] + $emptyRow;
         } else {
             $resultRows[$tokenId] = $row + $emptyRow;
         }
     }
     return $resultRows;
 }
 /**
  * Returns a nested array containing the items requested, including answers.
  *
  * @param array $inputRows Nested rows with Gems token information
  * @return array Nested array or false
  */
 protected function addAnswers(array $inputRows)
 {
     $resultRows = $inputRows;
     $tokens = \MUtil_Ra::column('gto_id_token', $inputRows);
     // \MUtil_Echo::track($tokens);
     /*$answerRows = $this->source->getRawTokenAnswerRows(array('token' => $tokens), $this->survey->getSurveyId());
             $emptyRow   = array_fill_keys($this->getItemNames(), null);
             $resultRows = array();
     
             foreach ($inputRows as $row) {
                 $tokenId = $row['gto_id_token'];
     
                 if (isset($answerRows[$tokenId])) {
                     $resultRows[$tokenId] = $row + $answerRows[$tokenId] + $emptyRow;
                 } else {
                     $resultRows[$tokenId] = $row + $emptyRow;
                 }
             }*/
     return $resultRows;
 }
 /**
  * The transform function performs the actual transformation of the data and is called after
  * the loading of the data in the source model.
  *
  * @param \MUtil_Model_ModelAbstract $model The parent model
  * @param array $data Nested array
  * @param boolean $new True when loading a new item
  * @param boolean $isPostData With post data, unselected multiOptions values are not set so should be added
  * @return array Nested array containing (optionally) transformed data
  */
 public function transformLoad(\MUtil_Model_ModelAbstract $model, array $data, $new = false, $isPostData = false)
 {
     // get tokens
     $tokens = \MUtil_Ra::column('gto_id_token', $data);
     $answerRows = $this->source->getRawTokenAnswerRows(array('token' => $tokens), $this->survey->getSurveyId());
     $resultRows = array();
     $emptyRow = array_fill_keys($model->getItemNames(), null);
     foreach ($data as $row) {
         $tokenId = $row['gto_id_token'];
         if (isset($answerRows[$tokenId])) {
             $resultRows[$tokenId] = $row + $answerRows[$tokenId] + $emptyRow;
         } else {
             $resultRows[$tokenId] = $row + $emptyRow;
         }
     }
     //\MUtil_Echo::track($tokens);
     //\MUtil_Echo::track($resultRows);
     // No changes
     return $resultRows;
 }
 /**
  * Get the display values for rounds
  *
  * @return array roundId => display string
  */
 protected function getRoundTranslations()
 {
     $this->_ensureRounds();
     return \MUtil_Ra::column('gro_id_order', $this->_rounds);
 }
예제 #6
0
 public function testColumnStrict()
 {
     $args = MUtil_Ra::column('c2', $this->_columnTest, MUtil_Ra::STRICT);
     $this->assertEquals($args, array('r1' => 'c1', 'r2' => 'c2', 'r3' => null));
 }