type == 'proyectos_operativos' && $form['node']['#value']->field_proyecto_reformulab[0]['nid']) { if (isset($form_state['storage']['confirma'])) { $next = $form_state['storage']['page_one_values']['workflow']; $count = count($form['node']['#value']->field_proyectos_reforall) - 1; $nid = 0; if ($count >= 0) { $form['description']['#value'] = theme('proyectos_reformulacion_ver_proyecto', $form['node']['#value']) . $form['description']['#value']; $nid = $form['node']['#value']->field_proyectos_reforall[$count]['nid']; } if ($nid && is_numeric($nid)) { $node_prev = node_load($nid); $state_aprobado = variable_get('proyectos_reformulacion_state_aprobado', NULL); if ($node_prev->type == 'proyectos_operativos' && $node_prev->_workflow == $state_aprobado && $next == $state_aprobado) { $choices = _proyectos_operativos_reformula_obtiene_estados(); //se coloca el proiyecto anterior en reformulado $node_prev->workflow_comment = t('Proyecto enviado al estado @estado por una nueva reformulación aprobada (!enlace)', array('@estado' => $choices['states'][variable_get('proyectos_reformulacion_state_reformulado', NULL)], '!enlace' => l($form['node']['#value']->title,'proyectosop/' . $form['node']['#value']->title->nid))); $form['#node_reformular'] = $node_prev; $description = explode('

', $form['description']['#value']); $form['description']['#value'] = $description[0] . '.

' . t('El proyecto Actual !codigo en estado "@estadoa" se pasara a estado "@estado"', array('!codigo' => l($form['node']['#value']->title,'proyectosop/' . $form['node']['#value']->title->nid), '@estadoa' => $choices['states'][$node_prev->_workflow], '@estado' => $choices['states'][variable_get('proyectos_reformulacion_state_reformulado', NULL)])) . '.

' . $description[1]; $form['#submit'][] = 'proyectos_reformulacion_workflow_prev_submit'; } } } else { drupal_set_title(t('Reformulación del proyecto @title (Cantidad de reformulaciones: @cant)', array('@title' => $form['node']['#value']->title, '@cant' => count($form['node']['#value']->field_proyectos_reforall)))); } } } /** * Implementation of proyectos_operativos_cambia_redirect_paso2_submit. * envia el formulario normalmente. */ function proyectos_reformulacion_workflow_prev_submit($form, &$form_state) { $node = $form['#node_reformular']; // Call node_save() to make sure any handlers that use the // new workflow values will see them. workflow_execute_transition($node, variable_get('proyectos_reformulacion_state_reformulado', NULL), isset($node->workflow_comment) ? $node->workflow_comment : NULL, TRUE); node_save($node); } /* * Implementation of hook_menu() */ function proyectos_reformulacion_menu() { $items['proyectos_operativos/reformulaciones'] = array( 'title' => t('Reformulaciones'), 'access arguments' => array('ver planificador'), 'page callback' => '_proyectos_reformulacion_reformula_list_page', 'page arguments' => array(NULL, 'all'), 'type' => MENU_LOCAL_TASK, ); //agregar proyecto operativo $items['proyectosop/%proyectosop/reformular'] = array( 'title' => 'Reformulaciones', 'type' => MENU_LOCAL_TASK, 'access callback' => '_proyectos_reformulacion_reformula_node_tab_access', 'access arguments' => array(1), 'page callback' => '_proyectos_reformulacion_reformula_list_page', 'page arguments' => array(1, 'single'), 'weight' => 2, ); $items['proyectosop/%proyectosop/reformular/list'] = array( 'title' => 'Reformulaciones', 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10 ); $items['proyectosop/%proyectosop/reformular/add'] = array( 'title' => 'Agregar Reformulación', 'type' => MENU_LOCAL_TASK, 'access callback' => '_proyectos_reformulacion_access_add', 'access arguments' => array(1), 'page callback' => 'drupal_get_form', 'page arguments' => array('proyectos_reformulacion_reformula_tab_page_form', 1), 'weight' => 2, ); /** ahah para el cambio de vista en el admin **/ $items['proyectos_reformulacion'] = array( 'title' => 'Vista por tipo de proceso', 'page callback' => 'proyectos_reformulacion_views_js', 'access arguments' => array('admin planificador'), 'type' => MENU_CALLBACK, ); $items['admin/settings/ente_planificador/proyectos_operativos/reformular'] = array( 'title' => t('Reformulaciones'), 'page callback' => 'drupal_get_form', 'page arguments' => array('proyectos_reformulacion_admin_settings'), 'access arguments' => array('admin planificador'), 'weight' => -5, 'type' => MENU_LOCAL_TASK, 'file' => 'proyectos_reformulacion.admin.inc', ); return $items; } /* * Implementation of _proyectos_reformulacion_reformula_list_page() * Listar las reformulaciones */ function _proyectos_reformulacion_reformula_list_page($proyecto = 0, $type = 'all') { $valid_proyecto = $proyecto && is_object($proyecto) && property_exists($proyecto, 'field_proyecto_reformulab'); $title = $valid_proyecto? t('Reformulaciones para el proyecto @name', array('@name' => $proyecto->title)) : t('Reformulaciones'); drupal_set_title($title); $output = t('Aun no se encuentra una vista configurada para este path'); $view_id = variable_get('proyectos_reformulacion_' . $type . '_views', 0); if ($view_id && $view = views_get_view($view_id)) { $display_id = variable_get('proyectos_reformulacion_' . $type . '_display', 0); foreach ($view->display as $key => $display) { $options_display[$key] = $display->display_title; } if ($display_id && isset($options_display[$display_id])) { $view->set_display($display_id); if ($valid_proyecto) { $view->set_arguments(array($proyecto->field_proyecto_reformulab[0]['nid'])); } $view->override_path = $_GET['q']; $view->pre_execute(); $view->execute(); $output = $view->render(); } } return $output; } /** * Menu access control callback. Determine access to reformula tab. */ function _proyectos_reformulacion_reformula_node_tab_access($node = NULL) { $estado_aprobado = variable_get('proyectos_reformulacion_state_aprobado', NULL); return (user_access('ver planificador') && $node->type == 'proyectos_operativos' && $node->_workflow == $estado_aprobado); } /** * Implementation of _proyectos_operativos_access_editar() * Menu access control callback. Determina si un usuario tiene acceso a reformular un proyecto */ function _proyectos_reformulacion_access_add($node = 0) { global $user; if (module_exists('workflow')) { $estado_aprobado = variable_get('proyectos_reformulacion_state_aprobado', NULL); if ($node->_workflow != $estado_aprobado) { return FALSE; } } $ente = usuario_tiene_ente($user->uid); $ente_planificador = 0; if ($ente && $ente->nid) { $ente_planificador = ente_planificador_leer_ente_planificadores($ente->nid); } elseif (user_access('admin planificador') && $node) { $ente_planificador = ente_planificador_leer_ente_planificadores($node->field_proyecto_ente[0]['nid']); } if (!$ente_planificador) { return FALSE; } $entes_permitidos = variable_get('proyectos_reformulacion_add_entes', array()); $tam = count($entes_permitidos); if (!variable_get('proyectos_reformulacion_perm_nuevos', TRUE) && module_exists('ente_planificador_hierarchical')) { $permiso_padres = FALSE; if ($tam && count($ente_planificador->ente_planificador_hierarchical['fathers'])) { foreach($ente_planificador->ente_planificador_hierarchical['fathers'] as $valor) { if (isset($valor['nid']) && in_array($valor['nid'], $entes_permitidos)) { $permiso_padres = TRUE; } } } if (!$tam && !$permiso_padres) { return FALSE; } if (!isset($entes_permitidos[$ente_planificador->nid]) && !$permiso_padres) { return FALSE; } } else if(!variable_get('proyectos_reformulacion_perm_nuevos', TRUE)){ return $tam && in_array($ente_planificador->nid, $entes_permitidos); } $year_p = variable_get('proyectos_reformulacion_anho', 0); //se verifica que no exista otra reformulacion creado para este periodo $sql = 'SELECT p.nid, n.title FROM {content_type_proyectos_operativos} AS p INNER JOIN {node} AS n ON n.nid = p.nid AND n.vid = p.vid AND n.status > 0 INNER JOIN {proyectos_operativos} AS po ON po.nid = p.nid INNER JOIN {workflow_node} AS w ON w.nid = p.nid AND w.sid != %d AND w.sid != %d WHERE (p.field_proyecto_reformulab_nid = %d OR p.nid = %d) AND po.year = %d'; $inpunts = array(); $inpunts[] = variable_get('proyectos_operativos_state_naprobado', NULL); $inpunts[] = variable_get('proyectos_operativos_state_aprobado', NULL); $inpunts[] = $node->nid; $inpunts[] = $node->nid; $inpunts[] = $year_p; $result = db_query($sql, $inpunts); $proy = db_fetch_object($result); if ($proy) { return FALSE; } $first_state = 0; if (!user_access('admin planificador') && module_exists('workflow')) { $states = _proyectos_operativos_reformula_obtiene_estados(); if ($states['wid']) { $first_state = _workflow_creation_state($states['wid']); } if ($first_state) { $roles_perm = FALSE; $roles_allow = variable_get('proyectos_operativos_state_m_' . $first_state, array()); $roles = array_keys($user->roles); if (count($roles)) { foreach($roles as $rol) { if($roles_allow[$rol]) { $roles_perm = TRUE; } elseif ($rol == -1 && $node->uid == $user->uid) { $roles_perm = TRUE; } } } if (!$roles_perm) { return FALSE; } } } return $node->field_proyecto_ente[0]['nid']; } /** * Implementation of hook_theme(). */ function proyectos_reformulacion_theme() { return array( 'proyectos_reformulacion_ver_proyecto' => array( 'arguments' => array('proyecto' => NULL), ), 'proyectos_reformulacion_reformula_tab_page_form' => array( 'arguments' => array('form' => NULL), ), ); } /** * @ingroup themeable * @see proyectos_operativos_proyecto_basico_form */ function theme_proyectos_reformulacion_ver_proyecto($proyecto) { $proyecto->build_mode = NODE_BUILD_NORMAL; $node_type = content_types('proyectos_operativos'); $fields = $node_type['fields']; $header = array(); $header[] = array('data' => check_plain($proyecto->field_proyecto_titulo[0]['value']), 'colspan' => 2, 'align' => center); $rows = array(); $row = array(); $row[] = array('data' => '' . $fields['field_proyecto_codigo']['widget']['label'] . ': ' . check_plain($proyecto->title)); $nombre_field = 'field_proyecto_ente'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'plain', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_plurianual'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $nombre_field = 'field_proyecto_situacion_p'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_fecha_i'; $fecha = explode(' ', $proyecto->{$nombre_field}[0]['value']); $fecha = explode('-', $fecha[0]); $campo = $fecha[2] . '/' . $fecha[1] . '/' . $fecha[0]; $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $nombre_field = 'field_proyecto_fecha_f'; $fecha = explode(' ', $proyecto->{$nombre_field}[0]['value']); $fecha = explode('-', $fecha[0]); $campo = $fecha[2] . '/' . $fecha[1] . '/' . $fecha[0]; $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_monto_anual'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'be_0', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $nombre_field = 'field_proyecto_total'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'be_0', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_esp_monto_finan'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'be_0', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $nombre_field = 'field_proyecto_poan'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_descripcion_bien'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo, 'colspan' => 2); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_unidadm'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo, 'colspan' => 2); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_meta_fisica'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo, 'colspan' => 2); $rows[] = $row; //si reformulaciones $count = count($proyecto->field_proyectos_reforall); if ($count) { $row = array(); $row[] = array('data' => '' . t('Cantidad de Reformulaciones') . ': ' . $count,); $links = array(); foreach($proyecto->field_proyectos_reforall as $delta => $field) { $links[] = l(t('Reformulación : @numero', array('@numero' => ($delta + 1))), 'proyectosop/' . $field['nid']); } $campo = theme('item_list', $links); $row[] = array('data' => '' . t('Reformulaciones') . ': ' . $campo,); $rows[] = $row; //Se muestra los datos del responsable de la institución $row = array(); $nombre_field = 'field_proyecto_nombre_resp'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $nombre_field = 'field_proyecto_apelli_resp'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_cedul_resp'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $nombre_field = 'field_proyecto_filegace'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $rows[] = $row; //Se muestra los datos del responsable tecnico $row = array(); $nombre_field = 'field_proyecto_nombre_tecn'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $nombre_field = 'field_proyecto_apelli_tecn'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $rows[] = $row; $row = array(); $nombre_field = 'field_proyecto_cedul_tecn'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $nombre_field = 'field_proyecto_filesol'; $campo = content_format($nombre_field, $proyecto->{$nombre_field}[0], 'default', $proyecto); $row[] = array('data' => '' . $fields[$nombre_field]['widget']['label'] . ': ' . $campo,); $rows[] = $row; } return theme('table', $header, $rows); } /** * Implementation of proyectos_reformulacion_reformula_tab_page_form. * Formulario de para agregar una reformulacion al proyecto operativo. */ function proyectos_reformulacion_reformula_tab_page_form(&$form_state, $proyecto = 0) { global $user; //add breadcrumb $breadcrumb = array(); $breadcrumb[] = l(t('Home'), ''); $breadcrumb[] = l(t('Proyectos Operativos'), 'proyectos_operativos'); if ($proyecto->nid) { $breadcrumb[] = l(check_plain($proyecto->title), 'proyectosop/' . $proyecto->nid); $breadcrumb[] = l(t('Reformulaciones'), 'proyectosop/' . $proyecto->nid . '/reformular'); } $breadcrumb[] = t('Agregar Reformulación'); // Link to current URL drupal_set_breadcrumb($breadcrumb); drupal_set_title(t('Reformular proyecto @title (Cantidad de reformulaciones: @cant)', array('@title' => $proyecto->title, '@cant' => count($proyecto->field_proyectos_reforall)))); $current_time = time(); $tipo_plan = 'proyectos_operativos_formular'; $ente_planificador = 0; if($proyecto && $proyecto->nid && $proyecto->field_proyecto_ente[0]['nid']) { $ente_planificador = ente_planificador_leer_ente_planificadores($proyecto->field_proyecto_ente[0]['nid']); } $mi_fecha = ente_planificador_user_acceso_proceso($tipo_plan, $ente_planificador); $fecha = FALSE; if ($mi_fecha[1] + 86399 > $current_time && $mi_fecha[0] < $current_time) { $fecha = TRUE; } if (!$fecha) { muestra_mensaje($tipo_plan, $ente_planificador); } if ($fecha && $ente->nid) { muestra_mensaje($tipo_plan, $ente_planificador, 0); } $fechas_validacion = array( 'inicio' => '', 'fin' => '', ); $form = array(); $form['#node'] = $proyecto; $form['reformula_proyecto'] = array( '#value' => theme('proyectos_reformulacion_ver_proyecto', $proyecto), ); //Se obtienen las AE disponibles para el nuevo proyecto $sql = "SELECT aet.field_accion_titulo_value AS titulo, aet.nid, aet.field_accion_esp_fechai_value AS fechai, aet.field_accion_esp_fechaf_value AS fechaf, aet.field_accion_esp_monto_finan_value as monto, aet.field_accion_esp_total_fuent_value AS montof FROM {content_type_proyectos_operativos} AS po INNER JOIN {content_field_proyecto_accion_esp} AS ae ON ae.nid = po.nid AND ae.vid = po.vid INNER JOIN {node} AS n ON n.nid = ae.field_proyecto_accion_esp_nid INNER JOIN {content_type_accion_especifica} AS aet ON aet.nid = n.nid AND aet.vid = n.vid WHERE po.nid = %d AND po.vid = %d"; $inpunts = array(); $inpunts[] = $proyecto->nid; $inpunts[] = $proyecto->vid; if (variable_get('continuarproyectosopplurianual_aes', 0)) { $year = variable_get('proyectos_operativos_anho_creacion', 0); $sql .= " AND aet.field_accion_esp_fechai_value <= '%s' AND aet.field_accion_esp_fechaf_value >= '%s'"; $inpunts[] = ($year + 1) . '-01-01 00:00:00'; $inpunts[] = ($year - 1) . '-12-31 00:00:00'; } $result = db_query($sql, $inpunts); $aes = array(); $form['ae'] = array( '#type' => 'fieldset', '#title' => t('Acciones Específicas'), '#description' => t('Acciones Específicas en el proyecto'), '#collapsible' => TRUE, '#collapsed' => FALSE, ); $i = 1; while($ae = db_fetch_object($result)) { $fechai = explode(' ', $ae->fechai); $fechai = explode('-', $fechai[0]); $fechaf = explode(' ', $ae->fechaf); $fechaf = explode('-', $fechaf[0]); $fechas = array(); //solo deje agregar ae que tienen bien establecidas sus fechas if (count($fechai) == 3 && count($fechaf) == 3) { $fechas[0] = $fechai[2] . '/' . $fechai[1] . '/' . $fechai[0]; $fechas[1] = $fechaf[2] . '/' . $fechaf[1] . '/' . $fechaf[0]; $titulo = t('AE-@number: @AE (Fechas de ejecución: @fechai al @fechaf).', array('@AE' => $ae->titulo, '@fechai' => $fechas[0], '@fechaf' => $fechas[1], '@number' => $i)); $i++; $form['ae']['ae_' . $ae->nid] = array( '#value' => '
' . check_plain($titulo) . '
', ); $aes[$ae->nid] = $ae->titulo; } } $field_form = array(); $fields_form = array(); $arreglo = array( 'field_proyecto_nombre_resp' => 'field_proyecto_nombre_resp', 'field_proyecto_apelli_resp' => 'field_proyecto_apelli_resp', 'field_proyecto_cedul_resp' => 'field_proyecto_cedul_resp', 'field_proyecto_filegace' => 'field_proyecto_filegace', 'field_proyecto_nombre_tecn' => 'field_proyecto_nombre_tecn', 'field_proyecto_apelli_tecn' => 'field_proyecto_apelli_tecn', 'field_proyecto_cedul_tecn' => 'field_proyecto_cedul_tecn', 'field_proyecto_filesol' => 'field_proyecto_monto_anual', ); $node_type = content_types('proyectos_operativos'); $fields = $node_type['fields']; 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] = $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, 'proyectos_operativos'); $form['#field_info'][$field_id] = $field; $form += (array) content_field_form($form, $form_state, $field); } } $form['#proyectos_operativos_fields'] = $fields_form; $form['#ae'] = $aes; $form['buttons'] = array( '#prefix' => '
', '#suffix' => '
', '#weight' => 1000, ); $form['buttons']['registrar'] = array( '#type' => 'submit', '#default_value' => t('Reformular Proyecto'), '#weight' => 100, ); $form['buttons']['cancelar'] = array( '#type' => 'submit', '#default_value' => t('Cancelar'), '#attributes' => array('onClick' => 'window.location="' . base_path() .$_GET['q'] . '"; return false;'), '#weight' => 101, ); $form['#submit'] = array('proyectos_reformulacion_reformula_tab_page_form_submit'); return $form; } /** * @ingroup themeable * @see proyectos_operativos_proyecto_basico_form */ function theme_proyectos_reformulacion_reformula_tab_page_form($form) { $output = ''; $output .= drupal_render($form['reformula_proyecto']); $output .= drupal_render($form['ae']); $header = array(); $form['field_proyecto_nombre_resp'][0]['value']['#title'] = t('Nombre'); $form['field_proyecto_nombre_resp'][0]['value']['#size'] = 20; $form['field_proyecto_apelli_resp'][0]['value']['#title'] = t('Apellido'); $form['field_proyecto_apelli_resp'][0]['value']['#size'] = 20; $form['field_proyecto_cedul_resp'][0]['value']['#title'] = t('Cédula de Identidad'); $form['field_proyecto_cedul_resp'][0]['value']['#size'] = 20; $form['field_proyecto_nombre_tecn'][0]['value']['#title'] = t('Nombre'); $form['field_proyecto_nombre_tecn'][0]['value']['#size'] = 20; $form['field_proyecto_apelli_tecn'][0]['value']['#title'] = t('Apellido'); $form['field_proyecto_apelli_tecn'][0]['value']['#size'] = 20; $form['field_proyecto_cedul_tecn'][0]['value']['#title'] = t('Cédula de Identidad'); $form['field_proyecto_cedul_tecn'][0]['value']['#size'] = 20; $header[] = array('data' => t('Responsable de la Institución'), 'colspan' => 3, 'align' => center); $rows = array(); $row = array(); $row[] = array('data' => drupal_render($form['field_proyecto_nombre_resp']),); $row[] = array('data' => drupal_render($form['field_proyecto_apelli_resp']),); $row[] = array('data' => drupal_render($form['field_proyecto_cedul_resp']),); $rows[] = $row; $row = array(); $row[] = array('data' => drupal_render($form['field_proyecto_filegace']), 'colspan' => 3); $rows[] = $row; $output .= theme('table', $header, $rows); $header = array(); $header[] = array('data' => t('Reponsable técnico de solicitar y/o ejecutar la reformulación'), 'colspan' => 3, 'align' => center); $rows = array(); $row = array(); $row[] = array('data' => drupal_render($form['field_proyecto_nombre_tecn']),); $row[] = array('data' => drupal_render($form['field_proyecto_apelli_tecn']),); $row[] = array('data' => drupal_render($form['field_proyecto_cedul_tecn']),); $rows[] = $row; $row = array(); $row[] = array('data' => drupal_render($form['field_proyecto_filesol']), 'colspan' => 3); $rows[] = $row; $output .= theme('table', $header, $rows); $output .= drupal_render($form); return $output; } /* * Implementation of continuarproyectosopplurianual_agregar_proyectos_operativo_form_submit(). * Guardar el nuevo proyecto operativo. */ function proyectos_reformulacion_reformula_tab_page_form_submit($form, &$form_state) { global $user; $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; if ($op == t('Cancelar')) { $form_state['redirect'] = 'proyectos_operativos'; return; } module_load_include('inc', 'node', 'node.pages'); $proyecto = $form['#node']; if (!isset($proyecto->field_proyecto_reformulab) || !$proyecto->field_proyecto_reformulab[0]['nid'] || !is_numeric($proyecto->field_proyecto_reformulab[0]['nid'])) { $proyecto->field_proyecto_reformulab[0]['nid'] = $proyecto->nid; node_save($proyecto); } //se crea el nuevo proyecto plurianual $nuevo_proyecto = _reformulacion_clonar_proyecto_aes($proyecto->nid); if (module_exists('hs_content_taxonomy') || module_exists('hs_content_taxonomy_description')) { foreach ($form['#field_info'] as $field_name => $field_info) { if ($field_info['widget']['type'] == 'content_taxonomy_hs') { // Change format of values to the one Content Taxonomy expects if (is_array($form_state['values'][$field_name]['tids'])) { $values = array(); foreach($form_state['values'][$field_name]['tids'] as $tid) { $values[] = array('value' => $tid); array_unshift($form_state['values'][$field_name], array('value' => $tid)); } $form_state['values'][$field_name]['tids'] = $values; } else { $values[] = array('value' => $form_state['values'][$field_name]['tids']); array_unshift($form_state['values'][$field_name],array('value' => $form_state['values'][$field_name]['tids'])); $form_state['values'][$field_name]['tids'] = $values; } } elseif ($field_info['widget']['type'] == 'content_taxonomy_hsd') { // Change format of values to the one Content Taxonomy expects if (is_array($form_state['values'][$field_name]['tids'])) { $values = array(); foreach($form_state['values'][$field_name]['tids'] as $tid) { $values[] = array('value' => $tid); array_unshift($form_state['values'][$field_name], array('value' => $tid)); } $form_state['values'][$field_name]['tids'] = $values; } else { $values[] = array('value' => $form_state['values'][$field_name]['tids']); array_unshift($form_state['values'][$field_name],array('value' => $form_state['values'][$field_name]['tids'])); $form_state['values'][$field_name]['tids'] = $values; } } } } $field_form = $form['#proyectos_operativos_fields']; module_load_include('inc', 'node', 'node.pages'); $form_values = $form_state['values']; //$node_load->title = check_plain($form_values['title']); 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']); } } $nuevo_proyecto->{$field_id} = $form_values[$field_id]; } } } if ($nuevo_proyecto && $nuevo_proyecto->nid) { $new_aes = array(); $new_aes_title = array(); foreach($proyecto->field_proyecto_accion_esp as $nid) { if ($nid['nid'] && is_numeric($nid['nid'])) { $nueva_ae = _reformulacion_clonar_proyecto_aes($nid['nid'], $nuevo_proyecto->nid); if ($nueva_ae && $nueva_ae->nid) { $new_aes[]['nid'] = $nueva_ae->nid; $new_aes_title[$nueva_ae->nid] = $title; } } } if (count($new_aes_title)) { $nuevo_proyecto->field_proyecto_accion_esp = $new_aes; $nuevo_proyecto->log = t('Se agregarón las AE: @aes', array('@aes' => theme('item_list', $new_aes_title))); $nuevo_proyecto->revision = 1; node_save($nuevo_proyecto); } } if ($_REQUEST['destination']) { $form_state['redirect'] = url('proyectosopedit/' . $nuevo_proyecto->nid, array( 'query' => array( 'destination' => $_REQUEST['destination'], ), 'absolute' => TRUE, ) ); unset($_REQUEST['destination']); } else { // add redirect $form_state['redirect'] = 'proyectosopedit/' . $nuevo_proyecto->nid; } } /** * Implementation of _continuar_clonar_proyecto_aes(). * clonar un proyecto o ae. */ function _reformulacion_clonar_proyecto_aes($nid = 0, $nodefather = 0) { global $user; $node_load = 0; $seudonimo = array( 'proyectos_operativos' => 'proyecto', 'accion_especifica' => 'ae', ); if ($nid && is_numeric($nid)) { $node = node_load($nid); $campos = _reformulacion_get_fieldsbyformstep(); if (isset($campos[$node->type])) { $node_load = clone $node; unset($node_load->nid); unset($node_load->vid); unset($node_load->created); unset($node_load->changed); unset($node_load->revision_uid); unset($node_load->path); unset($node_load->data); unset($node_load->current_revision_id); unset($node_load->is_current); unset($node_load->num_revisions); $node_load->log = t('Se Agregó @tipo como reformulación de (@nombre)', array('@nombre' => check_plain($node->title),'@tipo' => $node->type)); $node_load->uid = $user->uid; $node_load->revision = 1; foreach($campos[$node->type] as $tipo => $campo) { foreach($campo as $id) { unset($node_load->{$id}); } } $key = 'field_' . $seudonimo[$node->type] . '_reformulab'; $node_load->{$key} = array(); $enlace = array(); $valor = isset($node->{$key}[0]['nid'])? $node->{$key}[0]['nid'] : 0; $enlace[]['nid'] = ($valor && is_numeric($valor))? $valor : $node->nid; $node_load->{$key} = $enlace; if ($node->type == 'accion_especifica') { $enlace = array(); $valor = isset($node->{'field_ae_proyectorbase'}[0]['nid'])? $node->{'field_ae_proyectorbase'}[0]['nid'] : 0; $enlace[]['nid'] = ($valor && is_numeric($valor)) ? $valor : $node->field_accion_esp_proyecto[0]['nid']; $node_load->field_ae_proyectobase = $enlace; if ($nodefather && is_numeric($nodefather)) { $node_load->field_accion_esp_proyecto = array(); $node_load->field_accion_esp_proyecto[]['nid'] = $nodefather; } } elseif($node->type == 'proyectos_operativos') { $node_load->field_proyectos_segui_reforall = array(); $node_load->field_proyecto_accion_esp = array(); $node_load->field_proyectos_reforall[]['nid'] = $node->nid; $node_load->_workflow = variable_get('proyectos_reformulacion_state_reformulacion', 0); } node_save($node_load); } } return $node_load; } /** * Implementation of _reformulacion_get_fieldsbyformstep(). * obtiene los campos a editar en un proyecto o ae. */ function _reformulacion_get_fieldsbyformstep(){ $arreglo = array( 'proyectos_operativos' => array( 'proyectos_operativos_proyecto_basico_form' => array( //colocar el id del campo que no se quiere clonar (node_save colocara el valor por defecto), Ejemplo: /* 'field_proyecto_monto_ant' => 'field_proyecto_monto_ant', */ ), 'proyectos_operativos_proyecto_generales_form' => array( ), 'proyectos_operativos_proyecto_indicadores_form' => array( ), 'otros' => array( ), ), 'accion_especifica' => array( 'proyectos_operativos_accion_especifica_crear_form' => array( ), 'otros' => array( ), ), ); return $arreglo; } /* * Implementation of hook_proyecto_obtiene_links_alter() */ function proyectos_reformulacion_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) { $aprobado = $proyecto->_workflow == variable_get('proyectos_operativos_state_aprobado', NULL); if($aprobado){ $links['reformulacion'] = array( 'data' => l(t('Reformulaciones'), 'proyectosop/' . $proyecto->nid . '/reformular'), 'class' => 'proyectos-operativos-reformulaciones', ); } if ($aprobado && _proyectos_reformulacion_access_add($proyecto)) { $links['reformulacion_add'] = array( 'data' => l(t('Reformular proyecto'), 'proyectosop/' . $proyecto->nid . '/reformular/add'), 'class' => 'continuar-proyectos-reformulaciones-add', ); } } /** * Genera el ahah para el display de cada vista */ function proyectos_reformulacion_views_js($element = 0) { $view_id = 'proyectos_reformulacion_' . $element . '_views'; $view_name = $element && isset($_POST[$view_id])? $_POST[$view_id] : 0; $output = $view_id; if ($view_name && $view = views_get_view($view_name)) { $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); $options = array('_none' => 'Ninguna'); foreach ($view->display as $key => $display) { $options[$key] = $display->display_title; } $display = 'proyectos_reformulacion_' . $element . '_display'; $form['proyectos_reformulacion'][$element][$display] = array( '#title' => t("Seleccione el display de la vista"), '#type' => 'select', '#default_value' => variable_get($element . '_display', 0), '#options' => $options, '#requerid' => TRUE, ); 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); $new_form = array(); unset($form['proyectos_reformulacion'][$element][$display]['#prefix']); unset($form['proyectos_reformulacion'][$element][$display]['#suffix']); $new_form['proyectos_reformulacion'][$element][$display] = $form['proyectos_reformulacion'][$element][$display]; $output = drupal_render($new_form); } print drupal_to_js(array('data' => $output, 'status' => true)); exit(); } /** * Implementation of hook_views_api(). */ function proyectos_reformulacion_views_api() { return array( 'api' => '2', 'path' => drupal_get_path('module', 'proyectos_reformulacion') . '/views', ); }