/**
  * Updates a particular model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id the ID of the model to be updated
  */
 public function actionUpdate($id)
 {
     $geom_zone_model = $this->loadModel($id);
     // TODO: controllare se è un modello orfano
     $wr_model = WaterRequests::model()->findByPk($geom_zone_model->geometry->wr_id);
     if (!Yii::app()->user->checkAccess('updateWaterRequest', array('waterRequest' => $wr_model))) {
         throw new CHttpException(403, Yii::t('http_status', '403'));
     }
     // TODO: Gestire con ajax.error?
     //		Yii::log("Updating $geom_zone_model->id ", CLogger::LEVEL_INFO, "Update WRG_Zones" );
     // Uncomment the following line if AJAX validation is needed
     // $this->performAjaxValidation($model);
     if (isset($_POST['WaterRequestGeometryZones']) && isset($_POST['WaterRequestGeometryZoneProperties'])) {
         //Yii::log("Into IF", CLogger::LEVEL_INFO, "Update WRG_Zones" );
         // Actually assign only 'zone'
         $geom_zone_model->attributes = $_POST['WaterRequestGeometryZones'];
         if (isset($_POST['WaterRequestGeometryZoneProperties']['ae_choice'])) {
             $ae = $_POST['WaterRequestGeometryZoneProperties']['ae_choice'];
         } else {
             $ae = false;
         }
         $found_props_ids = array();
         foreach ($_POST['WaterRequestGeometryZoneProperties'] as $param => $value) {
             //Yii::log("Param $param -> Value $value", CLogger::LEVEL_INFO, "Update WRG_Zones" );
             if ($param != 'ae_choice' && !empty($value)) {
                 $load_prop = WaterRequestGeometryZoneProperties::model()->find('parameter=:param AND geometry_zone=:geom_zone', array(':param' => $param, ':geom_zone' => $geom_zone_model->id));
                 if ($load_prop == null) {
                     $load_prop = new WaterRequestGeometryZoneProperties();
                 } else {
                     $found_props_ids[] = $load_prop->id;
                 }
                 //Yii::log("Caricato ".print_r($load_prop->attributes,true), CLogger::LEVEL_INFO, "Update WRG_Zones" );
                 $load_prop->parameter = $param;
                 $load_prop->value = $value;
                 // the prop is selected
                 if ($ae == $param) {
                     $load_prop->use4ae = true;
                 } else {
                     $load_prop->use4ae = false;
                 }
                 // append to array
                 $sent_props[] = $load_prop;
             }
         }
         if (!isset($sent_props)) {
             echo CJSON::encode(array('status' => 'error no props sent'));
             return;
         }
         // check if one is selected, otherwise select the first one.
         $choosedProp = -1;
         for ($i = 0; $i < count($sent_props) && $choosedProp < 0; $i++) {
             if ($sent_props[$i]->use4ae) {
                 $choosedProp = $i;
             }
         }
         // non ho settato nulla, cerco 'cp'
         if ($choosedProp < 0) {
             foreach ($sent_props as $geom_zone_property_model) {
                 if ($geom_zone_property_model->parameter == 'cp') {
                     $geom_zone_property_model->use4ae = true;
                 }
                 $choosedProp = 0;
                 // NOW IT'S ONLY A FLAG (0 = found, -1 = not found)
             }
         }
         // 'cp' not found, set the first prop.
         if ($choosedProp < 0) {
             $sent_props[0]->use4ae = true;
             $choosedProp = 0;
         }
         /*
         
         // Check if use4ae is needed to be set to a specific prop
         if($geom_zone_model->zone_name)
         foreach($sent_props as $geom_zone_property_model){
         	$geom_zone_property_model->geometry_zone=$geom_zone_model->id;
         	if ($geom_zone_property_model->()) {
         		//Yii::log("Zone_name $geom_zone_model->zone_name", CLogger::LEVEL_INFO, "LOOP");
         		//$geom_zone_property_model->save();	
         		//echo $geom_zone_property_model->parameter;  // DEBUG
         	}else
         		$_propserror = true;
         }
         */
         // Select all old properties to delete
         $all_props = WaterRequestGeometryZoneProperties::model()->findAll('geometry_zone=:geom_zone', array(':geom_zone' => $geom_zone_model->id));
         foreach ($all_props as $found) {
             if (!in_array($found->id, $found_props_ids)) {
                 $to_purge[] = $found->id;
             }
         }
         //Yii::log("Inseriti da utente ".print_r($found_props_ids,true), CLogger::LEVEL_INFO, "Update WRG_Zones" );
         //if(isset($to_purge))
         //Yii::log("Da eliminare ".print_r($to_purge,true), CLogger::LEVEL_INFO, "Update WRG_Zones" );
         //starting new transaction
         $transaction = Yii::app()->db->beginTransaction();
         try {
             $_error = true;
             // purge old properties
             if (isset($to_purge)) {
                 foreach ($to_purge as $del_id) {
                     WaterRequestGeometryZoneProperties::model()->findByPk($del_id)->delete();
                 }
             }
             //calculate pe and water demand
             //$geom_zone_model->pe = $geom_zone_model->calculatePE($sent_props[$choosedProp]->parameter, $sent_props[$choosedProp]->value);
             //$geom_zone_model->water_demand = $geom_zone_model->calculateWaterDemand();
             //$geom_zone_model->updateWD();
             if ($geom_zone_model->validate()) {
                 $geom_zone_model->save();
                 $_propserror = false;
                 $error_status = 'ok';
                 foreach ($sent_props as $geom_zone_property_model) {
                     $geom_zone_property_model->geometry_zone = $geom_zone_model->id;
                     if ($geom_zone_property_model->validate()) {
                         //Yii::log("Zone_name $geom_zone_model->zone_name", CLogger::LEVEL_INFO, "LOOP");
                         $geom_zone_property_model->save();
                         //echo $geom_zone_property_model->parameter;  // DEBUG
                     } else {
                         //Yii::log('PROPERTY MODEL NON VALIDA' , CLogger::LEVEL_INFO, 'actionUpdate');  // DEBUG
                         //Yii::log($geom_zone_property_model->attributes , CLogger::LEVEL_INFO, 'actionUpdate');  // DEBUG
                         //Yii::log($geom_zone_property_model->getErrors(), CLogger::LEVEL_INFO, 'actionUpdate');  // DEBUG
                         $error_status = 'Error: ';
                         foreach ($geom_zone_property_model->getErrors() as $attr => $err_msg) {
                             $error_status = $error_status . $attr . ': ' . implode(',', $err_msg) . ' ';
                         }
                         $_propserror = true;
                     }
                 }
                 if ($_propserror) {
                     echo CJSON::encode(array('status' => $error_status));
                 }
                 $_error = $_propserror;
                 //echo 'after foreach: '.$_propserror.' ';  // DEBUG
             } else {
                 echo CJSON::encode(array('status' => ' error geom_zone_model non valida '));
             }
             // DEBUG
             if ($_error) {
                 $transaction->rollBack();
                 //echo CJSON::encode(array('status'=>'error una delle prop non valida'));
             } else {
                 $transaction->commit();
                 echo CJSON::encode(array('status' => 'ok'));
                 Yii::app()->end();
             }
         } catch (Exception $e) {
             $transaction->rollBack();
             echo CJSON::encode(array('status' => 'not inserted ' . $e));
         }
     }
     //if isset...
     Yii::log('Something went wrong Zone=' . isset($_POST['WaterRequestGeometryZones']) . ' Property=' . isset($_POST['WaterRequestGeometryZoneProperties']), CLogger::LEVEL_INFO);
     Yii::app()->end();
 }
예제 #2
0
파일: WaterRequests.php 프로젝트: Gnafu/wiz
 protected function beforeDelete()
 {
     $geom = WaterRequestGeometries::model()->findAll('wr_id = :wr_id', array(':wr_id' => $this->id));
     if ($geom) {
         foreach ($geom as $g) {
             $geom_zone = WaterRequestGeometryZones::model()->findAll('wr_geometry_id = :wr_geometry_id', array(':wr_geometry_id' => $g->id));
             if ($geom_zone) {
                 foreach ($geom_zone as $z) {
                     WaterRequestGeometryZoneProperties::model()->deleteAll('geometry_zone = :geometry_zone', array(':geometry_zone' => $z->id));
                 }
                 WaterRequestGeometryZones::model()->deleteAll('wr_geometry_id = :wr_geometry_id', array(':wr_geometry_id' => $g->id));
             }
         }
         WaterRequestGeometries::model()->deleteAll('wr_id = :wr_id', array(':wr_id' => $this->id));
     }
     return parent::beforeDelete();
 }
 /**
  * Returns the data model based on the primary key given in the GET variable.
  * If the data model is not found, an HTTP exception will be raised.
  * @param integer the ID of the model to be loaded
  */
 public function loadModel($id)
 {
     $model = WaterRequestGeometryZoneProperties::model()->findByPk($id);
     if ($model === null) {
         throw new CHttpException(404, 'The requested page does not exist.');
     }
     return $model;
 }