Changeset 3728
- Timestamp:
- 02/01/11 18:41:13 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/calendar/inc/class.bocalendar.inc.php
r3429 r3728 97 97 ); 98 98 99 var $debug = False; 99 var $wdays; 100 101 var $debug = False; 100 102 // var $debug = True; 101 103 … … 378 380 } 379 381 $this->xmlrpc = is_object($GLOBALS['server']) && $GLOBALS['server']->last_method; 382 $this->wdays = Array(MCAL_M_SUNDAY,MCAL_M_MONDAY,MCAL_M_TUESDAY,MCAL_M_WEDNESDAY, 383 MCAL_M_THURSDAY,MCAL_M_FRIDAY,MCAL_M_SATURDAY); 380 384 } 381 385 … … 784 788 } 785 789 790 function getNextDow($start){ 791 if ($start == 6) 792 { 793 return 0; 794 } 795 else 796 { 797 return $start + 1; 798 } 799 } 800 801 // TODO: Levar em consideração no cálculo das ocorrências o parâmetro 802 // $event['recur_interval'] 803 function expand_repetition($event){ 804 $return = Array(); 805 806 $event['recur_enddate']['hour'] = 24; 807 $enddate = $this->maketime($event['recur_enddate']); 808 809 $owner = $event['owner']; 810 $participants = $event['participants']; 811 812 // $new_event = Array(); 813 // $new_event['owner'] = $owner; 814 // $new_event['participants'] = $participants; 815 // $new_event['start'] = $event['start']; 816 // $new_event['end'] = $event['end']; 817 // 818 // $return[] = $new_event; 819 820 switch($event['recur_type']) { 821 case MCAL_RECUR_DAILY: 822 // add 1 day = 86400 sec 823 $starttime = $this->maketime($event['start']); 824 $endtime = $this->maketime($event['end']); 825 826 $offset = 86400; 827 for (; $starttime <= $enddate; 828 $starttime = $starttime+$offset, 829 $endtime = $endtime+$offset) 830 { 831 $new_event = Array(); 832 $new_event['owner'] = $owner; 833 $new_event['participants'] = $participants; 834 $new_event['start'] = $starttime; 835 $new_event['end'] = $endtime; 836 $return[] = $new_event; 837 } 838 839 break; 840 case MCAL_RECUR_WEEKLY: 841 842 $setDow = (int)date('w',$this->maketime($event['start'])); 843 $dowOffsets = Array(); 844 $firstDow; 845 $firstDowOffset = 0; 846 847 // Initializing do 848 $mask = $this->wdays[$setDow]; 849 $firstDayMismatch = False; 850 if (((int)$event['recur_data'] & $mask) == 0){ 851 $firstDayMismatch = True; 852 } 853 854 $dow = $setDow; 855 856 for ($nextDow = $setDow; array_sum($dowOffsets) < 7;) 857 { 858 859 $nextDow = $this->getNextDow($nextDow); 860 $mask = $this->wdays[$nextDow]; 861 862 if (((int)$event['recur_data'] & $mask) != 0) 863 { 864 if ($firstDayMismatch and $firstDowOffset == 0) 865 { 866 if ($dow < $nextDow) 867 { 868 $firstDowOffset = $nextDow - $dow; 869 } 870 else if ($dow > $nextDow) 871 { 872 $firstDowOffset = (7 - $dow) + $nextDow; 873 } 874 } 875 else 876 { 877 if ($dow < $nextDow) 878 { 879 $dowOffsets[] = $nextDow - $dow; 880 } 881 else if ($dow > $nextDow) 882 { 883 $dowOffsets[] = (7 - $dow) + $nextDow; 884 } 885 else 886 { 887 $dowOffsets[] = 7; 888 } 889 890 } 891 892 $dow = $nextDow; 893 if (!isset($firstDow)) 894 { 895 $firstDow = $dow; 896 } 897 898 } 899 900 // $nextDow = $this->getNextDow($nextDow); 901 // $mask = $this->wdays[$nextDow]; 902 903 } 904 905 if ($firstDayMismatch) 906 { 907 if ($dow < $firstDow) 908 { 909 $dowOffsets[] = $firstDow - $dow; 910 } 911 else if ($dow > $firstDow) 912 { 913 $dowOffsets[] = (7 - $dow) + $firstDow; 914 } 915 } 916 917 // Gera os eventos 918 $starttime = $this->maketime($event['start']); 919 $endtime = $this->maketime($event['end']); 920 $offset = 86400; 921 922 $new_event = Array(); 923 $new_event['owner'] = $owner; 924 $new_event['participants'] = $participants; 925 $new_event['start'] = $starttime; 926 $new_event['end'] = $endtime; 927 $return[] = $new_event; 928 929 if ($firstDayMismatch && $firstDowOffset != 0) 930 { 931 $multi = $firstDowOffset; 932 933 $new_event = Array(); 934 $new_event['owner'] = $owner; 935 $new_event['participants'] = $participants; 936 $new_event['start'] = $starttime += $offset*$multi; 937 $new_event['end'] = $endtime += $offset*$multi; 938 $return[] = $new_event; 939 } 940 941 for ($i = 0, $multi = $dowOffsets[$i], 942 $starttime += $offset*$multi, 943 $endtime += $offset*$multi; 944 $starttime <= $enddate; 945 $i++, 946 $i = ($i < count($dowOffsets))?$i:0, 947 $multi = $dowOffsets[$i], 948 $starttime += $offset*$multi, 949 $endtime += $offset*$multi) 950 { 951 //error_log('loop infinito?'); 952 $new_event = Array(); 953 $new_event['owner'] = $owner; 954 $new_event['participants'] = $participants; 955 $new_event['start'] = $starttime; // + $offset*$multi; 956 $new_event['end'] = $endtime; // + $offset*$multi; 957 $return[] = $new_event; 958 } 959 960 961 break; 962 case MCAL_RECUR_MONTHLY_WDAY: 963 // Not working!!! 964 break; 965 case MCAL_RECUR_MONTHLY_MDAY: 966 case MCAL_RECUR_YEARLY: 967 968 for ($key = ($event['recur_type'] == MCAL_RECUR_YEARLY)?'year':'month', 969 $starttime = $event['start'], $endtime = $event['end']; 970 $this->maketime($starttime) <= $enddate; 971 $starttime['year'] = ($key == 'month' && $starttime['month'] == 12)?$starttime['year']+1:$starttime['year'], 972 $endtime['year'] = ($key == 'month' && $endtime['month'] == 12)?$endtime['year']+1:$endtime['year'], 973 $starttime[$key] = ($key == 'year')?$starttime[$key]+1:($key == 'month' && $starttime[$key] < 12)?$starttime[$key]+1:1, 974 $endtime[$key] = ($key == 'year')?$endtime[$key]+1:($key == 'month' && $endtime[$key] < 12)?$endtime[$key]+1:1) 975 { 976 $new_event = Array(); 977 $new_event['owner'] = $owner; 978 $new_event['participants'] = $participants; 979 $new_event['start'] = $this->maketime($starttime); 980 $new_event['end'] = $this->maketime($endtime); 981 $return[] = $new_event; 982 } 983 984 break; 985 // default: 986 // return Array(); 987 988 } 989 990 return $return; 991 } 992 786 993 function update($params='') 787 994 { … … 1222 1429 } 1223 1430 1224 $overlapping_events = $this->overlap( 1225 $this->maketime($event['start']), 1226 $this->maketime($event['end']), 1227 $event['participants'], 1228 $event['owner'], 1229 $event_ids 1230 ); 1431 if (isset($repetido) and $repetido > 0){ 1432 $events = $this->expand_repetition($event); 1433 $overlapping_events = False; 1434 foreach($events as $evt){ 1435 $overlap = $this->overlap( 1436 $evt['start'], 1437 $evt['end'], 1438 $evt['participants'], 1439 $evt['owner'], 1440 $event_ids); 1441 if ($overlap) 1442 { 1443 if (!$overlapping_events) 1444 { 1445 $overlapping_events = Array(); 1446 } 1447 array_push($overlapping_events, $overlap); 1448 } 1449 } 1450 } 1451 else { 1452 $overlapping_events = $this->overlap( 1453 $this->maketime($event['start']), 1454 $this->maketime($event['end']), 1455 $event['participants'], 1456 $event['owner'], 1457 $event_ids 1458 ); 1459 } 1231 1460 } 1232 1461 if(!$this->ex_participants)
Note: See TracChangeset
for help on using the changeset viewer.