Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.38 KB | None | 0 0
  1. function support3s_behavior_update($node,$practiceFather=NULL) {
  2. global $user;
  3.  
  4. $time_u = array();
  5. foreach ($node->support3s_behavior_js as $key => $value){
  6. // Si no este chequeado remover la hora
  7. if ($value['behavior']['remove'] == 0) {
  8. // Elimina el id del hábito
  9. unset($value['behavior']);
  10. // si no esta seteada la hora de termino se eliminan del array
  11. if (!$node->add_end_time ) {
  12. unset($value['end_hours']);
  13. unset($value['end_minutes']);
  14. }
  15. $time_u[] = $value;
  16. }
  17. }
  18.  
  19. $time_new = serialize($time_u);
  20. $week_new = serialize($node->days);
  21.  
  22. $oldBehavior = db_fetch_object(db_query("SELECT time, week, b_name, `repeat` FROM {behavior} WHERE id = %d", $node->nid));
  23.  
  24. $time_old = $oldBehavior->time;
  25. $week_old = $oldBehavior->week;
  26. $repeat_old = $oldBehavior->repeat;
  27. $oldNameBehavior = $oldBehavior->b_name;
  28. watchdog('updating a behavior', '<pre>$node: ' . print_r($node, true) . '</pre>');
  29. //Query para obtener el nombre del purpose con $node->purpose guardar en p_name
  30. $queryPurpose = db_fetch_object(db_query("SELECT title FROM {node} WHERE nid = %d", $node->purpose_hidden));
  31. $p_name = $queryPurpose->title;
  32.  
  33. // Verifica si hay cambios sen la frecuencia de cumplimiento
  34. if ($time_new == $time_old && $week_new == $week_old && $node->repeat == $repeat_old) {
  35.  
  36. watchdog('updte', '<pre>no hay cambio de frecuncia' . print_r('', true) . '</pre>');
  37. 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);
  38.  
  39. db_query("INSERT INTO {revisions} (id_behavior, time, date, week, action)
  40. VALUES (%d, '%s' , '%s', '%s','%s')", $node->nid,serialize($time_u), time(),serialize($node->days),'updated');
  41.  
  42. //Actualiza también a los habitos de los miembros de equip,
  43. //si eres lider y editaste una práctica grupal
  44. if($p_name == 'Prácticas Grupales' && db_result(db_query("SELECT rid FROM {users_roles} WHERE uid=%d AND rid=%d", $node->uid,8))){
  45. // LLama a los hábitos de tus miembros
  46. watchdog('upd beh', '<pre>node->nid:' . print_r($node->nid, true) . '</pre>');
  47. $queryHabitosaCambiar = db_query("SELECT bid FROM {practicas_grupales} WHERE nid=%d", $node->nid);
  48.  
  49. while ($result = db_fetch_object($queryHabitosaCambiar)) {
  50. $changedBehavior = node_load($result->bid);
  51. $changedBehavior->purpose_hidden = db_result(db_query("SELECT nid FROM {node} WHERE title='%s' AND uid=%d",'Prácticas Grupales' ,$changedBehavior->uid));
  52. $changedBehavior->support3s_behavior_js = $node->support3s_behavior_js;
  53. $changedBehavior->add_end_time = $node->add_end_time;
  54. $changedBehavior->days = $node->days;
  55. $changedBehavior->prev_accomp = 0;
  56. $changedBehavior->title = $node->title;
  57. node_save($changedBehavior);
  58. }
  59. }
  60. } else {
  61. // watchdog('updte', '<pre> hay cambio de frecuncia' . print_r('', true) . '</pre>');
  62. //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.
  63. module_load_include('inc','support3s_behavior', 'inc/f_graph');
  64. db_query("UPDATE {behavior} SET id_status = %d WHERE id = %d", 0, $node->nid);
  65.  
  66. $newBehavior = new stdClass();
  67. $newBehavior->type = 'support3s_behavior';
  68. $newBehavior->uid = $node->uid;
  69. $newBehavior->title = $node->title;
  70. $newBehavior->purpose = $node->purpose;
  71. $newBehavior->purpose_hidden = $node->purpose_hidden;
  72. $newBehavior->days = $node->days;
  73. $t=time();
  74. $newBehavior->prev_accomp = porcentaje_actual($node->nid,$t);
  75. $newBehavior->add_end_time = $node->add_end_time;
  76. $newBehavior->support3s_behavior_js = $node->support3s_behavior_js;
  77. $newBehavior->body = '';
  78. $newBehavior->updating = TRUE;
  79. $newBehavior->repeat = $node->repeat;
  80. //Crear ver prev si es k tiene versiones previas
  81. $ver_prev=db_result(db_query("SELECT ver_prev FROM {behavior} WHERE id= %d ", $node->nid));
  82.  
  83. if($ver_prev!=''){
  84. $ver_prev=unserialize($ver_prev);
  85. $ver_prev[]=$node->nid;
  86. }else{
  87. $ver_pre=array();
  88. $ver_prev[]=$node->nid;
  89. }
  90. $newBehavior->ver_prev =serialize($ver_prev);
  91. // Save the node
  92. node_save($newBehavior);
  93. // watchdog('updte', '<pre>Creando' . print_r($newBehavior->nid, true) . '</pre>');
  94.  
  95. //Averiguar el último cumplimiento del comportamiento cambiado de freq. para que el nuevo comportamiento comience ahi
  96. $ltime=db_result(db_query("SELECT date FROM {accomplishment} WHERE id_behavior= %d ORDER BY date DESC LIMIT 1", $node->nid));
  97. if($ltime==0 )
  98. $ltime=time();
  99.  
  100. $ltiempo=getdate($ltime);
  101. $at=getdate();
  102. if($ltiempo['mon']!=$at['mon'] || $ltiempo['year']!=$at['year'])
  103. $ltime=mktime(0, 0, 0,$at['mon'], 1, $at['year']);
  104. //Dejar un registro en tabla revisions
  105. db_query("INSERT INTO {revisions} (id_behavior, time, date, week, action)
  106. VALUES (%d, '%s' , '%s', '%s','%s')", $newBehavior->nid,serialize($time_u), $ltime,serialize($node->days), 'freq_changed');
  107.  
  108. //Avisarle a tabla revision que se eliminó un comportamiento debido a un cambio de freq
  109. db_query("INSERT INTO {revisions} (id_behavior,date, action)
  110. VALUES (%d,%d,'%s')", $node->nid, time() ,'Deleted-freq');
  111.  
  112. // Si es el lider, y modifica una hábito de prácticas grupales, actualiza también esos comportamientos
  113. if($p_name == 'Prácticas Grupales' && db_result(db_query("SELECT rid FROM {users_roles} WHERE uid=%d AND rid=%d", $node->uid,8))){
  114. // watchdog('updte', '<pre>soy el lider' . print_r('', true) . '</pre>');
  115. //Llama a los hábitos de los miembros
  116. $queryHabitosaCambiar = db_query("SELECT bid FROM {practicas_grupales} WHERE nid=%d", $node->nid);
  117.  
  118. while ($result = db_fetch_object($queryHabitosaCambiar)) {
  119. // watchdog('updte', '<pre>revisando comportamiento de equipo numero ' . print_r($result->bid, true) . '</pre>');
  120. //Carga el nodo
  121. //Agregarle los cambios
  122. $changedBehavior = node_load($result->bid);
  123. $changedBehavior->title = $node->title;
  124. $changedBehavior->days = $node->days;
  125. $changedBehavior->add_end_time = $node->add_end_time;
  126. $changedBehavior->support3s_behavior_js = $node->support3s_behavior_js;
  127. $changedBehavior->prev_accomp = 0;
  128. $changedBehavior->repeat = $node->repeat;
  129. $changedBehavior->purpose_hidden = db_result(db_query("SELECT nid FROM {node} WHERE title='%s' AND uid=%d",'Prácticas Grupales' ,$changedBehavior->uid));
  130.  
  131. support3s_behavior_update($changedBehavior,$newBehavior->nid);
  132. }
  133. }
  134. // 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?
  135. if($practiceFather){
  136. // Si soy una práctica grupal, debo actualizar la tabla practicas_grupales
  137. db_query("DELETE FROM {practicas_grupales} WHERE bid = %d", $node->nid);
  138. db_query("INSERT INTO {practicas_grupales} (nid, bid) VALUES (%d,%d)", $practiceFather,$newBehavior->nid);
  139. }
  140.  
  141. // watchdog('updte', '<pre>Eliminando' . print_r($node->nid, true) . '</pre>');
  142. node_delete($node->nid);
  143. }
  144.  
  145. //Si es una practica grupal... podría tener contextos relevantes,
  146. //Por lo que revisa si hubo un cambio de nombre para actualizar el contexto, borrar sus practicas proyectadas y generar nuevas
  147. if($p_name=='Prácticas Grupales' && ($node->title != $oldNameBehavior || $time_new != $time_old || $week_new == $week_old ) ){
  148.  
  149. $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);
  150.  
  151. while ($result = db_fetch_object($queryContextos)) {
  152. db_query("UPDATE {ability_context} SET title = '%s' WHERE cid = %d", $node->title,$result->cid);
  153. //Borrar las practicas futuras que tenga para este contexto
  154. db_query("DELETE FROM {hability_practice} WHERE context='%s' AND hid=%d AND start>%d", $oldNameBehavior, $result->hid,time());
  155. //Agregar nuevas practicas para esta semana
  156. agregarOportunidadesPracticaGrupales($result->hid,$result->cid,$node->title);
  157. }
  158. }
  159.  
  160. //Llamamos a los integrantes
  161. if($p_name=='Prácticas Grupales'){
  162. $queryPG = db_query("SELECT * FROM {practicas_grupales} WHERE nid=%d",$node->nid);
  163. $oldMiembros = array();
  164. $newMiembros = array();
  165. while($resultPG = db_fetch_object($queryPG)){
  166.  
  167. $behaviorChild = node_load($resultPG->bid);
  168. $integrante = support3s_getProfile($behaviorChild->uid);
  169.  
  170. if( $integrante!=support3s_getProfile($user->uid)){
  171. $oldMiembros[] = $integrante;
  172. }
  173. }
  174.  
  175. foreach($node->integrantes as $integrante){
  176. if($integrante != 0 && $integrante!=support3s_getProfile($user->uid)){
  177. $newMiembros[] = $integrante;
  178. }
  179. }
  180. $quitados = array_diff($oldMiembros,$newMiembros);
  181. $agregados = array_diff($newMiembros,$oldMiembros);
  182. //watchdog('debug agregado','<pre>'.print_r($agregados,true).'</pre>');
  183. //watchdog('debug agregado','<pre>'.print_r($quitados,true).'</pre>');
  184. foreach($quitados as $q){
  185. $nodeProfile = node_load($q);
  186. $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));
  187. db_query("DELETE FROM {practicas_grupales} WHERE bid = %d", $bid);
  188. node_delete($bid);
  189. db_query("UPDATE {behavior} SET id_status = %d WHERE id = %d", 0, $bid);
  190. }
  191.  
  192. foreach($agregados as $a){
  193. $nodeProfile= node_load($a);
  194. $newBehavior = new stdClass();
  195. $newBehavior->type = 'support3s_behavior';
  196. $newBehavior->uid = $nodeProfile->uid;
  197. $newBehavior->title = $node->title;
  198. $newBehavior->purpose = $node->purpose;
  199. $newBehavior->purpose_hidden = $node->purpose_hidden;
  200. $newBehavior->days = $node->days;
  201. $newBehavior->add_end_time = $node->add_end_time;
  202. $newBehavior->support3s_behavior_js = $node->support3s_behavior_js;
  203. $newBehavior->body = '';
  204. $newBehavior->language = $node->language;
  205. $newBehavior->repeat = $node->repeat;
  206. node_save($newBehavior);
  207.  
  208. db_query("INSERT INTO {practicas_grupales} (nid, bid) VALUES (%d,%d)", $node->nid,$newBehavior->nid);
  209. }
  210. }
  211.  
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement