/** * Upload a shapefile and load data to a WaterRequest * @param string $id string representing the ID of a WaterRequest * @throws CHttpException */ public function actionUpload($id) { $model = $this->loadModel($id); //if(!$model) // throw new CHttpException(400,'Invalid request. Wrong parameters. Model not found.'); if (!Yii::app()->user->checkAccess('updateWaterRequest', array('waterRequest' => $model))) { throw new CHttpException(403, Yii::t('http_status', '403')); } $this->layout = '//layouts/column1'; $model->scenario = 'upload'; //Yii::log('Model loaded: '.print_r($model, true) , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG if (isset($_POST['WaterRequests'])) { //Yii::log('Sto caricando un file' , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG $model->shpfile = CUploadedFile::getInstance($model, 'shpfile'); $model->shxfile = CUploadedFile::getInstance($model, 'shxfile'); $model->dbffile = CUploadedFile::getInstance($model, 'dbffile'); $model->fileproj = $_POST['WaterRequests']['fileproj']; //Yii::log('shpfile='.print_r($model->shpfile, true) , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG $shp_folder = Yii::app()->params['shp_upload_folder']; if ($model->validate()) { $all_saved = $model->shpfile->saveAs(Yii::app()->basePath . $shp_folder . $model->shpfile->getname()) && $model->shxfile != null ? $model->shxfile->saveAs(Yii::app()->basePath . $shp_folder . $model->shxfile->getname()) : true && $model->dbffile != null ? $model->dbffile->saveAs(Yii::app()->basePath . $shp_folder . $model->dbffile->getname()) : true; if ($all_saved) { //Yii::log('CARICATO!' , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG $shpfile = Yii::app()->basePath . $shp_folder . $model->shpfile->getname(); if (isset($shpfile)) { //echo 'DATI ESTRATTI:<pre>'; //echo "\n Il sistema di riferimento selezionato è: ".$model->fileproj. "\n"; $options = array('noparts' => false); $shp = new ShapeFile($shpfile, $options); // along this file the class will use file.shx and file.dbf $i = 0; while ($record = $shp->getNext()) { $shp_data = $record->getShpData(); if (count($shp_data)) { // read shape data // store number of parts $oneshot = 0; $wkt = 'MULTIPOLYGON('; foreach ($shp_data['parts'] as $part) { $wkt = $wkt . ($oneshot++ == 0 ? '((' : ',(('); $coords = array(); foreach ($part['points'] as $point) { $coords[] = round($point['x'], 2) . ',' . round($point['y'], 2); } $search = array(',', ';'); $replace = array(' ', ','); $subject = implode(';', $coords); $wkt = $wkt . str_replace($search, $replace, $subject); $wkt = $wkt . '))'; } $wkt = $wkt . ')'; $saveres = WaterRequestGeometries::save_geom($wkt, $id, $model->fileproj); if ($saveres['result']) { Yii::log('Salvataggio avvenuto con successo. ID inserito: ' . $saveres['newid'], CLogger::LEVEL_INFO, 'actionUpload'); } else { Yii::log('Salvataggio non riuscito. WR_ID: ' . $id . ' iterazione: ' . $i, CLogger::LEVEL_INFO, 'actionUpload'); } } //echo "\n"; $i++; } //echo '</pre>'; } $this->redirect(array('view', 'id' => $model->id)); /* $this->render('upload',array( 'wr_id'=>$id, 'model'=>$model, 'shpfile'=>Yii::app()->basePath . $shp_folder . $model->shpfile->getname(), )); */ Yii::app()->end(); } // else Yii::log('FAIL!!' , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG } // else Yii::log('NON VALIDO!!' , CLogger::LEVEL_INFO, 'actionUpload'); // DEBUG } $this->render('upload', array('wr_id' => $id, 'model' => $model)); }
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(); }
public static function save_geom($wkt, $wr_id, $proj = 3003) { $model = new WaterRequestGeometries(); $model->wr_id = $wr_id; $model->name = 'uploaded'; $model->geom = new CDbExpression(Geometry::Transform(Geometry::ST_GeomFromText($wkt, $proj), Yii::app()->params['geoserver']['water_request_geometries_srid'])); return array('result' => $model->save(), 'newid' => $model->id); }
/** * Create a new Geometry with a Zone or add a Zone to an existing Geometry * @param string $id string representing the integer id of the Geometry */ public function actionCreate($id = null) { if (!empty($id)) { //already exist a geometry $geom_model = WaterRequestGeometries::model()->findByPk($id); if (!$geom_model) { echo CJSON::encode(array('status' => 'error_iniziale')); return; } } if (isset($_POST['WaterRequestGeometries']) && isset($_POST['WaterRequestGeometryZones'])) { if (!isset($geom_model)) { //create new geometry model $geom_model = new WaterRequestGeometries(); //and store post data into model $geom_model->attributes = $_POST['WaterRequestGeometries']; //$geom_model->geom=new CDbExpression(Geometry::Transform(Geometry::ST_GeomFromText($_POST['WaterRequestGeometries']['geom']))); $geom_model->geom = new CDbExpression(Geometry::ST_GeomFromText($_POST['WaterRequestGeometries']['geom'], 900913)); } /* if (((isset($geom_model->wr)) && ($geom_model->wr->phase==2)) && ((isset($geom_model->zones)) && (count($geom_model->zones)>1))) { echo CJSON::encode(array('status'=>'cannot add another zone to this geometry')); return; } */ //create new geometry zone model $geom_zone_model = new WaterRequestGeometryZones(); $geom_zone_model->attributes = $_POST['WaterRequestGeometryZones']; //create new geometry zone property model //$geom_zone_property_model=new WaterRequestGeometryZoneProperties; //$geom_zone_property_model->attributes=$_POST['WaterRequestGeometryZoneProperties']; if (isset($_POST['WaterRequestGeometryZoneProperties'])) { if (isset($_POST['WaterRequestGeometryZoneProperties']['ae_choice'])) { $ae = $_POST['WaterRequestGeometryZoneProperties']['ae_choice']; } else { $ae = false; } foreach ($_POST['WaterRequestGeometryZoneProperties'] as $param => $value) { if ($param != 'ae_choice' && !empty($value)) { $new_prop = new WaterRequestGeometryZoneProperties(); $new_prop->parameter = $param; $new_prop->value = $value; // the prop is selected if ($ae == $param) { $new_prop->use4ae = true; } // append to array $sent_props[] = $new_prop; } } if (!isset($sent_props)) { echo CJSON::encode(array('status' => 'error no props sent')); return; } // TODO: Controllare che la zona necessiti di almeno uno selezionato // 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; } } /* // '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; } */ } else { $sent_props = array(); } //starting new transaction $transaction = Yii::app()->db->beginTransaction(); try { $_error = true; if ($geom_model->validate()) { //saving geom_model $geom_model->save(); //connect geom_zone_model to geom_model through id $geom_zone_model->wr_geometry_id = $geom_model->id; /* var_dump($geom_zone_model->wr_geometry_id); $geom_zone_model->geometry=$geom_model; var_dump($geom_model->id); var_dump($geom_zone_model->wr_geometry_id);*/ //calculate pe and water demand //$geom_zone_model->updatePEAndWD($sent_props[$choosedProp]->parameter, $sent_props[$choosedProp]->value); /* $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()) { //saving geom_zone_model Yii::log('SAVING GEOM ZONE MODEL', CLogger::LEVEL_INFO, 'actionCreate'); // DEBUG $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; //$geom_zone_property_model->zone = $geom_zone_model; if ($geom_zone_property_model->validate()) { Yii::log('SAVING PROPERTY MODEL ', CLogger::LEVEL_INFO, 'actionCreate'); // DEBUG $geom_zone_property_model->save(); //echo $geom_zone_property_model->parameter; // DEBUG } else { //Yii::log('PROPERTY MODEL NON VALIDA' , CLogger::LEVEL_INFO, 'actionCreate'); // DEBUG //Yii::log(print_r($geom_zone_property_model->attributes, true) , CLogger::LEVEL_INFO, 'actionCreate'); // DEBUG //Yii::log(print_r($geom_zone_property_model->getErrors(), true) , CLogger::LEVEL_INFO, 'actionCreate'); // 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 { $error_status = 'Error: '; foreach ($geom_zone_model->getErrors() as $attr => $err_msg) { $error_status = $error_status . $attr . ': ' . implode(',', $err_msg) . ' '; } echo CJSON::encode(array('status' => $error_status)); // DEBUG $_error = true; } } else { echo CJSON::encode(array('status' => ' geom_model non valida ')); } // DEBUG if ($_error) { $transaction->rollBack(); Yii::log('ROLLBACK!', CLogger::LEVEL_INFO); //echo CJSON::encode(array('status'=>'Rollback error == TRUE ('.$_error.')')); } else { $transaction->commit(); /* $wr = $geom_model->wr; Yii::app()->controller->redirect(array('/waterRequests/update', 'id'=>$wr->id)); */ echo CJSON::encode(array('status' => 'ok')); Yii::app()->end(); } } catch (Exception $e) { $transaction->rollBack(); echo CJSON::encode(array('status' => 'not inserted ' . $e)); } } else { Yii::log('Something went wrong Geom=' . isset($_POST['WaterRequestGeometries']) . ' Zone=' . isset($_POST['WaterRequestGeometryZones']) . ' Property=' . isset($_POST['WaterRequestGeometryZoneProperties']), CLogger::LEVEL_INFO); } Yii::app()->end(); }
/** * 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 = WaterRequestGeometries::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }