Changeset 386 for trunk/calendar/inc
- Timestamp:
- 08/06/08 11:52:30 (16 years ago)
- Location:
- trunk/calendar/inc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/calendar/inc/class.bocalendar.inc.php
r363 r386 142 142 function bocalendar($session=0) 143 143 { 144 145 if(!is_object($GLOBALS['phpgw']->datetime)) 146 { 147 $GLOBALS['phpgw']->datetime = createobject('phpgwapi.date_time'); 148 } 149 144 150 $this->cat = CreateObject('phpgwapi.categories'); 145 151 $this->grants = $GLOBALS['phpgw']->acl->get_grants('calendar'); … … 752 758 function update($params='') 753 759 { 754 760 if(!is_object($GLOBALS['phpgw']->datetime)) 761 { 762 $GLOBALS['phpgw']->datetime = createobject('phpgwapi.date_time'); 763 } 755 764 $l_cal = (@isset($params['cal']) && $params['cal']?$params['cal']:$_POST['cal']); 756 765 $l_participants = (@$params['participants']?$params['participants']:$_POST['participants']); … … 915 924 case MCAL_RECUR_NONE: 916 925 $this->so->set_recur_none(); 926 927 $repetido = (int)$l_cal['recur_type']; // recebe o tipo de repeticao; 928 917 929 break; 918 930 case MCAL_RECUR_DAILY: 919 931 $this->so->set_recur_daily((int)$l_recur_enddate['year'],(int)$l_recur_enddate['month'],(int)$l_recur_enddate['mday'],(int)$l_cal['recur_interval']); 932 933 $repetido = (int)$l_cal['recur_type']; // recebe o tipo de repeticao; 934 935 $tmp_init = explode("/",$_POST['start']['str']); // recebe a data inicial da repeticao; 936 $init_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_init[1]),$tmp_init[0],$tmp_init[2]); // transforma a data inicial + hora + minuto em UNIX timestamp; 937 938 if($l_cal['rpt_use_end'] == 'y') // verifica se foi indicada data final da repeticao, se sim: 939 { 940 941 $tmp_end = explode("/",$_POST['recur_enddate']['str']); // recebe data final da repeticao; 942 $end_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_end[1]),$tmp_end[0],$tmp_end[2]); // transforma a data inicial + hora e minuto de inicio da repeticao em UNIX timestamp; 943 944 }else { // se nao existe data final da repeticao (agendamento infinito): 945 946 $end_rept = 0; // variavel recebe zero e nao sera adicionado nenhum alarme para o agendamento; 947 } 920 948 break; 921 949 case MCAL_RECUR_WEEKLY: 950 951 $repetido = (int)$l_cal['recur_type']; // recebe o tipo de repeticao; 952 953 $tmp_init = explode("/",$_POST['start']['str']); // recebe a data inicial da repeticao; 954 $init_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_init[1]),$tmp_init[0],$tmp_init[2]); // transforma a data inicial + hora + minuto em UNIX timestamp; 955 956 if($l_cal['rpt_use_end'] == 'y') // verifica se foi indicada data final da repeticao, se sim: 957 { 958 959 $tmp_end = explode("/",$_POST['recur_enddate']['str']); // recebe data final da repeticao; 960 $end_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_end[1]),$tmp_end[0],$tmp_end[2]); // transforma a data inicial + hora e minuto de inicio da repeticao em UNIX timestamp; 961 962 }else { // se nao existe data final da repeticao (agendamento infinito): 963 964 $end_rept = 0; // variavel recebe zero e nao sera adicionado nenhum alarme para o agendamento; 965 } 966 922 967 foreach(array('rpt_sun','rpt_mon','rpt_tue','rpt_wed','rpt_thu','rpt_fri','rpt_sat') as $rpt_day) 923 968 { … … 929 974 { 930 975 $l_cal['recur_data'] |= (int)$mask; 976 $rpt_wdays = $l_cal['recur_data']; // recebe os dias da semana (somatorio) para repetir o alarme; 931 977 } 932 978 } … … 935 981 case MCAL_RECUR_MONTHLY_MDAY: 936 982 $this->so->set_recur_monthly_mday((int)$l_recur_enddate['year'],(int)$l_recur_enddate['month'],(int)$l_recur_enddate['mday'],(int)$l_cal['recur_interval']); 983 984 $repetido = (int)$l_cal['recur_type']; // recebe o tipo de repeticao; 985 986 $tmp_init = explode("/",$_POST['start']['str']); // recebe a data inicial da repeticao; 987 $init_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_init[1]),$tmp_init[0],$tmp_init[2]); // transforma a data inicial + hora + minuto em UNIX timestamp; 988 989 if($l_cal['rpt_use_end'] == 'y') // verifica se foi indicada data final da repeticao, se sim: 990 { 991 992 $tmp_end = explode("/",$_POST['recur_enddate']['str']); // recebe data final da repeticao; 993 $end_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_end[1]),$tmp_end[0],$tmp_end[2]); // transforma a data inicial + hora e minuto de inicio da repeticao em UNIX timestamp; 994 995 }else { // se nao existe data final da repeticao (agendamento infinito): 996 997 $end_rept = 0; // variavel recebe zero e nao sera adicionado nenhum alarme para o agendamento; 998 } 937 999 break; 938 1000 case MCAL_RECUR_MONTHLY_WDAY: … … 941 1003 case MCAL_RECUR_YEARLY: 942 1004 $this->so->set_recur_yearly((int)$l_recur_enddate['year'],(int)$l_recur_enddate['month'],(int)$l_recur_enddate['mday'],(int)$l_cal['recur_interval']); 1005 1006 $repetido = (int)$l_cal['recur_type']; // recebe o tipo de repeticao; 1007 1008 $tmp_init = explode("/",$_POST['start']['str']); // recebe a data inicial da repeticao; 1009 $init_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_init[1]),$tmp_init[0],$tmp_init[2]); // transforma a data inicial + hora + minuto em UNIX timestamp; 1010 1011 if($l_cal['rpt_use_end'] == 'y') // verifica se foi indicada data final da repeticao, se sim: 1012 { 1013 1014 $tmp_end = explode("/",$_POST['recur_enddate']['str']); // recebe data final da repeticao; 1015 $end_rept = mktime($_POST['start']['hour'],$_POST['start']['min'],0,intval($tmp_end[1]),$tmp_end[0],$tmp_end[2]); // transforma a data inicial + hora e minuto de inicio da repeticao em UNIX timestamp; 1016 1017 }else { // se nao existe data final da repeticao (agendamento infinito): 1018 1019 $end_rept = 0; // variavel recebe zero e nao sera adicionado nenhum alarme para o agendamento; 1020 } 943 1021 break; 944 1022 } … … 1050 1128 'offset' => $offset, 1051 1129 'owner' => $this->owner, 1052 'enabled' => 1 1130 'enabled' => 1, 1131 'repeat' => $repetido, // para repetir alarme; 1132 'init_rept' => $init_rept, // inicio repeticao; 1133 'end_rept' => $end_rept, // fim repeticao; 1134 'rpt_wdays' => $rpt_wdays // dias repeticao da semana; 1053 1135 ); 1054 1136 } … … 2742 2824 $mail->IsHTML(true); 2743 2825 2744 // Aqui éenviado o email2826 // Aqui ï¿œ enviado o email 2745 2827 foreach($to_notify as $userid => $statusid) 2746 2828 { … … 2996 3078 } 2997 3079 2998 //Inicializa vari ável de retorno.3080 //Inicializa variï¿œvel de retorno. 2999 3081 $returncode=true; 3000 3082 if(count($mail->to)) { … … 3095 3177 $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'] = $temp_dateformat; 3096 3178 3097 // Notifica por email o criador do compromisso, com as poss íveis falhas.3179 // Notifica por email o criador do compromisso, com as possï¿œveis falhas. 3098 3180 if($errorInfo) { 3099 3181 $tmpbody = "<font color='red'>".lang("The following commitment had problems for DELIVERING the NOTIFICATION messages.").".</font><br>"; -
trunk/calendar/inc/class.socalendar_sql.inc.php
r204 r386 29 29 var $today = Array('raw','day','month','year','full','dow','dm','bd'); 30 30 31 31 32 function socalendar_() 32 33 { … … 148 149 } 149 150 151 /* Funcao save_alarm modificada para gerar alarmes repetidos, caso seja marcado um evento igualmente repetido. A funcao recebe qual o tipo 152 de repeticao escolhido pelo usuario (diario, semanal, mensal, anual) e insere alarmes nas respectivas repeticoes do evento. */ 150 153 /*! 151 154 @function save_alarm … … 158 161 function save_alarm($cal_id,$alarm) 159 162 { 160 //echo "<p>save_alarm(cal_id=$cal_id, alarm="; print_r($alarm); echo ")</p>\n"; 163 161 164 if (!($id = $alarm['id'])) 162 165 { 166 $alarm['time'] -= $GLOBALS['phpgw']->datetime->tz_offset; // time should be stored in server timezone 163 167 $alarms = $this->read_alarms($cal_id); // find a free alarm# 164 $n = count($alarms); 165 do 166 { 167 $id = 'cal:'.(int)$cal_id.':'.$n; 168 ++$n; 169 } 170 while (@isset($alarms[$id])); 168 169 if($alarm['repeat'] == 1) // repeticao do tipo "Diariamente"; 170 { 171 $n = 0; 172 173 while(@isset($alarms[$id])); 174 { 175 176 $init_alarm = $alarm['init_rept']; 177 $end_alarm = $alarm['end_rept']; 178 179 if($end_alarm != 0) 180 { 181 while($init_alarm <= $end_alarm) 182 { 183 $id = 'cal:'.(int)$cal_id.':'.$n; 184 $n++; 185 186 $alarm['cal_id'] = $cal_id; // we need the back-reference 187 188 unset($alarm['repeat']); 189 unset($alarm['init_rept']); 190 unset($alarm['end_rept']); 191 unset($alarm['rpt_wdays']); 192 193 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 194 { 195 return False; 196 } 197 198 $alarm['time'] += 86400; 199 $init_alarm += 86400; 200 } 201 } 202 } 203 204 }elseif($alarm['repeat'] == 2) { // repeticao do tipo "Semanalmente"; 205 206 $n = 0; 207 208 $init_alarm = $data_atual = $alarm['init_rept']; 209 $end_alarm = $alarm['end_rept']; 210 211 $rpt_alarm_wdays = $alarm['rpt_wdays']; 212 213 $divisor = 64; 214 $quociente = 0; 215 $resto = 0; 216 217 $dia_semana = date("w",$init_alarm); 218 219 switch($dia_semana) 220 { 221 case 0: 222 $dia = array( 223 0 => 'domingo', 224 1 => 'segunda', 225 2 => 'terca', 226 3 => 'quarta', 227 4 => 'quinta', 228 5 => 'sexta', 229 6 => 'sabado' 230 ); 231 break; 232 case 1: 233 $dia = array( 234 0 => 'segunda', 235 1 => 'terca', 236 2 => 'quarta', 237 3 => 'quinta', 238 4 => 'sexta', 239 5 => 'sabado', 240 6 => 'domingo' 241 ); 242 break; 243 case 2: 244 $dia = array( 245 0 => 'terca', 246 1 => 'quarta', 247 2 => 'quinta', 248 3 => 'sexta', 249 4 => 'sabado', 250 5 => 'domingo', 251 6 => 'segunda' 252 ); 253 break; 254 case 3: 255 $dia = array( 256 0 => 'quarta', 257 1 => 'quinta', 258 2 => 'sexta', 259 3 => 'sabado', 260 4 => 'domingo', 261 5 => 'segunda', 262 6 => 'terca' 263 ); 264 break; 265 case 4: 266 $dia = array( 267 0 => 'quinta', 268 1 => 'sexta', 269 2 => 'sabado', 270 3 => 'domingo', 271 4 => 'segunda', 272 5 => 'terca', 273 6 => 'quarta' 274 ); 275 break; 276 case 5: 277 $dia = array( 278 0 => 'sexta', 279 1 => 'sabado', 280 2 => 'domingo', 281 3 => 'segunda', 282 4 => 'terca', 283 5 => 'quarta', 284 6 => 'quinta' 285 ); 286 break; 287 case 6: 288 $dia = array( 289 0 => 'sabado', 290 1 => 'domingo', 291 2 => 'segunda', 292 3 => 'terca', 293 4 => 'quarta', 294 5 => 'quinta', 295 6 => 'sexta' 296 ); 297 break; 298 } 299 300 301 $dias_semana = array( 302 64 => 'sabado', 303 32 => 'sexta', 304 16 => 'quinta', 305 8 => 'quarta', 306 4 => 'terca', 307 2 => 'segunda', 308 1 => 'domingo' 309 ); 310 311 do 312 { 313 314 $resto = ($rpt_alarm_wdays % $divisor); 315 $quociente = floor($rpt_alarm_wdays / $divisor); 316 317 if($quociente == 1) 318 { 319 $result[] .= $dias_semana[$divisor]; 320 321 $divisor = $divisor / 2; 322 $rpt_alarm_wdays = $resto; 323 324 }else { 325 326 while($rpt_alarm_wdays < $divisor) 327 { 328 $divisor = $divisor / 2; 329 } 330 331 $resto = ($rpt_alarm_wdays % $divisor); 332 $quociente = floor($rpt_alarm_wdays / $divisor); 333 334 if($quociente == 1) 335 { 336 337 $result[] .= $dias_semana[$divisor]; 338 339 $divisor = $divisor / 2; 340 $rpt_alarm_wdays = $resto; 341 } 342 } 343 344 } 345 while($resto != 0); 346 347 krsort($result); 348 349 $week_num = 0; 350 $y = 0; 351 352 while(@isset($alarms[$id])); 353 { 354 355 if($end_alarm != 0) 356 { 357 358 while($data_atual <= $end_alarm) 359 { 360 361 foreach($dia as $index => $value) 362 { 363 if(in_array($value,$result)) 364 { 365 366 $nova_data = $init_alarm + (86400 * ($index + (7 * $y))); 367 368 if($nova_data == $init_alarm){ 369 370 continue; 371 } 372 373 $id = 'cal:'.(int)$cal_id.':'.$n; 374 $n++; 375 376 $alarm['cal_id'] = $cal_id; // we need the back-reference 377 378 unset($alarm['repeat']); 379 unset($alarm['init_rept']); 380 unset($alarm['end_rept']); 381 unset($alarm['rpt_wdays']); 382 383 $data_atual = $nova_data; 384 385 if($data_atual > $end_alarm){ 386 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 387 { 388 return False; 389 } 390 break; 391 } 392 393 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 394 { 395 return False; 396 } 397 $alarm['time'] = $nova_data - $alarm['offset'] - $GLOBALS['phpgw']->datetime->tz_offset; 398 } 399 } 400 $y++; 401 } 402 } 403 } 404 405 }elseif($alarm['repeat'] == 3) { // repeticao do tipo "Mensalmente (por data)"; 406 407 $n = 0; 408 409 $init_alarm = $alarm['init_rept']; 410 $end_alarm = $alarm['end_rept']; 411 412 while(@isset($alarms[$id])); 413 { 414 415 if($end_alarm != 0) 416 { 417 while($init_alarm <= $end_alarm) 418 { 419 420 $next_month = date("n",$init_alarm) + 1; 421 $next_alarm = mktime(date("G",$alarm['time']),date("i",$alarm['time']),date("s",$alarm['time']),$next_month,date("j",$alarm['time']),date("Y",$alarm['time'])); 422 423 $id = 'cal:'.(int)$cal_id.':'.$n; 424 $n++; 425 426 $alarm['cal_id'] = $cal_id; // we need the back-reference 427 428 unset($alarm['repeat']); 429 unset($alarm['init_rept']); 430 unset($alarm['end_rept']); 431 unset($alarm['rpt_wdays']); 432 433 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 434 { 435 return False; 436 } 437 438 $alarm['time'] = $next_alarm; 439 $init_alarm = $next_alarm; 440 441 } 442 } 443 } 444 445 }elseif($alarm['repeat'] == 5) { // repeticao do tipo "Anualmente"; 446 447 $n = 0; 448 449 $init_alarm = $alarm['init_rept']; 450 $end_alarm = $alarm['end_rept']; 451 452 while(@isset($alarms[$id])); 453 { 454 455 456 if($end_alarm != 0) 457 { 458 while($init_alarm < $end_alarm) 459 { 460 461 $next_year = date("Y",$init_alarm) + 1; 462 $next_alarm = mktime(date("G",$alarm['time']),date("i",$alarm['time']),date("s",$alarm['time']),date("n",$alarm['time']),date("j",$alarm['time']),$next_year); 463 464 $id = 'cal:'.(int)$cal_id.':'.$n; 465 $n++; 466 467 $alarm['cal_id'] = $cal_id; // we need the back-reference 468 469 unset($alarm['repeat']); 470 unset($alarm['init_rept']); 471 unset($alarm['end_rept']); 472 unset($alarm['rpt_wdays']); 473 474 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 475 { 476 return False; 477 } 478 479 $alarm['time'] = $next_alarm; 480 $init_alarm = $next_alarm; 481 } 482 } 483 } 484 485 }else { 486 $alarm['time'] -= $GLOBALS['phpgw']->datetime->tz_offset; // time should be stored in server timezone 487 $n = count($alarms); 488 while(@isset($alarms[$id])); 489 { 490 491 $id = 'cal:'.(int)$cal_id.':'.$n; 492 493 unset($alarm['repeat']); 494 unset($alarm['init_rept']); 495 unset($alarm['end_rept']); 496 unset($alarm['rpt_wdays']); 497 498 $alarm['cal_id'] = $cal_id; // we need the back-reference 499 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 500 { 501 return False; 502 } 503 504 ++$n; 505 } 506 } 507 171 508 } 172 509 else … … 174 511 $this->async->cancel_timer($id); 175 512 } 176 $alarm['cal_id'] = $cal_id; // we need the back-reference 177 178 //$alarm['time'] -= $GLOBALS['phpgw']->datetime->tz_offset; // time should be stored in server timezone 179 if (!$this->async->set_timer($alarm['time'],$id,'calendar.bocalendar.send_alarm',$alarm)) 180 { 181 return False; 182 } 513 $alarm['time'] -= $GLOBALS['phpgw']->datetime->tz_offset; // time should be stored in server timezone 183 514 return $id; 184 515 } … … 566 897 function save_event(&$event) 567 898 { 899 900 $GLOBALS['calendar']->bocalendar = CreateObject('calendar.bocalendar'); 901 568 902 $locks = Array( 569 903 'phpgw_cal', … … 685 1019 . 'WHERE cal_id='.$event['id'],__LINE__,__FILE__); 686 1020 } 1021 687 1022 } 688 1023 else
Note: See TracChangeset
for help on using the changeset viewer.