Source for file calendar_data.php
Documentation is available at calendar_data.php
* functions to operate on calendar data files.
* @copyright © 2002-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: calendar_data.php,v 1.7.2.11 2006/05/06 07:52:18 tokul Exp $
* this is array that contains all events
* it is three dimensional array with fallowing structure
* $calendardata[date][time] = array(length,priority,title,message,reminder);
* Reads multilined calendar data
* Plugin stores multiline texts converted to single line with PHP nl2br().
* Function undoes nl2br() conversion and html encoding of ASCII vertical bar.
* Older plugin versions sanitized data with htmlspecialchars. Since 1.5.1 calendar
* data is not sanitized. Output functions must make sure that data is correctly
* @param string $string calendar string
* @return string calendar string converted to multiline text
function calendar_readmultiline($string) {
* replace html line breaks with ASCII line feeds
* replace htmlencoded | with ASCII vertical bar
$string =
str_replace(array('<br />','<br>','|'),array("\n","\n",'|'),$string);
* Callback function used to sanitize calendar data before saving it to file
* @param string $sValue array value
* @param string $sKey array key
function calendar_encodedata(&$sValue, $sKey) {
* remove original ASCII line feeds and carriage returns
* replace ASCII vertical bar with html code in order to sanitize field delimiter
$sValue =
str_replace(array("\n","\r",'|'),array('','','|'),nl2br($sValue));
* data is | delimited, just like addressbook
* files are structured like this:
* date|time|length|priority|title|message
* files are divided by year for performance increase
global $calendardata, $username, $data_dir, $year;
$filename =
getHashedFile($username, $data_dir, "$username.$year.cal");
$fp =
fopen ($filename,'r');
while ($fdata =
fgetcsv ($fp, 4096, '|')) {
$calendardata[$fdata[0]][$fdata[1]] =
array( 'length' =>
$fdata[2],
'title' =>
str_replace("\n",' ',calendar_readmultiline($fdata[4])),
'message' =>
calendar_readmultiline($fdata[5]),
'reminder' =>
$fdata[6] );
// this is to sort the events within a day on starttime
$new_calendardata =
array();
foreach($calendardata as $day =>
$data) {
ksort($data, SORT_NUMERIC);
$new_calendardata[$day] =
$data;
$calendardata =
$new_calendardata;
function writecalendardata() {
global $calendardata, $username, $data_dir, $year, $color;
$filetmp =
getHashedFile($username, $data_dir, "$username.$year.cal.tmp");
$filename =
getHashedFile($username, $data_dir, "$username.$year.cal");
$fp =
fopen ($filetmp,"w");
while ( $calfoo =
each ($calendardata)) {
while ( $calbar =
each ($calfoo['value'])) {
$calfoobar =
$calendardata[$calfoo['key']][$calbar['key']];
* Make sure that reminder field is set. Calendar forms don't implement it,
* but it is still used for calendar data. Backwards compatibility.
if (!isset
($calfoobar['reminder'])) $calfoobar['reminder']=
'';
$calstr =
"$calfoo[key]|$calbar[key]|$calfoobar[length]|$calfoobar[priority]|$calfoobar[title]|$calfoobar[message]|$calfoobar[reminder]\n";
if(sq_fwrite($fp, $calstr, 4096) ===
FALSE) {
error_box(_("Could not write calendar file %s", "$username.$year.cal.tmp"), $color);
* deletes event from file
function delete_event($date, $time) {
global $calendardata, $username, $data_dir, $year;
$filename =
getHashedFile($username, $data_dir, "$username.$year.cal");
$fp =
fopen ($filename,'r');
while ($fdata =
fgetcsv ($fp, 4096, "|")) {
if (($fdata[0]==
$date) &&
($fdata[1]==
$time)){
$calendardata[$fdata[0]][$fdata[1]] =
array( 'length' =>
$fdata[2],
'reminder' =>
$fdata[6] );
* same as delete but does not save calendar
* saving is done inside event_edit.php
function update_event($date, $time) {
global $calendardata, $username, $data_dir, $year;
$filename =
getHashedFile($username, $data_dir, "$username.$year.cal");
$fp =
fopen ($filename,'r');
while ($fdata =
fgetcsv ($fp, 4096, '|')) {
if (($fdata[0]==
$date) &&
($fdata[1]==
$time)){
$calendardata[$fdata[0]][$fdata[1]] =
array( 'length' =>
$fdata[2],
'reminder' =>
$fdata[6] );
Documentation generated on Sat, 07 Oct 2006 16:30:04 +0300 by phpDocumentor 1.3.0RC6