Source for file calendar_data.php

Documentation is available at calendar_data.php

  1. <?php
  2.  
  3. /**
  4.  * functions to operate on calendar data files.
  5.  *
  6.  * @copyright 2002-2020 The SquirrelMail Project Team
  7.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8.  * @version $Id: calendar_data.php 14845 2020-01-07 08:09:34Z pdontthink $
  9.  * @package plugins
  10.  * @subpackage calendar
  11.  */
  12.  
  13. /**
  14.  * this is array that contains all events
  15.  * it is three dimensional array with fallowing structure
  16.  * $calendardata[date][time] = array(length,priority,title,message,reminder);
  17.  */
  18. $calendardata array();
  19.  
  20. /**
  21.  * Reads multilined calendar data
  22.  * 
  23.  * Plugin stores multiline texts converted to single line with PHP nl2br().
  24.  * Function undoes nl2br() conversion and html encoding of ASCII vertical bar.
  25.  *
  26.  * Older plugin versions sanitized data with sm_encode_html_special_chars. Since 1.5.1 calendar
  27.  * data is not sanitized. Output functions must make sure that data is correctly
  28.  * encoded and sanitized.
  29.  * @param string $string calendar string
  30.  * @return string calendar string converted to multiline text
  31.  * @access private
  32.  * @since 1.5.1
  33.  */
  34. function calendar_readmultiline($string{
  35.     /**
  36.      * replace html line breaks with ASCII line feeds
  37.      * replace htmlencoded | with ASCII vertical bar
  38.      */
  39.     $string str_replace(array('<br />','<br>','&#124;'),array("\n","\n",'|'),$string);
  40.     return $string;
  41. }
  42.  
  43. /**
  44.  * Callback function used to sanitize calendar data before saving it to file
  45.  * @param string $sValue array value
  46.  * @param string $sKey array key
  47.  * @access private
  48.  * @since 1.5.1
  49.  */
  50. function calendar_encodedata(&$sValue$sKey{
  51.     /**
  52.      * add html line breaks
  53.      * remove original ASCII line feeds and carriage returns
  54.      * replace ASCII vertical bar with html code in order to sanitize field delimiter
  55.      */
  56.     $sValue str_replace(array("\n","\r",'|'),array('','','&#124;'),nl2br($sValue));
  57. }
  58.  
  59. /**
  60.  * read events into array
  61.  *
  62.  * data is | delimited, just like addressbook
  63.  * files are structured like this:
  64.  * date|time|length|priority|title|message
  65.  * files are divided by year for performance increase
  66.  */
  67. function readcalendardata({
  68.     global $calendardata$username$data_dir$year;
  69.  
  70.     $filename getHashedFile($username$data_dir"$username.$year.cal");
  71.  
  72.     if (file_exists($filename)){
  73.         $fp fopen ($filename,'r');
  74.  
  75.         if ($fp){
  76.             while ($fdata fgetcsv ($fp4096'|')) {
  77.                 $calendardata[$fdata[0]][$fdata[1]] array'length'   => $fdata[2],
  78.                                                              'priority' => $fdata[3],
  79.                                                              'title'    => str_replace("\n",' ',calendar_readmultiline($fdata[4])),
  80.                                                              'message'  => calendar_readmultiline($fdata[5]),
  81.                                                              'reminder' => $fdata[6);
  82.             }
  83.             fclose ($fp);
  84.             // this is to sort the events within a day on starttime
  85.             $new_calendardata array();
  86.             foreach($calendardata as $day => $data{
  87.                 ksort($dataSORT_NUMERIC);
  88.                 $new_calendardata[$day$data;
  89.             }
  90.             $calendardata $new_calendardata;
  91.         }
  92.     }
  93. }
  94.  
  95. /**
  96.  * Saves calendar data
  97.  * @return void 
  98.  * @access private
  99.  */
  100. function writecalendardata({
  101.     global $calendardata$username$data_dir$year$color;
  102.  
  103.     $filetmp getHashedFile($username$data_dir"$username.$year.cal.tmp");
  104.     $filename getHashedFile($username$data_dir"$username.$year.cal");
  105.     $fp fopen ($filetmp,"w");
  106.     if ($fp{
  107.         while $calfoo each ($calendardata)) {
  108.             while $calbar each ($calfoo['value'])) {
  109.                 $calfoobar $calendardata[$calfoo['key']][$calbar['key']];
  110.                 array_walk($calfoobar,'calendar_encodedata');
  111.                 /**
  112.                  * Make sure that reminder field is set. Calendar forms don't implement it, 
  113.                  * but it is still used for calendar data. Backwards compatibility.
  114.                  */ 
  115.                 if (!isset($calfoobar['reminder'])) $calfoobar['reminder']='';
  116.  
  117.                 $calstr "$calfoo[key]|$calbar[key]|$calfoobar[length]|$calfoobar[priority]|$calfoobar[title]|$calfoobar[message]|$calfoobar[reminder]\n";
  118.                 if(sq_fwrite($fp$calstr4096=== FALSE{
  119.                     error_box(_("Could not write calendar file %s""$username.$year.cal.tmp"));
  120.                 }
  121.             }
  122.  
  123.         }
  124.         fclose ($fp);
  125.         @unlink($filename);
  126.         rename($filetmp,$filename);
  127.     }
  128. }
  129.  
  130. /**
  131.  * deletes event from file
  132.  * @return void 
  133.  * @access private
  134.  */
  135. function delete_event($date$time{
  136.     global $calendardata$username$data_dir$year;
  137.  
  138.     $filename getHashedFile($username$data_dir"$username.$year.cal");
  139.     $fp fopen ($filename,'r');
  140.     if ($fp){
  141.         while ($fdata fgetcsv ($fp4096"|")) {
  142.             if (($fdata[0]==$date&& ($fdata[1]==$time)){
  143.                 // do nothing
  144.             else {
  145.                 $calendardata[$fdata[0]][$fdata[1]] array'length'   => $fdata[2],
  146.                                                              'priority' => $fdata[3],
  147.                                                              'title'    => $fdata[4],
  148.                                                              'message'  => $fdata[5],
  149.                                                              'reminder' => $fdata[6);
  150.             }
  151.         }
  152.         fclose ($fp);
  153.     }
  154.     writecalendardata();
  155. }
  156.  
  157. /**
  158.  * same as delete but does not save calendar
  159.  * saving is done inside event_edit.php
  160.  * @return void 
  161.  * @access private
  162.  * @todo code reuse
  163.  */
  164. function update_event($date$time{
  165.     global $calendardata$username$data_dir$year;
  166.  
  167.     $filename getHashedFile($username$data_dir"$username.$year.cal");
  168.     $fp fopen ($filename,'r');
  169.     if ($fp){
  170.         while ($fdata fgetcsv ($fp4096'|')) {
  171.             if (($fdata[0]==$date&& ($fdata[1]==$time)){
  172.                 // do nothing
  173.             else {
  174.                 $calendardata[$fdata[0]][$fdata[1]] array'length'   => $fdata[2],
  175.                                                              'priority' => $fdata[3],
  176.                                                              'title'    => $fdata[4],
  177.                                                              'message'  => $fdata[5],
  178.                                                              'reminder' => $fdata[6);
  179.             }
  180.         }
  181.         fclose ($fp);
  182.     }
  183. }

Documentation generated on Mon, 13 Jan 2020 04:22:03 +0100 by phpDocumentor 1.4.3