- Timestamp:
- 04/30/12 15:42:36 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/interceptors/DBMapping.php
r6011 r6066 1 1 <?php 2 2 3 //Definindo Constantes 3 require_once ROOTPATH .'/modules/calendar/constants.php';4 5 require_once ROOTPATH .'/modules/calendar/interceptors/Helpers.php';6 7 class DBMapping extends Helpers { 8 9 public function encodeCreateSchedulable( &$uri , &$params , &$criteria , $original ){4 require_once ROOTPATH . '/modules/calendar/constants.php'; 5 6 require_once ROOTPATH . '/modules/calendar/interceptors/Helpers.php'; 7 8 class DBMapping extends Helpers { 9 10 public function encodeCreateSchedulable(&$uri, &$params, &$criteria, $original) { 10 11 $params['type_id'] = EVENT_ID; 11 12 12 if(!is_numeric($params['startTime']) ) 13 $params['startTime'] = self::parseTimeDate( $params['startTime'], $params['timezone'] ); 14 15 if (!is_numeric($params['endTime'])){ 16 $params['endTime'] = self::parseTimeDate( $params['endTime'], $params['timezone'] ); 17 18 if($params['allDay']) 19 $params['endTime'] = $params['endTime'] + 86400000; 20 } 21 // if( !isset( $new['repeat'] )) 22 // $new['range_end'] = '7287926400'; // 12/12/2200 23 // else 24 $params['rangeEnd'] = $params['endTime']; 25 $params['rangeStart'] = $params['startTime']; 26 27 /////////////////////////////////////////////////////////////////// 28 29 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] :time().'000'; 30 $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] :time().'000'; 31 $params['type'] = EVENT_ID; 32 $params['uid'] = isset($params['uid']) ? $params['uid'] : $this->_makeUid(); 33 } 34 35 static function parseTimeDate($time, $timezone){ 36 return strtotime( $time . ' ' .$timezone).'000'; 37 } 38 39 public function encodeCreateAlarm( &$uri , &$params , &$criteria , $original ){ 40 41 if(!isset($params['schedulable']) || !isset($params['rangeStart']) || !isset($params['rangeEnd']) ) 42 { 43 $participant = Controller::read( array( 'concept' => 'participant' , 'id' => $params['participant'] ) , array('schedulable') ); 44 $schedulable = Controller::read( array( 'concept' => 'schedulable' , 'id' => $participant['schedulable'] ) , array('startTime' , 'endTime' ) ); 45 46 $params['schedulable'] = $participant['schedulable']; 47 $params['rangeStart'] = strtotime('- '.$params['time'].' '.self::codeAlarmUnit($params['unit']) , (int)($schedulable['startTime'] / 1000)).'000'; 48 $params['rangeEnd'] = $schedulable['endTime']; 49 } 50 51 $params['type'] = self::codeAlarmType($params['type']); 52 53 } 54 55 public function encodeCreateSuggestion( &$uri , &$params , &$criteria , $original ){ 56 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] :time().'000'; 57 } 58 59 public function encodeUpdateAlarm( &$uri , &$params , &$criteria , $original ){ 60 if(isset($params['type'])) 61 $params['type'] = self::codeAlarmType($params['type']); 62 } 63 64 public function encodeCreateAttachment( &$uri , &$params , &$criteria , $original ){ 65 66 if(!isset($params['source'])) return false; 67 68 if(isset($_FILES[$params['source']])) 69 if(isset($params['id'])) 70 $params = array_merge($_FILES[$params['source']], array('id' => $params['id'])); 71 else 72 $params = $_FILES[$params['source']]; 73 74 if(isset($params['owner'])) 75 $params['owner'] = Config::me('uidNumber'); 76 77 } 13 if (!is_numeric($params['startTime'])) 14 $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 15 16 if (!is_numeric($params['endTime'])) { 17 $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 18 19 if ($params['allDay']) 20 $params['endTime'] = $params['endTime'] + 86400000; 21 } 22 // if( !isset( $new['repeat'] )) 23 // $new['range_end'] = '7287926400'; // 12/12/2200 24 // else 25 $params['rangeEnd'] = $params['endTime']; 26 $params['rangeStart'] = $params['startTime']; 27 28 /////////////////////////////////////////////////////////////////// 29 30 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 31 $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 32 $params['type'] = EVENT_ID; 33 $params['uid'] = isset($params['uid']) ? $params['uid'] : $this->_makeUid(); 34 } 35 36 static function parseTimeDate($time, $timezone) { 37 return strtotime($time . ' ' . $timezone) . '000'; 38 } 39 40 public function encodeCreateAlarm(&$uri, &$params, &$criteria, $original) { 41 42 if (!isset($params['schedulable']) || !isset($params['rangeStart']) || !isset($params['rangeEnd'])) { 43 $participant = Controller::read(array('concept' => 'participant', 'id' => $params['participant']), array('schedulable')); 44 $schedulable = Controller::read(array('concept' => 'schedulable', 'id' => $participant['schedulable']), array('startTime', 'endTime')); 45 46 $params['schedulable'] = $participant['schedulable']; 47 $params['rangeStart'] = strtotime('- ' . $params['time'] . ' ' . self::codeAlarmUnit($params['unit']), (int) ($schedulable['startTime'] / 1000)) . '000'; 48 $params['rangeEnd'] = $schedulable['endTime']; 49 } 50 51 $params['type'] = self::codeAlarmType($params['type']); 52 } 53 54 public function encodeCreateSuggestion(&$uri, &$params, &$criteria, $original) { 55 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 56 } 57 58 public function encodeUpdateAlarm(&$uri, &$params, &$criteria, $original) { 59 if (isset($params['type'])) 60 $params['type'] = self::codeAlarmType($params['type']); 61 } 62 63 public function encodeCreateAttachment(&$uri, &$params, &$criteria, $original) { 64 65 if (!isset($params['source'])) 66 return false; 67 68 if (isset($_FILES[$params['source']])) 69 if (isset($params['id'])) 70 $params = array_merge($_FILES[$params['source']], array('id' => $params['id'])); 71 else 72 $params = $_FILES[$params['source']]; 73 74 if (isset($params['owner'])) 75 $params['owner'] = Config::me('uidNumber'); 76 } 78 77 79 78 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 80 81 public function encodeSignatureAlarmType( &$uri , &$params , &$criteria , $original ){ 82 $params['type'] = self::codeAlarmType($params['type']); 83 } 84 85 86 public function insertOwnerLink (&$uri , &$params , &$criteria , $original ){ 87 $params['owner'] = Config::me('uidNumber'); 88 } 89 90 public function encodeServiceUser (&$uri , &$params , &$criteria , $original ){ 91 if(isset($params['isExternal']) && $params['isExternal'] == '1') 92 $uri['service'] = 'PostgreSQL'; 93 } 94 95 public function prepareRepeat(&$uri , &$params , &$criteria , $original ){ 96 97 if( isset($params['startTime']) || isset($params['endTime']) ) 98 { 99 $timezone = Controller::read( array( 'concept' => 'schedulable', 'id' => $params['schedulable'] ), array('timezone') ); 100 101 if( isset($params['startTime']) ) 102 $params['startTime'] = self::parseTimeDate( $params['startTime'], $timezone['timezone'] ); 103 if( isset($params['endTime']) ) 104 $params['endTime'] = self::parseTimeDate( $params['endTime'], $timezone['timezone'] ); 105 } 106 } 107 108 public function findSchedulable( &$uri , &$params , &$criteria , $original ) 109 { 110 if(isset($criteria['filter'][3][1]) && $criteria['filter'][3][1] == 'calendar') 111 { 112 $start = $criteria['filter'][1][2]; 113 $end = $criteria['filter'][2][2]; 114 115 $ids = array(); 116 $occ = array(); 117 118 if( $occurrences = self::checkOccurrences( $start, $end ) ) 119 foreach( $occurrences as $id => $occurrence ) 120 { 121 $ids[] = $id; 122 $occ[] = $occurrence; 123 } 124 125 $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", calendar_object.dtstart as "startTime", calendar_object.summary as "summary", calendar_object.description as "description", calendar_object.dtend as "endTime" , calendar_object.location as "location", calendar_object.allday as "allDay", calendar_object.transp as "transparent", calendar_object.class_id as "class", calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart",calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as calendar FROM calendar_to_calendar_object , calendar_object WHERE (range_start >= \''.$start.'\' AND range_end <= \''.$end.'\' AND calendar_to_calendar_object.calendar_id IN (\''. implode('\',\'', $criteria['filter'][3][2]).'\')) AND calendar_to_calendar_object.calendar_object_id = calendar_object.id'.( !empty($ids) ? ' AND calendar_object.id NOT IN (\'' .implode( '\',\'', $ids ). '\')' : ''); 126 127 $params = Controller::service('PostgreSQL')->execResultSql($sql); 128 129 $params = array_merge( $params, $occ ); 130 $params = self::deepnessFindEvent( $uri , $params , $criteria , $original); 131 132 return false; 133 } 134 } 135 136 public function deepnessFindRepeatOccurrence( &$uri , &$result , &$criteria , $original ) 137 { 138 139 if( !isset($criteria['deepness']) || $criteria['deepness'] == 0 ) 140 return; 141 142 foreach( $result as $i => &$res ) 143 if( isset($res['repeat']) ) 144 $res['repeat'] = Controller::read( array( 'concept' => 'repeat', 'id' => $res['repeat'] ), false, array( 'deepness' => intval( $criteria['deepness'] ) - 1 ) ); 145 } 146 147 public function deepnessRepeat( &$uri , &$result , &$criteria , $original ) 148 { 149 150 if( !isset($criteria['deepness']) || $criteria['deepness'] == 0 ) 151 return; 152 153 $result['schedulable'] = Controller::find( array( 'concept' => 'schedulable' ), false, array( 'filter' => array( '=', 'id', $result['schedulable'] ), 'deepness' => intval( $criteria['deepness'] ) - 1 ) ); 79 80 public function encodeSignatureAlarmType(&$uri, &$params, &$criteria, $original) { 81 $params['type'] = self::codeAlarmType($params['type']); 82 } 83 84 public function insertOwnerLink(&$uri, &$params, &$criteria, $original) { 85 $params['owner'] = Config::me('uidNumber'); 86 } 87 88 public function encodeServiceUser(&$uri, &$params, &$criteria, $original) { 89 if (isset($params['isExternal']) && $params['isExternal'] == '1') 90 $uri['service'] = 'PostgreSQL'; 91 } 92 93 public function prepareRepeat(&$uri, &$params, &$criteria, $original) { 94 95 if (isset($params['startTime']) || isset($params['endTime'])) { 96 $timezone = Controller::read(array('concept' => 'schedulable', 'id' => $params['schedulable']), array('timezone')); 97 98 if (isset($params['startTime'])) 99 $params['startTime'] = self::parseTimeDate($params['startTime'], $timezone['timezone']); 100 if (isset($params['endTime'])) 101 $params['endTime'] = self::parseTimeDate($params['endTime'], $timezone['timezone']); 102 } 103 } 104 105 public function findSchedulable(&$uri, &$params, &$criteria, $original) { 106 if (isset($criteria['filter'][3][1]) && $criteria['filter'][3][1] == 'calendar') { 107 $start = $criteria['filter'][1][2]; 108 $end = $criteria['filter'][2][2]; 109 110 $ids = array(); 111 $occ = array(); 112 113 if ($occurrences = self::checkOccurrences($start, $end)) 114 foreach ($occurrences as $id => $occurrence) { 115 $ids[] = $id; 116 $occ[] = $occurrence; 117 } 118 119 $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", calendar_object.dtstart as "startTime", calendar_object.summary as "summary", calendar_object.description as "description", calendar_object.dtend as "endTime" , calendar_object.location as "location", calendar_object.allday as "allDay", calendar_object.transp as "transparent", calendar_object.class_id as "class", calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart",calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as calendar FROM calendar_to_calendar_object , calendar_object WHERE (range_start >= \'' . $start . '\' AND range_end <= \'' . $end . '\' AND calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][3][2]) . '\')) AND calendar_to_calendar_object.calendar_object_id = calendar_object.id' . (!empty($ids) ? ' AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\')' : ''); 120 121 $params = Controller::service('PostgreSQL')->execResultSql($sql); 122 123 $params = array_merge($params, $occ); 124 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 125 126 return false; 127 } 128 } 129 130 public function deepnessFindRepeatOccurrence(&$uri, &$result, &$criteria, $original) { 131 132 if (!isset($criteria['deepness']) || $criteria['deepness'] == 0) 133 return; 134 135 foreach ($result as $i => &$res) 136 if (isset($res['repeat'])) 137 $res['repeat'] = Controller::read(array('concept' => 'repeat', 'id' => $res['repeat']), false, array('deepness' => intval($criteria['deepness']) - 1)); 138 } 139 140 public function deepnessRepeat(&$uri, &$result, &$criteria, $original) { 141 142 if (!isset($criteria['deepness']) || $criteria['deepness'] == 0) 143 return; 144 145 $result['schedulable'] = Controller::find(array('concept' => 'schedulable'), false, array('filter' => array('=', 'id', $result['schedulable']), 'deepness' => intval($criteria['deepness']) - 1)); 154 146 $result['schedulable'] = $result['schedulable'][0]; 155 }156 157 public function saveOccurrences( &$uri , &$result , &$criteria , $original ){158 $ranges = Controller::find( array( 'concept' => 'repeatRange' ), array( 'rangeStart', 'rangeEnd' ), array( 'filter' => array( '=', 'user', Config::me("uidNumber") ) ));159 160 if ( !is_array( $ranges ) || !isset( $ranges[0]['rangeStart'] ) || !isset( $ranges[0]['rangeEnd'] ))147 } 148 149 public function saveOccurrences(&$uri, &$result, &$criteria, $original) { 150 $ranges = Controller::find(array('concept' => 'repeatRange'), array('rangeStart', 'rangeEnd'), array('filter' => array('=', 'user', Config::me("uidNumber")))); 151 152 if (!is_array($ranges) || !isset($ranges[0]['rangeStart']) || !isset($ranges[0]['rangeEnd'])) 161 153 return; 162 154 163 if ( isset( $result['id'] ))164 155 if (isset($result['id'])) 156 $id = $result['id']; 165 157 else 166 $id = $uri['id'];167 168 $repeat = Controller::read( array( 'concept' => 'repeat', 'id' => $id ));169 170 unset( $repeat['schedulable']);171 unset( $repeat['id']);158 $id = $uri['id']; 159 160 $repeat = Controller::read(array('concept' => 'repeat', 'id' => $id)); 161 162 unset($repeat['schedulable']); 163 unset($repeat['id']); 172 164 173 165 $exceptions = array(); 174 166 175 if( isset( $original['properties']['exceptions'] ) ) 176 { 177 $exceptions = explode( ',', $original['properties']['exceptions'] ); 178 unset( $repeat['exceptions'] ); 179 } 180 181 $lastExceptions = Controller::find( array( 'concept' => 'repeatOccurrence' ), array("occurrence") , array( 'filter' => array('AND', array( '=', 'repeat', $id ) , array( '=', 'exception', 1 ) ) )); 182 183 //Recurepa as execeções anteriores caso exista 184 if(isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 185 foreach($lastExceptions as $key => $value) 186 array_push($exceptions, $lastExceptions[$key]['occurrence']); 187 188 $params = array_diff( self::decodeRepeat( $repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd'] ), $exceptions ); 189 190 Controller::delete( array( 'concept' => 'repeatOccurrence' ), false, array( 'filter' => array( '=', 'repeat', $id ) ) ); 191 192 if( !empty($params) ) 193 Controller::service('PostgreSQL')->execResultSql( "INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES('".$id."','0','".implode( "'),('".$id."','0','", $params )."')".( empty($exceptions) ? "" : ",('".$id."','1','".implode( "'),('".$id."','1','", $exceptions )."')" ) ); 194 } 195 196 public function checkOccurrences( $start, $end ){ 197 198 $ranges = Controller::find( array( 'concept' => 'repeatRange' ), array( 'rangeStart', 'rangeEnd' ), array( 'filter' => array( '=', 'user', Config::me("uidNumber") ) ) ); 167 if (isset($original['properties']['exceptions'])) { 168 $exceptions = explode(',', $original['properties']['exceptions']); 169 unset($repeat['exceptions']); 170 } 171 172 $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1)))); 173 174 //Recurepa as execeções anteriores caso exista 175 if (isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 176 foreach ($lastExceptions as $key => $value) 177 array_push($exceptions, $lastExceptions[$key]['occurrence']); 178 179 $params = array_diff(self::decodeRepeat($repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd']), $exceptions); 180 181 Controller::delete(array('concept' => 'repeatOccurrence'), false, array('filter' => array('=', 'repeat', $id))); 182 183 if (!empty($params)) 184 Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES('" . $id . "','0','" . implode("'),('" . $id . "','0','", $params) . "')" . ( empty($exceptions) ? "" : ",('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" )); 185 } 186 187 public function checkOccurrences($start, $end) { 188 189 $ranges = Controller::find(array('concept' => 'repeatRange'), array('rangeStart', 'rangeEnd'), array('filter' => array('=', 'user', Config::me("uidNumber")))); 199 190 $ranges = $ranges[0]; 200 191 … … 202 193 $origEnd = $end; 203 194 204 if( $initialized = (isset($ranges['rangeStart']) && isset($ranges['rangeEnd'])) ) 205 { 206 if( $ranges['rangeStart'] <= $start ) 195 if ($initialized = (isset($ranges['rangeStart']) && isset($ranges['rangeEnd']))) { 196 if ($ranges['rangeStart'] <= $start) 207 197 $start = false; 208 if ( $ranges['rangeEnd'] >= $end)198 if ($ranges['rangeEnd'] >= $end) 209 199 $end = false; 210 200 } … … 212 202 $repeats = self::findRepeats(); 213 203 214 if ( !is_array( $repeats ) || empty( $repeats ))204 if (!is_array($repeats) || empty($repeats)) 215 205 return( false ); 216 206 … … 218 208 $ids = array(); 219 209 220 foreach( $repeats as $repeat ) 221 { 222 $ids[] = $id = $repeat['id']; unset( $repeat['id'] ); 223 224 if( !isset( $result[ $id ] ) ) 225 $result[ $id ] = !$initialized ? array( $repeat['startTime'] ) : array(); 226 227 if( !$initialized ) 228 $result[ $id ] = array_merge( $result[ $id ], self::decodeRepeat( $repeat, $start, $end ) ); 229 else 230 { 231 if( $start ) 232 $result[ $id ] = array_merge( $result[ $id ], self::decodeRepeat( $repeat, $start, $ranges['rangeStart'] ) ); 233 234 if( $end ) 235 $result[ $id ] = array_merge( $result[ $id ], self::decodeRepeat( $repeat, $ranges['rangeEnd'], $end ) ); 236 } 237 238 if( empty( $result[ $id ] ) ) 239 unset( $result[ $id ] ); 240 } 241 242 if( $start || $end ) 243 { 244 Controller::begin( array( 'service' => 'PostgreSQL') ); 245 246 foreach( $result as $id => $res ) 247 Controller::service('PostgreSQL')->execResultSql( "INSERT INTO calendar_repeat_occurrence(repeat_id,occurrence)VALUES('".$id."','".implode( "'),('".$id."', '", $res )."')" ); 210 foreach ($repeats as $repeat) { 211 $ids[] = $id = $repeat['id']; 212 unset($repeat['id']); 213 214 if (!isset($result[$id])) 215 $result[$id] = !$initialized ? array($repeat['startTime']) : array(); 216 217 if (!$initialized) 218 $result[$id] = array_merge($result[$id], self::decodeRepeat($repeat, $start, $end)); 219 else { 220 if ($start) 221 $result[$id] = array_merge($result[$id], self::decodeRepeat($repeat, $start, $ranges['rangeStart'])); 222 223 if ($end) 224 $result[$id] = array_merge($result[$id], self::decodeRepeat($repeat, $ranges['rangeEnd'], $end)); 225 } 226 227 if (empty($result[$id])) 228 unset($result[$id]); 229 } 230 231 if ($start || $end) { 232 Controller::begin(array('service' => 'PostgreSQL')); 233 234 foreach ($result as $id => $res) 235 Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,occurrence)VALUES('" . $id . "','" . implode("'),('" . $id . "', '", $res) . "')"); 248 236 249 237 $data = array(); 250 238 251 if ( $start)239 if ($start) 252 240 $data['rangeStart'] = $start; 253 241 254 if ( $end)242 if ($end) 255 243 $data['rangeEnd'] = $end; 256 244 257 if ( !$initialized)258 $data['user'] = Config::me( 'uidNumber');259 260 Controller::call( ( $initialized ? 'replace' : 'create' ), array( 'concept' => 'repeatRange' ), $data, array( 'filter' => array( '=', 'user', Config::me('uidNumber') ) ));261 262 Controller::commit( array( 'service' => 'PostgreSQL' ));245 if (!$initialized) 246 $data['user'] = Config::me('uidNumber'); 247 248 Controller::call(( $initialized ? 'replace' : 'create'), array('concept' => 'repeatRange'), $data, array('filter' => array('=', 'user', Config::me('uidNumber')))); 249 250 Controller::commit(array('service' => 'PostgreSQL')); 263 251 } 264 252 265 253 // $return = Controller::find( array( 'concept' => 'repeatOccurrence' ), false, array( 'filter' => array( 'AND', array( '>=', 'occurrence', $origStart ), array( '<=', 'occurrence', $origEnd ), array( 'IN', 'repeat', $ids ) ), 'deepness' => $deep ) ); 266 254 267 $return = Controller::service('PostgreSQL')->execResultSql( 'SELECT calendar_repeat_occurrence.occurrence as "occurrence", calendar_repeat.object_id as "schedulable" FROM calendar_repeat, calendar_repeat_occurrence WHERE calendar_repeat_occurrence.occurrence >= \''.$origStart.'\' AND calendar_repeat_occurrence.occurrence <= \''.$origEnd.'\' AND calendar_repeat_occurrence.repeat_id IN (\''.implode( '\',\'', $ids ).'\') AND calendar_repeat.id = calendar_repeat_occurrence.repeat_id AND calendar_repeat_occurrence.exception != 1');268 269 if ( !is_array( $return ))270 return( false );255 $return = Controller::service('PostgreSQL')->execResultSql('SELECT calendar_repeat_occurrence.occurrence as "occurrence", calendar_repeat.object_id as "schedulable" FROM calendar_repeat, calendar_repeat_occurrence WHERE calendar_repeat_occurrence.occurrence >= \'' . $origStart . '\' AND calendar_repeat_occurrence.occurrence <= \'' . $origEnd . '\' AND calendar_repeat_occurrence.repeat_id IN (\'' . implode('\',\'', $ids) . '\') AND calendar_repeat.id = calendar_repeat_occurrence.repeat_id AND calendar_repeat_occurrence.exception != 1'); 256 257 if (!is_array($return)) 258 return( false ); 271 259 272 260 $result = array(); 273 261 $params = array(); 274 262 275 foreach( $return as $ret ) 276 { 277 $currentId = $ret['schedulable']; 278 279 if( !isset( $result[ $currentId ] ) ) 280 { 281 $result[ $currentId ] = Controller::read( array( 'concept' => 'schedulable', 'id' => $currentId ) ); 282 $result[ $currentId ][ 'occurrences' ] = array(); 283 284 $calendarToCalendarObj = self::schedulable2calendarToObject( $currentId ); 285 $result[ $currentId ]['calendar'] = $calendarToCalendarObj[0]['calendar_id']; 286 } 287 288 $result[ $currentId ][ 'occurrences' ][] = $ret['occurrence']; 263 foreach ($return as $ret) { 264 $currentId = $ret['schedulable']; 265 266 if (!isset($result[$currentId])) { 267 $result[$currentId] = Controller::read(array('concept' => 'schedulable', 'id' => $currentId)); 268 $result[$currentId]['occurrences'] = array(); 269 270 $calendarToCalendarObj = self::schedulable2calendarToObject($currentId); 271 $result[$currentId]['calendar'] = $calendarToCalendarObj[0]['calendar_id']; 272 } 273 274 $result[$currentId]['occurrences'][] = $ret['occurrence']; 289 275 } 290 276 … … 292 278 } 293 279 294 public static function findRepeats() 295 { 296 return Controller::service('PostgreSQL')->execResultSql( 'SELECT calendar_repeat.wkst as "wkst", calendar_repeat.byweekno as "byweekno", calendar_repeat.byminute as "byminute", calendar_repeat.bysecond as "bysecond", calendar_repeat.byyearday as "byyearday", calendar_repeat.bymonthday as "bymonthday", calendar_repeat.bysetpos as "bysetpos", calendar_repeat.byday as "byday", calendar_repeat.byhour as "byhour", calendar_repeat.interval as "interval", calendar_repeat.frequency as "frequency", calendar_repeat.until as "endTime", calendar_repeat.id as "id", calendar_repeat.count as "count", calendar_repeat.dtstart as "startTime" FROM calendar_repeat, calendar_participant WHERE calendar_repeat.object_id = calendar_participant.object_id AND calendar_participant.user_info_id = \''.Config::me('uidNumber').'\'' ); 297 } 298 280 public static function findRepeats() { 281 return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_repeat.wkst as "wkst", calendar_repeat.byweekno as "byweekno", calendar_repeat.byminute as "byminute", calendar_repeat.bysecond as "bysecond", calendar_repeat.byyearday as "byyearday", calendar_repeat.bymonthday as "bymonthday", calendar_repeat.bysetpos as "bysetpos", calendar_repeat.byday as "byday", calendar_repeat.byhour as "byhour", calendar_repeat.interval as "interval", calendar_repeat.frequency as "frequency", calendar_repeat.until as "endTime", calendar_repeat.id as "id", calendar_repeat.count as "count", calendar_repeat.dtstart as "startTime" FROM calendar_repeat, calendar_participant WHERE calendar_repeat.object_id = calendar_participant.object_id AND calendar_participant.user_info_id = \'' . Config::me('uidNumber') . '\''); 282 } 283 299 284 //HELPERS 300 public static function decodeRepeat( $repeat , $start , $end ) { 301 302 date_default_timezone_set( 'UTC' ); 303 304 require_once ROOTPATH.'/plugins/when/When.php'; 305 306 $r = new When(); 307 308 if( $repeat['frequency'] === 'none' ) 309 return( array() ); 310 311 //Nao deve ser usando o horário da repeticao pois nela contem apenas o dias, 312 //deve se recuperar o horário do evento para um correto calculo. 313 if(max( $start, $repeat['startTime'] ) != $repeat['startTime']){ 314 $time = new DateTime( '@'.(int)( $repeat['startTime'] / 1000 ), new DateTimeZone('UTC') ); 315 316 $hoursOcurrence = new DateTime( '@'.(int)( $start / 1000 ), new DateTimeZone('UTC') ); 317 $hoursOcurrence = $hoursOcurrence->format('H'); 318 319 $diffTime = ((($time->format('H') - $hoursOcurrence) * (3600000)) + ($time->format('i') * (60000))); 320 $start = new DateTime( '@'.(int)( ( $start + $diffTime ) / 1000 ), new DateTimeZone('UTC') ); 321 322 323 }else 324 $start = new DateTime( '@'.(int)( max( $start, $repeat['startTime'] ) / 1000 ), new DateTimeZone('UTC') ); 325 326 foreach($repeat as $rule => $value) 327 { 328 if( !isset( $value ) || !$value || $value === "0" ) 285 public static function decodeRepeat($repeat, $start, $end) { 286 287 date_default_timezone_set('UTC'); 288 289 require_once ROOTPATH . '/plugins/when/When.php'; 290 291 $r = new When(); 292 293 if ($repeat['frequency'] === 'none') 294 return( array() ); 295 296 //Nao deve ser usando o horário da repeticao pois nela contem apenas o dias, 297 //deve se recuperar o horário do evento para um correto calculo. 298 if (max($start, $repeat['startTime']) != $repeat['startTime']) { 299 $time = new DateTime('@' . (int) ( $repeat['startTime'] / 1000 ), new DateTimeZone('UTC')); 300 301 $hoursOcurrence = new DateTime('@' . (int) ( $start / 1000 ), new DateTimeZone('UTC')); 302 $hoursOcurrence = $hoursOcurrence->format('H'); 303 304 $diffTime = ((($time->format('H') - $hoursOcurrence) * (3600000)) + ($time->format('i') * (60000))); 305 $start = new DateTime('@' . (int) ( ( $start + $diffTime ) / 1000 ), new DateTimeZone('UTC')); 306 }else 307 $start = new DateTime('@' . (int) ( max($start, $repeat['startTime']) / 1000 ), new DateTimeZone('UTC')); 308 309 foreach ($repeat as $rule => $value) { 310 if (!isset($value) || !$value || $value === "0") 329 311 continue; 330 312 331 switch(strtolower($rule)) 332 { 333 case "starttime": break; 334 case "frequency": 335 $r->recur( $start, $value ); 336 break; 337 case "endtime": 338 $r->until( new DateTime( '@'.(int)( $value / 1000 ) ) ); 339 break; 340 case "count": case "interval": case "wkst": 341 $r->$rule( $value ); 342 break; 343 default : 344 $r->$rule( !is_array( $value ) ? explode( ',' , $value ) : $value ); 345 break; 346 } 347 } 348 349 $return = array(); 350 351 while($result = $r->next()) 352 { 353 $u = $result->format('U') * 1000; 354 355 if( $u > $end ) //data da repetição atual maior que a data final da busca do usuario ? 356 break; 357 358 $return[] = $u; 359 } 360 361 return( $return ); 362 } 363 313 switch (strtolower($rule)) { 314 case "starttime": break; 315 case "frequency": 316 $r->recur($start, $value); 317 break; 318 case "endtime": 319 $r->until(new DateTime('@' . (int) ( $value / 1000 ))); 320 break; 321 case "count": case "interval": case "wkst": 322 $r->$rule($value); 323 break; 324 default : 325 $r->$rule(!is_array($value) ? explode(',', $value) : $value ); 326 break; 327 } 328 } 329 330 $return = array(); 331 332 while ($result = $r->next()) { 333 $u = $result->format('U') * 1000; 334 335 if ($u > $end) //data da repetição atual maior que a data final da busca do usuario ? 336 break; 337 338 $return[] = $u; 339 } 340 341 return( $return ); 342 } 343 364 344 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 365 345 366 public function updateCalendar( &$uri , &$params , &$criteria , $original ){367 if( isset($params['calendar'])) 368 { 369 $calendarObjects = self::schedulable2calendarToObject( $uri['id'] );370 $params2['calendar'] = $params['calendar']; 371 372 foreach ($calendarObjects as $calendarObject) 373 Controller::update( array('concept' => 'calendarToSchedulable' , 'id' => $calendarObject['calendar_to_calendar_object']) , $params2 ); 374 375 unset( $params['calendar'] ); 376 377 if(count($params) < 1)return false;378 379 } 380 346 public function updateCalendar(&$uri, &$params, &$criteria, $original) { 347 if (isset($params['calendar'])) { 348 $calendarObjects = self::schedulable2calendarToObject($uri['id']); 349 $params2['calendar'] = $params['calendar']; 350 351 foreach ($calendarObjects as $calendarObject) 352 Controller::update(array('concept' => 'calendarToSchedulable', 'id' => $calendarObject['calendar_to_calendar_object']), $params2); 353 354 unset($params['calendar']); 355 356 if (count($params) < 1) 357 return false; 358 } 359 } 360 381 361 //Encode Update 382 362 383 public function encodeUpdateSchedulable( &$uri , &$params , &$criteria , $original ){ 384 385 $event = Controller::find( array( 'concept' => 'schedulable' , array('timezone', 'allDay') ,'id' => $params['id'] ) ); 386 387 if(isset($params['startTime'])){ 388 389 if(!is_numeric($params['startTime']) ) 390 $params['startTime'] = strtotime( $params['startTime'] . ' ' .$event['timezone']).'000'; 391 392 $params['rangeStart'] = $params['startTime'] ; 393 394 }if(isset($params['endTime'])){ 395 396 if (!is_numeric($params['endTime'])){ 397 $params['endTime'] = strtotime( $params['endTime'] . ' ' .$event['timezone']).'000'; 398 399 if($event['allDay']) 400 $params['endTime'] = $params['endTime'] + 86400000; 363 public function encodeUpdateSchedulable(&$uri, &$params, &$criteria, $original) { 364 365 $event = Controller::find(array('concept' => 'schedulable', array('timezone', 'allDay'), 'id' => $params['id'])); 366 367 if (isset($params['startTime'])) { 368 369 if (!is_numeric($params['startTime'])) 370 $params['startTime'] = strtotime($params['startTime'] . ' ' . $event['timezone']) . '000'; 371 372 $params['rangeStart'] = $params['startTime']; 373 }if (isset($params['endTime'])) { 374 375 if (!is_numeric($params['endTime'])) { 376 $params['endTime'] = strtotime($params['endTime'] . ' ' . $event['timezone']) . '000'; 377 378 if ($event['allDay']) 379 $params['endTime'] = $params['endTime'] + 86400000; 380 } 381 $params['rangeEnd'] = $params['endTime']; 382 } 383 } 384 385 static function putEvent(&$uri, &$result, &$criteria, $original) { 386 if (Config::module('useCaldav', 'expressoCalendar')) { //Ignorar Put dos eventos ja vindos do caldav 387 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 388 389 $eventID = (isset($result['id'])) ? $result['id'] : $uri['id']; 390 $event = Controller::read(array('concept' => 'schedulable', 'id' => $eventID)); 391 392 $participants = Controller::find(array('concept' => 'participant'), false, array('filter' => array('=', 'schedulable', $eventID))); 393 394 if (is_array($participants) && count($participants) > 0) 395 foreach ($participants as $ii => $vv) { 396 if ($vv['isExternal'] == 1) 397 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'], 'service' => 'PostgreSQL')); 398 else 399 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'])); 400 } 401 402 $event['URI']['concept'] = 'schedulable'; 403 $event['participants'] = $participants; 404 405 $ical = Controller::format(array('service' => 'iCal'), array($event)); 406 $calendars = self::schedulable2calendarToObject($original['properties']['id']); //Busca os calendarios do usuario logado que contenham o evento 407 if (is_array($calendars)) 408 foreach ($calendars as $calendar) 409 DAViCalAdapter::putIcal($ical, array('uid' => $event['uid'], 'location' => $calendar['calendar_location'])); 410 } 411 } 412 413 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 414 415 public function verifyCalendarLocation(&$uri, &$params, &$criteria, $original) { 416 if (!isset($params['location'])) 417 $params['location'] = Config::me('uid') . '/' . $params['name']; 418 } 419 420 //TODO: Remover apos suporte a ManytoMany na api 421 public function createCalendarToSchedulable(&$uri, &$result, &$criteria, $original) { 422 423 Controller::create(array('concept' => 'calendarToSchedulable'), array('calendar' => $original['properties']['calendar'], 'schedulable' => $result['id'])); 424 } 425 426 public function createCreateSchedulableToAttachment(&$uri, &$params, &$criteria, $original) { 427 if (array_key_exists('attachments', $original['properties'])) 428 foreach ($original['properties']['attachments'] as $key => $value) { 429 if (isset($params['id'])) 430 Controller::create(array('concept' => 'schedulableToAttachment'), array('attachment' => $value['attachment'], 'schedulable' => $params['id'])); 431 } 432 } 433 434 public function deepnessFindCalendarShared(&$uri, &$result, &$criteria, $original) { 435 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != '0' && count($result) > 0) { 436 $calendarIds = array(); 437 foreach ($result as $key => $value) 438 array_push($calendarIds, $value['calendar']); 439 440 $calendar = Controller::find(array('concept' => 'calendar'), false, array('filter' => array('AND', array('IN', 'id', $calendarIds), $original['criteria']['filter']))); 441 442 if (!is_array($calendar)) 443 $result = ''; 444 445 $newResult = array(); 446 foreach ($calendar as $key => $value) { 447 foreach ($result as $k => $r) { 448 449 if ($r['calendar'] == $value['id']) { 450 $r['calendar'] = $value; 451 array_push($newResult, $r); 452 } 453 } 454 } 455 456 foreach ($newResult as $key => &$value) { 457 if ($value['user'] != 0) { 458 $user = $value['user']; 459 $value['user'] = Controller::read(array('concept' => 'user', 'id' => $user)); 460 461 if (!$value['user']) 462 $value['user'] = Controller::read(array('concept' => 'group', 'id' => $user)); 463 } 464 } 465 466 467 $result = $newResult; 468 } 469 } 470 471 //TODO: Remover apos suporte a deepness na api 472 public function deepnessFindEvent(&$uri, &$result, &$criteria, $original) { 473 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 474 475 $Time = new DateTime('now', new DateTimeZone('UTC')); 476 $DayLigth = array(); 477 foreach ($result as $i => $v) { 478 479 if (!isset($currentTimezone) || $currentTimezone != $original['criteria']['timezones'][$v['calendar']]) { 480 $currentTimezone = isset($original['criteria']['timezones'][$v['calendar']]) ? $original['criteria']['timezones'][$v['calendar']] : $v['timezone']; 481 $Time->setTimezone(new DateTimeZone($currentTimezone)); 482 } 483 484 $Time->setTimestamp((int) ($v['startTime'] / 1000)); 485 $DayLigth['calendar']['startTime'] = $Time->format('I') ? 1 : 0; 486 487 $Time->setTimestamp((int) ($v['endTime'] / 1000)); 488 $DayLigth['calendar']['endTime'] = $Time->format('I') ? 1 : 0; 489 490 if ($currentTimezone != $v['timezone']) { 491 $currentTimezone = $v['timezone']; 492 $Time->setTimezone(new DateTimeZone($v['timezone'])); 493 494 $Time->setTimestamp((int) ($v['startTime'] / 1000)); 495 $DayLigth['event']['startTime'] = $Time->format('I') ? 1 : 0; 496 497 $Time->setTimestamp((int) ($v['endTime'] / 1000)); 498 $DayLigth['event']['endTime'] = $Time->format('I') ? 1 : 0; 499 }else 500 $DayLigth['event'] = $DayLigth['calendar']; 501 502 503 $result[$i]['DayLigth'] = $DayLigth; 504 505 if (isset($v['id'])) { 506 $participants = Controller::find(array('concept' => 'participant'), false, array('filter' => array('=', 'schedulable', $v['id']))); 507 508 if (is_array($participants) && count($participants) > 0) 509 foreach ($participants as $ii => $vv) { 510 if ($vv['isExternal'] == 1) 511 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'], 'service' => 'PostgreSQL')); 512 else 513 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'])); 514 515 if ($participants[$ii]['user']['id'] == Config::me('uidNumber')) 516 $participants[$ii]['alarms'] = Controller::find(array('concept' => 'alarm'), null, array('filter' => array('AND', array('=', 'participant', $vv['id']), array('=', 'schedulable', $v['id'])))); 401 517 } 402 $params['rangeEnd'] = $params['endTime'] ; 403 404 } 405 } 406 407 static function putEvent(&$uri , &$result , &$criteria , $original) 408 { 409 if(Config::module('useCaldav' , 'expressoCalendar')) //Ignorar Put dos eventos ja vindos do caldav 410 { 411 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 412 413 $eventID = (isset($result['id'])) ? $result['id'] : $uri['id']; 414 $event = Controller::read( array( 'concept' => 'schedulable' , 'id' => $eventID ) ); 415 416 $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=' , 'schedulable' , $eventID) )); 417 418 if(is_array($participants) && count($participants) > 0) 419 foreach ($participants as $ii => $vv) 420 { 421 if($vv['isExternal'] == 1 ) 422 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] , 'service' => 'PostgreSQL' ) ); 423 else 424 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] )); 425 } 426 427 $event['URI']['concept'] = 'schedulable'; 428 $event['participants'] = $participants; 429 430 $ical = Controller::format( array( 'service' => 'iCal' ) , array($event) ); 431 $calendars = self::schedulable2calendarToObject($original['properties']['id']); //Busca os calendarios do usuario logado que contenham o evento 432 if( is_array($calendars) ) 433 foreach ($calendars as $calendar) 434 DAViCalAdapter::putIcal($ical , array('uid' => $event['uid'] , 'location' => $calendar['calendar_location'] )); 435 } 436 } 437 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 438 439 public function verifyCalendarLocation( &$uri , &$params , &$criteria , $original ){ 440 if(!isset($params['location'])) 441 $params['location'] = Config::me('uid').'/'.$params['name']; 442 } 443 444 445 //TODO: Remover apos suporte a ManytoMany na api 446 public function createCalendarToSchedulable( &$uri , &$result , &$criteria , $original ){ 447 448 Controller::create(array('concept' => 'calendarToSchedulable'), array('calendar' => $original['properties']['calendar'], 'schedulable' => $result['id'] )); 449 450 } 451 452 public function createCreateSchedulableToAttachment( &$uri , &$params , &$criteria , $original ){ 453 if(array_key_exists('attachments', $original['properties'])) 454 foreach($original['properties']['attachments'] as $key => $value){ 455 if(isset($params['id'])) 456 Controller::create(array('concept' => 'schedulableToAttachment'), array('attachment' => $value['attachment'], 'schedulable' => $params['id'] )); 457 } 458 } 459 460 public function deepnessFindCalendarShared( &$uri , &$result , &$criteria , $original ){ 461 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != '0' && count($result) > 0){ 462 $calendarIds = array(); 463 foreach($result as $key => $value) 464 array_push($calendarIds, $value['calendar']); 465 466 $calendar = Controller::find( array( 'concept' => 'calendar' ) , false ,array( 'filter' => array('AND', array('IN','id', $calendarIds), $original['criteria']['filter']))); 467 468 if(!is_array($calendar)) 469 $result = ''; 470 471 $newResult = array(); 472 foreach($calendar as $key => $value){ 473 foreach($result as $k => $r){ 474 475 if($r['calendar'] == $value['id']){ 476 $r['calendar'] = $value; 477 array_push($newResult, $r); 478 } 479 } 480 } 481 482 foreach($newResult as $key => &$value){ 483 if($value['user'] != 0){ 484 $user = $value['user']; 485 $value['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $user )); 486 487 if(!$value['user']) 488 $value['user'] = Controller::read( array( 'concept' => 'group' , 'id' => $user )); 489 } 490 } 491 492 493 $result = $newResult; 494 } 495 } 496 497 //TODO: Remover apos suporte a deepness na api 498 public function deepnessFindEvent( &$uri , &$result , &$criteria , $original ){ 499 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 500 { 501 502 $Time = new DateTime( 'now', new DateTimeZone('UTC') ); 503 $DayLigth = array(); 504 foreach ($result as $i => $v) 505 { 506 507 if(!isset($currentTimezone) || $currentTimezone != $original['criteria']['timezones'][$v['calendar']]){ 508 $currentTimezone = isset($original['criteria']['timezones'][$v['calendar']]) ? $original['criteria']['timezones'][$v['calendar']] : $v['timezone']; 509 $Time->setTimezone(new DateTimeZone($currentTimezone)); 510 } 511 512 $Time->setTimestamp( (int)($v['startTime'] / 1000)); 513 $DayLigth['calendar']['startTime'] = $Time->format('I') ? 1 : 0; 514 515 $Time->setTimestamp( (int)($v['endTime'] / 1000)); 516 $DayLigth['calendar']['endTime'] = $Time->format('I') ? 1 : 0; 517 518 if($currentTimezone != $v['timezone']){ 519 $currentTimezone = $v['timezone']; 520 $Time->setTimezone(new DateTimeZone($v['timezone'])); 521 522 $Time->setTimestamp( (int)($v['startTime'] / 1000)); 523 $DayLigth['event']['startTime'] = $Time->format('I') ? 1 : 0; 524 525 $Time->setTimestamp( (int)($v['endTime'] / 1000)); 526 $DayLigth['event']['endTime'] = $Time->format('I') ? 1 : 0; 527 }else 528 $DayLigth['event'] = $DayLigth['calendar']; 529 530 531 $result[$i]['DayLigth'] = $DayLigth; 532 533 if(isset($v['id'])) 534 { 535 $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=', 'schedulable' , $v['id']) )); 536 537 if(is_array($participants) && count($participants) > 0) 538 foreach ($participants as $ii => $vv) 539 { 540 if($vv['isExternal'] == 1 ) 541 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] , 'service' => 'PostgreSQL' ) ); 542 else 543 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] )); 544 545 if($participants[$ii]['user']['id'] == Config::me('uidNumber')) 546 $participants[$ii]['alarms'] = Controller::find( array( 'concept' => 'alarm' ) , null , array('filter' => array('AND' , array('=', 'participant' ,$vv['id'] ) ,array('=' , 'schedulable', $v['id'])) ) ); 547 } 548 $result[$i]['participants'] = $participants; 549 550 551 552 $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable' , $v['id']) )); 553 if(is_array($attachmentRelation)){ 554 $attachments = array(); 555 foreach($attachmentRelation as $key => $value) 556 if(isset($value['attachment']) || !!$value['attachment']) 557 $attachments[$key] = $value['attachment']; 558 //Pega os anexos sem source 559 $result[$i]['attachments'] = Controller::find( array( 'concept' => 'attachment' ) , array('id', 'name', 'type', 'size') ,array( 'filter' => array('IN', 'id' , $attachments) )); 518 $result[$i]['participants'] = $participants; 519 520 521 522 $attachmentRelation = Controller::find(array('concept' => 'schedulableToAttachment'), false, array('filter' => array('=', 'schedulable', $v['id']))); 523 if (is_array($attachmentRelation)) { 524 $attachments = array(); 525 foreach ($attachmentRelation as $key => $value) 526 if (isset($value['attachment']) || !!$value['attachment']) 527 $attachments[$key] = $value['attachment']; 528 //Pega os anexos sem source 529 $result[$i]['attachments'] = Controller::find(array('concept' => 'attachment'), array('id', 'name', 'type', 'size'), array('filter' => array('IN', 'id', $attachments))); 560 530 } 561 531 562 $repeat = Controller::find( array( 'concept' => 'repeat' ), false, array( 'filter' => array( '=', 'schedulable', $v['id'] ) ));563 564 unset( $result[$i]['repeat']);565 566 if ( is_array($repeat))532 $repeat = Controller::find(array('concept' => 'repeat'), false, array('filter' => array('=', 'schedulable', $v['id']))); 533 534 unset($result[$i]['repeat']); 535 536 if (is_array($repeat)) 567 537 $result[$i]['repeat'] = $repeat[0]; 568 538 } 569 570 } 571 } 572 573 return $result; 574 575 } 539 } 540 } 541 542 return $result; 543 } 576 544 577 545 //TODO: Remover apos suporte a deepness na api 578 public function deepnessReadEvent( &$uri , &$result , &$criteria , $original ){ 579 580 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 581 { 582 if(isset($result['id'])) 583 { 584 $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=' , 'schedulable' , $result['id']) )); 585 if(is_array($participants)) 586 foreach ($participants as $ii => $vv) 587 { 588 if($vv['isExternal'] == 1 ) 589 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] , 'service' => 'PostgreSQL' ) ); 590 else 591 $participants[$ii]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $vv['user'] )); 592 593 if($participants[$ii]['user']['id'] == Config::me('uidNumber')) 594 $participants[$ii]['alarms'] = Controller::find( array( 'concept' => 'alarm' ) , null , array('filter' => array('AND' , array('=', 'participant' ,$vv['id'] ) ,array('=' , 'schedulable', $result['id'])) ) ); 595 } 596 $repeat = Controller::find( array( 'concept' => 'repeat' ), false, array( 'filter' => array( '=', 'schedulable', $result['id'] ) ) ); 597 if(is_array($repeat)) 598 $result['repeat'] = $repeat[0] ; 599 546 public function deepnessReadEvent(&$uri, &$result, &$criteria, $original) { 547 548 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 549 if (isset($result['id'])) { 550 $participants = Controller::find(array('concept' => 'participant'), false, array('filter' => array('=', 'schedulable', $result['id']))); 551 if (is_array($participants)) 552 foreach ($participants as $ii => $vv) { 553 if ($vv['isExternal'] == 1) 554 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'], 'service' => 'PostgreSQL')); 555 else 556 $participants[$ii]['user'] = Controller::read(array('concept' => 'user', 'id' => $vv['user'])); 557 558 if ($participants[$ii]['user']['id'] == Config::me('uidNumber')) 559 $participants[$ii]['alarms'] = Controller::find(array('concept' => 'alarm'), null, array('filter' => array('AND', array('=', 'participant', $vv['id']), array('=', 'schedulable', $result['id'])))); 560 } 561 $repeat = Controller::find(array('concept' => 'repeat'), false, array('filter' => array('=', 'schedulable', $result['id']))); 562 if (is_array($repeat)) 563 $result['repeat'] = $repeat[0]; 564 600 565 $result['participants'] = $participants; 601 602 603 }604 566 } 567 } 568 } 569 605 570 //TODO: Remover apos suporte a deepness na api 606 public function deepnessReadParticipant( &$uri , &$result , &$criteria , $original ){ 607 608 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 609 { 610 if(isset($result['id'])) 611 { 612 if($result['isExternal'] == 1 ) 613 $result['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $result['user'] , 'service' => 'PostgreSQL' ) ); 614 else 615 $result['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $result['user'] )); 616 } 617 } 618 619 } 620 571 public function deepnessReadParticipant(&$uri, &$result, &$criteria, $original) { 572 573 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 574 if (isset($result['id'])) { 575 if ($result['isExternal'] == 1) 576 $result['user'] = Controller::read(array('concept' => 'user', 'id' => $result['user'], 'service' => 'PostgreSQL')); 577 else 578 $result['user'] = Controller::read(array('concept' => 'user', 'id' => $result['user'])); 579 } 580 } 581 } 582 621 583 //TODO: Remover apos suporte a deepness na api 622 public function deepnessFindParticipant( &$uri , &$result , &$criteria , $original ){ 623 624 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 625 { 626 foreach ($result as $i => $v) 627 { 628 if(isset($v['id'])) 629 { 630 if($result[$i]['isExternal'] == 1 ) 631 $result[$i]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $result[$i]['user'] , 'service' => 'PostgreSQL' ) ); 632 else 633 $result[$i]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $result[$i]['user'] )); 634 } 635 } 636 } 637 638 } 639 584 public function deepnessFindParticipant(&$uri, &$result, &$criteria, $original) { 585 586 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 587 foreach ($result as $i => $v) { 588 if (isset($v['id'])) { 589 if ($result[$i]['isExternal'] == 1) 590 $result[$i]['user'] = Controller::read(array('concept' => 'user', 'id' => $result[$i]['user'], 'service' => 'PostgreSQL')); 591 else 592 $result[$i]['user'] = Controller::read(array('concept' => 'user', 'id' => $result[$i]['user'])); 593 } 594 } 595 } 596 } 597 640 598 //TODO: Remover apos suporte a deepness na api 641 public function deepnessReadCalendarSignature( &$uri , &$result , &$criteria , $original ){ 642 643 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 644 if(isset($result['calendar'])){ 645 $result['calendar'] = Controller::read( array( 'concept' => 'calendar' , 'id' => $result['calendar'])); 646 $result['defaultAlarms'] = Controller::find( array( 'concept' => 'calendarSignatureAlarm' ) , false ,array( 'filter' => array('=', 'calendarSignature' , $result['id']) )); 599 public function deepnessReadCalendarSignature(&$uri, &$result, &$criteria, $original) { 600 601 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 602 if (isset($result['calendar'])) { 603 $result['calendar'] = Controller::read(array('concept' => 'calendar', 'id' => $result['calendar'])); 604 $result['defaultAlarms'] = Controller::find(array('concept' => 'calendarSignatureAlarm'), false, array('filter' => array('=', 'calendarSignature', $result['id']))); 605 } 606 } 607 608 //TODO: Remover apos suporte a deepness na api 609 public function deepnessFindCalendarSignature(&$uri, &$result, &$criteria, $original) { 610 611 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 612 foreach ($result as $i => $v) { 613 if (isset($v['calendar'])) { 614 $result[$i]['calendar'] = Controller::read(array('concept' => 'calendar', 'id' => $v['calendar']), false, false); 615 $result[$i]['defaultAlarms'] = Controller::find(array('concept' => 'calendarSignatureAlarm'), false, array('filter' => array('=', 'calendarSignature', $v['id']))); 616 //Caso não seja o dono da agenda retorna o objeto permission com as acls 617 if ($result[$i]['isOwner'] == 0) { 618 $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'user', Config::me('uidNumber'))))); 619 620 if (!is_array($permission) || !$permission) { 621 622 $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'type', '1')))); 647 623 } 648 649 } 650 651 //TODO: Remover apos suporte a deepness na api 652 public function deepnessFindCalendarSignature( &$uri , &$result , &$criteria , $original ){ 653 654 if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 655 { 656 foreach ($result as $i => $v) 657 { 658 if(isset($v['calendar'])){ 659 $result[$i]['calendar'] = Controller::read( array( 'concept' => 'calendar' , 'id' => $v['calendar']), false, false); 660 $result[$i]['defaultAlarms'] = Controller::find( array( 'concept' => 'calendarSignatureAlarm' ) , false ,array( 'filter' => array('=', 'calendarSignature' , $v['id']) )); 661 //Caso não seja o dono da agenda retorna o objeto permission com as acls 662 if($result[$i]['isOwner'] == 0){ 663 $permission = Controller::find( array( 'concept' => 'calendarToPermission'), false ,array( 'filter' => array('AND', array('=', 'calendar' , $v['calendar']), array('=', 'user', Config::me('uidNumber') ) ) ) ); 664 665 if(!is_array($permission) || !$permission ){ 666 667 $permission = Controller::find( array( 'concept' => 'calendarToPermission'), false ,array( 'filter' => array('AND', array('=', 'calendar' , $v['calendar']), array('=', 'type', '1' ) ) ) ); 668 669 } 670 $result[$i]['permission'] = $permission[0]; 671 } 672 } 673 //TODO - Padronizar retorno do deepness 674 if(isset($v['user'])) 675 $result[$i]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $v['user']), false, false); 676 } 677 } 678 } 624 $result[$i]['permission'] = $permission[0]; 625 } 626 } 627 //TODO - Padronizar retorno do deepness 628 if (isset($v['user'])) 629 $result[$i]['user'] = Controller::read(array('concept' => 'user', 'id' => $v['user']), false, false); 630 } 631 } 632 } 633 679 634 //Decode Find 680 public function decodeFindConcept( &$uri , &$result , &$criteria , $original ){ 681 if($result && is_array($result) ) 682 { 683 $m = array_flip(self::${$uri['concept'].'Map'}); 684 $new = array(); 685 foreach ($result as $i => $v) 686 $new[$i] = self::parseConcept( $result[$i] , $m ); 687 688 689 $result = $new; 690 } 691 } 692 693 public function decodeFindSchedulable( &$uri , &$result , &$criteria , $original ){ 694 if($result && is_array($result) ) 695 { 696 $m = array_flip(self::${$uri['concept'].'Map'}); 697 $m['calendar_id'] = 'calendar'; 698 $new = array(); 699 foreach ($result as $i => $v) 700 $new[$i] = self::parseConcept( $result[$i] , $m ); 701 702 703 $result = $new; 704 } 705 } 706 707 public function decodeFindAttachment( &$uri , &$result , &$criteria , $original ){ 708 if(isset($result)) 709 foreach($result as $key => &$value) 710 $value['source'] = base64_decode($value['source']); 711 } 712 713 714 public function decodeSignatureAlarmType( &$uri , &$result , &$criteria , $original ){ 715 if( is_array($result) ) 716 foreach($result as &$param) 717 if(isset($param['type'])) 718 $param['type'] = self::decodeAlarmType($param['type']); 719 720 } 721 635 public function decodeFindConcept(&$uri, &$result, &$criteria, $original) { 636 if ($result && is_array($result)) { 637 $m = array_flip(self::${$uri['concept'] . 'Map'}); 638 $new = array(); 639 foreach ($result as $i => $v) 640 $new[$i] = self::parseConcept($result[$i], $m); 641 642 643 $result = $new; 644 } 645 } 646 647 public function decodeFindSchedulable(&$uri, &$result, &$criteria, $original) { 648 if ($result && is_array($result)) { 649 $m = array_flip(self::${$uri['concept'] . 'Map'}); 650 $m['calendar_id'] = 'calendar'; 651 $new = array(); 652 foreach ($result as $i => $v) 653 $new[$i] = self::parseConcept($result[$i], $m); 654 655 656 $result = $new; 657 } 658 } 659 660 public function decodeFindAttachment(&$uri, &$result, &$criteria, $original) { 661 if (isset($result)) 662 foreach ($result as $key => &$value) 663 $value['source'] = base64_decode($value['source']); 664 } 665 666 public function decodeSignatureAlarmType(&$uri, &$result, &$criteria, $original) { 667 if (is_array($result)) 668 foreach ($result as &$param) 669 if (isset($param['type'])) 670 $param['type'] = self::decodeAlarmType($param['type']); 671 } 672 722 673 ///////////////////////////////////////////////////////////////////////// 723 724 static function dayAlarm( &$uri , &$params , &$criteria , $original ) { 725 if(isset($criteria['filter'][1]) && $criteria['filter'][1] == 'date') 726 { 727 $filter = array( 'AND', 728 array( '=' , 'sent' , '0') , 729 array( '=' , 'type' , ALARM_ALERT) , 730 array( '>=' , 'rangeStart' , $criteria['filter'][2]) , 731 array( '<=' , 'rangeEnd' , $criteria['filter'][2] + 86400000) ); 732 733 //Busca os Alarmes no Range 734 $al = Controller::find( array('concept' => 'alarm'), false ,array( 'filter' => $filter)); 735 736 if(is_array($al)) 737 foreach ($al as $i => $v) 738 { 739 $ev = Controller::read( array( 'concept' => 'schedulable' , 'id' => $v['schedulable']) ) ; 740 741 $unit = 0; 742 switch (strtolower($v['unit'])) { 743 case 'm': $unit = 60; break; 744 case 'H': $unit = 3600; break; 745 case 'd': $unit = 216000; break; } 746 747 $al[$i]['sendTime'] = (((int)( $ev['startTime'] / 1000 )) - ( $v['time'] * $unit )); 748 $al[$i]['schedulable'] = $ev; 749 750 } 751 752 $params = $al; 753 return false; 754 } 755 } 756 757 public function deleteSchedulable( &$uri , &$params , &$criteria , $original ){ 758 759 if(Config::module('useCaldav' , 'expressoCalendar')) 760 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 761 762 $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 763 764 if( !self::ownerSchedulable($uri['id']) && !self::isAllowDeleteInCalendar($calendarsToSchedulable[0]['calendar_id'])) 765 { 766 767 foreach ($calendarsToSchedulable as $i => $v) 768 { 769 Controller::delete(array('concept' => 'calendarToSchedulable' , 'id' => $v['calendar_to_calendar_object'])); 770 771 if(Config::module('useCaldav' , 'expressoCalendar')) 772 DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 773 } 774 775 /* Seta o participante como rejeitado */ 776 Controller::update(array('concept' => 'participant'), array('status' => STATUS_CANCELLED) , 777 array('filter' => 778 array('AND', 779 array('=' , 'user' ,Config::me('uidNumber') ), 780 array('=' , 'schedulable' , $uri['id'] ) 781 ))); 782 783 return false; /* Mata o restante da execução */ 784 } 785 786 if(Config::module('useCaldav' , 'expressoCalendar')) 787 foreach ($calendarsToSchedulable as $i => $v) 788 DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 789 790 } 791 792 793 public function deleteCalendarToPermissionDependences( &$uri , &$params , &$criteria , $original ){ 794 $permission = Controller::read($uri, array('user','calendar')); 795 796 $calendarSignature = Controller::find( array( 'concept' => 'calendarSignature' ) , array('id') ,array( 'filter' => array('AND', array('=','calendar', $permission['calendar']), array('=','user',$permission['user']), array('=','isOwner','0')))); 797 798 if($calendarSignature) 674 675 static function dayAlarm(&$uri, &$params, &$criteria, $original) { 676 if (isset($criteria['filter'][1]) && $criteria['filter'][1] == 'date') { 677 $filter = array('AND', 678 array('=', 'sent', '0'), 679 array('=', 'type', ALARM_ALERT), 680 array('>=', 'rangeStart', $criteria['filter'][2]), 681 array('<=', 'rangeEnd', $criteria['filter'][2] + 86400000)); 682 683 //Busca os Alarmes no Range 684 $al = Controller::find(array('concept' => 'alarm'), false, array('filter' => $filter)); 685 686 if (is_array($al)) 687 foreach ($al as $i => $v) { 688 $ev = Controller::read(array('concept' => 'schedulable', 'id' => $v['schedulable'])); 689 690 $unit = 0; 691 switch (strtolower($v['unit'])) { 692 case 'm': $unit = 60; 693 break; 694 case 'H': $unit = 3600; 695 break; 696 case 'd': $unit = 216000; 697 break; 698 } 699 700 $al[$i]['sendTime'] = (((int) ( $ev['startTime'] / 1000 )) - ( $v['time'] * $unit )); 701 $al[$i]['schedulable'] = $ev; 702 } 703 704 $params = $al; 705 return false; 706 } 707 } 708 709 public function deleteSchedulable(&$uri, &$params, &$criteria, $original) { 710 711 if (Config::module('useCaldav', 'expressoCalendar')) 712 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 713 714 $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 715 716 if (!self::ownerSchedulable($uri['id']) && !self::isAllowDeleteInCalendar($calendarsToSchedulable[0]['calendar_id'])) { 717 718 foreach ($calendarsToSchedulable as $i => $v) { 719 Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $v['calendar_to_calendar_object'])); 720 721 if (Config::module('useCaldav', 'expressoCalendar')) 722 DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 723 } 724 725 /* Seta o participante como rejeitado */ 726 Controller::update(array('concept' => 'participant'), array('status' => STATUS_CANCELLED), array('filter' => 727 array('AND', 728 array('=', 'user', Config::me('uidNumber')), 729 array('=', 'schedulable', $uri['id']) 730 ))); 731 732 return false; /* Mata o restante da execução */ 733 } 734 735 if (Config::module('useCaldav', 'expressoCalendar')) 736 foreach ($calendarsToSchedulable as $i => $v) 737 DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 738 } 739 740 public function deleteCalendarToPermissionDependences(&$uri, &$params, &$criteria, $original) { 741 $permission = Controller::read($uri, array('user', 'calendar')); 742 743 $calendarSignature = Controller::find(array('concept' => 'calendarSignature'), array('id'), array('filter' => array('AND', array('=', 'calendar', $permission['calendar']), array('=', 'user', $permission['user']), array('=', 'isOwner', '0')))); 744 745 if ($calendarSignature) 799 746 Controller::delete(array('concept' => 'calendarSignature', 'id' => $calendarSignature[0]['id'])); 800 747 } 801 748 802 public function deleteCalendarSignatureDependences( &$uri , &$params , &$criteria , $original ){ 803 $signature = Controller::read($uri,array('isOwner','calendar')); 804 805 if($signature['isOwner'] == '1') 806 { 807 $calendarToSchedulables = Controller::find(array('concept' => 'calendarToSchedulable') , null , array('filter' => array('=' , 'calendar' , $signature['calendar'] ))); 808 809 $schedulables = array(); 810 if(is_array($calendarToSchedulables)) 811 foreach ($calendarToSchedulables as $key => $calendarToSchedulable) 812 $schedulables[] = $calendarToSchedulable['schedulable'] ; 813 814 if( !empty( $schedulables ) ) 815 Controller::deleteALL(array('concept' => 'schedulable'),null , array('filter' => array('IN' , 'id' , $schedulables))); 816 817 Controller::delete(array('concept' => 'calendar', 'id' => $signature['calendar'])); 818 } 819 820 } 821 822 public function deleteAttachmentDependences( &$uri , &$params , &$criteria , $original ){ 823 824 if(isset($original['URI']['id'])) 825 Controller::delete(array('concept' => 'schedulableToAttachment', null , array('filter' => array('=' , 'attachment' , $original['URI']['id'])))); 826 } 827 828 public function createDefaultSignature( &$uri , &$result , &$criteria , $original ){ 749 public function deleteCalendarSignatureDependences(&$uri, &$params, &$criteria, $original) { 750 $signature = Controller::read($uri, array('isOwner', 'calendar')); 751 752 if ($signature['isOwner'] == '1') { 753 $calendarToSchedulables = Controller::find(array('concept' => 'calendarToSchedulable'), null, array('filter' => array('=', 'calendar', $signature['calendar']))); 754 755 $schedulables = array(); 756 if (is_array($calendarToSchedulables)) 757 foreach ($calendarToSchedulables as $key => $calendarToSchedulable) 758 $schedulables[] = $calendarToSchedulable['schedulable']; 759 760 if (!empty($schedulables)) 761 Controller::deleteALL(array('concept' => 'schedulable'), null, array('filter' => array('IN', 'id', $schedulables))); 762 763 Controller::delete(array('concept' => 'calendar', 'id' => $signature['calendar'])); 764 } 765 } 766 767 public function deleteAttachmentDependences(&$uri, &$params, &$criteria, $original) { 768 769 if (isset($original['URI']['id'])) 770 Controller::delete(array('concept' => 'schedulableToAttachment', null, array('filter' => array('=', 'attachment', $original['URI']['id'])))); 771 } 772 773 public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 829 774 830 775 //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas … … 832 777 833 778 //Veirifica pois o usuário pode ter varias assinaturas mas não ser dona de nenhuma 834 if (count($result) > 0){835 foreach ($result as $key){836 if ($key['isOwner'] != 0)779 if (count($result) > 0) { 780 foreach ($result as $key) { 781 if ($key['isOwner'] != 0) 837 782 $isValidSignature = true; 838 783 } 839 784 } 840 785 841 if(!$isValidSignature && 842 ( $original['criteria']['filter'][1][0] == '=' && 843 $original['criteria']['filter'][1][1] == 'user' && 844 $original['criteria']['filter'][1][2] == $_SESSION['phpgw_session']['account_id'] 845 )) 846 { 847 848 if( Config::module('useCaldav' , 'expressoCalendar') ) 849 { 850 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 851 852 $calendario = DAViCalAdapter::findCalendars(); 853 } 854 855 if( Config::module('useCaldav' , 'expressoCalendar') && is_array($calendario) && count($calendario) > 0) 856 { 857 foreach ($calendario as $i => $v) 858 { 859 860 $urlA = explode('/', $v->url); 861 $name = isset($v->displayname)? $v->displayname : $urlA[ (count($urlA)-2) ]; 862 $cal = array('name' => $name, 863 'description' => isset($v->description)? $v->description : $name, 864 'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 865 'dtstamp' => time().'000', 866 'location' => $urlA[ (count($urlA)-3) ].'/'.$urlA[ (count($urlA)-2) ] 867 ); 868 869 $calCreated = Controller::create( array('concept' => 'calendar') , $cal ); 870 871 872 873 $sig = array( 'user' => $_SESSION['wallet']['user']['uidNumber'], 874 'calendar' => $calCreated['id'], 875 'isOwner' => '1', 876 'dtstamp' => time().'000', 877 'fontColor' => 'FFFFFF', 878 'backgroundColor' => '3366CC', 879 'borderColor' => '3366CC', 880 ); 881 882 $sigCreated = Controller::create( array('concept' => 'calendarSignature') , $sig ); 883 884 885 DAViCalAdapter::importCollection($v->url , $calCreated['id']); 886 887 } 888 } 889 else 890 { 891 //Criaremos uma agenda padrão 892 $cal = array('name' => 'Calendario', 893 'description' => 'Calendario Padrão', 894 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 895 'dtstamp' => time().'000' 896 ); 897 898 $calCreated = Controller::create( array('concept' => 'calendar') , $cal ); 899 900 $sig = array( 'user' => $_SESSION['wallet']['user']['uidNumber'], 901 'calendar' => $calCreated['id'], 902 'isOwner' => '1', 903 'dtstamp' => time().'000', 904 'fontColor' => 'FFFFFF', 905 'backgroundColor' => '3366CC', 906 'borderColor' => '3366CC', 907 ); 908 909 $sigCreated = Controller::create( array('concept' => 'calendarSignature') , $sig ); 910 } 911 912 $result = Controller::find($original['URI'] , $original['properties'] ? $original['properties'] : null , $original['criteria'] ); 913 return false; 914 } 915 786 if (!$isValidSignature && 787 ( $original['criteria']['filter'][1][0] == '=' && 788 $original['criteria']['filter'][1][1] == 'user' && 789 $original['criteria']['filter'][1][2] == $_SESSION['phpgw_session']['account_id'] 790 )) { 791 792 if (Config::module('useCaldav', 'expressoCalendar')) { 793 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 794 795 $calendario = DAViCalAdapter::findCalendars(); 796 } 797 798 if (Config::module('useCaldav', 'expressoCalendar') && is_array($calendario) && count($calendario) > 0) { 799 foreach ($calendario as $i => $v) { 800 801 $urlA = explode('/', $v->url); 802 $name = isset($v->displayname) ? $v->displayname : $urlA[(count($urlA) - 2)]; 803 $cal = array('name' => $name, 804 'description' => isset($v->description) ? $v->description : $name, 805 'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 806 'dtstamp' => time() . '000', 807 'location' => $urlA[(count($urlA) - 3)] . '/' . $urlA[(count($urlA) - 2)] 808 ); 809 810 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 811 812 813 814 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 815 'calendar' => $calCreated['id'], 816 'isOwner' => '1', 817 'dtstamp' => time() . '000', 818 'fontColor' => 'FFFFFF', 819 'backgroundColor' => '3366CC', 820 'borderColor' => '3366CC', 821 ); 822 823 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 824 825 826 DAViCalAdapter::importCollection($v->url, $calCreated['id']); 827 } 828 } else { 829 //Criaremos uma agenda padrão 830 $cal = array('name' => 'Calendario', 831 'description' => 'Calendario Padrão', 832 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 833 'dtstamp' => time() . '000' 834 ); 835 836 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 837 838 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 839 'calendar' => $calCreated['id'], 840 'isOwner' => '1', 841 'dtstamp' => time() . '000', 842 'fontColor' => 'FFFFFF', 843 'backgroundColor' => '3366CC', 844 'borderColor' => '3366CC', 845 ); 846 847 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 848 } 849 850 $result = Controller::find($original['URI'], $original['properties'] ? $original['properties'] : null, $original['criteria']); 851 return false; 852 } 853 } 854 855 //TODO - Criar conceito separado para participantes externos e remover o criterio notExternal 856 public function findExternalPaticipants(&$uri, &$result, &$criteria, $original) { 857 if (Config::me('uidNumber') && !isset($criteria['notExternal'])) { 858 $newuri['concept'] = 'user'; 859 $newuri['service'] = 'PostgreSQL'; 860 861 $newCriteria = $original['criteria']; 862 $valid = true; 863 864 $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber'))); 865 $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria); 866 867 if (is_array($externalUsers)) { 868 foreach ($externalUsers as $i => $v) 869 $externalUsers[$i]['isExternal'] = '1'; 870 } 871 else 872 $externalUsers = array(); 873 874 if (!is_array($result)) 875 $result = array(); 876 877 return array_merge($result, $externalUsers); 878 } 879 } 880 881 public function davcalCreateCollection(&$uri, &$params, &$criteria, $original) { 882 if (Config::module('useCaldav', 'expressoCalendar')) { 883 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 884 DAViCalAdapter::mkcalendar($params['location'], $params['name'], isset($params['description']) ? $params['description'] : '' ); 885 } 886 } 887 888 public function davcalDeleteCollection(&$uri, &$params, &$criteria, $original) { 889 if (Config::module('useCaldav', 'expressoCalendar') && Config::module('onRemoveCascadeCalDav')) { 890 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 891 $calendar = Controller::read($uri); 892 DAViCalAdapter::rmCalendar($calendar['location']); 893 } 894 } 895 896 public function davcalUpdateCollection(&$uri, &$params, &$criteria, $original) { 897 if (Config::module('useCaldav', 'expressoCalendar')) { 898 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 899 if (isset($params['location'])) { 900 $calendar = Controller::read($uri); 901 if ($calendar['location'] !== $params['location']) 902 DAViCalAdapter::mvcalendar($calendar['location'], $params['location']); 903 } 904 } 905 } 906 907 private function _makeUid() { 908 909 $date = date('Ymd\THisT'); 910 $unique = substr(microtime(), 2, 4); 911 $base = 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPrRsStTuUvVxXuUvVwWzZ1234567890'; 912 $start = 0; 913 $end = strlen($base) - 1; 914 $length = 6; 915 $str = null; 916 for ($p = 0; $p < $length; $p++) 917 $unique .= $base{mt_rand($start, $end)}; 918 919 return $date . $unique . '@expresso-calendar'; 920 } 921 922 private function getStatus($id) { 923 $a = array( 924 STATUS_CONFIRMED => 'CONFIRMED', 925 STATUS_CANCELLED => 'CANCELLED', 926 STATUS_TENATIVE => 'TENATIVE', 927 STATUS_UNANSWERED => 'NEEDS-ACTION', 928 STATUS_DELEGATED => 'DELEGATED' 929 ); 930 return $a[$id]; 931 } 932 933 private static function decodeAlarmType($id) { 934 $a = array(ALARM_ALERT => 'alert', 935 ALARM_MAIL => 'mail', 936 ALARM_SMS => 'sms'); 937 938 return $a[$id]; 939 } 940 941 private static function codeAlarmType($type) { 942 $a = array('alert' => ALARM_ALERT, 943 'mail' => ALARM_MAIL, 944 'sms' => ALARM_SMS); 945 946 return $a[$type]; 947 } 948 949 private static function codeAlarmUnit($u) { 950 if ($u === 'd') 951 return 'days'; 952 if ($u === 'm') 953 return 'minutes'; 954 if ($u === 'H') 955 return 'hours'; 956 } 957 958 private static function ownerSchedulable($id) { 959 960 $isOwner = Controller::find(array('concept' => 'participant'), array('id'), array('filter' => 961 array('AND', 962 array('=', 'isOrganizer', '1'), 963 array('=', 'user', $_SESSION['wallet']['user']['uidNumber']), 964 array('=', 'schedulable', $id) 965 ))); 966 967 return ( isset($isOwner[0]['id']) ) ? true : false; 968 } 969 970 private static function schedulable2calendarToObject($Schedulable) { 971 return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object , calendar.name as calendar_name ,calendar.location as calendar_location, calendar.id as calendar_id FROM calendar_to_calendar_object , calendar , calendar_signature' 972 . ' WHERE calendar_signature.user_uidnumber = ' . $_SESSION['wallet']['user']['uidNumber'] 973 // .' AND calendar_signature.is_owner = 1' 974 . ' AND calendar_signature.calendar_id = calendar.id' 975 . ' AND calendar_to_calendar_object.calendar_id = calendar.id' 976 . ' AND calendar_to_calendar_object.calendar_object_id = ' . addslashes($Schedulable)); 977 } 978 979 protected static function isAllowDeleteInCalendar($calendar) { 980 $f = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'user', Config::me('uidNumber')), array('=', 'calendar', $calendar)))); 981 return (strpos($f[0]['acl'], CALENDAR_ACL_REMOVE) === false) ? false : true; 982 } 983 916 984 } 917 //TODO - Criar conceito separado para participantes externos e remover o criterio notExternal918 public function findExternalPaticipants( &$uri , &$result , &$criteria , $original ) {919 if(Config::me('uidNumber') && !isset($criteria['notExternal']))920 {921 $newuri['concept'] = 'user';922 $newuri['service'] = 'PostgreSQL';923 924 $newCriteria = $original['criteria'];925 $valid = true;926 927 $newCriteria['filter'] = array('AND',$newCriteria['filter'] , array('=' , 'owner', Config::me('uidNumber')) );928 $externalUsers = Controller::find( $newuri , $original['properties'] ? $original['properties'] : null , $newCriteria );929 930 if(is_array($externalUsers))931 {932 foreach ($externalUsers as $i => $v)933 $externalUsers[$i]['isExternal'] = '1';934 }935 else936 $externalUsers = array();937 938 if(!is_array($result))939 $result = array();940 941 return array_merge($result, $externalUsers);942 }943 944 }945 946 public function davcalCreateCollection( &$uri , &$params , &$criteria , $original ){947 if( Config::module('useCaldav' , 'expressoCalendar') )948 {949 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php';950 DAViCalAdapter::mkcalendar($params['location'] , $params['name'], isset($params['description']) ? $params['description'] : '' );951 }952 }953 954 public function davcalDeleteCollection( &$uri , &$params , &$criteria , $original ){955 if( Config::module('useCaldav' , 'expressoCalendar') && Config::module('onRemoveCascadeCalDav'))956 {957 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php';958 $calendar = Controller::read($uri);959 DAViCalAdapter::rmCalendar($calendar['location']);960 }961 }962 963 public function davcalUpdateCollection( &$uri , &$params , &$criteria , $original ){964 if( Config::module('useCaldav' , 'expressoCalendar') )965 {966 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php';967 if(isset($params['location']))968 {969 $calendar = Controller::read($uri);970 if($calendar['location'] !== $params['location'])971 DAViCalAdapter::mvcalendar($calendar['location'], $params['location']);972 }973 }974 }975 976 private function _makeUid() {977 978 $date = date('Ymd\THisT');979 $unique = substr(microtime(), 2, 4);980 $base = 'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPrRsStTuUvVxXuUvVwWzZ1234567890';981 $start = 0;982 $end = strlen( $base ) - 1;983 $length = 6;984 $str = null;985 for( $p = 0; $p < $length; $p++ )986 $unique .= $base{mt_rand( $start, $end )};987 988 return $date.$unique.'@expresso-calendar';989 }990 private function getStatus( $id ){991 $a = array(992 STATUS_CONFIRMED => 'CONFIRMED',993 STATUS_CANCELLED => 'CANCELLED',994 STATUS_TENATIVE => 'TENATIVE',995 STATUS_UNANSWERED => 'NEEDS-ACTION',996 STATUS_DELEGATED => 'DELEGATED'997 );998 return $a[ $id ];999 }1000 private static function decodeAlarmType( $id ){1001 $a = array( ALARM_ALERT => 'alert',1002 ALARM_MAIL => 'mail',1003 ALARM_SMS => 'sms' );1004 1005 return $a[ $id ];1006 }1007 private static function codeAlarmType( $type ){1008 $a = array( 'alert' => ALARM_ALERT ,1009 'mail' => ALARM_MAIL ,1010 'sms' => ALARM_SMS );1011 1012 return $a[ $type ];1013 }1014 private static function codeAlarmUnit( $u ){1015 if($u === 'd') return 'days';1016 if($u === 'm') return 'minutes';1017 if($u === 'H') return 'hours';1018 }1019 1020 private static function ownerSchedulable( $id ){1021 1022 $isOwner = Controller::find(array('concept' => 'participant'), array('id') ,1023 array('filter' =>1024 array('AND',1025 array('=' , 'isOrganizer' , '1'),1026 array('=' , 'user' ,$_SESSION['wallet']['user']['uidNumber'] ),1027 array('=' , 'schedulable' ,$id )1028 )));1029 1030 return ( isset( $isOwner[0]['id'] ) ) ? true : false;1031 }1032 1033 private static function schedulable2calendarToObject($Schedulable)1034 {1035 return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object , calendar.name as calendar_name ,calendar.location as calendar_location, calendar.id as calendar_id FROM calendar_to_calendar_object , calendar , calendar_signature'1036 .' WHERE calendar_signature.user_uidnumber = '.$_SESSION['wallet']['user']['uidNumber']1037 // .' AND calendar_signature.is_owner = 1'1038 .' AND calendar_signature.calendar_id = calendar.id'1039 .' AND calendar_to_calendar_object.calendar_id = calendar.id'1040 .' AND calendar_to_calendar_object.calendar_object_id = '.addslashes($Schedulable));1041 }1042 1043 protected static function isAllowDeleteInCalendar( $calendar ) {1044 $f = Controller::find(array('concept' => 'calendarToPermission') , false , array('filter' => array('AND' , array('=', 'user' , Config::me('uidNumber') ) , array('=', 'calendar' , $calendar))));1045 return (strpos($f[0]['acl'], CALENDAR_ACL_REMOVE) === false) ? false : true;1046 }1047 1048 }1049 985 1050 986 ?>
Note: See TracChangeset
for help on using the changeset viewer.