/** * * @param string $trackingField The field that stores the tracking value * @param string $trackedField The field whose changing is tracked * @param string $oldValueField Optional, the field to store a copy of the original value in */ public function apply($trackingField, $trackedField, $oldValueField = null) { if (null === $oldValueField) { // Defautl name $oldValueField = self::OLD_FIELD_PREFIX . $trackedField; // Check if a fields already existed if (method_exists($this->_model, 'getKeyCopyName')) { $copyName = $this->_model->getKeyCopyName($trackedField); if ($this->_model->has($copyName)) { $oldValueField = $copyName; } } } if (!$this->_model->has($oldValueField)) { $this->_model->set($oldValueField, 'elementClass', 'Hidden', __CLASS__, $trackedField); $this->_model->setOnLoad($oldValueField, array($this, 'loadOldValue')); } if (!$this->_model->has($trackingField)) { // Only load the original value and ste the original result when it was not already in the model $this->_model->setAutoSave($trackingField); // $this->_model->setOnLoad($trackingField, $this->_unchangedValue); } $this->_model->set($trackingField, __CLASS__, array($trackedField, $oldValueField)); $this->_model->setOnSave($trackingField, array($this, 'saveValue')); // Store the extra hidden fields needed $hiddenFields = $this->_model->getMeta(self::HIDDEN_FIELDS, array()); $hiddenFields[] = $oldValueField; $this->_model->setMeta(self::HIDDEN_FIELDS, $hiddenFields); // Make sure the fields are in the result set $this->_model->get($trackedField); $this->_model->get($trackingField); $this->_model->get($oldValueField); }
/** * Overrule to implement snippet specific filtering and sorting. * * @param \MUtil_Model_ModelAbstract $model */ protected function processFilterAndSort(\MUtil_Model_ModelAbstract $model) { $filter['gto_id_respondent'] = $this->respondent->getId(); if (is_array($this->forOtherOrgs)) { $filter['gto_id_organization'] = $this->forOtherOrgs; } elseif (true !== $this->forOtherOrgs) { $filter['gto_id_organization'] = $this->respondent->getOrganizationId(); } // Filter for valid track reception codes $filter[] = 'gr2t_reception_code IN (SELECT grc_id_reception_code FROM gems__reception_codes WHERE grc_success = 1)'; $filter['grc_success'] = 1; // Active round // or // no round // or // token is success and completed $filter[] = 'gro_active = 1 OR gro_active IS NULL OR (grc_success=1 AND gto_completion_time IS NOT NULL)'; $filter['gsu_active'] = 1; // NOTE! $this->model does not need to be the token model, but $model is a token model $tabFilter = $this->model->getMeta('tab_filter'); if ($tabFilter) { $model->addFilter($tabFilter); } $model->addFilter($filter); // \MUtil_Echo::track($model->getFilter()); $this->processSortOnly($model); }