wid)) { db_query("INSERT INTO {workflow_type_map} (wid, type) VALUES(%d, '%s')", $wid, 'proyectos_operativos'); } else { if ($wid != $result->wid) { db_query("update {workflow_type_map} set wid = %d WHERE type = '%s'", $wid, 'proyectos_operativos'); } } //Nombre del Flujo de trabajo, estados y transición de Acciones Centralizadas $name_wf_ac = "Acciones_Centralizadas"; $states_wf_ac = array( 'PreIngresado', 'Ingresado', 'Enviado_a_supervisor_del_primer_nivel', 'Enviado_a_supervisor_del_segundo_nivel', 'Enviado_a_supervisor_del_tercer_nivel', 'Enviado_a_supervisor_del_cuarto_nivel', 'Devuelto_a_supervisor_del_primer_nivel', 'Devuelto_a_supervisor_del_segundo_nivel', 'Devuelto_a_supervisor_del_tercer_nivel', 'Devuelto_a_supervisor_del_cuarto_nivel', 'Enviado_a_enlace_revisor_del_primer_nivel', 'Enviado_a_enlace_revisor_del_segundo_nivel', 'Enviado_a_enlace_revisor_del_tercer_nivel', 'Enviado_a_enlace_revisor_del_cuarto_nivel', 'Devuelto_a_enlace_revisor_del_primer_nivel', 'Devuelto_a_enlace_revisor_del_segundo_nivel', 'Devuelto_a_enlace_revisor_del_tercer_nivel', 'Devuelto_a_enlace_revisor_del_cuarto_nivel', 'Enviado_a_enlace_formulador_del_primer_nivel', 'Enviado_a_enlace_formulador_del_segundo_nivel', 'Enviado_a_enlace_formulador_del_tercer_nivel', 'Enviado_a_enlace_formulador_del_cuarto_nivel', 'Devuelto_a_enlace_formulador_del_primer_nivel', 'Devuelto_a_enlace_formulador_del_segundo_nivel', 'Devuelto_a_enlace_formulador_del_tercer_nivel', 'Devuelto_a_enlace_formulador_del_cuarto_nivel', 'Enviado_a_control', 'Devuelto_a_control', 'Aprobado', 'Anulado' ); //Definición de las reglas de trasnsición Acciones Centralizadas $reglas_transicion_ac[t('(creation)')]['PreIngresado']['author'] = 1; $reglas_transicion_ac[t('(creation)')]['PreIngresado']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Ingresado']['Anulado']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Ingresado']['Enviado_a_supervisor_del_primer_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Ingresado']['Enviado_a_supervisor_del_segundo_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Ingresado']['Enviado_a_supervisor_del_tercer_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Ingresado']['Enviado_a_supervisor_del_cuarto_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Enviado_a_enlace_formulador_del_primer_nivel']['Enviado_a_supervisor_del_primer_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Enviado_a_enlace_formulador_del_segundo_nivel']['Enviado_a_supervisor_del_segundo_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Enviado_a_enlace_formulador_del_tercer_nivel']['Enviado_a_supervisor_del_tercer_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Enviado_a_enlace_formulador_del_cuarto_nivel']['Enviado_a_supervisor_del_cuarto_nivel']['Enlace_Formulador'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_primer_nivel']['Enviado_a_supervisor_del_primer_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_tercer_nivel']['Enviado_a_supervisor_del_tercer_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_segundo_nivel']['Enviado_a_supervisor_del_segundo_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_primer_nivel']['Devuelto_a_supervisor_del_segundo_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_segundo_nivel']['Devuelto_a_supervisor_del_tercer_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_enlace_revisor_del_tercer_nivel']['Devuelto_a_supervisor_del_cuarto_nivel']['Enlace_Revisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_primer_nivel']['Enviado_a_control']['Control'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_segundo_nivel']['Enviado_a_enlace_revisor_del_primer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Enviado_a_enlace_revisor_del_segundo_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_cuarto_nivel']['Enviado_a_enlace_revisor_del_tercer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_primer_nivel']['Enviado_a_control']['Control'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_segundo_nivel']['Enviado_a_enlace_revisor_del_primer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Enviado_a_enlace_revisor_del_segundo_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_cuarto_nivel']['Devuelto_a_enlace_formulador_del_cuarto_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Devuelto_a_enlace_formulador_del_tercer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Devuelto_a_enlace_revisor_del_tercer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Devuelto_a_enlace_revisor_del_segundo_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_tercer_nivel']['Devuelto_a_enlace_formulador_del_segundo_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_primer_nivel']['Devuelto_a_enlace_revisor_del_primer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_supervisor_del_primer_nivel']['Devuelto_a_enlace_formulador_del_primer_nivel']['Supervisor'] = 1; $reglas_transicion_ac['Enviado_a_control']['Devuelto_a_enlace']['Control'] = 1; //Hacer envio de mensaje a supervisor (notificación) $reglas_transicion_ac['Aprobado']['Devuelto_a_control']['Administrador'] = 1; //Solo Administrador puede des-aprobar un proyecto operativo $reglas_transicion_ac['Anulado']['PreIngresado']['Administrador'] = 1; $reglas_transicion_ac['Enviado_a_control']['Anulado']['Control'] = 1; $reglas_transicion_ac['Enviado_a_control']['Aprobado']['Control'] = 1; $reglas_transicion_ac['Enviado_a_control']['Devuelto_a_supervisor_del_primer_nivel']['Control'] = 1; $tab_roles_ac = array( 'Administrador', 'Enlace_Formulador', 'Enlace_Revisor', 'Supervisor', 'Control' ); ente_planificador_sipp_mcti_create_roles($tab_roles_ac); ente_planificador_sipp_mcti_create_permisos($tab_roles_ac); //Creando el Workflow de Acciones Centralizadas del proyecto SIPP $wid_ac = create_workflow_sipp_mcti($name_wf_ac, $states_wf_ac); //Generando las transiciones del Workflow workflow_transition_for_sipp_mcti($wid_ac,$reglas_transicion_ac); update_tab_roles_workflow_sipp_mcti($wid_ac, $tab_roles_ac); //asignando el tipo de contenido al flujo de trabajo $wid = get_wid_workflow_sipp_mcti($name_wf_ac); $result = db_query("SELECT wid FROM {workflow_type_map} WHERE type = '%s'", 'accion_centralizada'); $result = db_fetch_object($result); if(empty($result->wid)) { db_query("INSERT INTO {workflow_type_map} (wid, type) VALUES(%d, '%s')", $wid, 'accion_centralizada'); } else { if ($wid != $result->wid) { db_query("update {workflow_type_map} set wid = %d WHERE type = '%s'", $wid, 'accion_centralizada'); } } //notificando la instalacion del modulo content_notify('install', 'ente_planificador_sipp_mcti'); } /* * Implementacion del hook_uninstall() */ function ente_planificador_sipp_mcti_uninstall() { db_query("DELETE FROM {variable} WHERE name LIKE '%s'", 'ente_planificador_sipp_%'); content_notify('uninstall', 'ente_planificador_sipp_mcti'); //Eliminando permisos y roles del SIPP $roles = array( 'Administrador', 'Enlace_Formulador', 'Enlace_Revisor', 'Supervisor', 'Control' ); //Eliminado Workflow del SIPP $workflow_sipp = array("Proyectos_Operativos", "Acciones_Centralizadas"); foreach ($workflow_sipp as $name_wf){ $wid_workflow = get_wid_workflow_sipp_mcti($name_wf); if (!is_null($wid_workflow)){ workflow_deletewf($wid_workflow); drupal_set_message(t('Se elimino el Workflow @wf con workflow id(wid): @wid', array('@wf' => $name_wf, '@wid' => $wid_workflow ),'status')); } }; } /** * crea las variables y guarda los estados del workflow */ function create_workflow_sipp_mcti($name_wf, $states_wf) { $wid = workflow_create($name_wf); foreach ($states_wf as $i => $value) { $state_wf = array('wid' => $wid, 'state' => $value, 'weight' => $i+1); $sid = workflow_state_save($state_wf); } variable_set('ente_planificador_sipp_wf_' . $name_wf, $wid); return $wid; } /* * Crea las transiciones del workflow */ function workflow_transition_for_sipp_mcti($wid,$reglas_transicion) { $transition = array(); $roles = workflow_get_roles(); $states = workflow_get_states($wid); foreach ($states as $state_id => $name) { foreach ($states as $nested_state_id => $nested_name) { if ($nested_name == t('(creation)')) { // Don't allow transition TO (creation). continue; } if ($nested_state_id != $state_id) { // Need to generate checkboxes for transition from $state to $nested_state. $from = $state_id; $to = $nested_state_id; foreach ($roles as $rid => $role_name) { if ($reglas_transicion[$name][$nested_name][$role_name] == 1) { $transition[$from][$to][$rid] = TRUE; } else $transition[$from][$to][$rid] = 0; } } } } workflow_update_transitions($transition); } /** * Actualiza los roles de del workflow */ function update_tab_roles_workflow_sipp_mcti($wid, $tab_roles_wf) { $tab_roles = array(); $roles = workflow_get_roles(); foreach ($tab_roles_wf as $id_role_wf => $name_role_wf) { foreach ($roles as $rid => $role_name){ if ($name_role_wf == $role_name){ $tab_roles[$id_role_wf] = $rid; } } } db_query("UPDATE {workflows} SET tab_roles = '%s' WHERE wid = %d", implode(',', $tab_roles), $wid); } /** * obtien el wid de workflows */ function get_wid_workflow_sipp_mcti($name_wf) { $result = db_query("SELECT wid FROM {workflows} WHERE name = '%s'", $name_wf); $wid = null; if ($obj_wid = db_fetch_object($result)) { $wid = $obj_wid->wid; } return $wid; } /* * Crea los roles */ function ente_planificador_sipp_mcti_create_roles($roles) { foreach ($roles as $rol) { $role = ente_planificador_sipp_mcti_get_role($rol); if (!$role) { db_query("INSERT INTO {role} (name) VALUES('%s')", $rol); } } } /* * Crea los permisos por rol */ function ente_planificador_sipp_mcti_create_permisos($roles) { $permissions_planificador = array( 0 => 'edit own planificador', 1 => 'ver planificador', 2 => 'access user profiles', 3 => 'change own username', ); $permissions_control = array( 0 => 'admin planificador', 1 => 'edit own planificador', 2 => 'ver planificador', 3 => 'access user profiles', 4 => 'change own username', ); foreach ($roles as $rol) { $role = ente_planificador_sipp_mcti_get_role($rol); if ($role) { $permissions = $permissions_planificador; if ($rol == 'Control') { $permissions = $permissions_control; } // Check to see if there are existing permissions db_query("INSERT INTO {permission} (rid, perm, tid) VALUES (%d, '%s', 0)", $role->rid, implode(', ', $permissions), 0); } } } /* * Elimina un rol y sus permisos * function ente_planificador_sipp_mcti_delete_role($role_name) { // Look up the role to see if it exists already $role = ente_planificador_sipp_mcti_get_role($role_name); if ($role) { db_query('DELETE FROM {role} WHERE rid = %d', $role->rid); db_query('DELETE FROM {permission} WHERE rid = %d', $role->rid); // Update the users who have this role set: db_query('DELETE FROM {users_roles} WHERE rid = %d', $role->rid); return $role; } return FALSE; }*/ /* * Consulta un rol */ function ente_planificador_sipp_mcti_get_role($role_name) { $role = db_fetch_object(db_query("SELECT * FROM {role} r WHERE r.name = '%s'", $role_name)); return $role; }