forked from Wavyzz/dolibarr
New: Ajout d'un lien export de l'agenda webcalendar au format ical et vcal
This commit is contained in:
@@ -125,7 +125,7 @@ elseif ($actiontest)
|
||||
// parametre host/user/pass identique.
|
||||
//$webcal->localdb->close();
|
||||
}
|
||||
elseif ($webcal->connected == 1 && $webcal->database_selected != 1)
|
||||
elseif ($webcal->localdb->connected == 1 && $webcal->localdb->database_selected != 1)
|
||||
{
|
||||
$mesg ="<div class=\"error\">".$langs->trans("WebCalTestKo1",$_POST["phpwebcalendar_host"],$_POST["phpwebcalendar_dbname"]);
|
||||
$mesg.="<br>".$webcal->localdb->error();
|
||||
@@ -302,6 +302,15 @@ clearstatcache();
|
||||
if ($mesg) print "<br>$mesg<br>";
|
||||
print "<br>";
|
||||
|
||||
// Show message
|
||||
$message='';
|
||||
$urlvcal='<a href="'.DOL_URL_ROOT.'/webcal/webcalexport.php?format=vcal" target="_blank">'.$dolibarr_main_url_root.DOL_URL_ROOT.'/webcal/webcalexport.php?format=vcal'.'</a>';
|
||||
$message.=$langs->trans("WebCalUrlForVCalExport",'vcal',$urlvcal);
|
||||
$message.='<br>';
|
||||
$urlical='<a href="'.DOL_URL_ROOT.'/webcal/webcalexport.php?format=ical" target="_blank">'.$dolibarr_main_url_root.DOL_URL_ROOT.'/webcal/webcalexport.php?format=ical'.'</a>';
|
||||
$message.=$langs->trans("WebCalUrlForVCalExport",'ical',$urlical);
|
||||
print info_admin($message);
|
||||
|
||||
$db->close();
|
||||
|
||||
llxFooter('$Date$ - $Revision$');
|
||||
|
||||
@@ -283,6 +283,7 @@ class Conf
|
||||
$this->webcal->db->user=defined('PHPWEBCALENDAR_USER')?PHPWEBCALENDAR_USER:'';
|
||||
$this->webcal->db->pass=defined('PHPWEBCALENDAR_PASS')?PHPWEBCALENDAR_PASS:'';
|
||||
$this->webcal->db->name=defined('PHPWEBCALENDAR_DBNAME')?PHPWEBCALENDAR_DBNAME:'';
|
||||
$this->webcal->dir_temp=DOL_DATA_ROOT.'/webcal/temp';
|
||||
// Module phenix
|
||||
$this->phenix->enabled=defined('MAIN_MODULE_PHENIX')?MAIN_MODULE_PHENIX:0;
|
||||
$this->phenix->db->type=defined('PHPPHENIX_TYPE')?PHPPHENIX_TYPE:'__dolibarr_main_db_type__';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Simon Tosser <simon@kornog-computing.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -29,8 +29,29 @@
|
||||
*/
|
||||
|
||||
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
|
||||
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
|
||||
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
||||
|
||||
require_once("./main.inc.php");
|
||||
$original_file = urldecode($_GET["file"]);
|
||||
$modulepart = urldecode($_GET["modulepart"]);
|
||||
$type = isset($_GET["type"]) ? urldecode($_GET["type"]) : '';
|
||||
|
||||
// Define if we need master or master+main
|
||||
$needmasteronly=false;
|
||||
if ($modulepart == 'webcal') $needmasteronly=true;
|
||||
|
||||
// Load master or main
|
||||
if ($needmasteronly)
|
||||
{
|
||||
// Pour companylogo, on charge juste environnement sans logon qui charge le user
|
||||
require("./master.inc.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pour autre que companylogo, on charge environnement + info issus de logon comme le user
|
||||
require("./main.inc.php");
|
||||
// master.inc.php is included in main.inc.php
|
||||
}
|
||||
|
||||
|
||||
// C'est un wrapper, donc header vierge
|
||||
@@ -52,6 +73,8 @@ if (eregi('\.xls$',$original_file)) { $type='application/x-msexcel'; $attachme
|
||||
if (eregi('\.jpg$',$original_file)) { $type='image/jpeg'; $attachment = true; }
|
||||
if (eregi('\.png$',$original_file)) { $type='image/jpeg'; $attachment = true; }
|
||||
if (eregi('\.tiff$',$original_file)) { $type='image/tiff'; $attachment = true; }
|
||||
if (eregi('\.vcs$',$original_file)) { $type='text/calendar'; $attachment = true; }
|
||||
if (eregi('\.ics$',$original_file)) { $type='text/calendar'; $attachment = true; }
|
||||
|
||||
// Suppression de la chaine de caract<63>re ../ dans $original_file
|
||||
$original_file = str_replace("../","/", "$original_file");
|
||||
@@ -323,7 +346,12 @@ if ($modulepart)
|
||||
$sqlprotectagainstexternals = '';
|
||||
}
|
||||
|
||||
|
||||
// Wrapping pour les factures
|
||||
if ($modulepart == 'webcal')
|
||||
{
|
||||
$accessallowed=1;
|
||||
$original_file=$conf->webcal->dir_temp.'/'.$original_file;
|
||||
}
|
||||
}
|
||||
|
||||
// Basic protection (against external users only)
|
||||
|
||||
@@ -534,6 +534,8 @@ WebCalAddEventOnStatusPropal=Add calendar event on commercial proposals status c
|
||||
WebCalAddEventOnStatusContract=Add calendar event on contracts status change
|
||||
WebCalAddEventOnStatusBill=Add calendar event on bills status change
|
||||
WebCalAddEventOnStatusMember=Add calendar event on members status change
|
||||
WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
|
||||
WebCalCheckWebcalSetup=May be, Webcal module setup is not correctly done.
|
||||
##### Invoices #####
|
||||
BillsSetup=Invoices module setup
|
||||
BillsDate=Invoices date
|
||||
|
||||
@@ -533,6 +533,8 @@ WebCalAddEventOnStatusPropal=Ajouter
|
||||
WebCalAddEventOnStatusContract=Ajouter <20>v<EFBFBD>nement dans calendrier sur changement de statut des contrats
|
||||
WebCalAddEventOnStatusBill=Ajouter <20>v<EFBFBD>nement dans calendrier sur changement de statut des factures
|
||||
WebCalAddEventOnStatusMember=Ajouter <20>v<EFBFBD>nement dans calendrier sur changement de statut des adh<64>rents
|
||||
WebCalUrlForVCalExport=Un lien d'export du calendrier au format <b>%s</b> sera disponible <20> l'url: %s
|
||||
WebCalCheckWebcalSetup=La configuration du module Webcal est peut-<2D>tre incorrecte.
|
||||
##### Invoices #####
|
||||
BillsSetup=Configuration du module Factures
|
||||
BillsDate=Date des factures
|
||||
|
||||
@@ -52,6 +52,8 @@ class DoliDb
|
||||
var $database_selected;
|
||||
//! Nom base s<>lectionn<6E>e
|
||||
var $database_name;
|
||||
//! Nom user base
|
||||
var $database_user;
|
||||
//! 1 si une transaction est en cours, 0 sinon
|
||||
var $transaction_opened;
|
||||
//! Derniere requete ex<65>cut<75>e
|
||||
@@ -110,6 +112,8 @@ class DoliDb
|
||||
function DoliDb($type='mssql', $host, $user, $pass, $name='', $newlink=0)
|
||||
{
|
||||
global $conf,$langs;
|
||||
|
||||
$this->database_user=$user;
|
||||
$this->transaction_opened=0;
|
||||
|
||||
if (! function_exists("mssql_connect"))
|
||||
|
||||
@@ -132,7 +132,7 @@ class DoliDb
|
||||
if (isset($conf->db->dolibarr_main_db_collation) && $conf->db->dolibarr_main_db_collation) {
|
||||
$this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
}
|
||||
$this->db_user=$conf->db->user;
|
||||
$this->database_user=$user;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ class DoliDb
|
||||
if (isset($conf->db->dolibarr_main_db_collation) && $conf->db->dolibarr_main_db_collation) {
|
||||
$this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
}
|
||||
$this->db_user=$conf->db->user;
|
||||
$this->database_user=$user;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ class DoliDb
|
||||
*/
|
||||
$this->forcecharset=$conf->character_set_client;
|
||||
$this->forcecollate=$conf->db->dolibarr_main_db_collation;
|
||||
$this->db_user=$conf->db->user;
|
||||
$this->database_user=$user;
|
||||
|
||||
$this->transaction_opened=0;
|
||||
|
||||
|
||||
@@ -546,12 +546,13 @@ function dolibarr_print_date($time,$format='')
|
||||
// Si format non d<>fini, on prend $conf->format_date_text_short sinon %Y-%m-%d %H:%M:%S
|
||||
if (! $format) $format=(isset($conf->format_date_text_short) ? $conf->format_date_text_short : '%Y-%m-%d %H:%M:%S');
|
||||
|
||||
if ($format == 'day') $format=$conf->format_date_short;
|
||||
if ($format == 'hour') $format=$conf->format_hour_short;
|
||||
if ($format == 'daytext') $format=$conf->format_date_text_short;
|
||||
if ($format == 'dayhour') $format=$conf->format_date_hour_short;
|
||||
if ($format == 'dayhourtext') $format=$conf->format_date_hour_text_short;
|
||||
if ($format == 'dayhourldap') $format='%Y%m%d%H%M%SZ';
|
||||
if ($format == 'day') $format=$conf->format_date_short;
|
||||
if ($format == 'hour') $format=$conf->format_hour_short;
|
||||
if ($format == 'daytext') $format=$conf->format_date_text_short;
|
||||
if ($format == 'dayhour') $format=$conf->format_date_hour_short;
|
||||
if ($format == 'dayhourtext') $format=$conf->format_date_hour_text_short;
|
||||
if ($format == 'dayhourldap') $format='%Y%m%d%H%M%SZ';
|
||||
if ($format == 'dayhourxcard') $format='%Y%m%dT%H%M%SZ';
|
||||
|
||||
// Si date non definie, on renvoie ''
|
||||
if ($time == '') return ''; // $time=0 permis car signifie 01/01/1970 00:00:00
|
||||
@@ -2653,20 +2654,22 @@ function clean_url($url,$http=1)
|
||||
\param string StringHtml
|
||||
\return string CleanString
|
||||
*/
|
||||
function clean_html($StringHtml)
|
||||
function clean_html($StringHtml,$removelinefeed=1)
|
||||
{
|
||||
$pattern = "<[^>]+>";
|
||||
$temp = dol_entity_decode($StringHtml);
|
||||
$temp = ereg_replace($pattern,"",$temp);
|
||||
// Supprime aussi les retours
|
||||
$temp=str_replace("\n"," ",$temp);
|
||||
// et les espaces doubles
|
||||
while(STRPOS($temp," "))
|
||||
{
|
||||
$temp = STR_REPLACE(" "," ",$temp);
|
||||
}
|
||||
$CleanString = $temp;
|
||||
return $CleanString;
|
||||
$pattern = "<[^>]+>";
|
||||
$temp = dol_entity_decode($StringHtml);
|
||||
$temp = ereg_replace($pattern,"",$temp);
|
||||
|
||||
// Supprime aussi les retours
|
||||
if ($removelinefeed) $temp=str_replace("\n"," ",$temp);
|
||||
|
||||
// et les espaces doubles
|
||||
while(STRPOS($temp," "))
|
||||
{
|
||||
$temp = STR_REPLACE(" "," ",$temp);
|
||||
}
|
||||
$CleanString = $temp;
|
||||
return $CleanString;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
238
htdocs/lib/xcal.lib.php
Normal file
238
htdocs/lib/xcal.lib.php
Normal file
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
/* Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
\file htdocs/lib/xcal.lib.php
|
||||
\brief Function to manage calendar files (vcal/ical/...)
|
||||
\version $Revision$
|
||||
*/
|
||||
|
||||
/**
|
||||
\brief Build a file from an array of events
|
||||
\param format 'vcal' or 'ical'
|
||||
\param events_array Array of events ('eid','startdate','duration','enddate','title','summary','category','email','url','desc','author')
|
||||
\param outputfile Output file
|
||||
\param filter Filter
|
||||
\return int <0 if ko, Nb of events in file if ok
|
||||
*/
|
||||
function build_calfile($format='vcal',$events_array,$outputfile,$filter='')
|
||||
{
|
||||
dolibarr_syslog("xcal.lib.php::build_cal_file Build cal file ".$outputfile." to format ".$format);
|
||||
|
||||
if (empty($outputfile)) return -1;
|
||||
|
||||
$calfileh=fopen($outputfile,'w');
|
||||
if ($calfileh)
|
||||
{
|
||||
$now=mktime();
|
||||
|
||||
// Print header
|
||||
fwrite($calfileh,"BEGIN:VCALENDAR\n");
|
||||
fwrite($calfileh,"VERSION:2.0\n");
|
||||
fwrite($calfileh,"METHOD:PUBLISH\n");
|
||||
fwrite($calfileh,"PRODID:-//DOLIBARR ".DOL_VERSION."//EN\n");
|
||||
/*
|
||||
X-WR-CALNAME:Agenda du Libre
|
||||
X-WR-TIMEZONE:Europe/Paris
|
||||
CALSCALE:GREGORIAN
|
||||
X-WR-CALDESC:L'Agenda des <20>v<EFBFBD>nements autour du Libre
|
||||
*/
|
||||
|
||||
foreach ($events_array as $date => $event)
|
||||
{
|
||||
$eventqualified=true;
|
||||
if ($filter)
|
||||
{
|
||||
// \TODO Add a filter
|
||||
|
||||
$eventqualified=false;
|
||||
}
|
||||
|
||||
if ($eventqualified)
|
||||
{
|
||||
# slurp out the fields to make it more convenient
|
||||
$uid = dolibarr_print_date($now,'dayhourxcard').'-'.$event['uid']."-export@".$_SERVER["SERVER_NAME"];
|
||||
$startdate = $event['startdate'];
|
||||
$duration = $event['duration'];
|
||||
$enddate = $event['enddate'];
|
||||
$summary = $event['summary'];
|
||||
$category = $event['category'];
|
||||
$location = $event['location'];
|
||||
$email = $event['email'];
|
||||
$url = $event['url'];
|
||||
$description=eregi_replace('<br[ \/]?>',"\n",$event['desc']);
|
||||
$description=clean_html($description,0); // Remove html tags
|
||||
|
||||
// Uncomment for tests
|
||||
//$summary="Resume";
|
||||
//$description="Description";
|
||||
//$description="MemberValidatedInDolibarr gd gdf gd gdff\nNom: tgdf g dfgdf gfd r ter\nType: gdfgfdf dfg fd gfd gd gdf gdf gfd gdfg dfg ddf\nAuteur: AD01fg dgdgdfg df gdf gd";
|
||||
|
||||
// Format
|
||||
$summary=format_cal($format,$summary);
|
||||
$description=format_cal($format,$description);
|
||||
|
||||
$encoding='';
|
||||
if ($format == 'vcal') $encoding='ENCODING=QUOTED-PRINTABLE:';
|
||||
|
||||
# Output the vCard/iCal VEVENT object
|
||||
fwrite($calfileh,"BEGIN:VEVENT\n");
|
||||
fwrite($calfileh,"UID:".$uid."\n");
|
||||
if ($email <> "")
|
||||
{
|
||||
fwrite($calfileh,"ORGANIZER:MAILTO:".$email."\n");
|
||||
fwrite($calfileh,"CONTACT:MAILTO:".$email."\n");
|
||||
}
|
||||
if ($url <> "") { fwrite($calfileh,"URL:".$url."\n"); };
|
||||
|
||||
fwrite($calfileh,"SUMMARY:".$encoding.$summary."\n");
|
||||
fwrite($calfileh,"DESCRIPTION:".$encoding.$description."\n");
|
||||
fwrite($calfileh,"CATEGORIES:".$category."\n");
|
||||
fwrite($calfileh,"LOCATION:".$location."\n");
|
||||
fwrite($calfileh,"TRANSP:OPAQUE\n");
|
||||
fwrite($calfileh,"CLASS:CONFIDENTIAL\n");
|
||||
fwrite($calfileh,"DTSTAMP:".dolibarr_print_date($now,'dayhourxcard')."\n");
|
||||
|
||||
// Dates
|
||||
$startdatef = dolibarr_print_date($startdate,'dayhourxcard');
|
||||
fwrite($calfileh,"DTSTART:".$startdatef."\n");
|
||||
|
||||
if (empty($enddate)) $enddate=$startdate+$duration;
|
||||
$enddatef = dolibarr_print_date($enddate,'dayhourxcard');
|
||||
fwrite($calfileh,"DTEND:".$enddatef."\n");
|
||||
|
||||
// Put other info in comment
|
||||
/*
|
||||
$comment=array();
|
||||
$comment ['eid'] = $eid;
|
||||
$comment ['url'] = $linktoevent;
|
||||
$comment ['date'] = dolibarr_mktime($evttime,"Ymd");
|
||||
$comment ['duration'] = $duration;
|
||||
$comment ['startdate'] = $startdate;
|
||||
$comment ['enddate'] = $enddate;
|
||||
fwrite($calfileh,"COMMENT:" . serialize ($comment) . "\n");
|
||||
*/
|
||||
|
||||
fwrite($calfileh,"END:VEVENT\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
fwrite($calfileh,"END:VCALENDAR\n");
|
||||
|
||||
fclose($calfileh);
|
||||
}
|
||||
else
|
||||
{
|
||||
dolibarr_syslog("xcal.lib.php::build_cal_file Failed to open file ".$outputfile." for writing");
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function format_cal($format,$string)
|
||||
{
|
||||
$newstring=$string;
|
||||
|
||||
if ($format == 'vcal')
|
||||
{
|
||||
$newstring=QPEncode($newstring);
|
||||
}
|
||||
if ($format == 'ical')
|
||||
{
|
||||
// Replace new lines chars by '\n'
|
||||
$newstring=eregi_replace("\r\n","\n",$newstring);
|
||||
$newstring=eregi_replace("\n\r","\n",$newstring);
|
||||
$newstring=eregi_replace("\n",'\n',$newstring);
|
||||
// Must not exceed 75 char. Cut with "\r\n"+Space
|
||||
$newstring=CalEncode($newstring);
|
||||
}
|
||||
|
||||
return $newstring;
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Cut string after 75 chars. Add CRLF+Space.
|
||||
\param string String to convert
|
||||
\return string String converted
|
||||
*/
|
||||
function CalEncode($line)
|
||||
{
|
||||
$out = '';
|
||||
|
||||
$newpara = '';
|
||||
|
||||
for ($j = 0; $j <= strlen($line) - 1; $j++)
|
||||
{
|
||||
$char = substr ( $line, $j, 1 );
|
||||
|
||||
if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 75 )
|
||||
{
|
||||
$out .= $newpara . "\r\n "; // CRLF + Space for cal
|
||||
$newpara = '';
|
||||
}
|
||||
$newpara .= $char;
|
||||
}
|
||||
$out .= $newpara;
|
||||
|
||||
return trim($out);
|
||||
}
|
||||
|
||||
|
||||
function QPEncode($str,$forcal=0)
|
||||
{
|
||||
$lines = preg_split("/\r\n/", $str);
|
||||
$out = '';
|
||||
|
||||
foreach ($lines as $line)
|
||||
{
|
||||
$newpara = '';
|
||||
|
||||
for ($j = 0; $j <= strlen($line) - 1; $j++)
|
||||
{
|
||||
$char = substr ( $line, $j, 1 );
|
||||
$ascii = ord ( $char );
|
||||
|
||||
if ( $ascii < 32 || $ascii == 61 || $ascii > 126 )
|
||||
$char = '=' . strtoupper ( sprintf("%02X", $ascii ) );
|
||||
|
||||
if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 )
|
||||
{
|
||||
$out .= $newpara . '=' . "\r\n"; // CRLF
|
||||
if ($forcal) $out .= " "; // + Space for cal
|
||||
$newpara = '';
|
||||
}
|
||||
$newpara .= $char;
|
||||
}
|
||||
$out .= $newpara;
|
||||
}
|
||||
return trim ( $out );
|
||||
}
|
||||
|
||||
function QPDecode( $str )
|
||||
{
|
||||
$out = preg_replace('/=\r?\n/', '', $str);
|
||||
$out = preg_replace('/=([A-F0-9]{2})/e', chr( hexdec ('\\1' ) ), $out);
|
||||
|
||||
return trim($out);
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -74,9 +74,9 @@ foreach ($_POST as $key => $val)
|
||||
require_once("master.inc.php");
|
||||
|
||||
// Chargement des includes complementaire de presentation
|
||||
if ($conf->use_ajax) require_once(DOL_DOCUMENT_ROOT.'/lib/ajax.lib.php');
|
||||
if (! defined('NOREQUIREMENU')) require_once(DOL_DOCUMENT_ROOT ."/menu.class.php");
|
||||
if (! defined('NOREQUIREHTML')) require_once(DOL_DOCUMENT_ROOT ."/html.form.class.php");
|
||||
if (! defined('NOREQUIREAJAX') && $conf->use_ajax) require_once(DOL_DOCUMENT_ROOT.'/lib/ajax.lib.php');
|
||||
|
||||
// Init session
|
||||
$sessionname="DOLSESSID_".$dolibarr_main_db_name;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2005-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -28,32 +28,40 @@
|
||||
*/
|
||||
|
||||
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
|
||||
if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
|
||||
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
||||
|
||||
$original_file = urldecode($_GET["file"]);
|
||||
$modulepart = urldecode($_GET["modulepart"]);
|
||||
$type = isset($_GET["type"]) ? urldecode($_GET["type"]) : '';
|
||||
|
||||
// Define if we need master or master+main
|
||||
$needmasteronly=false;
|
||||
if ($modulepart == 'companylogo') $needmasteronly=true;
|
||||
|
||||
// Load master or main
|
||||
if ($needmasteronly)
|
||||
{
|
||||
// Pour companylogo, on charge juste environnement sans logon qui charge le user
|
||||
require("./master.inc.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pour autre que companylogo, on charge environnement + info issus de logon comme le user
|
||||
require("./main.inc.php");
|
||||
// master.inc.php is included in main.inc.php
|
||||
}
|
||||
|
||||
|
||||
// C'est un wrapper, donc header vierge
|
||||
function llxHeader() { }
|
||||
|
||||
|
||||
$original_file = urldecode($_GET["file"]);
|
||||
$modulepart = urldecode($_GET["modulepart"]);
|
||||
$type = isset($_GET["type"]) ? urldecode($_GET["type"]) : '';
|
||||
|
||||
// Protection, on interdit les .. dans les chemins
|
||||
$original_file = eregi_replace('\.\.','',$original_file);
|
||||
|
||||
|
||||
if ($modulepart == 'companylogo')
|
||||
{
|
||||
// Pour companylogo, on charge juste environnement sans logon qui charge le user
|
||||
require_once("master.inc.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Pour autre que companylogo, on charge environnement + info issus de logon comme le user
|
||||
require_once("main.inc.php");
|
||||
}
|
||||
|
||||
|
||||
|
||||
$accessallowed=0;
|
||||
if ($modulepart)
|
||||
|
||||
@@ -74,7 +74,7 @@ class Webcal {
|
||||
\return int 1 en cas de succ<63>s, -1,-2,-3 en cas d'erreur, -4 si login webcal non d<>fini
|
||||
*/
|
||||
function add($user)
|
||||
{
|
||||
{
|
||||
global $langs;
|
||||
|
||||
dolibarr_syslog("Webcal::add user=".$user->id);
|
||||
@@ -174,5 +174,109 @@ class Webcal {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
\brief Export fichier cal depuis base webcalendar
|
||||
\param format 'ical' or 'vcal'
|
||||
\param cachedelay Do not rebuild file if date older than cachedelay seconds
|
||||
\param filename Force filename
|
||||
\param filter Array of filters
|
||||
\return int <0 if error, nb of events in new file if ok
|
||||
*/
|
||||
function build_calfile($format,$cachedelay,$filename,$filters)
|
||||
{
|
||||
global $conf,$langs;
|
||||
|
||||
require_once (DOL_DOCUMENT_ROOT ."/lib/xcal.lib.php");
|
||||
|
||||
dolibarr_syslog("webcal::build_calfile Build cal file format=".$format.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".sizeof($filters), LOG_DEBUG);
|
||||
|
||||
// Check parameters
|
||||
if (empty($format)) return -1;
|
||||
|
||||
// Clean parameters
|
||||
if (! $filename)
|
||||
{
|
||||
$extension='vcs';
|
||||
if ($format == 'ical') $extension='ics';
|
||||
$filename=$format.'.'.$extension;
|
||||
}
|
||||
|
||||
create_exdir($conf->webcal->dir_temp);
|
||||
$outputfile=$conf->webcal->dir_temp.'/'.$filename;
|
||||
$result=0;
|
||||
|
||||
$buildfile=true;
|
||||
if ($cachedelay)
|
||||
{
|
||||
// \TODO Check cache
|
||||
}
|
||||
|
||||
if ($buildfile)
|
||||
{
|
||||
// Build event array
|
||||
$eventarray=array();
|
||||
|
||||
$sql = "SELECT cal_id, cal_create_by, ";
|
||||
$sql.= " cal_date, cal_time, cal_mod_date,";
|
||||
$sql.= " cal_mod_time, cal_duration, cal_priority, cal_type, cal_access, cal_name, cal_description";
|
||||
$sql.= " FROM webcal_entry";
|
||||
$sql.= " order by cal_date";
|
||||
|
||||
dolibarr_syslog("Webcal::build_vcal select events sql=".$sql);
|
||||
$resql=$this->localdb->query($sql);
|
||||
if ($resql)
|
||||
{
|
||||
while ($obj=$this->localdb->fetch_object($resql))
|
||||
{
|
||||
$qualified=true;
|
||||
|
||||
// 'eid','startdate','duration','enddate','title','summary','category','email','url','desc','author'
|
||||
$event=array();
|
||||
$event['uid']=$obj->cal_id;
|
||||
$date=$obj->cal_date;
|
||||
$time=$obj->cal_time;
|
||||
if (eregi('^([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])$',$date,$reg))
|
||||
{
|
||||
$year=$reg[1];
|
||||
$month=$reg[2];
|
||||
$day=$reg[3];
|
||||
if (! empty($filters['year']) && $year != $filters['year']) $qualified=false;
|
||||
if (! empty($filters['month']) && $year != $filters['month']) $qualified=false;
|
||||
if (! empty($filters['day']) && $year != $filters['day']) $qualified=false;
|
||||
}
|
||||
if (eregi('^([0-9]?[0-9])([0-9][0-9])([0-9][0-9])$',$time,$reg))
|
||||
{
|
||||
$hour=sprintf("%02d",$reg[1]);
|
||||
$min=sprintf("%02d",$reg[2]);
|
||||
$sec=sprintf("%02d",$reg[3]);
|
||||
}
|
||||
$datestart=dolibarr_mktime($hour,$min,$sec,$month,$day,$year);
|
||||
$event['startdate']=$datestart;
|
||||
$event['duration']=$obj->cal_duration;
|
||||
$event['enddate']='';
|
||||
$event['summary']=$obj->cal_name;
|
||||
$event['desc']=$obj->cal_description;
|
||||
$event['author']=$obj->cal_create_by;
|
||||
|
||||
if ($qualified)
|
||||
{
|
||||
$eventarray[$datestart]=$event;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dolibarr_syslog("webcal::build_calfile ".$this->localdb->lasterror());
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Write file
|
||||
$result=build_calfile($format,$eventarray,$outputfile);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** \file htdocs/wecal/webcal.php
|
||||
/** \file htdocs/webcal/webcal.php
|
||||
\ingroup webcalendar
|
||||
\brief Page g<>n<EFBFBD>rant 2 frames, une pour le menu Dolibarr, l'autre pour l'affichage du calendrier
|
||||
\author Laurent Destailleur
|
||||
|
||||
105
htdocs/webcal/webcalexport.php
Normal file
105
htdocs/webcal/webcalexport.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/* Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/** \file htdocs/webcal/webcalexport.php
|
||||
\ingroup webcalendar
|
||||
\brief Page export webcalendar
|
||||
\version $Revision$
|
||||
*/
|
||||
|
||||
require("../master.inc.php");
|
||||
require_once(DOL_DOCUMENT_ROOT.'/webcal/webcal.class.php');
|
||||
|
||||
|
||||
// C'est un wrapper, donc header vierge
|
||||
function llxHeader() { print '<html><title>Export cal</title><body>'; }
|
||||
function llxFooter() { print '</body></html>'; }
|
||||
|
||||
|
||||
// Check config
|
||||
if (empty($conf->global->PHPWEBCALENDAR_URL))
|
||||
{
|
||||
$user->getrights();
|
||||
|
||||
llxHeader();
|
||||
print '<div class="error">Module Webcalendar was not configured properly.</div>';
|
||||
llxFooter('$Date$ - $Revision$');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Connect to database
|
||||
$webcal=new WebCal();
|
||||
if (! $webcal->localdb->connected || ! $webcal->localdb->database_selected)
|
||||
{
|
||||
llxHeader();
|
||||
if ($webcal->localdb->connected == 1 && $webcal->localdb->database_selected != 1)
|
||||
{
|
||||
print '<div class="error">'.$langs->trans("WebCalTestKo1",$conf->webcal->db->host,$conf->webcal->db->name);
|
||||
print '<br>'.$webcal->localdb->error();
|
||||
print '<br>'.$langs->trans("WebCalCheckWebcalSetup");
|
||||
print "</div>";
|
||||
//$webcal->localdb->close(); Ne pas fermer car la conn de webcal est la meme que dolibarr si parametre host/user/pass identique
|
||||
}
|
||||
else
|
||||
{
|
||||
print "<div class=\"error\">".$langs->trans("WebCalTestKo2",$conf->webcal->db->host,$conf->webcal->db->user);
|
||||
print "<br>".$webcal->localdb->error();
|
||||
print '<br>'.$langs->trans("WebCalCheckWebcalSetup");
|
||||
print "</div>";
|
||||
}
|
||||
llxFooter('$Date$ - $Revision$');
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$mainmenu=isset($_GET["mainmenu"])?$_GET["mainmenu"]:"";
|
||||
$leftmenu=isset($_GET["leftmenu"])?$_GET["leftmenu"]:"";
|
||||
|
||||
// Define format, filename and filter
|
||||
$format='vcal';
|
||||
$filename='';
|
||||
if (! empty($_GET["format"])) $format=$_GET["format"];
|
||||
if ($format == 'vcal') $filename='webcalendar.vcs';
|
||||
if ($format == 'ical') $filename='webcalendar.ics';
|
||||
if (! $filename)
|
||||
{
|
||||
$langs->load("main");
|
||||
$langs->load("errors");
|
||||
llxHeader();
|
||||
print '<div class="error">'.$langs->trans("ErrorWrongValueForParameterX",'format').'</div>';
|
||||
llxFooter('$Date$ - $Revision$');
|
||||
exit;
|
||||
}
|
||||
$filters=array();
|
||||
if (! empty($_GET["year"])) $filters['year']=$_GET["year"];
|
||||
|
||||
// Build file
|
||||
$result=$webcal->build_calfile($format,0,$filename,$filters);
|
||||
if ($result >= 0)
|
||||
{
|
||||
header("Location: ".DOL_URL_ROOT.'/document.php?modulepart=webcal&file='.urlencode($filename));
|
||||
exit;
|
||||
}
|
||||
|
||||
llxHeader();
|
||||
print '<div class="error">'.$webcal->error.'</div>';
|
||||
llxFooter('$Date$ - $Revision$');
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user