Index: 0.3-stable-modules/entes_encuesta/entes_encuesta.info
===================================================================
--- 0.3-stable-modules/entes_encuesta/entes_encuesta.info	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
+++ 0.3-stable-modules/entes_encuesta/entes_encuesta.info	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
@@ -0,0 +1,7 @@
+name = encuestas ente planificador
+description = Modulo para asignar encuestas a los entes planificadores.
+core = 6.x
+dependencies[] = webform
+dependencies[] = ente_planificador
+package = Planificador - core
+
Index: 0.3-stable-modules/entes_encuesta/entes_encuesta.install
===================================================================
--- 0.3-stable-modules/entes_encuesta/entes_encuesta.install	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
+++ 0.3-stable-modules/entes_encuesta/entes_encuesta.install	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
@@ -0,0 +1,50 @@
+<?php
+/**
+* Implementation of hook_install()
+*/
+function entes_encuesta_install() {
+	// Utiliza el schema API para crear la tabla en la base de datos
+  drupal_install_schema('entes_encuesta');
+}
+/**
+  * Implementation of hook_uninstall().
+  */
+function entes_encuesta_uninstall() {
+// Utiliza el schema API para eliminar la tabla en la base de datos.
+   drupal_uninstall_schema('entes_encuesta');
+}
+/**
+* Implementation of hook_schema().
+*/
+function entes_encuesta_schema() {
+  $schema['webform_ente_planificador'] = array(
+    'description' => 'Encuesta de los entes planificadores.',
+    'fields' => array(
+      'nid_webform' => array(
+        'description' => 'el nid del webform.',
+        'type' => 'int',
+        'length' => 15,
+        'not null' => TRUE,
+        'default' => 0,
+        'unsigned' => TRUE,
+      ),
+      'nid_ente' => array(
+        'description' => 'el nid del ente planificador.',
+        'type' => 'int',
+        'length' => 15,
+        'not null' => TRUE,
+        'default' => 0,
+        'unsigned' => TRUE,
+      ),
+      'uid_users' => array(
+        'description' => 'el uid del usuario.',
+        'type' => 'int',
+        'length' => 15,
+        'not null' => TRUE,
+        'default' => 0,
+        'unsigned' => TRUE,
+      ),
+     ),
+  );
+  return $schema;
+}
Index: 0.3-stable-modules/entes_encuesta/entes_encuesta.module
===================================================================
--- 0.3-stable-modules/entes_encuesta/entes_encuesta.module	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
+++ 0.3-stable-modules/entes_encuesta/entes_encuesta.module	(revision dd692b152f90b7ac182fa1ed687ddf233976704f)
@@ -0,0 +1,762 @@
+<?php
+/**
+ * @file
+ * modulo para la gestion de las encuestas realizadas por los entes planificadores.
+ */
+
+/**
+ *Implementation entes_planificadores_toolbar_admin_items_toolbar().
+*/
+function entes_encuesta_admin_items_toolbar($handler_icon) {
+  $link = array();
+  if (module_exists('entes_encuesta')) {
+    if (user_access('administer users')) {
+      $icon_path = entes_planificadores_toolbar_get_icon_path('planner', 'descriptors', $handler_icon);
+      $link[] = array(
+        'path' => 'administrar_encuestas',
+        'icon_path' => $icon_path,
+        'icon' => theme('image', $icon_path, t('Lista de encuestas que estan asignadas a los entes planificadores'), t('Lista de encuestas que estan asignadas a los entes planificadores'), array('class' => 'handler-icon-' . $handler_icon)),
+        'title' => t('Lista de Encuestas'),
+        'description' => t('Lista de encuestas que estan asignadas a los entes planificadores'),
+        'category' => 'admin',
+      );
+      $icon_path = entes_planificadores_toolbar_get_icon_path('planner', 'causesrelations', $handler_icon);
+      $link[] = array(
+        'path' => 'node/add/webform',
+        'icon_path' => $icon_path,
+        'icon' => theme('image', $icon_path, t('Agregar encuestas'), t('Agregar encuestas'), array('class' => 'handler-icon-' . $handler_icon)),
+        'title' => t('Agregar Encuestas'),
+        'description' => t('Agregar encuestas'),
+        'category' => 'admin',
+      );
+    }
+    return $link;
+  }
+}
+/*
+ * hook para la visualizacion de la opcion de lista si se decea en el panel de mi usuario
+ *  extraido de Implementation of hook_usuario_items_toolbar
+ */
+
+function entes_encuesta_usuario_items_toolbar($uid, $handler_icon) {
+  $link = array();
+  if (module_exists('entes_encuesta')) {
+    $icon_path = entes_planificadores_toolbar_get_icon_path('planner', 'descriptors', $handler_icon);
+    $link[] = array(
+      'path' => 'encuestas_asignadas',
+      'icon_path' => $icon_path,
+      'icon' => theme('image', $icon_path, t('Lista de encuestas'), t('Lista de encuestas'), array('class' => 'handler-icon-' . $handler_icon)),
+      'title' => t('Lista de encuestas'),
+      'description' => t('Lista de encuestas'),
+      'category' => 'user',
+    );
+  return $link;
+  }
+}
+
+/**
+ * Implementation of entes_planificadores_toolbar_planner_items_toolbar().
+*/
+function entes_encuesta_planner_items_toolbar($ente_planificador, $handler_icon) {
+  global $user;
+  $link = array();
+  if (module_exists('entes_encuesta')) {
+	   $icon_path = entes_planificadores_toolbar_get_icon_path('planner', 'descriptors', $handler_icon);
+        $link[] = array(
+        'path' => 'encuestas_asignadas',
+        'icon_path' => $icon_path,
+        'icon' => theme('image', $icon_path, t('Lista de encuestas'), t('Lista de encuestas'), array('class' => 'handler-icon-' . $handler_icon)),
+        'title' => t('Lista de Encuestas'),
+        'description' => t('Lista de encuestas'),
+        'category' => 'planner',
+      );
+      return $link;
+  }
+}
+
+/**
+ * Implementacion de hook_webform_menu()
+ * funcion que crea un menu para la visualizacion de una lista de los entes planificadores que tienen asignados encuestas.
+ */
+function entes_encuesta_menu() {
+  $items['administrar_encuestas'] = array(
+    'title' => 'Lista de Encuestas',
+    'page callback' => 'entes_encuesta_lista_encuestas',
+    'access callback' => 'usuario_tiene_permisos',
+    //'type' => MENU_NORMAL_ITEM,
+  );
+  $items['encuestas_asignadas'] = array(
+    'title' => 'Lista de Encuestas',
+    'page callback' => 'entes_encuesta_encuestas_asignadas',
+    'access callback' => TRUE,
+    //'type' => MENU_NORMAL_ITEM,
+  );
+  return $items;
+}
+
+/**
+ * Implementacion de entes_encuesta_consulta_entes_planificadores()
+ * funcion que extrae el nid y el title de los entes planificadores existentes en la base de datos.
+ */
+function entes_encuesta_consulta_entes_planificadores($op) {
+  $result_ent = db_query("SELECT nid,title FROM node WHERE TYPE = 'ente_planificador' ");
+  $ente = array('0' => 'Ninguno');
+  
+  //Se le pasa es el nid que se rescata a continuacion, mientras title se le pasa es al componente que se crea..
+  if ($op == 'nid') {
+    while ($ent = db_fetch_object($result_ent)) {
+      $ente[$ent->nid] = $ent->title;
+    }
+  }
+  else if ($op == 'title')
+  {
+    $ente = array('Ninguno' => 'Ninguno');
+    while ($ent = db_fetch_object($result_ent)) {
+      $ente[$ent->title] = $ent->title;
+    }
+  }
+  return $ente;
+}
+
+function entes_encuesta_encuestas_asignadas() {
+  global $user;
+  $output = '';
+  $step = 10; 
+  $Lista_entes = array();
+
+  $sqlcount = "SELECT count(wep.nid_webform) FROM {ente_user_planificador} eup, {webform_ente_planificador} wep WHERE eup.usuario = '$user->uid' AND wep.nid_ente = eup.nid";
+  $sql = "SELECT wep.nid_webform,wep.nid_ente FROM {ente_user_planificador} eup, {webform_ente_planificador} wep WHERE eup.usuario = '$user->uid' AND wep.nid_ente = eup.nid";
+  $headers_table[] = array('data' => t('Title'), 'sort' => 'asc', 'field' => 'nid_webform');
+  $sql .= tablesort_sql($headers_table);
+   
+  $result = pager_query($sql, $step, 0, $sqlcount);
+
+  while ($entes = db_fetch_object($result)) {
+	$title= db_query("select title FROM {node} WHERE nid= %d AND type = 'webform' AND (type in ('webform')) AND (status <> 0)", $entes->nid_webform);
+    $titleEncuesta = db_fetch_object($title);
+   //la siguiente validacion se realiza para verificar el acceso a aquellas encuestas que fueron asignadas a un ente pero marcando un ente planificador
+    if($entes->nid_webform) {
+      //consulta de los roles de un usuario por si se han asignado a uuna encuesta especifica a un rol, esto se hace para extraer aquellas encuestas que fueron asignadas a un rol en especifico, fuera del autentificado
+      foreach ($user->roles as $nid=>$roles) {    
+        $queryRols = db_query("SELECT nid FROM {webform_roles}  WHERE rid = %d AND nid = %d", $nid, $entes->nid_webform);
+        $roles = db_fetch_object($queryRols);
+        if(isset($roles->nid)) {
+          $arregloente['encuesta'] = l($titleEncuesta->title, 'node/' . $entes->nid_webform);
+        }
+      }
+    }
+    $Lista_encuesta[] = $arregloente;
+    unset($arregloente);
+  }
+ if (sizeof($Lista_encuesta)) {
+      $output .= theme('table', $headers_table, $Lista_encuesta);
+      $output .= theme('pager', NULL);    
+  }
+  else {
+    $output .= '<p>' . t('No se encontraron formularios asignados para usted') . '</p>';
+  }
+  return $output;
+}
+
+/**
+ * Implementacion de entes_encuesta_lista_encuestas()
+ * Funcion que crea una lista de los entes planificadores a los cuales se les asigno ya una encuesta.
+ */
+function entes_encuesta_lista_encuestas() {
+  $output = '';
+  $step = 10; 
+  $Lista_entes = array();
+  $sqlcount = "SELECT count(n.nid) FROM {node} n, {node_revisions} rv  WHERE n.vid = rv.vid AND (n.type in ('webform')) AND (n.status <> 0)";
+  $sql = "SELECT DISTINCT n.nid as nid, n.title as title FROM {node} n, {webform_ente_planificador} rv WHERE (n.type in ('webform')) AND (n.status <> 0)";
+  //la siguiente consulta se realiza en caso de que no hallan entes planificadores asignados a encuestas.
+  //if(mysql_num_rows(db_query($sql)) == 0) {
+	//$sql = "SELECT nid, title FROM {node} WHERE type = 'webform' AND status <> 0";
+  //}
+  
+  $headers_table[] = array('data' => t('Title'), 'sort' => 'asc', 'field' => 'title');
+  if ((user_access('edit all planificador'))||(user_access('admin planificador'))) {
+    $headers_table[] = array('data' => t('Entes Asignados'));
+    $headers_table[] = array('data' => t('Modificar'));
+    $headers_table[] = array('data' => t('eliminar'));
+  }
+  $sql .= tablesort_sql($headers_table);
+  $result = pager_query($sql, $step, 0, $sqlcount);
+
+  while ($entes = db_fetch_object($result)) {
+    $arregloente['title'] = l($entes->title, 'node/' . $entes->nid);
+    $sql2 = db_query(" SELECT nid_ente FROM  {webform_ente_planificador} WHERE nid_webform = %d ",$entes->nid);
+	//Consultas del title y el nid de cada ente planificador.
+	while ($entes2 = db_fetch_object($sql2)) {
+	  $sql3 = db_query("SELECT title,nid FROM {node} WHERE nid = %d AND type = 'ente_planificador'",$entes2->nid_ente);
+      while ( $entes3 = db_fetch_object($sql3)) {
+        $arregloentes['ente'] = (l(t($entes3->title), 'node/' . $entes3->nid));
+        $arregloente['ente'] .= $arregloentes['ente'].', ';
+       
+      }
+      
+    }
+    //eliminacion de la ultima coma
+   $arregloente['ente'] = substr($arregloente['ente'], 0, -2);
+    
+    if ($arregloente['ente'] == NULL) {
+    $arregloente['ente']='Sin asignar.';
+    }
+    if ((user_access('edit all planificador')) || (user_access('admin planificador'))) {
+      $arregloente['editar'] = l(t('Editar encuesta'), 'node/' . $entes->nid . '/edit', array('html' => true, 'query' => 'destination=admin/content/node'));
+      $arregloente['eliminar'] = l(t('Eliminar Encuesta'), 'node/' . $entes->nid . '/delete', array('html' => true, 'query' => 'destination=administrar_encuestas'));	//estas son las paginas de redireccion
+    } 
+
+    $Lista_entes[] = $arregloente;
+    unset($arregloente);
+  } //fin del mientras
+
+  if (sizeof($Lista_entes)) {
+    $output .= theme('table', $headers_table, $Lista_entes);
+    $output .= theme('pager', NULL);
+  }
+  else {
+    $output .= '<p>' . t('No se encontraron formularios en el sistema') . '</p>';
+  }
+  return $output;
+}
+
+/**
+ * Implementacion de hook_form_alter().
+ * Con este hook se busca modificar el formulario de configuracion del webform
+ * y agregale un campo de seleccion, para asignar las encuestas que se creen a los entes planificadores.
+ */
+function entes_encuesta_form_alter(&$form,$form_state,$form_id) {
+  if ($form_id == 'webform_configure_form') {
+    $i=0;
+    $result = db_query("SELECT nid_ente FROM {webform_ente_planificador} WHERE nid_webform = %d",$form['#node']->nid);
+    while ($fila = db_fetch_object($result)) {
+      $defecto[$i] = $fila->nid_ente;
+      $i = $i + 1;
+    }
+    if ($defecto == NULL) {
+      //si no se han asignado entes planificadores se mostrara un valor por defecto como lo es 'ninguno', 
+      //valor que se almacenara en la tabla webform_ente_planificador solo al guardar los cambios en la configuracion.
+      $defecto[0] = 0;
+    }
+    $options = entes_encuesta_consulta_entes_planificadores('nid');
+    $form['ente'] = array (
+      '#type' => 'fieldset',
+      '#title' => t('Asignar a Ente Planificador'),
+      '#collapsible' => TRUE,
+      '#collapsed' => FALSE,
+      '#access' => TRUE,
+      '#weight' => 1,
+    );
+    $form['ente']['select'] = array (
+      '#title' => 'Entes planificadores',
+      '#type' => 'checkboxes',
+      '#options' => $options,
+      '#default_value' => $defecto,
+      '#description' => t('Seleccione el ente planificador al que decea asignarle esta funcion.'),
+    );
+    array_unshift($form['#validate'],'entes_encuesta_form_validate');
+    $form['#submit'][] = 'entes_encuesta_form_submit';
+  } //end of if
+  //Eliminar los registros que se inserten del componente.
+  if ($form_id == 'node_delete_confirm') {
+    $form['#submit'][] = 'entes_encuesta_delete_submit';
+  }
+}
+
+/**
+ * Implements hook_delete().
+ * funcion para eliminar las entradas del formulario al eliminar el form de la encuesta en su totalidad.
+ */
+function entes_encuesta_delete_submit($form,&$form_state) {
+  $nid = $form['nid']['#value'];
+  db_query('DELETE FROM {webform_ente_planificador} WHERE nid_webform = %d', $nid);
+}
+
+/**
+ * Implements entes_encuesta_form_submit().
+ * funcion que inserta la asignacion de las encuesta a ciertos entes planificadores.
+ */
+function entes_encuesta_form_submit($form,&$form_state) {	
+
+  $nid_ente = $form['ente']['select']['#post']['select'];
+  // las siguientes lineas manejan la entrada de los datos de los usuarios para la base de datos.
+  if (isset($nid_ente)) {
+    db_query("DELETE FROM {webform_ente_planificador} WHERE nid_webform = %d",$form['#node']->nid);
+  }
+  foreach ($nid_ente as $nid_ente_planificador=> $nid) 
+  {
+    db_query("INSERT INTO {webform_ente_planificador} (nid_webform,nid_ente,uid_users) VALUES (%d,%d,%d)",$form['#node']->nid,$nid,$form['#node']->uid);
+  } // fin del foreach
+}
+
+/**
+ * Implementacion de entes_encuesta_form_validate().
+ * funcion para validar la seleccion de la asignacion de las encuestas.
+ * en esta funcion se valida que no sea marcado 'ninguno' en conjunto con algun ente planificador. 
+ */
+function entes_encuesta_form_validate($form,&$form_state) {
+  $autentificacion = $form['role_control']['roles']['#value'];
+  $nid_ente = $form['ente']['select']['#post']['select'];
+  // si la entrada es nula.
+  if ( $nid_ente == FALSE ) {
+    form_set_error('select', t('Debe marcar una opcion.'));
+  }	
+  else {
+    foreach ($nid_ente as $valor) {
+      if (count($nid_ente) > 1 ) {
+        if($valor == 0) {
+          form_set_error('select', t('Nos es permitido seleccionar "Ninguno" y "entes planificadores"'));
+        }
+      }
+    }
+  //Esta es una validacion para que no se puedan asignar a usuarios anonimos y a un ente planificador, ya que solo los usuarios que posean el ente planificador tienen acceso.
+    foreach($autentificacion as $aut) {
+      if($aut == 1 AND $valor != 0) {
+        form_set_error('select', t('No se pueden asignar a usuarios anonimos y a entes planificadores'));
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_webform_submission_access().
+ * En esta funcion restringe al usuario, de tal forma que solo aquellos que poseen el ente planificador al que se le asigno la encuesta puedan acceder a ellas.
+ */
+function entes_encuesta_webform_submission_access($node, $submission, $op = 'view', $account = NULL) {
+  global $user;
+//print('<pre>');
+//print_r($node);
+//print('</pre>');
+
+  //Estableciendo todas las entradas por defecto en false
+  $node->content['#access'] = FALSE;
+  // Si el usuario es el admin y posee el nid '1' podra entrar y serle visibles todas las encuestas.
+  if ($user->uid == '1') {
+	$node->content['#access'] = TRUE;
+  }
+  //consultas para buscar aquellas encuestas que esten o no asignadas.
+  $result = db_query("SELECT wep.nid_ente,wep.nid_webform FROM {ente_user_planificador} eup, {webform_ente_planificador} wep WHERE usuario = %d AND wep.nid_ente = eup.nid",$user->uid);
+  while ($row = db_fetch_object($result)) {
+    if ($row->nid_webform == $node->nid) {
+      $node->content['#access'] = TRUE;
+      break; // este break es para que se salga al encontrar los nid iguales y no siga comparando
+    }
+  } //fin del mientras
+  
+  //esta consulta es para hacer aquellos formularios que no esten asignados y sean iguales a 0 TRUE
+  $result1 = db_query("SELECT nid_ente, nid_webform FROM {webform_ente_planificador} WHERE nid_webform = %d", $node->nid);
+  while ($row1 = db_fetch_object($result1)) {
+    if ($row1->nid_ente == 0) {
+      $node->content['#access'] = TRUE;
+	  }
+  }
+  
+  //la siguiente consulta es para extraer aquellos nid de las encuestas que no han sido asignadas en el form settings del webform
+  //con el objeto de que si no se configuro por medio del form settings estan sean accesibles
+  $result2 = db_query("SELECT n.nid FROM {node} n, {webform_ente_planificador} wep WHERE n.nid = %d AND wep.nid_webform = n.nid AND type = 'webform'", $node->nid);
+  $row2 = db_fetch_object($result2);
+  if($row2 == NULL) {
+    $node->content['#access'] = TRUE;
+  }
+  
+  //esta estructura es para no mostrar la opcion de agregar un comentario.
+  if( $node->content['#access'] == FALSE) {
+	 form_set_error('select', t('Usted no puede acceder este formulario'));
+	 $node->comment = 0; // para no hacer visible la opcion de agregar comentarios
+ }
+ 
+  //esta consulta es para que no esten disponibles la opcion de agregar un comentario como la descripcion de la encuesta si no se posee ninguno de los roles.
+  $consulta = db_query("SELECT rid FROM {webform_roles}  WHERE nid = %d", $node->nid);
+  while ($consulta2 = db_fetch_object($consulta)) {
+    foreach ( $user->roles as $nid=>$rol ) {
+      if($consulta2->rid != $rol) {
+        $node->comment = 0; // para no hacer visible la opcion de agregar comentarios
+        $node->content['body']['#value'] = ''; // para no hacer visible la descripcion de la pagina
+      }
+    }
+  }
+}
+/**
+ *  Creacion del componente ente planificador 
+ */
+
+/**
+* Implements hook_webform_component_info().
+*/
+function entes_encuesta_webform_component_info() {
+  $components = array();
+  $components['ente'] = array(
+    'label' => t('Ente planificador'),
+    'description' => t('Entes planificadores.'),
+    'features' => array(
+    'csv' => TRUE,
+    'email' => TRUE,
+    'email_address' => FALSE,
+    'email_name' => FALSE,
+    'required' => TRUE,
+    'conditional' => TRUE,
+    'title_display' => TRUE,
+    'title_inline' => TRUE,
+    'private' => TRUE,
+    'group' => FALSE,
+    'spam_analysis' => FALSE,
+    'attachment' => FALSE,
+    ),
+  );
+  return $components;
+}
+
+/**
+* Implements _webform_defaults_component().
+*/
+function _webform_defaults_ente() {
+  return array(
+    'name' => '',
+    'form_key' => NULL,
+    'mandatory' => 0,
+    'pid' => 0,
+    'weight' => 0,
+    'value' => '',
+    'extra' => array(
+      'items' => '',
+      'multiple' => NULL,
+      'aslist' => NULL,
+      'optrand' => 0,
+      'other_option' => NULL,
+      'other_text' => t('Other...'),
+      'title_display' => 0,
+      'description' => '',
+      'custom_keys' => FALSE,
+      'options_source' => '',
+      'private' => FALSE,
+    ),
+  );
+}
+
+/**
+ * Implements _webform_edit_component().
+ */
+function _webform_edit_ente($component) {
+  $form = array();
+  $form['extra']['multiple'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Multiple'),
+    '#default_value' => $component['extra']['multiple'],
+    '#description' => t('Check this option if the user should be allowed to choose multiple values.'),
+    '#weight' => 0,
+  );
+  return $form;
+}
+
+/**
+* Render a Webform component to be part of a form.
+*/
+function _webform_render_ente($component, $value = NULL, $filter = TRUE) {
+  $options = entes_encuesta_consulta_entes_planificadores('title');
+   $element = array(
+    '#type' => 'select',
+    '#options' => $options,
+    '#title' => $filter ? _webform_filter_xss($component['name']) : $component['name'],
+    '#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before',
+    '#required' => $component['mandatory'],
+    '#weight' => $component['weight'],
+    '#description' => $filter ? _webform_filter_descriptions($component['extra']['description'], $node) : $component['extra']['description'],
+    '#prefix' => '<div class="webform-component-' . $component['type'] . '" id="webform-component-' . $component['form_key'] . '">',
+    '#suffix' => '</div>',
+    '#theme_wrappers' => array('webform_element_wrapper'),
+    '#pre_render' => array('webform_element_title_display'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#element_validate' => array('entes_encuestas_webform_validate_ente'),
+  );
+// Set the component options.
+  $element['#options'] = $options;
+
+  if (isset($value)) {
+    $element['#default_value'] = $value[0];
+  }
+  if ($component['extra']['multiple']) {
+    // Set display as a checkbox set.
+    $element['#type'] = 'checkboxes';
+    // Drupal 6 hack to properly render on multipage forms.
+    $element['#process'] = array('webform_expand_entes');
+  }
+  else {
+    // Set display as a radio set.
+    $element['#type'] = 'select';
+  }
+  
+  return $element;
+}
+
+/**
+ * Implementacion de webform_expand_entes
+ */
+function webform_expand_entes($element) {
+  // Elements that have a value set are already in the form structure cause
+  // them not to be written when the expand_checkboxes function is called.
+
+  $default_value = array();
+  foreach (element_children($element) as $key) {
+    if (isset($element[$key]['#default_value'])) {
+      $default_value[$key] = $element[$key]['#default_value'];
+      unset($element[$key]);
+    }
+  }
+
+  $element = expand_checkboxes($element);
+
+  // Escape the values of checkboxes.
+  foreach (element_children($element) as $key) {
+    $element[$key]['#return_value'] = check_plain($element[$key]['#return_value']);
+    $element[$key]['#name'] = $element['#name'] . '[' . $element[$key]['#return_value'] . ']';
+    $element[$key]['#value_callback'] = 'webform_checkbox_value';
+    $element[$key]['#pre_render'][] = 'webform_checkbox_prerender';
+  }
+
+  foreach ($default_value as $key => $val) {
+    $element[$key]['#default_value'] = $val;
+  }
+  return $element;
+}
+
+/**
+ * Validacion de las entradas del componente ente planificador.
+ */
+function entes_encuestas_webform_validate_ente($form_element, &$form_state) {
+  $error = array();
+  if ($form_element['#webform_component']['extra']['multiple'] == '1') {
+    $error= $form_element['#value'];
+    if(isset($error)) {
+      if(count($error) > 1) {
+        foreach($error as $valor) {
+          if($valor == 'Ninguno') {
+            form_set_error('select', t('Nos es permitido seleccionar "Ninguno" y "entes planificadores".'));
+          }
+          break;
+        }
+      }
+    }
+  }
+}
+
+/**
+* implementacion de _webform_csv_headers_component.
+* Devuelva el encabezado de este componente que se mostrarÃ¡ en un archivo CSV. 
+* La salida de esta funciÃ³n se mostrarÃ¡ en la pestaÃ±a "Resultados" y luego "Descargar".
+*/
+function _webform_csv_headers_ente($component, $export_options) {
+  $headers = array(
+    0 => array(),
+    1 => array(),
+    2 => array(),
+  );
+  if ($component['extra']['multiple'] && $export_options['select_format'] == 'separate') {
+    $headers[0][] = '';
+    $headers[1][] = $component['name'];
+    $items = entes_encuesta_consulta_entes_planificadores('title');
+    if ($component['extra']['other_option']) {
+      $other_label = !empty($component['extra']['other_text']) ? check_plain($component['extra']['other_text']) : t('Other...');
+      $items[$other_label] = $other_label;
+    }
+    $count = 0;
+    foreach ($items as $key => $item) {
+      // Empty column per sub-field in main header.
+      if ($count != 0) {
+        $headers[0][] = '';
+        $headers[1][] = '';
+      }
+      if ($export_options['select_keys']) {
+        $headers[2][] = $key;
+      }
+      else {
+        $headers[2][] = $item;
+      }
+      $count++;
+    }
+  }
+  else {
+    $headers[0][] = '';
+    $headers[1][] = '';
+    $headers[2][] = $component['name'];
+  }
+  return $headers;
+}
+
+/**
+ * Implements _webform_csv_data_component().
+ * Dar formato a los datos presentados de un componente para la descarga CSV.
+ * La salida de esta funciÃ³n se mostrarÃ¡ en la pestaÃ±a "Resultados" y luego "Descargar". 
+ */
+function _webform_csv_data_ente($component, $export_options, $value) {
+  $options = entes_encuesta_consulta_entes_planificadores('title');
+  $return = array();
+  if ($component['extra']['multiple']) {
+    foreach ($options as $key => $item) {
+      $index = array_search($key, (array) $value);
+      if ($index !== FALSE) {
+        if ($export_options['select_format'] == 'separate') {
+          $return[] = 'X';
+        }
+        else {
+          $return[] = $export_options['select_keys'] ? $key : $item;
+        }
+        unset($value[$index]);
+      }
+      elseif ($export_options['select_format'] == 'separate') {
+        $return[] = '';
+      }
+    }
+    // Any remaining items in the $value array will be user-added options.
+    if ($component['extra']['other_option']) {
+      $return[] = count($value) ? implode(',', $value) : '';
+    }
+  }
+  else {
+    $key = $value[0];
+    if ($export_options['select_keys']) {
+      $return = $key;
+    }
+    else {
+      $return = isset($options[$key]) ? $options[$key] : $key;
+    }
+  }
+  if ($component['extra']['multiple'] && $export_options['select_format'] == 'compact') {
+    $return = implode(',', (array) $return);
+  }
+  return $return;
+}
+/**
+ * Implements _webform_display_ente().
+ * La salida de esta funciÃ³n se mostrarÃ¡ en la pestaÃ±a "Resultados" y luego "EnvÃ­os".
+ */
+function _webform_display_ente($component, $value, $format = 'html') {
+  return array(
+    '#title' => $component['name'],
+    '#weight' => $component['weight'],
+    '#multiple' => $component['extra']['multiple'],
+    '#theme' => 'webform_display_select',
+    '#theme_wrappers' => $format == 'html' ? array('webform_element', 'webform_element_wrapper') : array('webform_element_text'),
+    '#post_render' => array('webform_element_wrapper'),
+    '#format' => $format,
+    '#options' => entes_encuesta_consulta_entes_planificadores('title'),
+    '#value' =>  (array) $value,
+    '#translatable' => array('title', 'options'),
+  );
+
+}
+
+/**
+ * Implements _webform_submit_component().
+ *
+ * Convert FAPI 0/1 values into something saveable.
+ */
+function _webform_submit_ente($component, $value) {
+  // Build a list of all valid keys expected to be submitted.
+  $options = entes_encuesta_consulta_entes_planificadores('title');
+  $return = NULL;
+  if (is_array($value)) {
+    $return = array();
+    foreach ($value as $key => $option_value) {
+      // Handle options that are specified options.
+      if ($option_value !== '' && isset($options[$option_value])) {
+        // Checkboxes submit a value of FALSE when unchecked. A checkbox with
+        // a value of '0' is valid, so we can't use empty() here.
+        if ($option_value === FALSE && !$component['extra']['aslist'] && $component['extra']['multiple']) {
+          unset($value[$option_value]);
+        }
+        else {
+          $return[] = $option_value;
+        }
+      }
+      // Handle options that are added through the "other" field. Specifically
+      // exclude the "select_or_other" value, which is added by the select list.
+      elseif ($component['extra']['other_option'] && module_exists('select_or_other') && $option_value != 'select_or_other') {
+        $return[] = $option_value;
+      }
+    }
+  }
+  elseif (is_string($value)) {
+    $return = $value;
+  }
+  return $return;
+}
+
+/**
+ * Implements _webform_table_component().
+ * 
+ */
+function _webform_table_ente($component, $value) {
+  $options=entes_encuesta_consulta_entes_planificadores('title');
+  $value = (array) $value;
+  $items = array();
+  // Set the value as a single string.
+  foreach ($value as $option_value) {
+    if ($option_value !== '') {
+      if (isset($options[$option_value])) {
+        $items[] = _webform_filter_xss($options[$option_value]);
+      }
+      else {
+        $items[] = check_plain($option_value);
+      }
+    }
+  }
+
+  return implode('<br />', $items);
+}
+
+/**
+ * Implements _webform_analysis_ente().
+ * 
+ */
+function _webform_analysis_ente($component, $sids = array(), $single = FALSE) {
+   // Generate the list of options.
+  $options = entes_encuesta_consulta_entes_planificadores('title');
+  $show_other_results = $single;
+
+  $sid_placeholders = count($sids) ? array_fill(0, count($sids), "'%s'") : array();
+  $sid_filter = count($sids) ? " AND sid IN (" . implode(",", $sid_placeholders) . ")" : "";
+
+  $option_operator = $show_other_results ? 'NOT IN' : 'IN';
+  $placeholders = count($options) ? array_fill(0, count($options), "'%s'") : array();
+  $query = 'SELECT data, count(data) as datacount ' .
+    ' FROM {webform_submitted_data} ' .
+    ' WHERE nid = %d ' .
+    ' AND cid = %d ' .
+    " AND data != ''" . $sid_filter .
+    ($placeholders ? ' AND data ' . $option_operator . ' (' . implode(',', $placeholders) . ')' : '') .
+    ' GROUP BY data ';
+
+  $count_query = 'SELECT count(*) as datacount ' .
+    ' FROM {webform_submitted_data} ' .
+    ' WHERE nid = %d ' .
+    ' AND cid = %d ' .
+    " AND data != ''" . $sid_filter;
+
+  $result = db_query($query, array_merge(array($component['nid'], $component['cid']), $sids, array_keys($options)));
+  $rows = array();
+  $normal_count = 0;
+  while ($data = db_fetch_array($result)) {
+    $display_option = $single ? $data['data'] : $options[$data['data']];
+    $rows[$data['data']] = array(_webform_filter_xss($display_option), $data['datacount']);
+    $normal_count += $data['datacount'];
+  }
+  if (!$show_other_results) {
+    // Order the results according to the normal options array.
+    $ordered_rows = array();
+    foreach (array_intersect_key($options, $rows) as $key => $label) {
+      $ordered_rows[] = $rows[$key];
+    }
+
+    // Add a row for any unknown or user-entered values.
+    if ($component['extra']['other_option']) {
+      $full_count = db_result(db_query($count_query, array_merge(array($component['nid'], $component['cid']), $sids)));
+      $other_count = $full_count - $normal_count;
+      $display_option = !empty($component['extra']['other_text']) ? check_plain($component['extra']['other_text']) : t('Other...');
+      $other_text = $other_count ? $other_count . ' (' . l(t('view'), 'node/' . $component['nid'] . '/webform-results/analysis/' . $component['cid']) . ')' : $other_count;
+      $ordered_rows[] = array($display_option, $other_text);
+    }
+
+    $rows = $ordered_rows;
+  }  
+  return $rows;
+}
