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',
);
}