Index: 0.3-modules/ente_planificador_importar/ente_planificador_importar.module
===================================================================
--- 0.3-modules/ente_planificador_importar/ente_planificador_importar.module	(revision 3ce658b59fe58998978a2a3f0bd605dda4abc52f)
+++ 0.3-modules/ente_planificador_importar/ente_planificador_importar.module	(revision 3f8be1042ab513dad232685f68a0fce69994b5cc)
@@ -24,4 +24,5 @@
   * @author Cenditel Merida - Msc. Juan Vizcarrondo
   * @date 2016-07-07 // (a&#241;o-mes-dia)
+  * @date 2017-03-22 // (a&#241;o-mes-dia)
   * @version 0.2 // (0.1)
   *
@@ -33,5 +34,8 @@
 function ente_planificador_importar_perm() {
   return array(
-    'importar entes planificadores',
+    'access import entes planificadores',
+    'import entes planificadores',
+    'import term',
+    'update proyecto state',
   );
 }
@@ -44,37 +48,67 @@
   $items['ente_planificador_importar'] = array(
     'title' => 'Importar Entes Planificadores',
+    'page callback' => '_ente_planificador_importar_listar',
+    'access arguments' => array('access import entes planificadores'),
+    'type' => MENU_NORMAL_ITEM,
+  );
+  $items['ente_planificador_importar/entes'] = array(
+    'title' => 'Importar Entes Planificadores',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('ente_planificador_importar_form'),
-    'access arguments' => array('importar entes planificadores'),
+    'access arguments' => array('import entes planificadores'),
     'type' => MENU_CALLBACK,
   );
-/*
-  $items['ente_planificador_importar/execute'] = array(
-    'title' => 'Importar entes',
-    'page callback' => '_ente_planificador_importar_execute',
-    'page arguments' => array(2),
-    'access arguments' => array('importar entes planificadores'),
-    'type' => MENU_CALLBACK,
-  );
-*/
   $items['ente_planificador_importar/terminos'] = array(
     'title' => 'Importar Terminos',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('ente_planificador_importar_terminos_form'),
-    'access arguments' => array('importar entes planificadores'),
+    'access arguments' => array('import term'),
     'type' => MENU_CALLBACK,
   );
+  $items['ente_planificador_importar/estadoproyecto'] = array(
+    'title' => 'Modificar estado de poyectos',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('ente_planificador_importar_aprobar_proyectos_form'),
+    'access arguments' => array('update proyecto state'),
+    'type' => MENU_CALLBACK,
+  );
+
+  return $items;
+}
+
 /*
-  $items['ente_planificador_importar/terminos/execute'] = array(
-    'title' => 'Importar terminos',
-    'page callback' => '_ente_planificador_importar_terminos_execute',
-    'page arguments' => array(3),
-    'access arguments' => array('importar entes planificadores'),
-    'type' => MENU_CALLBACK,
-  );
-*/
-
-  return $items;
-}
+ * Implementation of _ente_planificador_importar_listar()
+ * Muestra las opciones de importacion disponibles
+ */
+function _ente_planificador_importar_listar() {
+  $links = array();
+  drupal_alter('ente_planificador_importar_links', $links);
+  return theme('item_list', $links);
+}
+
+/*
+ * Implementation of hook_ente_planificador_importar_links_alter()
+ */
+function ente_planificador_ente_planificador_importar_links_alter(&$links) {
+  if (user_access('import entes planificadores')) {
+    $links['entes'] = array(
+      'data' => l(t('Importar Entes Planificadores'), 'ente_planificador_importar/entes'),
+      'class' => 'ente-planificador-importar-entes', 
+    );
+  }
+  if (user_access('import term')) {
+    $links['term'] = array(
+      'data' => l(t('Importar terminos'), 'ente_planificador_importar/terminos'),
+      'class' => 'ente-planificador-importar-term', 
+    );
+  }
+  if (user_access('update proyecto state')) {
+    $links['estadoproyecto'] = array(
+      'data' => l(t('Actualizar estado de proyectos'), 'ente_planificador_importar/estadoproyecto'),
+      'class' => 'ente-planificador-importar-estado-proyecto', 
+    );
+  }
+}
+
 
 /**
@@ -397,6 +431,6 @@
                 $tipo = 'email';
               }
-              if ($field['type'] == 'email') {
-                $tipo = 'email';
+              if ($field['type'] == 'link') {
+                $tipo = 'link';
               }
               if ($field['type'] == 'content_taxonomy') {
@@ -423,5 +457,5 @@
       }
       batch_set($batch);
-      batch_process('ente_planificador_importar');
+      batch_process('ente_planificador_importar/entes');
     }
     else {
@@ -615,2 +649,159 @@
   return $fathers;
 }
+
+
+/**
+ * Implementation of ente_planificador_importar_aprobar_proyectos_form().
+ * Form to load cvs file and setting in proyectos estate update 
+ */
+function ente_planificador_importar_aprobar_proyectos_form() {
+  $form = array();
+  // If this #attribute is not present, upload will fail on submit
+  $form['#attributes']['enctype'] = 'multipart/form-data';
+  $form['file_import_proyectos'] = array(
+    '#title' => t('Proyectos a aprobar'),
+    '#type'  => 'file',
+    '#description' => t('Archivo cvs con el contenido de los proyectos a aprobar'),
+  );
+  $options = array();
+  for($i = 0;$i < 11; $i++) {
+    if (!$i) {
+      $options[$i] = t('N/A');
+    }
+    else {
+      $options[$i] = t('Fila') . ' ' . $i;
+    }
+  }
+  $form['sipes'] = array(
+    '#type' => 'select',
+    '#title' => t('CÃ³digo SIPES del proyecto'),
+    '#options' => $options,
+    '#description' => t("La fila donde se encuentra el cÃ³digo SIPES del proyecto."),
+    '#required' => TRUE,
+  );
+  $estados = _proyectos_operativos_reformula_obtiene_estados();
+  $form['workflow'] = array(
+    '#type' => 'select',
+    '#title' => t('Nuevo estado del proyecto'),
+    '#options' => $estados['states'],
+    '#description' => t("Seleccione el nuevo estado que se colocara a los proyectos contenidos en el archivo de importaciÃ³n."),
+    '#required' => TRUE,
+  );
+  $form['encabezado'] = array(
+    '#title' => 'Primera columna como encabezado',
+    '#type' => 'checkbox',
+    '#return_value' => '1',
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => 'Submit',
+  );
+  return $form;
+}
+
+
+/**
+ * Implementation of ente_planificador_importar_aprobar_proyectos_form_submit().
+ * Submit cvs file in proyectos estate update
+ */
+function ente_planificador_importar_aprobar_proyectos_form_submit($form, &$form_state) {
+  global $user;
+  $validators = array('file_validate_extensions' => array('csv'));
+  // Check for a new uploaded file.
+  $file = file_save_upload('file_import_proyectos', $validators);
+  if (isset($file)) {
+    // File upload was attempted.
+    if ($file) {
+      // Put the temporary file in form_values so we can save it on submit.
+      $csv = $file->filepath;
+      $file = fopen($csv, 'r');
+      $time = time();
+      $i = 1;
+      $datas = array();
+      $batch = array(
+        'title' => t('Importing proyectos ...', array('@format' => $format)),
+        'operations' => array(),
+        'init_message' => t('Commencing'),
+        'progress_message' => t('Processed @current out of @total.'),
+        'error_message' => t('An error occurred during processing'),
+        'finished' => '_batch_proyecto_operativo_cambiar_estado_importar_finished',
+      );
+      while (($data = fgetcsv($file)) !== FALSE) {
+        $sipes = check_plain($data[$form_state['values']['sipes'] - 1]);
+        if ($sipes != '') {
+          $proyecto = array(
+            'sipes' => $sipes, // codigo sipes
+            'workflow' => $form_state['values']['workflow'], // workflow
+            'workflows' => $form['workflow']['#options'], // workflow options
+          );
+          if (!($form_state['values']['encabezado'] && $i == 1)) {
+            $batch['operations'][] = array('_batch_proyecto_operativo_cambiar_estado_importar', array($proyecto));
+          }
+          $i++;
+        }
+      }
+      batch_set($batch);
+      batch_process('ente_planificador_importar/estadoproyecto');
+    }
+    else {
+
+      // File upload failed.
+      form_set_error('file_import_proyectos', t('The proyectos file could not be uploaded.'));
+    }
+  }
+}
+
+
+/**
+ * Implementation of _batch_proyecto_operativo_cambiar_estado_importar().
+ * Update state proyectos (used in ente_planificador_importar_aprobar_proyectos_form_submit)
+ * Batch run callback  
+ */
+function _batch_proyecto_operativo_cambiar_estado_importar($proyecto, &$context) {
+  $context['message'] = t('Now processing proyecto: %submission', array('%submission' => check_plain($proyecto['sipes'])));
+  $query = db_query("SELECT nid FROM {node} WHERE title = '%s'", $proyecto['sipes']);
+  $proyecto_nid = db_fetch_object($query);
+  if ($proyecto_nid && $proyecto_nid->nid) {
+    $node = node_load($proyecto_nid->nid);
+    if ($node->nid) {
+      if ($node->_workflow != $proyecto['workflow']) {
+        $context['results'][] = t('Actualizado el proyecto @proyecto desde el estado @ant al @prox ', array('@proyecto' => $proyecto['sipes'], '@ant' => $proyecto['workflows'][$node->_workflow], '@prox' => $proyecto['workflows'][$proyecto['workflow']]));
+        //$node->_workflow = $proyecto['workflow'];
+        $node->revision = 1;
+        $texto = t('Se cambio el proyecto @nombre del estado @estado al @estado_next', array('@nombre' => $node->title, '@estado' => $proyecto['workflows'][$node->_workflow], '@estado_next' => $proyecto['workflows'][$proyecto['workflow']]));
+        $node->log = $texto;
+        workflow_execute_transition($node, $proyecto['workflow'], $texto, TRUE);
+        //$node->_workflow = $proyecto['workflow'];
+        node_save($node);
+      }
+      else {
+        $context['results'][] = t('El proyecto @proyecto ya se encuentra en el estado @prox ', array('@proyecto' => $proyecto['sipes'], '@prox' => $proyecto['workflows'][$proyecto['workflow']]));
+      }
+    }
+    else {
+      $context['results'][] = t('No se encontro el proyecto @proyecto', array('@proyecto' => $proyecto['sipes']));
+    }
+  }
+  else {
+    $context['results'][] = t('No se encontro el proyecto @proyecto', array('@proyecto' => $proyecto['sipes']));
+  }
+}
+
+/**
+ * Implementation of _batch_ente_planificador_importar_finished().
+ * Batch 'finished' callback 
+ */
+function _batch_proyecto_operativo_cambiar_estado_importar_finished($success, $results, $operations) {
+  if ($success) {
+    // Here we do something meaningful with the results.
+    $message = t('!count_webform entes processed', array('!count_webform' => '<pre>' . print_r($results, TRUE) . '</pre>'));
+  }
+  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);
+}
+
