/** * @param sfWebRequest $request * @return sfView */ public function executeSave(sfWebRequest $request) { $this->forward404Unless($request->isXmlHttpRequest()); $measurement = $request->getParameter('measurement'); $decision_id = $request->getParameter('decision_id'); $user = $this->getUser()->getGuardUser(); $keys = array_keys($measurement); $alternative_id = array_shift($keys); $keys = array_keys($measurement[$alternative_id]); $criterion_id = array_shift($keys); $value = $measurement[$alternative_id][$criterion_id]; $alternativeMeasurement = AlternativeMeasurementTable::getInstance()->getOneForDashboard($user, $decision_id, $alternative_id, $criterion_id); if (is_object($alternativeMeasurement)) { $alternativeMeasurement->score = $value; $alternativeMeasurement->save(); } else { $response = ResponseTable::getInstance()->getOneForDashboard($user, $decision_id); if (is_object($response)) { $alternativeMeasurement = new AlternativeMeasurement(); $alternativeMeasurement->score = $value; $alternativeMeasurement->alternative_head_id = $alternative_id; $alternativeMeasurement->criterion_id = $criterion_id; $alternativeMeasurement->Response = $response; $alternativeMeasurement->save(); } } Doctrine_Query::create()->delete()->from('Graph')->where('decision_id = ?', $decision_id)->execute(); $criteriaAnalyze = new CriteriaAnalyze(); $criteriaAnalyze->setDecisionId($decision_id); $criteriaAnalyze->load(); $stackedBarChart = new StackedBarChart(); $stackedBarChart->setDecisionId($decision_id); $stackedBarChart->setCriteriaValues($criteriaAnalyze->getCriteriaValues()); $stackedBarChart->load(); $costAnalyze = new CostAnalyze(); $costAnalyze->setDecisionId($decision_id); $costAnalyze->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $costAnalyze->setCumulativeData($stackedBarChart->getCumulativeData()); $costAnalyze->load(); $cumulativeChart = new CumulativeGainChart(); $cumulativeChart->setDecisionId($decision_id); $cumulativeChart->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $cumulativeChart->setMeasurement($stackedBarChart->getCumulativeData()); $cumulativeChart->setCostData($costAnalyze->getData()); $cumulativeChart->setAlternativeNames($costAnalyze->getAlternativeNames()); $cumulativeChart->setCriterionNames($costAnalyze->getCriteria()); $cumulativeChart->load(); $stacked_bar_chart[] = '"data":' . $stackedBarChart->getJsonData(); $stacked_bar_chart[] = '"alternatives":' . $stackedBarChart->getAlternativesJson(); $stacked_bar_chart[] = '"criteria":' . $stackedBarChart->getCriteriaJson(); $cumulative_chart[] = '"costData":' . $cumulativeChart->getJsonCostData(); $cumulative_chart[] = '"benefitData":' . $cumulativeChart->getJsonData(); $cumulative_chart[] = '"criteria":' . json_encode($costAnalyze->getCriteria()); $cumulative_chart[] = '"alternatives":' . $cumulativeChart->getAlternativesJson(); $response = array(); $response[] = '"cumulativeChart":{' . implode(',', $cumulative_chart) . '}'; $response[] = '"stackedBarChart":{' . implode(',', $stacked_bar_chart) . '}'; $this->getResponse()->setHttpHeader('Content-Type', 'application/json; charset=utf-8'); return $this->renderText('{' . implode(',', $response) . '}'); }
/** * Return the values from the database or empty array */ public function getValues() { $return = array(); if ($this->role and $this->role->Response->count() and $this->role->updateable and !$this->role->anonymous) { $context = sfContext::getInstance(); $user = $context->getUser(); // find response by user_id if ($user->isAuthenticated()) { $response = ResponseTable::getInstance()->findByRoleIdAndUserId($this->role->id, $user->getGuardUser()->id)->getFirst(); } else { $email = $user->getAttribute('email_address', null, 'measurement/email/' . $this->role->id); $response = ResponseTable::getInstance()->findByRoleIdAndEmailAddress($this->role->id, $email)->getFirst(); } if ($response instanceof Response) { $values = CriterionPrioritizationTable::getInstance()->findByResponseId($response->id); /** @var CriterionPrioritization $object */ foreach ($values as $object) { $return[$object->criterion_head_id] = $object->score; } } } return $return; }
public function getResponseListResponse(sfGuardUser $user) { /** @var sfWebRequest $request */ $request = $this->getRequest(); return array('status' => 'success', 'result' => ResponseTable::getInstance()->getListForAPI($user, $request->getParameter('decision_id'))); }
public function save() { $context = sfContext::getInstance(); $user = $context->getUser(); // When the role marked as "updateable" anyone with the link can enter the response and update it. /** @var Response $response */ if ($this->role->updateable) { if ($this->role->Response->count() && !$this->role->anonymous) { // find response by user_id if ($user->isAuthenticated()) { $response = ResponseTable::getInstance()->findByRoleIdAndUserId($this->role->id, $user->getGuardUser()->id)->getFirst(); } else { $email = $user->getAttribute('email_address', null, 'measurement/email/' . $this->role->id); $response = ResponseTable::getInstance()->findByRoleIdAndEmailAddress($this->role->id, $email)->getFirst(); } if (!$response instanceof Response) { $response = new Response(); $response->role_id = $this->role->id; } } else { $response = new Response(); $response->role_id = $this->role->id; } } else { $response = new Response(); $response->role_id = $this->role->id; } $response->decision_id = $this->role->decision_id; $response->ip_address = $context->getRequest()->getHttpHeader('addr', 'remote'); if ($user->isAuthenticated()) { $response->user_id = $user->getGuardUser()->id; } else { if ($this->role->anonymous) { $response->email_address = 'anonymous'; } else { $response->email_address = $user->getAttribute('email_address', null, 'measurement/email/' . $this->role->id); } if (!$this->role->continue_url) { $user->getAttributeHolder()->remove('email_address', 0, 'measurement/email/' . $this->role->id); } } $response->save(); // Saves data from the last step $this->methodObject->setResponseId($response->id); $this->methodObject->save(); $this->methodObject->clean(); // Saves data from the previous steps while ($this->map->hasPreviousStep()) { $this->map->back(); list($methodClassName, $data) = $this->map->getCurrentStep(); /** @var MeasurementMethod $methodObjectName */ $methodObjectName = new $methodClassName($data); $methodObjectName->setRole($this->role); $methodObjectName->setResponseId($response->id); $methodObjectName->save(); $methodObjectName->clean(); } // Update charts in "Analyze" tab Doctrine_Query::create()->delete()->from('Graph')->where('decision_id = ?', $response->decision_id)->execute(); $this->map->clean(); }