0) { // If jquery_update's preprocess function is there already, remove it. if ($key = array_search('politicas_direccionales_preprocess_page', $theme_registry['page']['preprocess functions'])) { unset($theme_registry['page']['preprocess functions'][$key]); } } // Now tack it on at the end so it runs after everything else. $theme_registry['page']['preprocess functions'][] = 'politicas_direccionales_preprocess_page'; } } /** * Implementation of moduleName_preprocess_hook(). * * Replace Drupal core's jquery.js with the new one from jQuery Update. */ function politicas_direccionales_preprocess_page(&$variables) { if (!empty($variables['scripts'])) { //cambiar el archivo ahah.js para que funcione correctamente los nuevos botones $scripts = drupal_add_js(); $ahah_path = 'misc/ahah.js'; if (isset($scripts['module'][$ahah_path])) { $politicas_direccionales_path = drupal_get_path('module', 'politicas_direccionales') .'/replace/ahah.js'; $scripts['module'][$politicas_direccionales_path] = $scripts['module'][$ahah_path]; unset($scripts['module'][$ahah_path]); $variables['scripts'] = drupal_get_js('header', $scripts); } } } /* * Implementation of hook_ente_procesos_alter() */ function politicas_direccionales_ente_procesos_alter(&$procesos, $type) { if ($type == 'status') { //SE DEFINE EL STATUS DE POLITICAS DIRECCIONALES $procesos['politicas_direccionales'] = array( 'title' => t('Definición de Póliticas Direccionales'), 'description' => t('Definición de Póliticas Direccionales'), 'weight' => -9, ); } else { // PROCESO DE DEFINIR POSIBLES POLITICAS DIRECCIONALES $procesos['posibles'] = array( 'title' => t('Planteamiento de posibles Póliticas Direccionales'), 'description' => t('Permite agregar, modificar y eliminar posibles póliticas direccionales'), 'message' => 'Se podrá registrar y/o modificar los posibles póliticas direccionales desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar los posibles póliticas direccionales no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); // PROCESO DE IDENTIFICAR INVIABILIDAD POSIBLES POLITICAS DIRECCIONALES $procesos['inviabilidad'] = array( 'title' => t('Identificar inviabilidad de Póliticas Direccionales'), 'description' => t('Permite Identificar inviabilidad de Póliticas Direccionales'), 'message' => 'Se podrá registrar y/o modificar Identificar inviabilidad de Póliticas Direccionales desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar Identificar inviabilidad de Póliticas Direccionales no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); // PROCESO DE CONSTRUIR VIABILIDAD POSIBLES POLITICAS DIRECCIONALES $procesos['viabilidad'] = array( 'title' => t('Construir viabilidad de Póliticas Direccionales'), 'description' => t('Permite Construir viabilidad de Póliticas Direccionales'), 'message' => 'Se podrá registrar y/o modificar Construir viabilidad de Póliticas Direccionales desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar Construir viabilidad de Póliticas Direccionales no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); // PROCESO DE SELECCIONAR POLITICAS DIRECCIONALES $procesos['posibles_seleccionar'] = array( 'title' => t('Seleccionar Póliticas Direccionales'), 'description' => t('Permite seleccionar Póliticas Direccionales'), 'message' => 'Se podrá registrar y/o modificar la selección de los Póliticas Direccionales desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar la selección de los Póliticas Direccionales no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); // PROCESO DE DEFINIR ESTRATEGIAS $procesos['estrategias'] = array( 'title' => t('Definición de Estrategias'), 'description' => t('Permite describir Estrategias'), 'message' => 'Se podrá registrar y/o modificar la Definición de Estrategias desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar Definición de Estrategias no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); // PROCESO DE DEFINIR ARTICULACION DE ACTORES MICRO EN BASE A ESTRATEGIAS $procesos['articulacion_estrategias'] = array( 'title' => t('Articulación de actores por estrategias'), 'description' => t('Permite articulación de actores por estrategias'), 'message' => 'Se podrá registrar y/o modificar la articulación de actores por estrategias desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar la articulación de actores por estrategias no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); /* // PROCESO DE REFORMULACION ESTRATEGIAS $procesos['reformulacion_estrategias'] = array( 'title' => t('Reformulación de Estrategias'), 'description' => t('Permite Reformulación Estrategias'), 'message' => 'Se podrá registrar y/o modificar la Reformulación de Estrategias desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar la Reformulación de Estrategias no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); */ // PROCESO DE SELECCIONAR ESTRATEGIAS $procesos['seleccionar_estrategias'] = array( 'title' => t('Seleccionar estrategias'), 'description' => t('Permite seleccionar estrategias'), 'message' => 'Se podrá registrar y/o modificar la selección estrategias desde %fecha hasta la fecha %fecha1', 'message_expire' => 'Registrar y/o modificar la selección estrategias no se encuentra disponible, se podra realizar desde %fecha hasta la fecha %fecha1)', 'weight' => 3, 'proceso' => 'politicas_direccionales', ); } } /* * Implementation of hook_menu() */ function politicas_direccionales_menu() { $items = array(); // PROCESO DE POSIBLES POLITICAS DIRECCIONALES $items['planificacion/%ente_planificador_menu/politicas'] = array( 'title' => t('Definición de Políticas Direccionales'), 'page callback' => 'ente_planificador_definir_politicas', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -7, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/posibles'] = array( 'title' => t('Posibles Políticas Direccionales'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); $items['planificacion/%ente_planificador_menu/politicas/posibles/registrar'] = array( 'title' => t('Registrar Políticas Direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_form', 1), 'access callback' => 'ente_planificador_usuario_tiene_politicas_registrar', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/posibles/%posible_politica/editar'] = array( 'title' => t('Modificar Políticas Direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_politicas_registrar', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/posibles/%posible_politica/remove'] = array( 'title' => t('Eliminar Políticas Direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_remove_posible_politica_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_politicas_registrar', 'access arguments' => array(1), 'weight' => -4, 'type' => MENU_CALLBACK, ); $items['planificacion/%ente_planificador_menu/politicas/posibles/buscar'] = array( 'title' => t('Buscar Posibles Políticas Direccionales'), 'page callback' => 'politicas_direccionales_buscar_posibles', 'access callback' => 'ente_planificador_usuario_es_macro', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/posibles/listar'] = array( 'title' => t('Consultar Políticas Direccionales'), 'page callback' => 'ente_planificador_definir_politicas_listar', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); // PROCESO DE SELECCIONAR POLITICAS DIRECCIONALES $items['planificacion/%ente_planificador_menu/politicas/seleccionar'] = array( 'title' => t('Políticas Direccionales'), 'page callback' => 'ente_planificador_seleccionar_politicas', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/ver'] = array( 'title' => t('Políticas Direccionales'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/viabilidad'] = array( 'title' => t('Identificar inviabilidad de posibles políticas'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_indentificar_viabilidad_form', 1), 'access callback' => 'ente_planificador_usuario_tiene_identificar_politicas', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/inviables'] = array( 'title' => t('Consultar posibles políticas inviables'), 'page callback' => 'ente_planificador_definir_politicas_listar_inviables', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/politicas'] = array( 'title' => t('Seleccionar políticas direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_seleccionar_politicas_form', 1), 'access callback' => 'ente_planificador_usuario_tiene_seleccionar_politicas', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/consultar'] = array( 'title' => t('Consultar posibles políticas inviables'), 'page callback' => 'politicas_direccionales_seleccionar_politicas_listar', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/buscar'] = array( 'title' => t('Consultar posibles políticas inviables'), 'page callback' => 'politicas_direccionales_buscar_seleccion', 'page arguments' => array(1), 'access callback' => 'ente_planificador_usuario_es_macro', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/%posible_politica/editar_accion'] = array( 'title' => t('Modificar Políticas Direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_accion_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_politicas_viabilidad', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/seleccionar/%posible_politica/remove_accion'] = array( 'title' => t('Eliminar Políticas Direccionales'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_remove_accion_posible_politica_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_politicas_viabilidad', 'access arguments' => array(1), 'weight' => -4, 'type' => MENU_CALLBACK, ); // PROCESO DE ESTRATEGIAS $items['planificacion/%ente_planificador_menu/politicas/estrategias'] = array( 'title' => t('Estrategias'), 'page callback' => 'ente_planificador_estrategias_politicas', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -7, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/registrar'] = array( 'title' => t('Registrar Estrategia'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_estrategia_form', 1), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_politicas_registrar', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/listar'] = array( 'title' => t('Posibles Estrategias'), 'page callback' => 'politicas_direccionales_estrategias_posibles_listar', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); /* $items['planificacion/%ente_planificador_menu/politicas/estrategias/reformular'] = array( 'title' => t('Posibles Estrategias'), 'page callback' => 'politicas_direccionales_estrategias_posibles_listar_reformular', 'page arguments' => array(1), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_politicas_reformular', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/%posible_estrategia/reformular'] = array( 'title' => t('Modificar estrategia'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_estrategia_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_puede_reformular', 'access arguments' => array(1, 4), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); */ /* $items['planificacion/%ente_planificador_menu/politicas/estrategias/identificar'] = array( 'title' => t('Identificar posible articulación'), 'page callback' => 'politicas_direccionales_estrategias_posibles_identificar', 'page arguments' => array(1), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_politicas_puede_articular', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/consultar_articulacion'] = array( 'title' => t('Identificar posible articulación'), 'page callback' => 'politicas_direccionales_estrategias_consultar_articulaciones', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/consultar_articulacion_micro'] = array( 'title' => t('Identificar posible articulación'), 'page callback' => 'politicas_direccionales_estrategias_consultar_articulaciones_actores_micro', 'page arguments' => array(1), 'access callback' => 'ente_planificador_tiene_articulacion', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); */ $items['planificacion/%ente_planificador_menu/politicas/estrategias/seleccionar'] = array( 'title' => t('Identificar posible articulación'), 'page callback' => 'politicas_direccionales_estrategias_seleccionar_estrategias', 'page arguments' => array(1), 'access callback' => 'ente_planificador_usuario_puede_estrategias_seleccionar', 'access arguments' => array(1), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/pol_estr'] = array( 'title' => t('Identificar posible articulación'), 'page callback' => 'politicas_direccionales_mostrar_estrategias_por_politicas', 'page arguments' => array(1), 'access arguments' => array('ver planificador'), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/%politica_seleccionada/seleccionar'] = array( 'title' => t('Seleccionar estrategias para la política'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_seleccionar_estrategias_form', 1, 4), 'access callback' => 'ente_planificador_usuario_puede_estrategias_seleccionar_politicas', 'access arguments' => array(1, 4), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/%posible_estrategia/editar'] = array( 'title' => t('Modificar estrategia'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_agregar_estrategia_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_puede_editar', 'access arguments' => array(1, 4), 'weight' => -8, 'type' => MENU_LOCAL_TASK, ); $items['planificacion/%ente_planificador_menu/politicas/estrategias/%posible_estrategia/remove'] = array( 'title' => t('Eliminar estrategia'), 'page callback' => 'drupal_get_form', 'page arguments' => array('politicas_direccionales_remove_estrategia_posible_politica_form', 1, 4), 'access callback' => 'ente_planificador_usuario_tiene_estrategias_puede_editar', 'access arguments' => array(1, 4), 'weight' => -4, 'type' => MENU_CALLBACK, ); //MI PLANIFICACION $items['mi_ente_planificador/planificacion/politicas'] = array( 'title' => t('Politicas Direccionales'), 'page callback' => 'mis_entes_planificadores_planificacion_politicas', 'access callback' => 'ente_planificador_usuario_ve_ente', 'type' => MENU_LOCAL_TASK, ); $items['politicas_direccionales_agregar_js'] = array( 'title' => 'JS utilities', 'page callback' => 'politicas_direccionales_agregar_js', 'access arguments' => array('ver planificador'), 'type' => MENU_CALLBACK, ); return $items; } /** * Implementation of posible_politica_load(). * Leer una posible politica direccional. */ function posible_politica_load($nid = 0) { if ($nid && is_numeric($nid)) { $node_load = node_load($nid); if ($node_load && $node_load->type == 'politicas_direccionales') { return $node_load; } } return FALSE; } /** * Implementation of politica_seleccionada_load(). * Leer una politica direccional. */ function politica_seleccionada_load($nid = 0) { if ($nid && is_numeric($nid)) { $node_load = node_load($nid); if ($node_load && $node_load->type == 'politicas_direccionales' && $node_load->field_politicas_seleccionada[0]['value'] = 'SÍ') { return $node_load; } } return FALSE; } /** * Implementation of posible_estrategia_load(). * Leer una posible estrategia. */ function posible_estrategia_load($nid = 0) { if ($nid && is_numeric($nid)) { $node_load = node_load($nid); if ($node_load && $node_load->type == 'estrategia') { return $node_load; } } return FALSE; } /** * Implementation of politicas_direccionales_buscar_posibles(). * Cargar la vista de buscar posibles politicas direccionales. */ function politicas_direccionales_buscar_posibles() { $output = ''; $name = 'posibles_politicas'; $display_id = 'default'; if ($view = views_get_view($name)) { if ($view->access($display_id)) { $output = $view->execute_display($display_id); $view->destroy(); } $view->destroy(); } return $output; } /** * Implementation of politicas_direccionales_buscar_seleccion(). * Cargar la vista de buscar politicas direccionales. */ function politicas_direccionales_buscar_seleccion() { $output = ''; $name = 'politicas_direccionales'; $display_id = 'default'; if ($view = views_get_view($name)) { if ($view->access($display_id)) { $output = $view->execute_display($display_id); $view->destroy(); } $view->destroy(); } return $output; } /* * politicas_direccionales_agregar_js * Generates AJAX responses of politicas direccionales */ function politicas_direccionales_agregar_js($tipo = '', $requ = 0) { if ($tipo == 'ente' && is_numeric($requ)) { $form_state = array('submitted' => FALSE); $form_build_id = $_POST['form_build_id']; // Add the new element to the stored form. Without adding the element to the // form, Drupal is not aware of this new elements existence and will not // process it. We retreive the cached form, add the element, and resave. $form = form_get_cache($form_build_id, $form_state); $cantidad = intval($_POST['cantidad_ente_' . $requ]) > 0 ? intval($_POST['cantidad_ente_' . $requ]) : 0; $cantidad++; $new_form = array(); for ($j = 0; $j < $cantidad; $j++) { $valor = intval($_POST['entes_' . $requ . '_' . $j]) > 0 ? intval($_POST['entes_' . $requ . '_' . $j]) : 0; $new_form['entes_' . $requ . '_' . $j] = array( '#type' => 'select', '#default_value' => $valor, '#options' => $form['#entes'], '#multiple' => FALSE, '#title' => t('Actor'), '#prefix' => '', '#attributes' => array('class' => 'ente-actores ente-actores-' . $requ . '_' . $j . ' actores-requerimientos actores-requerimiento-' . $requ, 'requerimiento' => $requ, 'cant_actor' => $j), ); $valor = intval($_POST['otro_' . $requ . '_' . $j]) > 0 ? intval($_POST['entes_' . $requ . '_' . $j]) : ''; $new_form['otro_' . $requ . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Nombre del Actor'), '#required' => FALSE, '#size' => 10, '#default_value' => $valor, '#attributes' => array('class' => 'ente-otros ente-otros-' . $requ . '_' . $j . ' otros-requerimientos otros-requerimiento-' . $requ, 'requerimiento' => $requ, 'cant_actor' => $j), ); $valor = floatval($_POST['grado_' . $requ . '_' . $j]) > 0 ? floatval($_POST['grado_' . $requ . '_' . $j]) : 0; $new_form['grado_' . $requ . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Grado de Control'), '#required' => FALSE, '#size' => 10, '#default_value' => 'texto', '#suffix' => '', '#element_validate' => array('politicas_direccionales_number_float_validate',), ); } $new_form['cantidad_ente_' . $requ] = array('#type' => 'hidden', '#value' => $cantidad); $form['campo_requerimiento']['politica_' . $requ]['actores'] = $new_form; form_set_cache($form_build_id, $form, $form_state); $form += array( '#post' => $_POST, '#programmed' => FALSE, ); // Rebuild the form. $form = form_builder($_POST['form_id'], $form, $form_state); // Render the new output. $new_form = $form['campo_requerimiento']['politica_' . $requ]['actores']; unset($new_form['#prefix'], $new_form['#suffix']); // Prevent duplicate wrappers. $output = drupal_render($new_form); $output .= ''; print drupal_to_js(array('data' => $output, 'status' => true)); exit(); } elseif ($tipo == 'requerimiento'){ $form_state = array('submitted' => FALSE); $form_build_id = $_POST['form_build_id']; // Add the new element to the stored form. Without adding the element to the // form, Drupal is not aware of this new elements existence and will not // process it. We retreive the cached form, add the element, and resave. $form = form_get_cache($form_build_id, $form_state); $cantidad_requerimientos = intval($_POST['cantidad_requerimientos']) > 0 ? intval($_POST['cantidad_requerimientos']) : 0; $cantidad_requerimientos++; $new_form = array(); for ($i = 0; $i < $cantidad_requerimientos; $i++) { $new_form['politica_' . $i] = array( '#type' => 'fieldset', '#title' => t('Requerimiento %numero', array('%numero' => ($i + 1))), ); $new_form['politica_' . $i]['req_' . $i] = array( '#type' => 'textfield', '#title' => t('Requerimiento'), '#required' => TRUE, '#default_value' => '', '#prefix' => '', ); $new_form['politica_' . $i]['tipo_' . $i] = array( '#type' => 'select', '#default_value' => 0, '#options' => $form['#grados'], '#multiple' => FALSE, '#title' => t('Tipo'), ); $new_form['politica_' . $i]['actores'] = array( '#type' => 'fieldset', '#title' => t('Actores'), ); $cantidad_entes = intval($_POST['cantidad_ente_' . $i]) > 0 ? intval($_POST['cantidad_ente_' . $i]) : 1; for ($j = 0; $j < $cantidad_entes; $j++) { $new_form['politica_' . $i]['actores']['entes_' . $i . '_' . $j] = array( '#type' => 'select', '#default_value' => 0, '#options' => $form['#entes'], '#multiple' => FALSE, '#title' => t('Actor'), '#prefix' => '', '#attributes' => array('class' => 'ente-actores ente-actores-' . $i . '_' . $j . ' actores-requerimientos actores-requerimiento-' . $i, 'requerimiento' => $i, 'cant_actor' => $j), ); if ($j == 0) { $new_form['politica_' . $i]['actores']['entes_' . $i . '_' . $j]['#prefix'] .= '
'; } $new_form['politica_' . $i]['actores']['otro_' . $i . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Nombre del Actor'), '#required' => FALSE, '#size' => 10, '#default_value' => '', '#attributes' => array('class' => 'ente-otros ente-otros-' . $i . '_' . $j . ' otros-requerimientos otros-requerimiento-' . $i, 'requerimiento' => $i, 'cant_actor' => $j), ); $new_form['politica_' . $i]['actores']['grado_' . $i . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Grado de Control'), '#required' => FALSE, '#size' => 10, '#default_value' => 0, '#suffix' => '', '#element_validate' => array('politicas_direccionales_number_float_validate',), ); } $new_form['politica_' . $i]['actores']['cantidad_ente_' . $i] = array('#type' => 'hidden', '#value' => $cantidad_entes, '#suffix' => '
'); $new_form['politica_' . $i]['actores']['agrega_' . $i] = array( '#type' => 'submit', '#default_value' => t('Agregar otro ente'), '#ahah' => array( 'path' => 'politicas_direccionales_agregar_js/ente/' . $i, 'wrapper' => 'nuevoente_' . $i, 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); } $new_form['cantidad_requerimientos'] = array('#type' => 'hidden', '#value' => $cantidad_requerimientos); $form['campo_requerimiento'] = $new_form; form_set_cache($form_build_id, $form, $form_state); $form += array( '#post' => $_POST, '#programmed' => FALSE, ); // Rebuild the form. $form = form_builder($_POST['form_id'], $form, $form_state); // Render the new output. $new_form = $form['campo_requerimiento']; unset($new_form['#prefix'], $new_form['#suffix']); // Prevent duplicate wrappers. $output = drupal_render($new_form); $javascript = drupal_add_js(NULL, NULL, 'header'); $settings = call_user_func_array('array_merge_recursive', $javascript['setting']); // we bind form elements using a new Drupal.settings for AHAH fields $output .= ''; print drupal_to_js(array('data' => $output, 'status' => true, 'settings' => array('ahah' => $settings['ahah']))); exit(); } print ''; exit(); } /** * Implementation of politicas_direccionales_indentificar_viabilidad_form(). * Formulario para identificar viabilidad de posibles politicas direccionales */ function politicas_direccionales_indentificar_viabilidad_form($form_state, $ente_planificador) { global $user; drupal_set_title(t('Identificar inviabilidad de posibles políticas')); $ente = usuario_tiene_ente($user->uid); $mi_fecha1 = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $mi_fecha = ente_planificador_user_acceso_proceso("viabilidad", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("viabilidad", $ente_planificador->tipo); } else { if ($ente->nid == $ente_planificador->nid) { muestra_mensaje("viabilidad", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $ente->nid == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_planificador = node_load($macro); } } $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c.field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d AND n.status > 0"; $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha1[0]; $sql_variables[] = $mi_fecha1[1] + 86399; $result = db_query($sql_query, $sql_variables); $politicas = array(); while($politica = db_fetch_object($result)) { $politica_Load = node_load($politica->nid); $politicas[$politica->nid] = $politica_Load->nid? $politica_Load->body: $politica->title; } $form = array(); $form['#ente_planificador'] = $ente_planificador; $output_politicas = count($politicas) ? theme('item_list', $politicas) : t('No existen políticas registradas.'); $form['politicas'] = array( '#value' => $output_politicas, ); $form['#politicas'] = $politicas; if ($ente_has_acceso && count($politicas)) { $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 100, ); } $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /** * Implementation of politicas_direccionales_indentificar_viabilidad_form_submit(). * Procesar el formulario para identificar viabilidad de posibles politicas direccionales */ function politicas_direccionales_indentificar_viabilidad_form_submit($form, &$form_state) { $export_users = array(); if (!$_REQUEST['destination']) { $form_state['redirect'] = 'planificacion/' . $form['#ente_planificador']->nid . '/politicas/seleccionar/inviables'; } $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancel')) { return; } if (count($form['#politicas'])) { batch_politicas_direccionales_indentificar_viabilidad($form['#ente_planificador'], $form['#politicas'], $form_state['redirect']); } } /** * Implementation of batch_politicas_direccionales_indentificar_viabilidad(). * batch init identificar viabilidad */ function batch_politicas_direccionales_indentificar_viabilidad($ente_planificador = 0, $politicas = array(), $redirect = ''){ if (!is_array($politicas) || !count($politicas)) { return FALSE; } if ($ente_planificador) { $step = 1; $batch = array( 'title' => t('Calculando políticas inviables ...'), 'operations' => array(), 'init_message' => t('Comenzando'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('An error occurred during processing'), 'finished' => '_direct_politicas_direccionales_indentificar_viabilidad_finished', ); $count_politicas = count($politicas); foreach ($politicas as $nid => $politica_title) { $batch['operations'][] = array('_politicas_direccionales_indentificar_viabilidad', array($ente_planificador, $nid, $count_politicas)); } batch_set($batch); batch_process($redirect); } } /** * Implementation of _politicas_direccionales_indentificar_viabilidad(). * Batch callback to identificar viabilidad */ function _politicas_direccionales_indentificar_viabilidad($ente_planificador, $nid, $max, &$context) { if ($nid && is_numeric($nid)) { $politica = node_load($nid); if ($politica->type = 'politicas_direccionales') { module_load_include('inc', 'node', 'node.pages'); //calcular que la suma de los porcentajes de cada necesidad sume 100 politicas_direccionales_load_requerimientos($politica); $cantidad_requerimientos = count($politica->requerimientos); $req_band = $cantidad_requerimientos ? TRUE : FALSE; for ($i = 0; $i < $cantidad_requerimientos; $i++) { $suma = 0; $cantidad_entes = count($politica->requerimientos[$i]['entes']); $cantidad_entes = $cantidad_entes ? $cantidad_entes : 1; for ($j = 0; $j < $cantidad_entes; $j++) { $suma += $politica->requerimientos[$i]['entes'][$j]['grado']; } if ($suma < 100) { $req_band = FALSE; break; } } $politica->field_politicas_viable = array(); $politica->field_politicas_viable[] = array('value' => $req_band ? 'SÍ' : 'NO'); $politica->field_politicas_seleccionada = array(); $politica->field_politicas_seleccionada[] = array('value' => 'NO'); node_object_prepare($politica); $politica->revision = 1; $politica->log = t('Calculo de viabilidad'); node_save($politica); //se agregan los requerimientos a la nueva version del nodo db_query("UPDATE {politicas_ente} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); db_query("UPDATE {politicas_ente_actor} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); $context['results'][] = t('La Política direccional "@title" se ha calculado su viabilidad (Viable: @calc_viab).', array('@title' => $politica->body, '@calc_viab' => $politica->field_politicas_viable[0]['value'])); $context['message'] = t('La Política direccional "@title" se ha calculado su viabilidad (Viable: @calc_viab).', array('@title' => $politica->body, '@calc_viab' => $politica->field_politicas_viable[0]['value'])); } else { $context['results'][] = t('El nodo "@title" no es una Política direccional (No se ha calculado su viabilidad).', array('@title' => $politica->body)); $context['message'] = t('El nodo "@title" no es una Política direccional (No se ha calculado su viabilidad).', array('@title' => $politica->body)); } } else { $context['results'][] = t('La Política direccional @nid no existe (No se ha calculado su viabilidad).', array('@nid' => $nid)); $context['message'] = t('La Política direccional @nid no existe (No se ha calculado su viabilidad).', array('@nid' => $nid)); } } /** * Implementation of _direct_politicas_direccionales_indentificar_viabilidad_finished(). * Batch 'finished' callback */ function _direct_politicas_direccionales_indentificar_viabilidad_finished($success, $results, $operations) { if ($success) { // Here we do something meaningful with the results. $message = t('%count políticas direccionales han sido procesadas: !items', array('%count' => count($results), '!items' => theme('item_list', $results))); } 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(filter_xss($message)); } /** * Implementation of politicas_direccionales_seleccionar_politicas_form(). * Formulario para seleccionar politicas direccionales */ function politicas_direccionales_seleccionar_politicas_form($form_state, $ente_planificador) { drupal_set_title(t('Seleccionar políticas direccionales')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("posibles_seleccionar", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_planificador = node_load($macro); } } $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d "; $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = db_query($sql_query, $sql_variables); $politicas = array(); $politicas_loads = array(); $politicas_no_viables = array(); $default = array(); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); if ($politica_load->field_politicas_viable[0]['value'] == 'SÍ' || trim($politica_load->field_politicas_acciones_viab[0]['value']) != '') { $politicas_loads[$politica_load->nid] = $politica_load; $politicas[$politica_load->nid] = $politica_load->body; $default[$politica_load->nid] = $politica_load->politicas_seleccionada[0]['value'] == 'SÍ' ? 1 : 0; } else { $politicas_no_viables[$politica_load->nid] = $politica_load; } } $form = array(); $form['#ente'] = $ente_planificador; $form['#politicas_loads'] = $politicas_loads; $form['#politicas_no_viables'] = $politicas_no_viables; if ($ente_has_acceso && count($politicas)) { $form['politicas_seleccionar'] = array( '#type' => 'checkboxes', '#title' => t('Seleccionar políticas'), '#default_value' => $default, '#options' => $politicas, '#description' => t('Seleccionar las políticas direccionales.'), ); $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 100, ); } $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /** * Implementation of politicas_direccionales_seleccionar_politicas_form_submit(). * Procesar el formulario para seleccionar politicas direccionales */ function politicas_direccionales_seleccionar_politicas_form_submit($form, &$form_state) { $politicas = array(); if (!$_REQUEST['destination']) { $form_state['redirect'] = 'planificacion/' . $form['#ente']->nid . '/politicas/seleccionar/consultar'; } $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancel')) { return; } if (is_array($form_state['values']['politicas_seleccionar']) && count($form_state['values']['politicas_seleccionar'])) { foreach($form_state['values']['politicas_seleccionar'] as $id => $value) { $politicas[$id] = array( 'node' => $form['#politicas_loads'][$id], 'seleccion' => $value, ); } } //se colocan el resto de politicas como no seleccionada if (count($form['#politicas_no_viables'])) { foreach($form['#politicas_no_viables'] as $id => $value) { $politicas[$id] = array( 'node' => $value, 'seleccion' => 0, ); } } if (count($politicas)) { batch_politicas_direccionales_seleccionar_politicas($form['#ente'], $politicas, $form_state['redirect']); } } /** * Implementation of batch_politicas_direccionales_seleccionar_politicas(). * batch init */ function batch_politicas_direccionales_seleccionar_politicas($ente_planificador = 0, $politicas = array(), $redirect = ''){ if (!is_array($politicas) || !count($politicas)) { return FALSE; } if ($ente_planificador) { $step = 1; $batch = array( 'title' => t('Seleccionando políticas direccionales ...'), 'operations' => array(), 'init_message' => t('Comenzando'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('An error occurred during processing'), 'finished' => '_politicas_direccionales_seleccionar_politicas_finished', ); $count_politicas = count($politicas); foreach ($politicas as $politica) { $batch['operations'][] = array('_politicas_direccionales_seleccionar_politicas', array($ente_planificador, $politica, $count_politicas)); } batch_set($batch); batch_process($redirect); } } /** * Implementation of _politicas_direccionales_seleccionar_politicas(). * Batch callback to seleccionar politicas */ function _politicas_direccionales_seleccionar_politicas($ente_planificador, $politica_load, $max, &$context) { if ($politica_load['node'] && $politica_load['node']->nid && $politica_load['node']->type = 'politicas_direccionales') { $politica = node_load($politica_load['node']->nid); if ($politica && $politica->type = 'politicas_direccionales') { module_load_include('inc', 'node', 'node.pages'); $politica->field_politicas_seleccionada = array(); $politica->field_politicas_seleccionada[] = array('value' => $politica_load['seleccion'] ? 'SÍ' : 'NO'); node_object_prepare($politica); $politica->revision = 1; $politica->log = t('Política seleccionada'); node_save($politica); //se agregan los requerimientos a la nueva version del nodo db_query("UPDATE {politicas_ente} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); db_query("UPDATE {politicas_ente_actor} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); $context['results'][] = t('La Política direccional "@title" (ha sido seleccionada: %seleccion).', array('@title' => $politica->body, '%seleccion' => $politica->field_politicas_seleccionada[0]['value'])); $context['message'] = t('La Política direccional "@title" (ha sido seleccionada: %seleccion).', array('@title' => $politica->body, '%seleccion' => $politica->field_politicas_seleccionada[0]['value'])); } else { $context['results'][] = t('El nodo "@title" no es una Política direccional (No ha sido seleccionada).', array('@title' => $politica->body)); $context['message'] = t('El nodo "@title" no es una Política direccional (No ha sido seleccionada).', array('@title' => $politica->body)); } } else { $context['results'][] = t('La Política direccional @nid no existe (No ha sido seleccionada).', array('@nid' => $nid)); $context['message'] = t('La Política direccional @nid no existe (No ha sido seleccionada).', array('@nid' => $nid)); } } /** * Implementation of _politicas_direccionales_seleccionar_politicas_finished(). * Batch 'finished' callback */ function _politicas_direccionales_seleccionar_politicas_finished($success, $results, $operations) { if ($success) { // Here we do something meaningful with the results. $message = t('%count políticas direccionales han sido procesadas: !items', array('%count' => count($results), '!items' => theme('item_list', $results))); } 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(filter_xss($message)); } /** * Implementation of politicas_direccionales_remove_posible_politica_form() * Eliminar politica direccional */ function politicas_direccionales_remove_posible_politica_form($form_state, $ente = 0, $politica = 0) { $form = array(); $form['#ente'] = $ente; $form['#politica'] = $politica; $message = t('Esta seguro de eliminar la posible política @nombre?', array('@nombre' => $form['#politica']->body)); $caption = '

'. t('This action cannot be undone.') .'

'; $return_path = $_REQUEST['destination'] ? $_REQUEST['destination'] : 'planificacion/' . $form['#ente']->nid . '/politicas/posibles/listar'; return confirm_form($form, $message, $return_path, $caption, t('Eliminar')); } /** * Implementation of politicas_direccionales_remove_posible_politica_form_submit(). * Procesar funcion eliminar politica direccional. */ function politicas_direccionales_remove_posible_politica_form_submit($form, &$form_state) { global $user; $titulo = $form['#politica']->body; node_delete($form['#politica']->nid); $texto = t('Se elimino la posible política "@nombre"', array('@nombre' => $form['#politica']->body)); drupal_set_message($texto); if (!$_REQUEST['destination']) { // add redirect $form_state['redirect'] = 'planificacion/' . $form['#ente']->nid . '/politicas/posibles/listar'; } } /** * Implementation of politicas_direccionales_remove_accion_posible_politica_form() * Eliminar accion posible de politica */ function politicas_direccionales_remove_accion_posible_politica_form($form_state, $ente = 0, $politica = 0) { $form = array(); $form['#ente'] = $ente; $form['#politica'] = $politica; $message = t('Esta seguro de eliminar las acciones de la política "@nombre"?', array('@nombre' => $form['#politica']->body)); $caption = '

'. t('Acciones para Construir Viabilidad:') .'

'; $viabilidades = array(); foreach($politica->field_politicas_acciones_viab as $viabilidad) { $viabilidades[] = $viabilidad['value']; } $caption .= theme('item_list', $viabilidades); $return_path = $_REQUEST['destination'] ? $_REQUEST['destination'] : 'planificacion/' . $form['#ente']->nid . '/politicas/seleccionar/inviables'; return confirm_form($form, $message, $return_path, $caption, t('Eliminar')); } /** * Implementation of politicas_direccionales_remove_accion_posible_politica_form_submit(). * Procesar funcion eliminar accion posible de politica. */ function politicas_direccionales_remove_accion_posible_politica_form_submit($form, &$form_state) { global $user; $politica = $form['#politica']; $titulo = $form['#politica']->body; module_load_include('inc', 'node', 'node.pages'); node_object_prepare($politica); $politica->revision = 1; $texto = t('Se eliminarón las acciones para construir la viabilidad de la política "@politica"', array('@politica' => $titulo)); $politica->log = $texto; $politica->field_politicas_acciones_viab = array(); $politica->field_politicas_acciones_viab[0] = array('value' => ''); node_save($politica); //se agregan los requerimientos a la nueva version del nodo db_query("UPDATE {politicas_ente} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); db_query("UPDATE {politicas_ente_actor} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); drupal_set_message($texto); if (!$_REQUEST['destination']) { // add redirect $form_state['redirect'] = 'planificacion/' . $form['#ente']->nid . '/politicas/posibles/listar'; } } /** * Implementation of ente_planificador_usuario_tiene_identificar_politicas(). * Usuario puede identificar politicas. */ function ente_planificador_usuario_tiene_identificar_politicas($ente_planificador) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("inviabilidad", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { //se verifica que exista al menos una politica $mi_fecha1 = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_query = "SELECT count(c.nid) as numero FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c.field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d AND n.status > 0"; $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha1[0]; $sql_variables[] = $mi_fecha1[1] + 86399; $result = db_query($sql_query, $sql_variables); $cuenta = db_fetch_object($result); if ($cuenta->numero) { $ente_has_acceso = TRUE; } } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_seleccionar_politicas(). * Usuario puede seleccionar politicas. */ function ente_planificador_usuario_tiene_seleccionar_politicas($ente_planificador) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("posibles_seleccionar", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { //se verifica que exista al menos una politica $mi_fecha1 = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_query = "SELECT count(c.nid) AS numero FROM content_type_politicas_direccionales AS c INNER JOIN node AS n ON n.nid = c.nid AND n.vid = c.vid LEFT JOIN content_field_politicas_acciones_viab AS v ON v.nid = c.nid AND v.vid = c.vid WHERE c.field_politicas_ente_nid = %d AND (c.field_politicas_viable_value = 'SÍ' OR c.field_politicas_seleccionada_value = 'SÍ' OR v.field_politicas_acciones_viab_value <> '') AND n.created >= %d AND n.created <= %d AND n.status > 0"; $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha1[0]; $sql_variables[] = $mi_fecha1[1] + 86399; $result = db_query($sql_query, $sql_variables); $cuenta = db_fetch_object($result); if ($cuenta->numero) { $ente_has_acceso = TRUE; } } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_politicas_viabilidad(). * Usuario puede construir viabilidad politicas. */ function ente_planificador_usuario_tiene_politicas_viabilidad($ente_planificador) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("viabilidad", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_es_macro(). * Ente planificador es macro. */ function ente_planificador_usuario_es_macro($ente_planificador) { return $ente_planificador->tipo == 1 ? TRUE : FALSE; } /** * Implementation of ente_planificador_usuario_tiene_politicas_registrar(). * Usuario puede registrar politicas. */ function ente_planificador_usuario_tiene_politicas_registrar($ente_planificador) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_estrategias_politicas_registrar(). * Usuario puede registrar estrategias. */ function ente_planificador_usuario_tiene_estrategias_politicas_registrar($ente_planificador) { if($ente_planificador->tipo == 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_estrategias_politicas_puede_articular(). * Usuario puede articular estrategias. */ function ente_planificador_usuario_tiene_estrategias_politicas_puede_articular($ente_planificador) { if($ente_planificador->tipo == 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } //SE VERIFICA QUE EL ENTE TENGA AL MENOS UNA ESTRATEGIA $numero = 0; if ($fecha) { $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d", $ente_planificador->nid, $mi_fecha[0], $mi_fecha[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $numero = $cantidad_estrategias->numero; } if ($fecha && $numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_tiene_articulacion(). * Ente tiene articulación. */ function ente_planificador_tiene_articulacion($ente_planificador){ if($ente_planificador->tipo == 1) { return FALSE; } $mi_fecha = ente_planificador_user_acceso_proceso('articulacion_estrategias', $ente_planificador->tipo); $result = db_query('SELECT count(ente) AS numero FROM {politicas_direccionales_estrategias} WHERE ente_art = %d AND creacion >= %d AND creacion <= %d', $ente_planificador->nid, $mi_fecha[0], $mi_fecha[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $ente_has_acceso = FALSE; if ($cantidad_estrategias->numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_estrategias_politicas_reformular(). * Ente puede reformular estrategias. */ function ente_planificador_usuario_tiene_estrategias_politicas_reformular($ente_planificador) { if($ente_planificador->tipo == 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("reformulacion_estrategias", $ente_planificador->tipo); $mi_fecha1 = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } //SE VERIFICA QUE EL ENTE TENGA AL MENOS UNA ESTRATEGIA $numero = 0; if ($fecha) { $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d", $ente_planificador->nid, $mi_fecha1[0], $mi_fecha1[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $numero = $cantidad_estrategias->numero; } if ($fecha && $numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_estrategias_puede_editar(). * Ente puede editar estrategias. */ function ente_planificador_usuario_tiene_estrategias_puede_editar($ente_planificador, $estrategia) { if($ente_planificador->tipo == 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso('estrategias', $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } //SE VERIFICA QUE EL ENTE TENGA AL MENOS UNA ESTRATEGIA $numero = 0; if ($fecha) { $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE n.nid = %d AND pd.field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d", $estrategia->nid, $ente_planificador->nid, $mi_fecha[0], $mi_fecha[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $numero = $cantidad_estrategias->numero; } if ($fecha && $numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_tiene_estrategias_puede_reformular(). * Ente puede reformular una estrategia estrategias. */ function ente_planificador_usuario_tiene_estrategias_puede_reformular($ente_planificador, $estrategia) { if($ente_planificador->tipo == 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("reformulacion_estrategias", $ente_planificador->tipo); $mi_fecha1 = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } //SE VERIFICA QUE EL ENTE TENGA AL MENOS UNA ESTRATEGIA $numero = 0; if ($fecha) { $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE n.nid = %d AND pd.field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d", $estrategia->nid, $ente_planificador->nid, $mi_fecha1[0], $mi_fecha1[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $numero = $cantidad_estrategias->numero; } if ($fecha && $numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_puede_estrategias_seleccionar(). * Ente puede seleccionar estrategias. */ function ente_planificador_usuario_puede_estrategias_seleccionar($ente_planificador) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("seleccionar_estrategias", $ente_planificador->tipo); $mi_fecha1 = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } //SE VERIFICA QUE EL ENTE TENGA AL MENOS UNA ESTRATEGIA $numero = 0; if ($fecha) { $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE n.created >= %d AND n.created <= %d", $mi_fecha1[0], $mi_fecha1[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $numero = $cantidad_estrategias->numero; } if ($fecha && $numero && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /** * Implementation of ente_planificador_usuario_puede_estrategias_seleccionar_politicas(). * Ente puede asociar estrategias a politicas. */ function ente_planificador_usuario_puede_estrategias_seleccionar_politicas($ente_planificador, $politica) { if($ente_planificador->tipo > 1) { return FALSE; } global $user; $fecha = FALSE; $ente_has_acceso = FALSE; $current_time = time(); $mi_fecha = ente_planificador_user_acceso_proceso("seleccionar_estrategias", $ente_planificador->tipo); $mi_fecha1 = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time && $politica->created >= $mi_fecha1[0] && $politica->created <= $mi_fecha1[1] + 86399) { $fecha = TRUE; } $estrategias = leer_estrategias_por_politica($ente_planificador, $politica); if (!count($estrategias)) { return FALSE; } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } return $ente_has_acceso; } /* * Implementation of mis_entes_planificadores_planificacion_politicas() */ function mis_entes_planificadores_planificacion_politicas() { global $user; $output = ''; $ente = usuario_tiene_ente($user->uid); if ($ente->nid) { $adicional = array(); for($i = 3; $i < 7; $i++) { if (arg($i) != '') { $adicional[] = arg($i); } } drupal_goto('planificacion/' . $ente->nid . '/politicas/' . implode('/', $adicional)); } drupal_goto('mi_ente_planificador/planificacion'); return $output; } /* * Implementation of politicas_direccionales_status_planificacion_politicas_direccionales() */ function politicas_direccionales_status_planificacion_politicas_direccionales($ente_planificador, $tipo = 2) { if ($tipo == 1) { //SE CALCULA SI SE ALMACENO AL MENOS UNA POLITICA $mi_fecha_posible = ente_planificador_user_acceso_proceso("posibles", $tipo); $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d", $ente_planificador, $mi_fecha_posible[0], $mi_fecha_posible[1] + 86399); $cantidad_politicas = db_fetch_object($result); $politicas_direccionales['posibles']['value'] = $cantidad_politicas->numero ? 1 : 0; $politicas_direccionales['posibles']['title'] = t('Posibles Políticas Direccionales'); $politicas_direccionales['posibles']['link'] = 'planificacion/' . $ente_planificador . '/politicas/posibles/listar'; $politicas_direccionales['posibles']['mylink'] = 'mi_ente_planificador/planificacion/politicas/posibles/listar'; $politicas_direccionales['posibles']['weight'] = 1; //SE CALCULA SI SE EXISTE AL MENOS UNA POLITICA VIABLE $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_politicas_ente_nid = %d AND pd.field_politicas_viable_value = 'SÍ' AND n.created >= %d AND n.created <= %d", $ente_planificador, $mi_fecha_posible[0], $mi_fecha_posible[1] + 86399); $cantidad_politicas = db_fetch_object($result); $politicas_direccionales['inviabilidad']['value'] = $cantidad_politicas->numero ? 1 : 0; $politicas_direccionales['inviabilidad']['title'] = t('Consultar posibles Políticas inviables'); $politicas_direccionales['inviabilidad']['link'] = 'planificacion/' . $ente_planificador . '/politicas/seleccionar/inviables'; $politicas_direccionales['inviabilidad']['mylink'] = 'mi_ente_planificador/planificacion/politicas/seleccionar/inviables'; $politicas_direccionales['inviabilidad']['weight'] = 2; //SE CALCULA SI SE EXISTE AL MENOS UNA ACCION PARA CONSTRUIR VIABILIDAD EN UNA POLITICA INVIABLE $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid INNER JOIN {content_field_politicas_acciones_viab} AS v ON v.nid = pd.nid AND v.vid = pd.vid WHERE pd.field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d AND (v.field_politicas_acciones_viab_value <> NULL OR v.field_politicas_acciones_viab_value <> '')", $ente_planificador, $mi_fecha_posible[0], $mi_fecha_posible[1] + 86399); $cantidad_politicas = db_fetch_object($result); $politicas_direccionales['viabilidad']['value'] = $cantidad_politicas->numero ? 1 : 0; $politicas_direccionales['viabilidad']['title'] = t('Acciones para construir viabilidad de Políticas inviables'); $politicas_direccionales['viabilidad']['link'] = 'planificacion/' . $ente_planificador . '/politicas/seleccionar/inviables'; $politicas_direccionales['viabilidad']['mylink'] = 'mi_ente_planificador/planificacion/politicas/seleccionar/inviables'; $politicas_direccionales['viabilidad']['weight'] = 3; //SE CALCULA SI SE EXISTE AL MENOS EXISTE UNA POLITICA SELECCIONADA $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_politicas_ente_nid = %d AND pd.field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d", $ente_planificador, $mi_fecha_posible[0], $mi_fecha_posible[1] + 86399); $cantidad_politicas = db_fetch_object($result); $politicas_direccionales['posibles_seleccionar']['value'] = $cantidad_politicas->numero ? 1 : 0; $politicas_direccionales['posibles_seleccionar']['title'] = t('Seleccionar Políticas Direccionales'); $politicas_direccionales['posibles_seleccionar']['link'] = 'planificacion/' . $ente_planificador . '/politicas/seleccionar/consultar'; $politicas_direccionales['posibles_seleccionar']['mylink'] = 'mi_ente_planificador/planificacion/politicas/seleccionar/consultar'; $politicas_direccionales['posibles_seleccionar']['weight'] = 4; //SE CALCULA QUE EXISTA AL MENOS UNA ESTRATEGIA $mi_fecha_estrategia = ente_planificador_user_acceso_proceso("estrategias", $tipo); $result = db_query("SELECT count(nid) AS numero FROM {node} WHERE type = 'estrategia' AND created >= %d AND created <= %d", $mi_fecha_estrategia[0], $mi_fecha_estrategia[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $politicas_direccionales['estrategias']['value'] = $cantidad_estrategias->numero ? 1 : 0; $politicas_direccionales['estrategias']['title'] = t('Definición de Estrategias'); $politicas_direccionales['estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/listar'; $politicas_direccionales['estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/listar'; $politicas_direccionales['estrategias']['weight'] = 5; /* //SE CALCULA LA ARTICULACION DE LOS ACTORES MICROS $mi_fecha_articulacion = ente_planificador_user_acceso_proceso("articulacion_estrategias", $tipo); $result = db_query("SELECT count(estrategia) AS numero FROM {politicas_direccionales_estrategias} WHERE creacion >= %d AND creacion <= %d", $mi_fecha_articulacion[0], $mi_fecha_articulacion[1] + 86399); $cantidad_articulacion = db_fetch_object($result); $politicas_direccionales['articulacion_estrategias']['value'] = $cantidad_articulacion->numero ? 1 : 0; $politicas_direccionales['articulacion_estrategias']['title'] = t('Articulación de actores por estrategias'); $politicas_direccionales['articulacion_estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/consultar_articulacion_micro'; $politicas_direccionales['articulacion_estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/consultar_articulacion_micro'; $politicas_direccionales['articulacion_estrategias']['weight'] = 6; */ /* //SE CALCULA QUE EXISTA AL MENOS UNA ESTRATEGIA REFORMULADA $mi_fecha_reformulacion = ente_planificador_user_acceso_proceso("reformulacion_estrategias", $tipo); $result = db_query("SELECT count(nid) AS numero FROM {node} WHERE type = 'estrategia' AND changed >= %d AND changed <= %d", $mi_fecha_reformulacion[0], $mi_fecha_reformulacion[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $politicas_direccionales['reformulacion_estrategias']['value'] = $cantidad_estrategias->numero ? 1 : 0; $politicas_direccionales['reformulacion_estrategias']['title'] = t('Reformulación de Estrategias'); $politicas_direccionales['reformulacion_estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/listar'; $politicas_direccionales['reformulacion_estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/listar'; $politicas_direccionales['reformulacion_estrategias']['weight'] = 5; */ //SE CALCULA QUE AL MENOS UNA ESTRATEGIA ESTE SELECCIONADA EN ALGUNA POLITICA $result = db_query("SELECT COUNT(pd.nid) AS numero from {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid INNER JOIN {content_field_politicas_estrategias} AS v ON v.nid = pd.nid AND v.vid = pd.vid WHERE pd.field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d AND (v.field_politicas_estrategias_nid <> NULL OR v.field_politicas_estrategias_nid <> 0)", $ente_planificador, $mi_fecha_posible[0], $mi_fecha_posible[1] + 86399); $cantidad_politicas = db_fetch_object($result); $politicas_direccionales['seleccionar_estrategias']['value'] = $cantidad_politicas->numero ? 1 : 0; $politicas_direccionales['seleccionar_estrategias']['title'] = t('Seleccionar estrategias'); $politicas_direccionales['seleccionar_estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/pol_estr'; $politicas_direccionales['seleccionar_estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/pol_estr'; $politicas_direccionales['seleccionar_estrategias']['weight'] = 6; } else { //SE CALCULA QUE EXISTA AL MENOS UNA ESTRATEGIA $mi_fecha_estrategia = ente_planificador_user_acceso_proceso("estrategias", $tipo); $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d", $ente_planificador, $mi_fecha_estrategia[0], $mi_fecha_estrategia[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $politicas_direccionales['estrategias']['value'] = $cantidad_estrategias->numero ? 1 : 0; $politicas_direccionales['estrategias']['title'] = t('Definición de Estrategias'); $politicas_direccionales['estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/listar'; $politicas_direccionales['estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/listar'; $politicas_direccionales['estrategias']['weight'] = 1;/* //SE CALCULA LA ARTICULACION DE LOS ACTORES MICROS $mi_fecha_articulacion = ente_planificador_user_acceso_proceso("articulacion_estrategias", $tipo); $result = db_query("SELECT count(estrategia) AS numero FROM {politicas_direccionales_estrategias} WHERE ente = %d AND creacion >= %d AND creacion <= %d", $ente_planificador, $mi_fecha_articulacion[0], $mi_fecha_articulacion[1] + 86399); $cantidad_articulacion = db_fetch_object($result); $politicas_direccionales['articulacion_estrategias']['value'] = $cantidad_articulacion->numero ? 1 : 0; $politicas_direccionales['articulacion_estrategias']['title'] = t('Articulación de actores por estrategias'); $politicas_direccionales['articulacion_estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/identificar'; $politicas_direccionales['articulacion_estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/identificar'; $politicas_direccionales['articulacion_estrategias']['weight'] = 2; */ /* //SE CALCULA QUE EXISTA AL MENOS UNA ESTRATEGIA REFORMULADA $mi_fecha_reformulacion = ente_planificador_user_acceso_proceso("reformulacion_estrategias", $tipo); $result = db_query("SELECT COUNT(pd.nid) AS numero FROM {content_type_estrategia} AS pd INNER JOIN {node} AS n On n.nid = pd.nid AND n.vid = pd.vid WHERE pd.field_estrategia_ente_nid = %d AND n.changed >= %d AND n.changed <= %d", $ente_planificador, $mi_fecha_reformulacion[0], $mi_fecha_reformulacion[1] + 86399); $cantidad_estrategias = db_fetch_object($result); $politicas_direccionales['reformulacion_estrategias']['value'] = $cantidad_estrategias->numero ? 1 : 0; $politicas_direccionales['reformulacion_estrategias']['title'] = t('Reformulación de Estrategias'); $politicas_direccionales['reformulacion_estrategias']['link'] = 'planificacion/' . $ente_planificador . '/politicas/estrategias/listar'; $politicas_direccionales['reformulacion_estrategias']['mylink'] = 'mi_ente_planificador/planificacion/politicas/estrategias/listar'; $politicas_direccionales['reformulacion_estrategias']['weight'] = 5; */ } return $politicas_direccionales; } /* * Implementation of politicas_direccionales_submenu_interfaz * Add menu items politicas */ function politicas_direccionales_submenu_interfaz($ente_planificador) { $submenu = array(); $smenu = array(); $i = 0; $submenu[$i] = array( 'name'=> t("Posibles Políticas"), 'description' => t("Posibles Políticas Direccionales"), 'call' => "posibles_politicas" ); $aux_menu = array(); foreach (module_list() as $module) { if ($data = module_invoke($module, 'items_menu_politicas_' . $submenu[$i]['call'], $ente_planificador)) { $aux_menu = array_merge_recursive($data, $aux_menu); } } $smenu[$i] = $aux_menu; return theme('planificacion_submenu_interfaz', $submenu, $smenu); } /* * Implementation of hook_items_menu_politicas_posibles_politicas() * Add menus items in politicas */ function politicas_direccionales_items_menu_politicas_posibles_politicas($ente_planificador) { global $user; $resultado = array(); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if ($ente_planificador->tipo == 1 && $fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $resultado[] = array( 'name' => t('Registrar Posibles Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/registrar', 'description' => t('Registrar Políticas Direccionales') ); } $resultado[] = array( 'name' => t('Consultar Posibles Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/listar', 'description' => t('Consultar Políticas Direccionales') ); if ($ente_planificador->tipo == 1) { $resultado[] = array( 'name' => t('Buscar Posibles Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/buscar', 'description' => t('Buscar Políticas Direccionales') ); } return $resultado; } /* * Implementation of hook_items_menu_politicas_seleccionar_politicas() * Add menus items in politicas */ function politicas_direccionales_items_menu_politicas_seleccionar_politicas($ente_planificador) { global $user; $resultado = array(); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (ente_planificador_usuario_tiene_identificar_politicas($ente_planificador)) { $resultado[] = array( 'name' => t('Identificar inviabilidad de posibles políticas '), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/viabilidad', 'description' => t('Identificar Políticas Direccionales') ); } $resultado[] = array( 'name' => t('Consultar Políticas Inviables'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/inviables', 'description' => t('Consultar posibles Políticas inviables') ); if (ente_planificador_usuario_tiene_seleccionar_politicas($ente_planificador)) { $resultado[] = array( 'name' => t('Seleccionar Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/politicas', 'description' => t('Seleccionar Políticas Direccionales') ); } $resultado[] = array( 'name' => t('Consultar Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/consultar', 'description' => t('Consultar Políticas Direccionales') ); if (ente_planificador_usuario_es_macro($ente_planificador)) { $resultado[] = array( 'name' => t('Buscar Políticas Direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/buscar', 'description' => t('Buscar Políticas Direccionales') ); } return $resultado; } /* * Implementation of ente_planificador_definir_politicas() * Display default definir politicas */ function ente_planificador_definir_politicas($ente_planificador) { drupal_set_title(t('Definición de posibles Políticas Direccionales')); return politicas_direccionales_submenu_interfaz($ente_planificador); } /* * Implementation of ente_planificador_seleccionar_politicas() */ function ente_planificador_seleccionar_politicas($ente_planificador) { drupal_set_title(t('Definición de Políticas Direccionales')); return politicas_direccionales_submenu_interfaz2($ente_planificador); } /* * Implementation of politicas_direccionales_submenu_interfaz2 * Add menu items politicas */ function politicas_direccionales_submenu_interfaz2($ente_planificador) { $submenu = array(); $smenu = array(); $i = 0; $submenu[$i] = array( 'name'=> t("Políticas Direccionales"), 'description' => t("Gestionar Políticas Direccionales"), 'call' => "seleccionar_politicas" ); $aux_menu = array(); foreach (module_list() as $module) { if ($data = module_invoke($module, 'items_menu_politicas_' . $submenu[$i]['call'], $ente_planificador)) { $aux_menu = array_merge_recursive($data, $aux_menu); } } $smenu[$i] = $aux_menu; return theme('planificacion_submenu_interfaz', $submenu, $smenu); } /* * Implementation of ente_planificador_seleccionar_politicas() */ function ente_planificador_estrategias_politicas($ente_planificador) { drupal_set_title(t('Definición de estrategias')); return politicas_direccionales_submenu_interfaz3($ente_planificador); } /* * Implementation of politicas_direccionales_submenu_interfaz2 * Add menu items politicas */ function politicas_direccionales_submenu_interfaz3($ente_planificador) { $submenu = array(); $smenu = array(); $i = 0; $submenu[$i] = array( 'name'=> t("Estrategias de Materialización"), 'description' => t("Gestionar Estrategias de Materialización de Políticas Direccionales"), 'call' => "estrategias_politicas" ); $aux_menu = array(); foreach (module_list() as $module) { if ($data = module_invoke($module, 'items_menu_politicas_' . $submenu[$i]['call'], $ente_planificador)) { $aux_menu = array_merge_recursive($data, $aux_menu); } } $smenu[$i] = $aux_menu; return theme('planificacion_submenu_interfaz', $submenu, $smenu); } /* * Implementation of hook_items_menu_politicas_estrategias_politicas() * Add menus items in seleccionar politicas */ function politicas_direccionales_items_menu_politicas_estrategias_politicas($ente_planificador) { global $user; $resultado = array(); if (ente_planificador_usuario_tiene_estrategias_politicas_registrar($ente_planificador)) { $resultado[] = array( 'name' => t('Registrar estrategias'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/registrar', 'description' => t('Agregar estrategias de materialización de políticas direccionales') ); } $resultado[] = array( 'name' => t('Consultar posibles estrategias'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/listar', 'description' => t('Consultar posibles estrategias de materialización de políticas direccionales') ); /* if (ente_planificador_usuario_tiene_estrategias_politicas_puede_articular($ente_planificador)) { $resultado[] = array( 'name' => t('Identificar posible articulación'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/identificar', 'description' => t('Identificar posible articulación entre actores micro') ); } if (ente_planificador_usuario_es_macro($ente_planificador)) { $resultado[] = array( 'name' => t('Consultar solicitudes de articulación'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/consultar_articulacion', 'description' => t('Consultar solicitudes de articulación') ); } if (ente_planificador_tiene_articulacion($ente_planificador)) { $resultado[] = array( 'name' => t('Consultar solicitudes de articulación con Actores Micro'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/consultar_articulacion_micro', 'description' => t('Consultar solicitudes de articulación de los Actores Micro') ); } */ /* if (ente_planificador_usuario_tiene_estrategias_politicas_reformular($ente_planificador)) { $resultado[] = array( 'name' => t('Reformulación de posibles estrategias'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/reformular', 'description' => t('Reformulación de posibles estrategias') ); } */ if (ente_planificador_usuario_puede_estrategias_seleccionar($ente_planificador)) { $resultado[] = array( 'name' => t('Seleccionar políticas direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/seleccionar', 'description' => t('Seleccionar estrategias para materializar políticas direccionales.') ); } $resultado[] = array( 'name' => t('Estrategias para materializar políticas direccionales'), 'path' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/pol_estr', 'description' => t('Consultar estrategias para materializar políticas direccionales.') ); return $resultado; } /* * Implementation of politicas_direccionales_load_requerimientos() * Leer requerimientos de una politica */ function politicas_direccionales_load_requerimientos(&$node){ $sql_query = "SELECT * FROM {politicas_ente} WHERE nid = %d AND vid = %d"; $result = db_query($sql_query, $node->nid, $node->vid); $requerimientos = array(); while($requerimiento = db_fetch_object($result)) { $requerimientos[$requerimiento->delta] = array( 'requerimiento' => $requerimiento->requerimiento, 'tipo' => $requerimiento->tipo, ); } $sql_query = "SELECT * FROM {politicas_ente_actor} WHERE nid = %d AND vid = %d"; $result = db_query($sql_query, $node->nid, $node->vid); while($ente = db_fetch_object($result)) { $requerimientos[$ente->delta]['entes'][$ente->delta1] = array( 'otro_ente' => $ente->otro_ente, 'ente' => $ente->ente, 'grado' => $ente->grado, ); } $node->requerimientos = $requerimientos; } /* * Implementation of politicas_direccionales_agregar_form() * Agregar o editar una politica */ function politicas_direccionales_agregar_form($form_state, $ente_planificador, $politica = 0) { global $user; $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($ente->nid == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if (!$ente_has_acceso) { drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/posibles'); } $politicas_direccionales_path = drupal_get_path('module', 'politicas_direccionales'); drupal_add_js($politicas_direccionales_path . '/js/politicas_direccionales.js'); $politica_leido = new stdClass(); $politica_leido->type = 'politicas_direccionales'; $politica_leido->title = ''; $politica_leido->body = ''; $politica_leido->nid = 0; $form = array(); if ($politica) { $politica_load = $politica; if($politica_load->nid && $politica_load->type == 'politicas_direccionales' && $politica_load->field_politicas_ente[0]['nid'] == $ente_planificador->nid && $mi_fecha[1] + 86399 > $politica_load->created && $mi_fecha[0] < $politica_load->created) { $politica_leido = $politica_load; $form['#titulo_pagina'] = t('Modificar posible política direccional'); } } if (!isset($form['#titulo_pagina'])) { $form['#titulo_pagina'] = t('Agregar política direccional'); } drupal_set_title($form['#titulo_pagina']); politicas_direccionales_load_requerimientos($politica_leido); $form['#node'] = $politica_leido; $form['#ente_planificador'] = $ente_planificador; $form['#politica'] = $politica_leido; $form['body'] = array( '#type' => 'textarea', '#title' => t('Nombre de la política'), '#default_value' => $politica_leido->body, ); $mi_fecha = ente_planificador_user_acceso_proceso("causas", $ente_planificador->tipo); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $sql_query = "SELECT c.nid FROM {content_type_causas} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c.field_ente_planifiador_nid = %d AND c.field_causa_critica_value = '1' AND n.created >= %d AND n.created <= %d "; $result = db_query($sql_query, $sql_variables); $causas = array(); $causas_arreglo = array(); $causas_id = array(); $vector = array(); while($causa = db_fetch_object($result)) { $causas_id[$causa->nid] = $causa->nid; $causa_load = node_load($causa->nid); $causas[$causa->nid] = $causa_load->title; if (is_array($causa_load->field_causa_solucion) && count($causa_load->field_causa_solucion)) { $vector[$causa_load->nid] = array(); foreach ($causa_load->field_causa_solucion as $valor) { $vector[$causa_load->nid][] = $valor['value']; } } } $form['#causas'] = $causas_id; drupal_add_js(array('causas' => $form['#causas']), 'setting'); $form['#vector_descriptores'] = $vector; if (!count($causas)) { drupal_set_message(t('El ente @planificador aun no ha definido las causas críticas', array('@planificador' => check_plain($ente_planificador->title)))); drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/listar'); } $default_values = array(); if (count($politica_load->field_politicas_causas)) { foreach($politica_load->field_politicas_causas as $causa) { $default_values[] = $causa['nid']; } } $form['causas_politica'] = array( '#type' => 'select', '#default_value' => $default_values, '#options' => $causas, '#multiple' => '1', '#title' => t('Causas que aborda la política'), ); $node_type = content_types('politicas_direccionales'); $fields = $node_type['fields']; $field_form = array(); $arreglo = array( 'field_politicas_objetivog' => 'field_politicas_objetivog', 'field_politicas_objetivoe' => 'field_politicas_objetivoe', 'field_politicas_areasimp' => 'field_politicas_areasimp', ); if (is_array($fields) && count($fields)) { foreach($fields as $field_id => $field) { if (array_key_exists($field_id, $arreglo)) { $field_form[] = $field_id; $fields_form[] = $field_id; } elseif (variable_get('politicas_direccionales_ac_di_' . $field_id, FALSE)) { $field_form[] = $field_id; $fields_form[] = $field_id; } } } if (is_array($field_form) && count($field_form)) { module_load_include('inc', 'content', 'includes/content.node_form'); foreach ($field_form as $field_id) { $field = content_fields($field_id, 'politicas_direccionales'); $form['#field_info'][$field_id] = $field; $form += (array) content_field_form($form, $form_state, $field); } } $form['#politicas_direccionales_fields'] = $fields_form; $sql = "SELECT n.nid as nid, n.title as title from {node} n, {node_revisions} rv where n.vid = rv.vid AND (n.type in ('ente_planificador')) AND (n.status <> 0)"; $entes = array(); $result = db_query($sql); $entes['otro'] = t('Otro actor planificador'); while($ente = db_fetch_object($result)) { $entes[$ente->nid] = $ente->title; } $grados = array(); $grados['p'] = t('Politico'); $grados['c'] = t('Cognitivo'); $grados['t'] = t('Tecnológico'); $form['#arreglo'] = $arreglo; $form['#grados'] = $grados; $form['#entes'] = $entes; $cantidad_requerimientos = count($form['#node']->requerimientos); $cantidad_requerimientos = $cantidad_requerimientos ? $cantidad_requerimientos : 1; $form['campo_requerimiento'] = array( '#type' => 'fieldset', '#title' => t('Requerimientos'), ); for ($i = 0; $i < $cantidad_requerimientos; $i++) { $form['campo_requerimiento']['politica_' . $i] = array( '#type' => 'fieldset', '#title' => t('Requerimiento %numero', array('%numero' => ($i + 1))), ); if ($i == 0) { $form['campo_requerimiento']['politica_' . $i]['#prefix'] .= '
'; } $valor = $form['#node']->requerimientos[$i]['requerimiento'] ? $form['#node']->requerimientos[$i]['requerimiento'] : ''; $form['campo_requerimiento']['politica_' . $i]['req_' . $i] = array( '#type' => 'textfield', '#title' => t('Requerimiento'), '#required' => FALSE, '#default_value' => $valor, '#prefix' => '', ); $valor = $form['#node']->requerimientos[$i]['tipo'] ? $form['#node']->requerimientos[$i]['tipo'] : ''; $form['campo_requerimiento']['politica_' . $i]['tipo_' . $i] = array( '#type' => 'select', '#default_value' => $valor, '#options' => $form['#grados'], '#multiple' => FALSE, '#title' => t('Tipo'), ); $form['campo_requerimiento']['politica_' . $i]['actores'] = array( '#type' => 'fieldset', '#title' => t('Actores'), ); $cantidad_entes = count($form['#node']->requerimientos[$i]['entes']); $cantidad_entes = $cantidad_entes ? $cantidad_entes : 1; for ($j = 0; $j < $cantidad_entes; $j++) { $valor = $form['#node']->requerimientos[$i]['entes'][$j]['ente'] ? $form['#node']->requerimientos[$i]['entes'][$j]['ente'] : 'otro'; $form['campo_requerimiento']['politica_' . $i]['actores']['entes_' . $i . '_' . $j] = array( '#type' => 'select', '#default_value' => $valor, '#options' => $form['#entes'], '#multiple' => FALSE, '#title' => t('Actor'), '#prefix' => $valor, '#attributes' => array('class' => 'ente-actores ente-actores-' . $i . '_' . $j . ' actores-requerimientos actores-requerimiento-' . $i, 'requerimiento' => $i, 'cant_actor' => $j), ); if ($j == 0) { $form['campo_requerimiento']['politica_' . $i]['actores']['entes_' . $i . '_' . $j]['#prefix'] .= '
'; } $valor = $form['#node']->requerimientos[$i]['entes'][$j]['ente'] ? '' : $form['#node']->requerimientos[$i]['entes'][$j]['otro_ente']; $form['campo_requerimiento']['politica_' . $i]['actores']['otro_' . $i . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Nombre del Actor'), '#required' => FALSE, '#size' => 10, '#default_value' => $valor, '#attributes' => array('class' => 'ente-otros ente-otros-' . $i . '_' . $j . ' otros-requerimientos otros-requerimiento-' . $i, 'requerimiento' => $i, 'cant_actor' => $j), ); $valor = $form['#node']->requerimientos[$i]['entes'][$j]['grado'] ? $form['#node']->requerimientos[$i]['entes'][$j]['grado'] : 0; $form['campo_requerimiento']['politica_' . $i]['actores']['grado_' . $i . '_' . $j] = array( '#type' => 'textfield', '#title' => t('Grado de Control'), '#required' => FALSE, '#size' => 10, '#default_value' => $valor, '#suffix' => '', '#element_validate' => array('politicas_direccionales_number_float_validate',), ); } $form['campo_requerimiento']['politica_' . $i]['actores']['cantidad_ente_' . $i] = array('#type' => 'hidden', '#value' => $cantidad_entes, '#suffix' => '
'); $form['campo_requerimiento']['politica_' . $i]['actores']['agrega_' . $i] = array( '#type' => 'submit', '#default_value' => t('Agregar otro ente'), '#ahah' => array( 'path' => 'politicas_direccionales_agregar_js/ente/' . $i, 'wrapper' => 'nuevoente_' . $i, 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); } $form['campo_requerimiento']['cantidad_requerimientos'] = array('#type' => 'hidden', '#value' => $cantidad_requerimientos, '#suffix' => '
'); $form['campo_requerimiento']['agregar_req'] = array( '#type' => 'submit', '#default_value' => t('Agregar otro requerimiento'), '#ahah' => array( 'path' => 'politicas_direccionales_agregar_js/requerimiento', 'wrapper' => 'requerimientos', 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 100, ); $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /* * Implementation of politicas_direccionales_skip_validation_form_after_build() * Agregar funcion para eliminar la validacion cuando se presiona el boton cancel */ function politicas_direccionales_skip_validation_form_after_build($form, &$form_state) { if($form_state['clicked_button']['#value'] == t('Cancel')) { _politicas_direccionales_disable_validation($form); } return $form; } /* * Implementation of _politicas_direccionales_disable_validation() * funcion para eliminar la validacion por defecto de un formulario */ function _politicas_direccionales_disable_validation(&$element) { unset($element['#needs_validation']); foreach(element_children($element) as $key) { _politicas_direccionales_disable_validation($element[$key]); } } /* * Implementation of politicas_direccionales_number_float_validate() * Validar que el texto introducido sea un float */ function politicas_direccionales_number_float_validate($element, &$form_state) { $start = $element['#value']; $value = preg_replace('@[^-0-9\.]@', '', $start); if ($start != $value) { form_set_error($element['#name'], t('Only numbers and decimals are allowed in %field.', array('%field' => $element['#title']))); } elseif ($value < 0) { form_set_error($element['#name'], t('El valor minimo permitido in %field es 0.', array('%field' => $element['#title']))); } elseif ($value > 100) { form_set_error($element['#name'], t('El valor maximo permitido in %field es 100.', array('%field' => $element['#title']))); } } /* * Implementation of politicas_direccionales_agregar_form_validate() */ function politicas_direccionales_agregar_form_validate($form, &$form_state){ $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancel')) { return; } drupal_set_title($form['#titulo_pagina']); if (trim($form_state['values']['body']) == '') { form_set_error('body', t('Debe agregar el titulo de la política direccional')); } //debe existir al menos un requerimiento $requerimiento = trim(check_plain($form_state['values']['req_0'])); if ($requerimiento == '') { form_set_error('req_0', t('Debe ingresar al menos un requerimiento')); } } /* * Implementation of politicas_direccionales_agregar_form_submit() */ function politicas_direccionales_agregar_form_submit($form, &$form_state){ global $user; $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $ente_planificador = $form['#ente_planificador']; if ($op == t('Cancel')) { drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/posibles/listar'); return; } $politica = $form['#politica']; module_load_include('inc', 'node', 'node.pages'); $nuevo = FALSE; $field_form = $form['#politicas_direccionales_fields']; $politica->title = 'POlitica ente ' . $ente_planificador->nid; $politica->uid = $user->uid; $politica->body = check_plain($form_state['values']['body']); $form_values = $form_state['values']; if (is_array($field_form) && count($field_form)) { foreach ($field_form as $field_id) { if (isset($form_values[$field_id]) && is_array($form_values[$field_id])) { foreach($form_values[$field_id] as $id => $value) { if (is_numeric($id) && isset($form_values[$field_id][$id]['_error_element'])) { unset($form_values[$field_id][$id]['_error_element']); } } $politica->{$field_id} = $form_values[$field_id]; } } } if (!isset($politica->field_politicas_ente)) { $politica->field_politicas_ente = array(); $politica->field_politicas_ente[] = array('nid' => $form['#ente_planificador']->nid); } $politica->field_politicas_seleccionada = array(); $politica->field_politicas_seleccionada[] = array('value' => 'NO'); $politica->field_politicas_viable = array(); $politica->field_politicas_viable[] = array('value' => 'NO'); node_object_prepare($politica); $politica->revision = 1; $politica->log = $politica->nid ? t('Se modificó la política') : t('Se agregó la política'); $politica->field_politicas_causas = array(); if (count($form_values['causas_politica'])) { foreach($form_values['causas_politica'] as $causa) { $politica->field_politicas_causas[] = array('nid' => $causa); } } //se obtienen los requerimientos y se guardan los campos para facilitar la busqueda $politica->field_politicas_requerimientos = array(); if ($form_values['cantidad_requerimientos']) { for($i = 0; $i < $form_values['cantidad_requerimientos']; $i++) { $requerimiento = trim(check_plain($form_values['req_' . $i])); if ($form_values['cantidad_ente_' . $i] && $requerimiento != '') { $form_values['req_' . $i] = $requerimiento; $politica->field_politicas_requerimientos[] = array('value' => $form_values['req_' . $i]); } } } node_save($politica); db_query('DELETE FROM {politicas_ente} WHERE nid = %d AND vid = %d', $politica->nid, $politica->vid); db_query('DELETE FROM {politicas_ente_actor} WHERE nid = %d AND vid = %d', $politica->nid, $politica->vid); if ($form_values['cantidad_requerimientos']) { for($i = 0; $i < $form_values['cantidad_requerimientos']; $i++) { if ($form_values['cantidad_ente_' . $i] && $form_values['req_' . $i] != '') { $politica->politicas_ente[$i] = array( 'requerimiento' => $form_values['req_' . $i], 'tipo' => check_plain($form_values['tipo_' . $i]), ); db_query("insert into {politicas_ente} (nid, vid, delta, requerimiento, tipo) values (%d, %d, %d, '%s', '%s')", $politica->nid, $politica->vid, $i, $politica->politicas_ente[$i]['requerimiento'], $politica->politicas_ente[$i]['tipo']); for($j = 0; $j < $form_values['cantidad_ente_' . $i]; $j++) { $politica->politicas_ente[$i]['entes'][$j] = array( 'otro_ente' => check_plain($form_values['otro_' . $i . '_' . $j]), 'ente' => $form_values['entes_' . $i . '_' . $j] == 'otro' ? 0 : $form_values['entes_' . $i . '_' . $j], 'grado' => $form_values['grado_' . $i . '_' . $j], ); db_query("insert into {politicas_ente_actor} (nid, vid, delta, delta1, otro_ente, ente, grado) values (%d, %d, %d, %d, '%s', %d, %f)", $politica->nid, $politica->vid, $i, $j, $politica->politicas_ente[$i]['entes'][$j]['otro_ente'], $politica->politicas_ente[$i]['entes'][$j]['ente'], $politica->politicas_ente[$i]['entes'][$j]['grado']); } } } } $form['#politica'] = $politica; if ($nuevo) { drupal_set_message(t('Se ha agregado la política direccional "@politica"', array('@politica' => $politica->title))); } else { drupal_set_message(t('Se ha modificado la política direccional "@politica"', array('@politica' => $politica->title))); } if (!$form_state['redirect']){ $form_state['redirect'] = array( 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/listar', ); } } /* * Implementation of politicas_direccionales_agregar_accion_form() */ function politicas_direccionales_agregar_accion_form($form_state, $ente_planificador, $politica = 0) { global $user; $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($ente->nid == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if (!$ente_has_acceso || !$politica) { drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/posibles'); } $form = array(); if ($politica) { $politica_load = $politica; if($politica_load->nid && $politica_load->type == 'politicas_direccionales' && $politica_load->field_politicas_ente[0]['nid'] == $ente_planificador->nid && $mi_fecha[1] + 86399 > $politica_load->created && $mi_fecha[0] < $politica_load->created) { $politica_leido = $politica_load; $form['#titulo_pagina'] = t('Acciones para construir viabilidad para la posible política "@titulo"', array('@titulo' => $politica_leido->title)); } } if (!isset($form['#titulo_pagina'])) { $form['#titulo_pagina'] = t('Agregar política direccional'); } drupal_set_title($form['#titulo_pagina']); politicas_direccionales_load_requerimientos($politica_leido); $form['#node'] = $politica_leido; $form['#ente_planificador'] = $ente_planificador; $form['#politica'] = $politica_leido; $node_type = content_types('politicas_direccionales'); $fields = $node_type['fields']; $field_form = array(); $arreglo = array( 'field_politicas_acciones_viab' => 'field_politicas_acciones_viab', ); if (is_array($fields) && count($fields)) { foreach($fields as $field_id => $field) { if (array_key_exists($field_id, $arreglo)) { $field_form[] = $field_id; $fields_form[] = $field_id; } elseif (variable_get('politicas_direccionales_ac_di_' . $field_id, FALSE)) { $field_form[] = $field_id; $fields_form[] = $field_id; } } } if (is_array($field_form) && count($field_form)) { module_load_include('inc', 'content', 'includes/content.node_form'); foreach ($field_form as $field_id) { $field = content_fields($field_id, 'politicas_direccionales'); $form['#field_info'][$field_id] = $field; $form += (array) content_field_form($form, $form_state, $field); } } $form['#politicas_direccionales_fields'] = $fields_form; $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 100, ); $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /* * Implementation of politicas_direccionales_agregar_accion_form_submit() */ function politicas_direccionales_agregar_accion_form_submit($form, &$form_state){ if (!$_REQUEST['destination']) { $form_state['redirect'] = 'planificacion/' . $form['#ente_planificador']->nid . '/politicas/seleccionar/inviables'; } $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $ente_planificador = $form['#ente_planificador']; if ($op == t('Cancel')) { return; } $politica = $form['#politica']; module_load_include('inc', 'node', 'node.pages'); $nuevo = FALSE; $field_form = $form['#politicas_direccionales_fields']; $form_values = $form_state['values']; if (is_array($field_form) && count($field_form)) { foreach ($field_form as $field_id) { if (isset($form_values[$field_id]) && is_array($form_values[$field_id])) { foreach($form_values[$field_id] as $id => $value) { if (is_numeric($id) && isset($form_values[$field_id][$id]['_error_element'])) { unset($form_values[$field_id][$id]['_error_element']); } } $politica->{$field_id} = $form_values[$field_id]; } } } node_object_prepare($politica); $politica->revision = 1; $politica->log = t('Se agregarón las acciones para construir la viabilidad de la política "@politica"', array('@politica' => $politica->title)); node_save($politica); //se agregan los requerimientos a la nueva version del nodo db_query("UPDATE {politicas_ente} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); db_query("UPDATE {politicas_ente_actor} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); drupal_set_message(t('Se agregarón las acciones para construir la viabilidad de la política "@politica"', array('@politica' => $politica->title))); } /* * Implementation of ente_planificador_definir_politicas_listar() * Listar politicas */ function ente_planificador_definir_politicas_listar($ente_planificador) { drupal_set_title(t('Posibles politicas direccionales')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', 'field' => 'n.title' ); $headers_table[] = array( 'data' => t('Causas Críticas'), ); if ($ente_has_acceso) { $headers_table[] = array( 'data' => t('Operación'), ); } $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); $mi_fecha_causas = ente_planificador_user_acceso_proceso("causas", $ente_planificador->tipo); $sql_variables1[] = $ente_planificador->nid; $sql_variables1[] = $mi_fecha_causas[0]; $sql_variables1[] = $mi_fecha_causas[1] + 86399; $sql_query1 = "SELECT c.nid, n.title FROM {content_type_causas} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c.field_ente_planifiador_nid = %d AND c.field_causa_critica_value = '1' AND n.created >= %d AND n.created <= %d "; $resultado = db_query($sql_query1, $sql_variables1); $causas = array(); $causas_arreglo = array(); $vector = array(); $causas_array = array();; while($causa = db_fetch_object($resultado)) { $causas_array[$causa->nid] = check_plain($causa->title); } while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $titulo = trim($politica_load->body) != ''? $politica_load->body : $politica_load->title; $row[] = array('data' => $titulo, ); $causas = array(); foreach($politica_load->field_politicas_causas as $causa) { if (isset($causas_array[$causa['nid']]) && $causas_array[$causa['nid']]) { $causas[] = $causas_array[$causa['nid']]; } } $row[] = array('data' => theme('item_list', $causas), ); if ($ente_has_acceso) { $links = array(); $links[] = l(t('Modificar'), 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/' . $politica->nid . '/editar', array('query' => array('destination' => 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/listar'),)); $links[] = l(t('Eliminar'), 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/' . $politica->nid . '/remove', array('query' => array('destination' => 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/listar'),)); $row[] = array('data' => theme('item_list', $links),); } $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales para este ente'), 'colspan' => '4'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); if ($ente_has_acceso) { $output .= l(t('Registrar Posible Política Direccional'), 'planificacion/' . $ente_planificador->nid . '/politicas/posibles/registrar'); } $output .= theme('pager', NULL); return $output; } /* * Implementation of ente_planificador_definir_politicas_listar_inviables() * Listar politicas inivables */ function ente_planificador_definir_politicas_listar_inviables($ente_planificador) { drupal_set_title(t('Consultar posibles políticas inviables')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("viabilidad", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', 'field' => 'n.title' ); $headers_table[] = array( 'data' => t('Acciones para Construir Viabilidad'), ); $puede_viabilidad = ente_planificador_usuario_tiene_politicas_viabilidad($ente_planificador); if ($puede_viabilidad && $ente_has_acceso) { $headers_table[] = array( 'data' => t('Operación'), ); } $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_viable_value = 'NO' AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_viable_value = 'NO' AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $row[] = array('data' => $politica_load->body, ); $viabilidades = array(); if ($politica_load->field_politicas_acciones_viab[0]['value']){ foreach($politica_load->field_politicas_acciones_viab as $viabilidad) { if (trim($viabilidad['value']) != ''){ $viabilidades[] = $viabilidad['value']; } } } $cuenta = count($viabilidades); $row[] = array('data' => theme('item_list', $viabilidades), ); if ($puede_viabilidad && $ente_has_acceso) { $links = array(); $links[] = l(t('Modificar acciones para construir viabilidad'), 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/' . $politica->nid . '/editar_accion', array('query' => array('destination' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/inviables'),)); $links[] = l(t('Eliminar acciones para construir viabilidad'), 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/' . $politica->nid . '/remove_accion', array('query' => array('destination' => 'planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/inviables'),)); $row[] = array('data' => theme('item_list', $links),); } $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales inviables para este ente'), 'colspan' => '4'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of politicas_direccionales_seleccionar_politicas_listar() * Listar politicas direccionales */ function politicas_direccionales_seleccionar_politicas_listar($ente_planificador) { drupal_set_title(t('Consultar políticas direccionales')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', 'field' => 'n.title' ); $headers_table[] = array( 'data' => t('Acciones para Construir Viabilidad'), ); $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $row[] = array('data' => $politica_load->body, ); $viabilidades = array(); if ($politica_load->field_politicas_acciones_viab[0]['value']) { foreach($politica_load->field_politicas_acciones_viab as $viabilidad) { if (trim($viabilidad['value']) != ''){ $viabilidades[] = $viabilidad['value']; } } } $cuenta = count($viabilidades); if ($cuenta) { $row[] = array('data' => theme('item_list', $viabilidades), ); } else { $row[] = array('data' => t('No existen acciones para construir viabilidad para esta política'), ); } $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales para este ente'), 'colspan' => '3'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /** * Implementation of hook_theme(). */ function politicas_direccionales_theme() { $politicas_direccionales_path = drupal_get_path('module', 'politicas_direccionales') . '/templates'; return array( 'politicas_direccionales_agregar_form' => array( 'arguments' => array('form' => NULL), ), 'politicas_direccionales_agregar_estrategia_form' => array( 'arguments' => array('form' => NULL), ), 'politicas_direccionales_ver_articulacion' => array( 'arguments' => array( 'articulacion' => array(), ), 'template' => 'politicas-direccionales-ver-articulacion', 'path' => $politicas_direccionales_path, ), 'politicas_direccionales_ver_estrategia' => array( 'arguments' => array( 'politica' => array(), 'estrategia' => array(), ), 'template' => 'politicas-direccionales-ver-estrategia', 'path' => $politicas_direccionales_path, ), ); } /** * Implementation of theme_politicas_direccionales_agregar_form(). * El tema para el formulario de agregar o editar politicas */ function theme_politicas_direccionales_agregar_form($form) { $output = ''; $output .= drupal_render($form['body']); $output .= drupal_render($form['causas_politica']); if (count($form['#vector_descriptores'])) { $output .= '
'; foreach($form['#vector_descriptores'] as $nid => $descriptores) { $output .= '
'. theme('item_list', $descriptores) . '
'; } $output .= '
'; } $output .= '
' . t('Objetivos') . '' . drupal_render($form['field_politicas_objetivog']) . drupal_render($form['field_politicas_objetivoe']) . '
'; $output .= drupal_render($form['field_politicas_areasimp']); $output .= drupal_render($form); return $output; } /* * Implementation of hook_node_info() */ function politicas_direccionales_node_info() { return array( 'politicas_direccionales' => array( 'name' => t('Políticas Direcionales'), 'description' => t('Políticas Direcionales'), 'has_body' => TRUE, 'has_title' => TRUE, 'title_label' => 'Nombre de la Política', 'body_label' => 'Nombre de la Política', 'module' => 'politicas_direccionales', ), 'estrategia' => array( 'name' => t('estrategias'), 'description' => t('estrategias'), 'has_body' => TRUE, 'has_title' => TRUE, 'title_label' => 'estrategia', 'body_label' => 'estrategia', 'module' => 'politicas_direccionales', ), ); } /* * Implementation of hook_form() */ function politicas_direccionales_form(&$node, $form_state) { return node_content_form($node, $form_state); } /* * Implementation of hook_access */ function politicas_direccionales_access($op, $node, $account) { global $user; if ($op == 'view') { return user_access('ver planificador'); } if ($node->type == 'estrategia' && $op == 'delete' && $account->uid == $node->uid && user_access('ver planificador')){ return TRUE; } if ($op == 'create' || $op == 'delete' || $op == 'edit') { return (user_access('admin planificador')); } } /* * hook_form_alter() */ function politicas_direccionales_form_alter(&$form, $form_state, $form_id) { //impedir que los campos sean borrados con la interfaz if ($form_id == 'content_field_overview_form' && $form['#type_name'] == 'direccionales'){ $arreglo = array('field_direccional_causa', 'field_direccional_ente', 'field_direccional_seleccionado', 'field_direccional_requerimientos', 'field_direccional_actores'); foreach ($arreglo as $valor) { if (isset($form[$valor]['remove']['#value'])) { $form[$valor]['remove']['#value'] = ''; } } } if ($form_id == 'content_field_remove_form' && $form['type_name']['#value'] == 'direccionales'){ $arreglo = array('field_direccional_causa', 'field_direccional_ente', 'field_direccional_seleccionado', 'field_direccional_requerimientos', 'field_direccional_actores'); foreach ($arreglo as $valor) { if($form['field_name']['#value'] == $valor) { $form['actions']['submit']['#access'] = FALSE; $form['description']['#value'] = t('Acción no permitida este campo ha sido agregado por un modulo.'); } } } } /** * Implementation of hook_form_FORM_ID_alter(): content_field_edit_form. */ function politicas_direccionales_form_content_field_edit_form_alter(&$form, $form_state) { if ($form['#field']['type_name'] == 'direccionales') { $form['widget']['ente_planificador'] = array( '#title' => 'ente planificador', '#type' => 'checkbox', '#default_value' => variable_get('ente_planificador_' . $form['#field']['field_name'], FALSE), '#return_value' => '1', ); $form['#submit'][] = 'politicas_direccionales_content_field_edit_form_submit'; } } /* * Implementation of politicas_direccionales_agregar_estrategia_form() */ function politicas_direccionales_content_field_edit_form_submit($form, &$form_state) { variable_set('ente_planificador_' . $form_state['values']['field_name'], $form_state['values']['ente_planificador']); } //ESTRATEGIAS /* * Implementation of politicas_direccionales_agregar_estrategia_form() */ function politicas_direccionales_agregar_estrategia_form($form_state, $ente_planificador, $estrategia = 0) { global $user; $proceso = arg(5) == 'reformular' ? 'reformulacion_estrategias' : 'estrategias'; $mi_fecha = ente_planificador_user_acceso_proceso($proceso, $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje($proceso, $ente_planificador->tipo); } else { if ($ente->nid == $ente_planificador->nid) { muestra_mensaje($proceso, $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $politicas_direccionales_path = drupal_get_path('module', 'politicas_direccionales'); drupal_add_js($politicas_direccionales_path . '/js/estrategias.js'); $estrategia_leido = new stdClass(); $estrategia_leido->type = 'estrategia'; $estrategia_leido->title = ''; $estrategia_leido->body = ''; $estrategia_leido->nid = 0; $form = array(); if ($estrategia) { $estrategia_load = $estrategia; if($estrategia_load->nid && $estrategia_load->type == 'estrategia' && $estrategia_load->field_estrategia_ente[0]['nid'] == $ente_planificador->nid && $mi_fecha[1] + 86399 > $estrategia_load->created && $mi_fecha[0] < $estrategia_load->created) { $estrategia_leido = $estrategia_load; $form['#titulo_pagina'] = t('Modificar la estrategia'); } } if (!isset($form['#titulo_pagina'])) { $form['#titulo_pagina'] = t('Agregar estrategia'); } $ente_planificador1 = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador1 = node_load($macro); } } drupal_set_title($form['#titulo_pagina']); $form['#node'] = $estrategia_leido; $form['#proceso'] = $proceso; $form['#ente_planificador'] = $ente_planificador; $form['#estrategia'] = $estrategia_leido; $sql_query = "SELECT c.nid FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador1->tipo); $sql_variables[] = $ente_planificador1->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = db_query($sql_query, $sql_variables); $politicas = array(); $politicas_arreglo = array(); $vector = array(); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $politicas[$politica_load->nid] = $politica_load->body; if (is_array($politica_load->field_politicas_requerimientos) && count($politica_load->field_politicas_requerimientos)) { $vector[$politica_load->nid] = array(); foreach ($politica_load->field_politicas_requerimientos as $valor) { $vector[$politica_load->nid][] = $valor['value']; } } } $form['#politicas'] = $politicas; drupal_add_js(array('politicas' => $form['#politicas']), 'setting'); $form['#vector_requerimientos'] = $vector; if (!count($politicas)) { drupal_set_message(t('El ente @planificador aun no ha definido las Políticas Direccionales', array('@planificador' => check_plain($ente_planificador->title)))); drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/seleccionar/listar'); } $default_values = array(); if (count($estrategia_load->field_estrategia_politicas_d)) { foreach($estrategia_load->field_estrategia_politicas_d as $politica) { $default_values[] = $politica['nid']; } } $form['estrategia_politica'] = array( '#type' => 'select', '#default_value' => $default_values, '#options' => $politicas, '#multiple' => '1', '#title' => t('Política que aborda la estrategia'), '#required' => TRUE, ); $form['title'] = array( '#type' => 'textfield', '#title' => t('Nombre de la estrategia'), '#required' => TRUE, '#size' => 40, '#default_value' => $estrategia_leido->title, ); $node_type = content_types('estrategia'); $fields = $node_type['fields']; $field_form = array(); $arreglo = array( 'field_estrategia_area' => 'field_estrategia_area', 'field_estrategia_actores' => 'field_estrategia_actores', ); if (is_array($fields) && count($fields)) { foreach($fields as $field_id => $field) { if (array_key_exists($field_id, $arreglo)) { $field_form[] = $field_id; $fields_form[] = $field_id; } elseif (variable_get('politicas_direccionales_ac_di_' . $field_id, FALSE)) { $field_form[] = $field_id; $fields_form[] = $field_id; } } } if (is_array($field_form) && count($field_form)) { module_load_include('inc', 'content', 'includes/content.node_form'); foreach ($field_form as $field_id) { $field = content_fields($field_id, 'estrategia'); $form['#field_info'][$field_id] = $field; $form += (array) content_field_form($form, $form_state, $field); } } $form['#estrategias_fields'] = $fields_form; $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 100, ); $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /* * Implementation of theme_politicas_direccionales_agregar_estrategia_form() * Tema para el formulario de agregar o editar una estrategias */ function theme_politicas_direccionales_agregar_estrategia_form($form) { $output = ''; $output .= drupal_render($form['estrategia_politica']); if (count($form['#vector_requerimientos'])) { $output .= '
'; foreach($form['#vector_requerimientos'] as $nid => $requerimientos) { $output .= '
'. theme('item_list', $requerimientos) . '
'; } $output .= '
'; } $output .= drupal_render($form['title']); $output .= drupal_render($form); return $output; } /* * Implementation of politicas_direccionales_agregar_estrategia_form_validate() */ function politicas_direccionales_agregar_estrategia_form_validate($form, &$form_state){ $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancel')) { return; } drupal_set_title($form['#titulo_pagina']); if (trim($form_state['values']['title']) == '') { form_set_error('title', t('Debe agregar el nombre de la estrategia')); } } /* * Implementation of politicas_direccionales_agregar_estrategia_form_submit() */ function politicas_direccionales_agregar_estrategia_form_submit($form, &$form_state){ global $user; $ente_planificador = $form['#ente_planificador']; if (!$form_state['redirect']) { $form_state['redirect'] = 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/listar'; } $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $ente_planificador = $form['#ente_planificador']; if ($op == t('Cancel')) { drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/estrategias/listar'); return; } $estrategia = $form['#estrategia']; module_load_include('inc', 'node', 'node.pages'); $nuevo = FALSE; $field_form = $form['#estrategias_fields']; $estrategia->title = check_plain($form_state['values']['title']); $estrategia->uid = $user->uid; $form_values = $form_state['values']; if (is_array($field_form) && count($field_form)) { foreach ($field_form as $field_id) { if (isset($form_values[$field_id]) && is_array($form_values[$field_id])) { foreach($form_values[$field_id] as $id => $value) { if (is_numeric($id) && isset($form_values[$field_id][$id]['_error_element'])) { unset($form_values[$field_id][$id]['_error_element']); } } $estrategia->{$field_id} = $form_values[$field_id]; } } } if (!isset($estrategia->field_estrategia_ente)) { $estrategia->field_estrategia_ente = array(); $estrategia->field_estrategia_ente[] = array('nid' => $form['#ente_planificador']->nid); } node_object_prepare($estrategia); $estrategia->revision = 1; $estrategia->log = $estrategia->nid ? t('Se modificó la estrategia') : t('Se agregó la estrategia'); $estrategia->field_estrategia_politicas_d = array(); if (count($form_values['estrategia_politica'])) { foreach($form_values['estrategia_politica'] as $politica) { $estrategia->field_estrategia_politicas_d[] = array('nid' => $politica); } } node_save($estrategia); $form['#estrategia'] = $estrategia; if ($nuevo) { drupal_set_message(t('Se ha agregado la estrategia @estrategia', array('@estrategia' => $estrategia->title))); } else { drupal_set_message(t('Se ha modificado la estrategia @estrategia', array('@estrategia' => $estrategia->title))); } if (!$form_state['redirect']){ $form_state['redirect'] = array( 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/listar', ); } } /* * Implementation of leer_estrategias_por_politica() * Leer estrategias dada una politica */ function leer_estrategias_por_politica($ente_planificador, $politica){ $estrategias = array(); if ($ente_planificador && $ente_planificador->nid && $politica && $politica->nid) { if ($ente_planificador->tipo == 1) { $resultado = db_query("SELECT n.nid, n.title, n.uid, e.field_estrategia_ente_nid FROM {node} AS n INNER JOIN {content_field_estrategia_politicas_d} AS p ON p.nid = n.nid AND p.vid = n.vid INNER JOIN {content_type_estrategia} AS e ON e.nid = n.nid AND e.vid = n.vid WHERE p.field_estrategia_politicas_d_nid = %d ORDER BY n.title", $politica->nid); } else { $resultado = db_query("SELECT n.nid, n.title, n.uid, e.field_estrategia_ente_nid FROM {node} AS n INNER JOIN {content_field_estrategia_politicas_d} AS p ON p.nid = n.nid AND p.vid = n.vid INNER JOIN {content_type_estrategia} AS e ON e.nid = n.nid AND e.vid = n.vid WHERE p.field_estrategia_politicas_d_nid = %d AND e.field_estrategia_ente_nid = %d ORDER BY n.title", $politica->nid, $ente_planificador->nid); } while($estrategia = db_fetch_object($resultado)) { $estrategias[$estrategia->nid] = array( 'title' => $estrategia->title, 'ente' => $estrategia->field_estrategia_ente_nid, 'uid' => $estrategia->uid, ); } } return $estrategias; } /* * Implementation of politicas_direccionales_estrategias_posibles_listar() * Listar posibles estrategias */ function politicas_direccionales_estrategias_posibles_listar($ente_planificador) { drupal_set_title(t('Consultar estrategias')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', ); $headers_table[] = array( 'data' => t('estrategias'), ); $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $row[] = array('data' => $politica_load->body, ); $estrategias = leer_estrategias_por_politica($ente_planificador_micro, $politica); $estrategias_f = array(); if (count($estrategias)) { foreach($estrategias as $id => $estrategia) { if ($ente_has_acceso && $estrategia['ente'] == $ente_planificador_micro->nid && $user->uid == $estrategia['uid']) { $links = array(); $links[] = l(t('Modificar'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/' . $id . '/editar'); $links[] = l(t('Eliminar'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/' . $id . '/remove'); $estrategias[$id]['title'] = $estrategia['title'] . ' ' . theme('item_list', $links); } $estrategias_f[] = $estrategias[$id]['title']; } } $row[] = array('data' => theme('item_list', $estrategias_f), ); $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales para este ente'), 'colspan' => '3'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /** * Implementation of politicas_direccionales_remove_estrategia_posible_politica_form() * Eliminar estrategia */ function politicas_direccionales_remove_estrategia_posible_politica_form($form_state, $ente = 0, $estrategia = 0) { $form = array(); $form['#ente'] = $ente; $form['#estrategia'] = $estrategia; $message = t('Esta seguro de eliminar la estrategia "@nombre"?', array('@nombre' => $form['#estrategia']->title)); $caption = ''; $return_path = $_REQUEST['destination'] ? $_REQUEST['destination'] : 'planificacion/' . $form['#ente']->nid . '/politicas/estrategias/listar'; return confirm_form($form, $message, $return_path, $caption, t('Eliminar')); } /** * Implementation of politicas_direccionales_remove_estrategia_posible_politica_form_submit(). * Process funcion delete estrategia. */ function politicas_direccionales_remove_estrategia_posible_politica_form_submit($form, &$form_state) { global $user; $estrategia = $form['#estrategia']; $titulo = $form['#estrategia']->title; node_delete($estrategia->nid); $texto = t('Se eliminó la estrategia "@estrategia"', array('@estrategia' => $titulo)); drupal_set_message($texto); if (!$_REQUEST['destination']) { // add redirect $form_state['redirect'] = 'planificacion/' . $form['#ente']->nid . '/politicas/estrategias/listar'; } } /* * Implementation of politicas_direccionales_estrategias_posibles_identificar() * Identificar posible articulación */ function politicas_direccionales_estrategias_posibles_identificar($ente_planificador, $articular = 0, $nid = 0) { drupal_set_title(t('Consultar estrategias')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("articulacion_estrategias", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; $fecha = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 1; $headers_table = array(); $headers_table[] = array( 'data' => t('estrategia'), 'sort' => 'asc', 'field' => 'n.title' ); $headers_table[] = array( 'data' => t('Posible Articulación'), ); $column = 2; if ($articular) { $headers_table[] = array( 'data' => t('estrategia a articular'), ); $column++; } $sqlcount = "select count(c.nid) FROM {content_type_estrategia} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_estrategia} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador_micro->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador_micro->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); $estrategias_f = array(); $articular_found = FALSE; while($estrategia = db_fetch_object($result)) { $estrategia_load = node_load($estrategia->nid); $row = array(); $row[] = array('data' => $estrategia_load->title, ); $articulacion = array(); if ($estrategia_load->field_estrategia_politicas_d[0]['nid']) { foreach($estrategia_load->field_estrategia_politicas_d as $value) { if (!isset($estrategias_f[$value['nid']])) { $estrategias = leer_todas_estrategias_por_politica($ente_planificador_micro, $value['nid']); $estrategias_f[$value['nid']] = $estrategias['neighbour']; } if (count($estrategias_f[$value['nid']])) { foreach($estrategias_f[$value['nid']] as $id => $valor) { if ($ente_has_acceso) { if ($articular && $id == $articular) { $articular_found = TRUE; } $attributes = array(); if (isset($_GET['page'])) { $attributes['query'] = 'page=' . $_GET['page']; } $articulacion[] = $valor['title'] . ' (' . l(t('Registrar solicitud de posible articulación'), 'planificacion/' . $ente_planificador_micro->nid .'/politicas/estrategias/identificar/' . $id . '/' . $estrategia_load->nid, $attributes) . ')'; } else { $articulacion[] = $valor['title']; } } } } } if (count($articulacion)) { $row[] = array('data' => theme('item_list', $articulacion), ); } else { $row[] = array('data' => t('No existen estrategias que articular'), ); } if ($articular_found && $nid == $estrategia_load->nid) { $articular_load = node_load($articular); $output1 = node_view($articular_load); $output1 .= drupal_get_form('politicas_direccionales_agregar_articulacion_form', $ente_planificador_micro, $estrategia_load, $articular_load); $row[] = array('data' => $output1, ); } elseif($articular && is_numeric($articular)) { $row[] = array('data' => '', ); } $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron estrategias para este ente'), 'colspan' => $column); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of leer_todas_estrategias_por_politica() * Leer estrategias por politicas */ function leer_todas_estrategias_por_politica($ente_planificador, $politica){ $estrategias = array(); $estrategias['all'] = array(); $estrategias['own'] = array(); $estrategias['neighbour'] = array(); if ($ente_planificador && $ente_planificador->nid && $politica && is_numeric($politica)) { $resultado = db_query("SELECT n.nid, n.title, e.field_estrategia_ente_nid FROM {node} AS n INNER JOIN {content_field_estrategia_politicas_d} AS p ON p.nid = n.nid AND p.vid = n.vid INNER JOIN {content_type_estrategia} AS e ON e.nid = n.nid AND e.vid = n.vid WHERE p.field_estrategia_politicas_d_nid = %d ORDER BY n.title", $politica); while($estrategia = db_fetch_object($resultado)) { if ($estrategia->field_estrategia_ente_nid == $ente_planificador->nid) { $estrategias['own'][$estrategia->nid] = array( 'title' => $estrategia->title, 'ente' => $estrategia->field_estrategia_ente_nid, ); } else { $estrategias['neighbour'][$estrategia->nid] = array( 'title' => $estrategia->title, 'ente' => $estrategia->field_estrategia_ente_nid, ); } $estrategias['all'][$estrategia->nid] = array( 'title' => $estrategia->title, 'ente' => $estrategia->field_estrategia_ente_nid, ); } } return $estrategias; } /* * Implementation of politicas_direccionales_agregar_articulacion_form() * Formulario para agregar articulacion de actores en base a estrategias */ function politicas_direccionales_agregar_articulacion_form($form_state, $ente_planificador = 0, $estrategia = 0, $estrategia_art = 0) { $form = array(); $form['#ente_plan'] = $ente_planificador; $form['#estrategia'] = $estrategia; $form['#estrategia_art'] = $estrategia_art; $form['#estrategia_page'] = isset($_GET['page']) ? $_GET['page'] : 0; $sql_query = "SELECT * FROM {politicas_direccionales_estrategias} WHERE estrategia = %d AND estrategia_art = %d"; $articulacion_load = db_fetch_object(db_query($sql_query, $estrategia->nid, $estrategia_art->nid)); $form['#articulacion_load'] = $articulacion_load; $form['mensaje'] = array( '#type' => 'textarea', '#title' => t('Solicitar Articulación'), '#default_value' => $articulacion_load ? $articulacion_load->mensaje : '', ); $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); if ($articulacion_load) { $form['buttons']['remove'] = array( '#type' => 'submit', '#value' => t('Remove'), '#weight' => 101, ); } $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 102, ); return $form; } /** * Implementation of politicas_direccionales_agregar_articulacion_form_submit(). * Process funcion agregar articulacion. */ function politicas_direccionales_agregar_articulacion_form_submit($form, &$form_state) { global $user; $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $ente_planificador = $form['#ente_planificador']; if ($op == t('Cancel')) { drupal_goto('planificacion/' . $form['#ente_plan']->nid . '/politicas/estrategias/identificar/' . $form['#estrategia_art']->nid . '/' . $form['#estrategia']->nid); return; } db_query("DELETE FROM {politicas_direccionales_estrategias} WHERE estrategia = %d AND estrategia_art = %d", $form['#estrategia']->nid, $form['#estrategia_art']->nid); $mensaje = t('Se eliminó la articulación entre la estrategia "@estrategia" y "@estrate_art"', array('@estrategia' => $form['#estrategia']->title, '@estrate_art' => $form['#estrategia_art']->title)); $ente = $form['#ente_plan']->nid; if ($op == t('Submit')) { db_query("INSERT into {politicas_direccionales_estrategias} (ente, estrategia, ente_art, estrategia_art, mensaje, creacion) values (%d, %d, %d, %d, '%s', %d)", $form['#ente_plan']->nid, $form['#estrategia']->nid, $form['#estrategia_art']->field_estrategia_ente[0]['nid'], $form['#estrategia_art']->nid, check_plain($form_state['values']['mensaje']), time()); $mensaje = t('Se agregó la articulación entre la estrategia "@estrategia" y "@estrate_art"', array('@estrategia' => $form['#estrategia']->title, '@estrate_art' => $form['#estrategia_art']->title)); } drupal_set_message($mensaje); if (!$form_state['redirect']){ $query = array(); if (array_key_exists('page', $_GET) && $_GET['page']) { $query['page'] = $_GET['page']; } $form_state['redirect'] = array( 'planificacion/' . $ente . '/politicas/estrategias/identificar/' . $form['#estrategia_art']->nid . '/' . $form['#estrategia']->nid, $query, ); } } /** * Implementation of _politicas_direccionales_articulacion_estrategia(). * Obtener las articulaciones realizadas. */ function _politicas_direccionales_articulacion_estrategia($estrategia, $fecha){ $articulaciones = array(); if ($estrategia && $estrategia->nid && $estrategia->type == 'estrategia' && is_array($fecha) && count($fecha)) { $resultado = db_query("SELECT e1.estrategia, e1.ente, n1.title AS estra_titulo, n1.nid AS estra_nid, n2.title AS ente_titulo, e1.mensaje FROM {politicas_direccionales_estrategias} AS e1 INNER JOIN {node} as n1 ON n1.nid = e1.estrategia INNER JOIN {node} AS n2 ON n2.nid = e1.ente WHERE e1.estrategia_art = %d AND creacion >= %d AND creacion <= %d", $estrategia->nid, $fecha[0], $fecha[1]); while($articulacion = db_fetch_object($resultado)) { $articulaciones[$articulacion->estra_nid] = $articulacion; } } return $articulaciones; } /* * Implementation of politicas_direccionales_estrategias_consultar_articulaciones() * Consultar artioclaciones */ function politicas_direccionales_estrategias_consultar_articulaciones($ente_planificador) { drupal_set_title(t('Consultar Articulación')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("articulacion_estrategias", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; $fecha = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('estrategia'), 'sort' => 'asc', 'field' => 'n.title' ); $headers_table[] = array( 'data' => t('Posible Articulación'), ); $column = 2; $sqlcount = "select count(c.nid) FROM {content_type_estrategia} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title, n.type FROM {content_type_estrategia} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_estrategia_ente_nid = %d AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha1 = ente_planificador_user_acceso_proceso("estrategias", $ente_planificador_micro->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador_micro->nid; $sql_variables[] = $mi_fecha1[0]; $sql_variables[] = $mi_fecha1[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($estrategia = db_fetch_object($result)) { $estrategia_load = node_load($estrategia->nid); $row = array(); $row[] = array('data' => $estrategia_load->title, ); $mi_fecha[1] += 86399; $articulacion = _politicas_direccionales_articulacion_estrategia($estrategia, $mi_fecha); $articulaciones = array(); if (count($articulacion)){ foreach($articulacion as $arti) { $articulaciones[] = theme('politicas_direccionales_ver_articulacion', $arti); } } if (count($articulaciones)) { $row[] = array('data' => theme('item_list', $articulaciones), ); } else { $row[] = array('data' => t('No existe articulación para esta estrategia.'), ); } $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron estrategias para este ente'), 'colspan' => $column); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of politicas_direccionales_estrategias_consultar_articulaciones_actores_micro() * Identificar posible articulación */ function politicas_direccionales_estrategias_consultar_articulaciones_actores_micro($ente_planificador, $articular = 0, $nid = 0) { drupal_set_title(t('Consultar posibles articulaciones entre actores micro')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("articulacion_estrategias", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; $fecha = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("articulacion_estrategias", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Ente Planificador'), 'sort' => 'asc', 'field' => 'e1.title' ); $headers_table[] = array( 'data' => t('estrategia'), 'field' => 'es2.title' ); $headers_table[] = array( 'data' => t('Ente Articulador'), 'field' => 'ea.title' ); $headers_table[] = array( 'data' => t('estrategia Articuladora'), 'field' => 'es1.title' ); $headers_table[] = array( 'data' => t('Mensaje'), ); $sqlcount = "select count(a.ente) FROM {politicas_direccionales_estrategias} AS a INNER JOIN {node} AS ea ON ea.nid = a.ente INNER JOIN {node} AS e1 ON e1.nid = a.ente_art INNER JOIN {node} AS es1 ON es1.nid = a.estrategia INNER JOIN {node} AS es2 ON es2.nid = a.estrategia_art AND a.creacion >= %d AND a.creacion <= %d"; $sql_query = "SELECT ea.title AS ente_articular, e1.title AS ente, es1.title AS estrategia_art, es2.title AS estrategia, a.mensaje FROM {politicas_direccionales_estrategias} AS a INNER JOIN {node} AS ea ON ea.nid = a.ente INNER JOIN {node} AS e1 ON e1.nid = a.ente_art INNER JOIN {node} AS es1 ON es1.nid = a.estrategia INNER JOIN {node} AS es2 ON es2.nid = a.estrategia_art AND a.creacion >= %d AND a.creacion <= %d"; $sql_query.= tablesort_sql($headers_table); $sql_variables = array(); $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($estrategia = db_fetch_object($result)) { $row = array(); $row[] = array('data' => $estrategia->ente, ); $row[] = array('data' => $estrategia->estrategia, ); $row[] = array('data' => $estrategia->ente_articular, ); $row[] = array('data' => $estrategia->estrategia_art, ); $row[] = array('data' => $estrategia->mensaje, ); $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron estrategias ha articular'), 'colspan' => 5); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of politicas_direccionales_estrategias_posibles_listar_reformular() * Listar posibles estrategias para reformular */ function politicas_direccionales_estrategias_posibles_listar_reformular($ente_planificador) { drupal_set_title(t('Consultar estrategias')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso('reformulacion_estrategias', $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje('reformulacion_estrategias', $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje('reformulacion_estrategias', $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', ); $headers_table[] = array( 'data' => t('estrategias'), ); $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $row[] = array('data' => $politica_load->body, ); $estrategias = leer_estrategias_por_politica($ente_planificador_micro, $politica); $estrategias_f = array(); if (count($estrategias)) { foreach($estrategias as $id => $estrategia) { if ($ente_has_acceso && $estrategia['ente'] == $ente_planificador_micro->nid) { $links = array(); $links[] = l(t('Reformular'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/' . $id . '/reformular'); $estrategias[$id]['title'] = $estrategia['title'] . ' ' . theme('item_list', $links); } $estrategias_f[] = $estrategias[$id]['title']; } } $row[] = array('data' => theme('item_list', $estrategias_f), ); $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales para este ente'), 'colspan' => '3'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of politicas_direccionales_estrategias_seleccionar_estrategias() * Seleccionar estrategias */ function politicas_direccionales_estrategias_seleccionar_estrategias($ente_planificador) { drupal_set_title(t('Seleccionar estrategias')); global $user; $ente = usuario_tiene_ente($user->uid); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $current_time = time(); $ente_has_acceso = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje("posibles", $ente_planificador->tipo); } else { if ($user->entes == $ente_planificador->nid) { muestra_mensaje("posibles", $ente_planificador->tipo, 0); } } if ($fecha && (user_access('admin planificador') || $fecha && $user->entes == $ente_planificador->nid)) { $ente_has_acceso = TRUE; } $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $ente_has_acceso = FALSE; $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } $step = 10; $headers_table = array(); $headers_table[] = array( 'data' => t('Nombre de la política Direccional'), 'sort' => 'asc', ); $headers_table[] = array( 'data' => t('Posibles estrategias'), ); $headers_table[] = array( 'data' => t('estrategias Seleccionadas'), ); $sqlcount = "select count(c.nid) FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND c.field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d"; $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $sql_query.= tablesort_sql($headers_table); $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = pager_query($sql_query, $step, 0, $sqlcount, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); $row = array(); $row[] = array('data' => $politica_load->body, ); $estrategias = leer_estrategias_por_politica($ente_planificador_micro, $politica); $estrategias_f = array(); $estrategias_s = array(); if ($politica_load->field_politicas_estrategias[0]['nid']) { foreach($politica_load->field_politicas_estrategias as $est) { if ($est['nid']) { $estrategias_s[$est['nid']] = $est['nid']; } } } if (count($estrategias)) { foreach($estrategias as $id => $estrategia) { $estrategias_f[] = $estrategia['title']; if (array_key_exists($id, $estrategias_s)) { $estrategias_s[$id] = $estrategia['title']; } } } $count_f = count($estrategias_f); if ($count_f) { $texto_estrategia = theme('item_list', $estrategias_f); } else { $texto_estrategia = t('La política no tiene estrategias registradas'); } $row[] = array('data' => $texto_estrategia, ); $count_s = count($estrategias_s); $links = array(); if ($count_s) { $texto_estrategia = theme('item_list', $estrategias_s); } else { $texto_estrategia = t('La política no tiene estrategias seleccionadas'); } if ($ente_has_acceso && $count_f) { $links[] = l(t('Seleccionar estrategias para esta política'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/'. $politica_load->nid . '/seleccionar', array('query' => array('destination' => 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/seleccionar'))); } $texto_estrategia .= theme('item_list', $links); $row[] = array('data' => $texto_estrategia, ); $rows[] = $row; } if (!count($rows)) { $row = array(); $row[] = array('data' => t('No se encontraron Políticas Direccionales para este ente'), 'colspan' => '3'); $rows[] = $row; } $output = theme('table', $headers_table, $rows); $output .= theme('pager', NULL); return $output; } /* * Implementation of politicas_direccionales_seleccionar_estrategias_form() * Formulario para seleccionar estrategias */ function politicas_direccionales_seleccionar_estrategias_form($form_state, $ente_planificador = 0, $politica = 0) { $form = array(); $form['#ente_plan'] = $ente_planificador; $form['#politica'] = $politica; $estrategias = leer_estrategias_por_politica($ente_planificador, $politica); $estrategias_f = array(); if (count($estrategias)) { foreach($estrategias as $id => $estrategia) { $estrategias_f[$id] = $estrategia['title']; } } $default = array(); if ($politica->field_politicas_estrategias[0]['nid']) { foreach($politica->field_politicas_estrategias as $est) { if ($est['nid']) { $default[$est['nid']] = $est['nid']; } } } $form['estrategias_seleccionar'] = array( '#type' => 'checkboxes', '#title' => t('Seleccionar estrategias'), '#default_value' => $default, '#options' => $estrategias_f, '#required' => TRUE, '#description' => t('Seleccionar las estrategias para la política direccionale.'), ); $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 100, ); $form['buttons']['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), '#weight' => 100, ); $form['buttons']['cancel'] = array( '#type' => 'submit', '#value' => t('Cancel'), '#weight' => 102, ); $form['#after_build'] = array(); $form['#after_build'][] = 'politicas_direccionales_skip_validation_form_after_build'; return $form; } /* * Implementation of politicas_direccionales_seleccionar_estrategias_form_submit() */ function politicas_direccionales_seleccionar_estrategias_form_submit($form, &$form_state){ $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; $ente_planificador = $form['#ente_plan']; if ($op == t('Cancel')) { drupal_goto('planificacion/' . $ente_planificador->nid . '/politicas/estrategias/seleccionar'); return; } $politica = $form['#politica']; module_load_include('inc', 'node', 'node.pages'); $nuevo = FALSE; $form_values = $form_state['values']; node_object_prepare($politica); $politica->revision = 1; $politica->log = t('Se agregarón estrategias a la política direccional'); $politica->field_politicas_estrategias = array(); if (count($form_values['estrategias_seleccionar'])) { foreach($form_values['estrategias_seleccionar'] as $estrategia) { if ($estrategia) { $politica->field_politicas_estrategias[] = array('nid' => $estrategia); } } } node_save($politica); //se agregan los requerimientos a la nueva version del nodo db_query("UPDATE {politicas_ente} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); db_query("UPDATE {politicas_ente_actor} SET vid = %d WHERE nid = %d", $politica->vid, $politica->nid); drupal_set_message(t('Se agregarón las estrategias a la política direccional "%politica"', array('%politica' => $politica->title))); if (!$form_state['redirect']){ $form_state['redirect'] = array( 'planificacion/' . $ente_planificador->nid . '/politicas/estrategias/seleccionar', ); } } /* * Implementation of politicas_direccionales_mostrar_estrategias_por_politicas() * Mostrar politicas y estrategias seleccionadas */ function politicas_direccionales_mostrar_estrategias_por_politicas($ente_planificador, $politica = 0, $estrategia = 0) { drupal_set_title(t('Estrategias para materializar políticas direccionales')); $output = ''; $ente_planificador_micro = $ente_planificador; if ($ente_planificador->tipo > 1) { $macro = ente_planificador_ente_macro($ente_planificador); if ($macro) { $ente_has_acceso = TRUE; $ente_planificador = node_load($macro); } } if (!$politica && !$estrategia) { $links = array(); $output .= t('Seleccione la política:'); $sql_query = "SELECT c.nid, n.title FROM {content_type_politicas_direccionales} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid WHERE c. field_politicas_ente_nid = %d AND field_politicas_seleccionada_value = 'SÍ' AND n.created >= %d AND n.created <= %d "; $mi_fecha = ente_planificador_user_acceso_proceso("posibles", $ente_planificador->tipo); $sql_variables = array(); $sql_variables[] = $ente_planificador->nid; $sql_variables[] = $mi_fecha[0]; $sql_variables[] = $mi_fecha[1] + 86399; $result = db_query($sql_query, $sql_variables); while($politica = db_fetch_object($result)) { $politica_load = node_load($politica->nid); if ($politica_load->field_politicas_estrategias[0]['nid']) { $links[] = l($politica_load->body, 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr/' . $politica_load->nid); } else { $links[] = t('%politica_nombre (No existen estrategias seleccionadas para esta política)', array('%politica_nombre' => $politica_load->body)); } } $output .= theme('item_list', $links); } elseif ($politica && is_numeric($politica) && !$estrategia) { $links = array(); $politica_load = node_load($politica); if ($politica_load->field_politicas_seleccionada[0]['value'] != 'SÍ') { drupal_set_message(t('No existe la política direccional')); drupal_goto('planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr'); return ''; } $output .= t('Seleccione la estrategia:'); $estrategias = leer_estrategias_por_politica($ente_planificador, $politica_load); if ($politica_load->field_politicas_estrategias[0]['nid']) { foreach($politica_load->field_politicas_estrategias as $estrategia) { if (array_key_exists($estrategia['nid'], $estrategias)) { $links[] = l($estrategias[$estrategia['nid']]['title'], 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr/' . $politica_load->nid . '/' . $estrategia['nid']); } } } $output .= theme('item_list', $links); $output .= l(t('Regresar al listado de estrategias'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr'); } elseif ($politica && is_numeric($politica) && $estrategia && is_numeric($estrategia)) { $politica_load = node_load($politica); $estrategia_load = node_load($estrategia); if ($politica_load->field_politicas_seleccionada[0]['value'] != 'SÍ') { drupal_set_message(t('No existe la política direccional')); drupal_goto('planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr'); } $found = FALSE; if ($politica_load->field_politicas_estrategias[0]['nid']) { foreach($politica_load->field_politicas_estrategias as $estrategia_n) { if ($estrategia_n['nid'] == $estrategia_load->nid) { $found = TRUE; } } } if (!$found) { drupal_set_message(t('No existe la estrategia')); drupal_goto('planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr'); } $output .= theme('politicas_direccionales_ver_estrategia', $politica_load, $estrategia_load); $output .= l(t('Regresar al listado de estrategias'), 'planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/pol_estr/' . $politica_load->nid); } else { drupal_set_message(t('Ocurrio un error al intentar cargar la página')); drupal_goto('planificacion/' . $ente_planificador_micro->nid . '/politicas/estrategias/'); } return $output; } /** * Implementation of hook_views_api(). */ function politicas_direccionales_views_api() { return array( 'api' => '2.0', 'path' => drupal_get_path('module', 'politicas_direccionales') . '/views', ); }