| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396 |
- <?php
- require_once(INSTALL_PATH . 'plugins/calendar/program/backend/backend.php');
- require_once(INSTALL_PATH . 'plugins/calendar/program/backend/caldav/caldav-client.php');
- final class calendar_caldav extends Backend
- {
- private $rcmail;
- private $type;
- public $utils;
- private $usertimezone;
- private $username;
- private $caldav;
- public $caldavs = array();
- private $account;
-
- public function __construct($rcmail, $type) {
- $this->rcmail = $rcmail;
- $this->type = $type;
- $url = $this->rcmail->config->get('caldav_url', false);
- if(!$url)
- return;
- if ($rcmail->config->get('timezone') === "auto") {
- $tz = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : date('Z')/3600;
- }
- else {
- $tz = $rcmail->config->get('timezone');
- if($rcmail->config->get('dst_active')) {
- $tz++;
- }
- }
- $this->usertimezone = $tz;
-
- $user = $this->rcmail->config->get('caldav_user','demo');
- $pass = $this->rcmail->config->get('caldav_password',$this->rcmail->encrypt('pass'));
- $auth = $this->rcmail->config->get('caldav_auth','basic');
- $extr = $this->rcmail->config->get('caldav_extr','1');
-
- $account = array(
- 'user' => $user,
- 'pass' => $pass,
- 'url' => $url,
- 'auth' => $auth,
- 'extr' => $extr,
- );
- $this->account = $account;
- $this->connect($account['url'], $account['user'], $account['pass'], $account['auth']);
- $public_caldavs = $rcmail->config->get('public_caldavs', array());
- foreach($public_caldavs as $category => $caldav){
- $public_caldavs[$category]['pass'] = $rcmail->encrypt($caldav['pass']);
- }
- $caldavs = array_merge($rcmail->config->get('caldavs', array()), $public_caldavs);
- $this->caldavs = $caldavs;
- }
-
- private function connect($url, $user, $pass, $auth = 'basic'){
- if($this->type == 'caldav'){
- $rcmail = $this->rcmail;
- $googleuser = $rcmail->config->get('googleuser', false);
- $googlepass= $rcmail->config->get('googlepass', false);
- if($user == '%gu'){
- if($googleuser){
- $user = str_replace('%gu', $googleuser, $user);
- }
- }
- else if($user == '%u'){
- $user = str_replace('%u', $_SESSION['username'], $user);
- }
- $pass_clear = false;
- if($pass == '%gp'){
- if($googlepass){
- $pass = str_replace('%gp', $rcmail->decrypt($googlepass), $pass);
- $pass_clear = true;
- }
- }
- else if($pass == '%p'){
- $pass = str_replace('%p', $rcmail->decrypt($_SESSION['password']), $pass);
- $pass_clear = true;
- }
- if(!$pass_clear){
- $pass = $this->rcmail->decrypt($pass);
- if($pass == '%gp'){
- if($googlepass){
- $pass = str_replace('%gp', $rcmail->decrypt($googlepass), $pass);
- }
- }
- else if($pass == '%p'){
- $pass = str_replace('%p', $rcmail->decrypt($_SESSION['password']), $pass);
- }
- }
- if(strpos($url,'%gu'))
- $url = str_replace('%gu', $googleuser, $url);
- if(strpos($url,'%u'))
- $url = str_replace('%u', $_SESSION['username'], $url);
- $url = slashify($url);
- if($url == "/"){
- $url = 'https://www.google.com/calendar/dav/john.doe@gmail.com/events/';
- }
- if(!$auth)
- $auth = 'basic';
- if($user != '%u' && $user != '%gu' && $pass !='%p' && $pass != '%gp' && strpos($url, '%u') === false && strpos($url, '%gu') === false)
- $ret = $this->caldav = new CalDAVClient(trim($url), trim($user), trim($pass), trim($auth));
- if(!$ret){
- write_log('calendar',"CalDAV Invalid URL: '".$account['url']."'");
- $ret = $this->caldav = new CalDAVClient('', '', '', '');
- }
- }
- }
-
- private function q($str) {
- return $this->rcmail->db->quoteIdentifier($str);
- }
-
- private function table($str) {
- return $this->rcmail->db->quoteIdentifier(get_table_name($str));
- }
-
- private function generateId(){
- $letters="abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- for($i = 0; $i<=6; $i++){
- $rndStr .= $letters[(rand() % strlen($letters))];
- }
- $icalStamp = date("Ymd\THis\Z");
- return $icalStamp."-".$rndStr;
- }
- private function syncCalDAV($events,$request='PUT',$categories=false){
- $return = false;
- if($this->type == 'caldav'){
- $event = $this->utils->exportEvents(0,0,$events);
- $caldav_props = unserialize($events[0]['caldav']);
- $this->connect($this->account['url'], $this->account['user'], $this->account['pass'], $this->account['auth']);
- if($categories){
- $caldavs = $this->caldavs;
- if(!empty($caldavs[$categories])){
- $this->connect($caldavs[$categories]['url'],$caldavs[$categories]['user'],$caldavs[$categories]['pass'],$caldavs[$categories]['auth']);
- }
- }
- if($request == 'DELETE'){
- $this->caldav->DoDELETERequest($caldav_props[0] . '.ics');
- $return = true;
- }
- else if($request == 'PUT'){
- $ret = $this->caldav->DoPUTRequest($caldav_props[0].'.ics', $event, $caldav_props[1]);
- if($ret){
- if(stripos($ret,'HTTP/1.1') !== false){
- if(stripos($ret,'HTTP/1.1 204') !== false || $caldav_props[2] == '*'){
- $ret = $this->caldav->GetEntryByHref($caldav_props[0]);
- $count = preg_match('/Etag:(.*?)\n/i',$ret,$temp);
- if($count > 0){
- $etag = trim(str_replace('"','',$temp[1]));
- $caldav_props = array($caldav_props[0], $etag, $caldav_props[2]);
- }
- }
- else{
- $caldav_props = null;
- }
- }
- else{
- $caldav_props = array($caldav_props[0], $ret, $caldav_props[2]);
- }
- if(is_array($caldav_props)){
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('caldav')."=?
- WHERE ".$this->q('uid')."=?
- AND ".$this->q('user_id')."=?",
- serialize($caldav_props),
- $events[0]['uid'],
- $this->rcmail->user->ID
- );
- $return = true;
- }
- else{
- $this->replicateEvents($events[0]['start'],$events[0]['start'] + 86400,$events[0]['categories']);
- }
- }
- }
- }
- else{
- $return = true;
- }
- return $return;
- }
-
- public function searchEvents($str) {
- if (!empty($this->rcmail->user->ID)) {
- $cal_searchset = $this->rcmail->config->get('cal_searchset', array('summary'));
- $all_day = '';
- $str = str_replace(array('\\'),array(''),$str);
- $str = str_replace('%','\%',$str);
- $str = str_replace('*','%',$str);
- $method = 'LIKE';
- $wildcard = '%';
- if(strlen($str) > 2){
- $sql_filter = " AND (" . $this->rcmail->db->ilike($cal_searchset[0], $wildcard.$str.$wildcard);
- if(count($cal_searchset) > 1){
- for($i=1;$i<count($cal_searchset);$i++){
- if($cal_searchset[$i] == 'all_day'){
- $all_day .= " AND " . $this->q('all_day') . "=1";
- }
- else{
- $sql_filter .= " OR " . $this->rcmail->db->ilike($cal_searchset[$i], $wildcard.$str.$wildcard);
- }
- }
- $sql_filter .= ")";
- }
- $sql_result = $this->rcmail->db->query(
- "SELECT * FROM ".$this->table('events').
- " WHERE " . $this->q('del') . "<>1".
- " AND " . $this->q('user_id') . "=?".
- $all_day.
- $sql_filter.
- " ORDER BY " . $this->q('summary'),
- $this->rcmail->user->ID);
- while ($sql_result && ($sql_arr = $this->rcmail->db->fetch_assoc($sql_result))) {
- $results[$sql_arr['event_id']] = $sql_arr;
- }
- if(!$_SESSION['removelayers']){
- $events_table = $this->rcmail->config->get('db_table_events', 'events');
- $this->rcmail->config->set('db_table_events',$this->rcmail->config->get('db_table_events_cache', 'events_cache'));
- $sql_result = $this->rcmail->db->query(
- "SELECT * FROM ".$this->table('events').
- " WHERE " . $this->q('del') . "<>1".
- " AND " . $this->q('user_id') . "=?".
- $all_day.
- $sql_filter.
- " ORDER BY " . $this->q('summary'),
- $this->rcmail->user->ID);
- while ($sql_result && ($sql_arr = $this->rcmail->db->fetch_assoc($sql_result))) {
- $results['c'.$sql_arr['event_id']] = $sql_arr;
- }
- $feeds = array_merge((array)$this->rcmail->config->get('public_calendarfeeds',array()),(array)$this->rcmail->config->get('calendarfeeds',array()));
- foreach($feeds as $url => $category){
- $arr = parse_url($url);
- if($arr['path'] == './'){
- if($_SERVER['HTTPS'])
- $https = 's';
- else
- $https = '';
- $url = 'http' . $https . "://" . $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . substr($url,1);
- $arr = parse_url($url);
- }
- $con = '?';
- if(strstr($url,'?'))
- $con = '&';
- if(stripos($arr['query'],'plugin.calendar_showlayer') && strtolower($arr['host']) == strtolower($_SERVER['HTTP_HOST'])){
- $user_id = $this->rcmail->user->ID;
- $temparr = explode('&',$arr['query']);
- foreach($temparr as $key => $val){
- if(strpos($val,'_userid=') === 0){
- $temp = explode("=",$val);
- $remote_user = $temp[1];
- $this->rcmail->user->ID = $remote_user;
- $sql_result = $this->rcmail->db->query(
- "SELECT * FROM ".$this->table('events').
- " WHERE " . $this->q('del') . "<>1".
- " AND " . $this->q('user_id') . "=?".
- $all_day.
- $sql_filter.
- " ORDER BY " . $this->q('summary'),
- $this->rcmail->user->ID);
- while ($sql_result && ($sql_arr = $this->rcmail->db->fetch_assoc($sql_result))) {
- $results['c'.$sql_arr['event_id']] = $sql_arr;
- }
- $this->rcmail->user->ID = $user_id;
- break;
- }
- }
- }
- }
- $this->rcmail->config->set('db_table_events', $events_table);
- $arr = $this->utils->getUser($remote_user);
- $prefs = unserialize($arr['preferences']);
- $events_table = $this->rcmail->config->get('db_table_events', 'events');
- $db_table = str_replace('_caldav','',$events_table);
- $map = $this->rcmail->config->get('backend_db_table_map',array());
- if($prefs['backend'] == 'caldav'){
- $db_table .= $map['caldav'];
- }
- else{
- $db_table .= $map['database'];
- }
- foreach($feeds as $url => $category){
- $arr = parse_url($url);
- $con = '?';
- if(strstr($url,'?'))
- $con = '&';
- if(stripos($arr['query'],'plugin.calendar_showlayer') && strtolower($arr['host']) == strtolower($_SERVER['HTTP_HOST'])){
- $user_id = $this->rcmail->user->ID;
- $temparr = explode('&',$arr['query']);
- foreach($temparr as $key => $val){
- if(strpos($val,'_userid=') === 0){
- $temp = explode("=",$val);
- $remote_user = $temp[1];
- $this->rcmail->user->ID = $remote_user;
- $sql_result = $this->rcmail->db->query(
- "SELECT * FROM ".$db_table.
- " WHERE " . $this->q('del') . "<>1".
- " AND " . $this->q('user_id') . "=?".
- $all_day.
- $sql_filter.
- " ORDER BY " . $this->q('summary'),
- $this->rcmail->user->ID);
- while ($sql_result && ($sql_arr = $this->rcmail->db->fetch_assoc($sql_result))) {
- $results[$sql_arr['event_id']] = $sql_arr;
- }
- $this->rcmail->user->ID = $user_id;
- break;
- }
- }
- }
- }
- $this->rcmail->config->set('db_table_events', $events_table);
- }
- }
- }
- if(is_array($results)){
- $ret = $results;
- }
- else
- $ret = false;
- return $ret;
- }
-
- public function scheduleReminders($event){
- if (!empty($this->rcmail->user->ID) && $event) {
- $map = $this->rcmail->config->get('backend_db_table_map');
- if(stripos($this->table('events'),$map['caldav'])){
- $col = 'caldav';
- }
- else{
- if($this->rcmail->config->get('db_table_events_cache') == get_table_name('events')){
- $col = 'cache';
- }
- else{
- $col = 'events';
- }
- }
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('reminders') . "
- WHERE ".$this->q($col)."=? AND ".$this->q('user_id')."=?",
- $event['event_id'],
- $this->rcmail->user->ID
- );
- if($event['del'] == '1'){
- return;
- }
- if($event['recurring'] != 0){
- $events = $this->getEvents(
- time() - 86400,
- time() + 86400,
- array(),
- false,
- array('uid',$event['uid'])
- );
- }
- else{
- $events[0] = $event;
- }
- if(is_array($events)){
- $start = time();
- $props = array();
- $props['user_id'] = $this->rcmail->user->ID;
- if($_SESSION['username'])
- $props['username'] = $_SESSION['username'];
- else{
- $user = $this->utils->getUser($props['user_id']);
- $props['username'] = $user['username'];
- }
- $props['user_data'] = $this->rcmail->user->data;
- $props['lang'] = $this->rcmail->user->language;
- foreach($events as $key => $event){
- if($event['reminderservice'] != '0'){
- $next = $event['start'] - $event['reminder'];
- $schedule = false;
- if($event['reminderservice'] == 'popup'){
- if(!$event['remindersent'])
- $schedule = true; // schedule missed reminders
- if($next > $start)
- $schedule = true; // always schedule future reminders
- }
- else if($event['reminderservice'] == 'email'){
- if($next > $start && $event['clone'])
- $schedule = true; // schedule future reminders for recurring events
- if(!$event['remindersent'] && !$event['clone'] && $next > $start)
- $schedule = true; // schedule future reminders for single events
- if(!empty($this->caldavs[$event['categories']])){
- if($this->caldavs[$event['categories']]['extr'] == 'external')
- $schedule = false;
- }
- else{
- if($this->account['extr'] == 'external')
- $schedule = false;
- }
- }
- if($schedule){
- $mapped = $this->utils->eventArrayMap($event);
- $props['event'] = $mapped;
- $props['ics'] = $this->utils->exportEvents(0,0,array(0=>$event), false, true);
- $query = $this->rcmail->db->query(
- "INSERT INTO " . $this->table('reminders') . "
- (".
- $this->q('user_id').", ".
- $this->q($col).", ".
- $this->q('type').", ".
- $this->q('props').", ".
- $this->q('runtime').")
- VALUES (?, ?, ?, ?, ?)",
- $this->rcmail->user->ID,
- $event['event_id'],
- $event['reminderservice'],
- serialize($props),
- $next
- );
- if($event['reminderservice'] == 'email'){
- break;
- }
- }
- }
- }
- }
- }
- }
- public function newEvent(
- $start,
- $end,
- $summary,
- $description,
- $location,
- $categories,
- $allDay,
- $recur,
- $expires,
- $occurrences,
- $byday=false,
- $bymonth=false,
- $bymonthday=false,
- $recurrence_id=false,
- $exdates=false,
- $reminderbefore=false,
- $remindertype=false,
- $remindermailto=false,
- $uid=false,
- $client=false
- ) {
- if (!empty($this->rcmail->user->ID)) {
- $srecur = (string) $recur;
- $rr = substr($recur,0,1);
- $recur = substr($recur,1);
- // PostgreSQL sets 'f' instead of '0' for false, which messes up our conditionals!
- if ($byday==false) $byday='0';
- if ($bymonth==false) $bymonth='0';
- if ($bymonthday==false) $bymonthday='0';
- if ($recurrence_id==false) $recurrence_id='0';
- if ($exdates==false) $exdates='0';
- if ($recur==false) $recur='0';
- if ($reminderbefore==false) $reminderbefore='0';
- if ($remindertype==false) $remindertype='0';
- if ($remindermailto==false) $remindermailto='0';
- if ($uid==false) $uid='0';
- if ($client==false) $client='0';
- //
- if(!$uid)
- $uid = $this->generateId();
- $exists = $this->getEventByUID($uid, $recurrence_id);
- if(is_array($exists)){
- if($exists['del'] != '0'){
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('del')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- 0,
- $exists['event_id'],
- $this->rcmail->user->ID
- );
- }
- if(
- $start != $exists['start'] ||
- $end != $exists['end'] ||
- $summary != $exists['summary'] ||
- $description != $exists['description'] ||
- $location != $exists['location'] ||
- $categories != $exists['categories'] ||
- $recurrence_id != $exists['recurrence_id'] ||
- $exdates != $exists['exdates'] ||
- $reminderbefore != $exists['reminder'] ||
- $remindertype != $exists['reminderservice'] ||
- $remindermailto != $exists['remindermailto'] ||
- $srecur != $exists['rr'] . $exists['recurring'] ||
- $expires != $exists['expires'] ||
- $occurences != $exists['occurences'] ||
- $byday != $exists['byday'] ||
- $bymonth != $exists['bymonth'] ||
- $bymonthday != $exists['bymonthday'] ||
- $allDay != $exists['all_day']
- ){
- $ret = $this->editEvent(
- $exists['event_id'],
- $start,
- $end,
- $summary,
- $description,
- $location,
- $categories,
- $srecur,
- $expires,
- $occurrences,
- $byday,
- $bymonth,
- $bymonthday,
- $recurrence_id,
- $exdates,
- $reminderbefore,
- $remindertype,
- $remindermailto,
- $allDay
- );
- }
- else{
- $ret = $exists;
- }
- $ret['edit'] = 1;
- return $ret;
- }
- $query = $this->rcmail->db->query(
- "INSERT INTO " . $this->table('events') . "
- (".
- $this->q('user_id').", ".
- $this->q('start').", ".
- $this->q('end').", ".
- $this->q('summary').", ".
- $this->q('description').", ".
- $this->q('location').", ".
- $this->q('categories').", ".
- $this->q('all_day').", ".
- $this->q('recurring').", ".
- $this->q('rr').", ".
- $this->q('expires').", ".
- $this->q('occurrences').", ".
- $this->q('byday').", ".
- $this->q('bymonth').", ".
- $this->q('bymonthday').", ".
- $this->q('reminder').", ".
- $this->q('reminderservice').", ".
- $this->q('remindermailto').", ".
- $this->q('remindersent').", ".
- $this->q('recurrence_id').", ".
- $this->q('exdates').", ".
- $this->q('uid').", ".
- $this->q('client').", ".
- $this->q('caldav').", ".
- $this->q('timestamp').")
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- $this->rcmail->user->ID,
- $start,
- $end,
- $summary,
- $description,
- $location,
- $categories,
- $allDay,
- $recur,
- $rr,
- $expires,
- $occurrences,
- $byday,
- $bymonth,
- $bymonthday,
- $reminderbefore,
- $remindertype,
- $remindermailto,
- 0,
- $recurrence_id,
- $exdates,
- $uid,
- $client,
- serialize(array(0 => $uid, 1 => false, 2 => '*')),
- date('Y-m-d H:i:s', time())
- );
- $id = $this->rcmail->db->insert_id($this->rcmail->config->get('db_sequencs_events'));
- $events = $this->getEventsByUID($uid);
- //find me: investigate why this is here ...
- if($this->rcmail->action == 'plugin.newEvent' || $this->rcmail->action == 'plugin.editEvent' || $this->rcmail->action == 'plugin.saveical' || $this->rcmail->action == 'plugin.calendar_upload' || $this->rcmail->action == 'plugin.moveEvent'|| $this->rcmail->action == 'plugin.resizeEvent' || $this->rcmail->action == 'plugin.calendar_showlayer'){
- $events[0]['sync'] = $this->syncCalDAV($events,'PUT',$categories);
- }
- $this->calModified($this->rcmail->user->ID);
- $this->scheduleReminders($events[0]);
- return $events[0];
- }
- }
- public function editEvent(
- $id,
- $start,
- $end,
- $summary,
- $description,
- $location,
- $categories,
- $recur,
- $expires,
- $occurrences,
- $byday=false,
- $bymonth=false,
- $bymonthday=false,
- $recurrence_id=false,
- $exdates=false,
- $reminderbefore=false,
- $remindertype=false,
- $remindermailto=false,
- $allDay=false,
- $old_categories=false
- ) {
- if (!empty($this->rcmail->user->ID)) {
- $srecur = $recur;
- $rr = substr($recur,0,1);
- $recur = substr($recur,1);
- // PostgreSQL sets 'f' instead of '0' for false, which messes up our conditionals!
- if ($byday==false) $byday='0';
- if ($bymonth==false) $bymonth='0';
- if ($bymonthday==false) $bymonthday='0';
- if ($recurrence_id==false) $recurrence_id='0';
- if ($exdates==false) $exdates='0';
- if ($reminderbefore==false) $reminderbefore='0';
- if ($remindertype==false) $remindertype='0';
- if ($remindermailto==false) $remindermailto='0';
- if ($allday==false) $allday='0';
- if ($recurrence_id==false) $recurrence_id='0';
- if ($recur==false) $recur='0';
- if ($uid==false) $uid='0';
- if ($client==false) $client='0';
- //
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".
- $this->q('summary')."=?, ".
- $this->q('start')."=?, ".
- $this->q('end')."=?, ".
- $this->q('description')."=?, ".
- $this->q('location')."=?, ".
- $this->q('categories')."=?, ".
- $this->q('rr')."=?, ".
- $this->q('recurring')."=?, ".
- $this->q('expires')."=?, ".
- $this->q('occurrences')."=?, ".
- $this->q('byday')."=?, ".
- $this->q('bymonth')."=?, ".
- $this->q('bymonthday')."=?, ".
- $this->q('recurrence_id')."=?, ".
- $this->q('exdates')."=?, ".
- $this->q('all_day')."=?, ".
- $this->q('reminder')."=?, ".
- $this->q('reminderservice')."=?, ".
- $this->q('remindermailto')."=?, ".
- $this->q('remindersent')."=?, ".
- $this->q('timestamp')."=?, ".
- $this->q('del')."=?, ".
- $this->q('notified')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- $summary,
- $start,
- $end,
- $description,
- $location,
- $categories,
- $rr,
- $recur,
- $expires,
- $occurrences,
- $byday,
- $bymonth,
- $bymonthday,
- $recurrence_id,
- $exdates,
- $allDay,
- $reminderbefore,
- $remindertype,
- $remindermailto,
- 0,
- date('Y-m-d H:i:s', time()),
- 0,
- 0,
- $id,
- $this->rcmail->user->ID
- );
- $this->calModified($this->rcmail->user->ID);
- $event = $this->getEvent($id);
- // find me: get uid from GUI and calendar.php
- $events = $this->getEventsByUID($event['uid']);
- $this->scheduleReminders($events[0]);
- if($this->type == 'caldav'){
- //find me: investigate why this is here ...
- if($this->rcmail->action == 'plugin.editEvent' || $this->rcmail->action == 'plugin.newEvent' || $this->rcmail->action == 'plugin.calendar_upload' || $this->rcmail->action == 'plugin.calendar_showlayer'){
- $caldavs = $this->caldavs;
- if($categories != $old_categories){
- if(!empty($caldavs[$old_categories]) || !empty($caldavs[$categories])){
- $sync = $this->newEvent($start, $end, $summary, $description, $location, $categories, $allDay, $srecur, $expires, $occurrences, $byday, $bymonth, $bymonthday);
- if($sync)
- $events[0] = $this->removeEvent($id, $old_categories);
- }
- else{
- $events[0]['sync'] = $this->syncCalDAV($events);
- }
- }
- else{
- $events[0]['sync'] = $this->syncCalDAV($events);
- }
- }
- }
- else{
- $events[0]['sync'] = true;
- }
- return $events[0];
- }
- }
- public function moveEvent(
- $id,
- $start,
- $end,
- $allDay,
- $reminder
- ) {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('start')."=?, ".
- $this->q('end')."=?, ".
- $this->q('all_day')."=?, ".
- $this->q('remindersent')."=?, ".
- $this->q('timestamp')."=?, ".
- $this->q('notified')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- $start,
- $end,
- $allDay,
- 0,
- date('Y-m-d H:i:s', time()),
- 0,
- $id,
- $this->rcmail->user->ID
- );
- $this->calModified($this->rcmail->user->ID);
- $event = $this->getEvent($id);
- // find me: get uid from GUI and calendar.php
- $events = $this->getEventsByUID($event['uid']);
- if($this->rcmail->action == 'plugin.moveEvent'){
- $events[0]['sync'] = $this->syncCalDAV($events,'PUT',$events[0]['categories']);
- }
- $this->scheduleReminders($events[0]);
- return $events[0];
- }
- }
-
- public function resizeEvent(
- $id,
- $start,
- $end,
- $reminder
- ) {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('start')."=?, ".
- $this->q('end')."=?, ".
- $this->q('remindersent')."=?, ".
- $this->q('timestamp')."=?, ".
- $this->q('notified')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- $start,
- $end,
- 0,
- date('Y-m-d H:i:s', time()),
- 0,
- $id,
- $this->rcmail->user->ID
- );
- $this->calModified($this->rcmail->user->ID);
- $event = $this->getEvent($id);
- // find me: get uid from GUI and calendar.php
- $events = $this->getEventsByUID($event['uid']);
- if($this->rcmail->action == 'plugin.resizeEvent'){
- $events[0]['sync'] = $this->syncCalDAV($events,'PUT',$events[0]['categories']);
- }
- $this->scheduleReminders($events[0]);
- return $events[0];
- }
- }
- public function removeEvent($id, $categories=false) {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('del')."=?, ".$this->q('timestamp')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- 1,
- date('Y-m-d H:i:s', time()),
- $id,
- $this->rcmail->user->ID
- );
- $event = $this->getEvent($id);
- // find me: get uid from GUI and calendar.php
- $events = $this->getEventsByUID($event['uid']);
- //find me: investigate why this is here ...
- if($this->rcmail->action == 'plugin.editEvent' || $this->rcmail->action == 'plugin.removeEvent' || $this->rcmail->action == 'plugin.calendar_showlayer'){
- $caldav_props = unserialize($event['caldav']);
- $caldavs = $this->caldavs;
- if($event['recurrence_id'] != 0){
- $initialevent = $this->getEventByUID($event['uid']);
- if($initialevent['exdates']){
- $exdates = (array) @unserialize($initialevent['exdates']);
- $exdates[] = (int) $event['start'];
- }
- else{
- $exdates = array((int) $event['start']);
- }
- $initialevent['exdates'] = serialize($exdates);
- $initialevent['recurrence_id'] = null;
- $events[0]['sync'] = $this->syncCalDAV(array(0 => $initialevent),'PUT',$initialevent['categories']);
- }
- else{
- if(!$categories)
- $categories = $events[0]['categories'];
- $events[0]['sync'] = $this->syncCalDAV($events,'DELETE',$categories);
- }
- }
- $this->calModified($this->rcmail->user->ID);
- $this->scheduleReminders($events[0]);
- return $events[0];
- }
- }
-
- public function purgeEvents() {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=?
- AND ".$this->q('del')."<>?",
- $this->rcmail->user->ID,
- 0
- );
- }
- }
-
- public function removeDuplicate($id) {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('event_id')."=?",
- $this->rcmail->user->ID,
- $id
- );
- $this->calModified($this->rcmail->user->ID, true);
- }
- }
-
- public function truncateEvents($mode=0) {
- if (!empty($this->rcmail->user->ID)) {
- if($mode == 0){
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('del')."=?",
- $this->rcmail->user->ID,
- 1
- );
- $this->calModified($this->rcmail->user->ID, true);
- }
- else if($mode == 1){
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('del')."=?, ".$this->q('timestamp')."=?
- WHERE ".$this->q('user_id')."=?",
- 2,
- date('Y-m-d H:i:s', time()),
- $this->rcmail->user->ID
- );
- }
- else if($mode == 2){
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('del')."=?, ".$this->q('timestamp')."=?
- WHERE ".$this->q('user_id')."=?",
- 0,
- date('Y-m-d H:i:s', time()),
- $this->rcmail->user->ID
- );
- }
- else if($mode == 3){
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=?",
- $this->rcmail->user->ID
- );
- }
- }
- }
-
- public function exportEvents($categories=false){
- if($this->type == 'caldav'){
- if($categories){
- $caldavs = $this->caldavs;
- if(is_array($caldavs[$categories])){
- $this->connect($caldavs[$categories]['url'],$caldavs[$categories]['user'],$caldavs[$categories]['pass'],$caldavs[$categories]['auth']);
- }
- }
- $response = trim($this->caldav->DoRequest());
- $temparr = explode("\r\n\r\n", $response,2);
- return $temparr[1];
- }
- }
-
- private function _getEvents(
- $estart,
- $eend,
- $category=false,
- $type='events'
- ) {
- if($this->type == 'caldav'){
- $events = array();
- $map = $this->rcmail->config->get('backend_db_table_map');
- if(stripos($this->table('events'),$map['caldav'])){
- $startYear = date('Y',$estart);
- $startMonth = date('m',$estart);
- $startDay = date('d',$estart);
- $endYear = date('Y',$eend );
- $endMonth = date('m',$eend );
- $endDay = date('d',$eend );
- $caldavs = $this->caldavs;
- if(!$category || ($category && !$caldavs[$category])){
- if($type == 'events'){
- $events = (array) $this->caldav->GetEvents($startYear.$startMonth.$startDay."T000000Z",$endYear.$endMonth.$endDay."T000000Z");
- }
- else if($type == 'alarms'){
- // cron login successful ?
- if(method_exists($this->caldav, 'GetEventAlarms')){
- $events = (array) $this->caldav->GetEventAlarms($startYear.$startMonth.$startDay."T000000Z",$endYear.$endMonth.$endDay."T000000Z");
- }
- }
- }
- else{
- if($category && $caldavs[$category]){
- $caldav = $caldavs[$category];
- $this->connect($caldav['url'],$caldav['user'],$caldav['pass'],$caldav['auth']);
- $startYear = date('Y',$estart);
- $startMonth = date('m',$estart);
- $startDay = date('d',$estart);
- if($type == 'events'){
- $layers = (array) $this->caldav->GetEvents($startYear.$startMonth.$startDay."T000000Z",$endYear.$endMonth.$endDay."T000000Z");
- }
- else if($type == 'alarms'){
- $layers = (array) $this->caldav->GetEventAlarms($startYear.$startMonth.$startDay."T000000Z",$endYear.$endMonth.$endDay."T000000Z");
- }
- foreach($layers as $key => $layer){
- $layers[$key]['data'] = str_replace("\nCATEGORIES:","\nX-CATEGORIES:",$layers[$key]['data']);
- $insert = "\nCATEGORIES:" . $category;
- $layers[$key]['data'] = str_replace("\nBEGIN:VEVENT", "\nBEGIN:VEVENT" . $insert, $layers[$key]['data']);
- }
- $events = $layers;
- }
- }
- $concat = '';
- foreach($events as $key => $val){
- $insert = "\nX-HREF:".$val['href']."\nX-ETAG:".$val['etag'];
- $val['data'] = str_replace("\nBEGIN:VEVENT", "\nBEGIN:VEVENT" . $insert, $val['data']);
- $concat .= $val['data'];
- }
- if($concat != ''){
- $this->utils->importEvents($concat);
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('timestamp')."=?, ".$this->q('notified')."=?
- WHERE ".$this->q('user_id')."=?",
- '0',
- '1',
- $this->rcmail->user->ID
- );
- }
- }
- }
- }
-
- public function removeReminder(
- $id,
- $event_id,
- $ts
- ) {
- if (!empty($this->rcmail->user->ID)) {
- if(!$id && !$event_id){
- $reminders = (array) $this->getReminders($ts);
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('reminders') . "
- WHERE " . $this->q('type') . "=? AND ".$this->q('user_id')."=? AND " . $this->q('runtime') . "<?",
- 'popup',
- $this->rcmail->user->ID,
- $ts
- );
- foreach($reminders as $reminder){
- $query = $this->rcmail->db->query(
- "UPDATE " .$this->table('events') . "
- SET ". $this->q('remindersent')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- $ts,
- $reminder['id'],
- $this->rcmail->user->ID
- );
- }
- }
- else{
- $query = $this->rcmail->db->query(
- "DELETE FROM " . $this->table('reminders') . "
- WHERE " . $this->q('reminder_id') . "=? AND ".$this->q('user_id')."=?",
- $id,
- $this->rcmail->user->ID
- );
- $query = $this->rcmail->db->query(
- "UPDATE " .$this->table('events') . "
- SET ". $this->q('remindersent')."=?
- WHERE ".$this->q('event_id')."=?
- AND ".$this->q('user_id')."=?",
- $ts,
- $event_id,
- $this->rcmail->user->ID
- );
- }
- }
- }
-
- public function getReminders(
- $start,
- $type='popup'
- ) {
- $ret = array();
- if (!empty($this->rcmail->user->ID)) {
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('reminders') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('runtime')."<? AND ".$this->q('type')."=?",
- $this->rcmail->user->ID,
- $start,
- $type
- );
- $reminders = array();
- while ($result && ($reminder = $this->rcmail->db->fetch_assoc($result))) {
- $reminders[] = $reminder;
- }
- foreach($reminders as $key => $val){
- $col = 'events';
- if($val['caldav'] != '0')
- $col = 'caldav';
- else if($val['cache'] != '0')
- $col = 'cache';
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('event_id')."=?",
- $this->rcmail->user->ID,
- $val[$col]
- );
- if($result){
- $event = $this->rcmail->db->fetch_assoc($result);
- if($event['recurring'] != '0'){
- $duration = 0;
- if($event['end'] != '0'){
- $duration = (int) $event['end'] - (int) $event['start'];
- }
- $start = (int) $val['runtime'] + (int) $event['reminder'];
- $end = $start + $duration;
- $event['start'] = $start;
- if($event['end'] != '0'){
- $event['end'] = $start + $duration;
- }
- }
- $event['reminder_id'] = $val['reminder_id'];
- $ret[$event['start'] . $event['uid'] . $event['event_id']] = $this->utils->eventArrayMap($event);
- }
- }
- }
- return $ret;
- }
-
- public function replicateEvents(
- $estart,
- $eend,
- $category=false,
- $type='events'
- ){
- if (!empty($this->rcmail->user->ID)) {
- $this->_getEvents($estart, $eend, $category, $type);
- }
- }
-
- public function getEvents(
- $estart,
- $eend,
- $labels=array(),
- $category=false,
- $filter=false,
- $client=false,
- $type='events'
- ) {
- if (!empty($this->rcmail->user->ID)) {
- $mem_limit = (int) ini_get('memory_limit');
- $start = -1;
- $end = $eend + 1;
- if($filter){
- $filterfield = $filter[0];
- $filtercomp = '=?';
- $filterval = $filter[1];
- }
- else{
- $filterfield = 'del';
- $filtercomp = '<>?';
- $filterval = 1;
- }
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".
- $this->q('start').">? AND ".
- $this->q('start')."<? AND ".
- $this->q($filterfield) . $filtercomp,
- $this->rcmail->user->ID,
- $start,
- $end,
- $filterval
- );
- $events = array();
- while ($result && ($event = $this->rcmail->db->fetch_assoc($result))) {
- if($this->rcmail->action == 'plugin.getEvents'){
- $db_category = $event['categories'];
- if($category){
- if($db_category != $category){
- continue;
- }
- }
- else{
- $caldavs = $this->caldavs;
- if(!empty($caldavs[$db_category])){
- continue;
- }
- }
- }
- // backwards compatibility
- if(empty($event['rr'])){
- switch($event['recurring']){
- case 86400:
- case 86401:
- $event['rr'] = 'd';
- break;
- case 604800:
- case 1209600:
- case 1814400:
- case 2419200:
- $event['rr'] = 'w';
- break;
- case 2592000:
- $event['rr'] = 'm';
- break;
- case 31536000:
- $event['rr'] = 'y';
- break;
- }
- }
- $append = $event['start'];
- $add = true;
- if($event['exdates']){
- $exdates = @unserialize($event['exdates']);
- if(is_array($exdates) && count($exdates) > 0){
- $exdates = $this->utils->array_flatten($exdates);
- $exdates = array_flip($exdates);
- if(isset($exdates[$event['start']])){
- $add = false;
- }
- }
- }
- if($event['recurrence_id']){
- $append = $event['recurrence_id'];
- }
- if($event['start'] >= $estart || $event['end'] >= $estart || $event['recurring'] != 0){
- if($event['start'] >= $estart || $event['end'] >= $estart){
- if($add){
- $events[md5($event['uid'].$append)]=array(
- 'event_id' => (int) $event['event_id'],
- 'uid' => (string) $event['uid'],
- 'start' => (int) $event['start'],
- 'end' => (int) $event['end'],
- 'expires' => (string) $event['expires'],
- 'rr' => (string) $event['rr'],
- 'recur' => (string) $event['recurring'],
- 'occurrences' => (int) $event['occurrences'],
- 'recurrence_id' => (string) $event['recurrence_id'],
- 'summary' => (string) $event['summary'],
- 'description' => (string) $event['description'],
- 'location' => (string) $event['location'],
- 'categories' => (string) $event['categories'],
- 'all_day' => (int) $event['all_day'],
- 'timestamp' => (string) $event['timestamp'],
- 'del' => (int) $event['del'],
- 'notified' => (int) $event['notified'],
- 'byday' => (string) $event['byday'],
- 'bymonth' => (string) $event['bymonth'],
- 'bymonthday' => (string) $event['bymonthday'],
- 'reminder' => (int) $event['reminder'],
- 'reminderservice' => (string) $event['reminderservice'],
- 'remindermailto' => (string) $event['remindermailto'],
- 'editable' => true,
- 'clone' => false
- );
- }
- }
- if($event['recurring'] != 0 && !$client){
- $rrule = $this->utils->rrule($event);
- if($rrule){
- $basedate = date('Ymd\THis',$event['start']);
- $rule = new RRule(new iCalDate($basedate), $rrule);
- do{
- $date = $rule->GetNext();
- if(isset($date)){
- $clone_date = $date->Render();
- $clone_start = strtotime($clone_date);
- $clone_end = strtotime($clone_date) + $event['end'] - $event['start'];
- $dst_adjust = 0;
- if(date('I', $event['start']) != date('I', $clone_start)){
- if(date('I',$event['start']) == 0 && date('I',$clone_start) == 1)
- $dst_adjust = 3600;
- else
- $dst_adjust = -3600;
- }
- $clone_start = $clone_start + $dst_adjust;
- $clone_end = $clone_end + $dst_adjust;
- if($clone_start > $event['start'] && $clone_start > $estart){
- if(!isset($exdates[$clone_start])){
- if($add){
- $set_clone = (string) $event['start'];
- $set_clone_end = (string) $event['end'];
- }
- else{
- $set_clone = false;
- $set_clone_end = false;
- $add = true;
- }
- $event['editable'] = true;
- $event['recur'] = $event['recurring'];
- $events[md5($event['uid'].$clone_start)] = array(
- 'event_id' => (int) $event['event_id'],
- 'uid' => (string) $event['uid'],
- 'start' => (int) $clone_start,
- 'end' => (int) $clone_end,
- 'expires' => (string) $event['expires'],
- 'rr' => (string) $event['rr'],
- 'recur' => (string) $event['recurring'],
- 'occurrences' => (int) $event['occurrences'],
- 'recurrence_id' => (string) $event['recurrence_id'],
- 'summary' => (string) $event['summary'],
- 'description' => (string) $event['description'],
- 'location' => (string) $event['location'],
- 'categories' => (string) $event['categories'],
- 'all_day' => (int) $event['all_day'],
- 'timestamp' => (string) $event['timestamp'],
- 'del' => (int) $event['del'],
- 'byday' => (string) $event['byday'],
- 'bymonth' => (string) $event['bymonth'],
- 'bymonthday' => (string) $event['bymonthday'],
- 'reminder' => (int) $event['reminder'],
- 'reminderservice' => (string) $event['reminderservice'],
- 'remindermailto' => (string) $event['remindermailto'],
- 'editable' => (bool) $event['editable'],
- 'clone' => $set_clone,
- 'clone_end' => $set_clone_end,
- 'caldav' => (string) $event['caldav'],
- 'notified' => (int) $event['notified'],
- 'initial' => (array) $this->utils->eventArrayMap($event)
- );
- }
- }
- }
- }
- while(isset($date) && strtotime($date->Render()) <= $eend);
- }
- }
- }
- }
- $public_caldavs = $this->rcmail->config->get('public_caldavs', array());
- foreach($events as $key => $event){
- $category = $event['categories'];
- if(!empty($public_caldavs[$category]) && $public_caldavs[$category]['readonly']){
- $events[$key]['editable'] = false;
- }
- }
- return $events;
- }
- }
-
- private function calModified($userid=false,$del=false) {
- if($userid && !$del){
- file_put_contents('./plugins/calendar/temp/' . $userid . '.pid', time());
- }
- if($userid && $del){
- @unlink('./plugins/calendar/temp/' . $userid . '.pid');
- }
- }
- public function removeTimestamps() {
- if (!empty($this->rcmail->user->ID)) {
- $query = $this->rcmail->db->query(
- "UPDATE " . $this->table('events') . "
- SET ".$this->q('timestamp')."=?
- WHERE ".$this->q('user_id')."=?",
- '0',
- $this->rcmail->user->ID
- );
- }
- }
-
- public function getEvent($eventid){
- if (!empty($this->rcmail->user->ID)) {
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('event_id')."=?",
- $this->rcmail->user->ID,
- $eventid
- );
- $event = $this->rcmail->db->fetch_assoc($result);
- if($event){
- $event['recur'] = $event['recurring'];
- return $event;
- }
- }
- return array();
- }
-
- public function getEventByUID($uid, $recurrence_id=0){
- $event = array();
- if (!empty($this->rcmail->user->ID)) {
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('uid')."=? AND ".$this->q('recurrence_id')."=?",
- $this->rcmail->user->ID,
- $uid,
- $recurrence_id
- );
- while ($result && ($event = $this->rcmail->db->fetch_assoc($result))){
- $events[] = $event;
- }
- if(is_array($events) && count($events) > 1)
- write_log('calendar', "ERROR: Event with UID " . $event['uid'] . " is not unique");
- $event = $events[0];
- }
- return $event;
- }
-
- public function getEventsByUID($uid){
- if (!empty($this->rcmail->user->ID)) {
- $result = $this->rcmail->db->query(
- "SELECT * FROM " . $this->table('events') . "
- WHERE ".$this->q('user_id')."=? AND ".$this->q('uid')."=?",
- $this->rcmail->user->ID,
- $uid
- );
- while ($result && ($event = $this->rcmail->db->fetch_assoc($result))){
- $temparr[] = $event;
- }
- }
- $i = 0;
- $events = array();
- if(is_array($temparr)){
- foreach($temparr as $key => $event){
- if(!$event['recurrence_id']){
- if(!empty($events[0]))
- write_log('calendar', "ERROR: Event with UID " . $event['uid'] . " is not unique");
- $events[0] = $event;
- }
- else{
- $events[$i] = $event;
- }
- $i++;
- }
- }
- return $events;
- }
-
- public function test($str = 'db_table_events') {
- $this->rcmail->db->db_handle->loadModule('Manager');
- if(!PEAR::isError($result = $this->rcmail->db->db_handle->listTableFields($this->rcmail->config->get($str))))
- $ret = $result;
- else
- $ret = array();
- return $ret;
- }
- }
- ?>
|