Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function support3s_behavior_update($node,$practiceFather=NULL) {
- global $user;
- $time_u = array();
- foreach ($node->support3s_behavior_js as $key => $value){
- // Si no este chequeado remover la hora
- if ($value['behavior']['remove'] == 0) {
- // Elimina el id del hábito
- unset($value['behavior']);
- // si no esta seteada la hora de termino se eliminan del array
- if (!$node->add_end_time ) {
- unset($value['end_hours']);
- unset($value['end_minutes']);
- }
- $time_u[] = $value;
- }
- }
- $time_new = serialize($time_u);
- $week_new = serialize($node->days);
- $oldBehavior = db_fetch_object(db_query("SELECT time, week, b_name, `repeat` FROM {behavior} WHERE id = %d", $node->nid));
- $time_old = $oldBehavior->time;
- $week_old = $oldBehavior->week;
- $repeat_old = $oldBehavior->repeat;
- $oldNameBehavior = $oldBehavior->b_name;
- watchdog('updating a behavior', '<pre>$node: ' . print_r($node, true) . '</pre>');
- //Query para obtener el nombre del purpose con $node->purpose guardar en p_name
- $queryPurpose = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = %d", $node->purpose_hidden));
- $p_name = $queryPurpose->title;
- // Verifica si hay cambios sen la frecuencia de cumplimiento
- if ($time_new == $time_old && $week_new == $week_old && $node->repeat == $repeat_old) {
- watchdog('updte', '<pre>no hay cambio de frecuncia' . print_r('', true) . '</pre>');
- db_query("UPDATE {behavior} SET b_name = '%s', p_name = '%s', id_status = %d, time = '%s', week='%s', prev_accomp = %d, pid = %d WHERE id = %d", $node->title, $p_name, $node->status, serialize($time_u), serialize($node->days), $node->prev_accomp, $node->purpose_hidden, $node->nid);
- db_query("INSERT INTO {revisions} (id_behavior, time, date, week, action)
- VALUES (%d, '%s' , '%s', '%s','%s')", $node->nid,serialize($time_u), time(),serialize($node->days),'updated');
- //Actualiza también a los habitos de los miembros de equip,
- //si eres lider y editaste una práctica grupal
- if($p_name == 'Prácticas Grupales' && db_result(db_query("SELECT rid FROM {users_roles} WHERE uid=%d AND rid=%d", $node->uid,8))){
- // LLama a los hábitos de tus miembros
- watchdog('upd beh', '<pre>node->nid:' . print_r($node->nid, true) . '</pre>');
- $queryHabitosaCambiar = db_query("SELECT bid FROM {practicas_grupales} WHERE nid=%d", $node->nid);
- while ($result = db_fetch_object($queryHabitosaCambiar)) {
- $changedBehavior = node_load($result->bid);
- $changedBehavior->purpose_hidden = db_result(db_query("SELECT nid FROM {node} WHERE title='%s' AND uid=%d",'Prácticas Grupales' ,$changedBehavior->uid));
- $changedBehavior->support3s_behavior_js = $node->support3s_behavior_js;
- $changedBehavior->add_end_time = $node->add_end_time;
- $changedBehavior->days = $node->days;
- $changedBehavior->prev_accomp = 0;
- $changedBehavior->title = $node->title;
- node_save($changedBehavior);
- }
- }
- } else {
- // watchdog('updte', '<pre> hay cambio de frecuncia' . print_r('', true) . '</pre>');
- //Si existe cambio de frecuencia, por lo tanto crea un nuevo comportamiento, pero elimina al otro, creando un registro en revisions del cambio de freq.
- module_load_include('inc','support3s_behavior', 'inc/f_graph');
- db_query("UPDATE {behavior} SET id_status = %d WHERE id = %d", 0, $node->nid);
- $newBehavior = new stdClass();
- $newBehavior->type = 'support3s_behavior';
- $newBehavior->uid = $node->uid;
- $newBehavior->title = $node->title;
- $newBehavior->purpose = $node->purpose;
- $newBehavior->purpose_hidden = $node->purpose_hidden;
- $newBehavior->days = $node->days;
- $t=time();
- $newBehavior->prev_accomp = porcentaje_actual($node->nid,$t);
- $newBehavior->add_end_time = $node->add_end_time;
- $newBehavior->support3s_behavior_js = $node->support3s_behavior_js;
- $newBehavior->body = '';
- $newBehavior->updating = TRUE;
- $newBehavior->repeat = $node->repeat;
- //Crear ver prev si es k tiene versiones previas
- $ver_prev=db_result(db_query("SELECT ver_prev FROM {behavior} WHERE id= %d ", $node->nid));
- if($ver_prev!=''){
- $ver_prev=unserialize($ver_prev);
- $ver_prev[]=$node->nid;
- }else{
- $ver_pre=array();
- $ver_prev[]=$node->nid;
- }
- $newBehavior->ver_prev =serialize($ver_prev);
- // Save the node
- node_save($newBehavior);
- // watchdog('updte', '<pre>Creando' . print_r($newBehavior->nid, true) . '</pre>');
- //Averiguar el último cumplimiento del comportamiento cambiado de freq. para que el nuevo comportamiento comience ahi
- $ltime=db_result(db_query("SELECT date FROM {accomplishment} WHERE id_behavior= %d ORDER BY date DESC LIMIT 1", $node->nid));
- if($ltime==0 )
- $ltime=time();
- $ltiempo=getdate($ltime);
- $at=getdate();
- if($ltiempo['mon']!=$at['mon'] || $ltiempo['year']!=$at['year'])
- $ltime=mktime(0, 0, 0,$at['mon'], 1, $at['year']);
- //Dejar un registro en tabla revisions
- db_query("INSERT INTO {revisions} (id_behavior, time, date, week, action)
- VALUES (%d, '%s' , '%s', '%s','%s')", $newBehavior->nid,serialize($time_u), $ltime,serialize($node->days), 'freq_changed');
- //Avisarle a tabla revision que se eliminó un comportamiento debido a un cambio de freq
- db_query("INSERT INTO {revisions} (id_behavior,date, action)
- VALUES (%d,%d,'%s')", $node->nid, time() ,'Deleted-freq');
- // Si es el lider, y modifica una hábito de prácticas grupales, actualiza también esos comportamientos
- if($p_name == 'Prácticas Grupales' && db_result(db_query("SELECT rid FROM {users_roles} WHERE uid=%d AND rid=%d", $node->uid,8))){
- // watchdog('updte', '<pre>soy el lider' . print_r('', true) . '</pre>');
- //Llama a los hábitos de los miembros
- $queryHabitosaCambiar = db_query("SELECT bid FROM {practicas_grupales} WHERE nid=%d", $node->nid);
- while ($result = db_fetch_object($queryHabitosaCambiar)) {
- // watchdog('updte', '<pre>revisando comportamiento de equipo numero ' . print_r($result->bid, true) . '</pre>');
- //Carga el nodo
- //Agregarle los cambios
- $changedBehavior = node_load($result->bid);
- $changedBehavior->title = $node->title;
- $changedBehavior->days = $node->days;
- $changedBehavior->add_end_time = $node->add_end_time;
- $changedBehavior->support3s_behavior_js = $node->support3s_behavior_js;
- $changedBehavior->prev_accomp = 0;
- $changedBehavior->repeat = $node->repeat;
- $changedBehavior->purpose_hidden = db_result(db_query("SELECT nid FROM {node} WHERE title='%s' AND uid=%d",'Prácticas Grupales' ,$changedBehavior->uid));
- support3s_behavior_update($changedBehavior,$newBehavior->nid);
- }
- }
- // Tengo un problema, cuando creo guardo el nuevo hábito del lider, por la función insert, se crean nuevos hábitos para todos. EL problema es que cómo borro entonces a los comportamientos anteriores de los miembros?
- if($practiceFather){
- // Si soy una práctica grupal, debo actualizar la tabla practicas_grupales
- db_query("DELETE FROM {practicas_grupales} WHERE bid = %d", $node->nid);
- db_query("INSERT INTO {practicas_grupales} (nid, bid) VALUES (%d,%d)", $practiceFather,$newBehavior->nid);
- }
- // watchdog('updte', '<pre>Eliminando' . print_r($node->nid, true) . '</pre>');
- node_delete($node->nid);
- }
- //Si es una practica grupal... podría tener contextos relevantes,
- //Por lo que revisa si hubo un cambio de nombre para actualizar el contexto, borrar sus practicas proyectadas y generar nuevas
- if($p_name=='Prácticas Grupales' && ($node->title != $oldNameBehavior || $time_new != $time_old || $week_new == $week_old ) ){
- $queryContextos = db_query("SELECT ac.cid,ac.hid FROM {ability_context} ac, {node} n WHERE ac.hid = n.nid AND n.uid = %d AND ac.title='%s'", $node->uid,$oldNameBehavior);
- while ($result = db_fetch_object($queryContextos)) {
- db_query("UPDATE {ability_context} SET title = '%s' WHERE cid = %d", $node->title,$result->cid);
- //Borrar las practicas futuras que tenga para este contexto
- db_query("DELETE FROM {hability_practice} WHERE context='%s' AND hid=%d AND start>%d", $oldNameBehavior, $result->hid,time());
- //Agregar nuevas practicas para esta semana
- agregarOportunidadesPracticaGrupales($result->hid,$result->cid,$node->title);
- }
- }
- //Llamamos a los integrantes
- if($p_name=='Prácticas Grupales'){
- $queryPG = db_query("SELECT * FROM {practicas_grupales} WHERE nid=%d",$node->nid);
- $oldMiembros = array();
- $newMiembros = array();
- while($resultPG = db_fetch_object($queryPG)){
- $behaviorChild = node_load($resultPG->bid);
- $integrante = support3s_getProfile($behaviorChild->uid);
- if( $integrante!=support3s_getProfile($user->uid)){
- $oldMiembros[] = $integrante;
- }
- }
- foreach($node->integrantes as $integrante){
- if($integrante != 0 && $integrante!=support3s_getProfile($user->uid)){
- $newMiembros[] = $integrante;
- }
- }
- $quitados = array_diff($oldMiembros,$newMiembros);
- $agregados = array_diff($newMiembros,$oldMiembros);
- //watchdog('debug agregado','<pre>'.print_r($agregados,true).'</pre>');
- //watchdog('debug agregado','<pre>'.print_r($quitados,true).'</pre>');
- foreach($quitados as $q){
- $nodeProfile = node_load($q);
- $bid = db_result(db_query("SELECT pg.bid FROM {node} n,{practicas_grupales} pg WHERE n.uid=%d AND pg.bid=n.nid AND pg.nid=%d",$nodeProfile->uid,$node->nid));
- db_query("DELETE FROM {practicas_grupales} WHERE bid = %d", $bid);
- node_delete($bid);
- db_query("UPDATE {behavior} SET id_status = %d WHERE id = %d", 0, $bid);
- }
- foreach($agregados as $a){
- $nodeProfile= node_load($a);
- $newBehavior = new stdClass();
- $newBehavior->type = 'support3s_behavior';
- $newBehavior->uid = $nodeProfile->uid;
- $newBehavior->title = $node->title;
- $newBehavior->purpose = $node->purpose;
- $newBehavior->purpose_hidden = $node->purpose_hidden;
- $newBehavior->days = $node->days;
- $newBehavior->add_end_time = $node->add_end_time;
- $newBehavior->support3s_behavior_js = $node->support3s_behavior_js;
- $newBehavior->body = '';
- $newBehavior->language = $node->language;
- $newBehavior->repeat = $node->repeat;
- node_save($newBehavior);
- db_query("INSERT INTO {practicas_grupales} (nid, bid) VALUES (%d,%d)", $node->nid,$newBehavior->nid);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement