'fieldset',
'#title' => t('Coordinador de Ambito y Supervisor de Organismo Publicos'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
//rol enlace nivel 1
$form['coordinador_ambito_user']['ActorPlanificadorcoordinador1_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Enlace Revisor de Ambito'),
'#default_value' => variable_get('ActorPlanificadorcoordinador1_text', t('Ente tipo 1 (Enlace Revisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser coordinador de ambito'),
'#required' => TRUE,
);
$form['coordinador_ambito_user']['ActorPlanificadorcoordinador1'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Enlace Revisor de Ambito'),
'#default_value' => variable_get('ActorPlanificadorcoordinador1', 0),
'#options' => $roles,
);
//rol formulador nivel 1
$form['coordinador_ambito_user']['ActorPlanificadorcoordinador2_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Supervisor de Ambito'),
'#default_value' => variable_get('ActorPlanificadorcoordinador2_text', t('Ente tipo 1 (Supervisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser coordinador de ambito'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorcoordinador2'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Supervisor de Ambito'),
'#default_value' => variable_get('ActorPlanificadorcoordinador2', 0),
'#options' => $roles,
);
//rol enlace nivel 2
$form['coordinador_ambito_user']['ActorPlanificadorevisor2_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Enlace Revisor de segundo nivel'),
'#default_value' => variable_get('ActorPlanificadorevisor2_text', t('Ente tipo 2 (Enlace Revisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser revisor del segundo nivel'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorevisor2'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Enlace Revisor del nivel 2'),
'#default_value' => variable_get('ActorPlanificadorevisor2', 0),
'#options' => $roles,
);
//rol supervisor segundo nivel
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor2_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Supervisor de Organismos Publicos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor2_text', t('Ente tipo 2 (Supervisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser Supervisor de los Organismo Públicos.'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor2'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Supervisor de Organismo Públicos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor2', 0),
'#options' => $roles,
);
//rol supervisor tercer nivel
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor3_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Supervisor de los Entes adscritos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor3_text', t('Ente tipo 3 (Supervisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser Supervisor de los Entes Adscritos.'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor3'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Supervisor de los Entes Adscritos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor3', 0),
'#options' => $roles,
);
//revisor Tercer nivel
$form['coordinador_ambito_user']['ActorPlanificadorevisor3'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Enlace Revisor del nivel 3'),
'#default_value' => variable_get('ActorPlanificadorevisor3', 0),
'#options' => $roles,
);
//rol supervisor cuarto nivel
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor4_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Supervisor de los Entes adscritos a Otros Entes'),
'#default_value' => variable_get('ActorPlanificadorsupervisor4_text', t('Ente tipo 4 (Supervisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser Supervisor de los Sub-Entes Adscritos.'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor4'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Supervisor de los Sub-Entes Adscritos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor4', 0),
'#options' => $roles,
);
//revisor segundo nivel
$form['coordinador_ambito_user']['ActorPlanificadorevisor4'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Enlace Revisor del nivel 4'),
'#default_value' => variable_get('ActorPlanificadorevisor4', 0),
'#options' => $roles,
);
//rol supervisor quinto nivel
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor5_text'] = array(
'#type' => 'textfield',
'#title' => t('Nombre del tipo de Rol para el Actor Supervisor de los Entes adscritos a Otros Entes'),
'#default_value' => variable_get('ActorPlanificadorsupervisor5_text', t('Ente tipo 5 (Supervisor)')),
'#size' => 60,
'#maxlength' => 244,
'#description' => t('Introduzca el nombre del tipo de rol que ha de tener el usuario para ser Supervisor de los Sub-Entes Adscritos.'),
'#required' => TRUE,
'#prefix' => '
',
);
$form['coordinador_ambito_user']['ActorPlanificadorsupervisor5'] = array(
'#type' => 'select',
'#title' => t('Rol para el Actor Supervisor de los Sub-Entes Adscritos'),
'#default_value' => variable_get('ActorPlanificadorsupervisor5', 0),
'#options' => $roles,
);
$form['buttons']['#weight'] = 10;
}
if (($form_id == 'user_register') || ($form_id == 'user_profile_form' && arg(2) != 'chgpwd' && user_access('administer users'))) {
global $user;
$ente_planificador = FALSE;
//get ente planificador
if (arg(4) && is_numeric(arg(4))) {
$ente_planificador = node_load(arg(4));
}
if (isset($form['_account']['#value']->entes) && count($form['_account']['#value']->entes)) {
$ente_planificador = node_load($form['_account']['#value']->entes[0]['nid']);
}
//ambito
$tid = variable_get('ente_planificador_sector_Ambitos', 0);
$terms = taxonomy_get_tree($tid);
foreach ($terms as $term) {
if ($term->depth == 0) { //si el termino es padre
$ambito[$term->tid] = $term->name;
}
if ($term->depth == 1) {
$organismo[$term->tid] = $term->name;
}
if ($term->depth == 2) {
$ente_adscrito[$term->tid] = $term->name;
}
if ($term->depth == 3) {
$sub_ente[$term->tid] = $term->name;
}
}
$roles = user_roles();
if ($ente_planificador && ($ente_planificador->tipo == 1)) { // ente nivel 1
$coordinador1 = variable_get('ActorPlanificadorcoordinador1', 0);
$coordinador2 = variable_get('ActorPlanificadorcoordinador2', 0);
$count_coordinador1 = ente_planificador_sipp_mcti_count_user_by_role($coordinador1, $ente_planificador->nid);
$count_coordinador2 = ente_planificador_sipp_mcti_count_user_by_role($coordinador2, $ente_planificador->nid);
$text[$coordinador1] = variable_get('ActorPlanificadorcoordinador1_text','');
$text[$coordinador2] = variable_get('ActorPlanificadorcoordinador2_text','');
if ($coordinador1 && isset($roles[$coordinador1])) {
$form['account']['roles']['#options'][$coordinador1] = $text[$coordinador1];
}
if ($coordinador2 && isset($roles[$coordinador2])) {
$form['account']['roles']['#options'][$coordinador2] = $text[$coordinador2];
}
//solo se permite enlaces formuladores por el numero de ambitos existentes.
if ($count_coordinador1 > count($ambito)) {
unset($form['account']['roles']['#options'][$coordinador1]);
}
//solo se permite enlaces revisores por el numero de ambitos existentes.
if ($count_coordinador2 > count($ambito)) {
unset($form['account']['roles']['#options'][$coordinador2]);
}
$ambito[0] = t("Seleccione");
$ambito_user = db_result(db_query("SELECT ambito FROM {ente_user_planificador} WHERE usuario = %d", $form['#uid']));
$form['account']['roles']['#prefix'] = '';
$form['account']['roles']['#suffix'] = '
';
$ambito[0] = t("Seleccione");
$form['usuario_planificacion']['ambito_user'] = array(
'#title' => t('Ambito del Usuario'),
'#type' =>'select',
'#default_value' => $ambito_user,
'#options' => $ambito,
'#prefix' => '',
'#suffix' => '
',
'#weight' => 3,
);
}
if ($ente_planificador && ($ente_planificador->tipo == 2)) {
//solo se permite un supervisor por cada organismo
$supervisor2 = variable_get('ActorPlanificadorsupervisor2', 0);
$text[$supervisor2] = variable_get('ActorPlanificadorsupervisor2_text','');
$count_supervisor2 = ente_planificador_sipp_mcti_count_user_by_role($supervisor2, $ente_planificador->nid);
if ($supervisor2 && isset($roles[$supervisor2])) {
$form['account']['roles']['#options'][$supervisor2] = $text[$supervisor2];
}
if ($count_supervisor2 > count($organismo)) {
unset($form['account']['roles']['#options'][$supervisor2]);
}
}
if ($ente_planificador && ($ente_planificador->tipo == 3)) {
//solo se permite un supervisor por cada ente adscrito a un organismo
$supervisor3 = variable_get('ActorPlanificadorsupervisor3', 0);
$text[$supervisor3] = variable_get('ActorPlanificadorsupervisor3_text','');
$count_supervisor3 = ente_planificador_sipp_mcti_count_user_by_role($supervisor3, $ente_planificador->nid);
if ($supervisor3 && isset($roles[$supervisor3])) {
$form['account']['roles']['#options'][$supervisor3] = $text[$supervisor3];
}
if ($count_supervisor3 > count($ente_adscrito)) {
unset($form['account']['roles']['#options'][$supervisor3]);
}
}
if ($ente_planificador && ($ente_planificador->tipo == 4)) {
//solo se permite un supervisor por cada sub-ente adscrito
$supervisor4 = variable_get('ActorPlanificadorsupervisor4', 0);
$text[$supervisor4] = variable_get('ActorPlanificadorsupervisor4_text','');
$count_supervisor4 = ente_planificador_sipp_mcti_count_user_by_role($supervisor4, $ente_planificador->nid);
if ($supervisor4 && isset($roles[$supervisor4])) {
$form['account']['roles']['#options'][$supervisor4] = $text[$supervisor4];
}
if ($count_supervisor4 > count($sub_ente)) {
unset($form['account']['roles']['#options'][$supervisor4]);
}
}
$path_module = drupal_get_path('module', 'ente_planificador_sipp_mcti');
drupal_add_js($path_module . '/js/ente_planificador_sipp_mcti.js');
$usuarios['roles_user'] = array($coordinador1, $coordinador2);
drupal_add_js($usuarios, 'setting');
}
}
/**
* Obtiene el numero de usuarios que poseen un determinado rol
*/
function ente_planificador_sipp_mcti_count_user_by_role($rol, $ente) {
$result = 0;
if ($rol && $ente){
$result = db_result(db_query("SELECT count(n.usuario) FROM {users_roles} as u INNER JOIN {ente_user_planificador} as n ON n.usuario = u.uid INNER JOIN {ente_planificador} as e ON e.nid = n.nid where u.rid = %d AND e.nid = %d", $rol, $ente));
}
return $result;
}
/*
* hook_user
* Verificando que se inserte el Rol seleccionado en el Registro del usuario
* Si el Rol es Enlace se elimina el Rol Supervisor(Micro) que viene por
* defecto del modulo ente_planificador en la función: ente_planificador_user
*/
function ente_planificador_sipp_mcti_user($op, &$edit, &$user, $category = NULL) {
switch ($op) {
case 'update':
if (isset($edit['ambito_user'])) {
db_query("UPDATE {ente_user_planificador} SET ambito = %d WHERE usuario = %d", $edit['ambito_user'], $user->uid);
}
break;
case 'insert':
if (isset($edit['ambito_user'])) {
db_query("UPDATE {ente_user_planificador} SET ambito = %d WHERE usuario = %d", $edit['ambito_user'], $user->uid);
}
if(array_key_exists('entes', $edit) && $edit['entes']) {
$roles = user_roles();
$ente_planificador = node_load($edit['entes']);
$rolenlace = variable_get('ActorPlanificadorEnlace', 2);
$rolsupervisor = variable_get('ActorPlanificadorMicro', 2);
//Si se han creado los roles
if(isset($roles[$rolenlace]) && isset($roles[$rolsupervisor])){
if ($ente_planificador->tipo) {
if($ente_planificador->tipo && $ente_planificador->tipo == 2) {
$edit['roles'][2] = $roles[2];
// Si se selecciona el rol Enlace
if(isset($edit['roles'][$rolenlace])){
//Elimina el rol supervisor
unset($edit['roles'][$rolsupervisor]);
}
/*
if(isset($edit['roles'][$rolsupervisor])){
unset($edit['roles'][$rolenlace]);
*/
}
}
}
}
break;
}
}