/** * 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); } } }
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); }
public function testColumnStrict() { $args = MUtil_Ra::column('c2', $this->_columnTest, MUtil_Ra::STRICT); $this->assertEquals($args, array('r1' => 'c1', 'r2' => 'c2', 'r3' => null)); }