'Ente Planificador',
'page callback' => 'politicas_proyectos_get_politicas_js',
'access arguments' => array('ver planificador'),
'type' => MENU_CALLBACK,
);
return $items;
}
function politicas_proyectos_get_politicas_js($campo = '') {
$form_state = array('submitted' => FALSE);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$politica = array();
$arreglo = array();
if (isset($_POST[$form['#politicas_campo']]['nid']) && is_array($_POST[$form['#politicas_campo']]['nid'])) {
$arreglo = $_POST[$form['#politicas_campo']]['nid'];
}
elseif (isset($_POST[$form['#politicas_campo']]) && is_array($_POST[$form['#politicas_campo']])) {
$arreglo = $_POST[$form['#politicas_campo']];
}
foreach($arreglo as $valor) {
$valor = intval($valor);
if ($valor) {
$politica[$valor] = $valor;
}
}
$form['#causas'] = array();
$form['#cambios'] = array();
$form['#descriptores'] = array();
$form['#formas_solucion'] = array();
$form['#carabobo'] = array();
$form['#all_descriptores'] = array();
$form['#formas_solucion'] = array();
$form['#pdlp'] = array();
$form['#politica'] = $politica;
$output = t('No ha seleccionado una politica');
if ($politica) {
$busca_causas = array();
foreach($politica as $id) {
$busca_causas += $form['#causas_criticas'][$id];
}
$descriptores_c = _politicas_proyectos_get_causas_all_causas('criticas', $busca_causas);
$form['#formas_solucion'] = politicas_proyectos_get_formas_solucion($busca_causas);
$all_descriptores = _politicas_proyectos_situacion_actual_listar_all_descriptores($descriptores_c);
$form['#all_descriptores'] = $all_descriptores;
$form['#descriptores'] = $all_descriptores['descriptores'];
$form['#causas'] = $all_descriptores['causas'];
$form['#cambios'] = $all_descriptores['cambios'];
$form['#pdlp'] = $all_descriptores['pdlp'];
$form['#carabobo'] = $all_descriptores['carabobo'];
$output = _politicas_proyectos_display_politicas($form['#all_descriptores'], $form['#formas_solucion']);
}
//$form += $new_form;
form_set_cache($form_build_id, $form, $form_state);
$form += array(
'#post' => $_POST,
'#programmed' => FALSE,
);
// Rebuild the form.
$form = form_builder($_POST['form_id'], $form, $form_state);
// 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.
print drupal_to_js(array('data' => $output, 'status' => true));
exit();
}
/*
* Implementation of _politicas_proyectos_situacion_actual_listar_all_descriptores()
* Get ente's descriptores
* Inputs:
- $ente_planificador (integer): ente planificador nid
- $tipo (integer): plann type
- $year (integer): descriptor year creation, if no available 'situacional_actual_preliminar_anho_creacion' variable will be used
* Outputs:
- Descriptores (array nid descriptor):
+ body: Description descriptor
+ title: Acronimo
+ nid: Descriptor nid node reference
+ year: descriptor year creation
+ clasificacion: descriptor type
/ tid: taxonomy term
+ causas: causas list (array nid causa-descriptor):
/ body: Description causa
/ title: Acronimo causa
/ nid: Causa nid node reference
/ descriptor: Descriptor nid node reference
+ solucion: solucion list (array nid solucion-descriptor):
/ body: Description solucion
/ title: Acronimo solucion
/ nid: Solucion nid node reference
/ descriptor: Descriptor nid node reference
*/
function _politicas_proyectos_situacion_actual_listar_all_descriptores($causas = array()) {
//se obtienen los descriptores
$descriptores = array();
$causas_load = array();
$cambios_load = array();
$pdlp_load = array();
$carabobo_load = array();
$sql = "SELECT c.nid, n.title, nr.body FROM {content_type_descriptores} AS c INNER JOIN {node} AS n ON c.nid = n.nid AND c.vid = n.vid AND n.type = 'descriptores' INNER JOIN {node_revisions} AS nr ON c.nid = nr.nid AND c.vid = nr.vid";
$inputs = array();
$inputs_c = array();
if (is_array($causas) && count($causas)) {
$implode_causas_sql = array();
foreach($causas as $id => $descriptoresl) {
$implode_causas_sql[] = '%d';
$inputs_c[] = $id;
foreach($descriptoresl as $descriptor) {
$implode_sql[] = '%d';
$inputs[] = $descriptor;
}
}
if (count($implode_sql)) {
$sql .= ' WHERE c.nid IN (' . implode(', ', $implode_sql) . ')';
}
}
$tipo_plan = 'situacion_actual';
$planns = _situacion_actual_preliminar_get_planns();
$plan = $planns[$tipo_plan];
$sql .=' AND c.field_descriptores_' . $plan['short'] . '_value = %d';
$inputs[] = 1;
$sql .=' ORDER BY c.nid';
$result = db_query($sql, $inputs);
$inpunts = array();
$inpunts_values = array();
$solucion = array();
while($descriptor = db_fetch_object($result)) {
$descriptores[$descriptor->nid] = array(
'body' => $descriptor->body,
'title' => $descriptor->title,
'nid' => $descriptor->nid,
'year' => $year_display,
'clasificacion' => array(),
'causas' => array(),
'cambios' => array(),
);
$inpunts[] = '%d';
$inpunts_values[] = $descriptor->nid;
}
if (count($inpunts)) {
$implode = implode(',', $inpunts);
//Se obtienen la clasificacion de los descriptores
$sql = 'SELECT c.field_descriptores_clasificacion_value AS tid, c.nid FROM {content_field_descriptores_clasificacion} AS c INNER JOIN {node} AS n ON n.nid = c.nid AND n.vid = c.vid WHERE c.nid IN (' . $implode . ')';
$result = db_query($sql, $inpunts_values);
while($clasificacion = db_fetch_object($result)) {
$descriptores[$clasificacion->nid]['clasificacion'][$clasificacion->tid] = $clasificacion->tid;
}
//se obtienen las causas
//field_descriptores_causa
$sql = "SELECT c.field_descriptores_causa_nid as nid, c.nid as descriptor, n.title, nr.body FROM {content_field_descriptores_causa} AS c INNER JOIN {node} AS n ON c.field_descriptores_causa_nid = n.nid AND n.type = 'causas' INNER JOIN {node} AS n1 ON c.nid = n1.nid AND c.vid = n1.vid INNER JOIN {node_revisions} AS nr ON n.nid = nr.nid AND n.vid = nr.vid WHERE c.nid IN (" . $implode . ")";
$inpunts_d = $inpunts_values;
if (count($implode_causas_sql)) {
$sql .= ' AND c.field_descriptores_causa_nid IN (' . implode(', ', $implode_causas_sql) . ')';
$inpunts_d = array_merge($inpunts_values, $inputs_c);
}
$sql .= ' ORDER BY c.field_descriptores_causa_nid';
$result = db_query($sql, $inpunts_d);
while($causa = db_fetch_object($result)) {
$causas_load[$causa->nid] = array(
'descriptor' => $causa->descriptor,
'body' => $causa->body,
'nid' => $causa->nid,
);
$descriptores[$causa->descriptor]['causas'][$causa->nid] = array(
'body' => $causa->body,
'nid' => $causa->nid,
'title' => $causa->title,
'descriptor' => $causa->descriptor,
);
}
//se obtienen los cambios
//field_descriptor_cambio_nid
$sql_implode_cambios = array();
$inputs_cambios = array();
$sql = "SELECT c.field_descriptor_cambio_nid as nid, c.nid as descriptor, n.title, nr.body FROM {content_field_descriptor_cambio} AS c INNER JOIN {node} AS n ON c.field_descriptor_cambio_nid = n.nid AND n.type = 'cambios' INNER JOIN {node} AS n1 ON c.nid = n1.nid AND c.vid = n1.vid INNER JOIN {node_revisions} AS nr ON n.nid = nr.nid AND n.vid = nr.vid WHERE c.nid IN (" . $implode . ") ORDER BY c.field_descriptor_cambio_nid";
$result = db_query($sql, $inpunts_values);
while($meta = db_fetch_object($result)) {
$cambios_load[$meta->nid] = array(
'descriptor' => $meta->descriptor,
'body' => $meta->body,
'nid' => $meta->nid,
'pdlp' => array(),
'carabobo' => array(),
);
$sql_implode_cambios[] = '%d';
$inputs_cambios[] = $meta->nid;
$descriptores[$meta->descriptor]['cambios'][$meta->nid] = array(
'body' => $meta->body,
'nid' => $meta->nid,
'title' => $meta->title,
'descriptor' => $meta->descriptor,
'pdlp' => array(),
'carabobo' => array(),
);
}
//se obtienen pdlp y carabobo
if (count($inputs_cambios)) {
$implode = implode(', ', $sql_implode_cambios);
$sql = "SELECT p.*, t.name, t.description FROM {content_field_cambios_pdp} AS p INNER JOIN {node} AS n ON n.nid = p.nid AND n.vid = p.vid AND n.type = 'cambios' INNER JOIN {term_data} AS t ON t.tid = p.field_cambios_pdp_value WHERE p.nid IN (" . $implode . ") ORDER BY t.name";
$result = db_query($sql, $inputs_cambios);
while($meta = db_fetch_object($result)) {
if ($meta->field_cambios_pdp_value) {
$descriptores[$cambios_load[$meta->nid]['descriptor']]['cambios'][$meta->nid]['pdlp'][$meta->delta][$meta->field_cambios_pdp_value] = $meta->name . ' ' . $meta->description;
$cambios_load[$meta->nid]['pdlp'][$meta->delta][$meta->field_cambios_pdp_value] = $meta->name . ' ' . $meta->description;
$pdlp_load[$meta->delta][$meta->field_cambios_pdp_value] = $meta->name . ' ' . $meta->description;
}
}
$sql = "SELECT p.*, t.plan_carabobo_meta_value AS carabobo FROM {content_field_cambios_carabobo} AS p INNER JOIN {node} AS n ON n.nid = p.nid AND n.vid = p.vid AND n.type = 'cambios' INNER JOIN {term_fields_term} AS t ON t.tid = p.field_cambios_carabobo_value WHERE p.nid IN (" . implode(', ', $inputs_cambios) . ")";
$result = db_query($sql, $inputs_cambios);
while($meta = db_fetch_object($result)) {
if ($meta->field_cambios_carabobo_value) {
$descriptores[$cambios_load[$meta->nid]['descriptor']]['cambios'][$meta->nid]['carabobo'][$meta->delta][$meta->field_cambios_carabobo_value] = $meta->carabobo;
$cambios_load[$meta->nid]['carabobo'][$meta->delta][$meta->field_cambios_carabobo_value] = $meta->carabobo;
$carabobo_load[$meta->field_cambios_carabobo_value] = $meta->carabobo;
}
}
}
}
return array(
'descriptores' => $descriptores,
'causas' => $causas_load,
'cambios' => $cambios_load,
'pdlp' => $pdlp_load,
'carabobo' => $carabobo_load,
);
}
/*
* hook_form_alter()
*/
function politicas_proyectos_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'proyectos_operativos_proyecto_genera_campos_form') {
if (!isset($_SESSION['proyectos_operativos_mostrar_campos'][$form['#node']->nid]) || !count($_SESSION['proyectos_operativos_mostrar_campos'][$form['#node']->nid])) {
$form['db']['areae']['#options']['field_proyectos_descript'] = t('Descriptores (Problemas)');
$form['db']['areae']['#options']['field_proyectos_cambios'] = t('Cambios en la situación Actual');
$form['db']['areae']['#options']['field_proyectos_causasc'] = t('Causas Críticas');
//se borra el campo consecuencias
unset($form['ip']['enunciadop']['#options']['field_proyecto_consecuencias']);
}
}
if ($form_id == 'proyectos_operativos_proyecto_basico_form') {
$new_submit = array();
//se coloca el submit de pd
$new_submit[] = '_politicas_proyectos_basico_form_pd_submit';
foreach($form['#submit'] as $submit) {
$new_submit[] = $submit;
}
$form['#submit'] = $new_submit;
//se agregan los nuevos campos
if (isset($form['field_proyecto_pndes'])) {
unset($form['field_proyecto_pndes']);
}
// $form['field_proyecto_pndes']['#access'] = FALSE;
$form['#proyectos_operativos_fields'][] = 'field_proyecto_problemas';
$form['#proyectos_operativos_fields'][] = 'field_proyectos_descript';
$form['#proyectos_operativos_fields'][] = 'field_proyecto_causas';
$form['#proyectos_operativos_fields'][] = 'field_proyectos_causasc';
$form['#proyectos_operativos_fields'][] = 'field_proyectos_cambios';
$form['#proyectos_operativos_fields'][] = 'field_proyectos_solucion';
$form['#proyectos_operativos_fields'][] = 'field_proyecto_pndes';
$form['#proyectos_operativos_fields'][] = 'field_proyectos_carabobo';
$politicas = _politicas_proyectos_references($form['#ente_planificador']->nid, 1);
$form['#politicas'] = $politicas;
$form['#causas'] = array();
$form['#cambios'] = array();
$form['#descriptores'] = array();
$form['#formas_solucion'] = array();
$form['#mpcc'] = array();
$form['#pdlp'] = array();
$causas_criticas = _politicas_proyectos_get_politicas_causas($form['#politicas']['politicas']);
$politicas = array();
//solo deje aquellas politicas que contengan causas criticas
foreach($form['#politicas']['politicas'] as $id => $pol) {
if (isset($causas_criticas[$id]) && is_array($causas_criticas[$id]) && count($causas_criticas[$id])) {
$politicas[$id] = $pol;
}
}
$form['#politicas']['politicas'] = $politicas;
$form['#causas_criticas'] = $causas_criticas;
$form['#carabobo'] = array();
$politica = array();
if (isset($form['#node']->field_proyecto_mcti) && is_array($form['#node']->field_proyecto_mcti)) {
foreach($form['#node']->field_proyecto_mcti as $valor) {
if ($valor['nid']) {
$politica[$valor['nid']] = $valor['nid'];
}
}
}
//no deje enviar el formulario si no existen politicas para este ente
$form['buttons']['registrar']['#access'] = is_array($form['#politicas']['politicas']) && count($form['#politicas']['politicas']);
if (!count($politica) && is_array($form['#politicas']['politicas']) && count($form['#politicas']['politicas'])) {
//se obtiene el primer elemento del arreglo
$key = key($form['#politicas']['politicas']);
$politica[$key] = $key;
}
$form['#politicas_campo'] = 'field_proyecto_mcti';
$form['#politica'] = $politica;
if (count($form['#politica'])) {
$busca_causas = array();
foreach($form['#politica'] as $id) {
if (isset($form['#causas_criticas'][$id]) && is_array($form['#causas_criticas'][$id]) && count($form['#causas_criticas'][$id])) {
foreach($form['#causas_criticas'][$id] as $causa) {
$busca_causas[$causa] = $causa;
}
}
}
$descriptores_c = _politicas_proyectos_get_causas_all_causas('criticas', $busca_causas);
$form['#formas_solucion'] = politicas_proyectos_get_formas_solucion($busca_causas);
$all_descriptores = _politicas_proyectos_situacion_actual_listar_all_descriptores($descriptores_c);
$form['#all_descriptores'] = $all_descriptores;
$form['#descriptores'] = $all_descriptores['descriptores'];
$form['#causas'] = $all_descriptores['causas'];
$form['#cambios'] = $all_descriptores['cambios'];
$form['#pdlp'] = $all_descriptores['pdlp'];
$form['#carabobo'] = $all_descriptores['carabobo'];
}
}
if ($form_id == 'proyectos_operativos_proyecto_indicadores_form') {
$arreglo = array(
'field_proyecto_causas' => 'field_proyecto_causas',
'field_proyecto_problemas' => 'field_proyecto_problemas',
'field_proyecto_consecuencias' => 'field_proyecto_consecuencias',
);
foreach($arreglo as $id) {
if (isset($form['field_proyecto_causas'])) {
unset($form[$id]);
$title = $form['#field_info'][$id]['widget']['label'];
unset($form['#field_info'][$id]);
$items = array();
if ($id != field_proyecto_consecuencias) {
foreach($form['#node']->{$id} as $valor) {
$items[] = $valor['value'];
}
$form[$id] = array(
'#value' => '
' . theme('item_list', $items) . '
',
);
}
}
}
$new_fields = array();
foreach($form['#proyectos_operativos_fields'] as $id) {
if (!isset($arreglo[$id])) {
$new_fields[] = $id;
}
}
$form['#proyectos_operativos_fields'] = $new_fields;
}
}
/*
* Implementation of proyectos_operativos_proyecto_basico_form_submit().
* Guardar formulario de datos basicos (proyectos operativos).
*/
function _politicas_proyectos_basico_form_pd_submit($form, &$form_state) {
//se agregan los valores de descriptores, causas y cambios
$arreglo = array();
$arregloi = array();
$campos = array(
'descriptores' => array(
'value' => 'field_proyecto_problemas',
'nid' => 'field_proyectos_descript',
),
'causas' => array(
'value' => 'field_proyecto_causas',
'nid' => 'field_proyectos_causasc',
),
'cambios' => array(
'nid' => 'field_proyectos_cambios',
),
);
$solucion = array();
foreach($campos as $id1 => $tipos) {
foreach($tipos as $valor => $campo) {
$arreglo = array();
foreach($form['#' . $id1] as $id => $nodo) {
$arreglo[][$valor] = $valor == 'nid'? $id : check_plain($nodo['body']);
if ($id1 == 'causas' && $valor == 'value') {
foreach($form['#formas_solucion'][$id] as $texto) {
$solucion[][$valor] = $texto;
}
}
}
$form_state['values'][$campo] = $arreglo;
}
}
//se agregan los valores de formas de solucion
$form_state['values']['field_proyectos_solucion'] = $solucion;
//se agregan los valores de plan de la patria
$pdlp = array();
for($i = 0; $i < 4 ; $i++) {
if (is_array($form['#pdlp'][$i])) {
foreach($form['#pdlp'][$i] as $id => $valor) {
if ($id) {
$pdlp[] = $id;
}
}
}
}
$form_state['values']['field_proyecto_pndes']['tids'] = $pdlp;
//carabobo
$arreglo = array();
foreach($form['#carabobo'] as $id => $valor) {
if ($id) {
$arreglo[]['value'] = $id;
}
}
$form_state['values']['field_proyectos_carabobo'] = $arreglo;
$form_state['values']['field_proyecto_mcti'] = array();
foreach($form['#politica'] as $politica) {
$form_state['values']['field_proyecto_mcti'][]['nid'] = $politica;
}
}
function _politicas_proyectos_display_politicas($descriptores, $formas_solucion) {
$output = '';
$arreglot = array(
'descriptores' => t('Problemas (Descriptores)'),
'causas' => t('Causas'),
'cambios' => t('Cambios en la Situación Actual'),
);
$solucion = array();
foreach($arreglot as $id1 => $texto) {
$output .= '';
$arreglo = array();
foreach($descriptores[$id1] as $id => $nodo) {
$arreglo[] = $nodo['body'];
if ($id1 == 'causas') {
$solucion = array_merge($solucion, $formas_solucion[$id]);
}
}
$output .= theme('item_list', $arreglo);
$output .= '
';
if ($id1 == 'causas') {
$output .= '';
$output .= theme('item_list', $solucion);
$output .= '
';
}
}
//pdlp
$output .= '';
$output .= '';
$output .= theme('item_list', $descriptores['carabobo']);
$output .= '
';
return $output;
}
function _politicas_proyectos_get_politicas_causas($politicas = array()) {
$causas = array();
if (count($politicas)) {
$sql = "SELECT p.field_politicas_causas_nid AS causa, p.nid FROM {content_field_politicas_causas} AS p INNER JOIN {node} AS n ON n.nid = p.nid AND n.vid = p.vid INNER JOIN {node} AS nc ON nc.nid = p.field_politicas_causas_nid INNER JOIN {content_type_causas} AS cc ON cc.nid = nc.nid AND cc.vid = nc.vid AND cc.field_causa_critica_value = '1' WHERE p.nid in(";
$inputs = array();
$implode_sql = array();
foreach($politicas as $id => $politica) {
$causas[$id] = array();
$implode_sql[] = '%d';
$inputs[] = $id;
}
$sql .= implode(', ', $implode_sql) . ')';
$result = db_query($sql, $inputs);
while($causa = db_fetch_object($result)) {
$causas[$causa->nid][$causa->causa] = $causa->causa;
}
}
return $causas;
}
/*
* Implementation of _politicas_proyectos_get_causas_all_causas()
* Obtiene las causas criticas por tipo de plan
*/
function _politicas_proyectos_get_causas_all_causas($tipo = 'posibles', $causas = array()){
$tabla = ($tipo == 'posibles')? 'content_field_descriptores_posibles' : 'content_field_descriptores_criticas';
$campo = 'field_descriptores_' . $tipo . '_nid';
$descriptores = array();
if (count($causas)) {
$sql = "SELECT d.*, ds." . $campo . " AS causa FROM {" . $tabla . "} AS ds INNER JOIN {content_type_descriptores} AS d ON d.nid = ds.nid AND d.vid = ds.vid INNER JOIN {node} AS n ON n.nid = ds.nid AND n.vid = ds.vid INNER JOIN {node} AS nc ON nc.nid = ds." . $campo . " INNER JOIN {content_type_causas} AS cc ON cc.nid = nc.nid AND cc.vid = nc.vid AND cc.field_causa_critica_value = '1' WHERE ";
$inputs = array();
foreach($causas as $causa) {
$implode_sql[] = '%d';
$inputs[] = $causa;
}
$sql .= ' ds.' . $campo . ' in (' . implode(', ', $implode_sql) . ')';
$result = db_query($sql, $inputs);
$descriptores = array();
while($descriptor = db_fetch_object($result)) {
if ($descriptor->nid && $descriptor->causa) {
$descriptores[$descriptor->causa][$descriptor->nid] = $descriptor->nid;
}
}
}
return $descriptores;
}
function politicas_proyectos_get_formas_solucion($causas = array()) {
$soluciones = array();
if (count($causas)) {
$implode_sql = array();
$inputs = array();
$sql = "SELECT c.field_causa_solucion_value as value, c.delta, c.nid FROM {content_field_causa_solucion} AS c INNER JOIN {node} AS n ON n.nid = c.nid AND n.vid = c.vid WHERE c.nid IN (";
foreach($causas as $causa) {
$implode_sql[] = '%d';
$inputs[] = $causa;
}
$sql .= implode(', ', $implode_sql) . ')';
$soluciones = array();
$result = db_query($sql, $inputs);
while($solucion = db_fetch_object($result)) {
$soluciones[$solucion->nid][$solucion->delta] = $solucion->value;
}
}
return $soluciones;
}
/**
* Implementation of hook_theme().
*/
function politicas_proyectos_theme() {
return array(
'politicas_direccionales_select' => array(
'arguments' => array('element' => NULL),
),
'politicas_proyectos_formatter_body' => array(
'arguments' => array('element'),
'function' => 'theme_politicas_proyectos_formatter_body',
),
'politicas_proyectos_formatter_pndes_0' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndes_1' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndes_2' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndes_3' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndeso_0' => array(
'arguments' => array('element' => NULL),
'function' => 'theme_politicas_proyectoso_formatter_generic',
),
'politicas_proyectos_formatter_pndeso_1' => array(
'arguments' => array('element' => NULL),
'function' => 'theme_politicas_proyectoso_formatter_generic',
),
'politicas_proyectos_formatter_pndeso_2' => array(
'arguments' => array('element' => NULL),
'function' => 'theme_politicas_proyectoso_formatter_generic',
),
'politicas_proyectos_formatter_pndeso_3' => array(
'arguments' => array('element' => NULL),
'function' => 'theme_politicas_proyectoso_formatter_generic',
),
'politicas_proyectos_formatter_pndesc_0' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndesc_1' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndesc_2' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_pndesc_3' => array(
'arguments' => array('element' => NULL, $html = TRUE, $unique = FALSE),
'function' => 'theme_politicas_proyectos_formatter_generic',
),
'politicas_proyectos_formatter_metaspcc' => array(
'arguments' => array('element' => NULL),
'function' => 'theme_politicas_proyectos_formatter_metaspcc',
),
);
}
/**
* Proxy theme function for 'full' and 'teaser' nodereference field formatters.
*/
function theme_politicas_proyectos_formatter_body($element) {
static $recursion_queue = array();
$output = '';
if (!empty($element['#item']['safe']['nid'])) {
$nid = $element['#item']['safe']['nid'];
$node = $element['#node'];
$field = content_fields($element['#field_name'], $element['#type_name']);
// If no 'referencing node' is set, we are starting a new 'reference thread'
if (!isset($node->referencing_node)) {
$recursion_queue = array();
}
$recursion_queue[] = $node->nid;
if (in_array($nid, $recursion_queue)) {
// Prevent infinite recursion caused by reference cycles:
// if the node has already been rendered earlier in this 'thread',
// we fall back to 'default' (node title) formatter.
return theme('nodereference_formatter_default', $element);
}
$referenced_node = _politicas_proyectos_load_politica($nid);
if ($referenced_node) {
$referenced_node->referencing_node = $node;
$referenced_node->referencing_field = $field;
$output = check_plain($referenced_node->body);
}
}
return $output;
}
/**
* Theme function for 'default' text field formatter.
*/
function theme_politicas_proyectos_formatter_metaspcc($element) {
foreach (element_children($element) as $key) {
if (isset($element[$key]['#item']['value'])) {
$selection[] = $element[$key]['#item']['value'];
}
}
$items = array();
foreach($selection as $value){
$term = taxonomy_get_term($value);
if ($term) {
$valores = term_fields_get_fields_values($term);
$items[] = check_plain($valores['plan_carabobo_meta_value']);
}
}
return theme('item_list', $items);
}
/**
* Theme function for HS Content Taxonomy formatters.
*
*/
function theme_politicas_proyectoso_formatter_generic($element) {
list($formatter, $level) = explode('_', $element['#formatter']);
$output = theme('politicas_proyectos_formatter_pndes_' . $level, $element, FALSE, TRUE);
return $output;
}
/**
* Theme function for HS Content Taxonomy formatters.
*
*/
function theme_politicas_proyectos_formatter_generic($element, $html = TRUE, $unique = FALSE) {
$output = '';
if (module_exists('hierarchical_select')) {
// Extract required field information.
// $element contains only field name; so we use cck function to get more info.
$field = content_fields($element['#field_name'], $element['#type_name']);
$field_name = $field['field_name'];
$vid = $field['vid'];
$tid = (empty($field['tid'])) ? 0 : $field['tid'];
$depth = (empty($field['depth'])) ? 0 : $field['depth'];
// Get the config for this field.
require_once(drupal_get_path('module', 'hierarchical_select') .'/includes/common.inc');
$config_id = "content-taxonomy-$field_name";
$config = hierarchical_select_common_config_get($config_id);
$config += array(
'module' => 'hs_content_taxonomy_description',
'params' => array(
'vid' => $vid,
'tid' => $tid,
'depth' => $depth,
),
);
$selection = array();
// Cycle through elements.
foreach (element_children($element) as $key) {
if (isset($element[$key]['#item']['value'])) {
$selection[] = $element[$key]['#item']['value'];
}
}
// It is said that formatter theme function is called even if field is empty.
if (empty($selection)) {
return $output;
}
// Generate a dropbox out of the selection. This will automatically
// calculate all lineages for us.
$dropbox = _hierarchical_select_dropbox_generate($config, $selection);
// Actual formatting.
// In 6.x formatter is fully themable
// We theme each lineage using additional theme function
$num_items = count($dropbox->lineages);
$flip = array('even' => 'odd', 'odd' => 'even');
$class = 'even';
$terms = array();
list($formatter, $level) = explode('_', $element['#formatter']);
$sufix = $html? '' : '';
foreach ($dropbox->lineages as $i => $lineage) {
$term = isset($lineage[$level]['value']) ? taxonomy_get_term($lineage[$level]['value']) : 0;
if ($term && $term->tid && !isset($terms[$term->tid])) {
$terms[$term->tid] .= $formatter == 'pndes' || $formatter == 'pndeso'? $term->name : $term->name . HS_CONTENT_TAXONOMY_DESCRIPTION_SEP . $term->description;
}
}
if ($unique) {
//extract first element
$key = key($terms);
$new_array = array();
$new_array[$key] = $terms[$key];
$terms = $new_array;
}
$output = implode(' | ',$terms);
// Add the CSS.
//drupal_add_css(drupal_get_path('module', 'hierarchical_select') .'/hierarchical_select.css');
}
return $output;
}
/**
* Implementation of _politicas_proyectos_load_politica().
* Load node
*/
function _politicas_proyectos_load_politica($nid){
$node = 0;
if ($nid) {
$sql = 'SELECT n.nid, nr.body FROM {node} AS n INNER JOIN {node_revisions} AS nr ON nr.nid = n.nid AND nr.vid = n.vid WHERE n.nid = %d';
$result = db_query($sql, $nid);
$node = db_fetch_object($result);
}
return $node;
}
//----------------------------------------------------------------------------
// CCK hooks.
/**
* Implementation of hook_widget_info().
*/
function politicas_proyectos_widget_info() {
return array(
'politicas_direccionales_select' => array(
'label' => 'Enlace a Politicas Direccionales',
'field types' => array('nodereference'),
'multiple values' => CONTENT_HANDLE_MODULE,
'callbacks' => array(
'default value' => CONTENT_CALLBACK_DEFAULT,
),
),
);
}
/**
* Implementation of hook_field_formatter_info().
*/
function politicas_proyectos_field_formatter_info() {
return array(
'body' => array(
'label' => t('Body'),
'field types' => array('nodereference'),
'multiple values' => CONTENT_HANDLE_CORE,
),
'pndes_0' => array(
'label' => t('Nivel 0'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndes_1' => array(
'label' => t('Nivel 1'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndes_2' => array(
'label' => t('Nivel 2'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndes_3' => array(
'label' => t('Nivel 3'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndeso_0' => array(
'label' => t('Nivel 0 (ONAPRE)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndeso_1' => array(
'label' => t('Nivel 1 (ONAPRE)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndeso_2' => array(
'label' => t('Nivel 2 (ONAPRE)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndeso_3' => array(
'label' => t('Nivel 3 (ONAPRE)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndesc_0' => array(
'label' => t('Nivel 0 (Con Descripción)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndesc_1' => array(
'label' => t('Nivel 1 (Con Descripción)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndesc_2' => array(
'label' => t('Nivel 2 (Con Descripción)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'pndesc_3' => array(
'label' => t('Nivel 3 (Con Descripción)'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
'metaspcc' => array(
'label' => t('Metas del Plan Campaña de Carabobo'),
'field types' => array('content_taxonomy'),
'multiple values' => CONTENT_HANDLE_MODULE,
),
);
}
/**
* Implementation of hook_widget_settings().
*/
function politicas_proyectos_widget_settings($op, $widget) {
switch ($op) {
case 'form':
$form = array();
$situacion_actual = isset($widget['situacion_actual']) ? $widget['situacion_actual'] : FALSE;
if ($widget['type'] == 'politicas_direccionales_select') {
$form['situacion_actual'] = array(
'#type' => 'checkbox',
'#title' => t('Permitir solo entes que tienen S.A:'),
'#default_value' => $situacion_actual,
);
}
else {
$form['situacion_actual'] = array('#type' => 'hidden', '#value' => $match);
}
return $form;
case 'save':
return array('situacion_actual');
}
}
/**
* Implementation of hook_widget().
*
* Attach a single form element to the form. It will be built out and
* validated in the callback(s) listed in hook_elements. We build it
* out in the callbacks rather than here in hook_widget so it can be
* plugged into any module that can provide it with valid
* $field information.
*
* Content module will set the weight, field name and delta values
* for each form element. This is a change from earlier CCK versions
* where the widget managed its own multiple values.
*
* If there are multiple values for this field, the content module will
* call this function as many times as needed.
*
* @param $form
* the entire form array, $form['#node'] holds node information
* @param $form_state
* the form_state, $form_state['values'][$field['field_name']]
* holds the field's form values.
* @param $field
* the field array
* @param $items
* array of default values for this field
* @param $delta
* the order of this item in the array of subelements (0, 1, 2, etc)
*
* @return
* the form item for a single element for this field
*/
function politicas_proyectos_widget(&$form, &$form_state, $field, $items, $delta = 0) {
switch ($field['widget']['type']) {
case 'politicas_direccionales_select':
$element = array(
'#type' => 'politicas_direccionales_select',
'#default_value' => $items,
);
break;
}
return $element;
}
/**
* Implementation of FAPI hook_elements().
*
* Any FAPI callbacks needed for individual widgets can be declared here,
* and the element will be passed to those callbacks for processing.
*
* Drupal will automatically theme the element using a theme with
* the same name as the hook_elements key.
*
* Autocomplete_path is not used by text_widget but other widgets can use it
* (see nodereference and userreference).
*/
function politicas_proyectos_elements() {
return array(
'politicas_direccionales_select' => array(
'#input' => TRUE,
'#columns' => array('uid'), '#delta' => 0,
'#process' => array('politicas_direccionales_select_process'),
),
);
}
/**
* FAPI theme for an individual elements.
*
* The textfield or select is already rendered by the
* textfield or select themes and the html output
* lives in $element['#children']. Override this theme to
* make custom changes to the output.
*
* $element['#field_name'] contains the field name
* $element['#delta] is the position of this element in the group
*/
function theme_politicas_direccionales_select($element) {
return $element['#children'];
}
/**
* Process an individual element.
*
* Build the form element. When creating a form using FAPI #process,
* note that $element['#value'] is already set.
*
* The $fields array is in $form['#field_info'][$element['#field_name']].
*/
function politicas_direccionales_select_process($element, $edit, $form_state, $form) {
global $user;
$field_name = $element['#field_name'];
$field = $form['#field_info'][$field_name];
$field_key = $element['#columns'][0];
$default = isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : $form['#politica'];
$options = array();
if (!isset($form['#politicas']['politicas']) && count($form['#politicas']['politicas'])) {
$sa = isset($form['#field_info'][$element['#field_name']]['widget']['situacion_actual']) ? $form['#field_info'][$element['#field_name']]['widget']['situacion_actual'] : 0;
// The nodereference_select widget doesn't need to create its own
// element, it can wrap around the optionwidgets_select element.
// This will create a new, nested instance of the field.
// Add a validation step where the value can be unwrapped.
$ente_nid = isset($form['#ente_planificador']) && isset($form['#ente_planificador']->nid) ? $form['#ente_planificador']->nid : 0;
if (!$ente_nid) {
$ente = usuario_tiene_ente($user->uid);
$ente_nid = $ente->nid;
}
$field_key = $element['#columns'][0];
$politicas = _politicas_proyectos_references($ente_nid, $sa);
$options = $politicas['politicas'];
}
else {
$options = $form['#politicas']['politicas'];
}
$element[$field_key] = array(
'#type' => 'select',
'#title' => $element['#title'],
'#description' => $element['#description'],
'#required' => isset($element['#required']) ? $element['#required'] : $field['required'],
'#multiple' => isset($element['#multiple']) ? $element['#multiple'] : $field['multiple'],
'#options' => $options,
'#default_value' => $default,
'#entes' => $options['entes'],
);
if (isset($form['#politica'])) {
$display = $form['#politica'] && count($form['#all_descriptores'])? _politicas_proyectos_display_politicas($form['#all_descriptores'], $form['#formas_solucion']) : t('No ha seleccionado una politica');
if (!is_array($form['#politicas']['politicas']) || !count($form['#politicas']['politicas'])){
$element[$field_key]['#prefix'] = '' . t('El ente planificador aún no posee Políticas Direccionales.') . '
';
}
$element[$field_key]['#suffix'] = '' . $display . '
';
$element[$field_key]['#ahah'] = array(
'event' => 'change',
'path' => 'politicas_proyectos_get_politicas_js',
'wrapper' => 'proyecto-operativo-' . $field_key,
'method' => 'replace',
'progress' => array('type' => 'bar', 'message' => t('Please wait...')),
);
}
if (empty($element[$field_key]['#element_validate'])) {
$element[$field_key]['#element_validate'] = array();
}
array_unshift($element[$field_key]['#element_validate'], 'nodereference_optionwidgets_validate');
return $element;
}
/**
* Implementation of _politicas_direccionales_references().
*/
function _politicas_proyectos_references($ente_id = 0, $sa = 0) {
static $results = array();
if (!$results[$ente_id]) {
$fathers = _ente_planificador_hierarchical_get_desc($ente_id, 1);
if ($sa) {
$planns = _situacion_actual_preliminar_get_planns();
$plan = $planns['situacion_actual'];
}
$inputs = array();
$implode_sql = array();
$max_level = 0;
foreach($fathers as $ente){
if ($max_level < $ente['level']) {
$max_level = $ente['level'];
}
if (!$sa) {
$implode_sql[] = '%d';
$inputs[] = $ente['nid'];
}
elseif (isset($plan['ente_type'][$ente['level']])) {
$implode_sql[] = '%d';
$inputs[] = $ente['nid'];
}
}
//si el propio ente tiene politicas
if (isset($plan['ente_type'][$max_level + 1])) {
$implode_sql[] = '%d';
$inputs[] = $ente_id;
}
$sql = 'SELECT n.nid, nr.body, pd.field_politicas_ente_nid FROM {content_type_politicas_direccionales} AS pd INNER JOIN {node} AS n ON n.nid = pd.nid AND n.vid = pd.vid INNER JOIN {node_revisions} AS nr ON n.nid = nr.nid AND n.vid = nr.vid WHERE';
if (count($implode_sql)) {
$sql .= ' pd.field_politicas_ente_nid IN (' . implode (', ', $implode_sql) . ') AND';
}
$sql .= ' field_politicas_direcc_year_value = %d AND field_politicas_seleccionada_value = %d';
$inputs[] = variable_get('situacional_actual_preliminar_anho_creacion', 0);
$inputs[] = 1;
$result = db_query($sql, $inputs);
$results[$field['#ente_id']] = array();
while($politica = db_fetch_object($result)) {
$results[$ente_id]['politicas'][$politica->nid] = $politica->body;
$results[$ente_id]['entes'][$politica->field_politicas_ente_nid] = $politica->field_politicas_ente_nid;
}
}
return $results[$ente_id];
}