Changeset 386 for trunk/calendar/inc/class.socalendar_sql.inc.php
- Timestamp:
- 08/06/08 11:52:30 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.