Example #1
0
 /**
  * @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;
 }
Example #3
0
 public function getResponseListResponse(sfGuardUser $user)
 {
     /** @var sfWebRequest $request */
     $request = $this->getRequest();
     return array('status' => 'success', 'result' => ResponseTable::getInstance()->getListForAPI($user, $request->getParameter('decision_id')));
 }
Example #4
0
 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();
 }