$params){ if($instance_info = field_info_instance('node', $f, $params['drupal']['type'])){ $instance_info['display']['default']['weigth'] = 1; //$instance_info['display']['default']['label'] = 'inline'; field_update_instance($instance_info); } } */ /* foreach($GLOBALS['referentiels'] as $ref=>$params){ xref_set_content_type_fields($ref); } */ /* $instance_info = field_info_instance('node', 'field_code_sandre', 'zonehydro'); dsm($instance_info); $instance_info = field_info_instance('node', 'field_type_sandre', 'zonehydro'); dsm($instance_info); */ /* //Reset weigth of commons fields et and set inline label $cf = array( 1=>'field_code_sandre', 2=>'field_type_sandre', 3=>'field_statut_sandre', 4=>'field_urn_sandre', 5=>'field_wfs_link', 6=>'field_geo_superficie', 7=>'field_geo_longueur' ); foreach($GLOBALS['referentiels'] as $ref=>$params){ foreach($cf as $w=>$f){ if($instance_info = field_info_instance('node', $f, $params['drupal']['type'])){ $instance_info['display']['default']['weigth'] = $w; $instance_info['display']['default']['label'] = 'inline'; field_update_instance($instance_info); } } } */ //Update settings of OL field_geo (get settings of "zonehydro" content type) /* $instance_info = field_info_instance('node', 'field_geo', 'zonehydro'); $ol_settings = $instance_info['display']['default']; foreach($GLOBALS['referentiels'] as $ref=>$params){ if($params['drupal']['type']!='zonehydro'){ if($instance_info = field_info_instance('node', 'field_geo', $params['drupal']['type'])){ $instance_info['display']['default'] = $ol_settings; field_update_instance($instance_info); } } } */ //dsm($instance_info); /* // Fetch an instance info array. $instance_info = field_info_instance($entity_type, $field_name, $bundle_name); // Change a single property in the instance definition. $instance_info['required'] = TRUE; // Write the changed definition back. field_update_instance($instance_info); */ //$types = node_type_get_types(); //dsm($GLOBALS['referentiels']); //dsm($types); //$out = file_get_contents('http://sandre.eaufrance.fr/solr/sandre/select?start=0&rows=10&fq=(hash%3Amocdrk)&spellcheck=true&q=adour&fl=id%2Centity_id%2Centity_type%2Cbundle%2Cbundle_name%2Clabel%2Css_language%2Cis_comment_count%2Cds_created%2Cds_changed%2Cscore%2Cpath%2Curl%2Cis_uid%2Ctos_name%2Chash%2Csite&mm=1&pf=content^2.0&ps=15&hl=true&hl.fl=content&hl.snippets=3&hl.mergeContigious=true&f.content.hl.alternateField=teaser&f.content.hl.maxAlternateFieldLength=256&spellcheck.q=adour&qf=content^40&qf=label^5.0&qf=tags_h1^5.0&qf=tags_h2_h3^3.0&qf=tags_h4_h5_h6^2.0&qf=tags_inline^1.0&qf=taxonomy_names^2.0&qf=tos_content_extra^0.1&qf=tos_name^3.0&qf=ts_comments^20&debugQuery=on&wt=json&json.nl=map'); //dsm($out); return 'debug'; } //Fonction de callback Permet d'exporter un noeud en JSON function xref_node_export_json($node){ return xref_node_export_get_data($node); } //Permet d'exporter un noeud selon le format demandé function xref_node_export_json_by_cd_sandre($ref, $code){ $data = array(); if(isset($GLOBALS['referentiels'][$ref])){ $id = xgeo_getEntityIdByCode($code, 'sandre', $GLOBALS['referentiels'][$ref]['drupal']['type']); if($node = node_load($id)){ $data = xref_node_export_get_data($node); } else{ $data = array('Error'=>array( 'code'=>2, 'description'=>"code d'entité : ".$code.", non disponible pour le référentiel : ".$ref ) ); } }else{ $data = array('Error'=> array( 'code'=>1, 'description'=>"type non reconnu : ".$ref ) ); } return $data; } //Generation du tableau de données pour l'export d'un noeud function xref_node_export_get_data($node){ $referentiels = xref_map_global_referentiels_bundle(); $data = array(); if(isset($referentiels[$node->type])){ $wrapper = entity_metadata_wrapper('node', $node); $data = xref_node_export_common_fields($wrapper); $data['bundle'] = $referentiels[$node->type]['ref']; //Gestion des entités liées $refs = xref_wps_getDefaultRef($referentiels[$node->type]['ref'], 'xref'); if(!empty($refs)){ $data['XREF'] = array(); foreach($refs as $ref){ $field = $GLOBALS['referentiels'][$ref]['drupal']['ref_field']; if(isset($wrapper->{$field})){ if($values = $wrapper->{$field}->value()){ foreach($values as $nr){ $wrapper_nr = entity_metadata_wrapper('node', $nr); $data['XREF'][$ref][] = xref_node_export_common_fields($wrapper_nr); } } } } } if(isset($wrapper->field_rpg)){ $data['RPG'] = array(); $data['RPG']['orientations'] = $wrapper->field_orientations_agri->value(); if($values = $wrapper->field_rpg->value()){ foreach($values as $item){ $data['RPG']['data'][] = xref_node_export_field_collection_item($item); } } } if(isset($wrapper->field_clc)){ $data['CLC'] = array(); $data['CLC']['occupation'] = $wrapper->field_type_os->value(); if($values = $wrapper->field_clc->value()){ foreach($values as $item){ $data['CLC']['data'][] = xref_node_export_field_collection_item($item); } } } //Gestion du RPG //Gestion de CLC } return $data; } function xref_node_export_field_collection_item($item){ $data = array(); foreach($item as $field=>$value){ if(!in_array($field, array('field_rpg_data', 'field_clc_data'))){ if(is_array($value) && !empty($value)){ $key = str_replace('field_', '', $field); if(isset($value['und'][0]['value'])){ $data[$key]=$value['und'][0]['value']; } elseif(isset($value['und'][0]['uri'])){ $data[$key]=array( 'title'=>$value['und'][0]['title'], 'path'=>url(file_create_url($value['und'][0]['uri']), array('absolute'=>true)) ); } } } } return $data; } function xref_node_export_common_fields($wrapper){ $data = array(); $data['libelle'] = $wrapper->title->value(); $data['type'] = $wrapper->type->value(); foreach($GLOBALS['common_fields'] as $common_field){ if(isset($wrapper->{$common_field})){ if($values = $wrapper->{$common_field}->value()){ $key = str_replace('field_', '', $common_field); $data[$key] = $values; } } } return $data; } /* Permet de créer un field_group $label : libellé du groupe qui sera aafiché à l'utilisateur, $group_name: nom système du group $bundle : $entity_type='node' $mode='default' (display mode peut aussi prendre la valeur "form" pour le node form) $weight = 0 $children : liste des groups/fields enfant de ce groupe $parent_name : nom systeme du group parent; ne rien mettre si le group est à la racine $format_type=htab : pour un onglet |htabs : pour un group d'onglet */ function xref_get_field_group($label, $group_name, $bundle,$entity_type='node', $mode='default', $weight = 0, $children=array(), $parent_name='',$format_type='htab'){ $group = (object) array( 'identifier' => $group_name.'|'.$entity_type.'|'.$bundle.'|'.$mode, 'group_name' => $group_name, 'entity_type' => $entity_type, 'bundle' => $bundle, //'zone_hydro', 'mode' => $mode, //'default', 'parent_name' => $parent_name, 'table' => 'field_group', 'type' => 'Normal', 'disabled' => FALSE, 'label' => $label, 'weight' => $weight, 'children' => $children, 'format_type' => $format_type, 'format_settings' => array( 'formatter' => '', 'instance_settings' => array( 'classes' => drupal_clean_css_identifier($group_name).' field-group-'.$format_type, 'id' => '', ), ), ); return $group; } function xref_config_form(){ dsm($GLOBALS['referentiels']); $form = array(); $form['debug'] = array( '#markup'=>'
'.l('===== Debug ======', 'xref-debug').'
', ); $nb_node_type = db_query(" SELECT type, count(*) as count FROM {node} WHERE status = 1 GROUP BY type ")->fetchAll(); $nb_node_type_data = array(); foreach($nb_node_type as $type){ $nb_node_type_data[$type->type] = $type->count; } unset($nb_node_type); if(!empty($GLOBALS['referentiels'])){ $header = array('Type', 'Stat', 'Action'); $rows = array(); foreach($GLOBALS['referentiels'] as $ref=>$params){ $actions = array(); $actions['import'] = l('Import','admin/config/xref/import/'.$ref); if(isset($params['services']['codes_postaux'])){ $actions['import-cp'] = l('Codes postaux','admin/config/xref/import-cp/'.$ref); } if(isset($params['services']['xref'])){ $actions['wps-xref'] = l('WPS XREF','admin/config/xref/run-wps/'.$ref.'/xref'); } if(isset($params['services']['clc'])){ $actions['wps-clc'] = l('WPS CLC','admin/config/xref/run-wps/'.$ref.'/clc'); } if(isset($params['services']['rpg'])){ $actions['wps-rpg'] = l('WPS RPG','admin/config/xref/run-wps/'.$ref.'/rpg'); } //TODO amont/aval... $rows[] = array( 'type'=>'
'.$params['drupal']['label'] .'
type : '.$params['drupal']['type'].'
', 'stat'=>'
Nombre de noeud : '.(isset($nb_node_type_data[$params['drupal']['type']])? $nb_node_type_data[$params['drupal']['type']]: '-') .'
', 'action'=>theme('item_list', array('items'=>$actions)), ); } $form['referentiels'] = array( '#markup'=>'
'.theme('table', array('header'=>$header, 'rows'=>$rows, 'sticky'=>true)).'
', ); } $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration') ); $form['#theme'] = 'system_settings_form'; return $form; } function xref_config_form_validate($form, &$form_state){ } function xref_config_form_submit($form, &$form_state){ } function xref_fiche_valo(){ if (isset($_REQUEST['id']) && $_REQUEST['id'] != '') { $params = array( "q" => "id:" . $_REQUEST['id'], "fl" => array( "id", "label", "ss_libelle_sandre", "ss_item_code", "ss_statut_sandre", //"zs_geo_wkb", //"zs_item_data", "path", "ss_wfs_idcol", "ss_wfs_typename", "ss_wfs_service_url", "is_parent_jdd_id", 'ss_urn_sandre', 'ss_lbref_sandre', 'ss_cdref_sandre', ), ); $params += apachesolr_search_basic_params(); $query = apachesolr_drupal_query( "apachesolr_locate", $params, '', 'fiche-geo' ); // This hook allows modules to modify the query and params objects. drupal_alter('apachesolr_query', $query); if (!$query) { return array(); } $solr_id = $query->solr('getId'); list($final_query, $response) = apachesolr_do_query($query); apachesolr_has_searched($solr_id, true); //Generation de la page $obj = $response->response->docs[0]; if($obj){ /* dsm($obj); dsm($obj->ss_wfs_typename); dsm($obj->ss_item_code); */ /* $wfs_params = array(); $ids=array( array( 'key'=>$obj->ss_wfs_idcol, 'value'=>$obj->ss_item_code ) ); $wfs = wfs_getFeatureByIds($obj->ss_wfs_service_url, array('TYPENAME'=>$obj->ss_wfs_typename), $ids); dsm($wfs); */ //$wfs = wfs_getFeature(, $wfs_params); //'ZoneVuln', 'SsBassinDCEAdmin', $refB = array('Commune', 'Departement', 'Region', 'Region_2015', 'CircAdminBassin', 'ZoneHydro', 'ZoneSensible', 'EntVigiCru', 'Sage', 'ContratMilieu', 'BassinDCE', 'ZoneProdConchy', 'ZRE', 'AAC', 'PGC'); //$refB = array('Commune', 'Departement', 'Region', 'Region_2015'); $wps_out = wps_oieau_intersectRef_getRef($obj->ss_item_code, trim($obj->ss_wfs_typename), $refB); //dsm($wps_out); $out = '

'.$obj->label.'

'; $out.= '
Référentiel :'.$obj->ss_lbref_sandre.'
'; $out.= xref_render_wps_result($wps_out); return $out; } else{ drupal_not_found(); } } else { drupal_not_found(); } } function xref_render_wps_result($r){ $output = ''; $list = array(); if(!empty($r)){ foreach($r as $ref=>$items){ if(!empty($items)){ $element =array(); $element[0] = '

'.$ref.'

'; $element['children'] = array(); foreach($items as $item){ $element['children'][0] = $item->libelle.' ['.$item->code.']'; } $list[] = $element; } } if(!empty($list)){ $output.= theme('item_list', array('items'=>$list)); } } return $output; } //Formulaire de recherche d'une entité Sandre function xref_get_entite_sandre_form($form, &$form_state){ $form['#id'] = 'xref_get_entite_sandre'; $form['search-sandre-entity'] = array( '#type' => 'fieldset', '#title' => t('Rechercher une entité Sandre'), '#collapsible' => TRUE, // Added '#collapsed' => FALSE, // Added ); $form['search-sandre-entity']['key'] = array( '#type' => 'textfield', '#title' => t("Nom de l'entité"), '#required' => TRUE, // Added ); $form['search-sandre-entity']['key']['#attributes']['placeholder'] = t( "Nom ou code de l'entité" ); apachesolr_autocomplete_do_alter($form['search-sandre-entity']['key'], $form, 'xref_get_entite_sandre'); $form['search-sandre-entity']['submit'] = array( '#type' => 'submit', '#value' => 'Submit', ); return $form; } function xref_get_entite_sandre_form_validate($form, &$form_state){ //Do nothing } function xref_get_entite_sandre_form_submit($form, &$form_state){ //dsm($form_state); $path = 'search/site/'; $options = array(); $f=array(); //Génération du chemin if(isset($form_state['input']['key'])){ $path.=$form_state['input']['key']; } //On vire quelques variables qui ne nous serve à rien unset( $form_state['input']['key'], $form_state['input']['op'], $form_state['input']['form_build_id'], $form_state['input']['form_token'], $form_state['input']['form_id'] ); if(!empty($form_state['input'])){ foreach($form_state['input'] as $k=>$v){ if($v!='All') $f[] = $k.':'.$v; } } if(!empty($f)){ $options = array('query' => array('f' => $f)); } drupal_goto($path,$options); } //Permet de lancer un batch d'import d'un référentiel function xref_import_ref($ref){ if(isset($GLOBALS['referentiels'][$ref])){ if(isset($GLOBALS['referentiels'][$ref]['db'])){ $operations[] = array('xref_import_ref_batch', array('ref'=>$ref)); //Start X operation $batch = array( 'operations' => $operations, 'finished' => 'xref_import_ref_batch_finish', 'title' => t('Processing Batch'), 'init_message' => t('Batch is starting.'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('XREF Import Batch has encountered an error.'), 'file' => drupal_get_path('module', 'xref') . '/inc/xref.inc', ); batch_set($batch); //Starting the Batch batch_process('admin/config/xref'); } else{ drupal_set_message("Le référentiel $ref n'est pas configuré pour l'import", 'error'); } } else{ drupal_set_message("Le référentiel $ref n'est pas configuré", 'error'); } } //Batch d'import d'un referentiel function xref_import_ref_batch($ref, &$context) { //Info de connexion à la base Sandre $db_info = $GLOBALS['referentiels'][$ref]['db']; //Initialisation du batch if (!isset($context['sandbox']['progress'])) { //Get list of id db_set_active('sandre'); $result = db_query("SELECT ".$db_info['Code']." as code, ".$db_info['Libelle']." as libelle FROM ".$db_info['Schema'].".".$db_info['Table']." WHERE ".$db_info['Geom']." IS NOT NULL ORDER BY ".$db_info['Code']." ASC"); db_set_active('default'); $data = $result->fetchAll(); $context['sandbox']['max'] = count($data); $context['results']['data']['list'] = $data; unset($data); $context['sandbox']['progress']=0; } //Process $i=0; $j= $context['sandbox']['progress']; $message = ''; while($i<25 && $context['sandbox']['progress']<$context['sandbox']['max']){ $info = $context['results']['data']['list'][$i+$j]; //On tente de recuperer l'objet si'il existe déjà if($node = xgeo_get_node($GLOBALS['referentiels'][$ref]['drupal']['type'], $info->code, $info->libelle)){ //do nothing } else{ $node = new stdclass(); //======================= TODO } $obj = xref_import_ref_get_element($ref, $info->code); if(isset($obj->wkt)){ $node->field_geo['und'][0]=array( 'geom'=>$obj->wkt, 'geo_type'=>$GLOBALS['referentiels'][$ref]['geometrie'] ); if(isset($obj->area)){ $node->field_geo_superficie['und'][0]['value'] = $obj->area/10000; //divise par 10 000 pour revenir en hectares } if(isset($obj->length)){ $node->field_geo_longueur['und'][0]['value'] = $obj->length/1000; //divise par 1 000 pour revenir en km } } $node->field_type_sandre['und'][0]['value'] = $ref; //$node->field_urn_sandre['und'][0]['value'] = ''; //$node->field_wfs_link node_save($node); $message .= '
  • '.l($node->title.' [nid : '.$node->nid.']', 'node/'.$node->nid).'
  • '; $context['sandbox']['progress']++; $i++; } $context['message'] = '

    Import "'.$ref.'" '.$context['sandbox']['progress'].' / '.$context['sandbox']['max'].'

    '; //Condition d'arret if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } function xref_import_ref_get_element($ref, $code){ $db_info = $GLOBALS['referentiels'][$ref]['db']; switch($GLOBALS['referentiels'][$ref]['geometrie']){ case 'polygon': $sql = "SELECT ".$db_info['Code']." as code, st_area(".$db_info['Geom']."::geography) as area, st_astext(st_transform(ST_Simplify(".$db_info['Geom'].", 0.00001), 4326)) as wkt FROM ".$db_info['Schema'].".".$db_info['Table']." WHERE ".$db_info['Code']." = :code "; break; case 'multiline': $sql = "SELECT ".$db_info['Code']." as code, ST_Length(".$db_info['Geom']."::geography) as length, st_astext(st_transform(".$db_info['Geom'].", 4326)) as wkt FROM ".$db_info['Schema'].".".$db_info['Table']." WHERE ".$db_info['Code']." = :code "; break; case 'point': $sql = "SELECT ".$db_info['Code']." as code, st_astext(st_transform(".$db_info['Geom'].", 4326)) as wkt FROM ".$db_info['Schema'].".".$db_info['Table']." WHERE ".$db_info['Code']." = :code "; break; default: exit('ERROR : no geometry type'); } db_set_active('sandre'); $query = db_query( $sql, array(':code'=>$info->code) ); db_set_active('default'); $obj = $query->fetchObject(); } //Fonction de fin de process function xref_import_ref_batch_finish($success, $results, $operations){ if ($success) { // Here we do something meaningful with the results. //$message = t('@count items successfully processed:', array('@count' => count($results['log']))); //$message .= theme('item_list', array('items' => $results['log'])); //drupal_set_message($message); drupal_set_message("xref_import_ref_batch_finish"); } else { // An error occurred. // $operations contains the operations that remained unprocessed. $error_operation = reset($operations); $message = t('An error occurred while processing %error_operation with arguments: @arguments', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE))); drupal_set_message($message, 'error'); } } //Permet de lancer un batch de calcul WPS pour tout un référentiel function xref_run_wps_ref_form($form, &$form_state, $ref, $service){ //Id du noeud sur lequel s'applique le traitement $form['ref'] = array( '#type'=>'hidden', '#value'=>$ref ); $form['service'] = array( '#type'=>'hidden', '#value'=>$service ); if(isset($GLOBALS['referentiels'][$ref])){ $params = $GLOBALS['referentiels'][$ref]; //service XREF if($service=='xref' && isset($params['services']['xref'])){ $field = $params['services']['xref']['geo_field']; $refs = xref_wps_getDefaultRef($ref, 'xref'); } elseif($service=='clc' && isset($params['services']['clc'])){ $field = $params['services']['clc']['geo_field']; $refs = xref_wps_getDefaultRef($ref, 'clc'); } elseif($service=='rpg' && isset($params['services']['rpg'])){ $field = $params['services']['rpg']['geo_field']; $refs = xref_wps_getDefaultRef($ref, 'rpg'); } //Run process if(!empty($refs)){ //Ajout du champ de recherche geo $form['field'] = array( '#type'=>'hidden', '#value'=>$field ); $form['description'] = array( '#markup'=>"Sélection des paramètre d'execution du service ".$service." sur le champ ".$field." pour le référentiel ".$ref."", ); $form['refs'] = array( '#title'=>'Couches de référence', '#type'=>'checkboxes', '#options'=>$refs, '#default_value'=>$refs, '#checkall' =>'refs-checkboxes' ); } } $form['submit'] = array( '#type'=>'submit', '#value'=>'Calculer' ); return $form; } function xref_run_wps_ref_form_validate($form, &$form_state){ //do nothing } function xref_run_wps_ref_form_submit($form, &$form_state){ $ref = $form_state['values']['ref']; $wps = $form_state['values']['service']; $refs = array_flip($form_state['values']['refs']); //remove disabled ref unset($refs[0]); if(isset($GLOBALS['referentiels'][$ref]) && !empty($refs)){ if($wps == 'xref' && isset($GLOBALS['referentiels'][$ref]['services']['xref'])){ $operations[] = array('xref_run_wps_ref_xref_batch', array('ref'=>$ref, 'refs'=>$refs)); } if($wps == 'rpg' && isset($GLOBALS['referentiels'][$ref]['services']['rpg'])){ $operations[] = array('xref_run_wps_ref_rpg_batch', array('ref'=>$ref, 'refs'=>$refs)); } if($wps == 'clc' && isset($GLOBALS['referentiels'][$ref]['services']['clc'])){ $operations[] = array('xref_run_wps_ref_clc_batch', array('ref'=>$ref, 'refs'=>$refs)); } //Start X operation if(!empty($operations)){ $batch = array( 'operations' => $operations, 'finished' => 'xref_run_wps_ref_finish', 'title' => t('Processing Batch'), 'init_message' => t('Batch is starting.'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('XREF WPS Batch has encountered an error.'), 'file' => drupal_get_path('module', 'xref') . '/inc/xref.inc', ); batch_set($batch); //Starting the Batch batch_process('admin/config/xref'); } } else{ drupal_set_message("Le référentiel $ref n'est pas configuré", 'error'); } drupal_goto('admin/config/xref'); } //function xref_run_wps_ref_xref_batch($ref, $refs, &$context){ function xref_run_wps_ref_xref_batch($ref, $refs, &$context){ //Initialisation du batch if (!isset($context['sandbox']['progress'])) { //Get list of id $result = db_query( " SELECT nid, title FROM {node} LEFT JOIN {field_data_field_departement} ON revision_id = vid WHERE status=1 AND type = :type AND field_departement_target_id IS NULL ORDER BY nid DESC ", array( ':type'=>$GLOBALS['referentiels'][$ref]['drupal']['type'] ) ); /* $result = db_query( " SELECT nid, title FROM {node} WHERE status=1 AND type = :type ORDER BY nid ", array( ':type'=>$GLOBALS['referentiels'][$ref]['drupal']['type'] )); */ $data = $result->fetchAll(); $context['sandbox']['max'] = count($data); $context['results']['data']['list'] = $data; unset($data); $context['sandbox']['progress']=0; } //Process $i=0; $j= $context['sandbox']['progress']; $message = ''; $field = $GLOBALS['referentiels'][$ref]['services']['xref']['geo_field']; $field_info = field_info_field($field); if(empty($refs)){ $refs = xref_wps_getDefaultRef($ref, 'xref'); } while($i<3 && $context['sandbox']['progress']<$context['sandbox']['max']){ $info = $context['results']['data']['list'][$i+$j]; if($field && !empty($refs)){ //Si le champ est un geofield $gml = false; if($field_info['type']=='geofield'){ if($node = node_load($info->nid)){ if(isset($node->{$field}['und'])){ $gml = xgeo_convertWKTToGML($node->{$field}['und'][0]['geom']); } } } //Sinon on suppose qu'il s'agit d'un champ postgis else{ $gml = xref_getGML($info->nid, $field); } if($gml){ xref_get_xsandre($info->nid, $gml, $refs); } $message .= '
  • '.l($info->title.' [nid : '.$info->nid.']', 'node/'.$info->nid).'
  • '; } $context['sandbox']['progress']++; $i++; } $context['message'] = '

    WPS XREF "'.$ref.'"

    '.$context['sandbox']['progress'].' / '.$context['sandbox']['max'].'
    '; //Condition d'arret if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } function xref_run_wps_ref_clc_batch($ref, $refs, &$context){ //Initialisation du batch if (!isset($context['sandbox']['progress'])) { //Get list of id $result = db_query( " SELECT nid, title FROM {node} WHERE status=1 AND type = :type ORDER BY nid ", array( ':type'=>$GLOBALS['referentiels'][$ref]['drupal']['type'] )); $data = $result->fetchAll(); $context['sandbox']['max'] = count($data); $context['results']['data']['list'] = $data; unset($data); $context['sandbox']['progress']=0; } //Process $i=0; $j= $context['sandbox']['progress']; $message = ''; $field = $GLOBALS['referentiels'][$ref]['services']['clc']['geo_field']; $field_info = field_info_field($field); if(empty($refs)){ $refs = xref_wps_getDefaultRef($ref, 'clc'); } while($i<3 && $context['sandbox']['progress']<$context['sandbox']['max']){ $info = $context['results']['data']['list'][$i+$j]; if($field && !empty($refs)){ //Si le champ est un geofield if($field_info['type']=='geofield'){ if($node = node_load($info->nid)){ $gml = xgeo_convertWKTToGML($node->{$field}['und'][0]['geom']); } } //Sinon on suppose qu'il s'agit d'un champ postgis else{ $gml = xref_getGML($info->nid, $field); } xref_getOSCLC($info->nid, $gml, $refs); $message .= '
  • '.l($info->title.' [nid : '.$info->nid.']', 'node/'.$info->nid).'
  • '; } $context['sandbox']['progress']++; $i++; } $context['message'] = '

    WPS CLC "'.$ref.'"

    '.$context['sandbox']['progress'].' / '.$context['sandbox']['max'].'
    '; //Condition d'arret if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } function xref_run_wps_ref_rpg_batch($ref, $refs, &$context){ //Initialisation du batch if (!isset($context['sandbox']['progress'])) { //Get list of id $result = db_query( " SELECT nid, title FROM {node} WHERE status=1 AND type = :type ORDER BY nid ", array( ':type'=>$GLOBALS['referentiels'][$ref]['drupal']['type'] )); $data = $result->fetchAll(); $context['sandbox']['max'] = count($data); $context['results']['data']['list'] = $data; unset($data); $context['sandbox']['progress']=0; } //Process $i=0; $j= $context['sandbox']['progress']; $message = ''; $field = $GLOBALS['referentiels'][$ref]['services']['rpg']['geo_field']; $field_info = field_info_field($field); if(empty($refs)){ $refs = xref_wps_getDefaultRef($ref, 'rpg'); } while($i<5 && $context['sandbox']['progress']<$context['sandbox']['max']){ $info = $context['results']['data']['list'][$i+$j]; if($field && !empty($refs)){ //Si le champ est un geofield if($field_info['type']=='geofield'){ if($node = node_load($info->nid)){ $gml = xgeo_convertWKTToGML($node->{$field}['und'][0]['geom']); } } //Sinon on suppose qu'il s'agit d'un champ postgis else{ $gml = xref_getGML($info->nid, $field); } xref_getAssolement($info->nid, $gml, $refs); $message .= '
  • '.l($info->title.' [nid : '.$info->nid.']', 'node/'.$info->nid).'
  • '; } $context['sandbox']['progress']++; $i++; } $context['message'] = '

    WPS RPG "'.$ref.'"

    '.$context['sandbox']['progress'].' / '.$context['sandbox']['max'].'
    '; //Condition d'arret if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } //Fonction de fin de process function xref_run_wps_ref_finish($success, $results, $operations){ if ($success) { // Here we do something meaningful with the results. //$message = t('@count items successfully processed:', array('@count' => count($results['log']))); //$message .= theme('item_list', array('items' => $results['log'])); //drupal_set_message($message); drupal_set_message("xref_run_wps_ref_finish"); } else { // An error occurred. // $operations contains the operations that remained unprocessed. $error_operation = reset($operations); $message = t('An error occurred while processing %error_operation with arguments: @arguments', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE))); drupal_set_message($message, 'error'); } } //Calcul de l'occupation des sols avec Corine Land Cover function xref_getOSCLC($nid, $gml, $services=array('clc_2012', 'clc_2006', 'clc_2000')){ $node = node_load($nid, NULL, true); $wrapper = entity_metadata_wrapper('node', $node); if(isset($wrapper->field_clc)){ //====================== CLC 2012 if(in_array('clc_2012', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'clc_2012'); $ana_clc_2012 = wps_oieau_CLC_getAnalyse($result['output']); $layers = $result['output']->layers; $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2012.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Corine Land Cover 2012)'; //Set data $raw_collection = $wrapper->field_clc->value(); if(isset($raw_collection[0])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[0]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_clc_version->set('Corine Land Cover 2012'); $fc_wrapper->field_artificial_surfaces->set($ana_clc_2012['coverage']['Surfaces artificialisées']); $fc_wrapper->field_agricultural_areas->set($ana_clc_2012['coverage']['Zones agricoles']); $fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2012['coverage']['Forêt et zones semi-naturelles']); $fc_wrapper->field_proportion_wetlands->set($ana_clc_2012['coverage']['Zones humides']); $fc_wrapper->field_proportion_water_bodies->set($ana_clc_2012['coverage']["Masses d'eau"]); $fc_wrapper->field_clc_illustration->set($file); $fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2012['analyse'], 'format'=>'full_html')); $fc_wrapper->field_clc_data->set(serialize($ana_clc_2012)); $fc_wrapper->save(); } //Gestion du champ type OS if(!empty($ana_clc_2012['type_os'])){ $wrapper->field_type_os->set($ana_clc_2012['type_os']); } unset($ana_clc_2012); } //====================== CLC 2006 if(in_array('clc_2006', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'clc_2006'); $ana_clc_2006 = wps_oieau_CLC_getAnalyse($result['output']); $layers = $result['output']->layers; $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2006.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Corine Land Cover 2006)'; $raw_collection = $wrapper->field_clc->value(); if(isset($raw_collection[1])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[1]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_clc_version->set('Corine Land Cover 2006'); $fc_wrapper->field_artificial_surfaces->set($ana_clc_2006['coverage']['Surfaces artificialisées']); $fc_wrapper->field_agricultural_areas->set($ana_clc_2006['coverage']['Zones agricoles']); $fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2006['coverage']['Forêt et zones semi-naturelles']); $fc_wrapper->field_proportion_wetlands->set($ana_clc_2006['coverage']['Zones humides']); $fc_wrapper->field_proportion_water_bodies->set($ana_clc_2006['coverage']["Masses d'eau"]); $fc_wrapper->field_clc_illustration->set($file); $fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2006['analyse'], 'format'=>'full_html')); $fc_wrapper->field_clc_data->set(serialize($ana_clc_2006)); $fc_wrapper->save(); } unset($ana_clc_2006); } //====================== CLC 2000 if(in_array('clc_2000', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'clc_2000'); $ana_clc_2000 = wps_oieau_CLC_getAnalyse($result['output']); $layers = $result['output']->layers; $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2000.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Corine Land Cover 2000)'; $raw_collection = $wrapper->field_clc->value(); if(isset($raw_collection[2])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[2]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_clc_version->set('Corine Land Cover 2000'); $fc_wrapper->field_artificial_surfaces->set($ana_clc_2000['coverage']['Surfaces artificialisées']); $fc_wrapper->field_agricultural_areas->set($ana_clc_2000['coverage']['Zones agricoles']); $fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2000['coverage']['Forêt et zones semi-naturelles']); $fc_wrapper->field_proportion_wetlands->set($ana_clc_2000['coverage']['Zones humides']); $fc_wrapper->field_proportion_water_bodies->set($ana_clc_2000['coverage']["Masses d'eau"]); $fc_wrapper->field_clc_illustration->set($file); $fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2000['analyse'], 'format'=>'full_html')); $fc_wrapper->field_clc_data->set(serialize($ana_clc_2000)); $fc_wrapper->save(); } unset($ana_clc_2000); } $wrapper->save(); } } //Calcul de l'occupation des sols avec le RPG de niveau 1 en utilisant le WPS OIEau function xref_getAssolement($nid, $gml, $services=array('rpg_2014','rpg_2013','rpg_2012', 'rpg_2011', 'rpg_2010')){ $node = node_load($nid, NULL, true); $wrapper = entity_metadata_wrapper('node', $node); if(isset($wrapper->field_rpg)){ //====================== RPG 2012 if(in_array('rpg_2012', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'rpg_2012'); $ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2012); if(!empty($ana_rpg)){ $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2012.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2012)'; //Set data $raw_collection = $wrapper->field_rpg->value(); if(isset($raw_collection[0])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[0]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2012'); $fc_wrapper->field_rpg_sau->set($ana_rpg['surf_tot']/10000); //pour revenir en hectares $fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Cultures']['coverage_cult_rate']); $fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']); $fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']); $fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']); $fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']); $fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']); $fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']); $fc_wrapper->field_rpg_illustration->set($file); $fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html')); $fc_wrapper->field_rpg_data->set(serialize($ana_rpg)); $fc_wrapper->save(); if(!empty($ana_rpg['orientations_p'])){ if(isset($ana_rpg['orientations_p']['Prairies et fourrages'])){ //On remplace "Prairies et fourrages" par "Élevage" $ana_rpg['orientations_p']['Élevage'] = $ana_rpg['orientations_p']['Prairies et fourrages']; unset($ana_rpg['orientations_p']['Prairies et fourrages']); } $orientations = array_keys($ana_rpg['orientations_p']); //dsm($orientations); $wrapper->field_orientations_agri->set($orientations); } } unset($ana_rpg); } } //====================== RPG 2011 if(in_array('rpg_2011', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'rpg_2011'); $ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2011); if(!empty($ana_rpg)){ $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2011.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2011)'; //Set data $raw_collection = $wrapper->field_rpg->value(); if(isset($raw_collection[1])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[1]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2011'); $fc_wrapper->field_rpg_sau->set($ana_rpg['surf_tot']/10000); //pour revenir en hectares $fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Cultures']['coverage_cult_rate']); $fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']); $fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']); $fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']); $fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']); $fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']); $fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']); $fc_wrapper->field_rpg_illustration->set($file); $fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html')); $fc_wrapper->field_rpg_data->set(serialize($ana_rpg)); $fc_wrapper->save(); } unset($ana_rpg); } } //====================== RPG 2010 if(in_array('rpg_2010', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'rpg_2010'); $ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2010); if(!empty($ana_rpg)){ $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2010.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2010)'; //Set data $raw_collection = $wrapper->field_rpg->value(); if(isset($raw_collection[2])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[2]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2010'); $fc_wrapper->field_rpg_sau->set($ana_rpg['surf_tot']/10000); //pour revenir en hectares $fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Cultures']['coverage_cult_rate']); $fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']); $fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']); $fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']); $fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']); $fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']); $fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']); $fc_wrapper->field_rpg_illustration->set($file); $fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html')); $fc_wrapper->field_rpg_data->set(serialize($ana_rpg)); $fc_wrapper->save(); } unset($ana_rpg); } } //====================== RPG 2013 if(in_array('rpg_2013', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'rpg_2013'); $ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2013); if(!empty($ana_rpg)){ $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2013.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2013)'; //Set data $raw_collection = $wrapper->field_rpg->value(); if(isset($raw_collection[3])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[3]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2013'); $fc_wrapper->field_rpg_sau->set($ana_rpg['surf_tot']/10000); //pour revenir en hectares $fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Cultures']['coverage_cult_rate']); $fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']); $fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']); $fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']); $fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']); $fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']); $fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']); $fc_wrapper->field_rpg_illustration->set($file); $fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html')); $fc_wrapper->field_rpg_data->set(serialize($ana_rpg)); $fc_wrapper->save(); } unset($ana_rpg); } } //====================== RPG 2014 if(in_array('rpg_2014', $services)){ $result = wps_oieau_coverage_getCoverage($gml, 'rpg_2014'); $ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2014); if(!empty($ana_rpg)){ $img = file_get_contents( $result['png']->png); $file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2014.png', FILE_EXISTS_REPLACE); $file = (array)$file; $file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2014)'; //Set data $raw_collection = $wrapper->field_rpg->value(); if(isset($raw_collection[4])){ $fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[1]); } else{ $fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg')); $fc_item->setHostEntity('node', $node); $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item); } if($fc_wrapper){ $fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2014'); $fc_wrapper->field_rpg_sau->set($ana_rpg['surf_tot']/10000); //pour revenir en hectares $fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Cultures']['coverage_cult_rate']); $fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']); $fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']); $fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']); $fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']); $fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']); $fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']); $fc_wrapper->field_rpg_illustration->set($file); $fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html')); $fc_wrapper->field_rpg_data->set(serialize($ana_rpg)); $fc_wrapper->save(); } unset($ana_rpg); } } $wrapper->save(); } else{ drupal_set_message("Le champ file_rpg n'existe pas pour le noeud ".$nid, 'error'); } } //Fonction de lancement du calcul croisements avec les jeux géo pour 1 noeud (menu contextuel) /* deprecated ==> now use the form "xref_wps_form" function xref_run_xref_page($node){ foreach($GLOBALS['referentiels'] as $ref=>$params){ if($params['drupal']['type'] == $node->type){ if(isset($params['services']['xref'])){ $field = $params['services']['xref']['geo_field']; if(isset($node->{$field}) && !empty($node->{$field})){ $refs = array(); //Get conf if($params['services']['xref']['ref']=='all'){ $refs = array_combine($GLOBALS['services_defaut_ref']['xref'],$GLOBALS['services_defaut_ref']['xref']); //remove the current type of the list unset($refs[$ref]); $refs = array_flip($refs); } elseif(is_array($params['services']['xref']['ref']) && !empty($params['services']['xref']['ref'])){ $refs = array_combine($params['services']['xref']['ref'],$params['services']['xref']['ref']); } //Run process if(!empty($refs)){ xref_get_xsandre($node->nid, $field, $refs); } } } break; } } drupal_goto('node/'.$node->nid); } */ //field_position_geo function xref_get_xsandre($nid, $gml, $ref=array()){ if($node = node_load($nid, null, true)){ if($gml && !empty($ref)){ $intersectRef_values = wps_oieau_intersectRef_getRefGeo($gml, $ref); //Si on obtient une erreur ==> fonction retourne "false" //il est possibl que la geom soit fausse ou trop complexe pour être passée en GML //donc on tente avec les référence code/type de l'objet if(!$intersectRef_values){ $intersectRef_values = wps_oieau_intersectRef_getRef($node->field_code_sandre['und'][0]['value'], $node->field_type_sandre['und'][0]['value'], $ref); if(!$intersectRef_values){ drupal_set_message("Impossible de calculer le croisement pour le noeud : ".l($node->title, 'node/'.$node->nid) .' - '.implode(', ', $ref), 'error'); } } if($intersectRef_values){ $intersectRef = xref_map_cdSandre($intersectRef_values, $ref); unset($gml, $intersectRef_values); if(!empty($intersectRef)){ $wrapper = entity_metadata_wrapper('node', $node); foreach($intersectRef as $ref=>$data){ if(!empty($data['nodes'])){ $field = isset($data['conf']['ref_field'])?$data['conf']['ref_field']:'field_'.$ref; $wrapper->{$field}->set($data['nodes']); //dsm($data['nodes']); } } $wrapper->save(); } } } } } /* //Fonction de lancement du calcul d'occupation des sols CLC pour 1 noeud (menu contextuel) function xref_run_clc_page($node){ if(isset($node->field_geo)){ $gml = xgeo_getGML($node->nid, 'field_geo'); } elseif(isset($node->field_bv_geo)){ $gml = xgeo_getGML($node->nid, 'field_bv_geo'); } else{ drupal_set_message("Calcul CLC ko pour ".$node->title); drupal_goto('node/'.$node->nid); } xgeo_getOSCLC($node->nid, $gml); //xgeo_getOSCLC($node->nid, $gml, array('clc_2000')); drupal_set_message("Calcul CLC ok pour ".$node->title); drupal_goto('node/'.$node->nid); } */ /* //Fonction de lancement du calcul d'occupation des sols RPG pour 1 noeud (menu contextuel) function xref_run_rpg_page($node){ if(isset($node->field_geo)){ $gml = xgeo_getGML($node->nid, 'field_geo'); } elseif(isset($node->field_bv_geo)){ $gml = xgeo_getGML($node->nid, 'field_bv_geo'); } else{ drupal_set_message("Calcul RPG ko pour ".$node->title); drupal_goto('node/'.$node->nid); } //xgeo_getAssolement($node->nid, $gml); xgeo_getAssolement($node->nid, $gml, array('rpg_2012')); //xgeo_getAssolement($node->nid, $gml, array('rpg_2011')); //xgeo_getAssolement($node->nid, $gml, array('rpg_2010')); drupal_set_message("Calcul RPG ok pour ".$node->title); drupal_goto('node/'.$node->nid); } */ //Fonction de lancement du calcul du parcourt amont en utilisant le WPS BRGM Carthage function xref_run_amont_page($node){ $out = xgeo_getAmont($node->nid, 'field_position_geo'); drupal_set_message("Calcul Amont ok pour ".$node->title); drupal_goto('node/'.$node->nid); } //Fonction de lancement du calcul du Bassin versant en utilisant le parcourt amont et les zones hydro function xref_run_bv_page($node){ $out = xgeo_getBV($node->nid, 'field_amont'); drupal_set_message("Calcul BV ok pour ".$node->title); drupal_goto('node/'.$node->nid); } //Formulaire de selection des referentiels function xref_wps_form($form, &$form_state, $node, $service){ $form = array(); /* dsm('xref_wps_form'); dsm($GLOBALS['referentiels']); dsm($node); dsm($service); */ //Id du noeud sur lequel s'applique le traitement $form['nid'] = array( '#type'=>'hidden', '#value'=>$node->nid ); $form['service'] = array( '#type'=>'hidden', '#value'=>$service ); $referentiels = xref_map_global_referentiels_bundle(); //foreach($GLOBALS['referentiels'] as $ref=>$params){ //if($params['drupal']['type'] == $node->type){ if(isset($referentiels[$node->type])){ $ref = $referentiels[$node->type]['ref']; $params = $referentiels[$node->type]; //service XREF if($service=='wps-xref' && isset($params['services']['xref'])){ $field = $params['services']['xref']['geo_field']; if(isset($node->{$field}) && !empty($node->{$field})){ $refs = xref_wps_getDefaultRef($ref, 'xref'); } } elseif($service=='wps-clc' && isset($params['services']['clc'])){ $field = $params['services']['clc']['geo_field']; if(isset($node->{$field}) && !empty($node->{$field})){ $refs = xref_wps_getDefaultRef($ref, 'clc'); } } elseif($service=='wps-rpg' && isset($params['services']['rpg'])){ $field = $params['services']['rpg']['geo_field']; if(isset($node->{$field}) && !empty($node->{$field})){ $refs = xref_wps_getDefaultRef($ref, 'rpg'); } } //Run process if(!empty($refs)){ //Ajout du champ de recherche geo $form['field'] = array( '#type'=>'hidden', '#value'=>$field ); $form['description'] = array( '#markup'=>"Sélection des paramètre d'execution du service ".$service." sur le champ ".$field." pour l'entité ".$node->title." de type ".$node->type."" ); $form['refs'] = array( '#title'=>'Couches de référence', '#type'=>'checkboxes', '#options'=>$refs, '#default_value'=>$refs, '#checkall' =>'refs-checkboxes' ); } } $form['submit'] = array( '#type'=>'submit', '#value'=>'Calculer' ); return $form; } function xref_wps_form_validate($form, &$form_state){ //do nothing } function xref_wps_form_submit($form, &$form_state){ $node = node_load($form_state['values']['nid']); $field = $form_state['values']['field']; $field_info = field_info_field($field); //Si le champ est un geofield if($field_info['type']=='geofield'){ $gml = xref_convertWKTToGML($node->{$field}['und'][0]['geom']); } //Sinon on suppose qu'il s'agit d'un champ postgis else{ $gml = xref_getGML($node->nid, $field); } $refs = array_flip($form_state['values']['refs']); //remove all unselected refs unset($refs[0]); if(!empty($refs) && $gml){ if($form_state['values']['service']=="wps-xref"){ xref_get_xsandre($node->nid, $gml, $refs); } elseif($form_state['values']['service']=="wps-rpg"){ xref_getAssolement($node->nid, $gml, $refs); } elseif($form_state['values']['service']=="wps-clc"){ xref_getOSCLC($node->nid, $gml, $refs); } } drupal_goto('node/'.$form_state['values']['nid']); }