Changeset 7702
- Timestamp:
- 01/03/13 08:46:17 (11 years ago)
- Location:
- trunk/prototype
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/config/schedulable.ini
r7590 r7702 17 17 18 18 [before.find] 19 findDeepnessOne = modules/calendar/interceptors/DBMapping.php 19 20 findSchedulable = modules/calendar/interceptors/DBMapping.php 20 21 findTask = modules/calendar/interceptors/DBMapping.php -
trunk/prototype/modules/calendar/constants.php
r7077 r7702 97 97 define('STATUS_TODO_COMPLETED', 3); 98 98 define('STATUS_TODO_CANCELLED', 4); 99 100 define('EVENT_NOT_EDITABLE', 0); 101 define('EVENT_EDITABLE', 1); 102 define('EVENT_EDITABLE_FROM_PERMISSION', 2) 99 103 ?> -
trunk/prototype/modules/calendar/interceptors/DBMapping.php
r7696 r7702 194 194 195 195 public function findSchedulable(&$uri, &$params, &$criteria, $original) { 196 if (isset($criteria['filter'][2][1]) && $criteria['filter'][2][1] == 'calendar') { 197 198 $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 199 .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 200 .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 201 .'calendar_object.priority as "priority", calendar_object.due as "due", ' 202 .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 203 .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 204 .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 205 .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 206 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 207 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 208 .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 209 .'calendar FROM calendar_to_calendar_object , calendar_object ' 210 .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][2][2]) . '\')) ' 211 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 212 .'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') '; 213 214 if(isset($criteria['searchEvent']) && $criteria['searchEvent']){ 215 $where = 'AND (((upper("summary") like upper(\'%'.$criteria['filter'][1][1][2].'%\') OR upper("description") like upper(\'%'.$criteria['filter'][1][2][2].'%\')))) ORDER BY dtstart LIMIT '.$criteria['limit'].' OFFSET '.$criteria['offset'].' '; 216 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 217 218 }else{ 219 $start = array( $criteria['filter'][1][1][1][2] , $criteria['filter'][1][2][1][2], $criteria['filter'][1][3][1][2] ); 220 $end = array( $criteria['filter'][1][1][2][2] , $criteria['filter'][1][2][2][2], $criteria['filter'][1][3][2][2] ); 221 222 $ids = array(); 223 $occ = array(); 224 225 if ($occurrences = self::checkOccurrences($start[0], $end[0], $criteria['filter'][2][2])) 226 foreach ($occurrences as $id => $occurrence) { 227 $ids[] = $id; 228 $occ[] = $occurrence; 229 } 230 231 $where = 'AND ((range_end >= \'' . $start[0] . '\' AND range_end <= \'' . $end[0] . '\') OR ' 232 .'(range_start >= \'' . $start[1] . '\' AND range_start <= \'' . $end[1] . '\') OR ' 233 .'(range_start <= \'' . $start[2] . '\' AND range_end >= \'' . $end[2] . '\')) ' 234 .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ') 235 .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 236 .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 237 .'AND (calendar_repeat.object_id = calendar_object.id))'; 238 239 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 240 $params = array_merge($params, $occ); 241 } 242 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 243 return false; 244 } 196 if (isset($criteria['customQuery']) && $criteria['customQuery'] == '1') { 197 198 $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 199 .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 200 .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 201 .'calendar_object.priority as "priority", calendar_object.due as "due", ' 202 .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 203 .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 204 .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 205 .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 206 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 207 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 208 .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 209 .'calendar FROM calendar_to_calendar_object , calendar_object ' 210 .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['calendar']) . '\')) ' 211 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 212 .'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') '; 213 214 if(isset($criteria['searchEvent']) && $criteria['searchEvent']){ 215 $where = 'AND (((upper("summary") like upper(\'%'.$criteria['filter'][1][1][2].'%\') OR upper("description") like upper(\'%'.$criteria['filter'][1][2][2].'%\')))) ORDER BY dtstart LIMIT '.$criteria['limit'].' OFFSET '.$criteria['offset'].' '; 216 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 217 218 }else{ 219 $start = $criteria['rangeStart']; 220 $end = $criteria['rangeEnd']; 221 222 $ids = array(); 223 $occ = array(); 224 225 if ($occurrences = self::checkOccurrences($start, $end, $criteria['calendar'])) 226 foreach ($occurrences as $id => $occurrence) { 227 $ids[] = $id; 228 $occ[] = $occurrence; 229 } 230 231 $where = 'AND ((range_end >= \'' . $start . '\' AND range_end <= \'' . $end . '\') OR ' 232 .'(range_start >= \'' . $start . '\' AND range_start <= \'' . $end . '\') OR ' 233 .'(range_start <= \'' . $start . '\' AND range_end >= \'' . $end . '\')) ' 234 .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ') 235 .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 236 .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 237 .'AND (calendar_repeat.object_id = calendar_object.id))'; 238 239 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 240 $params = array_merge($params, $occ); 241 } 242 243 244 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 245 return false; 246 } 245 247 } 246 248 … … 841 843 } 842 844 845 //TODO: Remover apos suporte a deepness na api 846 public function findDeepnessOne(&$uri, &$params, &$criteria, $original){ 847 848 if (isset($criteria['findOne']) && $criteria['findOne'] == '1') { 849 850 $sql = ' SELECT DISTINCT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 851 .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 852 .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 853 .'calendar_object.priority as "priority", calendar_object.due as "due", ' 854 .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 855 .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 856 .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 857 .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 858 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 859 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 860 .'calendar_object.tzid as "timezone" ' 861 .'FROM calendar_object ' 862 .'WHERE ( calendar_object.id = '. $criteria['schedulable'] .')'; 863 864 $params = Controller::service('PostgreSQL')->execResultSql($sql); 865 866 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 867 return false; 868 } 869 870 871 872 } 873 843 874 //TODO: Remover apos suporte a deepness na api 844 875 public function deepnessFindEvent(&$uri, &$result, &$criteria, $original) { 845 if ( isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) {876 if ((isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) ) { 846 877 847 878 $date = new DateTime('now', new DateTimeZone('UTC')); -
trunk/prototype/modules/calendar/js/calendar.codecs.js
r7680 r7702 73 73 if( Calendar.currentViewKey !== viewKey ){ 74 74 Calendar.currentViewKey = viewKey; 75 Calendar.currentView = DataLayer.get( 'schedulable:calendar', { 76 start: start, 77 end: end 78 } ); 75 Calendar.currentView = DataLayer.encode('schedulable:calendar', DataLayer.dispatch('modules/calendar/schedules', DataLayer.criteria('schedulable:calendar', {start: start,end: end})) ); //DataLayer.get( 'schedulable:calendar', {start: start,end: end} ); 79 76 } 80 77 var view = Calendar.currentView[ signature.calendar.id ]; … … 199 196 200 197 if( status === 'serverclient' ){ 201 DataLayer.commit( false, false, function(){ 198 DataLayer.commit( false, false, function(){ 199 //Clean cache client after commit 200 DataLayer.remove('schedulable', false); 201 202 202 Calendar.rerenderView(true); 203 204 205 203 if(updateActivity) 204 refreshTaskActivity(); 205 }); 206 206 } 207 207 }); … … 1337 1337 function encodeRepeat( repeat ){ 1338 1338 1339 if( !repeat )1340 return( false );1339 if( !repeat || repeat == '0' ) 1340 return( false ); 1341 1341 if(typeof(repeat) == "object") 1342 return repeat;1342 return repeat; 1343 1343 1344 1344 return DataLayer.get( 'repeat', repeat ); … … 1436 1436 1437 1437 encoder: function( evtObj ){ 1438 if(!(!!evtObj)) 1439 return undefined; 1440 1441 var notArray = false; 1442 1443 if( notArray = $.type(evtObj) !== "array" ) 1444 evtObj = [ evtObj ]; 1445 1446 var pref = User.preferences; 1447 var res = []; 1448 1449 for(var i = 0; i < evtObj.length; i++){ 1450 res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ? 'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 1451 } 1452 1453 if( !notArray ){ 1454 var dates = {}; 1455 var typeRepeat = { 1456 'none': false, 1457 'daily': 'Repetição diária', 1458 'weekly': 'Repetição semanal', 1459 'monthly': 'Repetição mensal', 1460 'yearly': 'repetição anual' 1438 if(!(!!evtObj)) 1439 return undefined; 1440 1441 var notArray = false; 1442 1443 if( notArray = $.type(evtObj) !== "array" ) 1444 evtObj = [ evtObj ]; 1445 1446 var pref = User.preferences; 1447 var res = []; 1448 1449 for(var i = 0; i < evtObj.length; i++){ 1450 res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ? 'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 1451 } 1452 1453 if( !notArray ){ 1454 var dates = {}; 1455 var typeRepeat = { 1456 'none': false, 1457 'daily': 'Repetição diária', 1458 'weekly': 'Repetição semanal', 1459 'monthly': 'Repetição mensal', 1460 'yearly': 'repetição anual' 1461 } 1462 1463 for (var i=0; i < res.length; i++) { 1464 1465 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 1466 1467 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 1468 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 1469 1470 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 1471 1472 var occurrences = [ startDate.getTime() ]; 1473 1474 if( res[i].occurrences ) 1475 { 1476 occurrences = res[i].occurrences; 1477 } 1478 1479 for( var ii = 0; ii < occurrences.length; ii++ ) 1480 { 1481 var currentDate = new Date( occurrences[ii] ); 1482 var counter = currentDate.clone(); 1483 1484 res[i].startDate = currentDate.toString( User.preferences.dateFormat ); 1485 res[i].endDate = new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ); 1486 1487 if(res[i].repeat) 1488 res[i].repeat = typeRepeat[res[i].repeat.frequency]; 1489 } 1490 } 1461 1491 } 1462 1492 1463 for (var i=0; i < res.length; i++) { 1464 1465 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 1466 1467 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 1468 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 1469 1470 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 1471 1472 var occurrences = [ startDate.getTime() ]; 1473 1474 if( res[i].occurrences ) 1475 { 1476 occurrences = res[i].occurrences; 1477 } 1478 1479 for( var ii = 0; ii < occurrences.length; ii++ ) 1480 { 1481 var currentDate = new Date( occurrences[ii] ); 1482 var counter = currentDate.clone(); 1483 1484 var res2 = $.extend( {}, res[i], { 1485 'startDate': currentDate.toString( User.preferences.dateFormat ), 1486 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 1487 } ); 1488 1489 if(res[i].repeat) 1490 res2.repeat = typeRepeat[res[i].repeat.frequency]; 1491 1492 while (counter.compareTo( currentDate ) == 0) { 1493 1494 if (!dates[counter.toString(User.preferences.dateFormat)]) 1495 dates[counter.toString(User.preferences.dateFormat)] = { 1496 startDate:false, 1497 events:[] 1498 }; 1499 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 1500 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 1501 1502 dates[counter.toString(User.preferences.dateFormat)].events.push(res2); 1503 counter.addDays(-1); 1504 } 1505 } 1506 } 1507 res = { 1508 events_list: dates, 1509 count : res.length 1510 }; 1511 } 1512 1513 return notArray ? res[0] : res; 1493 return notArray ? res[0] : res; 1494 } 1495 1496 }); 1497 1498 DataLayer.codec( "schedulable", "list", { 1499 1500 decoder: function( evtObj ){}, 1501 1502 1503 encoder: function( evtObj ){ 1504 if(!(!!evtObj)) 1505 return undefined; 1506 1507 var notArray = false; 1508 1509 if( notArray = $.type(evtObj) !== "array" ) 1510 evtObj = [ evtObj ]; 1511 1512 var pref = User.preferences; 1513 var res = []; 1514 1515 for(var i = 0; i < evtObj.length; i++){ 1516 res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ? 'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 1517 } 1518 1519 if( !notArray ){ 1520 var dates = {}; 1521 var typeRepeat = { 1522 'none': false, 1523 'daily': 'Repetição diária', 1524 'weekly': 'Repetição semanal', 1525 'monthly': 'Repetição mensal', 1526 'yearly': 'repetição anual' 1527 } 1528 1529 for (var i=0; i < res.length; i++) { 1530 1531 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 1532 1533 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 1534 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 1535 1536 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 1537 1538 var occurrences = [ startDate.getTime() ]; 1539 1540 if( res[i].occurrences ) 1541 { 1542 occurrences = res[i].occurrences; 1543 } 1544 1545 for( var ii = 0; ii < occurrences.length; ii++ ) 1546 { 1547 var currentDate = new Date( occurrences[ii] ); 1548 var counter = currentDate.clone(); 1549 1550 var res2 = $.extend( {}, res[i], { 1551 'startDate': currentDate.toString( User.preferences.dateFormat ), 1552 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 1553 } ); 1554 1555 if(res[i].repeat) 1556 res2.repeat = typeRepeat[res[i].repeat.frequency]; 1557 1558 while (counter.compareTo( currentDate ) == 0) { 1559 1560 if (!dates[counter.toString(User.preferences.dateFormat)]) 1561 dates[counter.toString(User.preferences.dateFormat)] = { 1562 startDate:false, 1563 events:[] 1564 }; 1565 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 1566 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 1567 1568 dates[counter.toString(User.preferences.dateFormat)].events.push(res2); 1569 counter.addDays(-1); 1570 } 1571 } 1572 } 1573 res = { 1574 events_list: dates, 1575 count : res.length 1576 }; 1577 } 1578 1579 return notArray ? res[0] : res; 1514 1580 } 1515 1581 … … 1693 1759 1694 1760 var taskEditable = function(idTask){ 1695 for(var i = 0; i < evt.participants.length; i++){ 1696 attendee = DataLayer.get('participant', evt.participants[i]); 1697 if(attendee.user == User.me.id) 1698 return attendee.isOrganizer == '1' ? 1699 { 1700 editable: true, 1701 disableResizing: false, 1702 disableDragging: false, 1703 className: 'fullcalendar-context-menu event-type-2 event-id-'+idTask+' calendar-id-'+calendar.id 1704 } 1705 : 1706 { 1707 editable: false, 1708 disableResizing: true, 1709 disableDragging: true, 1710 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idTask 1711 }; 1712 } 1761 1762 return evt.editable == '1' ? 1763 { 1764 editable: true, 1765 disableResizing: false, 1766 disableDragging: false, 1767 className: 'fullcalendar-context-menu event-type-2 event-id-'+idTask+' calendar-id-'+calendar.id 1768 } 1769 : 1770 { 1771 editable: false, 1772 disableResizing: true, 1773 disableDragging: true, 1774 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idTask 1775 }; 1713 1776 } 1714 1777 1715 1778 var eventEditable = function(idEvent, isRecurrence, Recurrence){ 1716 1779 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 1717 var attendee = {}; 1718 for(var i = 0; i < evt.participants.length; i++){ 1719 attendee = DataLayer.get('participant', evt.participants[i]); 1720 if(attendee.user == User.me.id) 1721 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? 1722 { 1723 selectable: true, 1724 className: 'fullcalendar-context-menu event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 1725 } : { 1726 editable: false, 1727 selectable: true , 1728 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent 1729 }; 1730 } 1731 return { 1732 editable: false, 1733 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id, 1734 selectable: true, 1735 disableDragging: isRecurrence 1736 }; 1737 } 1738 else{ 1780 1781 return (evt.editable == '1' ) ? 1782 { 1783 selectable: true, 1784 className: 'fullcalendar-context-menu event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 1785 } : { 1786 editable: false, 1787 selectable: true , 1788 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent 1789 }; 1790 1791 }else{ 1739 1792 var aclSignature = Calendar.signatureOf[calendar.id].permission; 1740 1793 … … 1799 1852 criteria: function( filter ){ 1800 1853 1801 if( $.type(filter.start) !== 'date' ) 1802 filter.start = new Date( filter.start * 1000 ); 1803 if( $.type(filter.end) !== 'date' ) 1804 filter.end = new Date( filter.end * 1000 ); 1805 1806 var timezone = {}; 1807 for(var i in Calendar.signatureOf) 1808 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 1809 1810 return { 1811 filter: ['AND', 1812 ['OR', 1813 ['AND', 1814 ['>=', 'rangeEnd', filter.start.getTime()], 1815 ['<=', 'rangeEnd', filter.end.getTime()] 1816 ], 1817 ['AND', 1818 ['>=', 'rangeStart', filter.start.getTime()], 1819 ['<=', 'rangeStart', filter.end.getTime()] 1820 ], 1821 ['AND', 1822 ['<=', 'rangeStart', filter.start.getTime()], 1823 ['>=', 'rangeEnd', filter.end.getTime()] 1824 ] 1825 ], 1826 ['IN', 'calendar', $.merge( Calendar.calendarIds, Calendar.groupIds )] 1827 ], 1828 criteria: { 1829 deepness: 2, 1830 timezones: timezone 1831 } 1832 } 1833 } 1854 if( $.type(filter.start) !== 'date' ) 1855 filter.start = new Date( filter.start * 1000 ); 1856 if( $.type(filter.end) !== 'date' ) 1857 filter.end = new Date( filter.end * 1000 ); 1858 1859 var timezone = {}; 1860 for(var i in Calendar.signatureOf) 1861 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 1862 1863 return { 1864 timezones: timezone, 1865 rangeStart: filter.start.getTime(), 1866 rangeEnd: filter.end.getTime(), 1867 calendar: $.merge( [], Calendar.calendarIds, Calendar.groupIds ) 1868 } 1869 } 1834 1870 }); 1835 1871 -
trunk/prototype/modules/calendar/js/helpers.js
r7661 r7702 1964 1964 if(clicked == 'Sim'){ 1965 1965 1966 var schedulable = DataLayer.get('schedulable', ''+eventId);1966 var schedulable = getSchedulable( eventId, ''); 1967 1967 schedulable.calendar = ''+idCalendar; 1968 1968 var schudableDecode = DataLayer.encode( "schedulable:preview", schedulable); … … 1982 1982 1983 1983 function mount_exception(eventID, idException){ 1984 1985 var schedulable = DataLayer.get('schedulable', ''+eventID); 1986 var edit = { 1987 repeat: (DataLayer.get('repeat', schedulable.repeat)) 1988 }; 1984 1985 getSchedulable( eventID.toString() , ''); 1986 var schedulable = DataLayer.get('schedulable', eventID.toString() ) 1987 var edit = { repeat: (DataLayer.get('repeat', schedulable.repeat)) }; 1989 1988 1990 1989 edit.repeat.startTime = new Date(parseInt(edit.repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); … … 2502 2501 case 'basicDay': 2503 2502 case 'agendaDay': 2504 rangeStart = new Date.today().add({ 2505 days: page_index 2506 }).getTime(); 2503 rangeStart = new Date.today().add({ days: page_index }).getTime(); 2507 2504 rangeEnd = rangeStart + 86400000; 2508 2505 break; … … 2510 2507 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2511 2508 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2512 rangeStart = dateStart.add({ 2513 days: (7 * page_index) 2514 }).getTime(); 2515 rangeEnd = dateEnd.add({ 2516 days: (7 * page_index)+7 2517 }).getTime(); 2509 rangeStart = dateStart.add({ days: (7 * page_index) }).getTime(); 2510 rangeEnd = dateEnd.add({ days: (7 * page_index)+7 }).getTime(); 2518 2511 break; 2519 2512 case 'month': 2520 var date = Date.today().add({ 2521 months: page_index 2522 }) 2513 var date = Date.today().add({ months: page_index }) 2523 2514 rangeStart = date.moveToFirstDayOfMonth().getTime(); 2524 2515 rangeEnd = date.moveToLastDayOfMonth().getTime(); 2525 2516 break; 2526 2517 case 'year': 2527 var dateStart = new Date().add({ 2528 years: page_index 2529 }); 2530 var dateEnd = new Date().add({ 2531 years: page_index 2532 }); 2518 var dateStart = new Date().add({ years: page_index }); 2519 var dateEnd = new Date().add({ years: page_index }); 2533 2520 if(dateStart.getMonth() != 0) 2534 dateStart.moveToMonth(0, -1)2521 dateStart.moveToMonth(0, -1) 2535 2522 if(dateEnd.getMonth() != 11) 2536 dateEnd.moveToMonth(11) 2537 rangeStart = dateStart.moveToFirstDayOfMonth().getTime(); 2538 rangeEnd = dateEnd.moveToLastDayOfMonth().getTime(); 2523 dateEnd.moveToMonth(11) 2524 2525 rangeStart = dateStart.moveToFirstDayOfMonth().getTime(); 2526 rangeEnd = dateEnd.moveToLastDayOfMonth().getTime(); 2539 2527 break; 2540 2528 } … … 2542 2530 var timezone = {}; 2543 2531 for(var i in Calendar.signatureOf) 2544 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 2545 2546 return { 2547 filter: ['AND', 2548 ['OR', 2549 ['AND', 2550 ['>=', 'rangeEnd', rangeStart], 2551 ['<=', 'rangeEnd', rangeEnd] 2552 ], 2553 ['AND', 2554 ['>=', 'rangeStart', rangeStart], 2555 ['<=', 'rangeStart', rangeEnd] 2556 ], 2557 ['AND', 2558 ['<=', 'rangeStart', rangeStart], 2559 ['>=', 'rangeEnd', rangeEnd] 2560 ] 2561 ], 2562 ['IN', 'calendar', calerdars_selecteds] 2563 ], 2564 criteria: { 2565 deepness: 2, 2532 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 2533 2534 return { 2535 rangeStart: rangeStart, 2536 rangeEnd: rangeEnd, 2566 2537 order: 'startTime', 2567 timezones: timezone 2568 } 2569 }; 2570 2538 timezones: timezone, 2539 calendar: calerdars_selecteds 2540 }; 2571 2541 } 2572 2542 … … 2581 2551 2582 2552 if(!selecteds && (keyword != '' && keyword != null)){ 2583 2584 2585 2586 2587 2553 jQuery('#'+tab_selector[type] + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2554 '<div title="'+tab_title[type]+'" class="events-list events-list-win active empty">' + 2555 '<label>'+label_noselect_calendar[type]+'</label>' + 2556 '</div>' 2557 ); 2588 2558 }else{ 2589 var criteria = null; 2590 if(keyword == '' || keyword == null) 2591 criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds) 2592 else 2593 criteria = { 2594 filter: ['AND', ['OR', ["i*", "summary", keyword], ["i*", "description", keyword]], ['IN', 'calendar', selecteds]], 2595 criteria: { 2596 searchEvent: true, 2597 order: 'startTime', 2598 offset: (25 * page_index), 2599 limit: (((25 * page_index) + 25) + 1), 2600 deepness: 2 2601 } 2602 }; 2603 var results = DataLayer.get('schedulable:detail', criteria); 2604 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2559 var criteria = null; 2560 if(keyword == '' || keyword == null){ 2561 2562 criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds); 2563 2564 }else{ 2565 2566 var timezone = {}; 2567 for(var i in Calendar.signatureOf) 2568 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 2569 2570 criteria = { 2571 2572 searchEvent: true, 2573 order: 'startTime', 2574 offset: (25 * page_index), 2575 limit: (((25 * page_index) + 25) + 1), 2576 summary: keyword, 2577 description: keyword, 2578 calendar: selecteds, 2579 timezones: timezone 2580 2581 }; 2582 } 2583 2584 var results = DataLayer.encode('schedulable:list', DataLayer.dispatch('modules/calendar/schedules', criteria)); 2585 //var results = DataLayer.get('schedulable:detail', criteria); 2586 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2605 2587 } 2606 2588 // não há resultados … … 2627 2609 $(".event-details-item").parent().click(function(event){ 2628 2610 event.stopImmediatePropagation(); 2629 $(this).siblings("div.details-event-list").toggleClass("hidden") 2611 var container = $(this).siblings("div.details-event-list"); 2612 2613 2614 //lazy data 2615 if( container.hasClass('hidden') ){ 2616 2617 //only first click 2618 if(!container.find('fieldset').length){ 2619 2620 $(this).append( '<span style="width: 20px;" class="load-event-detail"><img style="width: 20px;" src="'+DataLayer.dispatchPath+'/modules/calendar/img/loading.gif"></img></span>'); 2621 2622 var schedulable = container.find('input[name="eventid"]').val(); 2623 schedulable = DataLayer.encode('schedulable:detail', [getSchedulable( schedulable, '' )]); 2624 2625 schedulable = $.isArray( schedulable ) ? schedulable[0] : schedulable; 2626 2627 container.prepend( DataLayer.render( 'templates/event_detail_list.ejs', {'_event': schedulable})); 2628 2629 $(this).find('span.load-event-detail').remove(); 2630 } 2631 } 2632 2633 container.toggleClass("hidden") 2630 2634 .find('.button.delete').click(function(event){ 2631 2635 var eventId = $(this).siblings('[name="eventid"]').val(); … … 2635 2639 }) 2636 2640 .end().find('.button.edit').click(function(event){ 2641 2642 var schedulable = $(this).siblings('[name="eventid"]').val(); 2637 2643 switch($(this).siblings('[name="eventtype"]').val()){ 2644 2638 2645 case '1': 2639 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val()), true );2646 eventDetails( getSchedulable( schedulable, '' ), true ); 2640 2647 break; 2641 2648 case '2': 2642 taskDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val()), true );2649 taskDetails( getSchedulable( schedulable, '' ), true ); 2643 2650 break; 2644 2651 case '3': 2645 activityDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val()), true );2652 activityDetails( getSchedulable( schedulable, '' ), true ); 2646 2653 break; 2647 2654 } … … 2829 2836 type = $('.calendar-copy-move input[name="typeEvent"]').val(); 2830 2837 2831 var schedulable = DataLayer.get('schedulable', event+''); 2838 getSchedulable(event,''); 2839 var schedulable = DataLayer.get('schedulable', event.toString()); 2832 2840 schedulable['class'] = '1'; 2833 2841 … … 2843 2851 2844 2852 schedulable.lastCalendar = schedulable.calendar; 2845 schedulable.calendar = calendar;2853 schedulable.calendar = calendar; 2846 2854 DataLayer.put('schedulable', schedulable); 2847 2855 … … 2868 2876 delete repeat.schedulable; 2869 2877 delete repeat.id; 2870 repeat.startTime = new Date(parseInt(repeat.startTime)).toString('yyyy-MM-dd HH:mm:00');2871 repeat.endTime = new Date(parseInt(repeat.endTime)).toString('yyyy-MM-dd HH:mm:00');2878 repeat.startTime = repeat.startTime == '' ? '' : new Date(parseInt(repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); 2879 repeat.endTime = repeat.endTime == '' ? '' : new Date(parseInt(repeat.endTime)).toString('yyyy-MM-dd HH:mm:00'); 2872 2880 2873 2881 var exceptions = DataLayer.get('repeatOccurrence', { … … 2892 2900 delete schedulable.occurrences; 2893 2901 2894 schedulable.calendar = DataLayer.copy(calendar); 2902 schedulable.calendar = DataLayer.copy(calendar); 2895 2903 2896 2904 var participants = DataLayer.copy(schedulable.participants); … … 2925 2933 return newSchedulable; 2926 2934 } 2927 newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - ( newSchedulable.allDay ? 86400000 : 0)).toString('yyyy-MM-dd hh:mm:00');2928 newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');2935 newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - (parseInt(newSchedulable.allDay) ? 86400000 : 0)).toString('yyyy-MM-dd HH:mm:00'); 2936 newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd HH:mm:00'); 2929 2937 2930 2938 DataLayer.put('schedulable', newSchedulable); -
trunk/prototype/modules/calendar/js/init.js
r7653 r7702 15 15 }, 16 16 show: function( event, ui ){ 17 delete Calendar.currentViewKey; 18 $('#calendar').fullCalendar('refetchEvents'); 17 18 if( $('#tabs').tabs('option' ,'selected') == 0){ 19 delete Calendar.currentViewKey; 20 $('#calendar').fullCalendar('refetchEvents'); 21 } 19 22 } 20 23 }) … … 397 400 eventDrop: function( evt, event, view ){ 398 401 evt.id = evt.id.split('-')[0]; 399 402 if(!evt.disableDragging){ 400 403 401 402 404 if(evt.isRepeat){ 405 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt); 403 406 404 405 406 407 407 var repeat = mount_exception(evt.id, evt.occurrence); 408 DataLayer.remove('repeat', false); 409 DataLayer.put('repeat', repeat); 410 DataLayer.commit('repeat', false, function(data){ 408 411 409 DataLayer.remove('schedulable', repeat.schedulable, false);410 412 DataLayer.remove('schedulable', repeat.schedulable, false); 413 DataLayer.put('schedulable', schedulable); 411 414 412 413 414 }else{415 416 417 event.editable = false;418 event.className = "blocked-event";419 calendar.fullCalendar( 'updateEvent', evt );420 415 }); 416 417 }else{ 418 DataLayer.put( "schedulable:calendar", evt ); 419 420 event.editable = false; 421 event.className = "blocked-event"; 422 calendar.fullCalendar( 'updateEvent', evt ); 423 } 421 424 422 425 }else 423 426 Calendar.rerenderView(true); 424 427 }, 425 428 426 429 eventResize: function( evt, event, view ){ 427 430 evt.id = evt.id.split('-')[0]; 428 431 if(!evt.disableDragging){ 429 if(evt.isRepeat){ 430 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt); 431 432 //Normaliza a data para o backend 433 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00'); 434 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00'); 435 436 var repeat = mount_exception(evt.id, evt.occurrence); 437 438 DataLayer.remove('repeat', false); 439 DataLayer.put('repeat', repeat); 440 DataLayer.commit('repeat', false, function(data){ 441 442 DataLayer.remove('schedulable', repeat.schedulable, false); 443 DataLayer.put('schedulable', schedulable); 444 445 }); 446 }else{ 447 DataLayer.put( "schedulable:calendar", evt ); 448 evt.editable = false; 449 evt.className = "blocked-event"; 450 calendar.fullCalendar( 'updateEvent', evt ); 451 } 432 if(evt.isRepeat){ 433 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt); 434 435 //Normaliza a data para o backend 436 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00'); 437 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00'); 438 439 var repeat = mount_exception(evt.id, evt.occurrence); 440 441 DataLayer.remove('repeat', false); 442 DataLayer.put('repeat', repeat); 443 DataLayer.commit('repeat', false, function(data){ 444 445 DataLayer.remove('schedulable', repeat.schedulable, false); 446 DataLayer.put('schedulable', schedulable); 447 448 }); 449 }else{ 450 451 DataLayer.put( "schedulable:calendar", evt ); 452 evt.editable = false; 453 evt.className = "blocked-event"; 454 calendar.fullCalendar( 'updateEvent', evt ); 455 } 452 456 453 457 }else … … 469 473 'onClose': function(clicked) { 470 474 if(clicked == 'Editar todas ocorrências') { 471 eventDetails( DataLayer.get( "schedulable", evt.id), true); 475 476 eventDetails( getSchedulable(evt.id, ''), true); 477 472 478 }else if (clicked == 'Editar essa ocorrência'){ 473 479 /* … … 485 491 }); 486 492 }else{ 487 var schedulable = DataLayer.get( "schedulable", evt.id);493 var schedulable = getSchedulable(evt.id, ''); 488 494 schedulable.calendar = evt.calendar; 489 495 eventDetails( schedulable, true); 490 496 } 491 492 493 494 var task = DataLayer.get( "schedulable", evt.id);495 496 497 498 499 var activity = DataLayer.get( "schedulable", evt.id);500 501 502 497 } 498 break; 499 case 2: 500 var task = getSchedulable(evt.id, ''); 501 task.group = evt.calendar; 502 taskDetails( task, true); 503 break; 504 case 3: 505 var activity = getSchedulable(evt.id, ''); 506 activity.group = evt.calendar; 507 activityDetails( activity, true); 508 break; 503 509 } 504 510 }, … … 558 564 }); 559 565 566 function getSchedulable(id, codec){ 567 568 var schedule = DataLayer.get(('schedulable' + (codec != '' ? ':'+codec : '')), id, false ); 569 570 if(schedule == false) 571 DataLayer.get(('schedulable' + (codec != '' ? ':'+codec : '')), {filter: ['id', '=', id], criteria: {deepness: 2, findOne: 1, schedulable: id}} ); 572 573 return DataLayer.get(('schedulable' + (codec != '' ? ':'+codec : '')), id.toString()); 574 } 560 575 561 576 function useDesktopNotification(){ -
trunk/prototype/modules/calendar/js/load.js
r7599 r7702 13 13 14 14 DataLayer.task( this.clookRefresh , function(){ 15 Calendar.rerenderView(true); 15 16 DataLayer.remove('schedulable', false); 17 Calendar.rerenderView(true); 16 18 }); 17 19 } -
trunk/prototype/modules/calendar/templates/event_list.ejs
r7022 r7702 6 6 7 7 <div title="<%=data.tab_title%>" class="events-list events-list-win active"> 8 9 10 <div class="events-list pagination"> 8 9 10 <div class="events-list pagination"> 11 11 <input name="results" type="hidden" value="<%=data.count%>"></input> 12 12 <input name="page_index" type="hidden" value="<%=data.page_index%>"></input> … … 37 37 <% } %> 38 38 <% } else { %> 39 <tr> 39 <tr> 40 40 <% if (j>0) %> 41 41 <!-- coluna 1 - evento unico na mesma data --> 42 42 <th width='100' class="start-date"> 43 <span><%= data.events_list[i].startDate %></span> <% 43 <span><%= data.events_list[i].startDate %></span> <% 44 44 } %> 45 45 </th> … … 108 108 </span> 109 109 <div class="details-event-list hidden <%= (title_type == "Evento" ? "details-event" : "details-task") %>"> 110 <fieldset class="fields-details-event-list"> 111 <%if(_event.allDay){%> 112 <p class="input-group date-info"> 113 <label>Duração:</label> 114 <span class="">Dia inteiro</span> 115 </p> 116 <%}else{%> 117 118 <p class="input-group date-info"> 119 <label>Início:</label> 120 <span class=""><%= _event.startDate %> às </span> 121 <span class=""><%= _event.startHour %></span> 122 123 </p> 124 <p class="input-group"> 125 <label>Término:</label> 126 <span class=""><%= _event.endDate %> às </span> 127 <span class=""><%= _event.endHour %></span> 128 <span><%= _event.timeZone %></span> 129 </p> 130 <%}%> 131 <%if(_event.type == '1'){ 132 if(_event.repeat ){%> 133 <p class="input-group"> 134 <label>Repetição</label> 135 <span><%= _event.repeat %></span> 136 </p> 137 <%}}%> 138 <p class="input-group"> 139 <label>Lembretes:</label> 140 <% if(_event.alarms) { 141 var string_alarm = ""; 142 if(_event.type == '1') 143 string_alarm = 'do evento'; 144 if(_event.type == '2') 145 string_alarm = 'da tarefa'; 146 if(_event.type == '3') 147 string_alarm = 'da atividade'; 148 %> 149 <span class="large" > 150 <% for (var l=0; l < _event.alarms.length; l++) { %> 151 <span class="large" >Você será notificado por um <%=dateCalendar.alarmtype[_event.alarms[l].type]%> <%= _event.alarms[l].time %> <%= dateCalendar.timeunit[_event.alarms[l].unit]%><%=_event.alarms[l].time > 1 ? 's' : '' %> antes <%=string_alarm%></span> 152 <% } %> 153 </span> 154 <% } %> 155 </p> 156 <%if(_event.type == '1'){%> 157 <p class="input-group"> 158 <label>Local:</label> 159 <span><%= _event.location %></span> 160 </p> 161 <%}%> 162 <p class="input-group"> 163 <label>Descrição:</label> 164 <span class="large" ><%= _event.description %></span> 165 </p> 166 <%if(_event.type != '1'){%> 167 <p class="input-group"> 168 <label>Prioridade:</label> 169 <span><%= decoder['priority'][_event.priority] %></span> 170 </p> 171 <p class="input-group"> 172 <label>% Conlusão:</label> 173 <span><%= _event.percentage %>%</span> 174 </p> 175 <p class="input-group"> 176 <label>Status:</label> 177 <span><%= decoder['status'][_event.status] %></span> 178 </p> 179 <% } %> 180 <!-- <p class="input-group"> 181 <label>Privacidade</label> 182 <span><%= _event.privacy %></span> 183 </p> --> 184 <%if(_event.organizer && _event.organizer.user){%> 185 <p class="input-group"> 186 <label>Organizador:</label> 187 <span class="large"><%= _event.organizer.user ? _event.organizer.user.name : _event.organizer.name %> (<%= _event.organizer.user ? _event.organizer.user.mail : _event.organizer.mail %>)</span> 188 </p> 189 <%}%> 190 <%if(_event.type != '3'){%> 191 <p class="input-group"> 192 <label>Participantes:</label> 193 <% if(_event.attendee) { %> 194 <span class="large" > 195 <% for (var m=0; m < _event.attendee.length; m++) { %> 196 <span class="large"><%=_event.attendee[m].name%> (<%= _event.attendee[m].mail %>)</span> 197 <%}%> 198 </span> 199 <% } %> 200 </p> 201 <%} 202 if(_event.type == '3'){%> 203 <p class="input-group"> 204 <label>Tarefas</label> 205 <% if(_event.tasks) { %> 206 <span class="large" > 207 <% for (var m in _event.tasks) { %> 208 <span class="large"><%=_event.tasks[m].description%></span> 209 <%}%> 210 </span> 211 <% } %> 212 </p> 213 <%}%> 214 215 <p class="input-group"> 216 <label>Presença:</label> 217 <span> 218 <% var status_name; 219 if (_event.status == 1) 220 status_name = "Eu vou"; 221 else if (_event.status == 2) 222 status_name = "Talvez"; 223 else if (_event.status == 3) 224 status_name = "Eu não vou"; 225 %> 226 <%= status_name %> 227 </span> <!-- Ta hardcodificado isso aqui? --> 228 </p> 229 230 </fieldset> 231 <div class="menu-container footer-container"> 232 <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 233 <input name="eventtype" type="hidden" value="<%=_event.type%>"></input> 234 <input name="calendarid" type="hidden" value="<%=_event.calendar ? _event.calendar : _event.group%>"></input> 235 <a title="Imprimir" class="button print" href="#">Imprimir</a> 236 <a title="Excluir" class="button delete" href="#">Excluir</a> 237 <a title="Editar" class="button edit" href="#">Editar</a> 238 </div> 110 <div class="menu-container footer-container"> 111 <input name="eventid" type="hidden" value="<%=_event.id%>"/> 112 <input name="eventtype" type="hidden" value="<%=_event.type%>"/> 113 <input name="calendarid" type="hidden" value="<%=_event.calendar ? _event.calendar : _event.group%>"/> 114 <a title="Imprimir" class="button print" href="#">Imprimir</a> 115 <a title="Excluir" class="button delete" href="#">Excluir</a> 116 <a title="Editar" class="button edit" href="#">Editar</a> 117 </div> 239 118 </div> 240 119 -
trunk/prototype/services/iCal.php
r7695 r7702 64 64 if (( isset($v['repeat']) ) && ( isset($v['repeat']['frequency']) && $v['repeat']['frequency'] && $v['repeat']['frequency'] != 'none' )) 65 65 $vevent->setProperty('rrule', $this->formatIcalRepeat($v['repeat'])); 66 66 67 $vevent->setProperty('dtstamp', array('timestamp' => ($v['dtstamp'] / 1000) )); 67 68 68 69 if (isset($v['allDay']) && $v['allDay'] == 1) … … 200 201 $eTime->setTimezone($apTimezoneOBJ); 201 202 203 $vevent->setProperty('dtstamp', array('timestamp' => ($v['dtstamp'] / 1000) )); 204 202 205 if (isset($v['allDay']) && $v['allDay'] == 1) { 203 206 $todo->setProperty('dtstart', $sTime->format(DATE_RFC822), array("VALUE" => "DATE")); … … 281 284 $vevent->setProperty('location', $v['location']); 282 285 $vevent->setProperty('tranp', (isset($v['tranparent']) && $v['tranparent'] == TRANSP_TRANSPARENT ) ? 'TRANSPARENT' : 'OPAQUE' ); 286 287 $vevent->setProperty('dtstamp', array('timestamp' => ($v['dtstamp'] / 1000) )); 283 288 284 289 $timezone = new DateTimeZone('UTC'); … … 348 353 $todo->setProperty('status', $this->_getStatusTodo($v['status'])); 349 354 355 $vevent->setProperty('dtstamp', array('timestamp' => ($v['dtstamp'] / 1000) )); 356 350 357 $timezone = new DateTimeZone('UTC'); 351 358 $apTimezone = self::nomalizeTZID(( isset($v['timezone']) && $v['timezone'] != 'null' ) ? $v['timezone'] : $params['defaultTZI']); … … 543 550 case 'VEVENT': 544 551 552 545 553 switch ($method) { 546 554 case 'PUBLISH': … … 610 618 //Verifica a importação de eventos em que não participo 611 619 if ($pID) { 620 612 621 $interation['participant://' . $pID]['status'] = $params['status']; 622 613 623 } 614 624 } … … 848 858 break; 849 859 } 850 851 860 852 861 $return[] = $interation; 853 862 break; … … 1562 1571 $objTimezone = new DateTimeZone($schedulable['timezone']); 1563 1572 1564 if (isset($startTime['params']['VALUE']) && $startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone'])) {1573 if (isset($startTime['params']['VALUE']) && $startTime['params']['VALUE'] === 'DATE' ) { 1565 1574 $schedulable['allDay'] = 1; 1566 1575 $schedulable['startTime'] = self::date2timestamp($startTime['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($startTime['value'])) . '000'; … … 1667 1676 $intUser = Controller::find(array('concept' => 'user'), array('id', 'isExternal'), array('filter' => array('OR', array('=', 'mail', $mailUser), array('=', 'mailAlternateAddress', $mailUser)))); 1668 1677 1669 1678 $user = null; 1670 1679 if ($intUser && count($intUser) > 0) { 1671 1680 $participant['isExternal'] = isset($intUser[0]['isExternal']) ? $intUser[0]['isExternal'] : 0; … … 1689 1698 1690 1699 if ($property = $component->getProperty('organizer', FALSE, TRUE)) { 1691 $participant = array(); 1700 1692 1701 $mailUser = trim(str_replace('MAILTO:', '', $property['value'])); 1693 1702 1694 $participantID = mt_rand() . '2(Formatter)'; 1695 1696 $participant['schedulable'] = $eventID; 1697 $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 1698 $participant['isOrganizer'] = '1'; 1699 $participant['acl'] = 'rowi'; 1703 1704 if($participant = self::_getParticipantByMail($mailUser, $schedulable['participants'], true)){ 1705 1706 $participantID = $participant['id']; 1707 1708 }else{ 1709 1710 $participant = array(); 1711 1712 $participantID = mt_rand() . '2(Formatter)'; 1713 $participant['schedulable'] = $eventID; 1714 $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 1715 $participant['isOrganizer'] = '1'; 1716 $participant['acl'] = 'rowi'; 1717 } 1700 1718 1701 1719 /* Verifica se este usuario é um usuario interno do ldap */ 1702 1720 $intUser = Controller::find(array('concept' => 'user'), array('id', 'isExternal'), array('filter' => array('OR', array('=', 'mail', $mailUser), array('=', 'mailAlternateAddress', $mailUser)))); 1703 1704 1721 $user = null; 1705 1722 if ($intUser && count($intUser) > 0) { 1706 1707 1723 $participant['isExternal'] = isset($intUser[0]['isExternal']) ? $intUser[0]['isExternal'] : 0; 1724 $participant['user'] = $intUser[0]['id']; 1708 1725 } else { 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1726 $participant['isExternal'] = 1; 1727 /* Gera um randon id para o contexto formater */ 1728 $userID = mt_rand() . '4(Formatter)'; 1729 1730 $user['mail'] = $mailUser; 1731 $user['name'] = ( isset($property['params']['CN']) ) ? $property['params']['CN'] : ''; 1732 $user['participants'] = array($participantID); 1733 $user['isExternal'] = '1'; 1734 $participant['user'] = $userID; 1735 $interation['user://' . $userID] = $user; 1719 1736 } 1720 1737 … … 1828 1845 $interation['schedulable://' . $eventID] = $schedulable; 1829 1846 1830 1847 return $interation; 1831 1848 } 1832 1849 … … 1956 1973 $mailUser = trim(str_replace('MAILTO:', '', $property['value'])); 1957 1974 1958 $participantID = mt_rand() . '2(Formatter)'; 1959 1960 $participant['schedulable'] = $todoID; 1961 $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 1962 $participant['isOrganizer'] = '1'; 1963 $participant['acl'] = 'rowi'; 1975 if($participant = self::_getParticipantByMail($mailUser, $schedulable['participants'], true)){ 1976 1977 $participantID = $participant['id']; 1978 1979 }else{ 1980 1981 $participant = array(); 1982 1983 $participantID = mt_rand() . '2(Formatter)'; 1984 $participant['schedulable'] = $todoID; 1985 $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 1986 $participant['isOrganizer'] = '1'; 1987 $participant['acl'] = 'rowi'; 1988 } 1964 1989 1965 1990 /* Verifica se este usuario é um usuario interno do ldap */
Note: See TracChangeset
for help on using the changeset viewer.