dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dolibarr-dev] [task #8450] Export iCal of commercial events


From: Yannick Warnier
Subject: [Dolibarr-dev] [task #8450] Export iCal of commercial events
Date: Fri, 01 Aug 2008 16:37:53 +0000
User-agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.1) Gecko/2008072820 Firefox/3.0.1

URL:
  <http://savannah.nongnu.org/task/?8450>

                 Summary: Export iCal of commercial events
                 Project: Dolibarr
            Submitted by: ywarnier
            Submitted on: vendredi 01.08.2008 à 16:37
                Category: None
         Should Start On: dimanche 10.08.2008 à 00:00
   Should be Finished on: mercredi 01.10.2008 à 00:00
                Priority: 5 - Normal
                  Status: None
             Assigned to: ywarnier
             Open/Closed: Open
         Discussion Lock: Any
Task open to external developers: None

    _______________________________________________________

Details:

In the commercial actions interface, offer an iCal export icon (general
"prospect" tab or new tab "export" for event details).

Good export library available in LGPL here:
http://www.kigkonsult.se/iCalcreator/index.php

Implementation could look like something like this (excerpt from the Dokeos
project):

                $ical = new vcalendar();
                $ical->setConfig('unique_id',api_get_path(WEB_PATH));
                $ical->setProperty( 'method', 'PUBLISH' );
                $ical->setConfig('url',api_get_path(WEB_PATH));
                $vevent = new vevent();
                switch($_GET['class'])
                {
                        case 'public':
                                $vevent->setClass('PUBLIC');                    
                                break;
                        case 'private':
                                $vevent->setClass('PRIVATE');
                                break;
                        case 'confidential':
                                $vevent->setClass('CONFIDENTIAL');
                                break;
                        default:
                                $vevent->setClass('PRIVATE');                   
        
                                break;
                }

                switch($_GET['type'])
                {
                        case 'personal':
                                require_once 
(api_get_path(SYS_CODE_PATH).'calendar/myagenda.inc.php');
                                $ai = get_personal_agenda_item($_GET['id']);
                $vevent->setProperty( 'summary',
mb_convert_encoding($ai['title'],'UTF-8',$charset));
                                
if(empty($ai['date'])){header('location:'.$_SERVER['REFERER_URI']);}
                                list($y,$m,$d,$h,$M,$s) = 
preg_split('/[\s:-]/',$ai['date']);
                                
$vevent->setProperty('dtstart',array('year'=>$y,'month'=>$m,'day'=>$d,'hour'=>$h,'min'=>$M,'sec'=>$s));
                                if(empty($ai['enddate']))
                                {       
                                        
$y2=$y;$m2=$m;$d2=$d;$h2=$h;$M2=$M+15;$s2=$s;
                                        if($M2>60){$M2=$M2-60;$h2+=1;}
                                }
                                else
                                {
                                        list($y2,$m2,$d2,$h2,$M2,$s2) = 
preg_split('/[\s:-]/',$ai['enddate']);
                                }
                                
$vevent->setProperty('dtend',array('year'=>$y2,'month'=>$m2,'day'=>$d2,'hour'=>$h2,'min'=>$M2,'sec'=>$s2));
                                //$vevent->setProperty( 'LOCATION', 
get_lang('Unknown') ); // property
name - case independent
                                $vevent->setProperty( 'description',
mb_convert_encoding($ai['text'],'UTF-8',$charset));
                                //$vevent->setProperty( 'comment', 'This is a 
comment' );
                                $user = api_get_user_info($ai['user']);
                                $vevent->setProperty('organizer',$user['mail']);
                                $vevent->setProperty('attendee',$user['mail']);
                                //$vevent->setProperty( 'rrule', array( 'FREQ' 
=> 'WEEKLY', 'count' =>
4));// occurs also four next weeks
                                
$ical->setConfig('filename',$y.$m.$d.$h.$M.$s.'-'.rand(1,1000).'.ics');
                                $ical->setComponent ($vevent); // add event to 
calendar
                                $ical->returnCalendar();
                                break;
                        case 'course':
                                $TABLEAGENDA                    = 
Database::get_course_table(TABLE_AGENDA);
                                $TABLE_ITEM_PROPERTY    = 
Database::get_course_table(TABLE_ITEM_PROPERTY);
                                require_once 
(api_get_path(SYS_CODE_PATH).'calendar/agenda.inc.php');
                                $ai = get_agenda_item($_GET['id']);
                        $vevent->setProperty( 'summary',
mb_convert_encoding($ai['title'],'UTF-8',$charset));
       
                
if(empty($ai['start_date'])){header('location:'.$_SERVER['REFERER_URI']);}
                                list($y,$m,$d,$h,$M,$s) = 
preg_split('/[\s:-]/',$ai['start_date']);
                                
$vevent->setProperty('dtstart',array('year'=>$y,'month'=>$m,'day'=>$d,'hour'=>$h,'min'=>$M,'sec'=>$s));
                                if(empty($ai['end_date']))
                                {       
                                        
$y2=$y;$m2=$m;$d2=$d;$h2=$h;$M2=$M+15;$s2=$s;
                                        if($M2>60){$M2=$M2-60;$h2+=1;}
                                }
                                else
                                {
                                        list($y2,$m2,$d2,$h2,$M2,$s2) = 
preg_split('/[\s:-]/',$ai['end_date']);
                                }
                                
$vevent->setProperty('dtend',array('year'=>$y2,'month'=>$m2,'day'=>$d2,'hour'=>$h2,'min'=>$M2,'sec'=>$s2));
                                $vevent->setProperty( 'description',
mb_convert_encoding($ai['content'],'UTF-8',$charset));
                                //$vevent->setProperty( 'comment', 'This is a 
comment' );
                                $user = api_get_user_info($ai['user']);
                                $vevent->setProperty('organizer',$user['mail']);
                                
//$vevent->setProperty('attendee',$user['mail']);
                                $course = api_get_course_info();
                                $vevent->setProperty('location', 
$course['name']); // property name -
case independent
                if($ai['repeat'])
                {
                        $trans =
array('daily'=>'DAILY','weekly'=>'WEEKLY','monthlyByDate'=>'MONTHLY','yearly'=>'YEARLY');
                    $freq = $trans[$ai['repeat_type']];
                    list($e_y,$e_m,$e_d) =
split('/',date('Y/m/d',$ai['repeat_end']));
               
        
$vevent->setProperty('rrule',array('FREQ'=>$freq,'UNTIL'=>array('year'=>$e_y,'month'=>$e_m,'day'=>$e_d),'INTERVAL'=>'1'));
                }
                                //$vevent->setProperty( 'rrule', array( 'FREQ' 
=> 'WEEKLY', 'count' =>
4));// occurs also four next weeks
                                
$ical->setConfig('filename',$y.$m.$d.$h.$M.$s.'-'.rand(1,1000).'.ics');
                                $ical->setComponent ($vevent); // add event to 
calendar
                                $ical->returnCalendar();
                                break;




    _______________________________________________________

Reply to this item at:

  <http://savannah.nongnu.org/task/?8450>

_______________________________________________
  Message posté via/par Savannah
  http://savannah.nongnu.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]