type == 'proyectos_operativos') { //Se obtienen las AE $aes = array(); foreach($node->field_proyecto_accion_esp as $ae){ if (isset($ae['nid'])){ $aes[$ae['nid']] = $ae['safe']['title']; } } $node_type = content_types('proyectos_operativos'); $fields = $node_type['fields']; $node_type1 = content_types('accion_especifica'); $fields1 = $node_type1['fields']; $result = db_query("SELECT sid, state FROM {workflow_states} WHERE status = 1 ORDER BY sid"); while ($data = db_fetch_object($result)) { $states[$data->sid] = check_plain(t($data->state)); } //leer los comentarios $result = db_query("SELECT e.*, u.name, u.uid, w.old_sid, w.comment FROM {entes_detail_workflow} AS e INNER JOIN {workflow_node_history} AS w ON w.hid = e.hid INNER JOIN {users} AS u ON w.uid =u.uid WHERE id = %d AND tipo = 'proyectos_operativos' AND active = 1 ORDER BY time DESC", $node->nid); $tablas_row = array(); $headers_tabla = array(); $headers_tabla[] = array('data' => t('Fecha')); $headers_tabla[] = array('data' => t('Estado Pasado')); $headers_tabla[] = array('data' => t('Estado Nuevo')); $headers_tabla[] = array('data' => t('Usuario')); $headers_tabla[] = array('data' => t('Comentario General')); $headers_tabla[] = array('data' => t('Campo')); $headers_tabla[] = array('data' => t('Comentario')); $rows = array(); while($comentario = db_fetch_object($result)) { $row = array(); $row[] = array('data' => format_date($comentario->time),); $estado = isset($states[$comentario->old_sid])? $states[$comentario->old_sid] : 'N/A'; $row[] = array('data' => $estado,); $estado = isset($states[$comentario->sid])? $states[$comentario->sid] : 'N/A'; $row[] = array('data' => $estado,); $row[] = array('data' => theme('username', $comentario),); $row[] = array('data' => filter_xss($comentario->comment, array('a', 'em', 'strong')),); $titulo = $comentario->field_name; if ($comentario->field_name == 'title') { $titulo = t('Nombre del Proyecto'); } elseif(isset($fields[$comentario->field_name])){ $titulo = $fields[$comentario->field_name]['widget']['label']; } else { $nidae = explode('_', $comentario->field_name); if (is_numeric($nidae[0])){ $nid = $nidae[0]; unset($nidae[0]); $field = implode('_', $nidae); if (isset($fields1[$field])) { $ae_title = isset($aes[$nid])? ' (' . l($aes[$nid], 'proyectosopedit/' . $node->nid . '/ae/' . $nid . '/edit') . ')' : ''; $titulo = 'AE' . $ae_title . ': ' . $fields1[$field]['widget']['label']; } } } $row[] = array('data' => $titulo,); $row[] = array('data' => filter_xss($comentario->comentario, array('a', 'em', 'strong')),); $rows[] = $row; } $output = theme('table', $headers_tabla, $rows); $node->content['flujo_comentarios'] = array( '#value' => '
' . t('Flujo con Comentarios') . '' . $output . '
', '#weight' => 100, ); } break; } } /* * Implementation of reformula_ver_campos() * Retorna los campos de reformulacion */ function reformula_ver_campos($node, $reformulacion_load) { $id_ref = $reformulacion_load ? $reformulacion_load->id_ref : 0; $reformula = _proyectos_reformulacion_load($node, $id_ref); $format_number = array( 'decimals' => variable_get('proyectos_operativos_number_decimals', 0), 'dec_point' => variable_get('proyectos_operativos_number_dec_point', ','), 'thousands_sep' => variable_get('proyectos_operativos_number_thousands_sep', '.'), ); $ftypes = array( 'value' => t('January'), 'value_1' => t('February'), 'value_2' => t('March'), 'value_3' => t('April'), 'value_4' => t('May'), 'value_5' => t('June'), 'value_6' => t('July'), 'value_7' => t('August'), 'value_8' => t('September'), 'value_9' => t('Octuber'), 'value_10' => t('November'), 'value_11' => t('December'), ); $tipos = array( 1 => t('Traspaso'), 2 => t('Incremento'), 3 => t('Disminución'), ); //se obtiene la unidad de medida $field = content_fields('field_proyecto_unidadm', 'proyectos_operativos'); $tree = taxonomy_get_tree($field['vid']); $options = array(); if ($tree) { foreach ($tree as $term) { if ($term->tid == $unidad_ant) { $text_unidad = $term->name; } $choice = new stdClass(); $choice->option = array($term->tid => str_repeat('-', $term->depth) . $term->name); $options[$term->tid] = $term->name; } } $grupos = array(); if ($node->field_proyecto_accion_esp[0]['nid']) { foreach($node->field_proyecto_accion_esp as $ae) { $grupos[$ae['nid']] = node_load($ae['nid']); } } $field = content_fields('field_accion_esp_unidadm', 'accion_especifica'); $unidadesm = array(); $tree = taxonomy_get_tree($field['vid']); if ($tree) { foreach ($tree as $term) { $unidadesm[$term->tid] = $term->name; } } $field = content_fields('field_accion_esp_programacion', 'accion_especifica'); $tree = taxonomy_get_tree($field['vid']); $vtid = $field['vtid']; $partidas = array(); if ($tree) { foreach ($tree as $term) { if (isset($vtid[$term->tid])) { $partidas[$term->tid] = $term->name; } } } $financia = array(); $accion_especifica_number_fields = variable_get('accion_especifica_number_fields', 4); $financia = array(); for($i = 0; $i < $accion_especifica_number_fields; $i++) { $financarray = variable_get('accion_especifica_financiamiento_options_' . $i, array()); if (count($financarray)) { foreach($financarray as $id1 => $camp1){ if ($camp1){ $financia[$id1] = $fields1[$id1]['widget']['label']; } } } } $display = array(); $display['fecha_onapre'] = date( 'd/m/Y', $reformula['fecha_onapre']); $display['justificacion'] = $reformula['justificacion']; $display['traspaso'] = array_key_exists($reformula['tipo'], $tipos) ? $tipos[$reformula['tipo']] : 'N/A'; $signo = ''; if ($reformulacion_load->variacion > 0) { $signo = '+'; } $display['variacion'] = $signo . number_format($reformulacion_load->variacion, $format_number['decimals'], $format_number['dec_point'], $format_number['thousands_sep']); $display['field_proyecto_unidadm'] = $options[$reformulacion_load->unidad]; //meta fisica del proyecto foreach($ftypes as $id_field => $texto) { $valor = isset($reformula['field_proyecto_meta_fisica'][0][$id_field])? $reformula['field_proyecto_meta_fisica'][0][$id_field] : 0; $signo = ''; if ($valor > 0) { $signo = '+'; } $display['field_proyecto_meta_fisica_' . $id_field] = $signo . number_format($valor, 0, $format_number['dec_point'], $format_number['thousands_sep']); } foreach($grupos as $nid => $grupo) { $display[$nid]['field_accion_esp_metaf_unidadm'] = $unidadesm[$reformula['field_accion_esp_metaf_' . $nid][0]['unidad']]; foreach($ftypes as $id_field => $texto) { $valor = isset($reformula['field_accion_esp_metaf_' . $nid][0][$id_field])? $reformula['field_accion_esp_metaf_' . $nid][0][$id_field] : 0; $signo = ''; if ($valor > 0) { $signo = '+'; } $display[$nid]['field_accion_esp_metaf_' . $id_field] = $signo . number_format($valor, 0, $format_number['dec_point'], $format_number['thousands_sep']); foreach($partidas as $tid => $term) { $valor = isset($reformula['field_accion_esp_programacion_' . $nid][$tid][$id_field])? $reformula['field_accion_esp_programacion_' . $nid][$tid][$id_field] : 0; $signo = ''; if ($valor > 0) { $signo = '+'; } $idformu = 'field_accion_esp_programacion_' . $tid . '_' . $id_field; $display[$nid][$idformu] = $signo . number_format($valor, 0, $format_number['dec_point'], $format_number['thousands_sep']); } } foreach($financia as $id_field => $texto) { $valor = isset($reformula[$id_field . '_' . $nid][0]['value'])? $reformula[$id_field . '_' . $nid][0]['value'] : 0; $signo = ''; if ($valor > 0) { $signo = '+'; } $display[$nid][$id_field] = $signo . number_format($valor, $format_number['decimals'], $format_number['dec_point'], $format_number['thousands_sep']); } } return $display; } /* * Implementation of hook_perm() */ function entes_detail_proyectos_perm() { return array( 'remove observaciones', ); } /* * Implementation of _entes_detail_proyectos_operativos_get_campos_proyectos_reformula() * Obtiene los capos de reformulacion */ function _entes_detail_proyectos_operativos_get_campos_proyectos_reformula($proyecto = 0){ $title_combos = array(); $arreglo = array(); if ($proyecto && $proyecto->nid){ $title_combos['monto']['title'] = t('Monto Total del Proyecto'); $arreglo['monto'] = array(); $arreglo['monto'] = array( 'fecha_onapre' => t('Fecha de Aprobación'), 'traspaso' => t('Traspaso'), 'justificacion' => t('Justificación'), 'variacion' => t('Variación Presupuestaria'), ); $ftypes = array( 'value' => t('January'), 'value_1' => t('February'), 'value_2' => t('March'), 'value_3' => t('April'), 'value_4' => t('May'), 'value_5' => t('June'), 'value_6' => t('July'), 'value_7' => t('August'), 'value_8' => t('September'), 'value_9' => t('Octuber'), 'value_10' => t('November'), 'value_11' => t('December'), ); $title_combos['distribucion']['title'] = t('Distribución de la Meta Física'); $arreglo['distribucion'] = array( 'field_proyecto_unidadm' => t('Unidad de Medida Nueva'), ); foreach($ftypes as $id_field => $texto) { $arreglo['distribucion']['field_proyecto_meta_fisica_' . $id_field] = t('Variación del Proyecto: @mes', array('@mes' => t($texto))); } //Se obtienen todas las fuentes de finaciamiento //financiamiento $arreglo_financiamiento = array(); $arreglo_financiamiento_fields = array(); $accion_especifica_number_fields = variable_get('accion_especifica_number_fields', 4); for($i = 0; $i < $accion_especifica_number_fields; $i++) { $arreglo_financiamiento['financiamiento_' . $i] = variable_get('accion_especifica_financiamiento_label_' . $i, '') ? variable_get('accion_especifica_financiamiento_label_' . $i, '') : ''; $arreglo_financiamiento_fields['financiamiento_' . $i] = variable_get('accion_especifica_financiamiento_options_' . $i, array()); } //se obtienen las partidas presupuestarias $field = content_fields('field_accion_esp_programacion', 'accion_especifica'); $tree = taxonomy_get_tree($field['vid']); $vtid = $field['vtid']; $partidas = array(); if ($tree) { foreach ($tree as $term) { if (isset($vtid[$term->tid])) { $partidas[$term->tid] = $term->name; } } } //financiamiento $node_type1 = content_types('accion_especifica'); $fields1 = $node_type1['fields']; $arreglo_financiamiento = array(); $financia = array(); $accion_especifica_number_fields = variable_get('accion_especifica_number_fields', 4); $financia = array(); for($i = 0; $i < $accion_especifica_number_fields; $i++) { $financarray = variable_get('accion_especifica_financiamiento_options_' . $i, array()); if (count($financarray)) { foreach($financarray as $id1 => $camp1){ if ($camp1){ $financia[$id1] = $fields1[$id1]['widget']['label']; } } } } $i = 1; if ($proyecto->field_proyecto_accion_esp[0]['nid']) { foreach($proyecto->field_proyecto_accion_esp as $ae) { if (is_numeric($ae['nid'])) { $idae = 'AE_' . $i; $title_combos['AE_' . $i]['title'] = 'AE_' . $i; $arreglo['distribucion'][$ae['nid'] . '_field_accion_esp_metaf_unidadm'] = '(AE_' . $i . ') ' . t('Unidad de Medida Nueva'); foreach($ftypes as $id_field => $texto) { $arreglo['distribucion'][$ae['nid'] . '_field_accion_esp_metaf_' . $id_field] = '(AE_' . $i . ') ' . t('Variación') . ': ' . t($texto); foreach($partidas as $tid => $term) { $idformu = $ae['nid'] . '_field_accion_esp_programacion_' . $tid . '_' . $id_field; $arreglo[$idae][$idformu] = t('Variación partida') . ' ' . $term .': ' . t($texto); } } foreach($financia as $id_field => $texto) { $arreglo[$idae][$ae['nid'] . '_' . $id_field] = t('Fuente de Finaciamiento') . ': ' . $texto; } $i++; } } } } drupal_alter('proyecto_reformula_obtiene_fields_categorias', $title_combos); drupal_alter('proyecto_reformula_obtiene_fields_campos', $arreglo); return array( 'categorias' => $title_combos, 'campos' => $arreglo, ); } /* * Implementation of _entes_detail_proyectos_operativos_get_campos_proyectos() * Obtiene los capos de proyectos */ function _entes_detail_proyectos_operativos_get_campos_proyectos(){ $title_combos = array(); $arreglo = array(); $title_combos['db']['title'] = t('Datos Básicos'); $title_combos['db']['type'] = 'node'; $arreglo['db']['identificacion'] = array(); $arreglo['db']['identificacion'] = array( 'title' => t('Nombre del Proyecto'), 'field_proyecto_codigo' => 'field_proyecto_codigo', 'field_proyecto_codigo_n_etap' => 'field_proyecto_codigo_n_etap', 'field_proyecto_fecha_i' => 'field_proyecto_fecha_i', 'field_proyecto_fecha_f' => 'field_proyecto_fecha_f', 'field_proyecto_status' => 'field_proyecto_status', 'field_proyecto_situacion_p' => 'field_proyecto_situacion_p', 'field_proyecto_plurianual' => 'field_proyecto_plurianual', 'field_proyecto_monto_anual' => 'field_proyecto_monto_anual', 'field_proyecto_total' => 'field_proyecto_total', 'field_proyecto_poan' => 'field_proyecto_poan', ); $title_combos['db']['identificacion']['title'] = t('Datos Básicos de Identificación del Proyecto'); $title_combos['db']['identificacion']['type'] = 'node'; //Gerente del Proyecto $arreglo['db']['gerentep'] = array(); $arreglo['db']['gerentep'] = array( 'field_proyecto_ente' => 'field_proyecto_ente', 'field_proyecto_autoridad' => 'field_proyecto_autoridad', 'field_proyecto_lider' => 'field_proyecto_lider', 'field_proyecto_unidad_a' => 'field_proyecto_unidad_a', 'field_proyecto_cargo' => 'field_proyecto_cargo', 'field_proyecto_telefono' => 'field_proyecto_telefono', 'field_proyecto_correo' => 'field_proyecto_correo', ); $title_combos['db']['gerentep']['title'] = t('Gerente del Proyecto'); $title_combos['db']['gerentep']['type'] = 'node'; //Área Estrategica $pndes = variable_get('proyectos_operativos_muestra_pndes', TRUE); $mcti = variable_get('proyectos_operativos_muestra_mcti', TRUE); if ($pndes || $mcti) { $arreglo['db']['areae'] = array(); if ($pndes) { $arreglo['db']['areae']['field_proyecto_pndes'] = 'field_proyecto_pndes'; } if ($mcti) { $arreglo['db']['areae']['field_proyecto_mcti'] = 'field_proyecto_mcti'; } $title_combos['db']['areae']['title'] = t('Área Estratégica'); $title_combos['db']['areae']['type'] = 'node'; } //DATOS GENERALES $title_combos['dg']['title'] = t('Datos Generales'); $title_combos['dg']['type'] = 'node'; //Clasificación Sectorial $arreglo['dg']['sector'] = array(); $arreglo['dg']['sector'] = array( 'field_proyecto_sector' => 'field_proyecto_sector', ); $title_combos['dg']['sector']['title'] = t('Clasificación Sectorial'); $title_combos['dg']['sector']['type'] = 'node'; //Talento Humano if (variable_get('proyectos_operativos_muestra_talento', TRUE)) { $arreglo['dg']['talentoh'] = array(); $arreglo['dg']['talentoh'] = array( 'field_proyecto_institucionth' => 'field_proyecto_institucionth', 'field_proyecto_nombres_a' => 'field_proyecto_nombres_a', 'field_proyecto_cargo_th' => 'field_proyecto_cargo_th', 'field_proyecto_rol_th' => 'field_proyecto_rol_th', 'field_proyecto_esfuerzo' => 'field_proyecto_esfuerzo', 'field_proyecto_formacion' => 'field_proyecto_formacion', ); $title_combos['dg']['talentoh']['title'] = t('Talento Humano'); $title_combos['dg']['talentoh']['type'] = 'node'; } //Capacidades $arreglo['dg']['capacidades'] = array(); if (variable_get('proyectos_operativos_muestra_capacidades', TRUE)) { $arreglo['dg']['capacidades'] = array( 'field_proyecto_institucion_alc' => 'field_proyecto_institucion_alc', 'field_proyecto_infraestructura' => 'field_proyecto_infraestructura', 'field_proyecto_equipos' => 'field_proyecto_equipos', 'field_proyecto_insumos' => 'field_proyecto_insumos', 'field_proyectos_servicios' => 'field_proyectos_servicios', ); } $title_combos['dg']['capacidades']['title'] = t('Capacidades'); $title_combos['dg']['capacidades']['type'] = 'node'; //Instituciones $arreglo['dg']['relacion'] = array(); $arreglo['dg']['relacion'] = array( 'field_proyecto_relacion' => 'field_proyecto_relacion', ); $title_combos['dg']['relacion']['title'] = t('Instituciones'); $title_combos['dg']['relacion']['type'] = 'node'; //Empleos Generados if (variable_get('proyectos_operativos_muestra_beneficiario', TRUE)) { $arreglo['dg']['empleosg'] = array( 'field_proyecto_emdirecto' => 'field_proyecto_emdirecto', 'field_proyecto_efdirecto' => 'field_proyecto_efdirecto', ); if (variable_get('proyectos_operativos_muestra_beneficiarios_indirectos', TRUE)) { $arreglo['dg']['empleosg']['field_proyecto_emindirecto'] = 'field_proyecto_emindirecto'; $arreglo['dg']['empleosg']['field_proyecto_efindirecto'] = 'field_proyecto_efindirecto'; } $arreglo['dg']['empleosg'] = array(); $title_combos['dg']['empleosg']['title'] = t('Empleos Generados'); $title_combos['dg']['empleosg']['type'] = 'node'; } //Objetivos del Proyecto $arreglo['dg']['objetivosp'] = array(); $arreglo['dg']['objetivosp'] = array( 'field_proyecto_og' => 'field_proyecto_og', 'field_proyecto_oe' => 'field_proyecto_oe', ); $title_combos['dg']['objetivosp']['title'] = t('Objetivos'); $title_combos['dg']['objetivosp']['type'] = 'node'; //INDICADORES DEL PROYECTO //Enunciado del Problema $title_combos['ip']['title'] = t('Indicadores del Proyecto'); $title_combos['ip']['type'] = 'node'; $arreglo['ip']['enunciadop'] = array(); if (variable_get('proyectos_operativos_muestra_enunciado_problema', TRUE)) { $arreglo['ip']['enunciadop'] = array( 'field_proyecto_causas' => 'field_proyecto_causas', 'field_proyecto_problemas' => 'field_proyecto_problemas', 'field_proyecto_consecuencias' => 'field_proyecto_consecuencias', ); } $title_combos['ip']['enunciadop']['title'] = t('Enunciado del Problema'); $title_combos['ip']['enunciadop']['type'] = 'node'; //Justificación del Proyecto $arreglo['ip']['justificacion'] = array(); if (variable_get('proyectos_operativos_muestra_justicacion', TRUE)) { $arreglo['ip']['justificacion'] = array( 'field_proyecto_justificacion' => 'field_proyecto_justificacion', ); } $title_combos['ip']['justificacion']['title'] = t('Justificación del Proyecto'); $title_combos['ip']['justificacion']['type'] = 'node'; //Alcance del Proyecto $arreglo['ip']['alcance'] = array(); if (variable_get('proyectos_operativos_muestra_alcance', TRUE)) { $arreglo['ip']['alcance'] = array( 'field_proyecto_alcance' => 'field_proyecto_alcance', ); } $title_combos['ip']['alcance']['title'] = t('Alcance del Proyecto'); $title_combos['ip']['alcance']['type'] = 'node'; //Situación Actual del Proyecto $arreglo['ip']['situaciona'] = array(); if (variable_get('proyectos_operativos_muestra_sa', TRUE)) { $arreglo['ip']['situaciona'] = array( 'field_proyecto_sa_descripcion' => 'field_proyecto_sa_descripcion', ); if (variable_get('proyectos_operativos_muestra_sa_cuantificacion', TRUE)) { $arreglo['ip']['situaciona']['field_proyecto_sa_cuantificacion'] = 'field_proyecto_sa_cuantificacion'; } $arreglo['ip']['situaciona']['field_proyecto_sa_formulai'] = 'field_proyecto_sa_formulai'; $arreglo['ip']['situaciona']['field_proyecto_sa_fuentei'] = 'field_proyecto_sa_fuentei'; $arreglo['ip']['situaciona']['field_proyecto_sa_fecha'] = 'field_proyecto_sa_fecha'; } $title_combos['ip']['situaciona']['title'] = t('Situación Actual'); $title_combos['ip']['situaciona']['type'] = 'node'; //Situación Objetivo $arreglo['ip']['situaciono'] = array(); if (variable_get('proyectos_operativos_muestra_so', TRUE)) { $arreglo['ip']['situaciono'] = array( 'field_proyecto_so_descripcion' => 'field_proyecto_so_descripcion', 'field_proyecto_so_cuantificacion' => 'field_proyecto_so_cuantificacion', 'field_proyecto_tiempoi' => 'field_proyecto_tiempoi', ); } $title_combos['ip']['situaciono']['title'] = t('Situación Objetivo'); $title_combos['ip']['situaciono']['type'] = 'node'; //Indicador del resultado del Proyecto $arreglo['ip']['resultadop'] = array(); $arreglo['ip']['resultadop'] = array( 'field_proyecto_descripcion_bien' => 'field_proyecto_descripcion_bien', 'field_proyecto_unidadm' => 'field_proyecto_unidadm', 'field_proyecto_meta_m' => 'field_proyecto_meta_m', 'field_proyecto_meta_f' => 'field_proyecto_meta_f', 'field_proyecto_meta_fisica' => 'field_proyecto_meta_fisica', ); $title_combos['ip']['resultadop']['title'] = t('Indicador del resultado del Proyecto'); $title_combos['ip']['resultadop']['type'] = 'node'; $title_combos['otros']['title'] = t('Otros'); $title_combos['otros']['type'] = 'flow'; $title_combos['otros']['fl']['title'] = t('Flujo de Trabajo'); $arreglo['otros']['fl'] = array( 'proyectos_operativos_flujo' => 'Flujo Actual', ); drupal_alter('proyecto_obtiene_fields_categorias', $title_combos); drupal_alter('proyecto_obtiene_fields_campos', $arreglo); return array( 'categorias' => $title_combos, 'campos' => $arreglo, ); } /* * Implementation of hook_menu() */ function entes_detail_workflow_menu() { $items = array(); $items['entes_detail_workflow_js_util/proyectos'] = array( 'title' => 'JS utilities', 'page callback' => 'entes_detail_workflow_js_util_proyectos', 'access arguments' => array('ver planificador'), 'type' => MENU_CALLBACK, ); //consulta proyecto operativo (comentarios) $items['proyectosop/%proyectosop/comentarios'] = array( 'title' => t('Comentarios'), 'page callback' => '_list_proyectos_operativos_detail_workflow', 'page arguments' => array(1), 'access callback' => '_proyectos_operativos_ver_datos_wk_access', 'access arguments' => array(1), 'weight' => -5, 'type' => MENU_LOCAL_TASK, ); return $items; } /* * Implementation of hook_acciones_obtiene_links_alter() */ function entes_detail_workflow_proyecto_obtiene_links_alter(&$links, $proyecto, $acceso = FALSE) { $node_accion = node_load($proyecto->nid); if (_proyectos_operativos_ver_datos_wk_access($node_accion)) { $links['proyecto_view_comentarios'] = array( 'data' => l(t('Consultar Comentarios'), 'proyectosop/' . $proyecto->nid . '/comentarios'), 'class' => 'proyectos-operativos-comentarios', ); } } function _list_proyectos_operativos_detail_workflow($node){ module_load_include('inc', 'workflow', 'workflow.pages'); $campos_leidos = _entes_detail_proyectos_operativos_get_campos_proyectos(); $options_campos = array(); $node_type = content_types('proyectos_operativos'); $fields = $node_type['fields']; $node_type1 = content_types('accion_especifica'); $fields1 = $node_type1['fields']; $node_workflow_display = node_build_content($node); $result = db_query("SELECT e.*, u.name, u.uid, w.old_sid, w.comment FROM {entes_detail_workflow} AS e INNER JOIN {workflow_node_history} AS w ON w.hid = e.hid INNER JOIN {users} AS u ON w.uid =u.uid WHERE id = %d AND tipo = 'proyectos_operativos' AND active = 1 ORDER BY field_name, time DESC", $node->nid); $comentarios =array(); while($comentario = db_fetch_object($result)) { if (!isset($comentarios[$comentario->field_name])) { $comentarios[$comentario->field_name] = array(); } if (trim($comentario->comentario) != '') { $comentarios[$comentario->field_name][] = '
' . check_plain($comentario->comentario) . '
' . theme('username', $comentario) . ' | ' . format_date($comentario->time) . '
'; } } $contenido = array(); $array_titles = array(); $todas_opciones = array(); $output = ''; foreach($campos_leidos['campos'] as $idcat => $array){ foreach($array as $idcamp => $arrat1){ $output .= '
' . $campos_leidos['categorias'][$idcat][$idcamp]['title'] . ''; $array_soptions = array(); foreach($arrat1 as $ind2 => $array2){ if ($ind2 == 'title'){ $contenido[$ind2] = '
' . t('Nombre del Proyecto') . ': 
' . check_plain($node->title) . '
'; $array_soptions[$ind2] = t('Nombre del Proyecto'); } else { $contenido[$ind2] = drupal_render($node_workflow_display->content[$ind2]); $array_soptions[$ind2] = $fields[$ind2]['widget']['label']; } $array_titles[$ind2] = $array_soptions[$ind2]; $todas_opciones[$ind2] = $ind2; if ($fields[$ind2]['display_settings']['full']['format'] != 'hidden' && trim($contenido[$ind2]) != '') { $ncomentario = isset($comentarios[$ind2]) && count($comentarios[$ind2])? '
' . t('Comentarios') . ':' . implode ('', $comentarios[$ind2]) . '
' : ''; $output .= $contenido[$ind2] . $ncomentario; } } if ($campos_leidos['categorias'][$idcat][$idcamp]['type'] == 'node'){ $options_campos[$campos_leidos['categorias'][$idcat][$idcamp]['title']] = $array_soptions; } $output .= '
'; } } $contenidoae = array(); $acciones_especificas = array(); if (isset($node->field_proyecto_accion_esp)){ foreach($node->field_proyecto_accion_esp as $accion) { if ($accion['nid']) { $accionep = node_load($accion['nid']); $output .= '
' . 'AE: ' . check_plain($accionep->title) . ''; $opcionAE = array(); $contenidoae[$accionep->nid] = array(); $nodeae_workflow_display = node_build_content($accionep); foreach($fields1 as $idcat => $array){ $idcat1 = $accion['nid'] . '_' . $idcat; $contenidoae[$accionep->nid][$idcat] = drupal_render($nodeae_workflow_display->content[$idcat]); $opcionAE[$accionep->nid . '_' . $idcat] = $fields1[$idcat]['widget']['label']; $array_titles[$accionep->nid . '_' . $idcat] = 'AE_' .$i . ': ' . $opcionAE[$accionep->nid . '_' . $idcat]; $todas_opciones[$accionep->nid . '_' . $idcat] = $accionep->nid . '_' . $idcat; if ($fields1[$idcat]['display_settings']['full']['format'] != 'hidden' && trim($contenidoae[$accionep->nid][$idcat]) != '') { $ncomentario = isset($comentarios[$idcat1]) && count($comentarios[$idcat1])? '
' . t('Comentarios') . ':' . implode ('', $comentarios[$idcat1]) . '
' : ''; $output .= $contenidoae[$accionep->nid][$idcat] . $ncomentario; } } $output .= '
'; } } } return $output; } /* * Implementation of entes_detail_workflow_js_util() * Utilidad javascript para realizar ajax en el formulario */ function entes_detail_workflow_js_util_proyectos($categoria = '', $campo = '') { $options_select = isset($_POST[$campo])? $_POST[$campo]: 0; $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); if ($options_select) { $form[$categoria][$campo]['comentario_' . $campo] = array( '#title' => t('Comentario'), '#type' => 'textarea', '#default_value' => '', ); } elseif (isset($form[$categoria][$campo]['comentario_' . $campo])) { unset($form[$categoria][$campo]['comentario_' . $campo]); } 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); $output = drupal_render($form[$categoria][$campo]['comentario_' . $campo]); print drupal_to_js(array('data' => $output, 'status' => true)); exit(); } /* * hook_form_alter() */ function entes_detail_workflow_form_alter(&$form, $form_state, $form_id) { if ($form_id == 'proyectos_operativos_proyecto_genera_campos_form' && isset($form['otros']['fl'])){ $form['otros']['fl']['#options']['flujo_comentarios'] = t('Flujo de Trabajo con comentarios'); } if (($form_id == 'proyectos_operativos_proyecto_basico_form' || $form_id == 'proyectos_operativos_proyecto_generales_form' || $form_id == 'proyectos_operativos_proyecto_indicadores_form') && $form['#node']->nid){ $node_load = $form['#node']; $field_form = $form['#proyectos_operativos_fields']; $new_field_form = array(); if (is_array($field_form) && count($field_form)){ foreach($field_form as $field_id) $new_field_form[$field_id] = $field_id; } $result = db_query("SELECT * FROM {entes_detail_workflow} WHERE id = %d AND tipo = 'proyectos_operativos' AND active = 1 ORDER BY field_name, time DESC", $node_load->nid); $comentarios_details = array(); $pre_render = FALSE; $form['#proyecto_fields']; $nuevos = array(); $nuevos1 = array(); $campos_comentarios = array(); while($comentario = db_fetch_object($result)) { $campo = $comentario->field_name == 'title'? 'field_proyecto_titulo': $comentario->field_name; $nidae = explode('_', $comentario->field_name); if (array_key_exists($campo, $new_field_form) && trim($comentario->comentario) != ''){ if (!array_key_exists($campo, $nuevos)){ if (!isset($campos_comentarios[$campo])) { $campos_comentarios[$campo] = check_plain($comentario->comentario); } $nuevos[$campo] = $campo; $comentarios_details[] = '
' . $form['#proyecto_fields'][$campo]['widget']['label'] . '
' . $comentario->comentario . '
'; } else { if (!array_key_exists($field, $nuevos1)){ $nuevos1[$field] = $field; $comentarios_details[] = '
' . t('Comentarios Anteriores') . ':
' . $comentario->comentario . '
'; } else { $comentarios_details[] = '
' . $comentario->comentario . '
'; } } } } if(count($comentarios_details)){ if (!isset($form['#pre_render'])) { $form['#pre_render'] = array(); } $form['#entes_detail_workflow_comment'] = $campos_comentarios; $form['#pre_render'][] = 'entes_detail_workflow_commment_field_pre_render'; $form['entes_detail_workflow']['#value'] = '
' . t('Observaciones') . ':
' . implode('', $comentarios_details) . '
'; } } if ($form_id == 'proyectos_operativos_accion_especifica_crear_form'){ $node_load = $form['#proyecto']; $field_form = $form['#proyectos_operativos_fields']; $new_field_form = array(); if (is_array($field_form) && count($field_form)){ foreach($field_form as $field_id) { $new_field_form[$field_id] = $field_id; } } $ae = array(); $i = 1; foreach($form['#acciones_especificas'] as $accion) { if (isset($accion->nid)) { $ae[$accion->nid] = $i; $i++; } } $result = db_query("SELECT * FROM {entes_detail_workflow} WHERE id = %d AND tipo = 'proyectos_operativos' AND active = 1 ORDER BY field_name, time DESC", $node_load->nid); $comentarios_details = array(); $nuevos = array(); $nuevos1 = array(); $campos_comentarios = array(); while($comentario = db_fetch_object($result)) { $nidae = explode('_', $comentario->field_name); if (is_numeric($nidae[0])){ $nid = $nidae[0]; unset($nidae[0]); $field = implode('_', $nidae); //se estan viendo todas las acciones especificas if ($form['#node']->nid == $nid){ if (array_key_exists($field, $new_field_form) && trim($comentario->comentario) != ''){ if (!array_key_exists($field, $nuevos)){ if (!isset($campos_comentarios[$field])) { $campos_comentarios[$field] = check_plain($comentario->comentario); } $nuevos[$field] = $field; $comentarios_details[] = '
' . $form['#aeproyecto_fields'][$field]['widget']['label'] . '
' . $comentario->comentario . '
'; } else { if (!array_key_exists($field, $nuevos1)){ $nuevos1[$field] = $field; $comentarios_details[] = '
' . t('Comentarios Anteriores') . ':
' . $comentario->comentario . '
'; } else { $comentarios_details[] = '
' . $comentario->comentario . '
'; } } } } elseif(!$form['#node']->nid){ if (!array_key_exists($field, $nuevos)){ $nuevos[$field] = $field; $comentarios_details[] = '
AE_' .$ae[$nid] . ' ' . $form['#aeproyecto_fields'][$field]['widget']['label'] . '
' . $comentario->comentario . '
'; } else { if (!array_key_exists($field, $nuevos1)){ $nuevos1[$field] = $field; $comentarios_details[] = '
' . t('Comentarios Anteriores') . ':
' . $comentario->comentario . '
'; } else { $comentarios_details[] = '
' . $comentario->comentario . '
'; } } } } } if(count($comentarios_details)){ if (!isset($form['#pre_render'])) { $form['#pre_render'] = array(); } $form['#entes_detail_workflow_comment'] = $campos_comentarios; $form['#pre_render'][] = 'entes_detail_workflow_commment_field_pre_render'; $form['entes_detail_workflow']['#value'] = '
' . t('Observaciones') . ':
' . implode('', $comentarios_details) . '
'; } } if ($form_id == 'workflow_tab_form') { if ($form['node']['#value']->type == 'proyectos_operativos'){ $node = $form['node']['#value']; $campos_leidos = _entes_detail_proyectos_operativos_get_campos_proyectos(); $options_campos = array(); $node_type = content_types('proyectos_operativos'); $fields = $node_type['fields']; $node_type1 = content_types('accion_especifica'); $fields1 = $node_type1['fields']; $node_workflow_display = node_build_content($node); $result = db_query("SELECT e.*, u.name, u.uid, w.old_sid, w.comment FROM {entes_detail_workflow} AS e INNER JOIN {workflow_node_history} AS w ON w.hid = e.hid INNER JOIN {users} AS u ON w.uid =u.uid WHERE id = %d AND tipo = 'proyectos_operativos' AND active = 1 ORDER BY field_name, time DESC", $node->nid); $comentarios =array(); while($comentario = db_fetch_object($result)) { if (!isset($comentarios[$comentario->field_name])) { $comentarios[$comentario->field_name] = array(); } if (trim($comentario->comentario) != '') { $comentarios[$comentario->field_name][] = '
' . check_plain($comentario->comentario) . '
' . theme('username', $comentario) . ' | ' . format_date($comentario->time) . '
'; } } $contenido = array(); $array_titles = array(); $todas_opciones = array(); $form['proyectos_operativos_remove'] = array( '#type' => 'checkbox', '#title' => t('Borrar los comentarios de campos Previos.'), '#default_value' => FALSE, '#access' => user_access('remove observaciones'), ); foreach($campos_leidos['campos'] as $idcat => $array){ foreach($array as $idcamp => $arrat1){ $form[$idcamp] = array( '#type' => 'fieldset', '#title' => $campos_leidos['categorias'][$idcat][$idcamp]['title'], ); $array_soptions = array(); foreach($arrat1 as $ind2 => $array2){ if ($ind2 == 'title'){ $contenido[$ind2] = '
' . t('Nombre del Proyecto') . ': 
' . check_plain($node->title) . '
'; $array_soptions[$ind2] = t('Nombre del Proyecto'); } else { $contenido[$ind2] = drupal_render($node_workflow_display->content[$ind2]); $array_soptions[$ind2] = $fields[$ind2]['widget']['label']; } $array_titles[$ind2] = $array_soptions[$ind2]; $todas_opciones[$ind2] = $ind2; if ($fields[$ind2]['display_settings']['full']['format'] != 'hidden' && trim($contenido[$ind2]) != '') { $ncomentario = isset($comentarios[$ind2]) && count($comentarios[$ind2])? '
' . t('Comentarios Previos') . ':' . implode ('', $comentarios[$ind2]) . '
' : ''; $form[$idcamp][$ind2 . '_display']['#value'] = $contenido[$ind2] . $ncomentario; $form[$idcamp][$ind2][$ind2] = array( '#type' => 'checkbox', '#title' => t('Agregar comentario al campos (@campo9).', array('@campo9' => $array_soptions[$ind2])), '#default_value' => FALSE, '#suffix' => '
', '#ahah' => array( 'path' => 'entes_detail_workflow_js_util/proyectos/' . $idcamp . '/' . $ind2, 'wrapper' => $ind2 . '_comentario', 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); } } if ($campos_leidos['categorias'][$idcat][$idcamp]['type'] == 'node'){ $options_campos[$campos_leidos['categorias'][$idcat][$idcamp]['title']] = $array_soptions; } } } //add weight to submit button $form['submit']['#weight'] = 100; $form['#node_workflow_display'] = $contenido; //Se obtienen las acciones especificas del proyecto $i = 1; $contenidoae = array(); $acciones_especificas = array(); if (isset($node->field_proyecto_accion_esp)){ foreach($node->field_proyecto_accion_esp as $accion) { if ($accion['nid']) { $accionep = node_load($accion['nid']); $form['AE_' . $accionep->nid] = array( '#type' => 'fieldset', '#title' => 'AE: ' . check_plain($accionep->title), ); $opcionAE = array(); $contenidoae[$accionep->nid] = array(); $nodeae_workflow_display = node_build_content($accionep); foreach($fields1 as $idcat => $array){ $contenidoae[$accionep->nid][$idcat] = drupal_render($nodeae_workflow_display->content[$idcat]); $opcionAE[$accionep->nid . '_' . $idcat] = $fields1[$idcat]['widget']['label']; $array_titles[$accionep->nid . '_' . $idcat] = 'AE_' .$i . ': ' . $opcionAE[$accionep->nid . '_' . $idcat]; $todas_opciones[$accionep->nid . '_' . $idcat] = $accionep->nid . '_' . $idcat; if ($fields1[$idcat]['display_settings']['full']['format'] != 'hidden' && trim($contenidoae[$accionep->nid][$idcat]) != '') { $idcat1 = $accion['nid'] . '_' . $idcat; $ncomentario = isset($comentarios[$idcat1]) && count($comentarios[$idcat1])? '
' . t('Comentarios Previos') . ':' . implode ('', $comentarios[$idcat1]) . '
' : ''; $form['AE_' . $accionep->nid][$accionep->nid . '_' . $idcat . '_display']['#value'] = $contenidoae[$accionep->nid][$idcat] . $ncomentario; $form['AE_' . $accionep->nid][$accionep->nid . '_' . $idcat][$accionep->nid . '_' . $idcat] = array( '#type' => 'checkbox', '#title' => t('Agregar comentario al campo (@campo9).', array('@campo9' => $array_titles[$accionep->nid . '_' . $idcat])), '#default_value' => FALSE, '#suffix' => '
', '#ahah' => array( 'path' => 'entes_detail_workflow_js_util/proyectos/' . 'AE_' . $accionep->nid . '/' . $accionep->nid . '_' . $idcat, 'wrapper' => $accionep->nid . '_' . $idcat . '_comentario', 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); } } $options_campos['AE_' .$i] = $opcionAE; $i++; } } } $form['#nodeae_workflow_display'] = $contenidoae; $form['#node_workflow_titles'] = $array_titles; $form['#node_workflow_todas_opciones'] = $todas_opciones; //remove previous submit $new_submit = array(); foreach($form['#submit'] as $submit) { if ($submit == 'workflow_tab_form_submit'){ $new_submit[] = 'entes_detail_workflow_form_submit'; } } $form['#submit'] = $new_submit; } } if ($form_id == 'proyectos_reformulacion_reformula_wk_tab_page_form'){ $proyecto = $form['#node']; $options_campos = _entes_detail_proyectos_operativos_get_campos_proyectos_reformula($proyecto); $display = reformula_ver_campos($form['#node'], $form['#reformulacion']); $nodeae_workflow_display = array(); if (count($options_campos['campos'])) { $todas_opciones = array(); $array_titles = $options_campos['categorias']; foreach($options_campos['campos'] as $idcat => $array){ $array_soptions[$array_titles[$idcat]['title']] = $array ; foreach($array as $idcamp => $arrat1){ $array_titles[$idcamp] = $arrat1; $todas_opciones[$idcamp] = $arrat1; } } foreach($display as $id_d => $disp){ if (is_numeric($id_d)){ $nodeae_workflow_display[$id_d] = $display[$id_d]; } } $form['#node_workflow_display'] = $display; $form['#nodeae_workflow_display'] = $nodeae_workflow_display; $form['#node_workflow_titles'] = $array_titles; $form['#node_workflow_todas_opciones'] = $todas_opciones; $form['proyectos_operativos_remove'] = array( '#type' => 'checkbox', '#title' => t('Borrar los comentarios de campos Previos.'), '#default_value' => FALSE, '#access' => user_access('remove observaciones'), ); $form['workflow_details'] = array( '#title' => t('Comentarios por Campos'), '#type' => 'select', '#default_value' => array(), '#options' => $array_soptions, '#multiple' => TRUE, '#weight' => 10, '#ahah' => array( 'path' => 'entes_detail_workflow_js_util', 'wrapper' => 'fields_problems', 'method' => 'replace', 'progress' => array('type' => 'bar', 'message' => t('Please wait...')), ), ); $form['campos_modificar'] = array( '#type' => 'fieldset', '#prefix' => '
', '#suffix' => '
', '#weight' => 11, '#title' => t('Observaciones por campos'), ); $form['campos_modificar']['no_comentarios'] = array( '#value' => t('No exiten comentarios de los campos de la modificación'), ); $form['#submit'][] = 'entes_detail_workflow_reformula_form_submit'; $form['actions']['#weight'] = 100; } } } /* * Implementation of proyectos_operativos_nodereference2_field_pre_render() * Limitar al formulario a los entes que le es posible a los usuarios */ function entes_detail_workflow_commment_field_pre_render($form) { $campos_comentarios = $form['#entes_detail_workflow_comment']; foreach($campos_comentarios as $campo => $comentario) { if (isset($form[$campo])) { if (!isset($form[$campo][0]['value']['#attributes']['class'])) { $form[$campo][0]['value']['#attributes']['class'] = ''; } $form[$campo][0]['value']['#attributes']['class'] .= ' campos_comentarios beautytips'; $form[$campo][0]['value']['#attributes']['title'] = $comentario; } } return $form; } /* * Implementation of proyectos_reformulacion_reformula_tab_page_ae_form_validate() */ function entes_detail_workflow_form_submit($form, &$form_state) { global $user; // The entire node object was stashed in the form. $node = $form_state['values']['node']; $node->workflow = $form_state['values']['workflow']; $node->workflow_comment = $form_state['values']['workflow_comment']; $node->workflow_scheduled = $form_state['values']['workflow_scheduled']; $node->workflow_scheduled_date = $form_state['values']['workflow_scheduled_date']; $node->workflow_scheduled_hour = $form_state['values']['workflow_scheduled_hour']; //crear una nueva revision $node->revision = 1; // Call node_save() to make sure any handlers that use the // new workflow values will see them. node_save($node); //add node save values $form_state['values']['node'] = $node; $form_state['redirect'] = 'node/' . $node->nid; $sid = $node->workflow; if (array_key_exists('proyectos_operativos_remove', $form_state['values']) && $form_state['values']['proyectos_operativos_remove']){ db_query("UPDATE {entes_detail_workflow} set active = 0 WHERE id = %d AND tipo = 'proyectos_operativos'", $node->nid); } //SE OBTIENE el hid del historico del workflow $res = db_query("select max(hid) as hid from workflow_node_history WHERE nid = %d AND sid = %d", $node->nid, $sid); $hid = db_fetch_object($res); $chid = ($hid && $hid->hid) ? $hid->hid : 0; $time = time(); foreach($form['#node_workflow_todas_opciones'] as $id => $title){ if (array_key_exists('comentario_' . $id, $form_state['values'])){ db_query("INSERT INTO {entes_detail_workflow} (id, sid, tipo, field_name, comentario, hid, vid, active, time) VALUES (%d, %d, 'proyectos_operativos', '%s', '%s', %d, %d, 1, %d)", $node->nid, $sid, $id, check_plain(trim($form_state['values']['comentario_' . $id])), $chid, $node->vid, $time); } } } /* * Implementation of proyectos_reformulacion_reformula_tab_page_ae_form_validate() */ function entes_detail_workflow_reformula_form_submit($form, &$form_state) { global $user; if (array_key_exists('proyectos_operativos_remove', $form_state['values']) && $form_state['values']['proyectos_operativos_remove']){ db_query("UPDATE {entes_detail_workflow} set active = 0 WHERE id = %d AND tipo = 'proyectos_reformula'", $node->nid); } $time = time(); foreach($form['#node_workflow_todas_opciones'] as $id => $title){ if (array_key_exists('comentario_' . $id, $form_state['values'])){ db_query("INSERT INTO {entes_detail_workflow} (id, sid, tipo, field_name, comentario, hid, vid, active, time) VALUES (%d, %d, 'proyectos_reformula', '%s', '%s', %d, %d, 1, %d)", $form['#reformulacion']->id_ref, $form['#nuevo_estado'], $id, check_plain(trim($form_state['values']['comentario_' . $id])), 0, 0, $time); } } }