/** * 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(); }
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; }