All-in-One Event Calendar - Version 1.8

Version Description

Download this release

Release Info

Developer yani.iliev
Plugin Icon 128x128 All-in-One Event Calendar
Version 1.8
Comparing to
See all releases

Code changes from version 1.7 to 1.8

Files changed (66) hide show
  1. all-in-one-event-calendar.php +17 -13
  2. app/controller/class-ai1ec-app-controller.php +42 -15
  3. app/controller/class-ai1ec-calendar-controller.php +2 -2
  4. app/controller/class-ai1ec-events-controller.php +2 -2
  5. app/controller/class-ai1ec-exporter-controller.php +9 -9
  6. app/controller/class-ai1ec-importer-controller.php +3 -3
  7. app/controller/class-ai1ec-settings-controller.php +30 -13
  8. app/controller/class-ai1ec-themes-controller.php +116 -28
  9. app/exception/class-ai1ec-event-not-found.php +6 -6
  10. app/exception/class-ai1ec-file-not-found.php +6 -6
  11. app/exception/class-ai1ec-file-not-provided.php +6 -6
  12. app/exception/class-ai1ec-invalid-argument.php +6 -6
  13. app/helper/class-ai1ec-app-helper.php +64 -14
  14. app/helper/class-ai1ec-calendar-helper.php +1 -1
  15. app/helper/class-ai1ec-events-helper.php +1 -1
  16. app/helper/class-ai1ec-exporter-helper.php +14 -14
  17. app/helper/class-ai1ec-importer-helper.php +9 -10
  18. app/helper/class-ai1ec-settings-helper.php +4 -4
  19. app/helper/class-ai1ec-view-helper.php +9 -1
  20. app/model/class-ai1ec-event.php +20 -12
  21. app/model/class-ai1ec-exporter.php +11 -11
  22. app/model/class-ai1ec-importer.php +10 -10
  23. app/model/class-ai1ec-settings.php +21 -1
  24. app/view/admin/admin_notices.php +1 -0
  25. app/view/admin/box_advanced_settings.php +3 -1
  26. app/view/admin/box_general_settings.php +2 -2
  27. app/view/admin/box_support.php +74 -0
  28. app/view/admin/box_the_seed_studio.php +0 -60
  29. app/view/admin/calendar_tasks.php +2 -2
  30. app/view/admin/class-ai1ec-agenda-widget.php +1 -1
  31. app/view/admin/css/bootstrap.min.css +2 -2
  32. app/view/admin/css/settings.css +19 -20
  33. app/view/admin/img/timely-logo.png +0 -0
  34. app/view/admin/js/add_new_event.js +32 -9
  35. app/view/admin/js/bootstrap-modal.js +218 -0
  36. app/view/admin/less/bootstrap.less +0 -82
  37. app/view/admin/less/build-css.sh +0 -10
  38. app/view/admin/less/button-groups.less +0 -172
  39. app/view/admin/less/buttons.less +0 -187
  40. app/view/admin/less/dropdowns.less +0 -148
  41. app/view/admin/less/font-awesome.less +0 -264
  42. app/view/admin/less/grid.less +0 -5
  43. app/view/admin/less/hero-unit.less +0 -22
  44. app/view/admin/less/mixins.less +0 -614
  45. app/view/admin/less/navs.less +0 -363
  46. app/view/admin/less/reset.less +0 -126
  47. app/view/admin/less/scaffolding.less +0 -29
  48. app/view/admin/less/type.less +0 -234
  49. app/view/admin/less/utilities.less +0 -23
  50. app/view/admin/less/variables.less +0 -205
  51. app/view/admin/themes-updated.php +1 -1
  52. app/view/admin/video_modal.php +46 -0
  53. language/all-in-one-event-calendar-fr_FR.mo +0 -0
  54. language/all-in-one-event-calendar-fr_FR.po +1332 -1091
  55. language/all-in-one-event-calendar.mo +0 -0
  56. language/all-in-one-event-calendar.po +0 -1254
  57. language/all-in-one-event-calendar.pot +188 -173
  58. lib/class-ai1ec-updater.php +7 -1
  59. lib/global-functions.php +1 -1
  60. lib/iCalcreator-2.10.23/iCalUtilityFunctions.class.php +0 -1578
  61. lib/iCalcreator-2.10.23/releaseNotes-2.10.23.txt +0 -8
  62. lib/iCalcreator-2.10.23/summary.html +0 -323
  63. lib/iCalcreator-2.10.23/using.html +0 -5810
  64. lib/iCalcreator-2.10/releaseNotes-2.10.txt +0 -82
  65. lib/iCalcreator-2.10/summary.html +0 -283
  66. lib/iCalcreator-2.10/using.html +0 -5485
all-in-one-event-calendar.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
  /**
3
- * Plugin Name: All-in-One Calendar by Then.ly
4
- * Plugin URI: http://then.ly/
5
  * Description: A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds.
6
- * Author: Then.ly
7
- * Author URI: http://then.ly/
8
- * Version: 1.7
9
  */
10
  @set_time_limit( 0 );
11
  @ini_set( 'memory_limit', '256M' );
@@ -24,7 +24,7 @@ define( 'AI1EC_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
24
  // ==================
25
  // = Plugin Version =
26
  // ==================
27
- define( 'AI1EC_VERSION', '1.7' );
28
 
29
  // ====================
30
  // = Database Version =
@@ -34,7 +34,7 @@ define( 'AI1EC_DB_VERSION', 109 );
34
  // ==========================
35
  // = Bundled themes version =
36
  // ==========================
37
- define( 'AI1EC_THEMES_VERSION', 4 );
38
 
39
  // ================
40
  // = Cron Version =
@@ -42,7 +42,7 @@ define( 'AI1EC_THEMES_VERSION', 4 );
42
  define( 'AI1EC_CRON_VERSION', 102 );
43
  define( 'AI1EC_N_CRON_VERSION', 101 );
44
  define( 'AI1EC_N_CRON_FREQ', 'daily' );
45
- define( 'AI1EC_UPDATES_URL', 'http://then.ly/assets/thenly-all-in-one-calendar-1.7.zip' );
46
 
47
  // ===============
48
  // = Plugin Path =
@@ -167,7 +167,7 @@ define( 'AI1EC_POST_TYPE', 'ai1ec_event' );
167
  // =====================================================
168
  // = UPDATE THEMES PAGE BASE URL (wrap in admin_url()) =
169
  // =====================================================
170
- define( 'AI1EC_UPDATE_THEMES_BASE_URL', 'themes.php?page=' . AI1EC_PLUGIN_NAME . '-update-themes' );
171
 
172
  // =====================================================
173
  // = FEED SETTINGS PAGE BASE URL (wrap in admin_url()) =
@@ -177,7 +177,7 @@ define( 'AI1EC_FEED_SETTINGS_BASE_URL', 'edit.php?post_type=' . AI1EC_POST_TYPE
177
  // ================================================
178
  // = SETTINGS PAGE BASE URL (wrap in admin_url()) =
179
  // ================================================
180
- define( 'AI1EC_SETTINGS_BASE_URL', 'options-general.php?page=' . AI1EC_PLUGIN_NAME . '-settings' );
181
 
182
  // ======================
183
  // = Default Theme Name =
@@ -209,10 +209,15 @@ define( 'AI1EC_DEFAULT_THEME_PATH', AI1EC_THEMES_ROOT . '/' . AI1EC_DEFAULT_THEM
209
  // =====================
210
  define( 'AI1EC_DEFAULT_THEME_URL', AI1EC_THEMES_URL . '/' . AI1EC_DEFAULT_THEME_NAME );
211
 
 
 
 
 
 
212
  // ================
213
  // = RSS FEED URL =
214
  // ================
215
- define( 'AI1EC_RSS_FEED', 'http://feeds.feedburner.com/ai1ec' );
216
 
217
  // ======================================
218
  // = FAKE CATEGORY ID FOR CALENDAR PAGE =
@@ -241,8 +246,7 @@ define( 'AI1EC_EXPORT_URL', $tmp . "&controller=ai1ec_exporter_controlle
241
  // ====================================
242
  if( version_compare( PHP_VERSION, '5.3.0' ) >= 0 ) {
243
  // Parser that requires PHP v5.3.0 or up
244
- require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10.23/iCalcreator.class.php' );
245
- require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10.23//iCalUtilityFunctions.class.php' );
246
  } else {
247
  // Parser that works on PHP versions below 5.3.0
248
  require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10/iCalcreator.class.php' );
1
  <?php
2
  /**
3
+ * Plugin Name: All-in-One Event Calendar by Timely
4
+ * Plugin URI: http://time.ly/
5
  * Description: A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds.
6
+ * Author: Timely
7
+ * Author URI: http://time.ly/
8
+ * Version: 1.8
9
  */
10
  @set_time_limit( 0 );
11
  @ini_set( 'memory_limit', '256M' );
24
  // ==================
25
  // = Plugin Version =
26
  // ==================
27
+ define( 'AI1EC_VERSION', '1.8' );
28
 
29
  // ====================
30
  // = Database Version =
34
  // ==========================
35
  // = Bundled themes version =
36
  // ==========================
37
+ define( 'AI1EC_THEMES_VERSION', 5 );
38
 
39
  // ================
40
  // = Cron Version =
42
  define( 'AI1EC_CRON_VERSION', 102 );
43
  define( 'AI1EC_N_CRON_VERSION', 101 );
44
  define( 'AI1EC_N_CRON_FREQ', 'daily' );
45
+ define( 'AI1EC_UPDATES_URL', 'http://time.ly/assets/timely-all-in-one-calendar-1.8.zip' );
46
 
47
  // ===============
48
  // = Plugin Path =
167
  // =====================================================
168
  // = UPDATE THEMES PAGE BASE URL (wrap in admin_url()) =
169
  // =====================================================
170
+ define( 'AI1EC_UPDATE_THEMES_BASE_URL', 'edit.php?post_type=' . AI1EC_POST_TYPE . '&page=' . AI1EC_PLUGIN_NAME . '-update-themes' );
171
 
172
  // =====================================================
173
  // = FEED SETTINGS PAGE BASE URL (wrap in admin_url()) =
177
  // ================================================
178
  // = SETTINGS PAGE BASE URL (wrap in admin_url()) =
179
  // ================================================
180
+ define( 'AI1EC_SETTINGS_BASE_URL', 'edit.php?post_type=' . AI1EC_POST_TYPE . '&page=' . AI1EC_PLUGIN_NAME . '-settings' );
181
 
182
  // ======================
183
  // = Default Theme Name =
209
  // =====================
210
  define( 'AI1EC_DEFAULT_THEME_URL', AI1EC_THEMES_URL . '/' . AI1EC_DEFAULT_THEME_NAME );
211
 
212
+ // ======================================================
213
+ // = INSTALL THEMES PAGE BASE URL (wrap in admin_url()) =
214
+ // ======================================================
215
+ define( 'AI1EC_INSTALL_THEMES_BASE_URL', 'themes.php?page=' . AI1EC_PLUGIN_NAME . '-install-themes' );
216
+
217
  // ================
218
  // = RSS FEED URL =
219
  // ================
220
+ define( 'AI1EC_RSS_FEED', 'http://time.ly/feed/' );
221
 
222
  // ======================================
223
  // = FAKE CATEGORY ID FOR CALENDAR PAGE =
246
  // ====================================
247
  if( version_compare( PHP_VERSION, '5.3.0' ) >= 0 ) {
248
  // Parser that requires PHP v5.3.0 or up
249
+ require_once( AI1EC_LIB_PATH . '/iCalcreator-2.12/iCalcreator.class.php' );
 
250
  } else {
251
  // Parser that works on PHP versions below 5.3.0
252
  require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10/iCalcreator.class.php' );
app/controller/class-ai1ec-app-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_App_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_App_Controller {
16
  /**
@@ -93,7 +93,10 @@ class Ai1ec_App_Controller {
93
  // Continue loading hooks only if themes are installed. Otherwise display a
94
  // notification on the backend with instructions how to install themes.
95
  if( ! $ai1ec_themes_controller->are_themes_available() ) {
96
- add_action( 'admin_notices', array( &$ai1ec_app_helper, 'admin_notices' ) );
 
 
 
97
  return;
98
  }
99
 
@@ -202,8 +205,9 @@ class Ai1ec_App_Controller {
202
  add_action( 'wp_ajax_ai1ec_get_repeat_box', array( &$ai1ec_events_helper, 'get_repeat_box' ) );
203
  add_action( 'wp_ajax_ai1ec_get_date_picker_box', array( &$ai1ec_events_helper, 'get_date_picker_box' ) );
204
 
205
- // Disable notification
206
  add_action( 'wp_ajax_ai1ec_disable_notification', array( &$ai1ec_settings_controller, 'disable_notification' ) );
 
207
 
208
  // ==============
209
  // = Shortcodes =
@@ -406,7 +410,8 @@ class Ai1ec_App_Controller {
406
  global $ai1ec_settings_controller,
407
  $ai1ec_settings_helper,
408
  $ai1ec_settings,
409
- $ai1ec_themes_controller;
 
410
 
411
  // =======================
412
  // = Calendar Feeds Page =
@@ -428,17 +433,24 @@ class Ai1ec_App_Controller {
428
  // = Settings Page =
429
  // =================
430
  $ai1ec_settings->settings_page = add_submenu_page(
431
- 'options-general.php',
432
- __( 'Calendar', AI1EC_PLUGIN_NAME ),
433
- __( 'Calendar', AI1EC_PLUGIN_NAME ),
434
  'manage_ai1ec_options',
435
  AI1EC_PLUGIN_NAME . '-settings',
436
  array( &$ai1ec_settings_controller, 'view_settings' )
437
  );
 
 
 
 
 
 
438
  // Allow settings page to have additional meta boxes added to it.
439
  add_action( "load-{$ai1ec_settings->settings_page}", array( &$ai1ec_settings_helper, 'add_settings_meta_boxes') );
440
  // Load our plugin's meta boxes.
441
  add_action( "load-{$ai1ec_settings->settings_page}", array( &$ai1ec_settings_controller, 'add_settings_meta_boxes' ) );
 
442
  // ========================
443
  // = Calendar Update Page =
444
  // ========================
@@ -517,10 +529,12 @@ class Ai1ec_App_Controller {
517
  // Parse categories by name
518
  if( isset( $attr["cat_name"] ) && ! empty( $attr["cat_name"] ) ) {
519
  foreach( explode( ',', $attr["cat_name"] ) as $c ) {
520
- $cid = get_term_by( "name", $c, "events_categories" );
521
  if( $cid !== false ) {
522
  // if term was found, include it
523
- $_REQUEST["ai1ec_cat_ids"] = $cid->term_id . ',';
 
 
524
  }
525
  }
526
  // remove last comma only if there is some content in the var
@@ -540,10 +554,12 @@ class Ai1ec_App_Controller {
540
  // Parse tags by name
541
  if( isset( $attr["tag_name"] ) && ! empty( $attr["tag_name"] ) ) {
542
  foreach( explode( ',', $attr["tag_name"] ) as $t ) {
543
- $tid = get_term_by( "name", $t, "events_tags" );
544
  if( $tid !== false ) {
545
  // if term was found, include it
546
- $_REQUEST["ai1ec_tag_ids"] = $tid->term_id . ',';
 
 
547
  }
548
  }
549
  // remove last comma only if there is some content in the var
@@ -617,7 +633,7 @@ class Ai1ec_App_Controller {
617
  // the calendar container div
618
  if( in_the_loop() )
619
  $content =
620
- '<div id="ai1ec-container" class="ai1ec-container thenly">' .
621
  $content . $this->page_content .
622
  '</div>';
623
 
@@ -636,9 +652,20 @@ class Ai1ec_App_Controller {
636
  // use our custom class
637
  $upgrader = new Ai1ec_Updater();
638
  // update the plugin
639
- $upgrader->upgrade( 'all-in-one-event-calendar' );
640
- // give user a way out of the page
641
- echo '<a href="' . admin_url( 'edit.php?post_type=' . AI1EC_POST_TYPE ) . '">Continue here</a>';
 
 
 
 
 
 
 
 
 
 
 
642
  }
643
  }
644
  // END class
10
  * Ai1ec_App_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_App_Controller {
16
  /**
93
  // Continue loading hooks only if themes are installed. Otherwise display a
94
  // notification on the backend with instructions how to install themes.
95
  if( ! $ai1ec_themes_controller->are_themes_available() ) {
96
+ // Enables the hidden themes installer page
97
+ add_action( 'admin_menu', array( &$ai1ec_themes_controller, 'register_theme_installer' ), 1 );
98
+ // Redirects the user to install theme page
99
+ add_action( 'admin_menu', array( &$this, 'check_themes' ), 2 );
100
  return;
101
  }
102
 
205
  add_action( 'wp_ajax_ai1ec_get_repeat_box', array( &$ai1ec_events_helper, 'get_repeat_box' ) );
206
  add_action( 'wp_ajax_ai1ec_get_date_picker_box', array( &$ai1ec_events_helper, 'get_date_picker_box' ) );
207
 
208
+ // Disable notifications
209
  add_action( 'wp_ajax_ai1ec_disable_notification', array( &$ai1ec_settings_controller, 'disable_notification' ) );
210
+ add_action( 'wp_ajax_ai1ec_disable_intro_video', array( &$ai1ec_settings_controller, 'disable_intro_video' ) );
211
 
212
  // ==============
213
  // = Shortcodes =
410
  global $ai1ec_settings_controller,
411
  $ai1ec_settings_helper,
412
  $ai1ec_settings,
413
+ $ai1ec_themes_controller,
414
+ $submenu;
415
 
416
  // =======================
417
  // = Calendar Feeds Page =
433
  // = Settings Page =
434
  // =================
435
  $ai1ec_settings->settings_page = add_submenu_page(
436
+ 'edit.php?post_type=' . AI1EC_POST_TYPE,
437
+ __( 'Settings', AI1EC_PLUGIN_NAME ),
438
+ __( 'Settings', AI1EC_PLUGIN_NAME ),
439
  'manage_ai1ec_options',
440
  AI1EC_PLUGIN_NAME . '-settings',
441
  array( &$ai1ec_settings_controller, 'view_settings' )
442
  );
443
+ // Make copy of Settings page at its old location.
444
+ $submenu['options-general.php'][] = array(
445
+ __( 'Calendar', AI1EC_PLUGIN_NAME ),
446
+ 'manage_ai1ec_options',
447
+ AI1EC_SETTINGS_BASE_URL,
448
+ );
449
  // Allow settings page to have additional meta boxes added to it.
450
  add_action( "load-{$ai1ec_settings->settings_page}", array( &$ai1ec_settings_helper, 'add_settings_meta_boxes') );
451
  // Load our plugin's meta boxes.
452
  add_action( "load-{$ai1ec_settings->settings_page}", array( &$ai1ec_settings_controller, 'add_settings_meta_boxes' ) );
453
+
454
  // ========================
455
  // = Calendar Update Page =
456
  // ========================
529
  // Parse categories by name
530
  if( isset( $attr["cat_name"] ) && ! empty( $attr["cat_name"] ) ) {
531
  foreach( explode( ',', $attr["cat_name"] ) as $c ) {
532
+ $cid = get_term_by( "name", trim( $c ), "events_categories" );
533
  if( $cid !== false ) {
534
  // if term was found, include it
535
+ $_REQUEST["ai1ec_cat_ids"] = isset( $_REQUEST["ai1ec_cat_ids"] ) ?
536
+ $_REQUEST["ai1ec_cat_ids"] . $cid->term_id . ',' :
537
+ $cid->term_id . ',';
538
  }
539
  }
540
  // remove last comma only if there is some content in the var
554
  // Parse tags by name
555
  if( isset( $attr["tag_name"] ) && ! empty( $attr["tag_name"] ) ) {
556
  foreach( explode( ',', $attr["tag_name"] ) as $t ) {
557
+ $tid = get_term_by( "name", trim( $t ), "events_tags" );
558
  if( $tid !== false ) {
559
  // if term was found, include it
560
+ $_REQUEST["ai1ec_tag_ids"] = isset( $_REQUEST["ai1ec_tag_ids"] ) ?
561
+ $_REQUEST["ai1ec_tag_ids"] . $tid->term_id . ',' :
562
+ $tid->term_id . ',';
563
  }
564
  }
565
  // remove last comma only if there is some content in the var
633
  // the calendar container div
634
  if( in_the_loop() )
635
  $content =
636
+ '<div id="ai1ec-container" class="ai1ec-container timely">' .
637
  $content . $this->page_content .
638
  '</div>';
639
 
652
  // use our custom class
653
  $upgrader = new Ai1ec_Updater();
654
  // update the plugin
655
+ $upgrader->upgrade( 'all-in-one-event-calendar/all-in-one-event-calendar.php' );
656
+ }
657
+
658
+ /**
659
+ * check_themes function
660
+ *
661
+ * This function checks if the user is not on install themes page
662
+ * and redirects the user to that page
663
+ *
664
+ * @return void
665
+ **/
666
+ function check_themes() {
667
+ if( ! isset( $_REQUEST["page"] ) || $_REQUEST["page"] != AI1EC_PLUGIN_NAME . '-install-themes' )
668
+ wp_redirect( admin_url( AI1EC_INSTALL_THEMES_BASE_URL ) );
669
  }
670
  }
671
  // END class
app/controller/class-ai1ec-calendar-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Calendar_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Calendar_Controller {
16
  /**
@@ -668,7 +668,7 @@ class Ai1ec_Calendar_Controller {
668
  function load_css() {
669
  global $ai1ec_settings, $ai1ec_view_helper;
670
 
671
- $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-general', 'general.css' );
672
  $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-calendar', 'calendar.css' );
673
 
674
  if( $ai1ec_settings->calendar_css_selector )
10
  * Ai1ec_Calendar_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Calendar_Controller {
16
  /**
668
  function load_css() {
669
  global $ai1ec_settings, $ai1ec_view_helper;
670
 
671
+ $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-general', 'style.css' );
672
  $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-calendar', 'calendar.css' );
673
 
674
  if( $ai1ec_settings->calendar_css_selector )
app/controller/class-ai1ec-events-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Events_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Events_Controller {
16
  /**
@@ -183,7 +183,7 @@ class Ai1ec_Events_Controller {
183
  // =======
184
  // = CSS =
185
  // =======
186
- $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-general', 'general.css' );
187
  $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-event', 'event.css' );
188
  // Load the print style only if the parameter print is set to true.
189
  if( isset( $_GET['print'] ) && $_GET['print'] === 'true' ) {
10
  * Ai1ec_Events_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Events_Controller {
16
  /**
183
  // =======
184
  // = CSS =
185
  // =======
186
+ $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-general', 'style.css' );
187
  $ai1ec_view_helper->theme_enqueue_style( 'ai1ec-event', 'event.css' );
188
  // Load the print style only if the parameter print is set to true.
189
  if( isset( $_GET['print'] ) && $_GET['print'] === 'true' ) {
app/controller/class-ai1ec-exporter-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Exporter_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Exporter_Controller {
16
  /**
@@ -43,7 +43,7 @@ class Ai1ec_Exporter_Controller {
43
  * Default constructor
44
  **/
45
  private function __construct() { }
46
-
47
  /**
48
  * n_cron function
49
  *
@@ -59,10 +59,10 @@ class Ai1ec_Exporter_Controller {
59
  "WHERE post_type = '" . AI1EC_POST_TYPE . "' AND " .
60
  "post_status = 'publish'";
61
  $n_events = $wpdb->get_var( $query );
62
-
63
  $query = "SELECT COUNT( ID ) FROM $wpdb->users";
64
  $n_users = $wpdb->get_var( $query );
65
-
66
  $categories = $tags = array();
67
  foreach( get_terms( 'events_categories', array( 'hide_empty' => false ) ) as $term ) {
68
  if( isset( $term->name ) )
@@ -88,15 +88,15 @@ class Ai1ec_Exporter_Controller {
88
  'privacy' => get_option( 'blog_public' ),
89
  'plugin_version' => AI1EC_VERSION
90
  );
91
-
92
  $ch = curl_init( 'http://184.169.144.10:24132/data' );
93
  curl_setopt( $ch, CURLOPT_POST, count( $data ) );
94
  curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $data ) );
95
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
96
-
97
  //execute post
98
  $result = curl_exec( $ch );
99
-
100
  //close connection
101
  curl_close( $ch );
102
  }
@@ -116,14 +116,14 @@ class Ai1ec_Exporter_Controller {
116
  $ai1ec_tag_ids = isset( $_REQUEST['ai1ec_tag_ids'] ) && ! empty( $_REQUEST['ai1ec_tag_ids'] ) ? $_REQUEST['ai1ec_tag_ids'] : false;
117
  $ai1ec_post_ids = isset( $_REQUEST['ai1ec_post_ids'] ) && ! empty( $_REQUEST['ai1ec_post_ids'] ) ? $_REQUEST['ai1ec_post_ids'] : false;
118
  $filter = array();
119
-
120
  if( $ai1ec_cat_ids )
121
  $filter['cat_ids'] = split( ',', $ai1ec_cat_ids );
122
  if( $ai1ec_tag_ids )
123
  $filter['tag_ids'] = split( ',', $ai1ec_tag_ids );
124
  if( $ai1ec_post_ids )
125
  $filter['post_ids'] = split( ',', $ai1ec_post_ids );
126
-
127
  // when exporting events by post_id, do not look up the event's start/end date/time
128
  $start = $ai1ec_post_ids !== false ? false : gmmktime() - 24 * 60 * 60; // Include any events ending today
129
  $end = false;
10
  * Ai1ec_Exporter_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Exporter_Controller {
16
  /**
43
  * Default constructor
44
  **/
45
  private function __construct() { }
46
+
47
  /**
48
  * n_cron function
49
  *
59
  "WHERE post_type = '" . AI1EC_POST_TYPE . "' AND " .
60
  "post_status = 'publish'";
61
  $n_events = $wpdb->get_var( $query );
62
+
63
  $query = "SELECT COUNT( ID ) FROM $wpdb->users";
64
  $n_users = $wpdb->get_var( $query );
65
+
66
  $categories = $tags = array();
67
  foreach( get_terms( 'events_categories', array( 'hide_empty' => false ) ) as $term ) {
68
  if( isset( $term->name ) )
88
  'privacy' => get_option( 'blog_public' ),
89
  'plugin_version' => AI1EC_VERSION
90
  );
91
+
92
  $ch = curl_init( 'http://184.169.144.10:24132/data' );
93
  curl_setopt( $ch, CURLOPT_POST, count( $data ) );
94
  curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $data ) );
95
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
96
+
97
  //execute post
98
  $result = curl_exec( $ch );
99
+
100
  //close connection
101
  curl_close( $ch );
102
  }
116
  $ai1ec_tag_ids = isset( $_REQUEST['ai1ec_tag_ids'] ) && ! empty( $_REQUEST['ai1ec_tag_ids'] ) ? $_REQUEST['ai1ec_tag_ids'] : false;
117
  $ai1ec_post_ids = isset( $_REQUEST['ai1ec_post_ids'] ) && ! empty( $_REQUEST['ai1ec_post_ids'] ) ? $_REQUEST['ai1ec_post_ids'] : false;
118
  $filter = array();
119
+
120
  if( $ai1ec_cat_ids )
121
  $filter['cat_ids'] = split( ',', $ai1ec_cat_ids );
122
  if( $ai1ec_tag_ids )
123
  $filter['tag_ids'] = split( ',', $ai1ec_tag_ids );
124
  if( $ai1ec_post_ids )
125
  $filter['post_ids'] = split( ',', $ai1ec_post_ids );
126
+
127
  // when exporting events by post_id, do not look up the event's start/end date/time
128
  $start = $ai1ec_post_ids !== false ? false : gmmktime() - 24 * 60 * 60; // Include any events ending today
129
  $end = false;
app/controller/class-ai1ec-importer-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Importer_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Importer_Controller {
16
  /**
@@ -88,8 +88,8 @@ class Ai1ec_Importer_Controller {
88
 
89
  if( ! isset( $wp_importers['ai1ec_the_events_calendar'] ) ) {
90
  $wp_importers['ai1ec_the_events_calendar'] = array(
91
- __( 'The Events Calendar → All-in-One Calendar', AI1EC_PLUGIN_NAME ),
92
- __( 'Imports events created using The Events Calendar plugin into the All-in-One Calendar', AI1EC_PLUGIN_NAME ),
93
  array( &$this, 'import_the_events_calendar' )
94
  );
95
  }
10
  * Ai1ec_Importer_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Importer_Controller {
16
  /**
88
 
89
  if( ! isset( $wp_importers['ai1ec_the_events_calendar'] ) ) {
90
  $wp_importers['ai1ec_the_events_calendar'] = array(
91
+ __( 'The Events Calendar → All-in-One Event Calendar', AI1EC_PLUGIN_NAME ),
92
+ __( 'Imports events created using The Events Calendar plugin into the All-in-One Event Calendar', AI1EC_PLUGIN_NAME ),
93
  array( &$this, 'import_the_events_calendar' )
94
  );
95
  }
app/controller/class-ai1ec-settings-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Settings_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Settings_Controller {
16
  /**
@@ -57,7 +57,7 @@ class Ai1ec_Settings_Controller {
57
  $this->save( 'settings' );
58
  }
59
  $args = array(
60
- 'title' => __( 'All-in-One Calendar: Settings', AI1EC_PLUGIN_NAME ),
61
  'settings_page' => $ai1ec_settings->settings_page,
62
  );
63
  $ai1ec_view_helper->display_admin( 'settings.php', $args );
@@ -76,7 +76,7 @@ class Ai1ec_Settings_Controller {
76
  $this->save( 'feeds' );
77
  }
78
  $args = array(
79
- 'title' => __( 'All-in-One Calendar: Calendar Feeds', AI1EC_PLUGIN_NAME ),
80
  'settings_page' => $ai1ec_settings->feeds_page,
81
  );
82
  $ai1ec_view_helper->display_admin( 'settings.php', $args );
@@ -270,7 +270,7 @@ class Ai1ec_Settings_Controller {
270
  }
271
 
272
  /**
273
- * disable_notification function
274
  *
275
  * @return void
276
  **/
@@ -286,6 +286,23 @@ class Ai1ec_Settings_Controller {
286
  $ai1ec_view_helper->json_response( $output );
287
  }
288
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  /**
290
  * Add meta boxes to settings screen.
291
  *
@@ -313,11 +330,11 @@ class Ai1ec_Settings_Controller {
313
  'left-side',
314
  'default'
315
  );
316
- // Add the 'Then.ly Support' meta box.
317
  add_meta_box(
318
- 'the-seed-studio-settings',
319
- _x( 'Then.ly Support', 'meta box', AI1EC_PLUGIN_NAME ),
320
- array( &$ai1ec_settings_helper, 'the_seed_studio_meta_box' ),
321
  $ai1ec_settings->settings_page,
322
  'right-side',
323
  'default'
@@ -342,11 +359,11 @@ class Ai1ec_Settings_Controller {
342
  'left-side',
343
  'default'
344
  );
345
- // Add the 'Then.ly Support' meta box.
346
  add_meta_box(
347
- 'the-seed-studio-settings',
348
- _x( 'Then.ly Support', 'meta box', AI1EC_PLUGIN_NAME ),
349
- array( &$ai1ec_settings_helper, 'the_seed_studio_meta_box' ),
350
  $ai1ec_settings->feeds_page,
351
  'right-side',
352
  'default'
@@ -376,7 +393,7 @@ class Ai1ec_Settings_Controller {
376
  function plugin_row_meta( $links, $file ) {
377
  if( $file == AI1EC_PLUGIN_BASENAME ) {
378
  $links[] = sprintf( __( '<a href="%s" target="_blank">Donate</a>', AI1EC_PLUGIN_NAME ), 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9JJMUW48W2ED8' );
379
- $links[] = sprintf( __( '<a href="%s" target="_blank">Get Support</a>', AI1EC_PLUGIN_NAME ), 'http://help.then.ly' );
380
  }
381
 
382
  return $links;
10
  * Ai1ec_Settings_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Settings_Controller {
16
  /**
57
  $this->save( 'settings' );
58
  }
59
  $args = array(
60
+ 'title' => __( 'All-in-One Event Calendar: Settings', AI1EC_PLUGIN_NAME ),
61
  'settings_page' => $ai1ec_settings->settings_page,
62
  );
63
  $ai1ec_view_helper->display_admin( 'settings.php', $args );
76
  $this->save( 'feeds' );
77
  }
78
  $args = array(
79
+ 'title' => __( 'All-in-One Event Calendar: Calendar Feeds', AI1EC_PLUGIN_NAME ),
80
  'settings_page' => $ai1ec_settings->feeds_page,
81
  );
82
  $ai1ec_view_helper->display_admin( 'settings.php', $args );
270
  }
271
 
272
  /**
273
+ * Disable data notification (AJAX callback).
274
  *
275
  * @return void
276
  **/
286
  $ai1ec_view_helper->json_response( $output );
287
  }
288
 
289
+ /**
290
+ * Disable intro video (AJAX callback).
291
+ *
292
+ * @return void
293
+ **/
294
+ function disable_intro_video() {
295
+ global $ai1ec_view_helper, $ai1ec_settings;
296
+
297
+ $ai1ec_settings->update_intro_video( false );
298
+ $output = array(
299
+ 'error' => false,
300
+ 'message' => 'Request successful.'
301
+ );
302
+
303
+ $ai1ec_view_helper->json_response( $output );
304
+ }
305
+
306
  /**
307
  * Add meta boxes to settings screen.
308
  *
330
  'left-side',
331
  'default'
332
  );
333
+ // Add the 'Timely Support' meta box.
334
  add_meta_box(
335
+ 'ai1ec-support',
336
+ _x( 'Timely Support', 'meta box', AI1EC_PLUGIN_NAME ),
337
+ array( &$ai1ec_settings_helper, 'support_meta_box' ),
338
  $ai1ec_settings->settings_page,
339
  'right-side',
340
  'default'
359
  'left-side',
360
  'default'
361
  );
362
+ // Add the 'Timely Support' meta box.
363
  add_meta_box(
364
+ 'ai1ec-support',
365
+ _x( 'Timely Support', 'meta box', AI1EC_PLUGIN_NAME ),
366
+ array( &$ai1ec_settings_helper, 'support_meta_box' ),
367
  $ai1ec_settings->feeds_page,
368
  'right-side',
369
  'default'
393
  function plugin_row_meta( $links, $file ) {
394
  if( $file == AI1EC_PLUGIN_BASENAME ) {
395
  $links[] = sprintf( __( '<a href="%s" target="_blank">Donate</a>', AI1EC_PLUGIN_NAME ), 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9JJMUW48W2ED8' );
396
+ $links[] = sprintf( __( '<a href="%s" target="_blank">Get Support</a>', AI1EC_PLUGIN_NAME ), 'http://help.time.ly/' );
397
  }
398
 
399
  return $links;
app/controller/class-ai1ec-themes-controller.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Themes_Controller class
11
  *
12
  * @package Controllers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Themes_Controller {
16
  /**
@@ -93,31 +93,35 @@ class Ai1ec_Themes_Controller {
93
  }
94
 
95
  /**
96
- * Returns whether core theme files were able to be copied over to wp-content.
97
- * Checks if they are already there, and if they are not, tries to copy them
98
- * over. If they can't be copied, returns false.
99
  *
100
  * @return bool
101
  **/
102
  public function are_themes_available() {
103
- // are themes folder and Vortex theme available?
104
- if( @is_dir( AI1EC_THEMES_ROOT ) === true && @is_dir( AI1EC_DEFAULT_THEME_PATH ) === true ) {
105
  return true;
106
- } else {
107
- // try to create AI1EC_THEMES_ROOT
108
- if( ! @mkdir( AI1EC_THEMES_ROOT ) )
109
- return false;
110
-
111
- // copy themes-ai1ec from plugin's root to wp-content's themes root
112
- $this->copy_directory( AI1EC_PATH . '/' . AI1EC_THEMES_FOLDER, AI1EC_THEMES_ROOT );
113
 
114
- if( @is_dir( AI1EC_THEMES_ROOT ) === false || @is_dir( AI1EC_DEFAULT_THEME_PATH ) === false )
115
- return false;
116
 
117
- // Update installed core themes version.
118
- update_option( 'ai1ec_themes_version', AI1EC_THEMES_VERSION );
119
- }
120
- return true;
 
 
 
 
 
 
 
 
 
 
 
121
  }
122
 
123
  /**
@@ -164,6 +168,81 @@ class Ai1ec_Themes_Controller {
164
  }
165
 
166
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  /**
168
  * Register Update Calendar Themes page in wp-admin.
169
  */
@@ -171,14 +250,17 @@ class Ai1ec_Themes_Controller {
171
  // Add menu item for theme update page, but without the actual menu item
172
  // by removing it again right away.
173
  add_submenu_page(
174
- 'themes.php',
175
  __( 'Update Core Calendar Files', AI1EC_PLUGIN_NAME ),
176
  __( 'Update Core Calendar Files', AI1EC_PLUGIN_NAME ),
177
  'install_themes',
178
  AI1EC_PLUGIN_NAME . '-update-themes',
179
  array( &$this, 'update_core_themes' )
180
  );
181
- remove_submenu_page( 'themes.php', AI1EC_PLUGIN_NAME . '-update-themes' );
 
 
 
182
  }
183
 
184
  /**
@@ -204,14 +286,8 @@ class Ai1ec_Themes_Controller {
204
  $files[] = 'vortex/js/general.min.js';
205
  $files[] = 'vortex/css/calendar.css';
206
  $files[] = 'vortex/css/event.css';
207
- $files[] = 'vortex/css/general.css';
208
  $files[] = 'vortex/css/print.css';
209
- $files[] = 'vortex/less/build-css.sh';
210
- $files[] = 'vortex/less/calendar.less';
211
- $files[] = 'vortex/less/event.less';
212
- $files[] = 'vortex/less/general.less';
213
- $files[] = 'vortex/less/mixins-custom.less';
214
- $files[] = 'vortex/less/variables.less';
215
  $files[] = 'vortex/month.php';
216
  $files[] = 'vortex/oneday.php';
217
  $files[] = 'vortex/style.css';
@@ -230,6 +306,18 @@ class Ai1ec_Themes_Controller {
230
  $files[] = 'vortex/js/calendar.js';
231
  }
232
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  // Remove duplicates.
234
  $files = array_unique( $files );
235
 
10
  * Ai1ec_Themes_Controller class
11
  *
12
  * @package Controllers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Themes_Controller {
16
  /**
93
  }
94
 
95
  /**
96
+ * are_themes_available function
97
+ *
98
+ * Checks if core calendar theme folder is present in wp-content.
99
  *
100
  * @return bool
101
  **/
102
  public function are_themes_available() {
103
+ // Are calendar themes folder and Vortex theme present under wp-content ?
104
+ if( @is_dir( AI1EC_THEMES_ROOT ) === true && @is_dir( AI1EC_DEFAULT_THEME_PATH ) === true )
105
  return true;
 
 
 
 
 
 
 
106
 
107
+ return false;
108
+ }
109
 
110
+ /**
111
+ * Register Install Calendar Themes page in wp-admin.
112
+ */
113
+ function register_theme_installer() {
114
+ // Add menu item for theme install page, but remove it using remove_submenu_page
115
+ // to generate a "ghost" page
116
+ add_submenu_page(
117
+ 'themes.php',
118
+ __( 'Install Calendar Themes', AI1EC_PLUGIN_NAME ),
119
+ __( 'Install Calendar Themes', AI1EC_PLUGIN_NAME ),
120
+ 'install_themes',
121
+ AI1EC_PLUGIN_NAME . '-install-themes',
122
+ array( &$this, 'install_themes' )
123
+ );
124
+ remove_submenu_page( 'themes.php', AI1EC_PLUGIN_NAME . '-install-themes' );
125
  }
126
 
127
  /**
168
  }
169
 
170
 
171
+ /**
172
+ * install_themes function
173
+ *
174
+ * @return void
175
+ **/
176
+ function install_themes() {
177
+ ?>
178
+ <div class="wrap">
179
+ <?php
180
+ screen_icon();
181
+ ?>
182
+ <h2><?php _e( 'Install Calendar Themes', AI1EC_PLUGIN_NAME ) ?></h2>
183
+ <?php
184
+ // WP_Filesystem figures it out by itself, but the filesystem method may be overriden here
185
+ $method = '';
186
+ $url = wp_nonce_url( AI1EC_INSTALL_THEMES_BASE_URL, AI1EC_PLUGIN_NAME . '-theme-installer' );
187
+ if( false === ( $creds = request_filesystem_credentials( $url, $method, false, false ) ) ) {
188
+ // if we get here, then we don't have credentials yet,
189
+ // but have just produced a form for the user to fill in,
190
+ // so stop processing for now
191
+ return false; // stop the normal page form from displaying
192
+ }
193
+
194
+ // now we have some credentials, try to get the wp_filesystem running
195
+ if( ! WP_Filesystem( $creds ) ) {
196
+ // our credentials were no good, ask the user for them again
197
+ request_filesystem_credentials( $url, $method, true, false );
198
+ return false;
199
+ }
200
+ global $wp_filesystem;
201
+ $themes_root = $wp_filesystem->wp_content_dir() . AI1EC_THEMES_FOLDER;
202
+ $result = $wp_filesystem->mkdir( $themes_root );
203
+ if( $result === false ) {
204
+ ?>
205
+ <p><?php _e( sprintf( 'Unable to create %s folder', AI1EC_THEMES_ROOT ), AI1EC_PLUGIN_NAME ) ?></p>
206
+ <p><?php _e( sprintf( 'Try to create %s folder manually and then restart the process',
207
+ AI1EC_THEMES_ROOT ), AI1EC_PLUGIN_NAME ) ?></p>
208
+ </div>
209
+ <?php
210
+ return false;
211
+ }
212
+ $plugin_themes_dir = $wp_filesystem->wp_plugins_dir() . AI1EC_PLUGIN_NAME . DIRECTORY_SEPARATOR . AI1EC_THEMES_FOLDER;
213
+ $result = copy_dir( $plugin_themes_dir, $themes_root );
214
+ if( is_wp_error( $result ) ) {
215
+ ?>
216
+ <div id="message" class="error">
217
+ <h3>
218
+ <?php _e( 'Errors occurred while we tried to install your core Calendar Themes', AI1EC_PLUGIN_NAME ) ?>.
219
+ </h3>
220
+ <p>
221
+ <strong>
222
+ <?php _e(
223
+ sprintf( 'Please fix the error listed below or your calendar may malfunction: %s', $result->get_error_message() ),
224
+ AI1EC_PLUGIN_NAME
225
+ ) ?>
226
+ </strong>
227
+ </p>
228
+ </div>
229
+ <?php
230
+ } else {
231
+ update_option( 'ai1ec_themes_version', AI1EC_THEMES_VERSION );
232
+ ?>
233
+ <div id="message" class="updated"><h3><?php _e( 'Calendar themes were installed successfully', AI1EC_PLUGIN_NAME ) ?>.</h3></div>
234
+ <p>
235
+ <a class="button" href="<?php echo AI1EC_SETTINGS_BASE_URL; ?>">
236
+ <?php _e( 'All-in-One Event Calendar Settings »', AI1EC_PLUGIN_NAME ); ?>
237
+ </a>
238
+ </p>
239
+ <?php
240
+ }
241
+ ?>
242
+ </div>
243
+ <?php
244
+ }
245
+
246
  /**
247
  * Register Update Calendar Themes page in wp-admin.
248
  */
250
  // Add menu item for theme update page, but without the actual menu item
251
  // by removing it again right away.
252
  add_submenu_page(
253
+ 'edit.php?post_type=' . AI1EC_POST_TYPE,
254
  __( 'Update Core Calendar Files', AI1EC_PLUGIN_NAME ),
255
  __( 'Update Core Calendar Files', AI1EC_PLUGIN_NAME ),
256
  'install_themes',
257
  AI1EC_PLUGIN_NAME . '-update-themes',
258
  array( &$this, 'update_core_themes' )
259
  );
260
+ remove_submenu_page(
261
+ 'edit.php?post_type=' . AI1EC_POST_TYPE,
262
+ AI1EC_PLUGIN_NAME . '-update-themes'
263
+ );
264
  }
265
 
266
  /**
286
  $files[] = 'vortex/js/general.min.js';
287
  $files[] = 'vortex/css/calendar.css';
288
  $files[] = 'vortex/css/event.css';
289
+ $files[] = 'vortex/css/style.css';
290
  $files[] = 'vortex/css/print.css';
 
 
 
 
 
 
291
  $files[] = 'vortex/month.php';
292
  $files[] = 'vortex/oneday.php';
293
  $files[] = 'vortex/style.css';
306
  $files[] = 'vortex/js/calendar.js';
307
  }
308
 
309
+ if ( $active_version < 5 ) {
310
+ // Copy over files updated between AI1EC 1.7 RC3 and AI1EC 1.8 RC3
311
+ $files[] = 'vortex/agenda-widget.php';
312
+ $files[] = 'vortex/calendar.php';
313
+ $files[] = 'vortex/css/calendar.css';
314
+ $files[] = 'vortex/css/event.css';
315
+ $files[] = 'vortex/event-exceprt.php';
316
+ $files[] = 'vortex/event-multi.php';
317
+ $files[] = 'vortex/event-single.php';
318
+ $files[] = 'vortex/style.css';
319
+ }
320
+
321
  // Remove duplicates.
322
  $files = array_unique( $files );
323
 
app/exception/class-ai1ec-event-not-found.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
- //
3
  // class-ai1ec-event-not-found.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_Event_Not_Found class
11
  *
12
  * @package Exceptions
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Event_Not_Found extends Exception {
16
-
17
  }
18
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-event-not-found.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_Event_Not_Found class
11
  *
12
  * @package Exceptions
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Event_Not_Found extends Exception {
16
+
17
  }
18
+ // END class
app/exception/class-ai1ec-file-not-found.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
- //
3
  // class-ai1ec-file-not-found.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_File_Not_Found class
11
  *
12
  * @package Exceptions
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_File_Not_Found extends Exception {
16
-
17
  }
18
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-file-not-found.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_File_Not_Found class
11
  *
12
  * @package Exceptions
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_File_Not_Found extends Exception {
16
+
17
  }
18
+ // END class
app/exception/class-ai1ec-file-not-provided.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
- //
3
  // class-ai1ec-file-not-provided.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_File_Not_Provided class
11
  *
12
  * @package Exceptions
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_File_Not_Provided extends Exception {
16
-
17
  }
18
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-file-not-provided.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_File_Not_Provided class
11
  *
12
  * @package Exceptions
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_File_Not_Provided extends Exception {
16
+
17
  }
18
+ // END class
app/exception/class-ai1ec-invalid-argument.php CHANGED
@@ -1,18 +1,18 @@
1
  <?php
2
- //
3
  // class-ai1ec-invalid-argument.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_Invalid_Argument class
11
  *
12
  * @package Exceptions
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Invalid_Argument extends Exception {
16
-
17
  }
18
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-invalid-argument.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_Invalid_Argument class
11
  *
12
  * @package Exceptions
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Invalid_Argument extends Exception {
16
+
17
  }
18
+ // END class
app/helper/class-ai1ec-app-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_App_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_App_Helper {
16
  /**
@@ -683,10 +683,53 @@ class Ai1ec_App_Helper {
683
  $plugin_page,
684
  $ai1ec_themes_controller;
685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  // No themes available notice.
687
  if( ! $ai1ec_themes_controller->are_themes_available() ) {
688
  $args = array(
689
- 'label' => 'All-in-One Calendar Notice',
690
  'msg' => sprintf(
691
  __( '<p><strong>Core calendar files are not installed.</strong></p>' .
692
  '<p>Our automated install couldn\'t install certain core files automatically. ' .
@@ -708,7 +751,7 @@ class Ai1ec_App_Helper {
708
  // Outdated themes notice (on all pages except update themes page).
709
  if ( $plugin_page != AI1EC_PLUGIN_NAME . '-update-themes' && $ai1ec_themes_controller->are_themes_outdated() ) {
710
  $args = array(
711
- 'label' => 'All-in-One Calendar Notice',
712
  'msg' => sprintf(
713
  __( '<p><strong>Core calendar files are out of date.</strong> ' .
714
  'We have found updates for some of your core calendar files and you should update them now to ensure proper functioning of your calendar.</p>' .
@@ -723,24 +766,30 @@ class Ai1ec_App_Helper {
723
 
724
  if( $ai1ec_settings->show_data_notification ) {
725
  $args = array(
726
- 'label' => 'All-in-One Calendar Notice',
727
  'msg' =>
728
  sprintf(
729
  __( '<p>We would like to collect some basic information about how your calendar works in order to deliver a better ' .
730
  'and faster calendar system and one that will help you promote your events even more.</p>' .
731
- '<p>You can find more detailed information by <a href="%s" target="_blank">clicking here &raquo;</a></p>' .
732
- '<p>You may opt in of sending data to us by checking &quot;Allow Then.ly to collect statistics&quot; checkbox located on plugin\'s <a href="%s">Settings page</a>.</p>', AI1EC_PLUGIN_NAME ),
733
- 'http://then.ly/all-in-one-event-calendar-privacy-policy/',
734
  admin_url( AI1EC_SETTINGS_BASE_URL )
735
  ),
736
- 'button' => (object) array( 'class' => 'ai1ec-dismiss-notification', 'value' => 'Dismiss' ),
 
 
 
737
  );
738
  $ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
739
  }
740
 
741
- // If calendar page ID has not been set, and we're not updating the settings
742
- // page, the calendar is not properly set up yet.
743
- if( ! $ai1ec_settings->calendar_page_id || ! get_option( 'timezone_string' ) && ! isset( $_REQUEST['ai1ec_save_settings'] ) ) {
 
 
 
744
  $args = array();
745
  $messages = array();
746
 
@@ -758,10 +807,11 @@ class Ai1ec_App_Helper {
758
  }
759
  // Else, not on the settings page, so direct user there.
760
  else {
761
- $messages[] = sprintf(
762
  __( 'The plugin is installed, but has not been configured. <a href="%s">Click here to set it up now &raquo;</a>', AI1EC_PLUGIN_NAME ),
763
  admin_url( AI1EC_SETTINGS_BASE_URL )
764
  );
 
765
  }
766
  }
767
  // Else display messages for other blog users
@@ -779,7 +829,7 @@ class Ai1ec_App_Helper {
779
  else {
780
  $args['msg'] = "<p>$messages[0]</p>";
781
  }
782
- $args['label'] = __( 'All-in-One Calendar Notice', AI1EC_PLUGIN_NAME );
783
  $ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
784
  }
785
  }
@@ -866,7 +916,7 @@ class Ai1ec_App_Helper {
866
  ) );
867
  // Styles.
868
  $ai1ec_view_helper->admin_enqueue_style( 'ai1ec-settings', 'settings.css' );
869
- $ai1ec_view_helper->admin_enqueue_style( 'thenly-bootstrap', 'bootstrap.min.css' );
870
  break;
871
  }
872
  }
10
  * Ai1ec_App_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_App_Helper {
16
  /**
683
  $plugin_page,
684
  $ai1ec_themes_controller;
685
 
686
+ // Display introductory video notice if not disabled.
687
+ if( $ai1ec_settings->show_intro_video ) {
688
+ $args = array(
689
+ 'label' => __( 'Welcome to the All-in-One Event Calendar, by timely', AI1EC_PLUGIN_NAME ),
690
+ 'msg' => sprintf(
691
+ '<div class="timely"><a href="#ai1ec-video-modal" data-toggle="modal" ' .
692
+ 'class="button-primary pull-left">%s</a>' .
693
+ '<div class="pull-left">&nbsp;</div></div>',
694
+ __( 'Watch the introductory video »', AI1EC_PLUGIN_NAME )
695
+ ),
696
+ 'button' => (object) array(
697
+ 'class' => 'ai1ec-dismiss-intro-video',
698
+ 'value' => __( 'Dismiss', AI1EC_PLUGIN_NAME ),
699
+ ),
700
+ );
701
+ $ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
702
+ // Find out if CSS for Bootstrap modals has been attached. If not, embed
703
+ // it inline.
704
+ if ( ! wp_style_is( 'timely-bootstrap' ) ) {
705
+ $ai1ec_view_helper->display_admin_css( 'bootstrap.min.css' );
706
+ }
707
+ // Find out if JS for Bootstrap modals has been attached. If not, embed
708
+ // it inline.
709
+ if ( ! wp_script_is( 'timely-bootstrap-modal' ) ) {
710
+ $ai1ec_view_helper->display_admin_js( 'bootstrap-modal.js' );
711
+ }
712
+ $args = array(
713
+ 'modal_id' => 'ai1ec-video-modal',
714
+ 'video_container_id' => 'ai1ec-video',
715
+ 'title' => __( 'Introducing the All-in-One Event Calendar, by Timely',
716
+ AI1EC_PLUGIN_NAME ),
717
+ 'youtube_id' => 'XJ-KHOqBKuQ',
718
+ 'footer' => sprintf( '<div style="text-align: center;">' .
719
+ '<a class="btn btn-large btn-primary" href="%s">' .
720
+ '<i class="icon-download-alt"></i> %s</a></div>',
721
+ admin_url( 'edit.php?post_type=' . AI1EC_POST_TYPE . '&amp;page=' .
722
+ AI1EC_PLUGIN_NAME . '-upgrade' ),
723
+ __( 'Upgrade to Premium for Free', AI1EC_PLUGIN_NAME )
724
+ ),
725
+ );
726
+ $ai1ec_view_helper->display_admin( 'video_modal.php', $args );
727
+ }
728
+
729
  // No themes available notice.
730
  if( ! $ai1ec_themes_controller->are_themes_available() ) {
731
  $args = array(
732
+ 'label' => __( 'All-in-One Event Calendar Notice', AI1EC_PLUGIN_NAME ),
733
  'msg' => sprintf(
734
  __( '<p><strong>Core calendar files are not installed.</strong></p>' .
735
  '<p>Our automated install couldn\'t install certain core files automatically. ' .
751
  // Outdated themes notice (on all pages except update themes page).
752
  if ( $plugin_page != AI1EC_PLUGIN_NAME . '-update-themes' && $ai1ec_themes_controller->are_themes_outdated() ) {
753
  $args = array(
754
+ 'label' => __( 'All-in-One Event Calendar Notice', AI1EC_PLUGIN_NAME ),
755
  'msg' => sprintf(
756
  __( '<p><strong>Core calendar files are out of date.</strong> ' .
757
  'We have found updates for some of your core calendar files and you should update them now to ensure proper functioning of your calendar.</p>' .
766
 
767
  if( $ai1ec_settings->show_data_notification ) {
768
  $args = array(
769
+ 'label' => __( 'All-in-One Event Calendar Notice', AI1EC_PLUGIN_NAME ),
770
  'msg' =>
771
  sprintf(
772
  __( '<p>We would like to collect some basic information about how your calendar works in order to deliver a better ' .
773
  'and faster calendar system and one that will help you promote your events even more.</p>' .
774
+ '<p>You can find more detailed information by <a href="%s" target="_blank">clicking here</a>.</p>' .
775
+ '<p>You may opt in by checking the <strong>Publicize, promote, and share my events</strong> checkbox located on the <a href="%s">Settings page</a>.</p>', AI1EC_PLUGIN_NAME ),
776
+ 'http://time.ly/event-search-calendar',
777
  admin_url( AI1EC_SETTINGS_BASE_URL )
778
  ),
779
+ 'button' => (object) array(
780
+ 'class' => 'ai1ec-dismiss-notification',
781
+ 'value' => __( 'Dismiss', AI1EC_PLUGIN_NAME ),
782
+ ),
783
  );
784
  $ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
785
  }
786
 
787
+ // If calendar page or time zone has not been set, this is a fresh install.
788
+ // Additionally, if we're not already updating the settings, alert user
789
+ // appropriately that the calendar is not properly set up.
790
+ if( ! $ai1ec_settings->calendar_page_id ||
791
+ ! get_option( 'timezone_string' ) &&
792
+ ! isset( $_REQUEST['ai1ec_save_settings'] ) ) {
793
  $args = array();
794
  $messages = array();
795
 
807
  }
808
  // Else, not on the settings page, so direct user there.
809
  else {
810
+ $msg .= sprintf(
811
  __( 'The plugin is installed, but has not been configured. <a href="%s">Click here to set it up now &raquo;</a>', AI1EC_PLUGIN_NAME ),
812
  admin_url( AI1EC_SETTINGS_BASE_URL )
813
  );
814
+ $messages[] = $msg;
815
  }
816
  }
817
  // Else display messages for other blog users
829
  else {
830
  $args['msg'] = "<p>$messages[0]</p>";
831
  }
832
+ $args['label'] = __( 'All-in-One Event Calendar Notice', AI1EC_PLUGIN_NAME );
833
  $ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
834
  }
835
  }
916
  ) );
917
  // Styles.
918
  $ai1ec_view_helper->admin_enqueue_style( 'ai1ec-settings', 'settings.css' );
919
+ $ai1ec_view_helper->admin_enqueue_style( 'timely-bootstrap', 'bootstrap.min.css' );
920
  break;
921
  }
922
  }
app/helper/class-ai1ec-calendar-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Calendar_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Calendar_Helper {
16
  /**
10
  * Ai1ec_Calendar_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Calendar_Helper {
16
  /**
app/helper/class-ai1ec-events-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Events_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Events_Helper {
16
  /**
10
  * Ai1ec_Events_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Events_Helper {
16
  /**
app/helper/class-ai1ec-exporter-helper.php CHANGED
@@ -1,27 +1,27 @@
1
  <?php
2
- //
3
  // class-ai1ec-exporter-helper.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_Exporter_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Exporter_Helper {
16
  /**
17
  * _instance class variable
18
  *
19
  * Class instance
20
- *
21
  * @var null | object
22
  **/
23
  private static $_instance = NULL;
24
-
25
  /**
26
  * Constructor
27
  *
@@ -31,7 +31,7 @@ class Ai1ec_Exporter_Helper {
31
 
32
  /**
33
  * get_instance function
34
- *
35
  * Return singleton instance
36
  *
37
  * @return object
@@ -40,10 +40,10 @@ class Ai1ec_Exporter_Helper {
40
  if( self::$_instance === NULL ) {
41
  self::$_instance = new self();
42
  }
43
-
44
  return self::$_instance;
45
  }
46
-
47
  /**
48
  * insert_event_in_calendar function
49
  *
@@ -94,18 +94,18 @@ class Ai1ec_Exporter_Helper {
94
  $e->setProperty( 'dtend', gmdate( "Ymd\THis\Z", $ai1ec_events_helper->gmt_to_local( $event->end ) ), $dtend );
95
  }
96
  $e->setProperty( 'location', $event->address );
97
-
98
  $contact = ! empty( $event->contact_name ) ? $event->contact_name : '';
99
  $contact .= ! empty( $event->contact_phone ) ? " ($event->contact_phone)" : '';
100
  $contact .= ! empty( $event->contact_email ) ? " <$event->contact_email>" : '';
101
  $e->setProperty( 'contact', $contact );
102
-
103
  $rrule = array();
104
  if( ! empty( $event->recurrence_rules ) ) {
105
  $rules = array();
106
  foreach( explode( ';', $event->recurrence_rules ) AS $v) {
107
  if( strpos( $v, '=' ) === false ) continue;
108
-
109
  list($k, $v) = explode( '=', $v );
110
  // If $v is a comma-separated list, turn it into array for iCalcreator
111
  switch( $k ) {
@@ -136,13 +136,13 @@ class Ai1ec_Exporter_Helper {
136
  $rrule[ $k ] = $v;
137
  }
138
  }
139
-
140
  $exrule = array();
141
  if( ! empty( $event->exception_rules ) ) {
142
  $rules = array();
143
  foreach( explode( ';', $event->exception_rules ) AS $v) {
144
  if( strpos( $v, '=' ) === false ) continue;
145
-
146
  list($k, $v) = explode( '=', $v );
147
  // If $v is a comma-separated list, turn it into array for iCalcreator
148
  switch( $k ) {
1
  <?php
2
+ //
3
  // class-ai1ec-exporter-helper.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_Exporter_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Exporter_Helper {
16
  /**
17
  * _instance class variable
18
  *
19
  * Class instance
20
+ *
21
  * @var null | object
22
  **/
23
  private static $_instance = NULL;
24
+
25
  /**
26
  * Constructor
27
  *
31
 
32
  /**
33
  * get_instance function
34
+ *
35
  * Return singleton instance
36
  *
37
  * @return object
40
  if( self::$_instance === NULL ) {
41
  self::$_instance = new self();
42
  }
43
+
44
  return self::$_instance;
45
  }
46
+
47
  /**
48
  * insert_event_in_calendar function
49
  *
94
  $e->setProperty( 'dtend', gmdate( "Ymd\THis\Z", $ai1ec_events_helper->gmt_to_local( $event->end ) ), $dtend );
95
  }
96
  $e->setProperty( 'location', $event->address );
97
+
98
  $contact = ! empty( $event->contact_name ) ? $event->contact_name : '';
99
  $contact .= ! empty( $event->contact_phone ) ? " ($event->contact_phone)" : '';
100
  $contact .= ! empty( $event->contact_email ) ? " <$event->contact_email>" : '';
101
  $e->setProperty( 'contact', $contact );
102
+
103
  $rrule = array();
104
  if( ! empty( $event->recurrence_rules ) ) {
105
  $rules = array();
106
  foreach( explode( ';', $event->recurrence_rules ) AS $v) {
107
  if( strpos( $v, '=' ) === false ) continue;
108
+
109
  list($k, $v) = explode( '=', $v );
110
  // If $v is a comma-separated list, turn it into array for iCalcreator
111
  switch( $k ) {
136
  $rrule[ $k ] = $v;
137
  }
138
  }
139
+
140
  $exrule = array();
141
  if( ! empty( $event->exception_rules ) ) {
142
  $rules = array();
143
  foreach( explode( ';', $event->exception_rules ) AS $v) {
144
  if( strpos( $v, '=' ) === false ) continue;
145
+
146
  list($k, $v) = explode( '=', $v );
147
  // If $v is a comma-separated list, turn it into array for iCalcreator
148
  switch( $k ) {
app/helper/class-ai1ec-importer-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Importer_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Importer_Helper {
16
  /**
@@ -65,7 +65,7 @@ class Ai1ec_Importer_Helper {
65
  ':' . $t['value']['min'] .
66
  ':' . $t['value']['sec'];
67
  $timezone = '';
68
- if( isset( $t['value']['tz'] ) && $t['value']['tz'] == 'Z' )
69
  $timezone = 'Z';
70
  elseif( isset( $t['params']['TZID'] ) )
71
  $timezone = $t['params']['TZID'];
@@ -92,8 +92,7 @@ class Ai1ec_Importer_Helper {
92
  // include ical parser
93
  if( version_compare( PHP_VERSION, '5.3.0' ) >= 0 ) {
94
  // Parser that requires PHP v5.3.0 or up
95
- require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10.23/iCalcreator.class.php' );
96
- require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10.23//iCalUtilityFunctions.class.php' );
97
  } else {
98
  // Parser that works on PHP versions below 5.3.0
99
  require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10/iCalcreator.class.php' );
@@ -143,12 +142,12 @@ class Ai1ec_Importer_Helper {
143
  if( empty( $end ) ) {
144
  // #2 if only DATE value is set for start, set duration to 1 day
145
  if( ! isset( $start['value']['hour'] ) ) {
146
- $end = array(
147
- 'year' => $start['value']['year'],
148
- 'month' => $start['value']['month'],
149
- 'day' => $start['value']['day'],
150
- 'hour' => 23,
151
- 'min' => 59,
152
  'sec' => 59,
153
  'tz' => $start['value']['tz']
154
  );
10
  * Ai1ec_Importer_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Importer_Helper {
16
  /**
65
  ':' . $t['value']['min'] .
66
  ':' . $t['value']['sec'];
67
  $timezone = '';
68
+ if( isset( $t['value']['tz'] ) && $t['value']['tz'] == 'Z' )
69
  $timezone = 'Z';
70
  elseif( isset( $t['params']['TZID'] ) )
71
  $timezone = $t['params']['TZID'];
92
  // include ical parser
93
  if( version_compare( PHP_VERSION, '5.3.0' ) >= 0 ) {
94
  // Parser that requires PHP v5.3.0 or up
95
+ require_once( AI1EC_LIB_PATH . '/iCalcreator-2.12/iCalcreator.class.php' );
 
96
  } else {
97
  // Parser that works on PHP versions below 5.3.0
98
  require_once( AI1EC_LIB_PATH . '/iCalcreator-2.10/iCalcreator.class.php' );
142
  if( empty( $end ) ) {
143
  // #2 if only DATE value is set for start, set duration to 1 day
144
  if( ! isset( $start['value']['hour'] ) ) {
145
+ $end = array(
146
+ 'year' => $start['value']['year'],
147
+ 'month' => $start['value']['month'],
148
+ 'day' => $start['value']['day'],
149
+ 'hour' => 23,
150
+ 'min' => 59,
151
  'sec' => 59,
152
  'tz' => $start['value']['tz']
153
  );
app/helper/class-ai1ec-settings-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Settings_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Settings_Helper {
16
  /**
@@ -403,18 +403,18 @@ class Ai1ec_Settings_Helper {
403
  }
404
 
405
  /**
406
- * Renders the contents of the Seed Studio Support meta box.
407
  *
408
  * @return void
409
  */
410
- function the_seed_studio_meta_box( $object, $box ) {
411
  global $ai1ec_view_helper;
412
  include_once( ABSPATH . WPINC . '/feed.php' );
413
  // Initialize new feed
414
  $newsItems = array();
415
  $feed = fetch_feed( AI1EC_RSS_FEED );
416
  $newsItems = is_wp_error( $feed ) ? array() : $feed->get_items();
417
- $ai1ec_view_helper->display_admin( 'box_the_seed_studio.php', array( 'news' => $newsItems ) );
418
  }
419
 
420
  /**
10
  * Ai1ec_Settings_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Settings_Helper {
16
  /**
403
  }
404
 
405
  /**
406
+ * Renders the contents of the Support meta box.
407
  *
408
  * @return void
409
  */
410
+ function support_meta_box( $object, $box ) {
411
  global $ai1ec_view_helper;
412
  include_once( ABSPATH . WPINC . '/feed.php' );
413
  // Initialize new feed
414
  $newsItems = array();
415
  $feed = fetch_feed( AI1EC_RSS_FEED );
416
  $newsItems = is_wp_error( $feed ) ? array() : $feed->get_items();
417
+ $ai1ec_view_helper->display_admin( 'box_support.php', array( 'news' => $newsItems ) );
418
  }
419
 
420
  /**
app/helper/class-ai1ec-view-helper.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_View_Helper class
11
  *
12
  * @package Helpers
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_View_Helper {
16
  /**
@@ -179,10 +179,18 @@ class Ai1ec_View_Helper {
179
  'path' => $active_template_path . '/' . AI1EC_CSS_FOLDER,
180
  'url' => $active_template_url . '/' . AI1EC_CSS_FOLDER
181
  ),
 
 
 
 
182
  (object) array(
183
  'path' => AI1EC_DEFAULT_THEME_PATH . '/' . AI1EC_CSS_FOLDER,
184
  'url' => AI1EC_DEFAULT_THEME_URL . '/' . AI1EC_CSS_FOLDER
185
  ),
 
 
 
 
186
  );
187
 
188
  $file_found = false;
10
  * Ai1ec_View_Helper class
11
  *
12
  * @package Helpers
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_View_Helper {
16
  /**
179
  'path' => $active_template_path . '/' . AI1EC_CSS_FOLDER,
180
  'url' => $active_template_url . '/' . AI1EC_CSS_FOLDER
181
  ),
182
+ (object) array(
183
+ 'path' => $active_template_path,
184
+ 'url' => $active_template_url
185
+ ),
186
  (object) array(
187
  'path' => AI1EC_DEFAULT_THEME_PATH . '/' . AI1EC_CSS_FOLDER,
188
  'url' => AI1EC_DEFAULT_THEME_URL . '/' . AI1EC_CSS_FOLDER
189
  ),
190
+ (object) array(
191
+ 'path' => AI1EC_DEFAULT_THEME_PATH,
192
+ 'url' => AI1EC_DEFAULT_THEME_URL
193
+ ),
194
  );
195
 
196
  $file_found = false;
app/model/class-ai1ec-event.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Event class
11
  *
12
  * @package Models
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Event {
16
  /**
@@ -498,24 +498,32 @@ class Ai1ec_Event {
498
 
499
  case 'timespan_html':
500
  $timespan = '';
501
- $long_start_date = $this->long_start_date;
502
- $long_end_date = $this->long_end_date;
503
 
504
  if( $this->allday ) {
505
  $timespan .= $long_start_date;
506
- if( $long_end_date != $long_start_date )
507
  $timespan .= " – $long_end_date";
508
- $timespan = esc_html( $timespan );
509
  $timespan .= '<span class="ai1ec-allday-label">';
510
  $timespan .= __( ' (all-day)', AI1EC_PLUGIN_NAME );
511
  $timespan .= '</span>';
512
- } else {
513
- if( $long_end_date != $long_start_date )
514
- $timespan .= esc_html( $this->long_start_time . ' ' . $this->long_end_time );
515
- elseif( $this->start != $this->end )
516
- $timespan .= esc_html( $this->long_start_time . ' - ' . $this->end_time );
517
- else
518
- $timespan .= esc_html( $this->long_start_time );
 
 
 
 
 
 
 
 
519
  }
520
  return $timespan;
521
 
10
  * Ai1ec_Event class
11
  *
12
  * @package Models
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Event {
16
  /**
498
 
499
  case 'timespan_html':
500
  $timespan = '';
501
+ $long_start_date = str_replace( ' ', '&nbsp;', esc_html( $this->long_start_date ) );
502
+ $long_end_date = str_replace( ' ', '&nbsp;', esc_html( $this->long_end_date ) );
503
 
504
  if( $this->allday ) {
505
  $timespan .= $long_start_date;
506
+ if( $long_end_date != $long_start_date ) {
507
  $timespan .= " – $long_end_date";
508
+ }
509
  $timespan .= '<span class="ai1ec-allday-label">';
510
  $timespan .= __( ' (all-day)', AI1EC_PLUGIN_NAME );
511
  $timespan .= '</span>';
512
+ }
513
+ else {
514
+ $long_start_time = str_replace( ' ', '&nbsp;', esc_html( $this->long_start_time ) );
515
+ $long_end_time = str_replace( ' ', '&nbsp;', esc_html( $this->long_end_time ) );
516
+ $end_time = str_replace( ' ', '&nbsp;', esc_html( $this->end_time ) );
517
+
518
+ if( $long_end_date != $long_start_date ) {
519
+ $timespan .= $long_start_time . ' – ' . $long_end_time;
520
+ }
521
+ elseif( $this->start != $this->end ) {
522
+ $timespan .= $long_start_time . ' - ' . $end_time;
523
+ }
524
+ else {
525
+ $timespan .= $long_start_time;
526
+ }
527
  }
528
  return $timespan;
529
 
app/model/class-ai1ec-exporter.php CHANGED
@@ -1,29 +1,29 @@
1
  <?php
2
- //
3
  // class-ai1ec-exporter.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_Event class
11
  *
12
  * @package Models
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Exporter {
16
-
17
  function __construct() {
18
-
19
  }
20
-
21
  function export( $events, $format = "ics" ) {
22
-
23
  }
24
-
25
  function export_to_ics() {
26
-
27
  }
28
  }
29
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-exporter.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_Event class
11
  *
12
  * @package Models
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Exporter {
16
+
17
  function __construct() {
18
+
19
  }
20
+
21
  function export( $events, $format = "ics" ) {
22
+
23
  }
24
+
25
  function export_to_ics() {
26
+
27
  }
28
  }
29
+ // END class
app/model/class-ai1ec-importer.php CHANGED
@@ -1,30 +1,30 @@
1
  <?php
2
- //
3
  // class-ai1ec-importer.php
4
  // all-in-one-event-calendar
5
- //
6
  // Created by The Seed Studio on 2011-07-13.
7
- //
8
 
9
  /**
10
  * Ai1ec_Importer class
11
  *
12
  * @package Models
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Importer {
16
  var $events;
17
-
18
  function __construct() {
19
-
20
  }
21
-
22
  function parse_rss( $rss_feed ) {
23
-
24
  }
25
 
26
  function parse_file( $file ) {
27
-
28
  }
29
  }
30
- // END class
1
  <?php
2
+ //
3
  // class-ai1ec-importer.php
4
  // all-in-one-event-calendar
5
+ //
6
  // Created by The Seed Studio on 2011-07-13.
7
+ //
8
 
9
  /**
10
  * Ai1ec_Importer class
11
  *
12
  * @package Models
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Importer {
16
  var $events;
17
+
18
  function __construct() {
19
+
20
  }
21
+
22
  function parse_rss( $rss_feed ) {
23
+
24
  }
25
 
26
  function parse_file( $file ) {
27
+
28
  }
29
  }
30
+ // END class
app/model/class-ai1ec-settings.php CHANGED
@@ -10,7 +10,7 @@
10
  * Ai1ec_Settings class
11
  *
12
  * @package Models
13
- * @author The Seed Studio
14
  **/
15
  class Ai1ec_Settings {
16
  /**
@@ -228,6 +228,13 @@ class Ai1ec_Settings {
228
  var $show_data_notification;
229
 
230
  /**
 
 
 
 
 
 
 
231
  * allow_statistics class variable
232
  *
233
  * @var bool
@@ -341,6 +348,7 @@ class Ai1ec_Settings {
341
  'timezone' => get_option( 'timezone_string' ),
342
  'geo_region_biasing' => FALSE,
343
  'show_data_notification' => TRUE,
 
344
  'allow_statistics' => FALSE, // stats are opt-in
345
  'disable_autocompletion' => FALSE,
346
  'show_location_in_title' => TRUE,
@@ -440,6 +448,18 @@ class Ai1ec_Settings {
440
  update_option( 'ai1ec_settings', $this );
441
  }
442
 
 
 
 
 
 
 
 
 
 
 
 
 
443
  /**
444
  * update_page function
445
  *
10
  * Ai1ec_Settings class
11
  *
12
  * @package Models
13
+ * @author time.ly
14
  **/
15
  class Ai1ec_Settings {
16
  /**
228
  var $show_data_notification;
229
 
230
  /**
231
+ * Whether to display the introductory video notice.
232
+ *
233
+ * @var bool
234
+ */
235
+ var $show_intro_video;
236
+
237
+ /**
238
  * allow_statistics class variable
239
  *
240
  * @var bool
348
  'timezone' => get_option( 'timezone_string' ),
349
  'geo_region_biasing' => FALSE,
350
  'show_data_notification' => TRUE,
351
+ 'show_intro_video' => TRUE,
352
  'allow_statistics' => FALSE, // stats are opt-in
353
  'disable_autocompletion' => FALSE,
354
  'show_location_in_title' => TRUE,
448
  update_option( 'ai1ec_settings', $this );
449
  }
450
 
451
+ /**
452
+ * Update setting of show_intro_video - whether to display the
453
+ * intro video notice on the admin side.
454
+ *
455
+ * @param boolean $value The new setting for show_intro_video.
456
+ * @return void
457
+ */
458
+ function update_intro_video( $value = FALSE ) {
459
+ $this->show_intro_video = $value;
460
+ update_option( 'ai1ec_settings', $this );
461
+ }
462
+
463
  /**
464
  * update_page function
465
  *
app/view/admin/admin_notices.php CHANGED
@@ -3,5 +3,6 @@
3
  <?php echo $msg ?>
4
  <?php if( isset( $button ) ) : ?>
5
  <div><input type="button" class="button <?php echo $button->class ?>" value="<?php echo $button->value ?>" /></div>
 
6
  <?php endif ?>
7
  </div>
3
  <?php echo $msg ?>
4
  <?php if( isset( $button ) ) : ?>
5
  <div><input type="button" class="button <?php echo $button->class ?>" value="<?php echo $button->value ?>" /></div>
6
+ <p></p>
7
  <?php endif ?>
8
  </div>
app/view/admin/box_advanced_settings.php CHANGED
@@ -4,4 +4,6 @@
4
  <input name="calendar_css_selector" id="calendar_css_selector" type="text" size="20" value="<?php echo esc_attr( $calendar_css_selector ) ?>" />
5
  <div class="description"><?php _e( 'Optional. Provide a <a href="http://api.jquery.com/category/selectors/" target="_blank">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container.', AI1EC_PLUGIN_NAME ) ?></div>
6
 
7
- <?php do_action( 'ai1ec_advanced_settings_after' ); ?>
 
 
4
  <input name="calendar_css_selector" id="calendar_css_selector" type="text" size="20" value="<?php echo esc_attr( $calendar_css_selector ) ?>" />
5
  <div class="description"><?php _e( 'Optional. Provide a <a href="http://api.jquery.com/category/selectors/" target="_blank">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container.', AI1EC_PLUGIN_NAME ) ?></div>
6
 
7
+ <div class="clear"></div>
8
+
9
+ <?php do_action( 'ai1ec_advanced_settings_after' ); ?>
app/view/admin/box_general_settings.php CHANGED
@@ -102,11 +102,11 @@
102
  </label>
103
  <br class="clear" />
104
 
105
- <h2><?php _e( 'Sharing Data', AI1EC_PLUGIN_NAME ) ?></h2>
106
 
107
  <label for="allow_statistics">
108
  <input class="checkbox" name="allow_statistics" id="allow_statistics" type="checkbox" value="1" <?php echo $allow_statistics ?> />
109
- <?php _e( 'Allow Then.ly to collect calendar statistics', AI1EC_PLUGIN_NAME ) ?>
110
  </label>
111
  <br class="clear" />
112
 
102
  </label>
103
  <br class="clear" />
104
 
105
+ <h2><?php _e( 'Promoting Events', AI1EC_PLUGIN_NAME ) ?></h2>
106
 
107
  <label for="allow_statistics">
108
  <input class="checkbox" name="allow_statistics" id="allow_statistics" type="checkbox" value="1" <?php echo $allow_statistics ?> />
109
+ <?php printf( __( '<strong>Publicize, promote, and share my events</strong> marked as public on the Timely network. (<a href="%s" target="_blank">Learn more »</a>)', AI1EC_PLUGIN_NAME ), 'http://time.ly/event-search-calendar' ); ?>
110
  </label>
111
  <br class="clear" />
112
 
app/view/admin/box_support.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="ai1ec-plugin-branding timely">
2
+
3
+ <h2 class="timely-logo"><a href="http://time.ly/" title="<?php esc_attr_e( 'Timely', AI1EC_PLUGIN_NAME ); ?>" target="_blank"></a></h2>
4
+
5
+ <div class="timely-intro">
6
+ <h2>
7
+ <?php _e( 'Timely’s All-in-One Event Calendar is a revolutionary new way to find and share events.', AI1EC_PLUGIN_NAME ); ?>
8
+ </h2>
9
+ </div>
10
+
11
+ <div class="ai1ec-follow-fan">
12
+ <div class="ai1ec-facebook-like-top">
13
+ <script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
14
+ <fb:like href="http://www.facebook.com/timelycal" layout="button_count" show_faces="true" width="110" font="lucida grande"></fb:like>
15
+ </div>
16
+ <a href="http://twitter.com/_Timely" class="twitter-follow-button"><?php _e( 'Follow @_Timely', AI1EC_PLUGIN_NAME ) ?></a>
17
+ <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
18
+ </div>
19
+
20
+ <p></p>
21
+ <h2 class="ai1ec-premium-features">
22
+ <?php _e( 'Upgrade to Premium for free and get exclusive features:', AI1EC_PLUGIN_NAME ) ?>
23
+ </h2>
24
+ <p></p>
25
+ <h4 class="row-fluid ai1ec-premium-features">
26
+ <div class="span1">&nbsp;</div>
27
+ <ul class="span4">
28
+ <li class="icon-leaf span6"><strong><?php _e( 'Calendar Themes', AI1EC_PLUGIN_NAME ) ?></strong></li>
29
+ <li class="icon-th span6"><strong><?php _e( 'Posterboard View', AI1EC_PLUGIN_NAME ) ?></strong></li>
30
+ <li class="icon-calendar span6"><strong><?php _e( 'Duplicate Events', AI1EC_PLUGIN_NAME ) ?></strong></li>
31
+ </ul>
32
+ <ul class="span5">
33
+ <li class="icon-facebook-sign span6"><strong><?php _e( 'Facebook Event Import/Export', AI1EC_PLUGIN_NAME ) ?></strong></li>
34
+ <li class="icon-map-marker span6"><strong><?php _e( 'Location by Latitude/Longitude', AI1EC_PLUGIN_NAME ) ?></strong></li>
35
+ <li class="icon-star span6"><strong><?php _e( '... and much more!', AI1EC_PLUGIN_NAME ) ?></strong></li>
36
+ </ul>
37
+ </h4>
38
+ <p></p>
39
+ <p class="ai1ec-get-support">
40
+ <a class="btn btn-large btn-primary" href="<?php echo admin_url( 'edit.php?post_type=' . AI1EC_POST_TYPE . '&amp;page=' . AI1EC_PLUGIN_NAME . '-upgrade' ) ?>">
41
+ <i class="icon-download-alt"></i> <?php _e( 'Upgrade to Premium for Free', AI1EC_PLUGIN_NAME ) ?>
42
+ </a>
43
+ </p>
44
+ <hr />
45
+ <h4>
46
+ <?php _e( 'Timely is dedicated to creating the best calendar software in the world.', AI1EC_PLUGIN_NAME ) ?>
47
+ </h4>
48
+ <p></p>
49
+ <p>
50
+ <?php _e( 'Please let us know if anything is not working the way you expect. While many problems are caused by conflicts with other plugins, most problems can be solved quickly. Visit our <a href="http://help.time.ly/" target="_blank">Help Desk</a> to report bugs, request features, or learn how to get the most out of this plugin.', AI1EC_PLUGIN_NAME ) ?>
51
+ </p>
52
+ <div class="ai1ec-get-support">
53
+ <a class="btn btn-large btn-primary" href="http://help.time.ly/" target="_blank">
54
+ <i class="icon-info-sign"></i> <?php _e( 'Get Support', AI1EC_PLUGIN_NAME ) ?>
55
+ </a>
56
+ </div>
57
+ <div id="ai1ec-blog-feed-container">
58
+ <hr />
59
+ <h4><?php _e( 'Timely News', AI1EC_PLUGIN_NAME ); ?> <small><a href="http://time.ly/blog" target="_blank"><?php _e( 'view all news »', AI1EC_PLUGIN_NAME ); ?></a></small></h4>
60
+ <?php if( count( $news ) > 0 ) : ?>
61
+ <?php foreach( $news as $n ) : ?>
62
+ <article>
63
+ <header>
64
+ <strong><a href="<?php echo $n->get_permalink() ?>" target="_blank"><?php echo $n->get_title() ?></a></strong>
65
+ </header>
66
+ <?php echo preg_replace( '/\s+?(\S+)?$/', '', substr( $n->get_description(), 0, 100 ) ); ?> …
67
+ </article>
68
+ <?php endforeach ?>
69
+ <?php else : ?>
70
+ <p><em>No news available.</em></p>
71
+ <?php endif ?>
72
+ </div>
73
+ </div>
74
+ <br class="clear" />
app/view/admin/box_the_seed_studio.php DELETED
@@ -1,60 +0,0 @@
1
- <div class="ai1ec-plugin-branding thenly">
2
-
3
- <h2 class="thenly-logo"><a href="http://then.ly/" target="_blank"><img src="http://then.ly/img/logo.png" alt="<?php esc_attr_e( 'then.ly', AI1EC_PLUGIN_NAME ) ?>" /></a></h2>
4
-
5
- <div class="thenly-intro">
6
- <h2>
7
- <?php _e( 'Then.ly’s All-in-One Calendar is a revolutionary new way to find and share events.', AI1EC_PLUGIN_NAME ); ?>
8
- </h2>
9
- </div>
10
-
11
- <div class="ai1ec-follow-fan">
12
- <div class="ai1ec-facebook-like-top">
13
- <script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
14
- <fb:like href="http://www.facebook.com/thenly.events" layout="button_count" show_faces="true" width="110" font="lucida grande"></fb:like>
15
- </div>
16
- <a href="http://twitter.com/then_ly" class="twitter-follow-button"><?php _e( 'Follow @then_ly', AI1EC_PLUGIN_NAME ) ?></a>
17
- <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
18
- </div>
19
-
20
- <p></p>
21
- <h2>
22
- <?php _e( 'Upgrade to the free Premium version and get access to exclusive features such as:', AI1EC_PLUGIN_NAME ) ?>
23
- </h2>
24
- <p></p>
25
- <h4 class="row-fluid">
26
- <div class="span1">&nbsp;</div>
27
- <div class="span4">
28
- <ul>
29
- <li class="icon-leaf span6"><strong><?php _e( 'Calendar Themes', AI1EC_PLUGIN_NAME ) ?></strong></li>
30
- <li class="icon-calendar span6"><strong><?php _e( 'Duplicate Events', AI1EC_PLUGIN_NAME ) ?></strong></li>
31
- </ul>
32
- </div>
33
- <div class="span4">
34
- <ul>
35
- <li class="icon-map-marker span6"><strong><?php _e( 'Location by Latitude/Longitude', AI1EC_PLUGIN_NAME ) ?></strong></li>
36
- <li class="icon-star span6"><strong><?php _e( '... and more!', AI1EC_PLUGIN_NAME ) ?></strong></li>
37
- </ul>
38
- </div>
39
- </h4>
40
- <p></p>
41
- <p class="ai1ec-get-support">
42
- <a class="btn btn-large btn-primary" href="<?php echo admin_url( 'edit.php?post_type=' . AI1EC_POST_TYPE . '&amp;page=' . AI1EC_PLUGIN_NAME . '-upgrade' ) ?>">
43
- <i class="icon-download-alt"></i> <?php _e( 'Upgrade to Premium for Free', AI1EC_PLUGIN_NAME ) ?>
44
- </a>
45
- </p>
46
- <hr />
47
- <h4>
48
- <?php _e( 'Then.ly is dedicated to creating the best calendar software in the world.', AI1EC_PLUGIN_NAME ) ?>
49
- </h4>
50
- <p></p>
51
- <p>
52
- <?php _e( 'Please let us know if anything is not working the way you expect. While many problems are caused by conflicts with other plugins, most problems can be solved quickly. Visit our <a href="http://help.then.ly/" target="_blank">Help Desk</a> to report bugs, request features, or learn how to get the most out of this plugin.', AI1EC_PLUGIN_NAME ) ?>
53
- </p>
54
- <div class="ai1ec-get-support">
55
- <a class="btn btn-large btn-primary" href="http://help.then.ly/" target="_blank">
56
- <i class="icon-info-sign"></i> <?php _e( 'Get Support', AI1EC_PLUGIN_NAME ) ?>
57
- </a>
58
- </div>
59
- </div>
60
- <br class="clear" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/calendar_tasks.php CHANGED
@@ -1,7 +1,7 @@
1
- <div class="thenly">
2
  <div class="hero-unit">
3
  <h1><?php _e( 'Welcome', AI1EC_PLUGIN_NAME ); ?></h1>
4
- <p><?php _e( 'to the All-in-One Calendar by <a href="http://then.ly/" target="_blank">Then.ly</a>', AI1EC_PLUGIN_NAME ); ?></p>
5
  </div>
6
 
7
  <div class="clearfix">
1
+ <div class="timely">
2
  <div class="hero-unit">
3
  <h1><?php _e( 'Welcome', AI1EC_PLUGIN_NAME ); ?></h1>
4
+ <p><?php _e( 'to the All-in-One Event Calendar by <a href="http://time.ly/" target="_blank">Timely</a>', AI1EC_PLUGIN_NAME ); ?></p>
5
  </div>
6
 
7
  <div class="clearfix">
app/view/admin/class-ai1ec-agenda-widget.php CHANGED
@@ -14,7 +14,7 @@ class Ai1ec_Agenda_Widget extends WP_Widget {
14
  'ai1ec_agenda_widget',
15
  __( 'Upcoming Events', AI1EC_PLUGIN_NAME ),
16
  array(
17
- 'description' => __( 'All-in-One Calendar: Lists upcoming events in Agenda view', AI1EC_PLUGIN_NAME ),
18
  'class' => 'ai1ec-agenda-widget',
19
  )
20
  );
14
  'ai1ec_agenda_widget',
15
  __( 'Upcoming Events', AI1EC_PLUGIN_NAME ),
16
  array(
17
+ 'description' => __( 'All-in-One Event Calendar: Lists upcoming events in Agenda view', AI1EC_PLUGIN_NAME ),
18
  'class' => 'ai1ec-agenda-widget',
19
  )
20
  );
app/view/admin/css/bootstrap.min.css CHANGED
@@ -1,4 +1,4 @@
1
- @import url("http://fonts.googleapis.com/css?family=Droid+Sans:400,700");/*!
2
  * Bootstrap v2.0.2
3
  *
4
  * Copyright 2012 Twitter, Inc
@@ -6,4 +6,4 @@
6
  * http://www.apache.org/licenses/LICENSE-2.0
7
  *
8
  * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
- */@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot');src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../font/fontawesome-webfont.woff') format('woff'),url('../font/fontawesome-webfont.ttf') format('truetype'),url('../font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),url('../font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:inherit;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat}li[class^="icon-"],li[class*=" icon-"]{display:block}[class^="icon-"]:before,[class*=" icon-"]:before{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a [class^="icon-"],a [class*=" icon-"]{display:inline-block;text-decoration:inherit}.icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn [class^="icon-"],.btn [class*=" icon-"]{line-height:.9em}li [class^="icon-"],li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li .icon-large[class^="icon-"],li .icon-large[class*=" icon-"]{width:1.875em}li[class^="icon-"],li[class*=" icon-"]{margin-left:0;list-style-type:none}li[class^="icon-"]:before,li[class*=" icon-"]:before{text-indent:-2em;text-align:center}li[class^="icon-"].icon-large:before,li[class*=" icon-"].icon-large:before{text-indent:-1.3333333333333333em}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.thenly article,.thenly aside,.thenly details,.thenly figcaption,.thenly figure,.thenly footer,.thenly header,.thenly hgroup,.thenly nav,.thenly section{display:block}.thenly audio,.thenly canvas,.thenly video{display:inline-block;*display:inline;*zoom:1}.thenly audio:not([controls]){display:none}.thenly html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}.thenly a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.thenly a:hover,.thenly a:active{outline:0}.thenly sub,.thenly sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.thenly sup{top:-0.5em}.thenly sub{bottom:-0.25em}.thenly img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle}.thenly button,.thenly input,.thenly select,.thenly textarea{margin:0;font-size:100%;vertical-align:middle}.thenly button,.thenly input{*overflow:visible;line-height:normal}.thenly button::-moz-focus-inner,.thenly input::-moz-focus-inner{padding:0;border:0}.thenly button,.thenly input[type="button"],.thenly input[type="reset"],.thenly input[type="submit"]{cursor:pointer;-webkit-appearance:button}.thenly input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.thenly input[type="search"]::-webkit-search-decoration,.thenly input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}.thenly textarea{overflow:auto;vertical-align:top}.thenly .clearfix{*zoom:1}.thenly .clearfix:before,.thenly .clearfix:after{display:table;content:""}.thenly .clearfix:after{clear:both}.thenly .hide-text{overflow:hidden;text-indent:100%;white-space:nowrap}.thenly .input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.thenly .row{margin-left:-20px;*zoom:1}.thenly .row:before,.thenly .row:after{display:table;content:""}.thenly .row:after{clear:both}.thenly [class*="span"]{float:left;margin-left:20px}.thenly .container,.thenly .navbar-fixed-top .container,.thenly .navbar-fixed-bottom .container{width:940px}.thenly .span12{width:940px}.thenly .span11{width:860px}.thenly .span10{width:780px}.thenly .span9{width:700px}.thenly .span8{width:620px}.thenly .span7{width:540px}.thenly .span6{width:460px}.thenly .span5{width:380px}.thenly .span4{width:300px}.thenly .span3{width:220px}.thenly .span2{width:140px}.thenly .span1{width:60px}.thenly .offset12{margin-left:980px}.thenly .offset11{margin-left:900px}.thenly .offset10{margin-left:820px}.thenly .offset9{margin-left:740px}.thenly .offset8{margin-left:660px}.thenly .offset7{margin-left:580px}.thenly .offset6{margin-left:500px}.thenly .offset5{margin-left:420px}.thenly .offset4{margin-left:340px}.thenly .offset3{margin-left:260px}.thenly .offset2{margin-left:180px}.thenly .offset1{margin-left:100px}.thenly .row-fluid{width:100%;*zoom:1}.thenly .row-fluid:before,.thenly .row-fluid:after{display:table;content:""}.thenly .row-fluid:after{clear:both}.thenly .row-fluid>[class*="span"]{float:left;margin-left:2.127659574%}.thenly .row-fluid>[class*="span"]:first-child{margin-left:0}.thenly .row-fluid>.span12{width:99.99999998999999%}.thenly .row-fluid>.span11{width:91.489361693%}.thenly .row-fluid>.span10{width:82.97872339599999%}.thenly .row-fluid>.span9{width:74.468085099%}.thenly .row-fluid>.span8{width:65.95744680199999%}.thenly .row-fluid>.span7{width:57.446808505%}.thenly .row-fluid>.span6{width:48.93617020799999%}.thenly .row-fluid>.span5{width:40.425531911%}.thenly .row-fluid>.span4{width:31.914893614%}.thenly .row-fluid>.span3{width:23.404255317%}.thenly .row-fluid>.span2{width:14.89361702%}.thenly .row-fluid>.span1{width:6.382978723%}.thenly p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px}.thenly p small{font-size:11px;color:#999}.thenly .lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}.thenly h1,.thenly h2,.thenly h3,.thenly h4,.thenly h5,.thenly h6{margin:0;font-family:'Droid Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:bold;color:#135486;text-rendering:optimizelegibility}.thenly h1 small,.thenly h2 small,.thenly h3 small,.thenly h4 small,.thenly h5 small,.thenly h6 small{font-weight:normal;color:#999}.thenly h1{font-size:30px;line-height:36px}.thenly h1 small{font-size:18px}.thenly h2{font-size:24px;line-height:36px}.thenly h2 small{font-size:18px}.thenly h3{line-height:27px;font-size:18px}.thenly h3 small{font-size:14px}.thenly h4,.thenly h5,.thenly h6{line-height:18px}.thenly h4{font-size:14px}.thenly h4 small{font-size:12px}.thenly h5{font-size:12px}.thenly h6{font-size:11px;color:#999;text-transform:uppercase}.thenly .page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.thenly .page-header h1{line-height:1}.thenly ul,.thenly ol{padding:0;margin:0 0 9px 25px}.thenly ul ul,.thenly ul ol,.thenly ol ol,.thenly ol ul{margin-bottom:0}.thenly ul{list-style:disc}.thenly ol{list-style:decimal}.thenly li{line-height:18px}.thenly ul.unstyled,.thenly ol.unstyled{margin-left:0;list-style:none}.thenly dl{margin-bottom:18px}.thenly dt,.thenly dd{line-height:18px}.thenly dt{font-weight:bold;line-height:17px}.thenly dd{margin-left:9px}.thenly .dl-horizontal dt{float:left;clear:left;width:120px;text-align:right}.thenly .dl-horizontal dd{margin-left:130px}.thenly hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}.thenly strong{font-weight:bold}.thenly em{font-style:italic}.thenly .muted{color:#999}.thenly abbr[title]{border-bottom:1px dotted #ddd;cursor:help}.thenly abbr.initialism{font-size:90%;text-transform:uppercase}.thenly blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}.thenly blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}.thenly blockquote small{display:block;line-height:18px;color:#999}.thenly blockquote small:before{content:'\2014 \00A0'}.thenly blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eee}.thenly blockquote.pull-right p,.thenly blockquote.pull-right small{text-align:right}.thenly q:before,.thenly q:after,.thenly blockquote:before,.thenly blockquote:after{content:""}.thenly address{display:block;margin-bottom:18px;line-height:18px;font-style:normal}.thenly small{font-size:100%}.thenly cite{font-style:normal}.thenly .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #ccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);cursor:pointer;*margin-left:.3em}.thenly .btn:hover,.thenly .btn:active,.thenly .btn.active,.thenly .btn.disabled,.thenly .btn[disabled]{background-color:#e6e6e6}.thenly .btn:active,.thenly .btn.active{background-color:#ccc \9}.thenly .btn:first-child{*margin-left:0}.thenly .btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.thenly .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.thenly .btn.active,.thenly .btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0}.thenly .btn.disabled,.thenly .btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.thenly .btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.thenly .btn-large [class^="icon-"]{margin-top:1px}.thenly .btn-small{padding:5px 9px;font-size:11px;line-height:16px}.thenly .btn-small [class^="icon-"]{margin-top:-1px}.thenly .btn-mini{padding:2px 6px;font-size:11px;line-height:14px}.thenly .btn-primary,.thenly .btn-primary:hover,.thenly .btn-warning,.thenly .btn-warning:hover,.thenly .btn-danger,.thenly .btn-danger:hover,.thenly .btn-success,.thenly .btn-success:hover,.thenly .btn-info,.thenly .btn-info:hover,.thenly .btn-inverse,.thenly .btn-inverse:hover{text-shadow:0 -1px 0 rgba(0,0,0,0.25);color:#fff}.thenly .btn-primary.active,.thenly .btn-warning.active,.thenly .btn-danger.active,.thenly .btn-success.active,.thenly .btn-info.active,.thenly .btn-inverse.active{color:rgba(255,255,255,0.75)}.thenly .btn-primary{background-color:#58b03a;background-image:-moz-linear-gradient(top,#6bbf3f,#3c9933);background-image:-ms-linear-gradient(top,#6bbf3f,#3c9933);background-image:-webkit-gradient(linear,0 0,0 100%,from(#6bbf3f),to(#3c9933));background-image:-webkit-linear-gradient(top,#6bbf3f,#3c9933);background-image:-o-linear-gradient(top,#6bbf3f,#3c9933);background-image:linear-gradient(top,#6bbf3f,#3c9933);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#6bbf3f',endColorstr='#3c9933',GradientType=0);border-color:#3c9933 #3c9933 #255f20;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-primary:hover,.thenly .btn-primary:active,.thenly .btn-primary.active,.thenly .btn-primary.disabled,.thenly .btn-primary[disabled]{background-color:#3c9933}.thenly .btn-primary:active,.thenly .btn-primary.active{background-color:#2d7326 \9}.thenly .btn-warning{background-color:#e7a179;background-image:-moz-linear-gradient(top,#ecb393,#e08652);background-image:-ms-linear-gradient(top,#ecb393,#e08652);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ecb393),to(#e08652));background-image:-webkit-linear-gradient(top,#ecb393,#e08652);background-image:-o-linear-gradient(top,#ecb393,#e08652);background-image:linear-gradient(top,#ecb393,#e08652);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ecb393',endColorstr='#e08652',GradientType=0);border-color:#e08652 #e08652 #c35d23;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-warning:hover,.thenly .btn-warning:active,.thenly .btn-warning.active,.thenly .btn-warning.disabled,.thenly .btn-warning[disabled]{background-color:#e08652}.thenly .btn-warning:active,.thenly .btn-warning.active{background-color:#d86827 \9}.thenly .btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-ms-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#bd362f',GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-danger:hover,.thenly .btn-danger:active,.thenly .btn-danger.active,.thenly .btn-danger.disabled,.thenly .btn-danger[disabled]{background-color:#bd362f}.thenly .btn-danger:active,.thenly .btn-danger.active{background-color:#942a25 \9}.thenly .btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-ms-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',endColorstr='#51a351',GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-success:hover,.thenly .btn-success:active,.thenly .btn-success.active,.thenly .btn-success.disabled,.thenly .btn-success[disabled]{background-color:#51a351}.thenly .btn-success:active,.thenly .btn-success.active{background-color:#408140 \9}.thenly .btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-ms-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',endColorstr='#2f96b4',GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-info:hover,.thenly .btn-info:active,.thenly .btn-info.active,.thenly .btn-info.disabled,.thenly .btn-info[disabled]{background-color:#2f96b4}.thenly .btn-info:active,.thenly .btn-info.active{background-color:#24748c \9}.thenly .btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top,#555,#222);background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555',endColorstr='#222222',GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.thenly .btn-inverse:hover,.thenly .btn-inverse:active,.thenly .btn-inverse.active,.thenly .btn-inverse.disabled,.thenly .btn-inverse[disabled]{background-color:#222}.thenly .btn-inverse:active,.thenly .btn-inverse.active{background-color:#080808 \9}.thenly button.btn,.thenly input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}.thenly button.btn::-moz-focus-inner,.thenly input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}.thenly button.btn.btn-large,.thenly input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}.thenly button.btn.btn-small,.thenly input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}.thenly button.btn.btn-mini,.thenly input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.thenly .hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.thenly .hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.thenly .hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit}.thenly .pull-right{float:right}.thenly .pull-left{float:left}.thenly .hide{display:none}.thenly .show{display:block}.thenly .invisible{visibility:hidden}.thenly .hero-unit{padding:30px;margin-bottom:15px}.thenly .hero-unit h1{color:#135486}.thenly hr{margin:14px 0}
1
+ @import url("http://fonts.googleapis.com/css?family=Signika:300");@import url("http://fonts.googleapis.com/css?family=Signika:600");/*!
2
  * Bootstrap v2.0.2
3
  *
4
  * Copyright 2012 Twitter, Inc
6
  * http://www.apache.org/licenses/LICENSE-2.0
7
  *
8
  * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
+ */@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot');src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),url('../font/fontawesome-webfont.woff') format('woff'),url('../font/fontawesome-webfont.ttf') format('truetype'),url('../font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),url('../font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:inherit;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat}li[class^="icon-"],li[class*=" icon-"]{display:block}[class^="icon-"]:before,[class*=" icon-"]:before{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit}a [class^="icon-"],a [class*=" icon-"]{display:inline-block;text-decoration:inherit}.icon-large:before{vertical-align:top;font-size:1.3333333333333333em}.btn [class^="icon-"],.btn [class*=" icon-"]{line-height:.9em}li [class^="icon-"],li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li .icon-large[class^="icon-"],li .icon-large[class*=" icon-"]{width:1.875em}li[class^="icon-"],li[class*=" icon-"]{margin-left:0;list-style-type:none}li[class^="icon-"]:before,li[class*=" icon-"]:before{text-indent:-2em;text-align:center}li[class^="icon-"].icon-large:before,li[class*=" icon-"].icon-large:before{text-indent:-1.3333333333333333em}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap}.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2070}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-ms-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-body{overflow-y:auto;max-height:400px;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.timely{font-family:Arial,sans-serif;font-size:13px;font-weight:300;line-height:18px;color:#333}.timely article,.timely aside,.timely details,.timely figcaption,.timely figure,.timely footer,.timely header,.timely hgroup,.timely nav,.timely section{display:block}.timely audio,.timely canvas,.timely video{display:inline-block;*display:inline;*zoom:1}.timely audio:not([controls]){display:none}.timely html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}.timely a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.timely a:hover,.timely a:active{outline:0}.timely sub,.timely sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}.timely sup{top:-0.5em}.timely sub{bottom:-0.25em}.timely img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle}.timely button,.timely input,.timely select,.timely textarea{margin:0;font-size:100%;vertical-align:middle}.timely button,.timely input{*overflow:visible;line-height:normal}.timely button::-moz-focus-inner,.timely input::-moz-focus-inner{padding:0;border:0}.timely button,.timely input[type="button"],.timely input[type="reset"],.timely input[type="submit"]{cursor:pointer;-webkit-appearance:button}.timely input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.timely input[type="search"]::-webkit-search-decoration,.timely input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}.timely textarea{overflow:auto;vertical-align:top}.timely .row{margin-left:-20px;*zoom:1}.timely .row:before,.timely .row:after{display:table;content:""}.timely .row:after{clear:both}.timely [class*="span"]{float:left;margin-left:20px}.timely .container,.timely .navbar-fixed-top .container,.timely .navbar-fixed-bottom .container{width:940px}.timely .span12{width:940px}.timely .span11{width:860px}.timely .span10{width:780px}.timely .span9{width:700px}.timely .span8{width:620px}.timely .span7{width:540px}.timely .span6{width:460px}.timely .span5{width:380px}.timely .span4{width:300px}.timely .span3{width:220px}.timely .span2{width:140px}.timely .span1{width:60px}.timely .offset12{margin-left:980px}.timely .offset11{margin-left:900px}.timely .offset10{margin-left:820px}.timely .offset9{margin-left:740px}.timely .offset8{margin-left:660px}.timely .offset7{margin-left:580px}.timely .offset6{margin-left:500px}.timely .offset5{margin-left:420px}.timely .offset4{margin-left:340px}.timely .offset3{margin-left:260px}.timely .offset2{margin-left:180px}.timely .offset1{margin-left:100px}.timely .row-fluid{width:100%;*zoom:1}.timely .row-fluid:before,.timely .row-fluid:after{display:table;content:""}.timely .row-fluid:after{clear:both}.timely .row-fluid>[class*="span"]{float:left;margin-left:2.127659574%}.timely .row-fluid>[class*="span"]:first-child{margin-left:0}.timely .row-fluid>.span12{width:99.99999998999999%}.timely .row-fluid>.span11{width:91.489361693%}.timely .row-fluid>.span10{width:82.97872339599999%}.timely .row-fluid>.span9{width:74.468085099%}.timely .row-fluid>.span8{width:65.95744680199999%}.timely .row-fluid>.span7{width:57.446808505%}.timely .row-fluid>.span6{width:48.93617020799999%}.timely .row-fluid>.span5{width:40.425531911%}.timely .row-fluid>.span4{width:31.914893614%}.timely .row-fluid>.span3{width:23.404255317%}.timely .row-fluid>.span2{width:14.89361702%}.timely .row-fluid>.span1{width:6.382978723%}.timely p{margin:0 0 9px;font-family:Arial,sans-serif;font-size:13px;line-height:18px}.timely p small{font-size:11px;color:#999}.timely .lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}.timely h1,.timely h2,.timely h3,.timely h4,.timely h5,.timely h6{margin:0;font-family:Signika,'Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:bold;color:#333;text-rendering:optimizelegibility}.timely h1 small,.timely h2 small,.timely h3 small,.timely h4 small,.timely h5 small,.timely h6 small{font-weight:normal;color:#999}.timely h1{font-size:30px;line-height:36px}.timely h1 small{font-size:18px}.timely h2{font-size:24px;line-height:36px}.timely h2 small{font-size:18px}.timely h3{line-height:27px;font-size:18px}.timely h3 small{font-size:14px}.timely h4,.timely h5,.timely h6{line-height:18px}.timely h4{font-size:14px}.timely h4 small{font-size:12px}.timely h5{font-size:12px}.timely h6{font-size:11px;color:#999;text-transform:uppercase}.timely .page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.timely .page-header h1{line-height:1}.timely ul,.timely ol{padding:0;margin:0 0 9px 25px}.timely ul ul,.timely ul ol,.timely ol ol,.timely ol ul{margin-bottom:0}.timely ul{list-style:disc}.timely ol{list-style:decimal}.timely li{line-height:18px}.timely ul.unstyled,.timely ol.unstyled{margin-left:0;list-style:none}.timely dl{margin-bottom:18px}.timely dt,.timely dd{line-height:18px}.timely dt{font-weight:bold;line-height:17px}.timely dd{margin-left:9px}.timely .dl-horizontal dt{float:left;clear:left;width:120px;text-align:right}.timely .dl-horizontal dd{margin-left:130px}.timely hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}.timely strong{font-weight:bold}.timely em{font-style:italic}.timely .muted{color:#999}.timely abbr[title]{border-bottom:1px dotted #ddd;cursor:help}.timely abbr.initialism{font-size:90%;text-transform:uppercase}.timely blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}.timely blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}.timely blockquote small{display:block;line-height:18px;color:#999}.timely blockquote small:before{content:'\2014 \00A0'}.timely blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eee}.timely blockquote.pull-right p,.timely blockquote.pull-right small{text-align:right}.timely q:before,.timely q:after,.timely blockquote:before,.timely blockquote:after{content:""}.timely address{display:block;margin-bottom:18px;line-height:18px;font-style:normal}.timely small{font-size:100%}.timely cite{font-style:normal}.timely .close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.timely .close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.timely button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.timely .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #ccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);cursor:pointer;*margin-left:.3em}.timely .btn:hover,.timely .btn:active,.timely .btn.active,.timely .btn.disabled,.timely .btn[disabled]{background-color:#e6e6e6}.timely .btn:active,.timely .btn.active{background-color:#ccc \9}.timely .btn:first-child{*margin-left:0}.timely .btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.timely .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.timely .btn.active,.timely .btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0}.timely .btn.disabled,.timely .btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.timely .btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.timely .btn-large [class^="icon-"]{margin-top:1px}.timely .btn-small{padding:5px 9px;font-size:11px;line-height:16px}.timely .btn-small [class^="icon-"]{margin-top:-1px}.timely .btn-mini{padding:2px 6px;font-size:11px;line-height:14px}.timely .btn-primary,.timely .btn-primary:hover,.timely .btn-warning,.timely .btn-warning:hover,.timely .btn-danger,.timely .btn-danger:hover,.timely .btn-success,.timely .btn-success:hover,.timely .btn-info,.timely .btn-info:hover,.timely .btn-inverse,.timely .btn-inverse:hover{text-shadow:0 -1px 0 rgba(0,0,0,0.25);color:#fff}.timely .btn-primary.active,.timely .btn-warning.active,.timely .btn-danger.active,.timely .btn-success.active,.timely .btn-info.active,.timely .btn-inverse.active{color:rgba(255,255,255,0.75)}.timely .btn-primary{background-color:#6fb343;background-image:-moz-linear-gradient(top,#84c04b,#51a038);background-image:-ms-linear-gradient(top,#84c04b,#51a038);background-image:-webkit-gradient(linear,0 0,0 100%,from(#84c04b),to(#51a038));background-image:-webkit-linear-gradient(top,#84c04b,#51a038);background-image:-o-linear-gradient(top,#84c04b,#51a038);background-image:linear-gradient(top,#84c04b,#51a038);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#84c04b',endColorstr='#51a038',GradientType=0);border-color:#51a038 #51a038 #346724;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-primary:hover,.timely .btn-primary:active,.timely .btn-primary.active,.timely .btn-primary.disabled,.timely .btn-primary[disabled]{background-color:#51a038}.timely .btn-primary:active,.timely .btn-primary.active{background-color:#3e7a2b \9}.timely .btn-warning{background-color:#e7a179;background-image:-moz-linear-gradient(top,#ecb393,#e08652);background-image:-ms-linear-gradient(top,#ecb393,#e08652);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ecb393),to(#e08652));background-image:-webkit-linear-gradient(top,#ecb393,#e08652);background-image:-o-linear-gradient(top,#ecb393,#e08652);background-image:linear-gradient(top,#ecb393,#e08652);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ecb393',endColorstr='#e08652',GradientType=0);border-color:#e08652 #e08652 #c35d23;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-warning:hover,.timely .btn-warning:active,.timely .btn-warning.active,.timely .btn-warning.disabled,.timely .btn-warning[disabled]{background-color:#e08652}.timely .btn-warning:active,.timely .btn-warning.active{background-color:#d86827 \9}.timely .btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-ms-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#bd362f',GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-danger:hover,.timely .btn-danger:active,.timely .btn-danger.active,.timely .btn-danger.disabled,.timely .btn-danger[disabled]{background-color:#bd362f}.timely .btn-danger:active,.timely .btn-danger.active{background-color:#942a25 \9}.timely .btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-ms-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462',endColorstr='#51a351',GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-success:hover,.timely .btn-success:active,.timely .btn-success.active,.timely .btn-success.disabled,.timely .btn-success[disabled]{background-color:#51a351}.timely .btn-success:active,.timely .btn-success.active{background-color:#408140 \9}.timely .btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-ms-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de',endColorstr='#2f96b4',GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-info:hover,.timely .btn-info:active,.timely .btn-info.active,.timely .btn-info.disabled,.timely .btn-info[disabled]{background-color:#2f96b4}.timely .btn-info:active,.timely .btn-info.active{background-color:#24748c \9}.timely .btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top,#555,#222);background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555',endColorstr='#222222',GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.timely .btn-inverse:hover,.timely .btn-inverse:active,.timely .btn-inverse.active,.timely .btn-inverse.disabled,.timely .btn-inverse[disabled]{background-color:#222}.timely .btn-inverse:active,.timely .btn-inverse.active{background-color:#080808 \9}.timely button.btn,.timely input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}.timely button.btn::-moz-focus-inner,.timely input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}.timely button.btn.btn-large,.timely input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}.timely button.btn.btn-small,.timely input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}.timely button.btn.btn-mini,.timely input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.timely .hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.timely .hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.timely .hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit}.timely .pull-right{float:right}.timely .pull-left{float:left}.timely .hide{display:none}.timely .show{display:block}.timely .invisible{visibility:hidden}.timely .hero-unit{padding:30px;margin-bottom:15px}.timely .hero-unit h1{color:#333}.timely h4{font-size:16px}.timely hr{margin:14px 0}.timely h2.ai1ec-premium-features{font-size:1.4em!important}.timely h4.ai1ec-premium-features .span4{min-width:145px}.timely h4.ai1ec-premium-features li{color:#6aab2d;font-size:1.2em}.timely h4.ai1ec-premium-features li strong{font-size:.83em;color:#333}.timely a.btn{text-decoration:none}
app/view/admin/css/settings.css CHANGED
@@ -7,11 +7,10 @@
7
  font-size: 20px !important;
8
  line-height: 28px !important;
9
  }
10
- .ai1ec-plugin-branding .thenly-logo {
11
- text-align: center;
12
- }
13
- .ai1ec-plugin-branding .thenly-logo img {
14
- max-width: 100%;
15
  }
16
  .ai1ec-plugin-branding .ai1ec-follow-fan {
17
  padding: 10px 0 6px;
@@ -49,27 +48,27 @@
49
  width: 100%;
50
  }
51
 
52
- .column-1-ai1ec #ai1ec-general-settings div.inside label {
53
  float: left;
54
  clear: left;
55
  margin: 0.25em 0;
56
  }
57
- .column-1-ai1ec #ai1ec-general-settings .checkbox {
58
  float: left;
59
  margin: 0.25em 0.5em 0 0;
60
  }
61
- .column-1-ai1ec #ai1ec-general-settings div.description {
62
  clear: left;
63
  font-size: 0.95em;
64
  line-height: 1.5em;
65
- margin-bottom: 1em;
66
  }
67
- .column-1-ai1ec #ai1ec-general-settings label.textinput {
68
  width: 230px;
69
  }
70
- .column-1-ai1ec #ai1ec-general-settings h2 {
71
- margin-bottom: 0;
72
- margin-top: 10px;
73
  }
74
 
75
  /* ICS Feeds */
@@ -123,14 +122,14 @@
123
  .ai1ec-donate {
124
  text-align: center;
125
  }
126
- #ai1ec-rss-news {
127
- margin: 0;
128
- padding: 0px 0px 0px 20px;
129
- }
130
- #ai1ec-rss-news > li {
131
- list-style: disc;
132
- }
133
 
134
  p.submit {
135
  padding-top: 0;
136
  }
 
 
 
 
 
 
 
7
  font-size: 20px !important;
8
  line-height: 28px !important;
9
  }
10
+ .ai1ec-plugin-branding .timely-logo a {
11
+ background: url(../img/timely-logo.png) no-repeat center center;
12
+ display: block;
13
+ height: 140px;
 
14
  }
15
  .ai1ec-plugin-branding .ai1ec-follow-fan {
16
  padding: 10px 0 6px;
48
  width: 100%;
49
  }
50
 
51
+ .column-1-ai1ec .inside label {
52
  float: left;
53
  clear: left;
54
  margin: 0.25em 0;
55
  }
56
+ .column-1-ai1ec .checkbox {
57
  float: left;
58
  margin: 0.25em 0.5em 0 0;
59
  }
60
+ .column-1-ai1ec .inside .description {
61
  clear: left;
62
  font-size: 0.95em;
63
  line-height: 1.5em;
64
+ margin: 0.25em 0 0.4em;
65
  }
66
+ .column-1-ai1ec .inside label.textinput {
67
  width: 230px;
68
  }
69
+ .column-1-ai1ec .inside h2 {
70
+ margin-bottom: 0 !important;
71
+ margin-top: 10px !important;
72
  }
73
 
74
  /* ICS Feeds */
122
  .ai1ec-donate {
123
  text-align: center;
124
  }
 
 
 
 
 
 
 
125
 
126
  p.submit {
127
  padding-top: 0;
128
  }
129
+
130
+ #ai1ec-blog-feed-container article {
131
+ margin: 8px 0;
132
+ }
133
+ #ai1ec-blog-feed-container header {
134
+ display: inline;
135
+ }
app/view/admin/img/timely-logo.png ADDED
Binary file
app/view/admin/js/add_new_event.js CHANGED
@@ -17,30 +17,26 @@ var ai1ec_convert_commas_to_dots_for_coordinates = function() {
17
  * Shows the error message after the field
18
  *
19
  * @param Object the dom element after which we put the error
20
- *
21
  * @param the error message
22
- *
23
  */
24
  var ai1ec_show_error_message_after_element = function( el, error_message ) {
25
  // Create the element to append in case of error
26
  var error = jQuery( '<div />',
27
  {
28
- text : error_message,
29
- class : "ai1ec-error"
30
  }
31
  );
32
  // Insert error message
33
  jQuery( el ).after( error );
34
  }
 
35
  /**
36
- *
37
- * prevent default actions and stop immediate propagation if the publish button was clicked and
38
- * gives focus to the passed element
39
  *
40
  * @param Object the event object
41
- *
42
  * @param Object the element to focus
43
- *
44
  */
45
  var ai1ec_prevent_actions_and_focus_on_errors = function( e, el ) {
46
  // If the validation was triggered by clicking publish
@@ -346,6 +342,33 @@ jQuery( function( $ ){
346
  });
347
  });
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  /**
350
  * Event post creation/edit form
351
  */
17
  * Shows the error message after the field
18
  *
19
  * @param Object the dom element after which we put the error
 
20
  * @param the error message
 
21
  */
22
  var ai1ec_show_error_message_after_element = function( el, error_message ) {
23
  // Create the element to append in case of error
24
  var error = jQuery( '<div />',
25
  {
26
+ 'text': error_message,
27
+ 'class': 'ai1ec-error'
28
  }
29
  );
30
  // Insert error message
31
  jQuery( el ).after( error );
32
  }
33
+
34
  /**
35
+ * Prevent default actions and stop immediate propagation if the publish button
36
+ * was clicked and gives focus to the passed element.
 
37
  *
38
  * @param Object the event object
 
39
  * @param Object the element to focus
 
40
  */
41
  var ai1ec_prevent_actions_and_focus_on_errors = function( e, el ) {
42
  // If the validation was triggered by clicking publish
342
  });
343
  });
344
 
345
+ /**
346
+ * Click event handler for Dismiss button of intro video.
347
+ * That disables the intro video notification for admin users.
348
+ */
349
+ $( '.ai1ec-dismiss-intro-video' ).live( 'click', function() {
350
+ var $button = $( this );
351
+ var $parent = $( this ).parent().parent();
352
+ // disable the update button
353
+ $button.attr( 'disabled', true );
354
+
355
+ // create the data to send
356
+ var data = {
357
+ action: 'ai1ec_disable_intro_video',
358
+ note: false
359
+ };
360
+
361
+ $.post( ajaxurl, data, function( response ) {
362
+ if( response.error ) {
363
+ // tell the user that there is an error
364
+ alert( response.message );
365
+ } else {
366
+ // hide notification message
367
+ $parent.remove();
368
+ }
369
+ });
370
+ });
371
+
372
  /**
373
  * Event post creation/edit form
374
  */
app/view/admin/js/bootstrap-modal.js ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* =========================================================
2
+ * bootstrap-modal.js v2.0.3
3
+ * http://twitter.github.com/bootstrap/javascript.html#modals
4
+ * =========================================================
5
+ * Copyright 2012 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ========================================================= */
19
+
20
+
21
+ !function ($) {
22
+
23
+ "use strict"; // jshint ;_;
24
+
25
+
26
+ /* MODAL CLASS DEFINITION
27
+ * ====================== */
28
+
29
+ var Modal = function (content, options) {
30
+ this.options = options
31
+ this.$element = $(content)
32
+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
33
+ }
34
+
35
+ Modal.prototype = {
36
+
37
+ constructor: Modal
38
+
39
+ , toggle: function () {
40
+ return this[!this.isShown ? 'show' : 'hide']()
41
+ }
42
+
43
+ , show: function () {
44
+ var that = this
45
+ , e = $.Event('show')
46
+
47
+ this.$element.trigger(e)
48
+
49
+ if (this.isShown || e.isDefaultPrevented()) return
50
+
51
+ $('body').addClass('modal-open')
52
+
53
+ this.isShown = true
54
+
55
+ escape.call(this)
56
+ backdrop.call(this, function () {
57
+ var transition = $.support.transition && that.$element.hasClass('fade')
58
+
59
+ if (!that.$element.parent().length) {
60
+ that.$element.appendTo(document.body) //don't move modals dom position
61
+ }
62
+
63
+ that.$element
64
+ .show()
65
+
66
+ if (transition) {
67
+ that.$element[0].offsetWidth // force reflow
68
+ }
69
+
70
+ that.$element.addClass('in')
71
+
72
+ transition ?
73
+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
74
+ that.$element.trigger('shown')
75
+
76
+ })
77
+ }
78
+
79
+ , hide: function (e) {
80
+ e && e.preventDefault()
81
+
82
+ var that = this
83
+
84
+ e = $.Event('hide')
85
+
86
+ this.$element.trigger(e)
87
+
88
+ if (!this.isShown || e.isDefaultPrevented()) return
89
+
90
+ this.isShown = false
91
+
92
+ $('body').removeClass('modal-open')
93
+
94
+ escape.call(this)
95
+
96
+ this.$element.removeClass('in')
97
+
98
+ $.support.transition && this.$element.hasClass('fade') ?
99
+ hideWithTransition.call(this) :
100
+ hideModal.call(this)
101
+ }
102
+
103
+ }
104
+
105
+
106
+ /* MODAL PRIVATE METHODS
107
+ * ===================== */
108
+
109
+ function hideWithTransition() {
110
+ var that = this
111
+ , timeout = setTimeout(function () {
112
+ that.$element.off($.support.transition.end)
113
+ hideModal.call(that)
114
+ }, 500)
115
+
116
+ this.$element.one($.support.transition.end, function () {
117
+ clearTimeout(timeout)
118
+ hideModal.call(that)
119
+ })
120
+ }
121
+
122
+ function hideModal(that) {
123
+ this.$element
124
+ .hide()
125
+ .trigger('hidden')
126
+
127
+ backdrop.call(this)
128
+ }
129
+
130
+ function backdrop(callback) {
131
+ var that = this
132
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
133
+
134
+ if (this.isShown && this.options.backdrop) {
135
+ var doAnimate = $.support.transition && animate
136
+
137
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
138
+ .appendTo(document.body)
139
+
140
+ if (this.options.backdrop != 'static') {
141
+ this.$backdrop.click($.proxy(this.hide, this))
142
+ }
143
+
144
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
145
+
146
+ this.$backdrop.addClass('in')
147
+
148
+ doAnimate ?
149
+ this.$backdrop.one($.support.transition.end, callback) :
150
+ callback()
151
+
152
+ } else if (!this.isShown && this.$backdrop) {
153
+ this.$backdrop.removeClass('in')
154
+
155
+ $.support.transition && this.$element.hasClass('fade')?
156
+ this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
157
+ removeBackdrop.call(this)
158
+
159
+ } else if (callback) {
160
+ callback()
161
+ }
162
+ }
163
+
164
+ function removeBackdrop() {
165
+ this.$backdrop.remove()
166
+ this.$backdrop = null
167
+ }
168
+
169
+ function escape() {
170
+ var that = this
171
+ if (this.isShown && this.options.keyboard) {
172
+ $(document).on('keyup.dismiss.modal', function ( e ) {
173
+ e.which == 27 && that.hide()
174
+ })
175
+ } else if (!this.isShown) {
176
+ $(document).off('keyup.dismiss.modal')
177
+ }
178
+ }
179
+
180
+
181
+ /* MODAL PLUGIN DEFINITION
182
+ * ======================= */
183
+
184
+ $.fn.modal = function (option) {
185
+ return this.each(function () {
186
+ var $this = $(this)
187
+ , data = $this.data('modal')
188
+ , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
189
+ if (!data) $this.data('modal', (data = new Modal(this, options)))
190
+ if (typeof option == 'string') data[option]()
191
+ else if (options.show) data.show()
192
+ })
193
+ }
194
+
195
+ $.fn.modal.defaults = {
196
+ backdrop: true
197
+ , keyboard: true
198
+ , show: true
199
+ }
200
+
201
+ $.fn.modal.Constructor = Modal
202
+
203
+
204
+ /* MODAL DATA-API
205
+ * ============== */
206
+
207
+ $(function () {
208
+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
209
+ var $this = $(this), href
210
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
211
+ , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
212
+
213
+ e.preventDefault()
214
+ $target.modal(option)
215
+ })
216
+ })
217
+
218
+ }(window.jQuery);
app/view/admin/less/bootstrap.less DELETED
@@ -1,82 +0,0 @@
1
- /*!
2
- * Bootstrap v2.0.2
3
- *
4
- * Copyright 2012 Twitter, Inc
5
- * Licensed under the Apache License v2.0
6
- * http://www.apache.org/licenses/LICENSE-2.0
7
- *
8
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
9
- */
10
-
11
- // Fonts
12
- @import url("http://fonts.googleapis.com/css?family=Droid+Sans:400,700");
13
- @import "font-awesome.less";
14
-
15
- .thenly {
16
- // CSS Reset
17
- @import "reset.less";
18
-
19
- // Core variables and mixins
20
- @import "variables.less"; // Modify this for custom colors, font-sizes, etc
21
-
22
- @import "mixins.less";
23
-
24
- // Grid system and page structure
25
- //@import "scaffolding.less";
26
- @import "grid.less";
27
- //@import "layouts.less";
28
-
29
- // Base CSS
30
- @import "type.less";
31
- //@import "code.less";
32
- //@import "forms.less";
33
- //@import "tables.less";
34
-
35
- // Components: common
36
- //@import "sprites.less";
37
- //@import "dropdowns.less";
38
- //@import "wells.less";
39
- //@import "component-animations.less";
40
- //@import "close.less";
41
-
42
- // Components: Buttons & Alerts
43
- @import "buttons.less";
44
- //@import "button-groups.less";
45
- //@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
46
-
47
- // Components: Nav
48
- //@import "navs.less";
49
- //@import "navbar.less";
50
- //@import "breadcrumbs.less";
51
- //@import "pagination.less";
52
- //@import "pager.less";
53
-
54
- // Components: Popovers
55
- //@import "modals.less";
56
- //@import "tooltip.less";
57
- //@import "popovers.less";
58
-
59
- // Components: Misc
60
- //@import "thumbnails.less";
61
- //@import "labels.less";
62
- //@import "badges.less";
63
- //@import "progress-bars.less";
64
- //@import "accordion.less";
65
- //@import "carousel.less";
66
- @import "hero-unit.less";
67
-
68
- // Utility classes
69
- @import "utilities.less"; // Has to be last to override when necessary
70
-
71
- // Adjustments.
72
- .hero-unit {
73
- padding: 30px;
74
- margin-bottom: 15px;
75
- }
76
- .hero-unit h1 {
77
- color: @headingsColor;
78
- }
79
- hr {
80
- margin: 14px 0;
81
- }
82
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/build-css.sh DELETED
@@ -1,10 +0,0 @@
1
- #!/bin/bash
2
-
3
- LESSC="lessc --yui-compress --include-path=."
4
-
5
- if which -s lessc; then
6
- $LESSC bootstrap.less > ../css/bootstrap.min.css
7
- else
8
- echo 'Error: lessc not found. Install Node.js then: npm install -g less';
9
- exit 1;
10
- fi
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/button-groups.less DELETED
@@ -1,172 +0,0 @@
1
- // BUTTON GROUPS
2
- // -------------
3
-
4
-
5
- // Make the div behave like a button
6
- .btn-group {
7
- position: relative;
8
- .clearfix(); // clears the floated buttons
9
- .ie7-restore-left-whitespace();
10
- }
11
-
12
- // Space out series of button groups
13
- .btn-group + .btn-group {
14
- margin-left: 5px;
15
- }
16
-
17
- // Optional: Group multiple button groups together for a toolbar
18
- .btn-toolbar {
19
- margin-top: @baseLineHeight / 2;
20
- margin-bottom: @baseLineHeight / 2;
21
- .btn-group {
22
- display: inline-block;
23
- .ie7-inline-block();
24
- }
25
- }
26
-
27
- // Float them, remove border radius, then re-add to first and last elements
28
- .btn-group .btn {
29
- position: relative;
30
- float: left;
31
- margin-left: -1px;
32
- .border-radius(0);
33
- }
34
- // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
35
- .btn-group .btn:first-child {
36
- margin-left: 0;
37
- -webkit-border-top-left-radius: 4px;
38
- -moz-border-radius-topleft: 4px;
39
- border-top-left-radius: 4px;
40
- -webkit-border-bottom-left-radius: 4px;
41
- -moz-border-radius-bottomleft: 4px;
42
- border-bottom-left-radius: 4px;
43
- }
44
- .btn-group .btn:last-child,
45
- .btn-group .dropdown-toggle {
46
- -webkit-border-top-right-radius: 4px;
47
- -moz-border-radius-topright: 4px;
48
- border-top-right-radius: 4px;
49
- -webkit-border-bottom-right-radius: 4px;
50
- -moz-border-radius-bottomright: 4px;
51
- border-bottom-right-radius: 4px;
52
- }
53
- // Reset corners for large buttons
54
- .btn-group .btn.large:first-child {
55
- margin-left: 0;
56
- -webkit-border-top-left-radius: 6px;
57
- -moz-border-radius-topleft: 6px;
58
- border-top-left-radius: 6px;
59
- -webkit-border-bottom-left-radius: 6px;
60
- -moz-border-radius-bottomleft: 6px;
61
- border-bottom-left-radius: 6px;
62
- }
63
- .btn-group .btn.large:last-child,
64
- .btn-group .large.dropdown-toggle {
65
- -webkit-border-top-right-radius: 6px;
66
- -moz-border-radius-topright: 6px;
67
- border-top-right-radius: 6px;
68
- -webkit-border-bottom-right-radius: 6px;
69
- -moz-border-radius-bottomright: 6px;
70
- border-bottom-right-radius: 6px;
71
- }
72
-
73
- // On hover/focus/active, bring the proper btn to front
74
- .btn-group .btn:hover,
75
- .btn-group .btn:focus,
76
- .btn-group .btn:active,
77
- .btn-group .btn.active {
78
- z-index: 2;
79
- }
80
-
81
- // On active and open, don't show outline
82
- .btn-group .dropdown-toggle:active,
83
- .btn-group.open .dropdown-toggle {
84
- outline: 0;
85
- }
86
-
87
-
88
-
89
- // Split button dropdowns
90
- // ----------------------
91
-
92
- // Give the line between buttons some depth
93
- .btn-group .dropdown-toggle {
94
- padding-left: 8px;
95
- padding-right: 8px;
96
- @shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
97
- .box-shadow(@shadow);
98
- *padding-top: 3px;
99
- *padding-bottom: 3px;
100
- }
101
- .btn-group .btn-mini.dropdown-toggle {
102
- padding-left: 5px;
103
- padding-right: 5px;
104
- *padding-top: 1px;
105
- *padding-bottom: 1px;
106
- }
107
- .btn-group .btn-small.dropdown-toggle {
108
- *padding-top: 4px;
109
- *padding-bottom: 4px;
110
- }
111
- .btn-group .btn-large.dropdown-toggle {
112
- padding-left: 12px;
113
- padding-right: 12px;
114
- }
115
-
116
- .btn-group.open {
117
- // IE7's z-index only goes to the nearest positioned ancestor, which would
118
- // make the menu appear below buttons that appeared later on the page
119
- *z-index: @zindexDropdown;
120
-
121
- // Reposition menu on open and round all corners
122
- .dropdown-menu {
123
- display: block;
124
- margin-top: 1px;
125
- .border-radius(5px);
126
- }
127
-
128
- .dropdown-toggle {
129
- background-image: none;
130
- @shadow: inset 0 1px 6px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
131
- .box-shadow(@shadow);
132
- }
133
- }
134
-
135
- // Reposition the caret
136
- .btn .caret {
137
- margin-top: 7px;
138
- margin-left: 0;
139
- }
140
- .btn:hover .caret,
141
- .open.btn-group .caret {
142
- .opacity(100);
143
- }
144
- // Carets in other button sizes
145
- .btn-mini .caret {
146
- margin-top: 5px;
147
- }
148
- .btn-small .caret {
149
- margin-top: 6px;
150
- }
151
- .btn-large .caret {
152
- margin-top: 6px;
153
- border-left: 5px solid transparent;
154
- border-right: 5px solid transparent;
155
- border-top: 5px solid @black;
156
- }
157
-
158
-
159
- // Account for other colors
160
- .btn-primary,
161
- .btn-warning,
162
- .btn-danger,
163
- .btn-info,
164
- .btn-success,
165
- .btn-inverse {
166
- .caret {
167
- border-top-color: @white;
168
- border-bottom-color: @white;
169
- .opacity(75);
170
- }
171
- }
172
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/buttons.less DELETED
@@ -1,187 +0,0 @@
1
- // BUTTON STYLES
2
- // -------------
3
-
4
-
5
- // Base styles
6
- // --------------------------------------------------
7
-
8
- // Core
9
- .btn {
10
- display: inline-block;
11
- .ie7-inline-block();
12
- padding: 4px 10px 4px;
13
- margin-bottom: 0; // For input.btn
14
- font-size: @baseFontSize;
15
- line-height: @baseLineHeight;
16
- color: @grayDark;
17
- text-align: center;
18
- text-shadow: 0 1px 1px rgba(255,255,255,.75);
19
- vertical-align: middle;
20
- .buttonBackground(@btnBackground, @btnBackgroundHighlight);
21
- border: 1px solid @btnBorder;
22
- border-bottom-color: darken(@btnBorder, 10%);
23
- .border-radius(4px);
24
- @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
25
- .box-shadow(@shadow);
26
- cursor: pointer;
27
-
28
- // Give IE7 some love
29
- .ie7-restore-left-whitespace();
30
- }
31
-
32
- // Hover state
33
- .btn:hover {
34
- color: @grayDark;
35
- text-decoration: none;
36
- background-color: darken(@white, 10%);
37
- background-position: 0 -15px;
38
-
39
- // transition is only when going to hover, otherwise the background
40
- // behind the gradient (there for IE<=9 fallback) gets mismatched
41
- .transition(background-position .1s linear);
42
- }
43
-
44
- // Focus state for keyboard and accessibility
45
- .btn:focus {
46
- .tab-focus();
47
- }
48
-
49
- // Active state
50
- .btn.active,
51
- .btn:active {
52
- background-image: none;
53
- @shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
54
- .box-shadow(@shadow);
55
- background-color: darken(@white, 10%);
56
- background-color: darken(@white, 15%) e("\9");
57
- outline: 0;
58
- }
59
-
60
- // Disabled state
61
- .btn.disabled,
62
- .btn[disabled] {
63
- cursor: default;
64
- background-image: none;
65
- background-color: darken(@white, 10%);
66
- .opacity(65);
67
- .box-shadow(none);
68
- }
69
-
70
-
71
- // Button Sizes
72
- // --------------------------------------------------
73
-
74
- // Large
75
- .btn-large {
76
- padding: 9px 14px;
77
- font-size: @baseFontSize + 2px;
78
- line-height: normal;
79
- .border-radius(5px);
80
- }
81
- .btn-large [class^="icon-"] {
82
- margin-top: 1px;
83
- }
84
-
85
- // Small
86
- .btn-small {
87
- padding: 5px 9px;
88
- font-size: @baseFontSize - 2px;
89
- line-height: @baseLineHeight - 2px;
90
- }
91
- .btn-small [class^="icon-"] {
92
- margin-top: -1px;
93
- }
94
-
95
- // Mini
96
- .btn-mini {
97
- padding: 2px 6px;
98
- font-size: @baseFontSize - 2px;
99
- line-height: @baseLineHeight - 4px;
100
- }
101
-
102
-
103
- // Alternate buttons
104
- // --------------------------------------------------
105
-
106
- // Set text color
107
- // -------------------------
108
- .btn-primary,
109
- .btn-primary:hover,
110
- .btn-warning,
111
- .btn-warning:hover,
112
- .btn-danger,
113
- .btn-danger:hover,
114
- .btn-success,
115
- .btn-success:hover,
116
- .btn-info,
117
- .btn-info:hover,
118
- .btn-inverse,
119
- .btn-inverse:hover {
120
- text-shadow: 0 -1px 0 rgba(0,0,0,.25);
121
- color: @white;
122
- }
123
- // Provide *some* extra contrast for those who can get it
124
- .btn-primary.active,
125
- .btn-warning.active,
126
- .btn-danger.active,
127
- .btn-success.active,
128
- .btn-info.active,
129
- .btn-inverse.active {
130
- color: rgba(255,255,255,.75);
131
- }
132
-
133
- // Set the backgrounds
134
- // -------------------------
135
- .btn-primary {
136
- .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
137
- }
138
- // Warning appears are orange
139
- .btn-warning {
140
- .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight);
141
- }
142
- // Danger and error appear as red
143
- .btn-danger {
144
- .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight);
145
- }
146
- // Success appears as green
147
- .btn-success {
148
- .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight);
149
- }
150
- // Info appears as a neutral blue
151
- .btn-info {
152
- .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight);
153
- }
154
- // Inverse appears as dark gray
155
- .btn-inverse {
156
- .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight);
157
- }
158
-
159
-
160
- // Cross-browser Jank
161
- // --------------------------------------------------
162
-
163
- button.btn,
164
- input[type="submit"].btn {
165
-
166
- // Firefox 3.6 only I believe
167
- &::-moz-focus-inner {
168
- padding: 0;
169
- border: 0;
170
- }
171
-
172
- // IE7 has some default padding on button controls
173
- *padding-top: 2px;
174
- *padding-bottom: 2px;
175
- &.btn-large {
176
- *padding-top: 7px;
177
- *padding-bottom: 7px;
178
- }
179
- &.btn-small {
180
- *padding-top: 3px;
181
- *padding-bottom: 3px;
182
- }
183
- &.btn-mini {
184
- *padding-top: 1px;
185
- *padding-bottom: 1px;
186
- }
187
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/dropdowns.less DELETED
@@ -1,148 +0,0 @@
1
- // DROPDOWN MENUS
2
- // --------------
3
-
4
- // Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns
5
- .dropdown {
6
- position: relative;
7
- }
8
- .dropdown-toggle {
9
- // The caret makes the toggle a bit too tall in IE7
10
- *margin-bottom: -3px;
11
- }
12
- .dropdown-toggle:active,
13
- .open .dropdown-toggle {
14
- outline: 0;
15
- }
16
-
17
- // Dropdown arrow/caret
18
- // --------------------
19
- .caret {
20
- display: inline-block;
21
- width: 0;
22
- height: 0;
23
- vertical-align: top;
24
- border-left: 4px solid transparent;
25
- border-right: 4px solid transparent;
26
- border-top: 4px solid @black;
27
- .opacity(30);
28
- content: "";
29
- }
30
-
31
- // Place the caret
32
- .dropdown .caret {
33
- margin-top: 8px;
34
- margin-left: 2px;
35
- }
36
- .dropdown:hover .caret,
37
- .open.dropdown .caret {
38
- .opacity(100);
39
- }
40
-
41
- // The dropdown menu (ul)
42
- // ----------------------
43
- .dropdown-menu {
44
- position: absolute;
45
- top: 100%;
46
- left: 0;
47
- z-index: @zindexDropdown;
48
- float: left;
49
- display: none; // none by default, but block on "open" of the menu
50
- min-width: 160px;
51
- padding: 4px 0;
52
- margin: 0; // override default ul
53
- list-style: none;
54
- background-color: @dropdownBackground;
55
- border-color: #ccc;
56
- border-color: rgba(0,0,0,.2);
57
- border-style: solid;
58
- border-width: 1px;
59
- .border-radius(0 0 5px 5px);
60
- .box-shadow(0 5px 10px rgba(0,0,0,.2));
61
- -webkit-background-clip: padding-box;
62
- -moz-background-clip: padding;
63
- background-clip: padding-box;
64
- *border-right-width: 2px;
65
- *border-bottom-width: 2px;
66
-
67
- // Aligns the dropdown menu to right
68
- &.pull-right {
69
- right: 0;
70
- left: auto;
71
- }
72
-
73
- // Dividers (basically an hr) within the dropdown
74
- .divider {
75
- .nav-divider();
76
- }
77
-
78
- // Links within the dropdown menu
79
- a {
80
- display: block;
81
- padding: 3px 15px;
82
- clear: both;
83
- font-weight: normal;
84
- line-height: @baseLineHeight;
85
- color: @dropdownLinkColor;
86
- white-space: nowrap;
87
- }
88
- }
89
-
90
- // Hover state
91
- // -----------
92
- .dropdown-menu li > a:hover,
93
- .dropdown-menu .active > a,
94
- .dropdown-menu .active > a:hover {
95
- color: @dropdownLinkColorHover;
96
- text-decoration: none;
97
- background-color: @dropdownLinkBackgroundHover;
98
- }
99
-
100
- // Open state for the dropdown
101
- // ---------------------------
102
- .dropdown.open {
103
- // IE7's z-index only goes to the nearest positioned ancestor, which would
104
- // make the menu appear below buttons that appeared later on the page
105
- *z-index: @zindexDropdown;
106
-
107
- .dropdown-toggle {
108
- color: @white;
109
- background: #ccc;
110
- background: rgba(0,0,0,.3);
111
- }
112
- .dropdown-menu {
113
- display: block;
114
- }
115
- }
116
-
117
- // Right aligned dropdowns
118
- .pull-right .dropdown-menu {
119
- left: auto;
120
- right: 0;
121
- }
122
-
123
- // Allow for dropdowns to go bottom up (aka, dropup-menu)
124
- // ------------------------------------------------------
125
- // Just add .dropup after the standard .dropdown class and you're set, bro.
126
- // TODO: abstract this so that the navbar fixed styles are not placed here?
127
- .dropup,
128
- .navbar-fixed-bottom .dropdown {
129
- // Reverse the caret
130
- .caret {
131
- border-top: 0;
132
- border-bottom: 4px solid @black;
133
- content: "\2191";
134
- }
135
- // Different positioning for bottom up menu
136
- .dropdown-menu {
137
- top: auto;
138
- bottom: 100%;
139
- margin-bottom: 1px;
140
- }
141
- }
142
-
143
- // Typeahead
144
- // ---------
145
- .typeahead {
146
- margin-top: 2px; // give it some space to breathe
147
- .border-radius(4px);
148
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/font-awesome.less DELETED
@@ -1,264 +0,0 @@
1
- /* Font Awesome
2
- the iconic font designed for use with Twitter Bootstrap
3
- -------------------------------------------------------
4
- The full suite of pictographic icons, examples, and documentation
5
- can be found at: http://fortawesome.github.com/Font-Awesome/
6
-
7
- License
8
- -------------------------------------------------------
9
- The Font Awesome webfont, CSS, and LESS files are licensed under CC BY 3.0:
10
- http://creativecommons.org/licenses/by/3.0/ A mention of
11
- 'Font Awesome - http://fortawesome.github.com/Font-Awesome' in human-readable
12
- source code is considered acceptable attribution (most common on the web).
13
- If human readable source code is not available to the end user, a mention in
14
- an 'About' or 'Credits' screen is considered acceptable (most common in desktop
15
- or mobile software).
16
-
17
- Contact
18
- -------------------------------------------------------
19
- Email: dave@davegandy.com
20
- Twitter: http://twitter.com/fortaweso_me
21
- Work: http://lemonwi.se co-founder
22
-
23
- */
24
-
25
- @font-face {
26
- font-family: 'FontAwesome';
27
- src: url('../font/fontawesome-webfont.eot');
28
- src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
29
- url('../font/fontawesome-webfont.woff') format('woff'),
30
- url('../font/fontawesome-webfont.ttf') format('truetype'),
31
- url('../font/fontawesome-webfont.svgz#FontAwesomeRegular') format('svg'),
32
- url('../font/fontawesome-webfont.svg#FontAwesomeRegular') format('svg');
33
- font-weight: normal;
34
- font-style: normal;
35
- }
36
-
37
- /* sprites.less reset */
38
- [class^="icon-"],
39
- [class*=" icon-"] {
40
- display: inline;
41
- width: auto;
42
- height: auto;
43
- line-height: inherit;
44
- vertical-align: baseline;
45
- background-image: none;
46
- background-position: 0% 0%;
47
- background-repeat: repeat;
48
- }
49
- li[class^="icon-"],
50
- li[class*=" icon-"] {
51
- display: block;
52
- }
53
-
54
- /* Font Awesome styles
55
- ------------------------------------------------------- */
56
- [class^="icon-"]:before,
57
- [class*=" icon-"]:before {
58
- font-family: FontAwesome;
59
- font-weight: normal;
60
- font-style: normal;
61
- display: inline-block;
62
- text-decoration: inherit;
63
- }
64
-
65
- a [class^="icon-"],
66
- a [class*=" icon-"] {
67
- display: inline-block;
68
- text-decoration: inherit;
69
- }
70
-
71
- /* makes the font 33% larger relative to the icon container */
72
- .icon-large:before {
73
- vertical-align: top;
74
- font-size: 4/3em;
75
- }
76
-
77
- .btn {
78
- [class^="icon-"],
79
- [class*=" icon-"] {
80
- /* keeps button heights with and without icons the same */
81
- line-height: .9em;
82
- }
83
- }
84
-
85
- li {
86
- [class^="icon-"],
87
- [class*=" icon-"] {
88
- display: inline-block;
89
- width: 1.25em;
90
- text-align: center;
91
- }
92
- .icon-large[class^="icon-"],
93
- .icon-large[class*=" icon-"] {
94
- /* 1.5 increased font size for icon-large * 1.25 width */
95
- width: 1.5*1.25em;
96
- }
97
- }
98
-
99
- li[class^="icon-"],
100
- li[class*=" icon-"] {
101
- margin-left: 0;
102
- list-style-type: none;
103
-
104
- &:before {
105
- text-indent: -2em;
106
- text-align: center;
107
- }
108
- &.icon-large:before {
109
- text-indent: -4/3em;
110
- }
111
- }
112
-
113
- /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
114
- readers do not read off random characters that represent icons */
115
- .icon-glass:before { content: "\f000"; }
116
- .icon-music:before { content: "\f001"; }
117
- .icon-search:before { content: "\f002"; }
118
- .icon-envelope:before { content: "\f003"; }
119
- .icon-heart:before { content: "\f004"; }
120
- .icon-star:before { content: "\f005"; }
121
- .icon-star-empty:before { content: "\f006"; }
122
- .icon-user:before { content: "\f007"; }
123
- .icon-film:before { content: "\f008"; }
124
- .icon-th-large:before { content: "\f009"; }
125
- .icon-th:before { content: "\f00a"; }
126
- .icon-th-list:before { content: "\f00b"; }
127
- .icon-ok:before { content: "\f00c"; }
128
- .icon-remove:before { content: "\f00d"; }
129
- .icon-zoom-in:before { content: "\f00e"; }
130
-
131
- .icon-zoom-out:before { content: "\f010"; }
132
- .icon-off:before { content: "\f011"; }
133
- .icon-signal:before { content: "\f012"; }
134
- .icon-cog:before { content: "\f013"; }
135
- .icon-trash:before { content: "\f014"; }
136
- .icon-home:before { content: "\f015"; }
137
- .icon-file:before { content: "\f016"; }
138
- .icon-time:before { content: "\f017"; }
139
- .icon-road:before { content: "\f018"; }
140
- .icon-download-alt:before { content: "\f019"; }
141
- .icon-download:before { content: "\f01a"; }
142
- .icon-upload:before { content: "\f01b"; }
143
- .icon-inbox:before { content: "\f01c"; }
144
- .icon-play-circle:before { content: "\f01d"; }
145
- .icon-repeat:before { content: "\f01e"; }
146
-
147
- /* \f020 is not a valid unicode character. all shifted one down */
148
- .icon-refresh:before { content: "\f021"; }
149
- .icon-list-alt:before { content: "\f022"; }
150
- .icon-lock:before { content: "\f023"; }
151
- .icon-flag:before { content: "\f024"; }
152
- .icon-headphones:before { content: "\f025"; }
153
- .icon-volume-off:before { content: "\f026"; }
154
- .icon-volume-down:before { content: "\f027"; }
155
- .icon-volume-up:before { content: "\f028"; }
156
- .icon-qrcode:before { content: "\f029"; }
157
- .icon-barcode:before { content: "\f02a"; }
158
- .icon-tag:before { content: "\f02b"; }
159
- .icon-tags:before { content: "\f02c"; }
160
- .icon-book:before { content: "\f02d"; }
161
- .icon-bookmark:before { content: "\f02e"; }
162
- .icon-print:before { content: "\f02f"; }
163
-
164
- .icon-camera:before { content: "\f030"; }
165
- .icon-font:before { content: "\f031"; }
166
- .icon-bold:before { content: "\f032"; }
167
- .icon-italic:before { content: "\f033"; }
168
- .icon-text-height:before { content: "\f034"; }
169
- .icon-text-width:before { content: "\f035"; }
170
- .icon-align-left:before { content: "\f036"; }
171
- .icon-align-center:before { content: "\f037"; }
172
- .icon-align-right:before { content: "\f038"; }
173
- .icon-align-justify:before { content: "\f039"; }
174
- .icon-list:before { content: "\f03a"; }
175
- .icon-indent-left:before { content: "\f03b"; }
176
- .icon-indent-right:before { content: "\f03c"; }
177
- .icon-facetime-video:before { content: "\f03d"; }
178
- .icon-picture:before { content: "\f03e"; }
179
-
180
- .icon-pencil:before { content: "\f040"; }
181
- .icon-map-marker:before { content: "\f041"; }
182
- .icon-adjust:before { content: "\f042"; }
183
- .icon-tint:before { content: "\f043"; }
184
- .icon-edit:before { content: "\f044"; }
185
- .icon-share:before { content: "\f045"; }
186
- .icon-check:before { content: "\f046"; }
187
- .icon-move:before { content: "\f047"; }
188
- .icon-step-backward:before { content: "\f048"; }
189
- .icon-fast-backward:before { content: "\f049"; }
190
- .icon-backward:before { content: "\f04a"; }
191
- .icon-play:before { content: "\f04b"; }
192
- .icon-pause:before { content: "\f04c"; }
193
- .icon-stop:before { content: "\f04d"; }
194
- .icon-forward:before { content: "\f04e"; }
195
-
196
- .icon-fast-forward:before { content: "\f050"; }
197
- .icon-step-forward:before { content: "\f051"; }
198
- .icon-eject:before { content: "\f052"; }
199
- .icon-chevron-left:before { content: "\f053"; }
200
- .icon-chevron-right:before { content: "\f054"; }
201
- .icon-plus-sign:before { content: "\f055"; }
202
- .icon-minus-sign:before { content: "\f056"; }
203
- .icon-remove-sign:before { content: "\f057"; }
204
- .icon-ok-sign:before { content: "\f058"; }
205
- .icon-question-sign:before { content: "\f059"; }
206
- .icon-info-sign:before { content: "\f05a"; }
207
- .icon-screenshot:before { content: "\f05b"; }
208
- .icon-remove-circle:before { content: "\f05c"; }
209
- .icon-ok-circle:before { content: "\f05d"; }
210
- .icon-ban-circle:before { content: "\f05e"; }
211
-
212
- .icon-arrow-left:before { content: "\f060"; }
213
- .icon-arrow-right:before { content: "\f061"; }
214
- .icon-arrow-up:before { content: "\f062"; }
215
- .icon-arrow-down:before { content: "\f063"; }
216
- .icon-share-alt:before { content: "\f064"; }
217
- .icon-resize-full:before { content: "\f065"; }
218
- .icon-resize-small:before { content: "\f066"; }
219
- .icon-plus:before { content: "\f067"; }
220
- .icon-minus:before { content: "\f068"; }
221
- .icon-asterisk:before { content: "\f069"; }
222
- .icon-exclamation-sign:before { content: "\f06a"; }
223
- .icon-gift:before { content: "\f06b"; }
224
- .icon-leaf:before { content: "\f06c"; }
225
- .icon-fire:before { content: "\f06d"; }
226
- .icon-eye-open:before { content: "\f06e"; }
227
-
228
- .icon-eye-close:before { content: "\f070"; }
229
- .icon-warning-sign:before { content: "\f071"; }
230
- .icon-plane:before { content: "\f072"; }
231
- .icon-calendar:before { content: "\f073"; }
232
- .icon-random:before { content: "\f074"; }
233
- .icon-comment:before { content: "\f075"; }
234
- .icon-magnet:before { content: "\f076"; }
235
- .icon-chevron-up:before { content: "\f077"; }
236
- .icon-chevron-down:before { content: "\f078"; }
237
- .icon-retweet:before { content: "\f079"; }
238
- .icon-shopping-cart:before { content: "\f07a"; }
239
- .icon-folder-close:before { content: "\f07b"; }
240
- .icon-folder-open:before { content: "\f07c"; }
241
- .icon-resize-vertical:before { content: "\f07d"; }
242
- .icon-resize-horizontal:before { content: "\f07e"; }
243
-
244
- .icon-bar-chart:before { content: "\f080"; }
245
- .icon-twitter-sign:before { content: "\f081"; }
246
- .icon-facebook-sign:before { content: "\f082"; }
247
- .icon-camera-retro:before { content: "\f083"; }
248
- .icon-key:before { content: "\f084"; }
249
- .icon-cogs:before { content: "\f085"; }
250
- .icon-comments:before { content: "\f086"; }
251
- .icon-thumbs-up:before { content: "\f087"; }
252
- .icon-thumbs-down:before { content: "\f088"; }
253
- .icon-star-half:before { content: "\f089"; }
254
- .icon-heart-empty:before { content: "\f08a"; }
255
- .icon-signout:before { content: "\f08b"; }
256
- .icon-linkedin-sign:before { content: "\f08c"; }
257
- .icon-pushpin:before { content: "\f08d"; }
258
- .icon-external-link:before { content: "\f08e"; }
259
-
260
- .icon-signin:before { content: "\f090"; }
261
- .icon-trophy:before { content: "\f091"; }
262
- .icon-github-sign:before { content: "\f092"; }
263
- .icon-upload-alt:before { content: "\f093"; }
264
- .icon-lemon:before { content: "\f094"; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/grid.less DELETED
@@ -1,5 +0,0 @@
1
- // Fixed (940px)
2
- #grid > .core(@gridColumnWidth, @gridGutterWidth);
3
-
4
- // Fluid (940px)
5
- #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
 
 
 
 
 
app/view/admin/less/hero-unit.less DELETED
@@ -1,22 +0,0 @@
1
- // HERO UNIT
2
- // ---------
3
-
4
- .hero-unit {
5
- padding: 60px;
6
- margin-bottom: 30px;
7
- background-color: @heroUnitBackground;
8
- .border-radius(6px);
9
- h1 {
10
- margin-bottom: 0;
11
- font-size: 60px;
12
- line-height: 1;
13
- color: @heroUnitHeadingColor;
14
- letter-spacing: -1px;
15
- }
16
- p {
17
- font-size: 18px;
18
- font-weight: 200;
19
- line-height: @baseLineHeight * 1.5;
20
- color: @heroUnitLeadColor;
21
- }
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/mixins.less DELETED
@@ -1,614 +0,0 @@
1
- // Mixins.less
2
- // Snippets of reusable CSS to develop faster and keep code readable
3
- // -----------------------------------------------------------------
4
-
5
-
6
- // UTILITY MIXINS
7
- // --------------------------------------------------
8
-
9
- // Clearfix
10
- // --------
11
- // For clearing floats like a boss h5bp.com/q
12
- .clearfix {
13
- *zoom: 1;
14
- &:before,
15
- &:after {
16
- display: table;
17
- content: "";
18
- }
19
- &:after {
20
- clear: both;
21
- }
22
- }
23
-
24
- // Webkit-style focus
25
- // ------------------
26
- .tab-focus() {
27
- // Default
28
- outline: thin dotted #333;
29
- // Webkit
30
- outline: 5px auto -webkit-focus-ring-color;
31
- outline-offset: -2px;
32
- }
33
-
34
- // Center-align a block level element
35
- // ----------------------------------
36
- .center-block() {
37
- display: block;
38
- margin-left: auto;
39
- margin-right: auto;
40
- }
41
-
42
- // IE7 inline-block
43
- // ----------------
44
- .ie7-inline-block() {
45
- *display: inline; /* IE7 inline-block hack */
46
- *zoom: 1;
47
- }
48
-
49
- // IE7 likes to collapse whitespace on either side of the inline-block elements.
50
- // Ems because we're attempting to match the width of a space character. Left
51
- // version is for form buttons, which typically come after other elements, and
52
- // right version is for icons, which come before. Applying both is ok, but it will
53
- // mean that space between those elements will be .6em (~2 space characters) in IE7,
54
- // instead of the 1 space in other browsers.
55
- .ie7-restore-left-whitespace() {
56
- *margin-left: .3em;
57
-
58
- &:first-child {
59
- *margin-left: 0;
60
- }
61
- }
62
-
63
- .ie7-restore-right-whitespace() {
64
- *margin-right: .3em;
65
-
66
- &:last-child {
67
- *margin-left: 0;
68
- }
69
- }
70
-
71
- // Sizing shortcuts
72
- // -------------------------
73
- .size(@height: 5px, @width: 5px) {
74
- width: @width;
75
- height: @height;
76
- }
77
- .square(@size: 5px) {
78
- .size(@size, @size);
79
- }
80
-
81
- // Placeholder text
82
- // -------------------------
83
- .placeholder(@color: @placeholderText) {
84
- :-moz-placeholder {
85
- color: @color;
86
- }
87
- ::-webkit-input-placeholder {
88
- color: @color;
89
- }
90
- }
91
-
92
- // Text overflow
93
- // -------------------------
94
- // Requires inline-block or block for proper styling
95
- .text-overflow() {
96
- overflow: hidden;
97
- text-overflow: ellipsis;
98
- white-space: nowrap;
99
- }
100
-
101
- // New image replacement
102
- // -------------------------
103
- // Source: http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/
104
- .hide-text {
105
- overflow: hidden;
106
- text-indent: 100%;
107
- white-space: nowrap;
108
- }
109
-
110
-
111
- // FONTS
112
- // --------------------------------------------------
113
-
114
- #font {
115
- #family {
116
- .serif() {
117
- font-family: Georgia, "Times New Roman", Times, serif;
118
- }
119
- .sans-serif() {
120
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
121
- }
122
- .monospace() {
123
- font-family: Menlo, Monaco, "Courier New", monospace;
124
- }
125
- }
126
- .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
127
- font-size: @size;
128
- font-weight: @weight;
129
- line-height: @lineHeight;
130
- }
131
- .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
132
- #font > #family > .serif;
133
- #font > .shorthand(@size, @weight, @lineHeight);
134
- }
135
- .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
136
- #font > #family > .sans-serif;
137
- #font > .shorthand(@size, @weight, @lineHeight);
138
- }
139
- .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
140
- #font > #family > .monospace;
141
- #font > .shorthand(@size, @weight, @lineHeight);
142
- }
143
- }
144
-
145
-
146
- // FORMS
147
- // --------------------------------------------------
148
-
149
- // Block level inputs
150
- .input-block-level {
151
- display: block;
152
- width: 100%;
153
- min-height: 28px; /* Make inputs at least the height of their button counterpart */
154
- /* Makes inputs behave like true block-level elements */
155
- .box-sizing(border-box);
156
- }
157
-
158
-
159
- // Mixin for form field states
160
- .formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
161
- // Set the text color
162
- > label,
163
- .help-block,
164
- .help-inline {
165
- color: @textColor;
166
- }
167
- // Style inputs accordingly
168
- input,
169
- select,
170
- textarea {
171
- color: @textColor;
172
- border-color: @borderColor;
173
- &:focus {
174
- border-color: darken(@borderColor, 10%);
175
- .box-shadow(0 0 6px lighten(@borderColor, 20%));
176
- }
177
- }
178
- // Give a small background color for input-prepend/-append
179
- .input-prepend .add-on,
180
- .input-append .add-on {
181
- color: @textColor;
182
- background-color: @backgroundColor;
183
- border-color: @textColor;
184
- }
185
- }
186
-
187
-
188
-
189
- // CSS3 PROPERTIES
190
- // --------------------------------------------------
191
-
192
- // Border Radius
193
- .border-radius(@radius: 5px) {
194
- -webkit-border-radius: @radius;
195
- -moz-border-radius: @radius;
196
- border-radius: @radius;
197
- }
198
-
199
- // Drop shadows
200
- .box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
201
- -webkit-box-shadow: @shadow;
202
- -moz-box-shadow: @shadow;
203
- box-shadow: @shadow;
204
- }
205
-
206
- // Transitions
207
- .transition(@transition) {
208
- -webkit-transition: @transition;
209
- -moz-transition: @transition;
210
- -ms-transition: @transition;
211
- -o-transition: @transition;
212
- transition: @transition;
213
- }
214
-
215
- // Transformations
216
- .rotate(@degrees) {
217
- -webkit-transform: rotate(@degrees);
218
- -moz-transform: rotate(@degrees);
219
- -ms-transform: rotate(@degrees);
220
- -o-transform: rotate(@degrees);
221
- transform: rotate(@degrees);
222
- }
223
- .scale(@ratio) {
224
- -webkit-transform: scale(@ratio);
225
- -moz-transform: scale(@ratio);
226
- -ms-transform: scale(@ratio);
227
- -o-transform: scale(@ratio);
228
- transform: scale(@ratio);
229
- }
230
- .translate(@x: 0, @y: 0) {
231
- -webkit-transform: translate(@x, @y);
232
- -moz-transform: translate(@x, @y);
233
- -ms-transform: translate(@x, @y);
234
- -o-transform: translate(@x, @y);
235
- transform: translate(@x, @y);
236
- }
237
- .skew(@x: 0, @y: 0) {
238
- -webkit-transform: skew(@x, @y);
239
- -moz-transform: skew(@x, @y);
240
- -ms-transform: skew(@x, @y);
241
- -o-transform: skew(@x, @y);
242
- transform: skew(@x, @y);
243
- }
244
- .translate3d(@x: 0, @y: 0, @z: 0) {
245
- -webkit-transform: translate(@x, @y, @z);
246
- -moz-transform: translate(@x, @y, @z);
247
- -ms-transform: translate(@x, @y, @z);
248
- -o-transform: translate(@x, @y, @z);
249
- transform: translate(@x, @y, @z);
250
- }
251
-
252
- // Background clipping
253
- // Heads up: FF 3.6 and under need "padding" instead of "padding-box"
254
- .background-clip(@clip) {
255
- -webkit-background-clip: @clip;
256
- -moz-background-clip: @clip;
257
- background-clip: @clip;
258
- }
259
-
260
- // Background sizing
261
- .background-size(@size){
262
- -webkit-background-size: @size;
263
- -moz-background-size: @size;
264
- -o-background-size: @size;
265
- background-size: @size;
266
- }
267
-
268
-
269
- // Box sizing
270
- .box-sizing(@boxmodel) {
271
- -webkit-box-sizing: @boxmodel;
272
- -moz-box-sizing: @boxmodel;
273
- -ms-box-sizing: @boxmodel;
274
- box-sizing: @boxmodel;
275
- }
276
-
277
- // User select
278
- // For selecting text on the page
279
- .user-select(@select) {
280
- -webkit-user-select: @select;
281
- -moz-user-select: @select;
282
- -o-user-select: @select;
283
- user-select: @select;
284
- }
285
-
286
- // Resize anything
287
- .resizable(@direction: both) {
288
- resize: @direction; // Options: horizontal, vertical, both
289
- overflow: auto; // Safari fix
290
- }
291
-
292
- // CSS3 Content Columns
293
- .content-columns(@columnCount, @columnGap: @gridColumnGutter) {
294
- -webkit-column-count: @columnCount;
295
- -moz-column-count: @columnCount;
296
- column-count: @columnCount;
297
- -webkit-column-gap: @columnGap;
298
- -moz-column-gap: @columnGap;
299
- column-gap: @columnGap;
300
- }
301
-
302
- // Opacity
303
- .opacity(@opacity: 100) {
304
- opacity: @opacity / 100;
305
- filter: ~"alpha(opacity=@{opacity})";
306
- }
307
-
308
-
309
-
310
- // BACKGROUNDS
311
- // --------------------------------------------------
312
-
313
- // Add an alphatransparency value to any background or border color (via Elyse Holladay)
314
- #translucent {
315
- .background(@color: @white, @alpha: 1) {
316
- background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
317
- }
318
- .border(@color: @white, @alpha: 1) {
319
- border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
320
- .background-clip(padding-box);
321
- }
322
- }
323
-
324
- // Gradient Bar Colors for buttons and alerts
325
- .gradientBar(@primaryColor, @secondaryColor) {
326
- #gradient > .vertical(@primaryColor, @secondaryColor);
327
- border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
328
- border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
329
- }
330
-
331
- // Gradients
332
- #gradient {
333
- .horizontal(@startColor: #555, @endColor: #333) {
334
- background-color: @endColor;
335
- background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
336
- background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
337
- background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
338
- background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
339
- background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
340
- background-image: linear-gradient(left, @startColor, @endColor); // Le standard
341
- background-repeat: repeat-x;
342
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down
343
- }
344
- .vertical(@startColor: #555, @endColor: #333) {
345
- background-color: mix(@startColor, @endColor, 60%);
346
- background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
347
- background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
348
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
349
- background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
350
- background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
351
- background-image: linear-gradient(top, @startColor, @endColor); // The standard
352
- background-repeat: repeat-x;
353
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down
354
- }
355
- .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
356
- background-color: @endColor;
357
- background-repeat: repeat-x;
358
- background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
359
- background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
360
- background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
361
- background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
362
- background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
363
- }
364
- .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
365
- background-color: mix(@midColor, @endColor, 80%);
366
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
367
- background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
368
- background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
369
- background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
370
- background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
371
- background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
372
- background-repeat: no-repeat;
373
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback
374
- }
375
- .radial(@innerColor: #555, @outerColor: #333) {
376
- background-color: @outerColor;
377
- background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
378
- background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
379
- background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
380
- background-image: -ms-radial-gradient(circle, @innerColor, @outerColor);
381
- background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
382
- background-repeat: no-repeat;
383
- }
384
- .striped(@color, @angle: -45deg) {
385
- background-color: @color;
386
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
387
- background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
388
- background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
389
- background-image: -ms-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
390
- background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
391
- background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
392
- }
393
- }
394
- // Reset filters for IE
395
- .reset-filter() {
396
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
397
- }
398
-
399
-
400
-
401
- // COMPONENT MIXINS
402
- // --------------------------------------------------
403
-
404
- // Horizontal dividers
405
- // -------------------------
406
- // Dividers (basically an hr) within dropdowns and nav lists
407
- .nav-divider() {
408
- height: 1px;
409
- margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
410
- overflow: hidden;
411
- background-color: #e5e5e5;
412
- border-bottom: 1px solid @white;
413
-
414
- // IE7 needs a set width since we gave a height. Restricting just
415
- // to IE7 to keep the 1px left/right space in other browsers.
416
- // It is unclear where IE is getting the extra space that we need
417
- // to negative-margin away, but so it goes.
418
- *width: 100%;
419
- *margin: -5px 0 5px;
420
- }
421
-
422
- // Button backgrounds
423
- // ------------------
424
- .buttonBackground(@startColor, @endColor) {
425
- // gradientBar will set the background to a pleasing blend of these, to support IE<=9
426
- .gradientBar(@startColor, @endColor);
427
- .reset-filter();
428
-
429
- // in these cases the gradient won't cover the background, so we override
430
- &:hover, &:active, &.active, &.disabled, &[disabled] {
431
- background-color: @endColor;
432
- }
433
-
434
- // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
435
- &:active,
436
- &.active {
437
- background-color: darken(@endColor, 10%) e("\9");
438
- }
439
- }
440
-
441
- // Navbar vertical align
442
- // -------------------------
443
- // Vertically center elements in the navbar.
444
- // Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
445
- .navbarVerticalAlign(@elementHeight) {
446
- margin-top: (@navbarHeight - @elementHeight) / 2;
447
- }
448
-
449
- // Popover arrows
450
- // -------------------------
451
- // For tipsies and popovers
452
- #popoverArrow {
453
- .top(@arrowWidth: 5px, @color: @black) {
454
- bottom: 0;
455
- left: 50%;
456
- margin-left: -@arrowWidth;
457
- border-left: @arrowWidth solid transparent;
458
- border-right: @arrowWidth solid transparent;
459
- border-top: @arrowWidth solid @color;
460
- }
461
- .left(@arrowWidth: 5px, @color: @black) {
462
- top: 50%;
463
- right: 0;
464
- margin-top: -@arrowWidth;
465
- border-top: @arrowWidth solid transparent;
466
- border-bottom: @arrowWidth solid transparent;
467
- border-left: @arrowWidth solid @color;
468
- }
469
- .bottom(@arrowWidth: 5px, @color: @black) {
470
- top: 0;
471
- left: 50%;
472
- margin-left: -@arrowWidth;
473
- border-left: @arrowWidth solid transparent;
474
- border-right: @arrowWidth solid transparent;
475
- border-bottom: @arrowWidth solid @color;
476
- }
477
- .right(@arrowWidth: 5px, @color: @black) {
478
- top: 50%;
479
- left: 0;
480
- margin-top: -@arrowWidth;
481
- border-top: @arrowWidth solid transparent;
482
- border-bottom: @arrowWidth solid transparent;
483
- border-right: @arrowWidth solid @color;
484
- }
485
- }
486
-
487
- // Grid System
488
- // -----------
489
-
490
- // Centered container element
491
- .container-fixed() {
492
- margin-left: auto;
493
- margin-right: auto;
494
- .clearfix();
495
- }
496
-
497
- // Table columns
498
- .tableColumns(@columnSpan: 1) {
499
- float: none; // undo default grid column styles
500
- width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
501
- margin-left: 0; // undo default grid column styles
502
- }
503
-
504
- // Make a Grid
505
- // Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
506
- .makeRow() {
507
- margin-left: @gridGutterWidth * -1;
508
- .clearfix();
509
- }
510
- .makeColumn(@columns: 1) {
511
- float: left;
512
- margin-left: @gridGutterWidth;
513
- width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
514
- }
515
-
516
- // The Grid
517
- #grid {
518
-
519
- .core (@gridColumnWidth, @gridGutterWidth) {
520
-
521
- .spanX (@index) when (@index > 0) {
522
- (~".span@{index}") { .span(@index); }
523
- .spanX(@index - 1);
524
- }
525
- .spanX (0) {}
526
-
527
- .offsetX (@index) when (@index > 0) {
528
- (~".offset@{index}") { .offset(@index); }
529
- .offsetX(@index - 1);
530
- }
531
- .offsetX (0) {}
532
-
533
- .offset (@columns) {
534
- margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)) + (@gridGutterWidth * 2);
535
- }
536
-
537
- .span (@columns) {
538
- width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
539
- }
540
-
541
- .row {
542
- margin-left: @gridGutterWidth * -1;
543
- .clearfix();
544
- }
545
-
546
- [class*="span"] {
547
- float: left;
548
- margin-left: @gridGutterWidth;
549
- }
550
-
551
- // Set the container width, and override it for fixed navbars in media queries
552
- .container,
553
- .navbar-fixed-top .container,
554
- .navbar-fixed-bottom .container { .span(@gridColumns); }
555
-
556
- // generate .spanX and .offsetX
557
- .spanX (@gridColumns);
558
- .offsetX (@gridColumns);
559
-
560
- }
561
-
562
- .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
563
-
564
- .spanX (@index) when (@index > 0) {
565
- (~"> .span@{index}") { .span(@index); }
566
- .spanX(@index - 1);
567
- }
568
- .spanX (0) {}
569
-
570
- .span (@columns) {
571
- width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
572
- }
573
-
574
- .row-fluid {
575
- width: 100%;
576
- .clearfix();
577
- > [class*="span"] {
578
- float: left;
579
- margin-left: @fluidGridGutterWidth;
580
- }
581
- > [class*="span"]:first-child {
582
- margin-left: 0;
583
- }
584
-
585
- // generate .spanX
586
- .spanX (@gridColumns);
587
- }
588
-
589
- }
590
-
591
- .input(@gridColumnWidth, @gridGutterWidth) {
592
-
593
- .spanX (@index) when (@index > 0) {
594
- (~"input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index}") { .span(@index); }
595
- .spanX(@index - 1);
596
- }
597
- .spanX (0) {}
598
-
599
- .span(@columns) {
600
- width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 10;
601
- }
602
-
603
- input,
604
- textarea,
605
- .uneditable-input {
606
- margin-left: 0; // override margin-left from core grid system
607
- }
608
-
609
- // generate .spanX
610
- .spanX (@gridColumns);
611
-
612
- }
613
-
614
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/navs.less DELETED
@@ -1,363 +0,0 @@
1
- // NAVIGATIONS
2
- // -----------
3
-
4
-
5
-
6
- // BASE CLASS
7
- // ----------
8
-
9
- .nav {
10
- margin-left: 0;
11
- margin-bottom: @baseLineHeight;
12
- list-style: none;
13
- }
14
-
15
- // Make links block level
16
- .nav > li > a {
17
- display: block;
18
- }
19
- .nav > li > a:hover {
20
- text-decoration: none;
21
- background-color: @grayLighter;
22
- }
23
-
24
- // Nav headers (for dropdowns and lists)
25
- .nav .nav-header {
26
- display: block;
27
- padding: 3px 15px;
28
- font-size: 11px;
29
- font-weight: bold;
30
- line-height: @baseLineHeight;
31
- color: @grayLight;
32
- text-shadow: 0 1px 0 rgba(255,255,255,.5);
33
- text-transform: uppercase;
34
- }
35
- // Space them out when they follow another list item (link)
36
- .nav li + .nav-header {
37
- margin-top: 9px;
38
- }
39
-
40
-
41
- // NAV LIST
42
- // --------
43
-
44
- .nav-list {
45
- padding-left: 15px;
46
- padding-right: 15px;
47
- margin-bottom: 0;
48
- }
49
- .nav-list > li > a,
50
- .nav-list .nav-header {
51
- margin-left: -15px;
52
- margin-right: -15px;
53
- text-shadow: 0 1px 0 rgba(255,255,255,.5);
54
- }
55
- .nav-list > li > a {
56
- padding: 3px 15px;
57
- }
58
- .nav-list > .active > a,
59
- .nav-list > .active > a:hover {
60
- color: @white;
61
- text-shadow: 0 -1px 0 rgba(0,0,0,.2);
62
- background-color: @linkColor;
63
- }
64
- .nav-list [class^="icon-"] {
65
- margin-right: 2px;
66
- }
67
- // Dividers (basically an hr) within the dropdown
68
- .nav-list .divider {
69
- .nav-divider();
70
- }
71
-
72
-
73
-
74
- // TABS AND PILLS
75
- // -------------
76
-
77
- // Common styles
78
- .nav-tabs,
79
- .nav-pills {
80
- .clearfix();
81
- }
82
- .nav-tabs > li,
83
- .nav-pills > li {
84
- float: left;
85
- }
86
- .nav-tabs > li > a,
87
- .nav-pills > li > a {
88
- padding-right: 12px;
89
- padding-left: 12px;
90
- margin-right: 2px;
91
- line-height: 14px; // keeps the overall height an even number
92
- }
93
-
94
- // TABS
95
- // ----
96
-
97
- // Give the tabs something to sit on
98
- .nav-tabs {
99
- border-bottom: 1px solid #ddd;
100
- }
101
-
102
- // Make the list-items overlay the bottom border
103
- .nav-tabs > li {
104
- margin-bottom: -1px;
105
- }
106
-
107
- // Actual tabs (as links)
108
- .nav-tabs > li > a {
109
- padding-top: 8px;
110
- padding-bottom: 8px;
111
- line-height: @baseLineHeight;
112
- border: 1px solid transparent;
113
- .border-radius(4px 4px 0 0);
114
- &:hover {
115
- border-color: @grayLighter @grayLighter #ddd;
116
- }
117
- }
118
- // Active state, and it's :hover to override normal :hover
119
- .nav-tabs > .active > a,
120
- .nav-tabs > .active > a:hover {
121
- color: @gray;
122
- background-color: @white;
123
- border: 1px solid #ddd;
124
- border-bottom-color: transparent;
125
- cursor: default;
126
- }
127
-
128
- // PILLS
129
- // -----
130
-
131
- // Links rendered as pills
132
- .nav-pills > li > a {
133
- padding-top: 8px;
134
- padding-bottom: 8px;
135
- margin-top: 2px;
136
- margin-bottom: 2px;
137
- .border-radius(5px);
138
- }
139
-
140
- // Active state
141
- .nav-pills > .active > a,
142
- .nav-pills > .active > a:hover {
143
- color: @white;
144
- background-color: @linkColor;
145
- }
146
-
147
-
148
-
149
- // STACKED NAV
150
- // -----------
151
-
152
- // Stacked tabs and pills
153
- .nav-stacked > li {
154
- float: none;
155
- }
156
- .nav-stacked > li > a {
157
- margin-right: 0; // no need for the gap between nav items
158
- }
159
-
160
- // Tabs
161
- .nav-tabs.nav-stacked {
162
- border-bottom: 0;
163
- }
164
- .nav-tabs.nav-stacked > li > a {
165
- border: 1px solid #ddd;
166
- .border-radius(0);
167
- }
168
- .nav-tabs.nav-stacked > li:first-child > a {
169
- .border-radius(4px 4px 0 0);
170
- }
171
- .nav-tabs.nav-stacked > li:last-child > a {
172
- .border-radius(0 0 4px 4px);
173
- }
174
- .nav-tabs.nav-stacked > li > a:hover {
175
- border-color: #ddd;
176
- z-index: 2;
177
- }
178
-
179
- // Pills
180
- .nav-pills.nav-stacked > li > a {
181
- margin-bottom: 3px;
182
- }
183
- .nav-pills.nav-stacked > li:last-child > a {
184
- margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
185
- }
186
-
187
-
188
-
189
- // DROPDOWNS
190
- // ---------
191
-
192
- // Position the menu
193
- .nav-tabs .dropdown-menu,
194
- .nav-pills .dropdown-menu {
195
- margin-top: 1px;
196
- border-width: 1px;
197
- }
198
- .nav-pills .dropdown-menu {
199
- .border-radius(4px);
200
- }
201
-
202
- // Default dropdown links
203
- // -------------------------
204
- // Make carets use linkColor to start
205
- .nav-tabs .dropdown-toggle .caret,
206
- .nav-pills .dropdown-toggle .caret {
207
- border-top-color: @linkColor;
208
- border-bottom-color: @linkColor;
209
- margin-top: 6px;
210
- }
211
- .nav-tabs .dropdown-toggle:hover .caret,
212
- .nav-pills .dropdown-toggle:hover .caret {
213
- border-top-color: @linkColorHover;
214
- border-bottom-color: @linkColorHover;
215
- }
216
-
217
- // Active dropdown links
218
- // -------------------------
219
- .nav-tabs .active .dropdown-toggle .caret,
220
- .nav-pills .active .dropdown-toggle .caret {
221
- border-top-color: @grayDark;
222
- border-bottom-color: @grayDark;
223
- }
224
-
225
- // Active:hover dropdown links
226
- // -------------------------
227
- .nav > .dropdown.active > a:hover {
228
- color: @black;
229
- cursor: pointer;
230
- }
231
-
232
- // Open dropdowns
233
- // -------------------------
234
- .nav-tabs .open .dropdown-toggle,
235
- .nav-pills .open .dropdown-toggle,
236
- .nav > .open.active > a:hover {
237
- color: @white;
238
- background-color: @grayLight;
239
- border-color: @grayLight;
240
- }
241
- .nav .open .caret,
242
- .nav .open.active .caret,
243
- .nav .open a:hover .caret {
244
- border-top-color: @white;
245
- border-bottom-color: @white;
246
- .opacity(100);
247
- }
248
-
249
- // Dropdowns in stacked tabs
250
- .tabs-stacked .open > a:hover {
251
- border-color: @grayLight;
252
- }
253
-
254
-
255
-
256
- // TABBABLE
257
- // --------
258
-
259
-
260
- // COMMON STYLES
261
- // -------------
262
-
263
- // Clear any floats
264
- .tabbable {
265
- .clearfix();
266
- }
267
- .tab-content {
268
- display: table; // prevent content from running below tabs
269
- width: 100%;
270
- }
271
-
272
- // Remove border on bottom, left, right
273
- .tabs-below .nav-tabs,
274
- .tabs-right .nav-tabs,
275
- .tabs-left .nav-tabs {
276
- border-bottom: 0;
277
- }
278
-
279
- // Show/hide tabbable areas
280
- .tab-content > .tab-pane,
281
- .pill-content > .pill-pane {
282
- display: none;
283
- }
284
- .tab-content > .active,
285
- .pill-content > .active {
286
- display: block;
287
- }
288
-
289
-
290
- // BOTTOM
291
- // ------
292
-
293
- .tabs-below .nav-tabs {
294
- border-top: 1px solid #ddd;
295
- }
296
- .tabs-below .nav-tabs > li {
297
- margin-top: -1px;
298
- margin-bottom: 0;
299
- }
300
- .tabs-below .nav-tabs > li > a {
301
- .border-radius(0 0 4px 4px);
302
- &:hover {
303
- border-bottom-color: transparent;
304
- border-top-color: #ddd;
305
- }
306
- }
307
- .tabs-below .nav-tabs .active > a,
308
- .tabs-below .nav-tabs .active > a:hover {
309
- border-color: transparent #ddd #ddd #ddd;
310
- }
311
-
312
- // LEFT & RIGHT
313
- // ------------
314
-
315
- // Common styles
316
- .tabs-left .nav-tabs > li,
317
- .tabs-right .nav-tabs > li {
318
- float: none;
319
- }
320
- .tabs-left .nav-tabs > li > a,
321
- .tabs-right .nav-tabs > li > a {
322
- min-width: 74px;
323
- margin-right: 0;
324
- margin-bottom: 3px;
325
- }
326
-
327
- // Tabs on the left
328
- .tabs-left .nav-tabs {
329
- float: left;
330
- margin-right: 19px;
331
- border-right: 1px solid #ddd;
332
- }
333
- .tabs-left .nav-tabs > li > a {
334
- margin-right: -1px;
335
- .border-radius(4px 0 0 4px);
336
- }
337
- .tabs-left .nav-tabs > li > a:hover {
338
- border-color: @grayLighter #ddd @grayLighter @grayLighter;
339
- }
340
- .tabs-left .nav-tabs .active > a,
341
- .tabs-left .nav-tabs .active > a:hover {
342
- border-color: #ddd transparent #ddd #ddd;
343
- *border-right-color: @white;
344
- }
345
-
346
- // Tabs on the right
347
- .tabs-right .nav-tabs {
348
- float: right;
349
- margin-left: 19px;
350
- border-left: 1px solid #ddd;
351
- }
352
- .tabs-right .nav-tabs > li > a {
353
- margin-left: -1px;
354
- .border-radius(0 4px 4px 0);
355
- }
356
- .tabs-right .nav-tabs > li > a:hover {
357
- border-color: @grayLighter @grayLighter @grayLighter #ddd;
358
- }
359
- .tabs-right .nav-tabs .active > a,
360
- .tabs-right .nav-tabs .active > a:hover {
361
- border-color: #ddd #ddd #ddd transparent;
362
- *border-left-color: @white;
363
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/reset.less DELETED
@@ -1,126 +0,0 @@
1
- // Reset.less
2
- // Adapted from Normalize.css http://github.com/necolas/normalize.css
3
- // ------------------------------------------------------------------------
4
-
5
- // Display in IE6-9 and FF3
6
- // -------------------------
7
-
8
- article,
9
- aside,
10
- details,
11
- figcaption,
12
- figure,
13
- footer,
14
- header,
15
- hgroup,
16
- nav,
17
- section {
18
- display: block;
19
- }
20
-
21
- // Display block in IE6-9 and FF3
22
- // -------------------------
23
-
24
- audio,
25
- canvas,
26
- video {
27
- display: inline-block;
28
- *display: inline;
29
- *zoom: 1;
30
- }
31
-
32
- // Prevents modern browsers from displaying 'audio' without controls
33
- // -------------------------
34
-
35
- audio:not([controls]) {
36
- display: none;
37
- }
38
-
39
- // Base settings
40
- // -------------------------
41
-
42
- html {
43
- font-size: 100%;
44
- -webkit-text-size-adjust: 100%;
45
- -ms-text-size-adjust: 100%;
46
- }
47
- // Focus states
48
- a:focus {
49
- .tab-focus();
50
- }
51
- // Hover & Active
52
- a:hover,
53
- a:active {
54
- outline: 0;
55
- }
56
-
57
- // Prevents sub and sup affecting line-height in all browsers
58
- // -------------------------
59
-
60
- sub,
61
- sup {
62
- position: relative;
63
- font-size: 75%;
64
- line-height: 0;
65
- vertical-align: baseline;
66
- }
67
- sup {
68
- top: -0.5em;
69
- }
70
- sub {
71
- bottom: -0.25em;
72
- }
73
-
74
- // Img border in a's and image quality
75
- // -------------------------
76
-
77
- img {
78
- height: auto;
79
- border: 0;
80
- -ms-interpolation-mode: bicubic;
81
- vertical-align: middle;
82
- }
83
-
84
- // Forms
85
- // -------------------------
86
-
87
- // Font size in all browsers, margin changes, misc consistency
88
- button,
89
- input,
90
- select,
91
- textarea {
92
- margin: 0;
93
- font-size: 100%;
94
- vertical-align: middle;
95
- }
96
- button,
97
- input {
98
- *overflow: visible; // Inner spacing ie IE6/7
99
- line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
100
- }
101
- button::-moz-focus-inner,
102
- input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
103
- padding: 0;
104
- border: 0;
105
- }
106
- button,
107
- input[type="button"],
108
- input[type="reset"],
109
- input[type="submit"] {
110
- cursor: pointer; // Cursors on all buttons applied consistently
111
- -webkit-appearance: button; // Style clickable inputs in iOS
112
- }
113
- input[type="search"] { // Appearance in Safari/Chrome
114
- -webkit-appearance: textfield;
115
- -webkit-box-sizing: content-box;
116
- -moz-box-sizing: content-box;
117
- box-sizing: content-box;
118
- }
119
- input[type="search"]::-webkit-search-decoration,
120
- input[type="search"]::-webkit-search-cancel-button {
121
- -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
122
- }
123
- textarea {
124
- overflow: auto; // Remove vertical scrollbar in IE6-9
125
- vertical-align: top; // Readability and alignment cross-browser
126
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/scaffolding.less DELETED
@@ -1,29 +0,0 @@
1
- // Scaffolding
2
- // Basic and global styles for generating a grid system, structural layout, and page templates
3
- // -------------------------------------------------------------------------------------------
4
-
5
-
6
- // Body reset
7
- // ----------
8
-
9
- body {
10
- margin: 0;
11
- font-family: @baseFontFamily;
12
- font-size: @baseFontSize;
13
- line-height: @baseLineHeight;
14
- color: @textColor;
15
- background-color: @bodyBackground;
16
- }
17
-
18
-
19
- // Links
20
- // -----
21
-
22
- a {
23
- color: @linkColor;
24
- text-decoration: none;
25
- }
26
- a:hover {
27
- color: @linkColorHover;
28
- text-decoration: underline;
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/type.less DELETED
@@ -1,234 +0,0 @@
1
- // Typography.less
2
- // Headings, body text, lists, code, and more for a versatile and durable typography system
3
- // ----------------------------------------------------------------------------------------
4
-
5
-
6
- // BODY TEXT
7
- // ---------
8
-
9
- p {
10
- margin: 0 0 @baseLineHeight / 2;
11
- font-family: @baseFontFamily;
12
- font-size: @baseFontSize;
13
- line-height: @baseLineHeight;
14
- small {
15
- font-size: @baseFontSize - 2;
16
- color: @grayLight;
17
- }
18
- }
19
- .lead {
20
- margin-bottom: @baseLineHeight;
21
- font-size: 20px;
22
- font-weight: 200;
23
- line-height: @baseLineHeight * 1.5;
24
- }
25
-
26
- // HEADINGS
27
- // --------
28
-
29
- h1, h2, h3, h4, h5, h6 {
30
- margin: 0;
31
- font-family: @headingsFontFamily;
32
- font-weight: @headingsFontWeight;
33
- color: @headingsColor;
34
- text-rendering: optimizelegibility; // Fix the character spacing for headings
35
- small {
36
- font-weight: normal;
37
- color: @grayLight;
38
- }
39
- }
40
- h1 {
41
- font-size: 30px;
42
- line-height: @baseLineHeight * 2;
43
- small {
44
- font-size: 18px;
45
- }
46
- }
47
- h2 {
48
- font-size: 24px;
49
- line-height: @baseLineHeight * 2;
50
- small {
51
- font-size: 18px;
52
- }
53
- }
54
- h3 {
55
- line-height: @baseLineHeight * 1.5;
56
- font-size: 18px;
57
- small {
58
- font-size: 14px;
59
- }
60
- }
61
- h4, h5, h6 {
62
- line-height: @baseLineHeight;
63
- }
64
- h4 {
65
- font-size: 14px;
66
- small {
67
- font-size: 12px;
68
- }
69
- }
70
- h5 {
71
- font-size: 12px;
72
- }
73
- h6 {
74
- font-size: 11px;
75
- color: @grayLight;
76
- text-transform: uppercase;
77
- }
78
-
79
- // Page header
80
- .page-header {
81
- padding-bottom: @baseLineHeight - 1;
82
- margin: @baseLineHeight 0;
83
- border-bottom: 1px solid @grayLighter;
84
- }
85
- .page-header h1 {
86
- line-height: 1;
87
- }
88
-
89
-
90
-
91
- // LISTS
92
- // -----
93
-
94
- // Unordered and Ordered lists
95
- ul, ol {
96
- padding: 0;
97
- margin: 0 0 @baseLineHeight / 2 25px;
98
- }
99
- ul ul,
100
- ul ol,
101
- ol ol,
102
- ol ul {
103
- margin-bottom: 0;
104
- }
105
- ul {
106
- list-style: disc;
107
- }
108
- ol {
109
- list-style: decimal;
110
- }
111
- li {
112
- line-height: @baseLineHeight;
113
- }
114
- ul.unstyled,
115
- ol.unstyled {
116
- margin-left: 0;
117
- list-style: none;
118
- }
119
-
120
- // Description Lists
121
- dl {
122
- margin-bottom: @baseLineHeight;
123
- }
124
- dt,
125
- dd {
126
- line-height: @baseLineHeight;
127
- }
128
- dt {
129
- font-weight: bold;
130
- line-height: @baseLineHeight - 1; // fix jank Helvetica Neue font bug
131
- }
132
- dd {
133
- margin-left: @baseLineHeight / 2;
134
- }
135
- // Horizontal layout (like forms)
136
- .dl-horizontal {
137
- dt {
138
- float: left;
139
- clear: left;
140
- width: 120px;
141
- text-align: right;
142
- }
143
- dd {
144
- margin-left: 130px;
145
- }
146
- }
147
-
148
- // MISC
149
- // ----
150
-
151
- // Horizontal rules
152
- hr {
153
- margin: @baseLineHeight 0;
154
- border: 0;
155
- border-top: 1px solid @hrBorder;
156
- border-bottom: 1px solid @white;
157
- }
158
-
159
- // Emphasis
160
- strong {
161
- font-weight: bold;
162
- }
163
- em {
164
- font-style: italic;
165
- }
166
- .muted {
167
- color: @grayLight;
168
- }
169
-
170
- // Abbreviations and acronyms
171
- abbr[title] {
172
- border-bottom: 1px dotted #ddd;
173
- cursor: help;
174
- }
175
- abbr.initialism {
176
- font-size: 90%;
177
- text-transform: uppercase;
178
- }
179
-
180
- // Blockquotes
181
- blockquote {
182
- padding: 0 0 0 15px;
183
- margin: 0 0 @baseLineHeight;
184
- border-left: 5px solid @grayLighter;
185
- p {
186
- margin-bottom: 0;
187
- #font > .shorthand(16px,300,@baseLineHeight * 1.25);
188
- }
189
- small {
190
- display: block;
191
- line-height: @baseLineHeight;
192
- color: @grayLight;
193
- &:before {
194
- content: '\2014 \00A0';
195
- }
196
- }
197
-
198
- // Float right with text-align: right
199
- &.pull-right {
200
- float: right;
201
- padding-left: 0;
202
- padding-right: 15px;
203
- border-left: 0;
204
- border-right: 5px solid @grayLighter;
205
- p,
206
- small {
207
- text-align: right;
208
- }
209
- }
210
- }
211
-
212
- // Quotes
213
- q:before,
214
- q:after,
215
- blockquote:before,
216
- blockquote:after {
217
- content: "";
218
- }
219
-
220
- // Addresses
221
- address {
222
- display: block;
223
- margin-bottom: @baseLineHeight;
224
- line-height: @baseLineHeight;
225
- font-style: normal;
226
- }
227
-
228
- // Misc
229
- small {
230
- font-size: 100%;
231
- }
232
- cite {
233
- font-style: normal;
234
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/utilities.less DELETED
@@ -1,23 +0,0 @@
1
- // UTILITY CLASSES
2
- // ---------------
3
-
4
- // Quick floats
5
- .pull-right {
6
- float: right;
7
- }
8
- .pull-left {
9
- float: left;
10
- }
11
-
12
- // Toggling content
13
- .hide {
14
- display: none;
15
- }
16
- .show {
17
- display: block;
18
- }
19
-
20
- // Visibility
21
- .invisible {
22
- visibility: hidden;
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/less/variables.less DELETED
@@ -1,205 +0,0 @@
1
- // Variables.less
2
- // Variables to customize the look and feel of Bootstrap
3
- // -----------------------------------------------------
4
-
5
-
6
-
7
- // GLOBAL VALUES
8
- // --------------------------------------------------
9
-
10
-
11
- // Grays
12
- // -------------------------
13
- @black: #000;
14
- @grayDarker: #222;
15
- @grayDark: #333;
16
- @gray: #555;
17
- @grayLight: #999;
18
- @grayLighter: #eee;
19
- @white: #fff;
20
-
21
-
22
- // Accent colors
23
- // -------------------------
24
- @blue: #269DD9;
25
- @blueDark: #0974AA;
26
- @teal: #3A77A6;
27
- @tealDark: #135486;
28
- @turquoise: #47c3ce;
29
- @green: #60AC39;
30
- @greenDark: saturate(darken(@green, 10%), 10%);
31
- @red: #F05C4C;
32
- @yellow: #fdcc46;
33
- @orange: #E08652;
34
- @pink: #f54365;
35
- @purple: #532b81;
36
-
37
-
38
- // Scaffolding
39
- // -------------------------
40
- @bodyBackground: @white;
41
- @textColor: @grayDark;
42
-
43
-
44
- // Links
45
- // -------------------------
46
- @linkColor: @greenDark;
47
- @linkColorHover: darken(@linkColor, 15%);
48
-
49
-
50
- // Typography
51
- // -------------------------
52
- @baseFontSize: 13px;
53
- @baseFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
54
- @baseLineHeight: 18px;
55
- @altFontFamily: Georgia, "Times New Roman", Times, serif;
56
-
57
- @headingsFontFamily: 'Droid Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
58
- @headingsFontWeight: bold;
59
- @headingsColor: @tealDark;
60
-
61
-
62
- // Tables
63
- // -------------------------
64
- @tableBackground: transparent; // overall background-color
65
- @tableBackgroundAccent: #f9f9f9; // for striping
66
- @tableBackgroundHover: #f5f5f5; // for hover
67
- @tableBorder: #ddd; // table and cell border
68
-
69
-
70
- // Buttons
71
- // -------------------------
72
- @btnBackground: @white;
73
- @btnBackgroundHighlight: darken(@white, 10%);
74
- @btnBorder: darken(@white, 20%);
75
-
76
- @btnPrimaryBackground: lighten(@green, 5%);
77
- @btnPrimaryBackgroundHighlight: darken(spin(@btnPrimaryBackground, 15%), 10%);
78
-
79
- @btnInfoBackground: #5bc0de;
80
- @btnInfoBackgroundHighlight: #2f96b4;
81
-
82
- @btnSuccessBackground: #62c462;
83
- @btnSuccessBackgroundHighlight: #51a351;
84
-
85
- @btnWarningBackground: lighten(@orange, 15%);
86
- @btnWarningBackgroundHighlight: @orange;
87
-
88
- @btnDangerBackground: #ee5f5b;
89
- @btnDangerBackgroundHighlight: #bd362f;
90
-
91
- @btnInverseBackground: @gray;
92
- @btnInverseBackgroundHighlight: @grayDarker;
93
-
94
-
95
- // Forms
96
- // -------------------------
97
- @inputBackground: @white;
98
- @inputBorder: #ccc;
99
- @inputDisabledBackground: @grayLighter;
100
-
101
-
102
- // Dropdowns
103
- // -------------------------
104
- @dropdownBackground: @white;
105
- @dropdownBorder: rgba(0,0,0,.2);
106
- @dropdownLinkColor: @grayDark;
107
- @dropdownLinkColorHover: @white;
108
- @dropdownLinkBackgroundHover: @linkColor;
109
-
110
-
111
-
112
-
113
- // COMPONENT VARIABLES
114
- // --------------------------------------------------
115
-
116
- // Z-index master list
117
- // -------------------------
118
- // Used for a bird's eye view of components dependent on the z-axis
119
- // Try to avoid customizing these :)
120
- @zindexDropdown: 1000;
121
- @zindexPopover: 1010;
122
- @zindexTooltip: 1020;
123
- @zindexFixedNavbar: 1030;
124
- @zindexModalBackdrop: 1040;
125
- @zindexModal: 1050;
126
-
127
-
128
- // Sprite icons path
129
- // -------------------------
130
- @iconSpritePath: "../img/glyphicons-halflings.png";
131
- @iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
132
-
133
-
134
- // Input placeholder text color
135
- // -------------------------
136
- @placeholderText: @grayLight;
137
-
138
-
139
- // Hr border color
140
- // -------------------------
141
- @hrBorder: @grayLighter;
142
-
143
-
144
- // Navbar
145
- // -------------------------
146
- @navbarHeight: 40px;
147
- @navbarBackground: @grayDarker;
148
- @navbarBackgroundHighlight: @grayDark;
149
-
150
- @navbarText: @grayLight;
151
- @navbarLinkColor: @grayLight;
152
- @navbarLinkColorHover: @white;
153
- @navbarLinkColorActive: @navbarLinkColorHover;
154
- @navbarLinkBackgroundHover: transparent;
155
- @navbarLinkBackgroundActive: @navbarBackground;
156
-
157
- @navbarSearchBackground: lighten(@navbarBackground, 25%);
158
- @navbarSearchBackgroundFocus: @white;
159
- @navbarSearchBorder: darken(@navbarSearchBackground, 30%);
160
- @navbarSearchPlaceholderColor: #ccc;
161
-
162
-
163
- // Hero unit
164
- // -------------------------
165
- @heroUnitBackground: @grayLighter;
166
- @heroUnitHeadingColor: inherit;
167
- @heroUnitLeadColor: inherit;
168
-
169
-
170
- // Form states and alerts
171
- // -------------------------
172
- @warningText: #c09853;
173
- @warningBackground: #fcf8e3;
174
- @warningBorder: darken(spin(@warningBackground, -10), 3%);
175
-
176
- @errorText: #b94a48;
177
- @errorBackground: #f2dede;
178
- @errorBorder: darken(spin(@errorBackground, -10), 3%);
179
-
180
- @successText: #468847;
181
- @successBackground: #dff0d8;
182
- @successBorder: darken(spin(@successBackground, -10), 5%);
183
-
184
- @infoText: #3a87ad;
185
- @infoBackground: #d9edf7;
186
- @infoBorder: darken(spin(@infoBackground, -10), 7%);
187
-
188
-
189
-
190
-
191
- // GRID
192
- // --------------------------------------------------
193
-
194
- // Default 940px grid
195
- // -------------------------
196
- @gridColumns: 12;
197
- @gridColumnWidth: 60px;
198
- @gridGutterWidth: 20px;
199
- @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
200
-
201
-
202
- // Fluid grid
203
- // -------------------------
204
- @fluidGridColumnWidth: 6.382978723%;
205
- @fluidGridGutterWidth: 2.127659574%;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/view/admin/themes-updated.php CHANGED
@@ -16,6 +16,6 @@
16
  <?php _e( 'Whenever core files are updated, please be sure to reload your web browser to make sure the most recent versions of the files are used.', AI1EC_PLUGIN_NAME ); ?>
17
  </p></div>
18
 
19
- <p><a class="button" href="<?php echo AI1EC_SETTINGS_BASE_URL; ?>"><?php _e( 'All-in-One Calendar Settings »', AI1EC_PLUGIN_NAME ); ?></a></p>
20
 
21
  </div>
16
  <?php _e( 'Whenever core files are updated, please be sure to reload your web browser to make sure the most recent versions of the files are used.', AI1EC_PLUGIN_NAME ); ?>
17
  </p></div>
18
 
19
+ <p><a class="button" href="<?php echo AI1EC_SETTINGS_BASE_URL; ?>"><?php _e( 'All-in-One Event Calendar Settings »', AI1EC_PLUGIN_NAME ); ?></a></p>
20
 
21
  </div>
app/view/admin/video_modal.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="timely">
2
+ <div class="modal hide" id="<?php echo $modal_id; ?>" style="width: 600px; margin-left: -300px; margin-top: -235px;">
3
+ <div class="modal-header">
4
+ <button class="close" data-dismiss="modal">×</button>
5
+ <h1><small><?php echo esc_html( $title ); ?></small></h1>
6
+ </div>
7
+ <div id="<?php echo $video_container_id; ?>"></div>
8
+ <?php if ( isset( $footer ) ): ?>
9
+ <div class="modal-footer">
10
+ <?php echo $footer; ?>
11
+ </div>
12
+ <?php endif; ?>
13
+ </div>
14
+ </div>
15
+
16
+ <script type="text/javascript">
17
+ /* <![CDATA[ */
18
+ var ai1ecVideo = function() {
19
+ // Load the YouTube IFrame Player API code asynchronously.
20
+ var tag = document.createElement( 'script' );
21
+ tag.src = "//www.youtube.com/iframe_api";
22
+ var firstScriptTag = document.getElementsByTagName( 'script' )[0];
23
+ firstScriptTag.parentNode.insertBefore( tag, firstScriptTag );
24
+
25
+ // Create an <iframe> (and YouTube player) after the API code downloads.
26
+ function onYouTubeIframeAPIReady() {
27
+ var player = new YT.Player( '<?php echo $video_container_id; ?>', {
28
+ height: '368',
29
+ width: '600',
30
+ videoId: '<?php echo $youtube_id; ?>'
31
+ });
32
+ player.getIframe().style.display = "block";
33
+
34
+ jQuery( '#<?php echo $modal_id; ?>' ).bind( 'hide', function() {
35
+ player.stopVideo();
36
+ });
37
+ }
38
+
39
+ return {
40
+ onYouTubeIframeAPIReady: onYouTubeIframeAPIReady
41
+ }
42
+ }
43
+
44
+ var onYouTubeIframeAPIReady = ai1ecVideo().onYouTubeIframeAPIReady;
45
+ /* ]]> */
46
+ </script>
language/all-in-one-event-calendar-fr_FR.mo CHANGED
Binary file
language/all-in-one-event-calendar-fr_FR.po CHANGED
@@ -2,1437 +2,1678 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: All-in-One Event Calendar Plugin 1.0.9\n"
4
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
5
- "POT-Creation-Date: 2011-10-03 16:47:28+00:00\n"
6
- "PO-Revision-Date: 2011-11-16 14:06+0100\n"
7
- "Last-Translator: Thierry <tpouzaud@gmail.com>\n"
8
  "Language-Team: \n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
- "X-Poedit-Language: \n"
14
- "X-Poedit-Country: \n"
15
  "X-Poedit-SourceCharset: utf-8\n"
16
- "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
17
- "X-Poedit-Basepath: \n"
18
- "X-Poedit-Bookmarks: \n"
19
  "X-Poedit-SearchPath-0: .\n"
20
- "X-Textdomain-Support: yes"
21
 
22
- #: app/helper/class-ai1ec-calendar-helper.php:615
23
- #@ all-in-one-event-calendar
24
- msgid "« Previous Events"
25
- msgstr "« Evénements précédents"
 
26
 
27
- #: app/helper/class-ai1ec-calendar-helper.php:622
28
- #@ all-in-one-event-calendar
29
- msgid "Next Events »"
30
- msgstr "Evènement à venir »"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
- #: app/helper/class-ai1ec-app-helper.php:147
33
- #@ all-in-one-event-calendar
 
 
 
 
 
 
 
 
 
 
34
  msgctxt "Custom post type name"
35
  msgid "Events"
36
  msgstr "Evénements"
37
 
38
- #: app/helper/class-ai1ec-app-helper.php:148
39
- #@ all-in-one-event-calendar
40
  msgctxt "Custom post type name (singular)"
41
  msgid "Event"
42
  msgstr "Evénements"
43
 
44
- #: app/helper/class-ai1ec-app-helper.php:149
45
- #@ all-in-one-event-calendar
46
  msgid "Add New"
47
  msgstr "Ajouter nouveau"
48
 
49
- #: app/helper/class-ai1ec-app-helper.php:150
50
- #@ all-in-one-event-calendar
51
  msgid "Add New Event"
52
  msgstr "Ajouter nouvel événement"
53
 
54
- #: app/helper/class-ai1ec-app-helper.php:151
55
- #@ all-in-one-event-calendar
56
  msgid "Edit Event"
57
  msgstr "Editer un événement"
58
 
59
- #: app/helper/class-ai1ec-app-helper.php:152
60
- #@ all-in-one-event-calendar
61
  msgid "New Event"
62
  msgstr "Nouvel événement"
63
 
64
- #: app/helper/class-ai1ec-app-helper.php:153
65
- #@ all-in-one-event-calendar
66
  msgid "View Event"
67
  msgstr "Voir l'événement"
68
 
69
- #: app/helper/class-ai1ec-app-helper.php:154
70
- #@ all-in-one-event-calendar
71
  msgid "Search Events"
72
  msgstr "Chercher des événements"
73
 
74
- #: app/helper/class-ai1ec-app-helper.php:155
75
- #@ all-in-one-event-calendar
76
  msgid "No Events found"
77
  msgstr "Aucun événement trouvé"
78
 
79
- #: app/helper/class-ai1ec-app-helper.php:156
80
- #@ all-in-one-event-calendar
81
  msgid "No Events found in Trash"
82
  msgstr "Aucun événement trouvé dans la corbeille"
83
 
84
- #: app/helper/class-ai1ec-app-helper.php:157
85
- #@ all-in-one-event-calendar
86
  msgid "Parent Event"
87
  msgstr "Evénement parent"
88
 
89
- #: app/helper/class-ai1ec-app-helper.php:158
90
- #: app/view/agenda-widget-form.php:88
91
- #@ all-in-one-event-calendar
92
  msgid "Events"
93
  msgstr "Evénements"
94
 
95
- #: app/helper/class-ai1ec-app-helper.php:205
96
- #@ all-in-one-event-calendar
97
  msgctxt "Event categories taxonomy"
98
  msgid "Event Categories"
99
  msgstr "Catégories d'événement"
100
 
101
- #: app/helper/class-ai1ec-app-helper.php:206
102
- #@ all-in-one-event-calendar
103
  msgctxt "Event categories taxonomy (singular)"
104
  msgid "Event Category"
105
  msgstr "Catégorie d'événement"
106
 
107
- #: app/helper/class-ai1ec-app-helper.php:213
108
- #@ all-in-one-event-calendar
109
  msgctxt "Event tags taxonomy"
110
  msgid "Event Tags"
111
- msgstr "Mots clef d'événement"
112
 
113
- #: app/helper/class-ai1ec-app-helper.php:214
114
- #@ all-in-one-event-calendar
115
  msgctxt "Event tags taxonomy (singular)"
116
  msgid "Event Tag"
117
- msgstr "Mot clef d'événement"
 
 
 
 
 
 
 
 
 
 
 
 
118
 
119
- #: app/helper/class-ai1ec-app-helper.php:313
120
- #, php-format
121
- #@ all-in-one-event-calendar
 
 
 
122
  msgid "All Events <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
123
  msgstr "Tous les événements <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
124
 
125
- #: app/helper/class-ai1ec-app-helper.php:319
126
- #@ all-in-one-event-calendar
127
  msgid "All Events"
128
  msgstr "Tous les événements"
129
 
130
- #: app/helper/class-ai1ec-app-helper.php:395
131
- #@ all-in-one-event-calendar
132
  msgid "Event Details"
133
  msgstr "Détail de l'événement"
134
 
135
- #: app/helper/class-ai1ec-app-helper.php:428
136
- #@ all-in-one-event-calendar
137
  msgid "Post Date"
138
  msgstr "Date de publication"
139
 
140
- #: app/helper/class-ai1ec-app-helper.php:429
141
- #@ all-in-one-event-calendar
142
  msgid "Event date/time"
143
  msgstr "Date/heure de l'événement"
144
 
145
- #: app/helper/class-ai1ec-app-helper.php:646
146
- #, php-format
147
- #@ all-in-one-event-calendar
148
- msgid "%sTo set up the plugin: %s 1. Select an option in the <strong>Calendar page</strong> dropdown list. %s 2. Select an option in the <strong>Timezone</strong> dropdown list. %s 3. Click <strong>Update Settings</strong>. %s"
149
- msgstr "%sPour configurer l'extension: %s 1. Sélectionnez une option dans la liste déroulante de la page <strong>Calendrier</strong> . %s 2. Sélectionnez une option dans la liste déroulante <strong>Fuseau Horaire</strong> . %s 3. Cliquez sur <strong>Mettre à jour</strong>. %s"
150
-
151
- #: app/helper/class-ai1ec-app-helper.php:648
152
- #@ all-in-one-event-calendar
153
- msgid "To set up the plugin: Select an option in the <strong>Calendar page</strong> dropdown list, the click <strong>Update Settings</strong>."
154
- msgstr "Pour paramétrer l'extension : sélectionnez une option dans la liste déroulante de la page <strong>Calendrier</strong>, puis cliquez sur <strong>Mettre à jour</strong>."
155
-
156
- #: app/helper/class-ai1ec-app-helper.php:650
157
- #@ all-in-one-event-calendar
158
- msgid "To set up the plugin: Select an option in the <strong>Timezone</strong> dropdown list, the click <strong>Update Settings</strong>."
159
- msgstr "Pour paramétrer l'extension: Sélectionnez une option dans la liste déroulante <strong>Fuseau Horaire</strong>, puis cliquez sur <strong>Mettre à jour</strong>."
160
-
161
- #: app/helper/class-ai1ec-app-helper.php:654
162
- #, php-format
163
- #@ all-in-one-event-calendar
164
- msgid "The plugin is installed, but has not been configured. <a href=\"%s\">Click here to set it up now »</a>"
165
- msgstr "L'extension est installée mais non configurée. <a href=\"%s\">Cliquez ici pour la configurer »</a>"
166
-
167
- #: app/helper/class-ai1ec-app-helper.php:660
168
- #@ all-in-one-event-calendar
169
- msgid "The plugin is installed, but has not been configured. Please log in as a WordPress Administrator to set it up."
170
- msgstr "L'extension est installée mais non configurée. Connectez vous en tant qu'Administrateur pour la configurer."
171
 
172
- #: app/helper/class-ai1ec-events-helper.php:319
173
- #: app/helper/class-ai1ec-events-helper.php:341
174
- #@ all-in-one-event-calendar
175
- msgid "No repeat"
176
- msgstr "Pas de répétition"
177
 
178
- #: app/helper/class-ai1ec-events-helper.php:554
179
- #: app/helper/class-ai1ec-events-helper.php:573
180
- #: app/helper/class-ai1ec-events-helper.php:1462
181
- #: app/helper/class-ai1ec-settings-helper.php:233
182
- #: app/view/box_time_and_date.php:58
183
- #@ all-in-one-event-calendar
184
- msgid "Daily"
185
- msgstr "Quotidien"
186
 
187
- #: app/helper/class-ai1ec-events-helper.php:555
188
- #: app/helper/class-ai1ec-events-helper.php:574
189
- #: app/helper/class-ai1ec-events-helper.php:1474
190
- #: app/view/box_time_and_date.php:59
191
- #@ all-in-one-event-calendar
192
- msgid "Weekly"
193
- msgstr "Hebdomadaire"
194
 
195
- #: app/helper/class-ai1ec-events-helper.php:556
196
- #: app/helper/class-ai1ec-events-helper.php:575
197
- #: app/helper/class-ai1ec-events-helper.php:1486
198
- #: app/view/box_time_and_date.php:60
199
- #@ all-in-one-event-calendar
200
- msgid "Monthly"
201
- msgstr "Mensuel"
202
 
203
- #: app/helper/class-ai1ec-events-helper.php:557
204
- #: app/helper/class-ai1ec-events-helper.php:576
205
- #: app/helper/class-ai1ec-events-helper.php:1498
206
- #: app/view/box_time_and_date.php:61
207
- #@ all-in-one-event-calendar
208
- msgid "Yearly"
209
- msgstr "Annuel"
210
 
211
- #: app/controller/class-ai1ec-events-controller.php:276
212
- #@ all-in-one-event-calendar
213
- msgid "times"
214
- msgstr "fois"
215
 
216
- #: app/helper/class-ai1ec-events-helper.php:1275
217
- #@ all-in-one-event-calendar
218
- msgid "Never"
219
- msgstr "jamais"
 
 
220
 
221
- #: app/helper/class-ai1ec-events-helper.php:1276
222
- #@ all-in-one-event-calendar
223
- msgid "After"
224
- msgstr "Après"
 
 
225
 
226
- #: app/helper/class-ai1ec-events-helper.php:1277
227
- #: app/view/box_time_and_date.php:84
228
- #@ all-in-one-event-calendar
229
- msgid "On date"
230
- msgstr "A la date"
 
 
 
 
 
 
 
231
 
232
- #: app/helper/class-ai1ec-settings-helper.php:85
233
- #@ all-in-one-event-calendar
234
- msgid "- Auto-Create New Page -"
235
- msgstr "- Création auto d'une nouvelle page"
236
 
237
- #: app/helper/class-ai1ec-settings-helper.php:106
238
- #, php-format
239
- #@ all-in-one-event-calendar
240
- msgid "View \"%s\" »"
241
- msgstr "Vue \"%s\" »"
242
 
243
- #: app/helper/class-ai1ec-settings-helper.php:148
244
- #: app/view/calendar.php:10
245
- #: app/view/calendar.php:11
246
- #: app/view/calendar.php:17
247
- #@ all-in-one-event-calendar
248
- msgid "Month"
249
- msgstr "Mois"
250
 
251
- #: app/controller/class-ai1ec-calendar-controller.php:288
252
- #: app/helper/class-ai1ec-settings-helper.php:151
253
- #: app/view/calendar.php:18
254
- #@ all-in-one-event-calendar
255
- msgid "Agenda"
256
- msgstr "Agenda"
257
 
258
- #: app/helper/class-ai1ec-settings-helper.php:227
259
- #@ all-in-one-event-calendar
260
- msgid "Hourly"
261
- msgstr "Horaire"
 
262
 
263
- #: app/helper/class-ai1ec-settings-helper.php:230
264
- #@ all-in-one-event-calendar
265
- msgid "Twice Daily"
266
- msgstr "2 fois par jour"
 
267
 
268
- #: app/helper/class-ai1ec-settings-helper.php:317
269
- #@ all-in-one-event-calendar
270
- msgid "Calendar"
271
- msgstr "Calendrier"
 
272
 
273
- #: app/view/box_ics_import_settings.php:2
274
- #@ all-in-one-event-calendar
275
- msgid "Auto-refresh"
276
- msgstr "MAJ-Auto"
 
277
 
278
- #: app/view/box_ics_import_settings.php:8
279
- #: app/view/feed_row.php:3
280
- #@ all-in-one-event-calendar
281
- msgid "iCalendar/.ics Feed URL:"
282
- msgstr "URL iCalendar/.ics Feed :"
283
 
284
- #: app/view/box_ics_import_settings.php:12
285
- #@ all-in-one-event-calendar
286
- msgid "Event category"
287
- msgstr "Catégorie"
288
 
289
- #: app/view/box_ics_import_settings.php:18
290
- #: app/view/feed_row.php:15
291
- #@ all-in-one-event-calendar
292
- msgid "Tag with"
293
- msgstr "Indexé avec"
294
 
295
- #: app/view/box_ics_import_settings.php:22
296
- #@ all-in-one-event-calendar
297
- msgid "+ Add new subscription"
298
- msgstr "+ Ajouter un contenu"
299
 
300
- #: app/view/calendar.php:27
301
- #@ all-in-one-event-calendar
302
- msgid "+ Post Your Event"
303
- msgstr "+ Poster votre événement"
304
 
305
- #: app/view/calendar.php:36
306
- #@ all-in-one-event-calendar
307
- msgid "Clear Filters"
308
- msgstr "Ré-initialiser les filtres"
309
 
310
- #: app/view/calendar.php:36
311
- #@ all-in-one-event-calendar
312
- msgid ""
313
- msgstr ""
314
 
315
- #: app/view/calendar.php:37
316
- #@ all-in-one-event-calendar
317
- msgid "Filter:"
318
- msgstr "Filtrer"
319
 
320
- #: app/view/calendar.php:42
321
- #@ all-in-one-event-calendar
322
- msgid "Categories ▾"
323
- msgstr "Catégorie"
324
 
325
- #: app/view/calendar.php:64
326
- #@ all-in-one-event-calendar
327
- msgid "Tags ▾"
328
- msgstr "Mots clefs"
329
 
330
- #: app/view/agenda-widget.php:67
331
- #: app/view/calendar.php:101
332
- #@ all-in-one-event-calendar
333
- msgid "Subscribe to this calendar using your favourite calendar program (iCal, Outlook, etc.)"
334
- msgstr "S'abonner à ce calendrier en utilisant votre logiciel d'agenda favori"
335
 
336
- #: app/view/agenda-widget.php:68
337
- #: app/view/calendar.php:102
338
- #@ all-in-one-event-calendar
339
- msgid "✔ Subscribe"
340
- msgstr "S'abonner"
341
 
342
- #: app/view/calendar.php:103
343
- #@ all-in-one-event-calendar
344
- msgid "to this filtered calendar"
345
- msgstr "à cette vue du calendrier"
346
 
347
- #: app/view/agenda-widget.php:72
348
- #: app/view/calendar.php:107
349
- #@ all-in-one-event-calendar
350
- msgid "Subscribe to this calendar in your Google Calendar"
351
- msgstr "S'abonner à ce calendrier dans votre agenda Google"
352
 
353
- #: app/view/calendar.php:109
354
- #@ all-in-one-event-calendar
355
- msgid "Subscribe in Google Calendar"
356
- msgstr "S'abonner dans l'agenda Google"
357
 
358
- #: app/view/box_the_seed_studio.php:3
359
- #@ all-in-one-event-calendar
360
- msgid "The Seed Studio"
361
- msgstr "Le Seed Studio"
362
-
363
- #: app/view/box_the_seed_studio.php:5
364
- #@ all-in-one-event-calendar
365
- msgid "The Seed Studio provides web development and support services for clients and web developers."
366
- msgstr "Le studio Seed propose des développement web et une assistance pour ces clients et développeurs."
367
-
368
- #: app/view/box_the_seed_studio.php:11
369
- #@ all-in-one-event-calendar
370
- msgid "Follow @the_seed_studio"
371
- msgstr "S'abonner @the_seed_studio"
372
-
373
- #: app/view/box_the_seed_studio.php:16
374
- #@ all-in-one-event-calendar
375
- msgid "Get Support<span> from one of our experienced pros</span>"
376
- msgstr "Obtenez de l'aide<span> de nos professionnels expérimentés</span>"
377
-
378
- #: app/view/box_the_seed_studio.php:18
379
- #@ all-in-one-event-calendar
380
- msgid "Support"
381
- msgstr "Assistance"
382
 
383
- #: app/view/box_the_seed_studio.php:20
384
- #@ all-in-one-event-calendar
385
- msgid "View plugin documentation"
386
- msgstr "Consulter la documentation de l'extension (anglais)"
387
-
388
- #: app/view/box_the_seed_studio.php:23
389
- #@ all-in-one-event-calendar
390
- msgid "You can also hire The Seed for support on a contract or per-hour basis for this plugin, for your website or for any of your Internet marketing needs (we can really help!)."
391
- msgstr "Vous pouvez également contractualiser avec The Seed pour un accompagnement (à l'heure ou autre) de ce plugin, pour votre site web ou pour tout vos besoins de marketing sur Internet (on peut vraiment vous aider !)."
392
-
393
- #: app/view/box_the_seed_studio.php:26
394
- #@ all-in-one-event-calendar
395
- msgid "Plugin users: The Seed gives support priority to clients. For free support from other WordPress users, visit the plugin's forum."
396
- msgstr "Utilisateurs de l'extension : The Seed apporte son assistance en priorité à ses clients. Pour une assistance gratuite des autres utilisateurs Wordpress, visitez le forum de l'extension."
397
-
398
- #: app/view/box_the_seed_studio.php:29
399
- #@ all-in-one-event-calendar
400
- msgid "Vote and Share"
401
- msgstr "Votez et partagez"
402
-
403
- #: app/view/box_the_seed_studio.php:32
404
- #@ all-in-one-event-calendar
405
- msgid "This plugin is offered free to the Wordpress Community under the GPL3 license. All we ask is that you:"
406
- msgstr "Cette extenions est offerte gratuitement à la communauté Wordpress sous license GPL3. Tout ce que nous vous demandons c'est :"
407
-
408
- #: app/view/box_the_seed_studio.php:34
409
- #@ all-in-one-event-calendar
410
- msgid "<a href=\"http://wordpress.org/extend/plugins/all-in-one-event-calendar/\" target=\"_blank\">Give it a five-star rating on wordpress.org</a> (if you think it deserves it!)"
411
- msgstr "<a href=\"http://wordpress.org/extend/plugins/all-in-one-event-calendar/\" target=\"_blank\">Donnez nous 5 étoiles sur wordpress.org</a> (si vous pensez que nous le méritons !)"
412
-
413
- #: app/view/box_the_seed_studio.php:35
414
- #@ all-in-one-event-calendar
415
- msgid "Link to the plugin page on our website"
416
- msgstr "Disposez un lien vers le site de l'extension sur votre site"
417
-
418
- #: app/view/box_the_seed_studio.php:36
419
- #@ all-in-one-event-calendar
420
- msgid "Become a Fan on Facebook"
421
- msgstr "Devenez un Fan sur Facebook"
422
-
423
- #: app/view/box_the_seed_studio.php:37
424
- #@ all-in-one-event-calendar
425
- msgid "Follow us on Twitter"
426
- msgstr "Suivez nous sur Twitter"
427
-
428
- #: app/view/settings.php:5
429
- #@ all-in-one-event-calendar
430
- msgid "All-in-one Event Calendar"
431
- msgstr "All-in-one Event Calendar"
432
-
433
- #: app/view/settings.php:17
434
- #@ all-in-one-event-calendar
435
- msgid "Update Settings"
436
- msgstr "Mettre à jour la configuration"
437
 
438
- #: app/view/event-excerpt.php:2
439
- #: app/view/event-multi.php:4
440
- #: app/view/event-single.php:5
441
- #@ all-in-one-event-calendar
442
- msgid "When:"
443
- msgstr "Quand:"
 
444
 
445
- #: app/view/event-single.php:8
446
- #@ all-in-one-event-calendar
447
- msgid "Back to Calendar »"
448
- msgstr "Retour au calendrier »"
 
 
 
449
 
450
- #: app/view/event-multi.php:14
451
- #: app/view/event-single.php:15
452
- #@ all-in-one-event-calendar
453
- msgid "Repeats:"
454
- msgstr "Répétitions:"
 
 
455
 
456
- #: app/view/event-excerpt.php:4
457
- #: app/view/event-multi.php:20
458
- #: app/view/event-single.php:20
459
- #@ all-in-one-event-calendar
460
- msgid "Where:"
461
- msgstr "Où:"
462
 
463
- #: app/view/event-single.php:27
464
- #@ all-in-one-event-calendar
465
- msgid "Add this event to your favourite calendar program (iCal, Outlook, etc.)"
466
- msgstr "Ajouter cet événement à votre logiciel d'agenda favori"
467
 
468
- #: app/view/event-single.php:28
469
- #@ all-in-one-event-calendar
470
- msgid "✔ Add to Calendar"
471
- msgstr "Ajouter au calendrier"
472
 
473
- #: app/view/event-single.php:31
474
- #@ all-in-one-event-calendar
475
- msgid "Add this event to your Google Calendar"
476
- msgstr "Ajouter cet événement à votre agenda Google"
477
 
478
- #: app/view/event-single.php:33
479
- #@ all-in-one-event-calendar
480
- msgid "Add to Google Calendar"
481
- msgstr "Ajouter à l'agenda Google"
482
 
483
- #: app/view/event-multi.php:33
484
- #: app/view/event-single.php:40
485
- #@ all-in-one-event-calendar
486
- msgid "Cost:"
487
- msgstr "Coût:"
488
 
489
- #: app/view/event-multi.php:39
490
- #: app/view/event-single.php:46
491
- #@ all-in-one-event-calendar
492
- msgid "Contact:"
493
- msgstr "Contact:"
494
 
495
- #: app/view/agenda.php:80
496
- #: app/view/event-multi.php:45
497
- #: app/view/event-single.php:52
498
- #@ all-in-one-event-calendar
499
- msgid "Categories:"
500
- msgstr "Catégories:"
501
 
502
- #: app/view/agenda.php:86
503
- #: app/view/event-multi.php:51
504
- #: app/view/event-single.php:59
505
- #@ all-in-one-event-calendar
506
- msgid "Tags:"
507
- msgstr "Mots clefs:"
508
-
509
- #: app/view/box_time_and_date.php:2
510
- #@ all-in-one-event-calendar
511
- msgid "Event date and time"
512
- msgstr "Date et heure de l'événement"
513
-
514
- #: app/view/box_time_and_date.php:8
515
- #@ all-in-one-event-calendar
516
- msgid "All-day event"
517
- msgstr "Journée entière"
518
-
519
- #: app/view/box_time_and_date.php:18
520
- #@ all-in-one-event-calendar
521
- msgid "Start date / time"
522
- msgstr "Date / Heure de début"
523
-
524
- #: app/view/box_time_and_date.php:31
525
- #@ all-in-one-event-calendar
526
- msgid "End date / time"
527
- msgstr "Date / heure de fin"
528
-
529
- #: app/view/box_time_and_date.php:46
530
- #@ all-in-one-event-calendar
531
- msgid "Repeat"
532
- msgstr "Répétition"
533
-
534
- #: app/view/box_time_and_date.php:70
535
- #@ all-in-one-event-calendar
536
- msgid "End"
537
- msgstr "Fin"
538
 
539
- #: app/view/box_time_and_date.php:77
540
- #@ all-in-one-event-calendar
541
- msgid "Ending after"
542
- msgstr "Se terminant après"
 
 
 
543
 
544
- #: app/view/admin_notices.php:2
545
- #@ all-in-one-event-calendar
546
- msgid "All-in-One Event Calendar Notice:"
547
- msgstr "Préavis All-in-One Event Calendar:"
 
 
548
 
549
- #: app/view/import.php:6
550
- #@ all-in-one-event-calendar
551
- msgid "Successfully imported events:"
552
- msgstr "L'importation des événements s'est bien passée"
 
 
553
 
554
- #: app/view/event_categories-color_picker.php:5
555
- #: app/view/event_categories-color_picker.php:19
556
- #@ all-in-one-event-calendar
557
- msgid "Category Color"
558
- msgstr "Couleur des catégories"
559
 
560
- #: app/view/event_categories-color_picker.php:13
561
- #: app/view/event_categories-color_picker.php:25
562
- #@ all-in-one-event-calendar
563
- msgid "Events in this category will be identified by this color"
564
- msgstr "Les événements de cette catégories seront identifiés de cette couleur"
565
 
566
- #: app/view/event-single-footer.php:4
567
- #, php-format
568
- #@ default
569
- msgid "This post was replicated from another site's <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
570
- msgstr "Cet article a été copié depuis un autre site <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
571
 
572
- #: app/view/event-single-footer.php:8
573
- #@ all-in-one-event-calendar
574
- msgid "View original post »"
575
- msgstr "Voir l'article original » "
576
 
577
- #: app/view/box_event_location.php:1
578
- #@ all-in-one-event-calendar
579
- msgid "Event location details"
580
- msgstr "Lieu de l'événement"
581
 
582
- #: app/view/box_event_location.php:7
583
- #@ all-in-one-event-calendar
584
- msgid "Venue name:"
585
- msgstr "Nom de la rue"
586
 
587
- #: app/view/box_event_location.php:17
588
- #@ all-in-one-event-calendar
589
- msgid "Address:"
590
- msgstr "Adresse:"
591
 
592
- #: app/view/box_event_location.php:27
593
- #@ all-in-one-event-calendar
594
- msgid "Show Google Map:"
595
- msgstr "Montrer la carte Google:"
596
 
597
- #: app/view/event-multi.php:7
598
- #@ all-in-one-event-calendar
599
- msgid "View in Calendar »"
600
- msgstr "Voir dans le calendrier »"
601
 
602
- #: app/view/event-multi.php:24
603
- #@ all-in-one-event-calendar
604
- msgid "View Map »"
605
- msgstr "Voir la carte »"
606
 
607
- #: app/view/box_general_settings.php:1
608
- #@ all-in-one-event-calendar
609
- msgid "Viewing Events"
610
- msgstr "Voir les événements"
611
 
612
- #: app/view/box_general_settings.php:3
613
- #@ all-in-one-event-calendar
614
- msgid "Calendar page:"
615
- msgstr "Page du calendrier"
616
 
617
- #: app/view/box_general_settings.php:7
618
- #@ all-in-one-event-calendar
619
- msgid "Default calendar view:"
620
- msgstr "Vue par défaut :"
621
 
622
- #: app/view/box_general_settings.php:12
623
- #@ all-in-one-event-calendar
624
- msgid "Timezone:"
625
- msgstr "Fuseau horaire:"
626
 
627
- #: app/view/box_general_settings.php:17
628
- #@ all-in-one-event-calendar
629
- msgid "Contain calendar in this DOM element:"
630
- msgstr "Réserver le calendrier à cette partie du DOM :"
631
 
632
- #: app/view/box_general_settings.php:19
633
- #@ all-in-one-event-calendar
634
- msgid "Optional. Provide a <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container."
635
- msgstr "Optionnel. Offre un <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">selecteur jQuery </a> qui renvoie à un seul élément du DOM. Remplace toute balisage existant trouvé dans la cible. Si laissé vide, le calendrier est affiché dans un cadre contenu dans la page normale."
636
 
637
- #: app/view/box_general_settings.php:21
638
- #@ all-in-one-event-calendar
639
- msgid "Week starts on"
640
- msgstr "La semaine commence le"
641
 
642
- #: app/view/box_general_settings.php:25
643
- #@ all-in-one-event-calendar
644
- msgid "Agenda pages show at most"
645
- msgstr "La vue Agenda affichera au plus"
646
 
647
- #: app/view/box_general_settings.php:26
648
- #@ all-in-one-event-calendar
649
- msgid "events"
650
- msgstr "événements"
651
 
652
- #: app/view/box_general_settings.php:37
653
- #@ all-in-one-event-calendar
654
- msgid "<strong>Exclude</strong> events from search results"
655
- msgstr "<strong>Exclure</strong> les événements des résultats de recherche"
656
 
657
- #: app/view/box_general_settings.php:43
658
- #@ all-in-one-event-calendar
659
- msgid "Show <strong>Post Your Event</strong> button above the calendar to privileged users"
660
- msgstr "Montrer le bouton <strong>Poster votre événement</strong> au dessus du calendrier pour les utilisateurs autorisés"
661
 
662
- #: app/view/box_general_settings.php:49
663
- #@ all-in-one-event-calendar
664
- msgid "Hide <strong>Subscribe</strong>/<strong>Add to Calendar</strong> buttons in calendar and single event views"
665
- msgstr "Cacher les boutons <strong>S'abonner</strong>/<strong>Ajouter au calendrier</strong>dans le calendrier et les vue de détail"
666
 
667
- #: app/view/box_general_settings.php:55
668
- #@ all-in-one-event-calendar
669
- msgid "Hide <strong>Google Maps</strong> until clicked"
670
- msgstr "Cacher <strong>Google Maps</strong> avant le clic"
671
 
672
- #: app/view/box_general_settings.php:61
673
- #@ all-in-one-event-calendar
674
- msgid "Include <strong>event categories</strong> in post category lists"
675
- msgstr "Inclure les <strong>catégories d'événements </strong> dans la liste des catégories d'articles"
676
 
677
- #: app/view/box_general_settings.php:65
678
- #@ all-in-one-event-calendar
679
- msgid "Adding/Editing Events"
680
- msgstr "Ajouter/Editer des événements"
681
 
682
- #: app/view/box_general_settings.php:73
683
- #@ all-in-one-event-calendar
684
- msgid "Use <strong>24h time</strong> in time pickers"
685
- msgstr "Utiliser le format <strong>24h</strong> dans les aperçus"
686
 
687
- #: app/view/box_general_settings.php:79
688
- #@ all-in-one-event-calendar
689
- msgid "Display <strong>Publish</strong> at bottom of Edit Event form"
690
- msgstr "Monter <strong>Publier</strong> en bas du formulaire d'édition des événements"
691
 
692
- #: app/view/agenda-widget-form.php:2
693
- #@ all-in-one-event-calendar
694
- msgid "Title:"
695
- msgstr "Titre:"
696
 
697
- #: app/view/agenda-widget-form.php:6
698
- #@ all-in-one-event-calendar
699
- msgid "Number of events to show:"
700
- msgstr "Nombre d'événements à montrer"
701
 
702
- #: app/view/agenda-widget-form.php:53
703
- #@ all-in-one-event-calendar
704
  msgid "Show <strong>View Calendar</strong> button"
705
  msgstr "Afficher le bouton <strong>Vue calendrier</strong>"
706
 
707
- #: app/view/agenda-widget-form.php:56
708
- #@ all-in-one-event-calendar
709
  msgid "Show <strong>Subscribe</strong> buttons"
710
  msgstr "Montrer les boutons <strong>S'abonner</strong>"
711
 
712
- #: app/view/agenda-widget-form.php:59
713
- #@ all-in-one-event-calendar
714
  msgid "Hide this widget on calendar page"
715
  msgstr "Cacher ce Widget sur la page \"Calendrier\""
716
 
717
- #: app/view/agenda.php:12
718
- #: app/view/month.php:4
719
- #@ all-in-one-event-calendar
720
- msgid "Today"
721
- msgstr "Aujourd'hui"
722
-
723
- #: app/view/month.php:50
724
- #@ all-in-one-event-calendar
725
- msgid "Summary:"
726
- msgstr "Résumé:"
727
-
728
- #: app/view/month.php:53
729
- #@ all-in-one-event-calendar
730
- msgid "click anywhere for details"
731
- msgstr "cliquer n'importe ou pour des détails"
732
-
733
- #: app/view/agenda.php:58
734
- #: app/view/agenda.php:108
735
- #: app/view/month.php:68
736
- #@ all-in-one-event-calendar
737
- msgid "(all-day)"
738
- msgstr "(journée-complète)"
739
-
740
- #: app/view/agenda.php:5
741
- #@ all-in-one-event-calendar
742
- msgid "+ Expand All"
743
- msgstr "+ Tout déplier"
744
-
745
- #: app/view/agenda.php:8
746
- #@ all-in-one-event-calendar
747
- msgid "− Collapse All"
748
- msgstr "− Tout replier"
749
-
750
- #: app/view/agenda.php:28
751
- #@ all-in-one-event-calendar
752
- msgid "There are no upcoming events to display at this time."
753
- msgstr "Il n'y a pas de nouveaux événements en ce moment"
754
-
755
- #: app/view/agenda.php:76
756
- #@ all-in-one-event-calendar
757
- msgid "Read more »"
758
- msgstr "Lire la suite »"
759
-
760
- #: app/view/agenda-widget.php:11
761
- #@ all-in-one-event-calendar
762
- msgid "There are no upcoming events."
763
- msgstr "Il n'y a pas de nouveaux événements"
764
-
765
- #: app/view/agenda-widget.php:59
766
- #@ all-in-one-event-calendar
767
- msgid "View Calendar »"
768
- msgstr "Voir le calendrier »"
769
 
770
- #: app/view/agenda-widget.php:74
771
- #@ all-in-one-event-calendar
772
- msgid "Add to Google"
773
- msgstr "Ajouter à Google"
774
 
775
- #: app/view/box_event_contact.php:1
776
- #@ all-in-one-event-calendar
777
  msgid "Organizer contact info"
778
  msgstr "Information planning contact"
779
 
780
- #: app/view/box_event_contact.php:7
781
- #@ all-in-one-event-calendar
782
  msgid "Contact name:"
783
- msgstr "Nom du contact:"
784
 
785
- #: app/view/box_event_contact.php:17
786
- #@ all-in-one-event-calendar
787
  msgid "Phone:"
788
- msgstr "Téléphone:"
789
 
790
- #: app/view/box_event_contact.php:27
791
- #@ all-in-one-event-calendar
792
  msgid "E-mail:"
793
- msgstr "E-mail:"
794
-
795
- #: app/view/class-ai1ec-agenda-widget.php:18
796
- #: app/view/class-ai1ec-agenda-widget.php:39
797
- #@ all-in-one-event-calendar
798
- msgid "Upcoming Events"
799
- msgstr "Nouveaux événements"
800
-
801
- #: app/view/class-ai1ec-agenda-widget.php:20
802
- #@ all-in-one-event-calendar
803
- msgid "All-in-One Event Calendar: Lists upcoming events in Agenda view"
804
- msgstr "All-in-One Event Calendar: Lister les nouveaux événements dans la vue Agenda"
805
 
806
- #: app/view/box_event_cost.php:1
807
- #@ all-in-one-event-calendar
808
  msgid "Event cost"
809
  msgstr "Coût de l'événement"
810
 
811
- #: app/view/box_event_cost.php:7
812
- #@ all-in-one-event-calendar
813
  msgid "Cost"
814
  msgstr "Coût"
815
 
816
- #: app/view/event-map.php:2
817
- #@ all-in-one-event-calendar
818
- msgid "Click to view map"
819
- msgstr "Cliquer pour voir la carte"
820
 
821
- #: app/view/event-map.php:9
822
- #@ all-in-one-event-calendar
823
- msgid "View Full-Size Map »"
824
- msgstr "Voir la carte en grande taille"
 
 
 
 
 
825
 
826
- #: app/view/box_eventbrite.php:1
827
- #@ all-in-one-event-calendar
 
 
 
 
 
828
  msgid "Eventbrite Ticketing"
829
  msgstr "Billetterie Eventbrite"
830
 
831
- #: app/view/box_eventbrite.php:7
832
- #@ all-in-one-event-calendar
833
  msgid "Register this event with Eventbrite.com?"
834
  msgstr "Enregistrer cet événement avec Eventbrite.com ?"
835
 
836
- #: app/view/box_eventbrite.php:12
837
- #@ all-in-one-event-calendar
838
  msgid "Yes"
839
  msgstr "Oui"
840
 
841
- #: app/view/box_eventbrite.php:14
842
- #@ all-in-one-event-calendar
843
  msgid "No"
844
  msgstr "Non"
845
 
846
- #: app/view/box_eventbrite.php:22
847
- #@ all-in-one-event-calendar
848
  msgid "Set up your first ticket"
849
  msgstr "Configurer votre premier ticket"
850
 
851
- #: app/view/box_eventbrite.php:24
852
- #@ all-in-one-event-calendar
853
  msgid "To create multiple tickets per event, submit this form, then follow the link to Eventbrite."
854
  msgstr "Pour créer de multiples tickets par événements, envoyez ce formulaire, puis suivez le lien vers Eventbrite."
855
 
856
- #: app/view/box_eventbrite.php:32
857
- #@ all-in-one-event-calendar
858
  msgid "Name"
859
  msgstr "Nom"
860
 
861
- #: app/view/box_eventbrite.php:42
862
- #@ all-in-one-event-calendar
863
  msgid "Description"
864
  msgstr "Description"
865
 
866
- #: app/view/box_eventbrite.php:53
867
- #@ all-in-one-event-calendar
868
  msgid "Type"
869
  msgstr "Type"
870
 
871
- #: app/view/box_eventbrite.php:58
872
- #@ all-in-one-event-calendar
873
  msgid "Set Price"
874
  msgstr "Définir le prix"
875
 
876
- #: app/view/box_eventbrite.php:60
877
- #@ all-in-one-event-calendar
878
  msgid "Donation Based"
879
  msgstr "Sur la base de contribution"
880
 
881
- #: app/view/box_eventbrite.php:68
882
- #@ all-in-one-event-calendar
883
  msgid "The price for this event's first ticket will be taken from the Cost field above."
884
  msgstr "Le prix de ce premier billet pour cet événement sera baser sur le champ \\\"Coût\\\" ci-dessus."
885
 
886
- #: app/view/box_eventbrite.php:75
887
- #@ all-in-one-event-calendar
888
  msgid "Quantity"
889
  msgstr "Quantité"
890
 
891
- #: app/view/box_eventbrite.php:85
892
- #@ all-in-one-event-calendar
893
  msgid "Include Fee in Price"
894
  msgstr "Compter les frais dans le prix"
895
 
896
- #: app/view/box_eventbrite.php:90
897
- #@ all-in-one-event-calendar
898
  msgid "Add Service Fee on top of price"
899
  msgstr "Ajouter des frais de service en plus du prix"
900
 
901
- #: app/view/box_eventbrite.php:92
902
- #@ all-in-one-event-calendar
903
  msgid "Include Service fee in price"
904
  msgstr "Inclure les frais de service dans le prix"
905
 
906
- #: app/view/box_eventbrite.php:98
907
- #@ all-in-one-event-calendar
908
  msgid "Payment Options"
909
  msgstr "Options de paiement"
910
 
911
- #: app/view/box_eventbrite.php:103
912
- #@ all-in-one-event-calendar
913
  msgid "Paypal"
914
  msgstr "Paypal"
915
 
916
- #: app/view/box_eventbrite.php:105
917
- #@ all-in-one-event-calendar
918
  msgid "Google Checkout"
919
  msgstr "Google Checkout"
920
 
921
- #: app/view/box_eventbrite.php:107
922
- #@ all-in-one-event-calendar
923
  msgid "Check"
924
  msgstr "Vérification"
925
 
926
- #: app/view/box_eventbrite.php:109
927
- #@ all-in-one-event-calendar
928
  msgid "Cash"
929
- msgstr "En liiquide"
930
 
931
- #: app/view/box_eventbrite.php:111
932
- #@ all-in-one-event-calendar
933
  msgid "Send an Invoice"
934
  msgstr "Envoyer une facture"
935
 
936
- #: app/view/feed_row.php:9
937
- #@ all-in-one-event-calendar
938
- msgid "Event category:"
939
- msgstr "Catégorie d'événement"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
940
 
941
- #: app/view/feed_row.php:19
942
- #@ all-in-one-event-calendar
943
- msgid "× Delete"
944
- msgstr "Effacer"
945
 
946
- #: app/controller/class-ai1ec-events-controller.php:325
947
- #: app/view/feed_row.php:20
948
- #@ all-in-one-event-calendar
949
- msgid "Update"
950
- msgstr "Mettre à jour"
951
 
952
- #: app/controller/class-ai1ec-settings-controller.php:216
953
- #: app/view/feed_row.php:22
954
- #, php-format
955
- #@ all-in-one-event-calendar
956
- msgid "Flush 1 event"
957
- msgid_plural "Flush %s events"
958
- msgstr[0] ""
959
- msgstr[1] ""
960
 
961
- #: app/controller/class-ai1ec-events-controller.php:147
962
- #@ all-in-one-event-calendar
963
- msgid "This feed is already being imported."
964
- msgstr "Le flux a déjà été importé"
965
 
966
- #: app/controller/class-ai1ec-events-controller.php:148
967
- #@ all-in-one-event-calendar
968
- msgid "Please enter a valid iCalendar URL."
969
- msgstr "SVP entrez une URL iCalendar valide"
970
 
971
- #: app/controller/class-ai1ec-events-controller.php:325
972
- #@ all-in-one-event-calendar
973
- msgid "Publish"
974
- msgstr "Publier"
975
 
976
- #: app/controller/class-ai1ec-events-controller.php:327
977
- #@ all-in-one-event-calendar
978
- msgid "Submit for Review"
979
- msgstr "Soumettre à révision"
980
 
981
- #: app/controller/class-ai1ec-events-controller.php:440
982
- #, php-format
983
- #@ all-in-one-event-calendar
984
- msgid "Event updated. <a href=\"%s\">View event</a>"
985
- msgstr "Evénement mis à jour. <a href=\"%s\">Voir l'événement</a>"
986
 
987
- #: app/controller/class-ai1ec-events-controller.php:441
988
- #@ all-in-one-event-calendar
989
- msgid "Custom field updated."
990
- msgstr "Champ personnalisé mis à jour"
991
 
992
- #: app/controller/class-ai1ec-events-controller.php:442
993
- #@ all-in-one-event-calendar
994
- msgid "Custom field deleted."
995
- msgstr "Champ personnalisé effacé"
996
 
997
- #: app/controller/class-ai1ec-events-controller.php:443
998
- #@ all-in-one-event-calendar
999
- msgid "Event updated."
1000
- msgstr "Evénement mis à jour"
1001
 
1002
- #. translators: %s: date and time of the revision
1003
- #: app/controller/class-ai1ec-events-controller.php:445
1004
- #, php-format
1005
- #@ all-in-one-event-calendar
1006
- msgid "Event restored to revision from %s"
1007
- msgstr "Evénément restauré depuis la révision %s"
1008
 
1009
- #: app/controller/class-ai1ec-events-controller.php:446
1010
- #, php-format
1011
- #@ all-in-one-event-calendar
1012
- msgid "Event published. <a href=\"%s\">View event</a>"
1013
- msgstr "Evénement publié. <a href=\"%s\">Voir l'événement</a>"
1014
 
1015
- #: app/controller/class-ai1ec-events-controller.php:447
1016
- #@ default
1017
- msgid "Event saved."
1018
- msgstr ""
1019
 
1020
- #: app/controller/class-ai1ec-events-controller.php:448
1021
- #, php-format
1022
- #@ all-in-one-event-calendar
1023
- msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1024
- msgstr "Evénément envoyé. <a target=\"_blank\" href=\"%s\">Précédent</a>"
1025
 
1026
- #: app/controller/class-ai1ec-events-controller.php:449
1027
- #, php-format
1028
- #@ all-in-one-event-calendar
1029
- msgid "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview event</a>"
1030
- msgstr "Evénement programmé pour: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Précédent</a>"
1031
 
1032
- #: app/controller/class-ai1ec-events-controller.php:451
1033
- #@ all-in-one-event-calendar
1034
- msgid "M j, Y @ G:i"
1035
- msgstr "M j, Y @ G:i"
1036
 
1037
- #: app/controller/class-ai1ec-events-controller.php:452
1038
- #, php-format
1039
- #@ all-in-one-event-calendar
1040
- msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
1041
- msgstr "Brouillon mis à jour. <a target=\"_blank\" href=\"%s\">Prévisualiser l'événement</a>"
1042
 
1043
- #: app/controller/class-ai1ec-app-controller.php:354
1044
- #: app/controller/class-ai1ec-app-controller.php:355
1045
- #@ all-in-one-event-calendar
1046
- msgid "Settings"
1047
- msgstr "Options"
1048
 
1049
- #: app/controller/class-ai1ec-settings-controller.php:82
1050
- #@ all-in-one-event-calendar
1051
- msgid "Settings Updated."
1052
- msgstr "Options mises à jour"
1053
 
1054
- #: app/controller/class-ai1ec-settings-controller.php:173
1055
- #, php-format
1056
- #@ all-in-one-event-calendar
1057
- msgid "Flushed %d events"
1058
- msgstr "Nettoyer %d événements"
1059
 
1060
- #: app/controller/class-ai1ec-settings-controller.php:215
1061
- #, php-format
1062
- #@ all-in-one-event-calendar
1063
- msgid "Imported %d events"
1064
- msgstr "Importer %d événements"
1065
 
1066
- #: app/controller/class-ai1ec-settings-controller.php:267
1067
- #@ all-in-one-event-calendar
1068
- msgctxt "meta box"
1069
- msgid "General Settings"
1070
- msgstr "Configuration générale"
1071
 
1072
- #: app/controller/class-ai1ec-settings-controller.php:275
1073
- #@ all-in-one-event-calendar
1074
- msgctxt "meta box"
1075
- msgid "The Seed Studio Support"
1076
- msgstr "Assistance The Seed Studio"
1077
 
1078
- #: app/controller/class-ai1ec-settings-controller.php:282
1079
- #@ all-in-one-event-calendar
1080
- msgctxt "meta box"
1081
- msgid "ICS Import Settings"
1082
- msgstr "Options d'importation ICS"
1083
 
1084
- #: app/controller/class-ai1ec-settings-controller.php:334
1085
- #, php-format
1086
- #@ all-in-one-event-calendar
1087
- msgid "<a href=\"%s\">Settings</a>"
1088
- msgstr "<a href=\"%s\">Options</a>"
1089
 
1090
- #: app/controller/class-ai1ec-settings-controller.php:348
1091
- #, php-format
1092
- #@ all-in-one-event-calendar
1093
- msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
1094
- msgstr "<a href=\"%s\" target=\"_blank\">Contribuer</a>"
1095
 
1096
- #: app/controller/class-ai1ec-settings-controller.php:349
1097
- #, php-format
1098
- #@ all-in-one-event-calendar
1099
- msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
1100
- msgstr "<a href=\"%s\" target=\"_blank\">Aide</a>"
1101
 
1102
- #: app/controller/class-ai1ec-importer-controller.php:91
1103
- #@ all-in-one-event-calendar
1104
- msgid "The Events Calendar → All-in-One Event Calendar"
1105
- msgstr "The Events Calendar → All-in-One Event Calendar"
1106
 
1107
- #: app/controller/class-ai1ec-importer-controller.php:92
1108
- #@ all-in-one-event-calendar
1109
- msgid "Imports events created using The Events Calendar plugin into the All-in-One Event Calendar"
1110
- msgstr "Importer des événements en utilisant l'extension The Events Calendar dans All-in-One Event Calendar"
1111
 
1112
- #: app/model/class-ai1ec-event.php:459
1113
- #@ all-in-one-event-calendar
1114
- msgid " (all-day)"
1115
- msgstr "(journée-entière)"
1116
 
1117
- #: app/helper/class-ai1ec-events-helper.php:320
1118
- #: app/helper/class-ai1ec-events-helper.php:342
1119
- #@ all-in-one-event-calendar
1120
- msgid "Every day"
1121
- msgstr "Tous les jours"
1122
 
1123
- #: app/helper/class-ai1ec-events-helper.php:321
1124
- #: app/helper/class-ai1ec-events-helper.php:343
1125
- #@ all-in-one-event-calendar
1126
- msgid "Every week"
1127
- msgstr "Toutes les semaines"
1128
 
1129
- #: app/helper/class-ai1ec-events-helper.php:322
1130
- #: app/helper/class-ai1ec-events-helper.php:344
1131
- #@ all-in-one-event-calendar
1132
- msgid "Every month"
1133
- msgstr "Tous les mois"
1134
 
1135
- #: app/helper/class-ai1ec-events-helper.php:323
1136
- #: app/helper/class-ai1ec-events-helper.php:345
1137
- #@ all-in-one-event-calendar
1138
- msgid "Every year"
1139
- msgstr "Tous les ans"
1140
 
1141
- #: app/helper/class-ai1ec-events-helper.php:324
1142
- #: app/helper/class-ai1ec-events-helper.php:346
1143
- #@ all-in-one-event-calendar
1144
- msgid "-----------"
1145
- msgstr "-----------"
1146
 
1147
- #: app/helper/class-ai1ec-events-helper.php:325
1148
- #: app/helper/class-ai1ec-events-helper.php:347
1149
- #@ all-in-one-event-calendar
1150
- msgid "Custom..."
1151
- msgstr "Personnalisé..."
1152
 
1153
- #: app/helper/class-ai1ec-events-helper.php:468
1154
- #@ all-in-one-event-calendar
1155
- msgid "first"
1156
- msgstr "premier"
1157
 
1158
- #: app/helper/class-ai1ec-events-helper.php:469
1159
- #@ all-in-one-event-calendar
1160
- msgid "second"
1161
- msgstr "deuxième"
1162
 
1163
- #: app/helper/class-ai1ec-events-helper.php:470
1164
- #@ all-in-one-event-calendar
1165
- msgid "third"
1166
- msgstr "troisième"
1167
 
1168
- #: app/helper/class-ai1ec-events-helper.php:471
1169
- #@ all-in-one-event-calendar
1170
- msgid "fourth"
1171
- msgstr "quatrième"
1172
 
1173
- #: app/helper/class-ai1ec-events-helper.php:472
1174
- #@ all-in-one-event-calendar
1175
- msgid "------"
1176
- msgstr "------"
1177
 
1178
- #: app/helper/class-ai1ec-events-helper.php:473
1179
- #@ all-in-one-event-calendar
1180
- msgid "last"
1181
- msgstr "dernier"
1182
 
1183
- #: app/helper/class-ai1ec-events-helper.php:478
1184
- #@ all-in-one-event-calendar
1185
- msgid "Sunday"
1186
- msgstr "Dimanche"
1187
 
1188
- #: app/helper/class-ai1ec-events-helper.php:479
1189
- #@ all-in-one-event-calendar
1190
- msgid "Monday"
1191
- msgstr "Lundi"
1192
 
1193
- #: app/helper/class-ai1ec-events-helper.php:480
1194
- #@ all-in-one-event-calendar
1195
- msgid "Tuesday"
1196
- msgstr "Mardi"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1197
 
1198
- #: app/helper/class-ai1ec-events-helper.php:481
1199
- #@ all-in-one-event-calendar
1200
- msgid "Wednesday"
1201
- msgstr "Mercredi"
1202
 
1203
- #: app/helper/class-ai1ec-events-helper.php:482
1204
- #@ all-in-one-event-calendar
1205
- msgid "Thursday"
1206
- msgstr "Jeudi"
 
1207
 
1208
- #: app/helper/class-ai1ec-events-helper.php:483
1209
- #@ all-in-one-event-calendar
1210
- msgid "Friday"
1211
- msgstr "Vendredi"
1212
 
1213
- #: app/helper/class-ai1ec-events-helper.php:484
1214
- #@ all-in-one-event-calendar
1215
- msgid "Saturday"
1216
- msgstr "Samedi"
 
1217
 
1218
- #: app/helper/class-ai1ec-events-helper.php:485
1219
- #@ all-in-one-event-calendar
1220
- msgid "--------"
1221
- msgstr "--------"
 
1222
 
1223
- #: app/helper/class-ai1ec-events-helper.php:486
1224
- #@ all-in-one-event-calendar
1225
- msgid "day"
1226
- msgstr "jour"
1227
 
1228
- #: app/helper/class-ai1ec-events-helper.php:487
1229
- #@ all-in-one-event-calendar
1230
- msgid "weekday"
1231
- msgstr "semaine"
1232
 
1233
- #: app/helper/class-ai1ec-events-helper.php:488
1234
- #@ all-in-one-event-calendar
1235
- msgid "weekend day"
1236
- msgstr "weekend"
1237
 
1238
- #: app/helper/class-ai1ec-events-helper.php:598
1239
- #@ all-in-one-event-calendar
1240
- msgid "day(s)"
1241
- msgstr "jour(s)"
 
 
 
 
1242
 
1243
- #: app/helper/class-ai1ec-events-helper.php:627
1244
- #@ all-in-one-event-calendar
1245
- msgid "week(s)"
1246
- msgstr "semaine(s)"
1247
 
1248
- #: app/helper/class-ai1ec-events-helper.php:679
1249
- #@ all-in-one-event-calendar
1250
- msgid "month(s)"
1251
- msgstr "mois"
1252
 
1253
- #: app/helper/class-ai1ec-events-helper.php:700
1254
- #@ all-in-one-event-calendar
1255
- msgid "year(s)"
1256
- msgstr "année(s)"
 
1257
 
1258
- #: app/helper/class-ai1ec-events-helper.php:1356
1259
- #: app/helper/class-ai1ec-events-helper.php:1365
1260
- #: app/helper/class-ai1ec-events-helper.php:1373
1261
- #: app/helper/class-ai1ec-events-helper.php:1386
1262
- #: app/helper/class-ai1ec-events-helper.php:1393
1263
- #: app/helper/class-ai1ec-events-helper.php:1399
1264
- #: app/helper/class-ai1ec-events-helper.php:1413
1265
- #: app/helper/class-ai1ec-events-helper.php:1421
1266
- #: app/helper/class-ai1ec-events-helper.php:1428
1267
- #@ default
1268
- msgid "on"
1269
- msgstr ""
1270
 
1271
- #: app/helper/class-ai1ec-events-helper.php:1361
1272
- #: app/helper/class-ai1ec-events-helper.php:1390
1273
- #: app/helper/class-ai1ec-events-helper.php:1418
1274
- #@ all-in-one-event-calendar
1275
- msgid "and"
1276
- msgstr "et"
1277
 
1278
- #: app/helper/class-ai1ec-events-helper.php:1386
1279
- #: app/helper/class-ai1ec-events-helper.php:1393
1280
- #: app/helper/class-ai1ec-events-helper.php:1399
1281
- #@ all-in-one-event-calendar
1282
- msgid "of the month"
1283
- msgstr "dans le mois"
1284
 
1285
- #: app/helper/class-ai1ec-events-helper.php:1465
1286
- #@ all-in-one-event-calendar
1287
- msgid "Every other day"
1288
- msgstr "Tous les autres jours"
1289
 
1290
- #: app/helper/class-ai1ec-events-helper.php:1467
1291
- #, php-format
1292
- #@ all-in-one-event-calendar
1293
- msgid "Every %d days"
1294
- msgstr "Tous les %d jours"
1295
 
1296
- #: app/helper/class-ai1ec-events-helper.php:1477
1297
- #@ all-in-one-event-calendar
1298
- msgid "Every other week"
1299
- msgstr "Toutes les autres semaines"
1300
 
1301
- #: app/helper/class-ai1ec-events-helper.php:1479
1302
- #, php-format
1303
- #@ all-in-one-event-calendar
1304
- msgid "Every %d weeks"
1305
- msgstr "Toutes les %d semaines"
1306
 
1307
- #: app/helper/class-ai1ec-events-helper.php:1489
1308
- #@ all-in-one-event-calendar
1309
- msgid "Every other month"
1310
- msgstr "Tous les autres mois"
1311
 
1312
- #: app/helper/class-ai1ec-events-helper.php:1491
1313
- #, php-format
1314
- #@ all-in-one-event-calendar
1315
- msgid "Every %d months"
1316
- msgstr "Tous les %d mois"
1317
 
1318
- #: app/helper/class-ai1ec-events-helper.php:1501
1319
- #@ all-in-one-event-calendar
1320
- msgid "Every other year"
1321
- msgstr "Toutes les autres années"
1322
 
1323
- #: app/helper/class-ai1ec-events-helper.php:1503
1324
- #, php-format
1325
- #@ all-in-one-event-calendar
1326
- msgid "Every %d years"
1327
- msgstr "Toutes les %d années"
1328
 
1329
- #: app/helper/class-ai1ec-events-helper.php:1523
1330
- #, php-format
1331
- #@ all-in-one-event-calendar
1332
- msgid "until %s"
1333
- msgstr "jusqu'à %s"
1334
 
1335
- #: app/helper/class-ai1ec-events-helper.php:1526
1336
- #, php-format
1337
- #@ all-in-one-event-calendar
1338
- msgid "for %d occurrences"
1339
- msgstr "pour %d occurrences"
1340
 
1341
- #: app/helper/class-ai1ec-events-helper.php:1528
1342
- #@ all-in-one-event-calendar
1343
- msgid "forever"
1344
- msgstr "pour toujours"
 
1345
 
1346
- #: app/helper/class-ai1ec-settings-helper.php:200
1347
- #@ all-in-one-event-calendar
1348
- msgid "Default (d/m/y)"
1349
- msgstr "Defaut (d/m/y)"
 
1350
 
1351
- #: app/helper/class-ai1ec-settings-helper.php:203
1352
- #@ all-in-one-event-calendar
1353
- msgid "US (m/d/y)"
1354
- msgstr "US (m/d/y)"
 
1355
 
1356
- #: app/helper/class-ai1ec-settings-helper.php:206
1357
- #@ all-in-one-event-calendar
1358
- msgid "ISO 8601 (y-m-d)"
1359
- msgstr "ISO 8601 (y-m-d)"
1360
 
1361
- #: app/helper/class-ai1ec-settings-helper.php:209
1362
- #@ all-in-one-event-calendar
1363
- msgid "Dotted (m.d.y)"
1364
- msgstr "Dotted (m.d.y)"
 
 
 
1365
 
1366
- #: app/view/agenda-widget-form.php:14
1367
- #@ all-in-one-event-calendar
1368
- msgid "Events with these <strong>Categories</strong>"
1369
- msgstr "Evénements avec ces <strong>Catégories</strong>"
1370
 
1371
- #: app/view/agenda-widget-form.php:27
1372
- #@ all-in-one-event-calendar
1373
- msgid "<strong>Or</strong> events with these <strong>Tags</strong>"
1374
- msgstr "<strong>Or</strong> événements avec ces <strong>Mots clef</strong>"
1375
 
1376
- #: app/view/agenda-widget-form.php:40
1377
- #@ all-in-one-event-calendar
1378
- msgid "<strong>Or</strong> any of these <strong>Events</strong>"
1379
- msgstr "<strong>Où</strong> l'un de ces <strong>Evénements</strong>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1380
 
1381
- #: app/view/agenda-widget-form.php:66
1382
- #@ all-in-one-event-calendar
1383
  msgid "Categories"
1384
  msgstr "Catégories"
1385
 
1386
- #: app/view/agenda-widget-form.php:77
1387
- #@ all-in-one-event-calendar
1388
  msgid "Tags"
1389
- msgstr "Mots clef"
1390
 
1391
- #: app/view/box_general_settings.php:31
1392
- #@ all-in-one-event-calendar
1393
- msgid "Keep all events <strong>expanded</strong> in the agenda view"
1394
- msgstr "Conserver tous les événements <strong>visible</strong> dans la vue agenda"
1395
 
1396
- #: app/view/box_general_settings.php:67
1397
- #@ all-in-one-event-calendar
1398
- msgid "Input dates in this format:"
1399
- msgstr "Insérer les dates dans ce format"
1400
 
1401
- #: app/view/box_the_seed_studio.php:41
1402
- #@ all-in-one-event-calendar
1403
- msgid "Latest from the Seed Network"
1404
- msgstr "Dernière nouvelles du réseau Seed"
 
 
1405
 
1406
- #: app/view/box_time_and_date.php:92
1407
- #@ all-in-one-event-calendar
1408
- msgid "Apply"
1409
- msgstr "Appliquer"
 
 
1410
 
1411
- #: app/view/box_time_and_date.php:93
1412
- #@ all-in-one-event-calendar
1413
- msgid "Cancel"
1414
- msgstr "Effacer"
1415
 
1416
- #: app/view/row_daily.php:3
1417
- #: app/view/row_monthly.php:3
1418
- #: app/view/row_weekly.php:3
1419
- #: app/view/row_yearly.php:3
1420
- #@ all-in-one-event-calendar
1421
- msgid "Every"
1422
- msgstr "Tous les"
1423
 
1424
- #: app/view/row_monthly.php:7
1425
- #@ all-in-one-event-calendar
1426
- msgid "Each"
1427
- msgstr "Chaque"
1428
 
1429
- #: app/view/row_weekly.php:6
1430
- #@ all-in-one-event-calendar
1431
- msgid "On"
1432
- msgstr "Sur"
 
1433
 
1434
- #: app/view/row_yearly.php:7
1435
- #@ all-in-one-event-calendar
1436
- msgid "In"
1437
- msgstr "Dans"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1438
 
2
  msgstr ""
3
  "Project-Id-Version: All-in-One Event Calendar Plugin 1.0.9\n"
4
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
5
+ "POT-Creation-Date: 2012-05-11 11:22:57+00:00\n"
6
+ "PO-Revision-Date: 2012-05-29 18:45+0100\n"
7
+ "Last-Translator: Patricia Brun Torre <patricia@virtuaza.com>\n"
8
  "Language-Team: \n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 
13
  "X-Poedit-SourceCharset: utf-8\n"
14
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
15
+ "X-Textdomain-Support: yes\n"
 
16
  "X-Poedit-SearchPath-0: .\n"
 
17
 
18
+ # @ all-in-one-event-calendar
19
+ #: app/controller/class-ai1ec-app-controller.php:412
20
+ #: app/controller/class-ai1ec-app-controller.php:413
21
+ msgid "Calendar Feeds"
22
+ msgstr "Flux calendrier"
23
 
24
+ # @ all-in-one-event-calendar
25
+ #: app/controller/class-ai1ec-app-controller.php:428
26
+ #: app/controller/class-ai1ec-app-controller.php:429
27
+ #: app/helper/class-ai1ec-settings-helper.php:320
28
+ msgid "Calendar"
29
+ msgstr "Calendrier"
30
+
31
+ # @ all-in-one-event-calendar
32
+ #: app/controller/class-ai1ec-app-controller.php:443
33
+ #: app/controller/class-ai1ec-app-controller.php:444
34
+ msgid "Upgrade"
35
+ msgstr "Mettre à jour"
36
+
37
+ #: app/controller/class-ai1ec-app-controller.php:631
38
+ msgid "You do not have sufficient permissions to update plugins for this site."
39
+ msgstr "Vous n'avez pas de permissions suffisantes pour mettre à jour les extensions de ce site."
40
+
41
+ # @ all-in-one-event-calendar
42
+ #: app/controller/class-ai1ec-calendar-controller.php:220
43
+ #: app/helper/class-ai1ec-settings-helper.php:151
44
+ msgid "Month"
45
+ msgstr "Mois"
46
+
47
+ # @ all-in-one-event-calendar
48
+ #: app/controller/class-ai1ec-calendar-controller.php:221
49
+ #: app/helper/class-ai1ec-settings-helper.php:154
50
+ msgid "Week"
51
+ msgstr "Semaine"
52
+
53
+ # @ all-in-one-event-calendar
54
+ #: app/controller/class-ai1ec-calendar-controller.php:222
55
+ #: app/helper/class-ai1ec-settings-helper.php:148
56
+ msgid "Day"
57
+ msgstr "Jour"
58
+
59
+ # @ all-in-one-event-calendar
60
+ #: app/controller/class-ai1ec-calendar-controller.php:223
61
+ #: app/controller/class-ai1ec-calendar-controller.php:477
62
+ #: app/helper/class-ai1ec-settings-helper.php:157
63
+ msgid "Agenda"
64
+ msgstr "Agenda"
65
+
66
+ #. translators: "%s" represents the week's starting date
67
+ #: app/controller/class-ai1ec-calendar-controller.php:420
68
+ #: app/helper/class-ai1ec-calendar-helper.php:892
69
+ #: app/helper/class-ai1ec-calendar-helper.php:901
70
+ msgid "Week of %s"
71
+ msgstr "Semaine du %s"
72
+
73
+ #: app/controller/class-ai1ec-calendar-controller.php:420
74
+ msgid "F j"
75
+ msgstr ""
76
+
77
+ # @ all-in-one-event-calendar
78
+ #: app/controller/class-ai1ec-events-controller.php:153
79
+ msgid "This feed is already being imported."
80
+ msgstr "Le flux a déjà été importé."
81
+
82
+ # @ all-in-one-event-calendar
83
+ #: app/controller/class-ai1ec-events-controller.php:154
84
+ msgid "Please enter a valid iCalendar URL."
85
+ msgstr "SVP entrez une URL iCalendar valide."
86
+
87
+ # @ all-in-one-event-calendar
88
+ #: app/controller/class-ai1ec-events-controller.php:341
89
+ msgid "Publish"
90
+ msgstr "Publier"
91
+
92
+ # @ all-in-one-event-calendar
93
+ #: app/controller/class-ai1ec-events-controller.php:341
94
+ #: app/view/admin/feed_row.php:20
95
+ msgid "Update"
96
+ msgstr "Mettre à jour"
97
+
98
+ # @ all-in-one-event-calendar
99
+ #: app/controller/class-ai1ec-events-controller.php:343
100
+ msgid "Submit for Review"
101
+ msgstr "Soumettre à révision"
102
+
103
+ # @ all-in-one-event-calendar
104
+ #: app/controller/class-ai1ec-events-controller.php:467
105
+ msgid "Event updated. <a href=\"%s\">View event</a>"
106
+ msgstr "Evénement mis à jour. <a href=\"%s\">Voir l'événement</a>"
107
+
108
+ # @ all-in-one-event-calendar
109
+ #: app/controller/class-ai1ec-events-controller.php:468
110
+ msgid "Custom field updated."
111
+ msgstr "Champ personnalisé mis à jour."
112
+
113
+ # @ all-in-one-event-calendar
114
+ #: app/controller/class-ai1ec-events-controller.php:469
115
+ msgid "Custom field deleted."
116
+ msgstr "Champ personnalisé effacé."
117
+
118
+ # @ all-in-one-event-calendar
119
+ #: app/controller/class-ai1ec-events-controller.php:470
120
+ msgid "Event updated."
121
+ msgstr "Evénement mis à jour."
122
+
123
+ # @ all-in-one-event-calendar
124
+ #. translators: %s: date and time of the revision
125
+ #: app/controller/class-ai1ec-events-controller.php:472
126
+ msgid "Event restored to revision from %s"
127
+ msgstr "Evénément restauré depuis la révision %s"
128
+
129
+ # @ all-in-one-event-calendar
130
+ #: app/controller/class-ai1ec-events-controller.php:473
131
+ msgid "Event published. <a href=\"%s\">View event</a>"
132
+ msgstr "Evénement publié. <a href=\"%s\">Voir l'événement</a>"
133
+
134
+ # @ default
135
+ #: app/controller/class-ai1ec-events-controller.php:474
136
+ msgid "Event saved."
137
+ msgstr "Evénement enregistré"
138
+
139
+ # @ all-in-one-event-calendar
140
+ #: app/controller/class-ai1ec-events-controller.php:475
141
+ msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
142
+ msgstr "Evénément envoyé. <a target=\"_blank\" href=\"%s\">Prévisualiser l'événement</a>"
143
+
144
+ # @ all-in-one-event-calendar
145
+ #: app/controller/class-ai1ec-events-controller.php:476
146
+ msgid "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview event</a>"
147
+ msgstr "Evénement programmé pour&nbsp;: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Prévisualiser l'événement</a>"
148
+
149
+ # @ all-in-one-event-calendar
150
+ #. translators: Publish box date format, see http:php.net/date
151
+ #: app/controller/class-ai1ec-events-controller.php:478
152
+ msgid "M j, Y @ G:i"
153
+ msgstr "M j, Y @ G:i"
154
+
155
+ # @ all-in-one-event-calendar
156
+ #: app/controller/class-ai1ec-events-controller.php:479
157
+ msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
158
+ msgstr "Brouillon mis à jour. <a target=\"_blank\" href=\"%s\">Prévisualiser l'événement</a>"
159
+
160
+ # @ all-in-one-event-calendar
161
+ #: app/controller/class-ai1ec-importer-controller.php:91
162
+ msgid "The Events Calendar → All-in-One Calendar"
163
+ msgstr "The Events Calendar → All-in-One Event Calendar"
164
+
165
+ # @ all-in-one-event-calendar
166
+ #: app/controller/class-ai1ec-importer-controller.php:92
167
+ msgid "Imports events created using The Events Calendar plugin into the All-in-One Calendar"
168
+ msgstr "Importer des événements utilisant l'extension The Events Calendar dans All-in-One Event Calendar"
169
+
170
+ # @ all-in-one-event-calendar
171
+ #: app/controller/class-ai1ec-settings-controller.php:60
172
+ msgid "All-in-One Calendar: Settings"
173
+ msgstr "All-in-One Event Calendar&nbsp;: paramètres"
174
+
175
+ # @ all-in-one-event-calendar
176
+ #: app/controller/class-ai1ec-settings-controller.php:79
177
+ msgid "All-in-One Calendar: Calendar Feeds"
178
+ msgstr "All-in-one Event Calendar&nbsp;: Flux calendrier"
179
+
180
+ # @ all-in-one-event-calendar
181
+ #: app/controller/class-ai1ec-settings-controller.php:100
182
+ msgid "Settings Updated."
183
+ msgstr "Options mises à jour"
184
+
185
+ # @ all-in-one-event-calendar
186
+ #: app/controller/class-ai1ec-settings-controller.php:190
187
+ msgid "Flushed %d events"
188
+ msgstr "%d événements nettoyés"
189
+
190
+ #: app/controller/class-ai1ec-settings-controller.php:196
191
+ #: app/controller/class-ai1ec-settings-controller.php:243
192
+ msgid "Invalid ICS feed ID"
193
+ msgstr "ID du flux ICS invalide"
194
+
195
+ # @ all-in-one-event-calendar
196
+ #: app/controller/class-ai1ec-settings-controller.php:230
197
+ msgid "No events were found"
198
+ msgstr "Aucun événement trouvé."
199
+
200
+ # @ all-in-one-event-calendar
201
+ #: app/controller/class-ai1ec-settings-controller.php:235
202
+ msgid "Imported %d events"
203
+ msgstr "Importer %d événements"
204
+
205
+ # @ all-in-one-event-calendar
206
+ #: app/controller/class-ai1ec-settings-controller.php:236
207
+ #: app/view/admin/feed_row.php:22
208
+ msgid "Flush 1 event"
209
+ msgid_plural "Flush %s events"
210
+ msgstr[0] "Nettoyer 1 événement"
211
+ msgstr[1] "Nettoyer %s événements"
212
+
213
+ # @ all-in-one-event-calendar
214
+ #: app/controller/class-ai1ec-settings-controller.php:301
215
+ msgctxt "meta box"
216
+ msgid "General Settings"
217
+ msgstr "Configuration générale"
218
+
219
+ # @ all-in-one-event-calendar
220
+ #: app/controller/class-ai1ec-settings-controller.php:310
221
+ msgctxt "meta box"
222
+ msgid "Advanced Settings"
223
+ msgstr "Paramètres avancés"
224
+
225
+ # @ all-in-one-event-calendar
226
+ #: app/controller/class-ai1ec-settings-controller.php:319
227
+ #: app/controller/class-ai1ec-settings-controller.php:348
228
+ msgctxt "meta box"
229
+ msgid "Then.ly Support"
230
+ msgstr "Assistance Then.ly"
231
+
232
+ # @ all-in-one-event-calendar
233
+ #: app/controller/class-ai1ec-settings-controller.php:339
234
+ msgctxt "meta box"
235
+ msgid "Feed Subscriptions"
236
+ msgstr "Description du flux"
237
+
238
+ # @ all-in-one-event-calendar
239
+ #: app/controller/class-ai1ec-settings-controller.php:364
240
+ msgid "<a href=\"%s\">Settings</a>"
241
+ msgstr "<a href=\"%s\">Options</a>"
242
 
243
+ # @ all-in-one-event-calendar
244
+ #: app/controller/class-ai1ec-settings-controller.php:378
245
+ msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
246
+ msgstr "<a href=\"%s\" target=\"_blank\">Contribuer</a>"
247
+
248
+ # @ all-in-one-event-calendar
249
+ #: app/controller/class-ai1ec-settings-controller.php:379
250
+ msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
251
+ msgstr "<a href=\"%s\" target=\"_blank\">Aide</a>"
252
+
253
+ # @ all-in-one-event-calendar
254
+ #: app/helper/class-ai1ec-app-helper.php:156
255
  msgctxt "Custom post type name"
256
  msgid "Events"
257
  msgstr "Evénements"
258
 
259
+ # @ all-in-one-event-calendar
260
+ #: app/helper/class-ai1ec-app-helper.php:157
261
  msgctxt "Custom post type name (singular)"
262
  msgid "Event"
263
  msgstr "Evénements"
264
 
265
+ # @ all-in-one-event-calendar
266
+ #: app/helper/class-ai1ec-app-helper.php:158
267
  msgid "Add New"
268
  msgstr "Ajouter nouveau"
269
 
270
+ # @ all-in-one-event-calendar
271
+ #: app/helper/class-ai1ec-app-helper.php:159
272
  msgid "Add New Event"
273
  msgstr "Ajouter nouvel événement"
274
 
275
+ # @ all-in-one-event-calendar
276
+ #: app/helper/class-ai1ec-app-helper.php:160
277
  msgid "Edit Event"
278
  msgstr "Editer un événement"
279
 
280
+ # @ all-in-one-event-calendar
281
+ #: app/helper/class-ai1ec-app-helper.php:161
282
  msgid "New Event"
283
  msgstr "Nouvel événement"
284
 
285
+ # @ all-in-one-event-calendar
286
+ #: app/helper/class-ai1ec-app-helper.php:162
287
  msgid "View Event"
288
  msgstr "Voir l'événement"
289
 
290
+ # @ all-in-one-event-calendar
291
+ #: app/helper/class-ai1ec-app-helper.php:163
292
  msgid "Search Events"
293
  msgstr "Chercher des événements"
294
 
295
+ # @ all-in-one-event-calendar
296
+ #: app/helper/class-ai1ec-app-helper.php:164
297
  msgid "No Events found"
298
  msgstr "Aucun événement trouvé"
299
 
300
+ # @ all-in-one-event-calendar
301
+ #: app/helper/class-ai1ec-app-helper.php:165
302
  msgid "No Events found in Trash"
303
  msgstr "Aucun événement trouvé dans la corbeille"
304
 
305
+ # @ all-in-one-event-calendar
306
+ #: app/helper/class-ai1ec-app-helper.php:166
307
  msgid "Parent Event"
308
  msgstr "Evénement parent"
309
 
310
+ # @ all-in-one-event-calendar
311
+ #: app/helper/class-ai1ec-app-helper.php:167
 
312
  msgid "Events"
313
  msgstr "Evénements"
314
 
315
+ # @ all-in-one-event-calendar
316
+ #: app/helper/class-ai1ec-app-helper.php:214
317
  msgctxt "Event categories taxonomy"
318
  msgid "Event Categories"
319
  msgstr "Catégories d'événement"
320
 
321
+ # @ all-in-one-event-calendar
322
+ #: app/helper/class-ai1ec-app-helper.php:215
323
  msgctxt "Event categories taxonomy (singular)"
324
  msgid "Event Category"
325
  msgstr "Catégorie d'événement"
326
 
327
+ # @ all-in-one-event-calendar
328
+ #: app/helper/class-ai1ec-app-helper.php:222
329
  msgctxt "Event tags taxonomy"
330
  msgid "Event Tags"
331
+ msgstr "Mots-clés d'événement"
332
 
333
+ # @ all-in-one-event-calendar
334
+ #: app/helper/class-ai1ec-app-helper.php:223
335
  msgctxt "Event tags taxonomy (singular)"
336
  msgid "Event Tag"
337
+ msgstr "Mot-clé d'événement"
338
+
339
+ # @ all-in-one-event-calendar
340
+ #: app/helper/class-ai1ec-app-helper.php:230
341
+ msgctxt "Event feeds taxonomy"
342
+ msgid "Event Feeds"
343
+ msgstr "Flux d'événement"
344
+
345
+ # @ all-in-one-event-calendar
346
+ #: app/helper/class-ai1ec-app-helper.php:231
347
+ msgctxt "Event feed taxonomy (singular)"
348
+ msgid "Event Feed"
349
+ msgstr "Flux d'événement"
350
 
351
+ #: app/helper/class-ai1ec-app-helper.php:319
352
+ msgid "Show All "
353
+ msgstr "Tout afficher"
354
+
355
+ # @ all-in-one-event-calendar
356
+ #: app/helper/class-ai1ec-app-helper.php:352
357
  msgid "All Events <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
358
  msgstr "Tous les événements <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
359
 
360
+ # @ all-in-one-event-calendar
361
+ #: app/helper/class-ai1ec-app-helper.php:358
362
  msgid "All Events"
363
  msgstr "Tous les événements"
364
 
365
+ # @ all-in-one-event-calendar
366
+ #: app/helper/class-ai1ec-app-helper.php:436
367
  msgid "Event Details"
368
  msgstr "Détail de l'événement"
369
 
370
+ # @ all-in-one-event-calendar
371
+ #: app/helper/class-ai1ec-app-helper.php:471
372
  msgid "Post Date"
373
  msgstr "Date de publication"
374
 
375
+ # @ all-in-one-event-calendar
376
+ #: app/helper/class-ai1ec-app-helper.php:472
377
  msgid "Event date/time"
378
  msgstr "Date/heure de l'événement"
379
 
380
+ # @ all-in-one-event-calendar
381
+ #: app/helper/class-ai1ec-app-helper.php:734
382
+ msgid "Select an option in the <strong>Calendar page</strong> dropdown list."
383
+ msgstr "Sélectionnez une option dans la liste déroulante de la page <strong>Calendrier</strong>."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
 
385
+ # @ all-in-one-event-calendar
386
+ #: app/helper/class-ai1ec-app-helper.php:737
387
+ msgid "Select an option in the <strong>Timezone</strong> dropdown list."
388
+ msgstr "Sélectionnez une option dans la liste déroulante <strong>Fureau horaire</strong>."
 
389
 
390
+ #: app/helper/class-ai1ec-app-helper.php:739
391
+ msgid "Click <strong>Update Settings</strong>."
392
+ msgstr "Cliquez <strong>Mettre à jour les paramètres</strong>."
 
 
 
 
 
393
 
394
+ # @ all-in-one-event-calendar
395
+ #: app/helper/class-ai1ec-app-helper.php:744
396
+ msgid "The plugin is installed, but has not been configured. <a href=\"%s\">Click here to set it up now &raquo;</a>"
397
+ msgstr "L'extension est installée mais non configurée. <a href=\"%s\">Cliquez ici pour la configurer &raquo;</a>"
 
 
 
398
 
399
+ # @ all-in-one-event-calendar
400
+ #: app/helper/class-ai1ec-app-helper.php:751
401
+ msgid "The plugin is installed, but has not been configured. Please log in as an Administrator to set it up."
402
+ msgstr "L'extension est installée mais non configurée. Connectez vous en tant qu'Administrateur pour la configurer."
 
 
 
403
 
404
+ #: app/helper/class-ai1ec-app-helper.php:756
405
+ msgid "<p>To set up the plugin:</p>"
406
+ msgstr "<p>Pour configurer l'extension&nbsp;:</p>"
 
 
 
 
407
 
408
+ # @ all-in-one-event-calendar
409
+ #: app/helper/class-ai1ec-app-helper.php:764
410
+ msgid "All-in-One Calendar Notice"
411
+ msgstr "All-in-One Event Calendar&nbsp;: Avis"
412
 
413
+ # @ all-in-one-event-calendar
414
+ #: app/helper/class-ai1ec-app-helper.php:781
415
+ msgid "Event"
416
+ msgid_plural "Events"
417
+ msgstr[0] "Evénements"
418
+ msgstr[1] "Evénements"
419
 
420
+ # @ all-in-one-event-calendar
421
+ #: app/helper/class-ai1ec-app-helper.php:793
422
+ msgid "Event Category"
423
+ msgid_plural "Event Categories"
424
+ msgstr[0] "Catégorie de l'événement"
425
+ msgstr[1] "Catégories de l'événement"
426
 
427
+ # @ all-in-one-event-calendar
428
+ #: app/helper/class-ai1ec-app-helper.php:805
429
+ msgid "Event Tag"
430
+ msgid_plural "Event Tags"
431
+ msgstr[0] "Mot-clé de l'événement"
432
+ msgstr[1] "Mot-clés de l'événement"
433
+
434
+ #. translators: "%s" represents the week's starting date
435
+ #: app/helper/class-ai1ec-calendar-helper.php:800
436
+ #: app/helper/class-ai1ec-calendar-helper.php:807
437
+ msgid "j F Y"
438
+ msgstr ""
439
 
440
+ #: app/helper/class-ai1ec-calendar-helper.php:893
441
+ #: app/helper/class-ai1ec-calendar-helper.php:902
442
+ msgid "M j"
443
+ msgstr ""
444
 
445
+ # @ all-in-one-event-calendar
446
+ #: app/helper/class-ai1ec-calendar-helper.php:934
447
+ msgid "« Previous Events"
448
+ msgstr "« Evénements précédents"
 
449
 
450
+ # @ all-in-one-event-calendar
451
+ #: app/helper/class-ai1ec-calendar-helper.php:941
452
+ msgid "Next Events »"
453
+ msgstr "Evénements à venir »"
 
 
 
454
 
455
+ # @ all-in-one-event-calendar
456
+ #: app/helper/class-ai1ec-events-helper.php:372
457
+ #: app/helper/class-ai1ec-events-helper.php:394
458
+ msgid "No repeat"
459
+ msgstr "Pas de répétition"
 
460
 
461
+ # @ all-in-one-event-calendar
462
+ #: app/helper/class-ai1ec-events-helper.php:373
463
+ #: app/helper/class-ai1ec-events-helper.php:395
464
+ msgid "Every day"
465
+ msgstr "Tous les jours"
466
 
467
+ # @ all-in-one-event-calendar
468
+ #: app/helper/class-ai1ec-events-helper.php:374
469
+ #: app/helper/class-ai1ec-events-helper.php:396
470
+ msgid "Every week"
471
+ msgstr "Toutes les semaines"
472
 
473
+ # @ all-in-one-event-calendar
474
+ #: app/helper/class-ai1ec-events-helper.php:375
475
+ #: app/helper/class-ai1ec-events-helper.php:397
476
+ msgid "Every month"
477
+ msgstr "Tous les mois"
478
 
479
+ # @ all-in-one-event-calendar
480
+ #: app/helper/class-ai1ec-events-helper.php:376
481
+ #: app/helper/class-ai1ec-events-helper.php:398
482
+ msgid "Every year"
483
+ msgstr "Tous les ans"
484
 
485
+ # @ all-in-one-event-calendar
486
+ #: app/helper/class-ai1ec-events-helper.php:378
487
+ #: app/helper/class-ai1ec-events-helper.php:400
488
+ msgid "Custom..."
489
+ msgstr "Personnalisé..."
490
 
491
+ # @ all-in-one-event-calendar
492
+ #: app/helper/class-ai1ec-events-helper.php:521
493
+ msgid "first"
494
+ msgstr "premier"
495
 
496
+ # @ all-in-one-event-calendar
497
+ #: app/helper/class-ai1ec-events-helper.php:522
498
+ msgid "second"
499
+ msgstr "deuxième"
 
500
 
501
+ # @ all-in-one-event-calendar
502
+ #: app/helper/class-ai1ec-events-helper.php:523
503
+ msgid "third"
504
+ msgstr "troisième"
505
 
506
+ # @ all-in-one-event-calendar
507
+ #: app/helper/class-ai1ec-events-helper.php:524
508
+ msgid "fourth"
509
+ msgstr "quatrième"
510
 
511
+ # @ all-in-one-event-calendar
512
+ #: app/helper/class-ai1ec-events-helper.php:526
513
+ msgid "last"
514
+ msgstr "dernier"
515
 
516
+ # @ all-in-one-event-calendar
517
+ #: app/helper/class-ai1ec-events-helper.php:531
518
+ msgid "Sunday"
519
+ msgstr "Dimanche"
520
 
521
+ # @ all-in-one-event-calendar
522
+ #: app/helper/class-ai1ec-events-helper.php:532
523
+ msgid "Monday"
524
+ msgstr "Lundi"
525
 
526
+ # @ all-in-one-event-calendar
527
+ #: app/helper/class-ai1ec-events-helper.php:533
528
+ msgid "Tuesday"
529
+ msgstr "Mardi"
530
 
531
+ # @ all-in-one-event-calendar
532
+ #: app/helper/class-ai1ec-events-helper.php:534
533
+ msgid "Wednesday"
534
+ msgstr "Mercredi"
535
 
536
+ # @ all-in-one-event-calendar
537
+ #: app/helper/class-ai1ec-events-helper.php:535
538
+ msgid "Thursday"
539
+ msgstr "Jeudi"
 
540
 
541
+ # @ all-in-one-event-calendar
542
+ #: app/helper/class-ai1ec-events-helper.php:536
543
+ msgid "Friday"
544
+ msgstr "Vendredi"
 
545
 
546
+ # @ all-in-one-event-calendar
547
+ #: app/helper/class-ai1ec-events-helper.php:537
548
+ msgid "Saturday"
549
+ msgstr "Samedi"
550
 
551
+ # @ all-in-one-event-calendar
552
+ #: app/helper/class-ai1ec-events-helper.php:539
553
+ msgid "day"
554
+ msgstr "jour"
 
555
 
556
+ # @ all-in-one-event-calendar
557
+ #: app/helper/class-ai1ec-events-helper.php:540
558
+ msgid "weekday"
559
+ msgstr "semaine"
560
 
561
+ # @ all-in-one-event-calendar
562
+ #: app/helper/class-ai1ec-events-helper.php:541
563
+ msgid "weekend day"
564
+ msgstr "weekend"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
565
 
566
+ # @ all-in-one-event-calendar
567
+ #: app/helper/class-ai1ec-events-helper.php:607
568
+ #: app/helper/class-ai1ec-events-helper.php:624
569
+ #: app/helper/class-ai1ec-events-helper.php:1707
570
+ #: app/helper/class-ai1ec-settings-helper.php:239
571
+ #: app/view/admin/box_repeat.php:2
572
+ msgid "Daily"
573
+ msgstr "Chaque jour"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
574
 
575
+ # @ all-in-one-event-calendar
576
+ #: app/helper/class-ai1ec-events-helper.php:608
577
+ #: app/helper/class-ai1ec-events-helper.php:625
578
+ #: app/helper/class-ai1ec-events-helper.php:1719
579
+ #: app/view/admin/box_repeat.php:3
580
+ msgid "Weekly"
581
+ msgstr "Chaque semaine"
582
 
583
+ # @ all-in-one-event-calendar
584
+ #: app/helper/class-ai1ec-events-helper.php:609
585
+ #: app/helper/class-ai1ec-events-helper.php:626
586
+ #: app/helper/class-ai1ec-events-helper.php:1731
587
+ #: app/view/admin/box_repeat.php:4
588
+ msgid "Monthly"
589
+ msgstr "Chaque mois"
590
 
591
+ # @ all-in-one-event-calendar
592
+ #: app/helper/class-ai1ec-events-helper.php:610
593
+ #: app/helper/class-ai1ec-events-helper.php:627
594
+ #: app/helper/class-ai1ec-events-helper.php:1743
595
+ #: app/view/admin/box_repeat.php:5
596
+ msgid "Yearly"
597
+ msgstr "Chaque année"
598
 
599
+ # @ all-in-one-event-calendar
600
+ #: app/helper/class-ai1ec-events-helper.php:649
601
+ msgid "day(s)"
602
+ msgstr "jour(s)"
 
 
603
 
604
+ # @ all-in-one-event-calendar
605
+ #: app/helper/class-ai1ec-events-helper.php:678
606
+ msgid "week(s)"
607
+ msgstr "semaine(s)"
608
 
609
+ # @ all-in-one-event-calendar
610
+ #: app/helper/class-ai1ec-events-helper.php:748
611
+ msgid "month(s)"
612
+ msgstr "mois"
613
 
614
+ # @ all-in-one-event-calendar
615
+ #: app/helper/class-ai1ec-events-helper.php:771
616
+ msgid "year(s)"
617
+ msgstr "année(s)"
618
 
619
+ # @ all-in-one-event-calendar
620
+ #: app/helper/class-ai1ec-events-helper.php:1391
621
+ msgid "Never"
622
+ msgstr "jamais"
623
 
624
+ # @ all-in-one-event-calendar
625
+ #: app/helper/class-ai1ec-events-helper.php:1392
626
+ msgid "After"
627
+ msgstr "Après"
 
628
 
629
+ # @ all-in-one-event-calendar
630
+ #: app/helper/class-ai1ec-events-helper.php:1393
631
+ #: app/view/admin/box_repeat.php:28
632
+ msgid "On date"
633
+ msgstr "A la date"
634
 
635
+ #: app/helper/class-ai1ec-events-helper.php:1586
636
+ #: app/helper/class-ai1ec-events-helper.php:1595
637
+ #: app/helper/class-ai1ec-events-helper.php:1603
638
+ msgctxt "Recurrence editor - weekly tab"
639
+ msgid "on"
640
+ msgstr ""
641
 
642
+ # @ all-in-one-event-calendar
643
+ #: app/helper/class-ai1ec-events-helper.php:1591
644
+ #: app/helper/class-ai1ec-events-helper.php:1620
645
+ #: app/helper/class-ai1ec-events-helper.php:1658
646
+ msgid "and"
647
+ msgstr "et"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
648
 
649
+ #: app/helper/class-ai1ec-events-helper.php:1616
650
+ #: app/helper/class-ai1ec-events-helper.php:1623
651
+ #: app/helper/class-ai1ec-events-helper.php:1629
652
+ #: app/helper/class-ai1ec-events-helper.php:1640
653
+ msgctxt "Recurrence editor - monthly tab"
654
+ msgid "on"
655
+ msgstr ""
656
 
657
+ # @ all-in-one-event-calendar
658
+ #: app/helper/class-ai1ec-events-helper.php:1616
659
+ #: app/helper/class-ai1ec-events-helper.php:1623
660
+ #: app/helper/class-ai1ec-events-helper.php:1629
661
+ msgid "of the month"
662
+ msgstr "dans le mois"
663
 
664
+ #: app/helper/class-ai1ec-events-helper.php:1653
665
+ #: app/helper/class-ai1ec-events-helper.php:1661
666
+ #: app/helper/class-ai1ec-events-helper.php:1668
667
+ msgctxt "Recurrence editor - yearly tab"
668
+ msgid "on"
669
+ msgstr ""
670
 
671
+ # @ all-in-one-event-calendar
672
+ #: app/helper/class-ai1ec-events-helper.php:1710
673
+ msgid "Every other day"
674
+ msgstr "Tous les autres jours"
 
675
 
676
+ # @ all-in-one-event-calendar
677
+ #: app/helper/class-ai1ec-events-helper.php:1712
678
+ msgid "Every %d days"
679
+ msgstr "Tous les %d jours"
 
680
 
681
+ # @ all-in-one-event-calendar
682
+ #: app/helper/class-ai1ec-events-helper.php:1722
683
+ msgid "Every other week"
684
+ msgstr "Toutes les autres semaines"
 
685
 
686
+ # @ all-in-one-event-calendar
687
+ #: app/helper/class-ai1ec-events-helper.php:1724
688
+ msgid "Every %d weeks"
689
+ msgstr "Toutes les %d semaines"
690
 
691
+ # @ all-in-one-event-calendar
692
+ #: app/helper/class-ai1ec-events-helper.php:1734
693
+ msgid "Every other month"
694
+ msgstr "Tous les autres mois"
695
 
696
+ # @ all-in-one-event-calendar
697
+ #: app/helper/class-ai1ec-events-helper.php:1736
698
+ msgid "Every %d months"
699
+ msgstr "Tous les %d mois"
700
 
701
+ # @ all-in-one-event-calendar
702
+ #: app/helper/class-ai1ec-events-helper.php:1746
703
+ msgid "Every other year"
704
+ msgstr "Toutes les autres années"
705
 
706
+ # @ all-in-one-event-calendar
707
+ #: app/helper/class-ai1ec-events-helper.php:1748
708
+ msgid "Every %d years"
709
+ msgstr "Toutes les %d années"
710
 
711
+ # @ all-in-one-event-calendar
712
+ #: app/helper/class-ai1ec-events-helper.php:1768
713
+ msgid "until %s"
714
+ msgstr "jusqu'à %s"
715
 
716
+ # @ all-in-one-event-calendar
717
+ #: app/helper/class-ai1ec-events-helper.php:1771
718
+ msgid "for %d occurrences"
719
+ msgstr "pour %d occurrences"
720
 
721
+ # @ all-in-one-event-calendar
722
+ #: app/helper/class-ai1ec-events-helper.php:1773
723
+ msgid "forever"
724
+ msgstr "pour toujours"
725
 
726
+ # @ all-in-one-event-calendar
727
+ #: app/helper/class-ai1ec-events-helper.php:1870
728
+ msgid "times"
729
+ msgstr "fois"
730
 
731
+ # @ all-in-one-event-calendar
732
+ #: app/helper/class-ai1ec-settings-helper.php:85
733
+ msgid "- Auto-Create New Page -"
734
+ msgstr "- Création automatique d'une nouvelle page -"
735
 
736
+ # @ all-in-one-event-calendar
737
+ #: app/helper/class-ai1ec-settings-helper.php:106
738
+ msgid "View \"%s\" »"
739
+ msgstr "Vue \"%s\" »"
740
 
741
+ # @ all-in-one-event-calendar
742
+ #: app/helper/class-ai1ec-settings-helper.php:206
743
+ msgid "Default (d/m/y)"
744
+ msgstr "Defaut (d/m/y)"
745
 
746
+ # @ all-in-one-event-calendar
747
+ #: app/helper/class-ai1ec-settings-helper.php:209
748
+ msgid "US (m/d/y)"
749
+ msgstr "US (m/d/y)"
750
 
751
+ # @ all-in-one-event-calendar
752
+ #: app/helper/class-ai1ec-settings-helper.php:212
753
+ msgid "ISO 8601 (y-m-d)"
754
+ msgstr "ISO 8601 (y-m-d)"
755
 
756
+ # @ all-in-one-event-calendar
757
+ #: app/helper/class-ai1ec-settings-helper.php:215
758
+ msgid "Dotted (m.d.y)"
759
+ msgstr "Dotted (m.d.y)"
760
 
761
+ # @ all-in-one-event-calendar
762
+ #: app/helper/class-ai1ec-settings-helper.php:233
763
+ msgid "Hourly"
764
+ msgstr "Horaire"
765
 
766
+ # @ all-in-one-event-calendar
767
+ #: app/helper/class-ai1ec-settings-helper.php:236
768
+ msgid "Twice Daily"
769
+ msgstr "2 fois par jour"
770
 
771
+ # @ all-in-one-event-calendar
772
+ #: app/model/class-ai1ec-event.php:507
773
+ msgid " (all-day)"
774
+ msgstr "journée entière"
775
 
776
+ # @ all-in-one-event-calendar
777
+ #: app/view/admin/agenda-widget-form.php:2
778
+ msgid "Title:"
779
+ msgstr "Titre&nbsp;:"
780
 
781
+ # @ all-in-one-event-calendar
782
+ #: app/view/admin/agenda-widget-form.php:6
783
+ msgid "Number of events to show:"
784
+ msgstr "Nombre d'événements à montrer&nbsp;:"
785
 
786
+ # @ all-in-one-event-calendar
787
+ #: app/view/admin/agenda-widget-form.php:14
788
+ msgid "Events with these <strong>Categories</strong>"
789
+ msgstr "Evénements avec ces <strong>Catégories</strong>"
790
 
791
+ # @ all-in-one-event-calendar
792
+ #: app/view/admin/agenda-widget-form.php:23
793
+ msgid "No categories found."
794
+ msgstr "Aucune catégorie trouvée."
795
 
796
+ # @ all-in-one-event-calendar
797
+ #: app/view/admin/agenda-widget-form.php:30
798
+ msgid "<strong>Or</strong> events with these <strong>Tags</strong>"
799
+ msgstr "<strong>ou</strong> événements avec ces <strong>mots clés</strong>"
800
 
801
+ # @ all-in-one-event-calendar
802
+ #: app/view/admin/agenda-widget-form.php:39
803
+ msgid "No tags found."
804
+ msgstr "Aucun tag trouvé."
805
 
806
+ # @ all-in-one-event-calendar
807
+ #: app/view/admin/agenda-widget-form.php:46
808
+ msgid "<strong>Or</strong> any of these <strong>Events</strong>"
809
+ msgstr "<strong>ou</strong> l'un de ces <strong>événements</strong>"
810
 
811
+ # @ all-in-one-event-calendar
812
+ #: app/view/admin/agenda-widget-form.php:55
813
+ msgid "No events found."
814
+ msgstr "Aucun événement trouvé."
815
 
816
+ # @ all-in-one-event-calendar
817
+ #: app/view/admin/agenda-widget-form.php:62
818
  msgid "Show <strong>View Calendar</strong> button"
819
  msgstr "Afficher le bouton <strong>Vue calendrier</strong>"
820
 
821
+ # @ all-in-one-event-calendar
822
+ #: app/view/admin/agenda-widget-form.php:65
823
  msgid "Show <strong>Subscribe</strong> buttons"
824
  msgstr "Montrer les boutons <strong>S'abonner</strong>"
825
 
826
+ # @ all-in-one-event-calendar
827
+ #: app/view/admin/agenda-widget-form.php:68
828
  msgid "Hide this widget on calendar page"
829
  msgstr "Cacher ce Widget sur la page \"Calendrier\""
830
 
831
+ # @ all-in-one-event-calendar
832
+ #: app/view/admin/box_advanced_settings.php:3
833
+ msgid "Contain calendar in this DOM element:"
834
+ msgstr "Réserver le calendrier à cet élément DOM&nbsp;:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
835
 
836
+ # @ all-in-one-event-calendar
837
+ #: app/view/admin/box_advanced_settings.php:5
838
+ msgid "Optional. Provide a <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container."
839
+ msgstr "Optionnel. Offre un <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">sélecteur jQuery </a> qui renvoie à un seul élément du DOM. Remplace toute balisage existant trouvé dans la cible. Si laissé vide, le calendrier est affiché dans un cadre contenu dans la page normale."
840
 
841
+ # @ all-in-one-event-calendar
842
+ #: app/view/admin/box_event_contact.php:1
843
  msgid "Organizer contact info"
844
  msgstr "Information planning contact"
845
 
846
+ # @ all-in-one-event-calendar
847
+ #: app/view/admin/box_event_contact.php:7
848
  msgid "Contact name:"
849
+ msgstr "Nom du contact&nbsp;:"
850
 
851
+ # @ all-in-one-event-calendar
852
+ #: app/view/admin/box_event_contact.php:17
853
  msgid "Phone:"
854
+ msgstr "Téléphone&nbsp;:"
855
 
856
+ # @ all-in-one-event-calendar
857
+ #: app/view/admin/box_event_contact.php:27
858
  msgid "E-mail:"
859
+ msgstr "E-mail&nbsp;:"
 
 
 
 
 
 
 
 
 
 
 
860
 
861
+ # @ all-in-one-event-calendar
862
+ #: app/view/admin/box_event_cost.php:1
863
  msgid "Event cost"
864
  msgstr "Coût de l'événement"
865
 
866
+ # @ all-in-one-event-calendar
867
+ #: app/view/admin/box_event_cost.php:7
868
  msgid "Cost"
869
  msgstr "Coût"
870
 
871
+ # @ all-in-one-event-calendar
872
+ #: app/view/admin/box_event_location.php:1
873
+ msgid "Event location details"
874
+ msgstr "Lieu de l'événement"
875
 
876
+ # @ all-in-one-event-calendar
877
+ #: app/view/admin/box_event_location.php:8
878
+ msgid "Venue name:"
879
+ msgstr "Lieu&nbsp;:"
880
+
881
+ # @ all-in-one-event-calendar
882
+ #: app/view/admin/box_event_location.php:18
883
+ msgid "Address:"
884
+ msgstr "Adresse&nbsp;:"
885
 
886
+ # @ all-in-one-event-calendar
887
+ #: app/view/admin/box_event_location.php:28
888
+ msgid "Show Google Map:"
889
+ msgstr "Montrer la carte Google&nbsp;:"
890
+
891
+ # @ all-in-one-event-calendar
892
+ #: app/view/admin/box_eventbrite.php:1
893
  msgid "Eventbrite Ticketing"
894
  msgstr "Billetterie Eventbrite"
895
 
896
+ # @ all-in-one-event-calendar
897
+ #: app/view/admin/box_eventbrite.php:7
898
  msgid "Register this event with Eventbrite.com?"
899
  msgstr "Enregistrer cet événement avec Eventbrite.com ?"
900
 
901
+ # @ all-in-one-event-calendar
902
+ #: app/view/admin/box_eventbrite.php:12
903
  msgid "Yes"
904
  msgstr "Oui"
905
 
906
+ # @ all-in-one-event-calendar
907
+ #: app/view/admin/box_eventbrite.php:14
908
  msgid "No"
909
  msgstr "Non"
910
 
911
+ # @ all-in-one-event-calendar
912
+ #: app/view/admin/box_eventbrite.php:22
913
  msgid "Set up your first ticket"
914
  msgstr "Configurer votre premier ticket"
915
 
916
+ # @ all-in-one-event-calendar
917
+ #: app/view/admin/box_eventbrite.php:24
918
  msgid "To create multiple tickets per event, submit this form, then follow the link to Eventbrite."
919
  msgstr "Pour créer de multiples tickets par événements, envoyez ce formulaire, puis suivez le lien vers Eventbrite."
920
 
921
+ # @ all-in-one-event-calendar
922
+ #: app/view/admin/box_eventbrite.php:32
923
  msgid "Name"
924
  msgstr "Nom"
925
 
926
+ # @ all-in-one-event-calendar
927
+ #: app/view/admin/box_eventbrite.php:42
928
  msgid "Description"
929
  msgstr "Description"
930
 
931
+ # @ all-in-one-event-calendar
932
+ #: app/view/admin/box_eventbrite.php:53
933
  msgid "Type"
934
  msgstr "Type"
935
 
936
+ # @ all-in-one-event-calendar
937
+ #: app/view/admin/box_eventbrite.php:58
938
  msgid "Set Price"
939
  msgstr "Définir le prix"
940
 
941
+ # @ all-in-one-event-calendar
942
+ #: app/view/admin/box_eventbrite.php:60
943
  msgid "Donation Based"
944
  msgstr "Sur la base de contribution"
945
 
946
+ # @ all-in-one-event-calendar
947
+ #: app/view/admin/box_eventbrite.php:68
948
  msgid "The price for this event's first ticket will be taken from the Cost field above."
949
  msgstr "Le prix de ce premier billet pour cet événement sera baser sur le champ \\\"Coût\\\" ci-dessus."
950
 
951
+ # @ all-in-one-event-calendar
952
+ #: app/view/admin/box_eventbrite.php:75
953
  msgid "Quantity"
954
  msgstr "Quantité"
955
 
956
+ # @ all-in-one-event-calendar
957
+ #: app/view/admin/box_eventbrite.php:85
958
  msgid "Include Fee in Price"
959
  msgstr "Compter les frais dans le prix"
960
 
961
+ # @ all-in-one-event-calendar
962
+ #: app/view/admin/box_eventbrite.php:90
963
  msgid "Add Service Fee on top of price"
964
  msgstr "Ajouter des frais de service en plus du prix"
965
 
966
+ # @ all-in-one-event-calendar
967
+ #: app/view/admin/box_eventbrite.php:92
968
  msgid "Include Service fee in price"
969
  msgstr "Inclure les frais de service dans le prix"
970
 
971
+ # @ all-in-one-event-calendar
972
+ #: app/view/admin/box_eventbrite.php:98
973
  msgid "Payment Options"
974
  msgstr "Options de paiement"
975
 
976
+ # @ all-in-one-event-calendar
977
+ #: app/view/admin/box_eventbrite.php:103
978
  msgid "Paypal"
979
  msgstr "Paypal"
980
 
981
+ # @ all-in-one-event-calendar
982
+ #: app/view/admin/box_eventbrite.php:105
983
  msgid "Google Checkout"
984
  msgstr "Google Checkout"
985
 
986
+ # @ all-in-one-event-calendar
987
+ #: app/view/admin/box_eventbrite.php:107
988
  msgid "Check"
989
  msgstr "Vérification"
990
 
991
+ # @ all-in-one-event-calendar
992
+ #: app/view/admin/box_eventbrite.php:109
993
  msgid "Cash"
994
+ msgstr "En liquide"
995
 
996
+ # @ all-in-one-event-calendar
997
+ #: app/view/admin/box_eventbrite.php:111
998
  msgid "Send an Invoice"
999
  msgstr "Envoyer une facture"
1000
 
1001
+ #: app/view/admin/box_feeds.php:2
1002
+ msgid ""
1003
+ "Configure which other calendars your own calendar subscribes to.\n"
1004
+ " You can add any calendar that provides an iCalendar (.ics) feed.\n"
1005
+ " Enter the feed URL(s) below and the events from those feeds will be\n"
1006
+ " imported periodically."
1007
+ msgstr ""
1008
+ "Configurer à quels autres calendriers votre calendrier est abonné.\n"
1009
+ " Vous pouvez ajouter un calendrier qui fournit un flux iCalendar (.ics).\n"
1010
+ " Entrez l'URL du flux ci-dessous et les événements de ce flux seront\n"
1011
+ " importés régulièrement."
1012
+
1013
+ #: app/view/admin/box_feeds.php:13
1014
+ msgid "Check for new events"
1015
+ msgstr "Vérifier s'il y a de nouveaux événements"
1016
+
1017
+ # @ all-in-one-event-calendar
1018
+ #: app/view/admin/box_feeds.php:19
1019
+ #: app/view/admin/feed_row.php:3
1020
+ msgid "iCalendar/.ics Feed URL:"
1021
+ msgstr "URL du flux iCalendar/.ics&nbsp;:"
1022
 
1023
+ # @ all-in-one-event-calendar
1024
+ #: app/view/admin/box_feeds.php:23
1025
+ msgid "Event category"
1026
+ msgstr "Catégorie"
1027
 
1028
+ # @ all-in-one-event-calendar
1029
+ #: app/view/admin/box_feeds.php:29
1030
+ #: app/view/admin/feed_row.php:15
1031
+ msgid "Tag with"
1032
+ msgstr "Indexé avec"
1033
 
1034
+ # @ all-in-one-event-calendar
1035
+ #: app/view/admin/box_feeds.php:33
1036
+ msgid "+ Add new subscription"
1037
+ msgstr "+ Ajouter un contenu"
 
 
 
 
1038
 
1039
+ # @ all-in-one-event-calendar
1040
+ #: app/view/admin/box_general_settings.php:3
1041
+ msgid "Viewing Events"
1042
+ msgstr "Voir les événements"
1043
 
1044
+ # @ all-in-one-event-calendar
1045
+ #: app/view/admin/box_general_settings.php:5
1046
+ msgid "Calendar page:"
1047
+ msgstr "Page du calendrier"
1048
 
1049
+ # @ all-in-one-event-calendar
1050
+ #: app/view/admin/box_general_settings.php:9
1051
+ msgid "Default calendar view:"
1052
+ msgstr "Vue par défaut&nbsp;:"
1053
 
1054
+ # @ all-in-one-event-calendar
1055
+ #: app/view/admin/box_general_settings.php:14
1056
+ msgid "Timezone:"
1057
+ msgstr "Fuseau horaire&nbsp;:"
1058
 
1059
+ # @ all-in-one-event-calendar
1060
+ #: app/view/admin/box_general_settings.php:19
1061
+ msgid "Week starts on"
1062
+ msgstr "La semaine commence le"
 
1063
 
1064
+ # @ all-in-one-event-calendar
1065
+ #: app/view/admin/box_general_settings.php:23
1066
+ msgid "Agenda pages show at most"
1067
+ msgstr "La vue Agenda affichera au plus"
1068
 
1069
+ # @ all-in-one-event-calendar
1070
+ #: app/view/admin/box_general_settings.php:24
1071
+ msgid "events"
1072
+ msgstr "événements"
1073
 
1074
+ # @ all-in-one-event-calendar
1075
+ #: app/view/admin/box_general_settings.php:29
1076
+ msgid "Keep all events <strong>expanded</strong> in the agenda view"
1077
+ msgstr "Conserver tous les événements <strong>visibles</strong> dans la vue agenda"
1078
 
1079
+ # @ all-in-one-event-calendar
1080
+ #: app/view/admin/box_general_settings.php:35
1081
+ msgid "<strong>Exclude</strong> events from search results"
1082
+ msgstr "<strong>Exclure</strong> les événements des résultats de recherche"
 
 
1083
 
1084
+ # @ all-in-one-event-calendar
1085
+ #: app/view/admin/box_general_settings.php:41
1086
+ msgid "Show <strong>Post Your Event</strong> button above the calendar to privileged users"
1087
+ msgstr "Montrer le bouton <strong>Poster votre événement</strong> au dessus du calendrier pour les utilisateurs autorisés"
 
1088
 
1089
+ # @ all-in-one-event-calendar
1090
+ #: app/view/admin/box_general_settings.php:47
1091
+ msgid "Hide <strong>Subscribe</strong>/<strong>Add to Calendar</strong> buttons in calendar and single event views"
1092
+ msgstr "Cacher les boutons <strong>S'abonner</strong>/<strong>Ajouter au calendrier</strong>dans le calendrier et les vue de détail"
1093
 
1094
+ # @ all-in-one-event-calendar
1095
+ #: app/view/admin/box_general_settings.php:53
1096
+ msgid "Hide <strong>Google Maps</strong> until clicked"
1097
+ msgstr "Cacher <strong>Google Maps</strong> avant le clic"
 
1098
 
1099
+ # @ all-in-one-event-calendar
1100
+ #: app/view/admin/box_general_settings.php:59
1101
+ msgid "Include <strong>event categories</strong> in post category lists"
1102
+ msgstr "Inclure les <strong>catégories d'événements </strong> dans la liste des catégories d'articles"
 
1103
 
1104
+ # @ all-in-one-event-calendar
1105
+ #: app/view/admin/box_general_settings.php:63
1106
+ msgid "Adding/Editing Events"
1107
+ msgstr "Ajouter/Editer des événements"
1108
 
1109
+ # @ all-in-one-event-calendar
1110
+ #: app/view/admin/box_general_settings.php:65
1111
+ msgid "Input dates in this format:"
1112
+ msgstr "Insérer les dates dans ce format"
 
1113
 
1114
+ # @ all-in-one-event-calendar
1115
+ #: app/view/admin/box_general_settings.php:71
1116
+ msgid "Use <strong>24h time</strong> in time pickers"
1117
+ msgstr "Utiliser le format <strong>24h</strong> dans les aperçus"
 
1118
 
1119
+ #: app/view/admin/box_general_settings.php:77
1120
+ msgid "<strong>Disable address autocomplete</strong> function"
1121
+ msgstr "Désactiver la fonction de complétion automatique de l'adresse"
 
1122
 
1123
+ #: app/view/admin/box_general_settings.php:83
1124
+ msgid "Use the configured <strong>region</strong> (WordPress locale) to bias the address autocomplete function"
1125
+ msgstr "Utiliser la <strong>région</strong> configurée (Localisation WordPress), pour influer sur la fonction de complétion automatique de l'adresse"
 
 
1126
 
1127
+ # @ all-in-one-event-calendar
1128
+ #: app/view/admin/box_general_settings.php:89
1129
+ msgid "Display <strong>Publish</strong> at bottom of Edit Event form"
1130
+ msgstr "Monter <strong>Publier</strong> en bas du formulaire d'édition des événements"
 
1131
 
1132
+ #: app/view/admin/box_general_settings.php:93
1133
+ msgid "Sharing Data"
1134
+ msgstr "Partage des données"
 
 
1135
 
1136
+ #: app/view/admin/box_general_settings.php:97
1137
+ msgid "Allow The Seed to collect calendar statistics"
1138
+ msgstr "Autoriser The Seed à collecter des données statistiques"
 
 
1139
 
1140
+ # @ all-in-one-event-calendar
1141
+ #: app/view/admin/box_repeat.php:14
1142
+ msgid "End"
1143
+ msgstr "Fin"
 
1144
 
1145
+ # @ all-in-one-event-calendar
1146
+ #: app/view/admin/box_repeat.php:21
1147
+ msgid "Ending after"
1148
+ msgstr "Se terminant après"
 
1149
 
1150
+ # @ all-in-one-event-calendar
1151
+ #: app/view/admin/box_repeat.php:36
1152
+ msgid "Apply"
1153
+ msgstr "Appliquer"
 
1154
 
1155
+ # @ all-in-one-event-calendar
1156
+ #: app/view/admin/box_repeat.php:37
1157
+ msgid "Cancel"
1158
+ msgstr "Effacer"
 
1159
 
1160
+ #: app/view/admin/box_the_seed_studio.php:3
1161
+ msgid "then.ly"
1162
+ msgstr "then.ly"
 
1163
 
1164
+ #: app/view/admin/box_the_seed_studio.php:7
1165
+ msgid "Then.ly’s All-in-One Calendar is a revolutionary new way to find and share events."
1166
+ msgstr "All-in-One Calendar par Then.ly est un nouveau moyen révolutionnaire de trouver et partager des événements."
 
1167
 
1168
+ # @ all-in-one-event-calendar
1169
+ #: app/view/admin/box_the_seed_studio.php:16
1170
+ msgid "Follow @then_ly"
1171
+ msgstr "Suivre @then_ly"
1172
 
1173
+ #: app/view/admin/box_the_seed_studio.php:22
1174
+ msgid "Upgrade to the free Premium version and get access to exclusive features such as:"
1175
+ msgstr "Mettez à jour à la version Premium gratuite et obtenez l'accès aux fonctionnalités telles que&nbsp;:"
 
 
1176
 
1177
+ # @ all-in-one-event-calendar
1178
+ #: app/view/admin/box_the_seed_studio.php:29
1179
+ msgid "Calendar Themes"
1180
+ msgstr "Thèmes Calendrier"
 
1181
 
1182
+ # @ all-in-one-event-calendar
1183
+ #: app/view/admin/box_the_seed_studio.php:30
1184
+ msgid "Duplicate Events"
1185
+ msgstr "Cloner un événement"
 
1186
 
1187
+ #: app/view/admin/box_the_seed_studio.php:35
1188
+ msgid "Location by Latitude/Longitude"
1189
+ msgstr "Lieu par Latitude/Longitude"
 
 
1190
 
1191
+ #: app/view/admin/box_the_seed_studio.php:36
1192
+ msgid "... and more!"
1193
+ msgstr "... et plus&nbsp;!"
 
 
1194
 
1195
+ #: app/view/admin/box_the_seed_studio.php:43
1196
+ msgid "Upgrade to Premium for Free"
1197
+ msgstr "Mettre à jour à Premium gratuitement"
 
 
1198
 
1199
+ #: app/view/admin/box_the_seed_studio.php:48
1200
+ msgid "Then.ly is dedicated to creating the best calendar software in the world."
1201
+ msgstr "Then.ly se voue à créer le meilleur logiciel de calendrier au monde."
 
1202
 
1203
+ #: app/view/admin/box_the_seed_studio.php:52
1204
+ msgid "Please let us know if anything is not working the way you expect. While many problems are caused by conflicts with other plugins, most problems can be solved quickly. Visit our <a href=\"http://help.then.ly/\" target=\"_blank\">Help Desk</a> to report bugs, request features, or learn how to get the most out of this plugin."
1205
+ msgstr "Veuillez nous informer si quelque chose ne fonctionne pas de la manière souhaitée. Bien que beaucoup de problèmes soient dus à des conflits avec d'autres extensions, la plupart des problèmes peuvent être solutionnés rapidement. Visitez notre <a href=\"http://help.then.ly/\" target=\"_blank\">Help Desk</a> pour rapporter des bugs, demander de nouvelles fonctionnalités, ou apprendre à obtenir le meilleur de cette extension."
 
1206
 
1207
+ # @ all-in-one-event-calendar
1208
+ #: app/view/admin/box_the_seed_studio.php:56
1209
+ msgid "Get Support"
1210
+ msgstr "Assistance"
1211
 
1212
+ # @ all-in-one-event-calendar
1213
+ #: app/view/admin/box_time_and_date.php:2
1214
+ msgid "Event date and time"
1215
+ msgstr "Date et heure de l'événement"
1216
 
1217
+ # @ all-in-one-event-calendar
1218
+ #: app/view/admin/box_time_and_date.php:8
1219
+ msgid "All-day event"
1220
+ msgstr "Journée entière"
1221
 
1222
+ # @ all-in-one-event-calendar
1223
+ #: app/view/admin/box_time_and_date.php:18
1224
+ msgid "Start date / time"
1225
+ msgstr "Date / Heure de début"
1226
 
1227
+ # @ all-in-one-event-calendar
1228
+ #: app/view/admin/box_time_and_date.php:31
1229
+ msgid "End date / time"
1230
+ msgstr "Date / heure de fin"
1231
 
1232
+ # @ all-in-one-event-calendar
1233
+ #: app/view/admin/box_time_and_date.php:46
1234
+ msgid "Repeat"
1235
+ msgstr "Répétition"
1236
 
1237
+ #: app/view/admin/box_time_and_date.php:60
1238
+ msgid "Exclude"
1239
+ msgstr "Exclusion"
1240
+
1241
+ #: app/view/admin/box_time_and_date.php:67
1242
+ msgid "Choose a rule for exclusion"
1243
+ msgstr "Choisissez une date pour l'exclusion"
1244
+
1245
+ #: app/view/admin/box_time_and_date.php:73
1246
+ msgid "Exclude dates"
1247
+ msgstr "Exclure les dates"
1248
+
1249
+ # @ all-in-one-event-calendar
1250
+ #: app/view/admin/box_time_and_date.php:80
1251
+ msgid "Select date range"
1252
+ msgstr "Sélectionner une fourchette de temps"
1253
+
1254
+ #: app/view/admin/box_time_and_date.php:85
1255
+ msgid "Choose specific dates to exclude"
1256
+ msgstr "Choisissez des dates spécifiques à exclure"
1257
+
1258
+ #: app/view/admin/calendar_tasks.php:3
1259
+ msgid "Welcome"
1260
+ msgstr "Bienvenue"
1261
+
1262
+ #: app/view/admin/calendar_tasks.php:4
1263
+ msgid "to the All-in-One Calendar by <a href=\"http://then.ly/\" target=\"_blank\">Then.ly</a>"
1264
+ msgstr "à All-in-One Calendar par <a href=\"http://then.ly/\" target=\"_blank\">Then.ly</a>"
1265
+
1266
+ # @ all-in-one-event-calendar
1267
+ #: app/view/admin/calendar_tasks.php:13
1268
+ #: themes-ai1ec/vortex/calendar.php:30
1269
+ msgid "Post Your Event"
1270
+ msgstr "Poster votre événement"
1271
+
1272
+ # @ all-in-one-event-calendar
1273
+ #: app/view/admin/calendar_tasks.php:16
1274
+ msgid "Add a new event to the calendar."
1275
+ msgstr "Ajouter un nouvel événement au calendrier."
1276
+
1277
+ # @ all-in-one-event-calendar
1278
+ #: app/view/admin/calendar_tasks.php:24
1279
+ msgid "Manage Events"
1280
+ msgstr "Gérer les événements"
1281
+
1282
+ #: app/view/admin/calendar_tasks.php:27
1283
+ msgid "View and edit all your events."
1284
+ msgstr "Voir et gérer vos événements."
1285
+
1286
+ # @ all-in-one-event-calendar
1287
+ #: app/view/admin/calendar_tasks.php:39
1288
+ msgid "Manage Event Categories"
1289
+ msgstr "Gérer les catégories d'événements"
1290
+
1291
+ #: app/view/admin/calendar_tasks.php:42
1292
+ msgid "Organize and color-code your events."
1293
+ msgstr "Organisez et donnez un code de couleur à votre événements"
1294
+
1295
+ #: app/view/admin/calendar_tasks.php:50
1296
+ msgid "Choose Your Theme"
1297
+ msgstr "Choisissez votre thème"
1298
+
1299
+ #: app/view/admin/calendar_tasks.php:53
1300
+ msgid "Change the look and feel."
1301
+ msgstr "Changez le design."
1302
+
1303
+ #: app/view/admin/calendar_tasks.php:63
1304
+ msgid "Manage Calendar Feeds"
1305
+ msgstr "Gérer les flux calendrier"
1306
+
1307
+ # @ all-in-one-event-calendar
1308
+ #: app/view/admin/calendar_tasks.php:66
1309
+ msgid "Subscribe to other calendars."
1310
+ msgstr "S'abonner à d'autres calendriers."
1311
+
1312
+ # @ all-in-one-event-calendar
1313
+ #: app/view/admin/calendar_tasks.php:74
1314
+ msgid "Edit Calendar Settings"
1315
+ msgstr "Mettre à jour la configuration"
1316
 
1317
+ #: app/view/admin/calendar_tasks.php:77
1318
+ msgid "Make this calendar your own."
1319
+ msgstr "Faire de ce calendrier le vôtre."
 
1320
 
1321
+ # @ all-in-one-event-calendar
1322
+ #: app/view/admin/class-ai1ec-agenda-widget.php:15
1323
+ #: app/view/admin/class-ai1ec-agenda-widget.php:36
1324
+ msgid "Upcoming Events"
1325
+ msgstr "Nouveaux événements"
1326
 
1327
+ # @ all-in-one-event-calendar
1328
+ #: app/view/admin/class-ai1ec-agenda-widget.php:17
1329
+ msgid "All-in-One Calendar: Lists upcoming events in Agenda view"
1330
+ msgstr "All-in-One Event Calendar&nbsp;: Lister les événements à venir dans la vue Agenda"
1331
 
1332
+ # @ all-in-one-event-calendar
1333
+ #: app/view/admin/event_categories-color_picker.php:5
1334
+ #: app/view/admin/event_categories-color_picker.php:19
1335
+ msgid "Category Color"
1336
+ msgstr "Couleur de la catégorie"
1337
 
1338
+ # @ all-in-one-event-calendar
1339
+ #: app/view/admin/event_categories-color_picker.php:13
1340
+ #: app/view/admin/event_categories-color_picker.php:25
1341
+ msgid "Events in this category will be identified by this color"
1342
+ msgstr "Les événements de cette catégorie seront identifiés de cette couleur"
1343
 
1344
+ # @ all-in-one-event-calendar
1345
+ #: app/view/admin/feed_row.php:9
1346
+ msgid "Event category:"
1347
+ msgstr "Catégorie d'événement"
1348
 
1349
+ # @ all-in-one-event-calendar
1350
+ #: app/view/admin/feed_row.php:19
1351
+ msgid "× Delete"
1352
+ msgstr "Effacer"
1353
 
1354
+ # @ all-in-one-event-calendar
1355
+ #: app/view/admin/import.php:6
1356
+ msgid "Successfully imported events:"
1357
+ msgstr "L'importation des événements s'est bien passée"
1358
 
1359
+ # @ all-in-one-event-calendar
1360
+ #: app/view/admin/row_daily.php:3
1361
+ #: app/view/admin/row_monthly.php:3
1362
+ #: app/view/admin/row_monthly.php:22
1363
+ #: app/view/admin/row_weekly.php:3
1364
+ #: app/view/admin/row_yearly.php:3
1365
+ msgid "Every"
1366
+ msgstr "Tous les"
1367
 
1368
+ # @ all-in-one-event-calendar
1369
+ #: app/view/admin/row_monthly.php:9
1370
+ msgid "On day of the month"
1371
+ msgstr "Un jour du mois"
1372
 
1373
+ # @ all-in-one-event-calendar
1374
+ #: app/view/admin/row_monthly.php:13
1375
+ msgid "On day of the week"
1376
+ msgstr "Un jour de la semaine"
1377
 
1378
+ # @ all-in-one-event-calendar
1379
+ #: app/view/admin/row_weekly.php:6
1380
+ msgctxt "Recurrence editor - weekly tab"
1381
+ msgid "On"
1382
+ msgstr "sur"
1383
 
1384
+ # @ all-in-one-event-calendar
1385
+ #: app/view/admin/row_yearly.php:7
1386
+ msgctxt "Recurrence editor - yearly tab"
1387
+ msgid "In"
1388
+ msgstr "dans"
 
 
 
 
 
 
 
1389
 
1390
+ # @ all-in-one-event-calendar
1391
+ #: app/view/admin/settings.php:16
1392
+ msgid "Update Settings"
1393
+ msgstr "Mettre à jour la configuration"
 
 
1394
 
1395
+ #: lib/class-ai1ec-updater.php:12
1396
+ msgid "The plugin is at the latest version."
1397
+ msgstr "L'extension est à la dernière version."
 
 
 
1398
 
1399
+ #: lib/class-ai1ec-updater.php:13
1400
+ msgid "Update package not available."
1401
+ msgstr "Paquet de mise à jour non disponible."
 
1402
 
1403
+ #: lib/class-ai1ec-updater.php:14
1404
+ msgid "Downloading update from <span class=\"code\">%s</span>&#8230;"
1405
+ msgstr "Téléchargement de la mise à jour depuis <span class=\"code\">%s</span>&#8230;"
 
 
1406
 
1407
+ #: lib/class-ai1ec-updater.php:15
1408
+ msgid "Unpacking the update&#8230;"
1409
+ msgstr "Décompression de la mise à jour&#8230;"
 
1410
 
1411
+ #: lib/class-ai1ec-updater.php:16
1412
+ msgid "Deactivating the plugin&#8230;"
1413
+ msgstr "Désactivation de l'extension&#8230;"
 
 
1414
 
1415
+ #: lib/class-ai1ec-updater.php:17
1416
+ msgid "Removing the old version of the plugin&#8230;"
1417
+ msgstr "Suppression de l'ancienne version de l'extension&#8230;"
 
1418
 
1419
+ #: lib/class-ai1ec-updater.php:18
1420
+ msgid "Could not remove the old plugin."
1421
+ msgstr "l'ancienne extension n'a pas pu être supprimée"
 
 
1422
 
1423
+ #: lib/class-ai1ec-updater.php:19
1424
+ msgid "Plugin update failed."
1425
+ msgstr "La mise à jour de l'extension a échoué."
 
1426
 
1427
+ #: lib/class-ai1ec-updater.php:20
1428
+ msgid "Plugin updated successfully."
1429
+ msgstr "L'extension a été mise à jour avec succès."
 
 
1430
 
1431
+ # @ all-in-one-event-calendar
1432
+ #: themes-ai1ec/vortex/agenda-widget.php:11
1433
+ msgid "There are no upcoming events."
1434
+ msgstr "Il n'y a pas d'événements à venir"
 
1435
 
1436
+ # @ all-in-one-event-calendar
1437
+ #: themes-ai1ec/vortex/agenda-widget.php:60
1438
+ msgid "View Calendar"
1439
+ msgstr "Voir le calendrier"
 
1440
 
1441
+ # @ all-in-one-event-calendar
1442
+ #: themes-ai1ec/vortex/agenda-widget.php:69
1443
+ #: themes-ai1ec/vortex/calendar.php:114
1444
+ msgid "Subscribe to this calendar using your favourite calendar program (iCal, Outlook, etc.)"
1445
+ msgstr "S'abonner à ce calendrier en utilisant votre logiciel d'agenda favori (iCal, Outlook, etc.)"
1446
 
1447
+ # @ all-in-one-event-calendar
1448
+ #: themes-ai1ec/vortex/agenda-widget.php:70
1449
+ #: themes-ai1ec/vortex/calendar.php:115
1450
+ msgid " Subscribe"
1451
+ msgstr "S'abonner"
1452
 
1453
+ # @ all-in-one-event-calendar
1454
+ #: themes-ai1ec/vortex/agenda-widget.php:74
1455
+ #: themes-ai1ec/vortex/calendar.php:120
1456
+ msgid "Subscribe to this calendar in your Google Calendar"
1457
+ msgstr "S'abonner à ce calendrier dans votre agenda Google"
1458
 
1459
+ # @ all-in-one-event-calendar
1460
+ #: themes-ai1ec/vortex/agenda-widget.php:76
1461
+ msgid "Add to Google"
1462
+ msgstr "Ajouter à Google"
1463
 
1464
+ # @ all-in-one-event-calendar
1465
+ #: themes-ai1ec/vortex/agenda.php:6
1466
+ #: themes-ai1ec/vortex/month.php:6
1467
+ #: themes-ai1ec/vortex/oneday.php:7
1468
+ #: themes-ai1ec/vortex/week.php:6
1469
+ msgid "Today"
1470
+ msgstr "Aujourd'hui"
1471
 
1472
+ # @ all-in-one-event-calendar
1473
+ #: themes-ai1ec/vortex/agenda.php:12
1474
+ msgid "Expand All"
1475
+ msgstr "+ Tout déployer"
1476
 
1477
+ # @ all-in-one-event-calendar
1478
+ #: themes-ai1ec/vortex/agenda.php:15
1479
+ msgid "Collapse All"
1480
+ msgstr " Tout contracter"
1481
 
1482
+ # @ all-in-one-event-calendar
1483
+ #: themes-ai1ec/vortex/agenda.php:32
1484
+ msgid "There are no upcoming events to display at this time."
1485
+ msgstr "Il n'y a pas d'événements à venir en ce moment"
1486
+
1487
+ # @ all-in-one-event-calendar
1488
+ #: themes-ai1ec/vortex/agenda.php:62
1489
+ #: themes-ai1ec/vortex/agenda.php:112
1490
+ #: themes-ai1ec/vortex/month.php:81
1491
+ #: themes-ai1ec/vortex/oneday.php:71
1492
+ #: themes-ai1ec/vortex/week.php:70
1493
+ msgid "(all-day)"
1494
+ msgstr "(journée-complète)"
1495
+
1496
+ # @ all-in-one-event-calendar
1497
+ #: themes-ai1ec/vortex/agenda.php:80
1498
+ msgid "Read more"
1499
+ msgstr "Lire la suite"
1500
+
1501
+ # @ all-in-one-event-calendar
1502
+ #: themes-ai1ec/vortex/agenda.php:84
1503
+ #: themes-ai1ec/vortex/event-multi.php:45
1504
+ #: themes-ai1ec/vortex/event-single.php:57
1505
+ msgid "Categories:"
1506
+ msgstr "Catégories&nbsp;:"
1507
+
1508
+ # @ all-in-one-event-calendar
1509
+ #: themes-ai1ec/vortex/agenda.php:90
1510
+ #: themes-ai1ec/vortex/event-multi.php:51
1511
+ #: themes-ai1ec/vortex/event-single.php:64
1512
+ msgid "Tags:"
1513
+ msgstr "Mots-clés&nbsp;:"
1514
+
1515
+ # @ all-in-one-event-calendar
1516
+ #: themes-ai1ec/vortex/calendar.php:38
1517
+ msgid "Clear Filters"
1518
+ msgstr "Réinitialiser les filtres"
1519
+
1520
+ # @ all-in-one-event-calendar
1521
+ #: themes-ai1ec/vortex/calendar.php:39
1522
+ msgid "Filter:"
1523
+ msgstr "Filtrer&nbsp;:"
1524
 
1525
+ # @ all-in-one-event-calendar
1526
+ #: themes-ai1ec/vortex/calendar.php:46
1527
  msgid "Categories"
1528
  msgstr "Catégories"
1529
 
1530
+ # @ all-in-one-event-calendar
1531
+ #: themes-ai1ec/vortex/calendar.php:72
1532
  msgid "Tags"
1533
+ msgstr "Mots-clés&nbsp;:"
1534
 
1535
+ # @ all-in-one-event-calendar
1536
+ #: themes-ai1ec/vortex/calendar.php:116
1537
+ msgid "to this filtered calendar"
1538
+ msgstr "à cette vue du calendrier"
1539
 
1540
+ # @ all-in-one-event-calendar
1541
+ #: themes-ai1ec/vortex/calendar.php:122
1542
+ msgid "Subscribe in Google Calendar"
1543
+ msgstr "S'abonner dans l'agenda Google"
1544
 
1545
+ # @ all-in-one-event-calendar
1546
+ #: themes-ai1ec/vortex/event-excerpt.php:2
1547
+ #: themes-ai1ec/vortex/event-multi.php:4
1548
+ #: themes-ai1ec/vortex/event-single.php:5
1549
+ msgid "When:"
1550
+ msgstr "Quand&nbsp;:"
1551
 
1552
+ # @ all-in-one-event-calendar
1553
+ #: themes-ai1ec/vortex/event-excerpt.php:4
1554
+ #: themes-ai1ec/vortex/event-multi.php:20
1555
+ #: themes-ai1ec/vortex/event-single.php:25
1556
+ msgid "Where:"
1557
+ msgstr "Où&nbsp;:"
1558
 
1559
+ # @ all-in-one-event-calendar
1560
+ #: themes-ai1ec/vortex/event-map.php:2
1561
+ msgid "Click to view map"
1562
+ msgstr "Cliquer pour voir la carte"
1563
 
1564
+ # @ all-in-one-event-calendar
1565
+ #: themes-ai1ec/vortex/event-map.php:9
1566
+ msgid "View Full-Size Map"
1567
+ msgstr "Voir la carte en grande taille"
 
 
 
1568
 
1569
+ # @ all-in-one-event-calendar
1570
+ #: themes-ai1ec/vortex/event-multi.php:7
1571
+ msgid "View in Calendar »"
1572
+ msgstr "Voir dans le calendrier »"
1573
 
1574
+ # @ all-in-one-event-calendar
1575
+ #: themes-ai1ec/vortex/event-multi.php:14
1576
+ #: themes-ai1ec/vortex/event-single.php:15
1577
+ msgid "Repeats:"
1578
+ msgstr "Répétitions&nbsp;:"
1579
 
1580
+ # @ all-in-one-event-calendar
1581
+ #: themes-ai1ec/vortex/event-multi.php:24
1582
+ msgid "View Map »"
1583
+ msgstr "Voir la carte »"
1584
+
1585
+ # @ all-in-one-event-calendar
1586
+ #: themes-ai1ec/vortex/event-multi.php:33
1587
+ #: themes-ai1ec/vortex/event-single.php:45
1588
+ msgid "Cost:"
1589
+ msgstr "Coût&nbsp;:"
1590
+
1591
+ # @ all-in-one-event-calendar
1592
+ #: themes-ai1ec/vortex/event-multi.php:39
1593
+ #: themes-ai1ec/vortex/event-single.php:51
1594
+ msgid "Contact:"
1595
+ msgstr "Contact&nbsp;:"
1596
+
1597
+ # @ default
1598
+ #: themes-ai1ec/vortex/event-single-footer.php:4
1599
+ msgid "This post was replicated from another site's <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
1600
+ msgstr "Cet article a été copié depuis le <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">flux calendrier</a> d'un autre site."
1601
+
1602
+ # @ all-in-one-event-calendar
1603
+ #: themes-ai1ec/vortex/event-single-footer.php:8
1604
+ msgid "View original post"
1605
+ msgstr "Voir l'article original"
1606
+
1607
+ # @ all-in-one-event-calendar
1608
+ #: themes-ai1ec/vortex/event-single.php:8
1609
+ msgid "Back to Calendar"
1610
+ msgstr "Retour au calendrier"
1611
+
1612
+ #: themes-ai1ec/vortex/event-single.php:21
1613
+ msgid "Excluding:"
1614
+ msgstr "Excepté&nbsp;:"
1615
+
1616
+ # @ all-in-one-event-calendar
1617
+ #: themes-ai1ec/vortex/event-single.php:32
1618
+ msgid "Add this event to your favourite calendar program (iCal, Outlook, etc.)"
1619
+ msgstr "Ajouter cet événement à votre logiciel d'agenda favori"
1620
+
1621
+ # @ all-in-one-event-calendar
1622
+ #: themes-ai1ec/vortex/event-single.php:33
1623
+ msgid "✔ Add to Calendar"
1624
+ msgstr "✔ Ajouter au calendrier"
1625
+
1626
+ # @ all-in-one-event-calendar
1627
+ #: themes-ai1ec/vortex/event-single.php:36
1628
+ msgid "Add this event to your Google Calendar"
1629
+ msgstr "Ajouter cet événement à votre agenda Google"
1630
+
1631
+ # @ all-in-one-event-calendar
1632
+ #: themes-ai1ec/vortex/event-single.php:38
1633
+ msgid "Add to Google Calendar"
1634
+ msgstr "Ajouter à l'agenda Google"
1635
+
1636
+ # @ all-in-one-event-calendar
1637
+ #: themes-ai1ec/vortex/month.php:63
1638
+ #: themes-ai1ec/vortex/oneday.php:57
1639
+ #: themes-ai1ec/vortex/oneday.php:140
1640
+ #: themes-ai1ec/vortex/week.php:56
1641
+ #: themes-ai1ec/vortex/week.php:142
1642
+ msgid "Summary:"
1643
+ msgstr "Résumé&nbsp;:"
1644
+
1645
+ # @ all-in-one-event-calendar
1646
+ #: themes-ai1ec/vortex/month.php:66
1647
+ #: themes-ai1ec/vortex/oneday.php:60
1648
+ #: themes-ai1ec/vortex/oneday.php:143
1649
+ #: themes-ai1ec/vortex/week.php:59
1650
+ #: themes-ai1ec/vortex/week.php:145
1651
+ msgid "click anywhere for details"
1652
+ msgstr "cliquer n'importe ou pour des détails"
1653
+
1654
+ # @ all-in-one-event-calendar
1655
+ #: themes-ai1ec/vortex/oneday.php:35
1656
+ #: themes-ai1ec/vortex/week.php:34
1657
+ msgid "All-day"
1658
+ msgstr "Journée complète"
1659
+
1660
+ # @ all-in-one-event-calendar
1661
+ #. Plugin Name of the plugin/theme
1662
+ msgid "All-in-One Calendar by Then.ly"
1663
+ msgstr "All-in-one Event Calendar par Then.ly"
1664
+
1665
+ #. #-#-#-#-# plugin.pot (All-in-One Calendar by Then.ly 1.6.3) #-#-#-#-#
1666
+ #. Plugin URI of the plugin/theme
1667
+ #. #-#-#-#-# plugin.pot (All-in-One Calendar by Then.ly 1.6.3) #-#-#-#-#
1668
+ #. Author URI of the plugin/theme
1669
+ msgid "http://then.ly/"
1670
+ msgstr "http://then.ly/"
1671
+
1672
+ #. Description of the plugin/theme
1673
+ msgid "A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds."
1674
+ msgstr "Un système de calendrier avec vues par mois, par semaine, en agenda, un widget des événements à venir, un code de couleurs pour les catégories, récurrence, et une fonction d'import-export des flux .ics."
1675
+
1676
+ #. Author of the plugin/theme
1677
+ msgid "Then.ly"
1678
+ msgstr "Then.ly"
1679
 
language/all-in-one-event-calendar.mo CHANGED
Binary file
language/all-in-one-event-calendar.po DELETED
@@ -1,1254 +0,0 @@
1
- # Copyright (C) 2012 All-in-One Event Calendar
2
- # This file is distributed under the same license as the All-in-One Event Calendar package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: All-in-One Event Calendar 1.3\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
7
- "POT-Creation-Date: 2012-03-01 20:50:01+00:00\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=UTF-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-03-01 22:54+0200\n"
12
- "Last-Translator: Yani Iliev <yani@the-seed.ca>\n"
13
- "Language-Team: The Seed Studio\n"
14
-
15
- #: app/controller/class-ai1ec-app-controller.php:364
16
- #: app/controller/class-ai1ec-app-controller.php:365
17
- msgid "Settings"
18
- msgstr ""
19
-
20
- #. translators: "%s" represents the week's starting date
21
- #: app/controller/class-ai1ec-calendar-controller.php:326
22
- #: app/helper/class-ai1ec-calendar-helper.php:717
23
- #: app/helper/class-ai1ec-calendar-helper.php:726
24
- msgid "Week of %s"
25
- msgstr ""
26
-
27
- #: app/controller/class-ai1ec-calendar-controller.php:326
28
- msgid "F j"
29
- msgstr ""
30
-
31
- #: app/controller/class-ai1ec-calendar-controller.php:383
32
- #: app/helper/class-ai1ec-settings-helper.php:155
33
- #: app/view/calendar.php:26
34
- msgid "Agenda"
35
- msgstr ""
36
-
37
- #: app/controller/class-ai1ec-events-controller.php:153
38
- msgid "This feed is already being imported."
39
- msgstr ""
40
-
41
- #: app/controller/class-ai1ec-events-controller.php:154
42
- msgid "Please enter a valid iCalendar URL."
43
- msgstr ""
44
-
45
- #: app/controller/class-ai1ec-events-controller.php:333
46
- msgid "Publish"
47
- msgstr ""
48
-
49
- #: app/controller/class-ai1ec-events-controller.php:333
50
- #: app/view/feed_row.php:20
51
- msgid "Update"
52
- msgstr ""
53
-
54
- #: app/controller/class-ai1ec-events-controller.php:335
55
- msgid "Submit for Review"
56
- msgstr ""
57
-
58
- #: app/controller/class-ai1ec-events-controller.php:458
59
- msgid "Event updated. <a href=\"%s\">View event</a>"
60
- msgstr ""
61
-
62
- #: app/controller/class-ai1ec-events-controller.php:459
63
- msgid "Custom field updated."
64
- msgstr ""
65
-
66
- #: app/controller/class-ai1ec-events-controller.php:460
67
- msgid "Custom field deleted."
68
- msgstr ""
69
-
70
- #: app/controller/class-ai1ec-events-controller.php:461
71
- msgid "Event updated."
72
- msgstr ""
73
-
74
- #. translators: %s: date and time of the revision
75
- #: app/controller/class-ai1ec-events-controller.php:463
76
- msgid "Event restored to revision from %s"
77
- msgstr ""
78
-
79
- #: app/controller/class-ai1ec-events-controller.php:464
80
- msgid "Event published. <a href=\"%s\">View event</a>"
81
- msgstr ""
82
-
83
- #: app/controller/class-ai1ec-events-controller.php:465
84
- msgid "Event saved."
85
- msgstr ""
86
-
87
- #: app/controller/class-ai1ec-events-controller.php:466
88
- msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
89
- msgstr ""
90
-
91
- #: app/controller/class-ai1ec-events-controller.php:467
92
- msgid "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview event</a>"
93
- msgstr ""
94
-
95
- #. translators: Publish box date format, see http:php.net/date
96
- #: app/controller/class-ai1ec-events-controller.php:469
97
- msgid "M j, Y @ G:i"
98
- msgstr ""
99
-
100
- #: app/controller/class-ai1ec-events-controller.php:470
101
- msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
102
- msgstr ""
103
-
104
- #: app/controller/class-ai1ec-importer-controller.php:91
105
- msgid "The Events Calendar → All-in-One Event Calendar"
106
- msgstr ""
107
-
108
- #: app/controller/class-ai1ec-importer-controller.php:92
109
- msgid "Imports events created using The Events Calendar plugin into the All-in-One Event Calendar"
110
- msgstr ""
111
-
112
- #: app/controller/class-ai1ec-settings-controller.php:82
113
- msgid "Settings Updated."
114
- msgstr ""
115
-
116
- #: app/controller/class-ai1ec-settings-controller.php:173
117
- msgid "Flushed %d events"
118
- msgstr ""
119
-
120
- #: app/controller/class-ai1ec-settings-controller.php:181
121
- #: app/controller/class-ai1ec-settings-controller.php:231
122
- msgid "Invalid ICS feed ID"
123
- msgstr ""
124
-
125
- #: app/controller/class-ai1ec-settings-controller.php:216
126
- msgid "No events were found"
127
- msgstr ""
128
-
129
- #: app/controller/class-ai1ec-settings-controller.php:221
130
- msgid "Imported %d events"
131
- msgstr ""
132
-
133
- #: app/controller/class-ai1ec-settings-controller.php:222
134
- #: app/view/feed_row.php:22
135
- msgid "Flush 1 event"
136
- msgid_plural "Flush %s events"
137
- msgstr[0] ""
138
- msgstr[1] ""
139
-
140
- #: app/controller/class-ai1ec-settings-controller.php:274
141
- msgctxt "meta box"
142
- msgid "General Settings"
143
- msgstr ""
144
-
145
- #: app/controller/class-ai1ec-settings-controller.php:282
146
- msgctxt "meta box"
147
- msgid "The Seed Studio Support"
148
- msgstr ""
149
-
150
- #: app/controller/class-ai1ec-settings-controller.php:289
151
- msgctxt "meta box"
152
- msgid "ICS Import Settings"
153
- msgstr ""
154
-
155
- #: app/controller/class-ai1ec-settings-controller.php:338
156
- msgid "<a href=\"%s\">Settings</a>"
157
- msgstr ""
158
-
159
- #: app/controller/class-ai1ec-settings-controller.php:352
160
- msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
161
- msgstr ""
162
-
163
- #: app/controller/class-ai1ec-settings-controller.php:353
164
- msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
165
- msgstr ""
166
-
167
- #: app/helper/class-ai1ec-app-helper.php:147
168
- msgctxt "Custom post type name"
169
- msgid "Events"
170
- msgstr ""
171
-
172
- #: app/helper/class-ai1ec-app-helper.php:148
173
- msgctxt "Custom post type name (singular)"
174
- msgid "Event"
175
- msgstr ""
176
-
177
- #: app/helper/class-ai1ec-app-helper.php:149
178
- msgid "Add New"
179
- msgstr ""
180
-
181
- #: app/helper/class-ai1ec-app-helper.php:150
182
- msgid "Add New Event"
183
- msgstr ""
184
-
185
- #: app/helper/class-ai1ec-app-helper.php:151
186
- msgid "Edit Event"
187
- msgstr ""
188
-
189
- #: app/helper/class-ai1ec-app-helper.php:152
190
- msgid "New Event"
191
- msgstr ""
192
-
193
- #: app/helper/class-ai1ec-app-helper.php:153
194
- msgid "View Event"
195
- msgstr ""
196
-
197
- #: app/helper/class-ai1ec-app-helper.php:154
198
- msgid "Search Events"
199
- msgstr ""
200
-
201
- #: app/helper/class-ai1ec-app-helper.php:155
202
- msgid "No Events found"
203
- msgstr ""
204
-
205
- #: app/helper/class-ai1ec-app-helper.php:156
206
- msgid "No Events found in Trash"
207
- msgstr ""
208
-
209
- #: app/helper/class-ai1ec-app-helper.php:157
210
- msgid "Parent Event"
211
- msgstr ""
212
-
213
- #: app/helper/class-ai1ec-app-helper.php:158
214
- msgid "Events"
215
- msgstr ""
216
-
217
- #: app/helper/class-ai1ec-app-helper.php:205
218
- msgctxt "Event categories taxonomy"
219
- msgid "Event Categories"
220
- msgstr ""
221
-
222
- #: app/helper/class-ai1ec-app-helper.php:206
223
- msgctxt "Event categories taxonomy (singular)"
224
- msgid "Event Category"
225
- msgstr ""
226
-
227
- #: app/helper/class-ai1ec-app-helper.php:213
228
- msgctxt "Event tags taxonomy"
229
- msgid "Event Tags"
230
- msgstr ""
231
-
232
- #: app/helper/class-ai1ec-app-helper.php:214
233
- msgctxt "Event tags taxonomy (singular)"
234
- msgid "Event Tag"
235
- msgstr ""
236
-
237
- #: app/helper/class-ai1ec-app-helper.php:221
238
- msgctxt "Event feeds taxonomy"
239
- msgid "Event Feeds"
240
- msgstr ""
241
-
242
- #: app/helper/class-ai1ec-app-helper.php:222
243
- msgctxt "Event feed taxonomy (singular)"
244
- msgid "Event Feed"
245
- msgstr ""
246
-
247
- #: app/helper/class-ai1ec-app-helper.php:310
248
- msgid "Show All "
249
- msgstr ""
250
-
251
- #: app/helper/class-ai1ec-app-helper.php:342
252
- msgid "All Events <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
253
- msgstr ""
254
-
255
- #: app/helper/class-ai1ec-app-helper.php:348
256
- msgid "All Events"
257
- msgstr ""
258
-
259
- #: app/helper/class-ai1ec-app-helper.php:426
260
- msgid "Event Details"
261
- msgstr ""
262
-
263
- #: app/helper/class-ai1ec-app-helper.php:459
264
- msgid "Post Date"
265
- msgstr ""
266
-
267
- #: app/helper/class-ai1ec-app-helper.php:460
268
- msgid "Event date/time"
269
- msgstr ""
270
-
271
- #: app/helper/class-ai1ec-app-helper.php:684
272
- msgid "%sTo set up the plugin: %s 1. Select an option in the <strong>Calendar page</strong> dropdown list. %s 2. Select an option in the <strong>Timezone</strong> dropdown list. %s 3. Click <strong>Update Settings</strong>. %s"
273
- msgstr ""
274
-
275
- #: app/helper/class-ai1ec-app-helper.php:686
276
- msgid "To set up the plugin: Select an option in the <strong>Calendar page</strong> dropdown list, the click <strong>Update Settings</strong>."
277
- msgstr ""
278
-
279
- #: app/helper/class-ai1ec-app-helper.php:688
280
- msgid "To set up the plugin: Select an option in the <strong>Timezone</strong> dropdown list, the click <strong>Update Settings</strong>."
281
- msgstr ""
282
-
283
- #: app/helper/class-ai1ec-app-helper.php:692
284
- msgid "The plugin is installed, but has not been configured. <a href=\"%s\">Click here to set it up now »</a>"
285
- msgstr ""
286
-
287
- #: app/helper/class-ai1ec-app-helper.php:698
288
- msgid "The plugin is installed, but has not been configured. Please log in as a WordPress Administrator to set it up."
289
- msgstr ""
290
-
291
- #: app/helper/class-ai1ec-calendar-helper.php:718
292
- #: app/helper/class-ai1ec-calendar-helper.php:727
293
- msgid "M j"
294
- msgstr ""
295
-
296
- #: app/helper/class-ai1ec-calendar-helper.php:759
297
- msgid "« Previous Events"
298
- msgstr ""
299
-
300
- #: app/helper/class-ai1ec-calendar-helper.php:766
301
- msgid "Next Events »"
302
- msgstr ""
303
-
304
- #: app/helper/class-ai1ec-events-helper.php:372
305
- #: app/helper/class-ai1ec-events-helper.php:394
306
- msgid "No repeat"
307
- msgstr ""
308
-
309
- #: app/helper/class-ai1ec-events-helper.php:373
310
- #: app/helper/class-ai1ec-events-helper.php:395
311
- msgid "Every day"
312
- msgstr ""
313
-
314
- #: app/helper/class-ai1ec-events-helper.php:374
315
- #: app/helper/class-ai1ec-events-helper.php:396
316
- msgid "Every week"
317
- msgstr ""
318
-
319
- #: app/helper/class-ai1ec-events-helper.php:375
320
- #: app/helper/class-ai1ec-events-helper.php:397
321
- msgid "Every month"
322
- msgstr ""
323
-
324
- #: app/helper/class-ai1ec-events-helper.php:376
325
- #: app/helper/class-ai1ec-events-helper.php:398
326
- msgid "Every year"
327
- msgstr ""
328
-
329
- #: app/helper/class-ai1ec-events-helper.php:378
330
- #: app/helper/class-ai1ec-events-helper.php:400
331
- msgid "Custom..."
332
- msgstr ""
333
-
334
- #: app/helper/class-ai1ec-events-helper.php:521
335
- msgid "first"
336
- msgstr ""
337
-
338
- #: app/helper/class-ai1ec-events-helper.php:522
339
- msgid "second"
340
- msgstr ""
341
-
342
- #: app/helper/class-ai1ec-events-helper.php:523
343
- msgid "third"
344
- msgstr ""
345
-
346
- #: app/helper/class-ai1ec-events-helper.php:524
347
- msgid "fourth"
348
- msgstr ""
349
-
350
- #: app/helper/class-ai1ec-events-helper.php:526
351
- msgid "last"
352
- msgstr ""
353
-
354
- #: app/helper/class-ai1ec-events-helper.php:531
355
- msgid "Sunday"
356
- msgstr ""
357
-
358
- #: app/helper/class-ai1ec-events-helper.php:532
359
- msgid "Monday"
360
- msgstr ""
361
-
362
- #: app/helper/class-ai1ec-events-helper.php:533
363
- msgid "Tuesday"
364
- msgstr ""
365
-
366
- #: app/helper/class-ai1ec-events-helper.php:534
367
- msgid "Wednesday"
368
- msgstr ""
369
-
370
- #: app/helper/class-ai1ec-events-helper.php:535
371
- msgid "Thursday"
372
- msgstr ""
373
-
374
- #: app/helper/class-ai1ec-events-helper.php:536
375
- msgid "Friday"
376
- msgstr ""
377
-
378
- #: app/helper/class-ai1ec-events-helper.php:537
379
- msgid "Saturday"
380
- msgstr ""
381
-
382
- #: app/helper/class-ai1ec-events-helper.php:539
383
- msgid "day"
384
- msgstr ""
385
-
386
- #: app/helper/class-ai1ec-events-helper.php:540
387
- msgid "weekday"
388
- msgstr ""
389
-
390
- #: app/helper/class-ai1ec-events-helper.php:541
391
- msgid "weekend day"
392
- msgstr ""
393
-
394
- #: app/helper/class-ai1ec-events-helper.php:607
395
- #: app/helper/class-ai1ec-events-helper.php:626
396
- #: app/helper/class-ai1ec-events-helper.php:1676
397
- #: app/helper/class-ai1ec-settings-helper.php:237
398
- #: app/view/box_repeat.php:2
399
- msgid "Daily"
400
- msgstr ""
401
-
402
- #: app/helper/class-ai1ec-events-helper.php:608
403
- #: app/helper/class-ai1ec-events-helper.php:627
404
- #: app/helper/class-ai1ec-events-helper.php:1688
405
- #: app/view/box_repeat.php:3
406
- msgid "Weekly"
407
- msgstr ""
408
-
409
- #: app/helper/class-ai1ec-events-helper.php:609
410
- #: app/helper/class-ai1ec-events-helper.php:628
411
- #: app/helper/class-ai1ec-events-helper.php:1700
412
- #: app/view/box_repeat.php:4
413
- msgid "Monthly"
414
- msgstr ""
415
-
416
- #: app/helper/class-ai1ec-events-helper.php:610
417
- #: app/helper/class-ai1ec-events-helper.php:629
418
- #: app/helper/class-ai1ec-events-helper.php:1712
419
- #: app/view/box_repeat.php:5
420
- msgid "Yearly"
421
- msgstr ""
422
-
423
- #: app/helper/class-ai1ec-events-helper.php:651
424
- msgid "day(s)"
425
- msgstr ""
426
-
427
- #: app/helper/class-ai1ec-events-helper.php:680
428
- msgid "week(s)"
429
- msgstr ""
430
-
431
- #: app/helper/class-ai1ec-events-helper.php:750
432
- msgid "month(s)"
433
- msgstr ""
434
-
435
- #: app/helper/class-ai1ec-events-helper.php:773
436
- msgid "year(s)"
437
- msgstr ""
438
-
439
- #: app/helper/class-ai1ec-events-helper.php:1360
440
- msgid "Never"
441
- msgstr ""
442
-
443
- #: app/helper/class-ai1ec-events-helper.php:1361
444
- msgid "After"
445
- msgstr ""
446
-
447
- #: app/helper/class-ai1ec-events-helper.php:1362
448
- #: app/view/box_repeat.php:28
449
- msgid "On date"
450
- msgstr ""
451
-
452
- #: app/helper/class-ai1ec-events-helper.php:1555
453
- #: app/helper/class-ai1ec-events-helper.php:1564
454
- #: app/helper/class-ai1ec-events-helper.php:1572
455
- msgctxt "Recurrence editor - weekly tab"
456
- msgid "on"
457
- msgstr ""
458
-
459
- #: app/helper/class-ai1ec-events-helper.php:1560
460
- #: app/helper/class-ai1ec-events-helper.php:1589
461
- #: app/helper/class-ai1ec-events-helper.php:1627
462
- msgid "and"
463
- msgstr ""
464
-
465
- #: app/helper/class-ai1ec-events-helper.php:1585
466
- #: app/helper/class-ai1ec-events-helper.php:1592
467
- #: app/helper/class-ai1ec-events-helper.php:1598
468
- #: app/helper/class-ai1ec-events-helper.php:1609
469
- msgctxt "Recurrence editor - monthly tab"
470
- msgid "on"
471
- msgstr ""
472
-
473
- #: app/helper/class-ai1ec-events-helper.php:1585
474
- #: app/helper/class-ai1ec-events-helper.php:1592
475
- #: app/helper/class-ai1ec-events-helper.php:1598
476
- msgid "of the month"
477
- msgstr ""
478
-
479
- #: app/helper/class-ai1ec-events-helper.php:1622
480
- #: app/helper/class-ai1ec-events-helper.php:1630
481
- #: app/helper/class-ai1ec-events-helper.php:1637
482
- msgctxt "Recurrence editor - yearly tab"
483
- msgid "on"
484
- msgstr ""
485
-
486
- #: app/helper/class-ai1ec-events-helper.php:1679
487
- msgid "Every other day"
488
- msgstr ""
489
-
490
- #: app/helper/class-ai1ec-events-helper.php:1681
491
- msgid "Every %d days"
492
- msgstr ""
493
-
494
- #: app/helper/class-ai1ec-events-helper.php:1691
495
- msgid "Every other week"
496
- msgstr ""
497
-
498
- #: app/helper/class-ai1ec-events-helper.php:1693
499
- msgid "Every %d weeks"
500
- msgstr ""
501
-
502
- #: app/helper/class-ai1ec-events-helper.php:1703
503
- msgid "Every other month"
504
- msgstr ""
505
-
506
- #: app/helper/class-ai1ec-events-helper.php:1705
507
- msgid "Every %d months"
508
- msgstr ""
509
-
510
- #: app/helper/class-ai1ec-events-helper.php:1715
511
- msgid "Every other year"
512
- msgstr ""
513
-
514
- #: app/helper/class-ai1ec-events-helper.php:1717
515
- msgid "Every %d years"
516
- msgstr ""
517
-
518
- #: app/helper/class-ai1ec-events-helper.php:1737
519
- msgid "until %s"
520
- msgstr ""
521
-
522
- #: app/helper/class-ai1ec-events-helper.php:1740
523
- msgid "for %d occurrences"
524
- msgstr ""
525
-
526
- #: app/helper/class-ai1ec-events-helper.php:1742
527
- msgid "forever"
528
- msgstr ""
529
-
530
- #: app/helper/class-ai1ec-events-helper.php:1839
531
- msgid "times"
532
- msgstr ""
533
-
534
- #: app/helper/class-ai1ec-settings-helper.php:85
535
- msgid "- Auto-Create New Page -"
536
- msgstr ""
537
-
538
- #: app/helper/class-ai1ec-settings-helper.php:107
539
- msgid "View \"%s\" »"
540
- msgstr ""
541
-
542
- #: app/helper/class-ai1ec-settings-helper.php:149
543
- #: app/view/calendar.php:11
544
- #: app/view/calendar.php:12
545
- #: app/view/calendar.php:25
546
- msgid "Month"
547
- msgstr ""
548
-
549
- #: app/helper/class-ai1ec-settings-helper.php:152
550
- #: app/view/calendar.php:18
551
- #: app/view/calendar.php:19
552
- msgid "Week"
553
- msgstr ""
554
-
555
- #: app/helper/class-ai1ec-settings-helper.php:204
556
- msgid "Default (d/m/y)"
557
- msgstr ""
558
-
559
- #: app/helper/class-ai1ec-settings-helper.php:207
560
- msgid "US (m/d/y)"
561
- msgstr ""
562
-
563
- #: app/helper/class-ai1ec-settings-helper.php:210
564
- msgid "ISO 8601 (y-m-d)"
565
- msgstr ""
566
-
567
- #: app/helper/class-ai1ec-settings-helper.php:213
568
- msgid "Dotted (m.d.y)"
569
- msgstr ""
570
-
571
- #: app/helper/class-ai1ec-settings-helper.php:231
572
- msgid "Hourly"
573
- msgstr ""
574
-
575
- #: app/helper/class-ai1ec-settings-helper.php:234
576
- msgid "Twice Daily"
577
- msgstr ""
578
-
579
- #: app/helper/class-ai1ec-settings-helper.php:321
580
- msgid "Calendar"
581
- msgstr ""
582
-
583
- #: app/model/class-ai1ec-event.php:496
584
- msgid " (all-day)"
585
- msgstr ""
586
-
587
- #: app/view/admin_notices.php:2
588
- msgid "All-in-One Event Calendar Notice:"
589
- msgstr ""
590
-
591
- #: app/view/agenda-widget-form.php:2
592
- msgid "Title:"
593
- msgstr ""
594
-
595
- #: app/view/agenda-widget-form.php:6
596
- msgid "Number of events to show:"
597
- msgstr ""
598
-
599
- #: app/view/agenda-widget-form.php:14
600
- msgid "Events with these <strong>Categories</strong>"
601
- msgstr ""
602
-
603
- #: app/view/agenda-widget-form.php:23
604
- msgid "No categories found."
605
- msgstr ""
606
-
607
- #: app/view/agenda-widget-form.php:30
608
- msgid "<strong>Or</strong> events with these <strong>Tags</strong>"
609
- msgstr ""
610
-
611
- #: app/view/agenda-widget-form.php:39
612
- msgid "No tags found."
613
- msgstr ""
614
-
615
- #: app/view/agenda-widget-form.php:46
616
- msgid "<strong>Or</strong> any of these <strong>Events</strong>"
617
- msgstr ""
618
-
619
- #: app/view/agenda-widget-form.php:55
620
- msgid "No events found."
621
- msgstr ""
622
-
623
- #: app/view/agenda-widget-form.php:62
624
- msgid "Show <strong>View Calendar</strong> button"
625
- msgstr ""
626
-
627
- #: app/view/agenda-widget-form.php:65
628
- msgid "Show <strong>Subscribe</strong> buttons"
629
- msgstr ""
630
-
631
- #: app/view/agenda-widget-form.php:68
632
- msgid "Hide this widget on calendar page"
633
- msgstr ""
634
-
635
- #: app/view/agenda-widget.php:11
636
- msgid "There are no upcoming events."
637
- msgstr ""
638
-
639
- #: app/view/agenda-widget.php:59
640
- msgid "View Calendar »"
641
- msgstr ""
642
-
643
- #: app/view/agenda-widget.php:67
644
- #: app/view/calendar.php:110
645
- msgid "Subscribe to this calendar using your favourite calendar program (iCal, Outlook, etc.)"
646
- msgstr ""
647
-
648
- #: app/view/agenda-widget.php:68
649
- #: app/view/calendar.php:111
650
- msgid "✔ Subscribe"
651
- msgstr ""
652
-
653
- #: app/view/agenda-widget.php:72
654
- #: app/view/calendar.php:116
655
- msgid "Subscribe to this calendar in your Google Calendar"
656
- msgstr ""
657
-
658
- #: app/view/agenda-widget.php:74
659
- msgid "Add to Google"
660
- msgstr ""
661
-
662
- #: app/view/agenda.php:5
663
- msgid "+ Expand All"
664
- msgstr ""
665
-
666
- #: app/view/agenda.php:8
667
- msgid "− Collapse All"
668
- msgstr ""
669
-
670
- #: app/view/agenda.php:12
671
- #: app/view/month.php:4
672
- #: app/view/week.php:4
673
- msgid "Today"
674
- msgstr ""
675
-
676
- #: app/view/agenda.php:29
677
- msgid "There are no upcoming events to display at this time."
678
- msgstr ""
679
-
680
- #: app/view/agenda.php:59
681
- #: app/view/agenda.php:109
682
- #: app/view/month.php:68
683
- #: app/view/week.php:69
684
- msgid "(all-day)"
685
- msgstr ""
686
-
687
- #: app/view/agenda.php:77
688
- msgid "Read more »"
689
- msgstr ""
690
-
691
- #: app/view/agenda.php:81
692
- #: app/view/event-multi.php:45
693
- #: app/view/event-single.php:57
694
- msgid "Categories:"
695
- msgstr ""
696
-
697
- #: app/view/agenda.php:87
698
- #: app/view/event-multi.php:51
699
- #: app/view/event-single.php:64
700
- msgid "Tags:"
701
- msgstr ""
702
-
703
- #: app/view/box_event_contact.php:1
704
- msgid "Organizer contact info"
705
- msgstr ""
706
-
707
- #: app/view/box_event_contact.php:7
708
- msgid "Contact name:"
709
- msgstr ""
710
-
711
- #: app/view/box_event_contact.php:17
712
- msgid "Phone:"
713
- msgstr ""
714
-
715
- #: app/view/box_event_contact.php:27
716
- msgid "E-mail:"
717
- msgstr ""
718
-
719
- #: app/view/box_event_cost.php:1
720
- msgid "Event cost"
721
- msgstr ""
722
-
723
- #: app/view/box_event_cost.php:7
724
- msgid "Cost"
725
- msgstr ""
726
-
727
- #: app/view/box_event_location.php:1
728
- msgid "Event location details"
729
- msgstr ""
730
-
731
- #: app/view/box_event_location.php:7
732
- msgid "Venue name:"
733
- msgstr ""
734
-
735
- #: app/view/box_event_location.php:17
736
- msgid "Address:"
737
- msgstr ""
738
-
739
- #: app/view/box_event_location.php:27
740
- msgid "Show Google Map:"
741
- msgstr ""
742
-
743
- #: app/view/box_eventbrite.php:1
744
- msgid "Eventbrite Ticketing"
745
- msgstr ""
746
-
747
- #: app/view/box_eventbrite.php:7
748
- msgid "Register this event with Eventbrite.com?"
749
- msgstr ""
750
-
751
- #: app/view/box_eventbrite.php:12
752
- msgid "Yes"
753
- msgstr ""
754
-
755
- #: app/view/box_eventbrite.php:14
756
- msgid "No"
757
- msgstr ""
758
-
759
- #: app/view/box_eventbrite.php:22
760
- msgid "Set up your first ticket"
761
- msgstr ""
762
-
763
- #: app/view/box_eventbrite.php:24
764
- msgid "To create multiple tickets per event, submit this form, then follow the link to Eventbrite."
765
- msgstr ""
766
-
767
- #: app/view/box_eventbrite.php:32
768
- msgid "Name"
769
- msgstr ""
770
-
771
- #: app/view/box_eventbrite.php:42
772
- msgid "Description"
773
- msgstr ""
774
-
775
- #: app/view/box_eventbrite.php:53
776
- msgid "Type"
777
- msgstr ""
778
-
779
- #: app/view/box_eventbrite.php:58
780
- msgid "Set Price"
781
- msgstr ""
782
-
783
- #: app/view/box_eventbrite.php:60
784
- msgid "Donation Based"
785
- msgstr ""
786
-
787
- #: app/view/box_eventbrite.php:68
788
- msgid "The price for this event's first ticket will be taken from the Cost field above."
789
- msgstr ""
790
-
791
- #: app/view/box_eventbrite.php:75
792
- msgid "Quantity"
793
- msgstr ""
794
-
795
- #: app/view/box_eventbrite.php:85
796
- msgid "Include Fee in Price"
797
- msgstr ""
798
-
799
- #: app/view/box_eventbrite.php:90
800
- msgid "Add Service Fee on top of price"
801
- msgstr ""
802
-
803
- #: app/view/box_eventbrite.php:92
804
- msgid "Include Service fee in price"
805
- msgstr ""
806
-
807
- #: app/view/box_eventbrite.php:98
808
- msgid "Payment Options"
809
- msgstr ""
810
-
811
- #: app/view/box_eventbrite.php:103
812
- msgid "Paypal"
813
- msgstr ""
814
-
815
- #: app/view/box_eventbrite.php:105
816
- msgid "Google Checkout"
817
- msgstr ""
818
-
819
- #: app/view/box_eventbrite.php:107
820
- msgid "Check"
821
- msgstr ""
822
-
823
- #: app/view/box_eventbrite.php:109
824
- msgid "Cash"
825
- msgstr ""
826
-
827
- #: app/view/box_eventbrite.php:111
828
- msgid "Send an Invoice"
829
- msgstr ""
830
-
831
- #: app/view/box_general_settings.php:1
832
- msgid "Viewing Events"
833
- msgstr ""
834
-
835
- #: app/view/box_general_settings.php:3
836
- msgid "Calendar page:"
837
- msgstr ""
838
-
839
- #: app/view/box_general_settings.php:7
840
- msgid "Default calendar view:"
841
- msgstr ""
842
-
843
- #: app/view/box_general_settings.php:12
844
- msgid "Timezone:"
845
- msgstr ""
846
-
847
- #: app/view/box_general_settings.php:17
848
- msgid "Contain calendar in this DOM element:"
849
- msgstr ""
850
-
851
- #: app/view/box_general_settings.php:19
852
- msgid "Optional. Provide a <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container."
853
- msgstr ""
854
-
855
- #: app/view/box_general_settings.php:21
856
- msgid "Week starts on"
857
- msgstr ""
858
-
859
- #: app/view/box_general_settings.php:25
860
- msgid "Agenda pages show at most"
861
- msgstr ""
862
-
863
- #: app/view/box_general_settings.php:26
864
- msgid "events"
865
- msgstr ""
866
-
867
- #: app/view/box_general_settings.php:31
868
- msgid "Keep all events <strong>expanded</strong> in the agenda view"
869
- msgstr ""
870
-
871
- #: app/view/box_general_settings.php:37
872
- msgid "<strong>Exclude</strong> events from search results"
873
- msgstr ""
874
-
875
- #: app/view/box_general_settings.php:43
876
- msgid "Show <strong>Post Your Event</strong> button above the calendar to privileged users"
877
- msgstr ""
878
-
879
- #: app/view/box_general_settings.php:49
880
- msgid "Hide <strong>Subscribe</strong>/<strong>Add to Calendar</strong> buttons in calendar and single event views"
881
- msgstr ""
882
-
883
- #: app/view/box_general_settings.php:55
884
- msgid "Hide <strong>Google Maps</strong> until clicked"
885
- msgstr ""
886
-
887
- #: app/view/box_general_settings.php:61
888
- msgid "Use the configured <strong>region</strong> (WordPress locale) to bias the address autocomplete function"
889
- msgstr ""
890
-
891
- #: app/view/box_general_settings.php:67
892
- msgid "Include <strong>event categories</strong> in post category lists"
893
- msgstr ""
894
-
895
- #: app/view/box_general_settings.php:71
896
- msgid "Adding/Editing Events"
897
- msgstr ""
898
-
899
- #: app/view/box_general_settings.php:73
900
- msgid "Input dates in this format:"
901
- msgstr ""
902
-
903
- #: app/view/box_general_settings.php:79
904
- msgid "Use <strong>24h time</strong> in time pickers"
905
- msgstr ""
906
-
907
- #: app/view/box_general_settings.php:85
908
- msgid "Display <strong>Publish</strong> at bottom of Edit Event form"
909
- msgstr ""
910
-
911
- #: app/view/box_ics_import_settings.php:2
912
- msgid "Auto-refresh"
913
- msgstr ""
914
-
915
- #: app/view/box_ics_import_settings.php:8
916
- #: app/view/feed_row.php:3
917
- msgid "iCalendar/.ics Feed URL:"
918
- msgstr ""
919
-
920
- #: app/view/box_ics_import_settings.php:12
921
- msgid "Event category"
922
- msgstr ""
923
-
924
- #: app/view/box_ics_import_settings.php:18
925
- #: app/view/feed_row.php:15
926
- msgid "Tag with"
927
- msgstr ""
928
-
929
- #: app/view/box_ics_import_settings.php:22
930
- msgid "+ Add new subscription"
931
- msgstr ""
932
-
933
- #: app/view/box_repeat.php:14
934
- msgid "End"
935
- msgstr ""
936
-
937
- #: app/view/box_repeat.php:21
938
- msgid "Ending after"
939
- msgstr ""
940
-
941
- #: app/view/box_repeat.php:36
942
- msgid "Apply"
943
- msgstr ""
944
-
945
- #: app/view/box_repeat.php:37
946
- msgid "Cancel"
947
- msgstr ""
948
-
949
- #. #-#-#-#-# plugin.pot (All-in-One Event Calendar 1.3) #-#-#-#-#
950
- #. Author of the plugin/theme
951
- #: app/view/box_the_seed_studio.php:4
952
- msgid "The Seed Studio"
953
- msgstr ""
954
-
955
- #: app/view/box_the_seed_studio.php:7
956
- msgid "The Seed Studio provides web development and support services for clients and web developers."
957
- msgstr ""
958
-
959
- #: app/view/box_the_seed_studio.php:14
960
- msgid "Follow @theseednet"
961
- msgstr ""
962
-
963
- #: app/view/box_the_seed_studio.php:20
964
- msgid "Get Support<span> from one of our experienced pros</span>"
965
- msgstr ""
966
-
967
- #: app/view/box_the_seed_studio.php:23
968
- msgid "Support"
969
- msgstr ""
970
-
971
- #: app/view/box_the_seed_studio.php:25
972
- msgid "View plugin documentation"
973
- msgstr ""
974
-
975
- #: app/view/box_the_seed_studio.php:28
976
- msgid "You can also hire The Seed for support on a contract or per-hour basis for this plugin, for your website or for any of your Internet marketing needs (we can really help!)."
977
- msgstr ""
978
-
979
- #: app/view/box_the_seed_studio.php:31
980
- msgid "Plugin users: The Seed gives support priority to clients. For free support from other WordPress users, visit the plugin's forum."
981
- msgstr ""
982
-
983
- #: app/view/box_the_seed_studio.php:34
984
- msgid "Vote and Share"
985
- msgstr ""
986
-
987
- #: app/view/box_the_seed_studio.php:36
988
- msgid "This plugin is offered free to the Wordpress Community under the GPL3 license. All we ask is that you:"
989
- msgstr ""
990
-
991
- #: app/view/box_the_seed_studio.php:38
992
- msgid "<a href=\"http://wordpress.org/extend/plugins/all-in-one-event-calendar/\" target=\"_blank\">Give it a five-star rating on wordpress.org</a> (if you think it deserves it!)"
993
- msgstr ""
994
-
995
- #: app/view/box_the_seed_studio.php:39
996
- msgid "Link to the plugin page on our website"
997
- msgstr ""
998
-
999
- #: app/view/box_the_seed_studio.php:40
1000
- msgid "Become a Fan on Facebook"
1001
- msgstr ""
1002
-
1003
- #: app/view/box_the_seed_studio.php:41
1004
- msgid "Follow us on Twitter"
1005
- msgstr ""
1006
-
1007
- #: app/view/box_the_seed_studio.php:46
1008
- msgid "Latest from the Seed Network"
1009
- msgstr ""
1010
-
1011
- #: app/view/box_time_and_date.php:2
1012
- msgid "Event date and time"
1013
- msgstr ""
1014
-
1015
- #: app/view/box_time_and_date.php:8
1016
- msgid "All-day event"
1017
- msgstr ""
1018
-
1019
- #: app/view/box_time_and_date.php:18
1020
- msgid "Start date / time"
1021
- msgstr ""
1022
-
1023
- #: app/view/box_time_and_date.php:31
1024
- msgid "End date / time"
1025
- msgstr ""
1026
-
1027
- #: app/view/box_time_and_date.php:46
1028
- msgid "Repeat"
1029
- msgstr ""
1030
-
1031
- #: app/view/box_time_and_date.php:60
1032
- msgid "Exclude"
1033
- msgstr ""
1034
-
1035
- #: app/view/box_time_and_date.php:67
1036
- msgid "Choose a rule for exclusion"
1037
- msgstr ""
1038
-
1039
- #: app/view/box_time_and_date.php:73
1040
- msgid "Exclude dates"
1041
- msgstr ""
1042
-
1043
- #: app/view/box_time_and_date.php:80
1044
- msgid "Select date range"
1045
- msgstr ""
1046
-
1047
- #: app/view/box_time_and_date.php:85
1048
- msgid "Choose specific dates to exclude"
1049
- msgstr ""
1050
-
1051
- #: app/view/calendar.php:35
1052
- msgid "+ Post Your Event"
1053
- msgstr ""
1054
-
1055
- #: app/view/calendar.php:44
1056
- msgid "Clear Filters"
1057
- msgstr ""
1058
-
1059
- #: app/view/calendar.php:44
1060
- msgid "✘"
1061
- msgstr ""
1062
-
1063
- #: app/view/calendar.php:45
1064
- msgid "Filter:"
1065
- msgstr ""
1066
-
1067
- #: app/view/calendar.php:50
1068
- msgid "Categories ▾"
1069
- msgstr ""
1070
-
1071
- #: app/view/calendar.php:72
1072
- msgid "Tags ▾"
1073
- msgstr ""
1074
-
1075
- #: app/view/calendar.php:112
1076
- msgid "to this filtered calendar"
1077
- msgstr ""
1078
-
1079
- #: app/view/calendar.php:118
1080
- msgid "Subscribe in Google Calendar"
1081
- msgstr ""
1082
-
1083
- #: app/view/class-ai1ec-agenda-widget.php:18
1084
- #: app/view/class-ai1ec-agenda-widget.php:39
1085
- msgid "Upcoming Events"
1086
- msgstr ""
1087
-
1088
- #: app/view/class-ai1ec-agenda-widget.php:20
1089
- msgid "All-in-One Event Calendar: Lists upcoming events in Agenda view"
1090
- msgstr ""
1091
-
1092
- #: app/view/event-excerpt.php:2
1093
- #: app/view/event-multi.php:4
1094
- #: app/view/event-single.php:5
1095
- msgid "When:"
1096
- msgstr ""
1097
-
1098
- #: app/view/event-excerpt.php:4
1099
- #: app/view/event-multi.php:20
1100
- #: app/view/event-single.php:25
1101
- msgid "Where:"
1102
- msgstr ""
1103
-
1104
- #: app/view/event-map.php:2
1105
- msgid "Click to view map"
1106
- msgstr ""
1107
-
1108
- #: app/view/event-map.php:9
1109
- msgid "View Full-Size Map »"
1110
- msgstr ""
1111
-
1112
- #: app/view/event-multi.php:7
1113
- msgid "View in Calendar »"
1114
- msgstr ""
1115
-
1116
- #: app/view/event-multi.php:14
1117
- #: app/view/event-single.php:15
1118
- msgid "Repeats:"
1119
- msgstr ""
1120
-
1121
- #: app/view/event-multi.php:24
1122
- msgid "View Map »"
1123
- msgstr ""
1124
-
1125
- #: app/view/event-multi.php:33
1126
- #: app/view/event-single.php:45
1127
- msgid "Cost:"
1128
- msgstr ""
1129
-
1130
- #: app/view/event-multi.php:39
1131
- #: app/view/event-single.php:51
1132
- msgid "Contact:"
1133
- msgstr ""
1134
-
1135
- #: app/view/event-single-footer.php:4
1136
- msgid "This post was replicated from another site's <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
1137
- msgstr ""
1138
-
1139
- #: app/view/event-single-footer.php:8
1140
- msgid "View original post »"
1141
- msgstr ""
1142
-
1143
- #: app/view/event-single.php:8
1144
- msgid "Back to Calendar »"
1145
- msgstr ""
1146
-
1147
- #: app/view/event-single.php:21
1148
- msgid "Excluding:"
1149
- msgstr ""
1150
-
1151
- #: app/view/event-single.php:32
1152
- msgid "Add this event to your favourite calendar program (iCal, Outlook, etc.)"
1153
- msgstr ""
1154
-
1155
- #: app/view/event-single.php:33
1156
- msgid "✔ Add to Calendar"
1157
- msgstr ""
1158
-
1159
- #: app/view/event-single.php:36
1160
- msgid "Add this event to your Google Calendar"
1161
- msgstr ""
1162
-
1163
- #: app/view/event-single.php:38
1164
- msgid "Add to Google Calendar"
1165
- msgstr ""
1166
-
1167
- #: app/view/event_categories-color_picker.php:5
1168
- #: app/view/event_categories-color_picker.php:19
1169
- msgid "Category Color"
1170
- msgstr ""
1171
-
1172
- #: app/view/event_categories-color_picker.php:13
1173
- #: app/view/event_categories-color_picker.php:25
1174
- msgid "Events in this category will be identified by this color"
1175
- msgstr ""
1176
-
1177
- #: app/view/feed_row.php:9
1178
- msgid "Event category:"
1179
- msgstr ""
1180
-
1181
- #: app/view/feed_row.php:19
1182
- msgid "× Delete"
1183
- msgstr ""
1184
-
1185
- #: app/view/import.php:6
1186
- msgid "Successfully imported events:"
1187
- msgstr ""
1188
-
1189
- #: app/view/month.php:50
1190
- #: app/view/week.php:55
1191
- #: app/view/week.php:127
1192
- msgid "Summary:"
1193
- msgstr ""
1194
-
1195
- #: app/view/month.php:53
1196
- #: app/view/week.php:58
1197
- #: app/view/week.php:130
1198
- msgid "click anywhere for details"
1199
- msgstr ""
1200
-
1201
- #: app/view/row_daily.php:3
1202
- #: app/view/row_monthly.php:3
1203
- #: app/view/row_monthly.php:22
1204
- #: app/view/row_weekly.php:3
1205
- #: app/view/row_yearly.php:3
1206
- msgid "Every"
1207
- msgstr ""
1208
-
1209
- #: app/view/row_monthly.php:9
1210
- msgid "On day of the month"
1211
- msgstr ""
1212
-
1213
- #: app/view/row_monthly.php:13
1214
- msgid "On day of the week"
1215
- msgstr ""
1216
-
1217
- #: app/view/row_weekly.php:6
1218
- msgctxt "Recurrence editor - weekly tab"
1219
- msgid "On"
1220
- msgstr ""
1221
-
1222
- #: app/view/row_yearly.php:7
1223
- msgctxt "Recurrence editor - yearly tab"
1224
- msgid "In"
1225
- msgstr ""
1226
-
1227
- #: app/view/settings.php:5
1228
- msgid "All-in-one Event Calendar"
1229
- msgstr ""
1230
-
1231
- #: app/view/settings.php:16
1232
- msgid "Update Settings"
1233
- msgstr ""
1234
-
1235
- #: app/view/week.php:33
1236
- msgid "All-day"
1237
- msgstr ""
1238
-
1239
- #. Plugin Name of the plugin/theme
1240
- msgid "All-in-One Event Calendar"
1241
- msgstr ""
1242
-
1243
- #. Plugin URI of the plugin/theme
1244
- msgid "http://theseednetwork.com/software/all-in-one-event-calendar-wordpress/"
1245
- msgstr ""
1246
-
1247
- #. Description of the plugin/theme
1248
- msgid "An event calendar system with month, week, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds."
1249
- msgstr ""
1250
-
1251
- #. Author URI of the plugin/theme
1252
- msgid "http://theseednetwork.com/"
1253
- msgstr ""
1254
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
language/all-in-one-event-calendar.pot CHANGED
@@ -1,34 +1,34 @@
1
- # Copyright (C) 2012 All-in-One Calendar by Then.ly
2
- # This file is distributed under the same license as the All-in-One Calendar by Then.ly package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: All-in-One Calendar by Then.ly 1.7\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
7
- "POT-Creation-Date: 2012-06-01 23:49:28+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: app/controller/class-ai1ec-app-controller.php:416
16
- #: app/controller/class-ai1ec-app-controller.php:417
17
  msgid "Calendar Feeds"
18
  msgstr ""
19
 
20
- #: app/controller/class-ai1ec-app-controller.php:432
21
- #: app/controller/class-ai1ec-app-controller.php:433
22
  #: app/helper/class-ai1ec-settings-helper.php:320
23
  msgid "Calendar"
24
  msgstr ""
25
 
26
- #: app/controller/class-ai1ec-app-controller.php:447
27
- #: app/controller/class-ai1ec-app-controller.php:448
28
  msgid "Upgrade"
29
  msgstr ""
30
 
31
- #: app/controller/class-ai1ec-app-controller.php:635
32
  msgid "You do not have sufficient permissions to update plugins for this site."
33
  msgstr ""
34
 
@@ -119,9 +119,7 @@ msgid "Event submitted. <a target=\"_blank\" href=\"%s\">Preview event</a>"
119
  msgstr ""
120
 
121
  #: app/controller/class-ai1ec-events-controller.php:476
122
- msgid ""
123
- "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s"
124
- "\">Preview event</a>"
125
  msgstr ""
126
 
127
  #. translators: Publish box date format, see http:php.net/date
@@ -134,21 +132,19 @@ msgid "Event draft updated. <a target=\"_blank\" href=\"%s\">Preview event</a>"
134
  msgstr ""
135
 
136
  #: app/controller/class-ai1ec-importer-controller.php:91
137
- msgid "The Events Calendar → All-in-One Calendar"
138
  msgstr ""
139
 
140
  #: app/controller/class-ai1ec-importer-controller.php:92
141
- msgid ""
142
- "Imports events created using The Events Calendar plugin into the All-in-One "
143
- "Calendar"
144
  msgstr ""
145
 
146
  #: app/controller/class-ai1ec-settings-controller.php:60
147
- msgid "All-in-One Calendar: Settings"
148
  msgstr ""
149
 
150
  #: app/controller/class-ai1ec-settings-controller.php:79
151
- msgid "All-in-One Calendar: Calendar Feeds"
152
  msgstr ""
153
 
154
  #: app/controller/class-ai1ec-settings-controller.php:100
@@ -179,64 +175,74 @@ msgid_plural "Flush %s events"
179
  msgstr[0] ""
180
  msgstr[1] ""
181
 
182
- #: app/controller/class-ai1ec-settings-controller.php:301
183
  msgctxt "meta box"
184
  msgid "General Settings"
185
  msgstr ""
186
 
187
- #: app/controller/class-ai1ec-settings-controller.php:310
188
  msgctxt "meta box"
189
  msgid "Advanced Settings"
190
  msgstr ""
191
 
192
- #: app/controller/class-ai1ec-settings-controller.php:319
193
- #: app/controller/class-ai1ec-settings-controller.php:348
194
  msgctxt "meta box"
195
- msgid "Then.ly Support"
196
  msgstr ""
197
 
198
- #: app/controller/class-ai1ec-settings-controller.php:339
199
  msgctxt "meta box"
200
  msgid "Feed Subscriptions"
201
  msgstr ""
202
 
203
- #: app/controller/class-ai1ec-settings-controller.php:364
204
  msgid "<a href=\"%s\">Settings</a>"
205
  msgstr ""
206
 
207
- #: app/controller/class-ai1ec-settings-controller.php:378
208
  msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
209
  msgstr ""
210
 
211
- #: app/controller/class-ai1ec-settings-controller.php:379
212
  msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
213
  msgstr ""
214
 
215
- #: app/controller/class-ai1ec-themes-controller.php:175
216
- #: app/controller/class-ai1ec-themes-controller.php:176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  #: app/view/admin/themes-updated.php:5
218
  msgid "Update Core Calendar Files"
219
  msgstr ""
220
 
221
- #: app/controller/class-ai1ec-themes-controller.php:240
222
- msgid ""
223
- "<div class=\"error\"><p><strong>There was an error updating one of the files."
224
- "</strong> Please FTP to your web server and manually copy <pre>%s</pre> to "
225
- "<pre>%s</pre></p></div>"
226
  msgstr ""
227
 
228
- #: app/controller/class-ai1ec-themes-controller.php:250
229
- msgid ""
230
- "<div id=\"message\" class=\"error\"><h3>Errors occurred while we tried to "
231
- "update your core calendar files.</h3><p><strong>Please follow any "
232
- "instructions listed below or your calendar may malfunction:</strong></p></"
233
- "div>"
234
  msgstr ""
235
 
236
- #: app/controller/class-ai1ec-themes-controller.php:253
237
- msgid ""
238
- "<div id=\"message\" class=\"updated\"><h3>Your core calendar files were "
239
- "updated successfully.</h3></div>"
240
  msgstr ""
241
 
242
  #: app/helper/class-ai1ec-app-helper.php:156
@@ -324,9 +330,7 @@ msgid "Show All "
324
  msgstr ""
325
 
326
  #: app/helper/class-ai1ec-app-helper.php:352
327
- msgid ""
328
- "All Events <span class=\"update-plugins count-%d\" title=\"%d Pending Events"
329
- "\"><span class=\"update-count\">%d</span></span>"
330
  msgstr ""
331
 
332
  #: app/helper/class-ai1ec-app-helper.php:358
@@ -345,51 +349,72 @@ msgstr ""
345
  msgid "Event date/time"
346
  msgstr ""
347
 
348
- #: app/helper/class-ai1ec-app-helper.php:752
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  msgid "Select an option in the <strong>Calendar page</strong> dropdown list."
350
  msgstr ""
351
 
352
- #: app/helper/class-ai1ec-app-helper.php:755
353
  msgid "Select an option in the <strong>Timezone</strong> dropdown list."
354
  msgstr ""
355
 
356
- #: app/helper/class-ai1ec-app-helper.php:757
357
  msgid "Click <strong>Update Settings</strong>."
358
  msgstr ""
359
 
360
- #: app/helper/class-ai1ec-app-helper.php:762
361
- msgid ""
362
- "The plugin is installed, but has not been configured. <a href=\"%s\">Click "
363
- "here to set it up now &raquo;</a>"
364
  msgstr ""
365
 
366
- #: app/helper/class-ai1ec-app-helper.php:769
367
- msgid ""
368
- "The plugin is installed, but has not been configured. Please log in as an "
369
- "Administrator to set it up."
370
  msgstr ""
371
 
372
- #: app/helper/class-ai1ec-app-helper.php:774
373
  msgid "<p>To set up the plugin:</p>"
374
  msgstr ""
375
 
376
- #: app/helper/class-ai1ec-app-helper.php:782
377
- msgid "All-in-One Calendar Notice"
378
- msgstr ""
379
-
380
- #: app/helper/class-ai1ec-app-helper.php:799
381
  msgid "Event"
382
  msgid_plural "Events"
383
  msgstr[0] ""
384
  msgstr[1] ""
385
 
386
- #: app/helper/class-ai1ec-app-helper.php:811
387
  msgid "Event Category"
388
  msgid_plural "Event Categories"
389
  msgstr[0] ""
390
  msgstr[1] ""
391
 
392
- #: app/helper/class-ai1ec-app-helper.php:823
393
  msgid "Event Tag"
394
  msgid_plural "Event Tags"
395
  msgstr[0] ""
@@ -729,11 +754,7 @@ msgid "Contain calendar in this DOM element:"
729
  msgstr ""
730
 
731
  #: app/view/admin/box_advanced_settings.php:5
732
- msgid ""
733
- "Optional. Provide a <a href=\"http://api.jquery.com/category/selectors/\" "
734
- "target=\"_blank\">jQuery selector</a> that evaluates to a single DOM "
735
- "element. Replaces any existing markup found within target. If left empty, "
736
- "calendar is shown in normal page content container."
737
  msgstr ""
738
 
739
  #: app/view/admin/box_event_contact.php:1
@@ -797,9 +818,7 @@ msgid "Set up your first ticket"
797
  msgstr ""
798
 
799
  #: app/view/admin/box_eventbrite.php:24
800
- msgid ""
801
- "To create multiple tickets per event, submit this form, then follow the link "
802
- "to Eventbrite."
803
  msgstr ""
804
 
805
  #: app/view/admin/box_eventbrite.php:32
@@ -823,9 +842,7 @@ msgid "Donation Based"
823
  msgstr ""
824
 
825
  #: app/view/admin/box_eventbrite.php:68
826
- msgid ""
827
- "The price for this event's first ticket will be taken from the Cost field "
828
- "above."
829
  msgstr ""
830
 
831
  #: app/view/admin/box_eventbrite.php:75
@@ -880,7 +897,8 @@ msgstr ""
880
  msgid "Check for new events"
881
  msgstr ""
882
 
883
- #: app/view/admin/box_feeds.php:19 app/view/admin/feed_row.php:3
 
884
  msgid "iCalendar/.ics Feed URL:"
885
  msgstr ""
886
 
@@ -888,7 +906,8 @@ msgstr ""
888
  msgid "Event category"
889
  msgstr ""
890
 
891
- #: app/view/admin/box_feeds.php:29 app/view/admin/feed_row.php:15
 
892
  msgid "Tag with"
893
  msgstr ""
894
 
@@ -941,15 +960,11 @@ msgid "<strong>Exclude</strong> events from search results"
941
  msgstr ""
942
 
943
  #: app/view/admin/box_general_settings.php:53
944
- msgid ""
945
- "Show <strong>Post Your Event</strong> button above the calendar to "
946
- "privileged users"
947
  msgstr ""
948
 
949
  #: app/view/admin/box_general_settings.php:59
950
- msgid ""
951
- "Hide <strong>Subscribe</strong>/<strong>Add to Calendar</strong> buttons in "
952
- "calendar and single event views"
953
  msgstr ""
954
 
955
  #: app/view/admin/box_general_settings.php:65
@@ -977,9 +992,7 @@ msgid "<strong>Disable address autocomplete</strong> function"
977
  msgstr ""
978
 
979
  #: app/view/admin/box_general_settings.php:95
980
- msgid ""
981
- "Use the configured <strong>region</strong> (WordPress locale) to bias the "
982
- "address autocomplete function"
983
  msgstr ""
984
 
985
  #: app/view/admin/box_general_settings.php:101
@@ -991,7 +1004,7 @@ msgid "Sharing Data"
991
  msgstr ""
992
 
993
  #: app/view/admin/box_general_settings.php:109
994
- msgid "Allow Then.ly to collect calendar statistics"
995
  msgstr ""
996
 
997
  #: app/view/admin/box_repeat.php:14
@@ -1010,64 +1023,66 @@ msgstr ""
1010
  msgid "Cancel"
1011
  msgstr ""
1012
 
1013
- #: app/view/admin/box_the_seed_studio.php:3
1014
- msgid "then.ly"
1015
  msgstr ""
1016
 
1017
- #: app/view/admin/box_the_seed_studio.php:7
1018
- msgid ""
1019
- "Then.ly’s All-in-One Calendar is a revolutionary new way to find and share "
1020
- "events."
1021
  msgstr ""
1022
 
1023
- #: app/view/admin/box_the_seed_studio.php:16
1024
- msgid "Follow @then_ly"
1025
  msgstr ""
1026
 
1027
- #: app/view/admin/box_the_seed_studio.php:22
1028
- msgid ""
1029
- "Upgrade to the free Premium version and get access to exclusive features "
1030
- "such as:"
1031
  msgstr ""
1032
 
1033
- #: app/view/admin/box_the_seed_studio.php:29
1034
  msgid "Calendar Themes"
1035
  msgstr ""
1036
 
1037
- #: app/view/admin/box_the_seed_studio.php:30
 
 
 
 
1038
  msgid "Duplicate Events"
1039
  msgstr ""
1040
 
1041
- #: app/view/admin/box_the_seed_studio.php:35
1042
- msgid "Location by Latitude/Longitude"
1043
  msgstr ""
1044
 
1045
- #: app/view/admin/box_the_seed_studio.php:36
1046
- msgid "... and more!"
1047
  msgstr ""
1048
 
1049
- #: app/view/admin/box_the_seed_studio.php:43
1050
- msgid "Upgrade to Premium for Free"
1051
  msgstr ""
1052
 
1053
- #: app/view/admin/box_the_seed_studio.php:48
1054
- msgid ""
1055
- "Then.ly is dedicated to creating the best calendar software in the world."
1056
  msgstr ""
1057
 
1058
- #: app/view/admin/box_the_seed_studio.php:52
1059
- msgid ""
1060
- "Please let us know if anything is not working the way you expect. While many "
1061
- "problems are caused by conflicts with other plugins, most problems can be "
1062
- "solved quickly. Visit our <a href=\"http://help.then.ly/\" target=\"_blank"
1063
- "\">Help Desk</a> to report bugs, request features, or learn how to get the "
1064
- "most out of this plugin."
1065
  msgstr ""
1066
 
1067
- #: app/view/admin/box_the_seed_studio.php:56
1068
  msgid "Get Support"
1069
  msgstr ""
1070
 
 
 
 
 
 
 
 
 
1071
  #: app/view/admin/box_time_and_date.php:2
1072
  msgid "Event date and time"
1073
  msgstr ""
@@ -1113,12 +1128,11 @@ msgid "Welcome"
1113
  msgstr ""
1114
 
1115
  #: app/view/admin/calendar_tasks.php:4
1116
- msgid ""
1117
- "to the All-in-One Calendar by <a href=\"http://then.ly/\" target=\"_blank"
1118
- "\">Then.ly</a>"
1119
  msgstr ""
1120
 
1121
- #: app/view/admin/calendar_tasks.php:13 themes-ai1ec/vortex/calendar.php:30
 
1122
  msgid "Post Your Event"
1123
  msgstr ""
1124
 
@@ -1172,7 +1186,7 @@ msgid "Upcoming Events"
1172
  msgstr ""
1173
 
1174
  #: app/view/admin/class-ai1ec-agenda-widget.php:17
1175
- msgid "All-in-One Calendar: Lists upcoming events in Agenda view"
1176
  msgstr ""
1177
 
1178
  #: app/view/admin/event_categories-color_picker.php:5
@@ -1197,8 +1211,10 @@ msgstr ""
1197
  msgid "Successfully imported events:"
1198
  msgstr ""
1199
 
1200
- #: app/view/admin/row_daily.php:3 app/view/admin/row_monthly.php:3
1201
- #: app/view/admin/row_monthly.php:22 app/view/admin/row_weekly.php:3
 
 
1202
  #: app/view/admin/row_yearly.php:3
1203
  msgid "Every"
1204
  msgstr ""
@@ -1226,13 +1242,7 @@ msgid "Update Settings"
1226
  msgstr ""
1227
 
1228
  #: app/view/admin/themes-updated.php:16
1229
- msgid ""
1230
- "Whenever core files are updated, please be sure to reload your web browser "
1231
- "to make sure the most recent versions of the files are used."
1232
- msgstr ""
1233
-
1234
- #: app/view/admin/themes-updated.php:19
1235
- msgid "All-in-One Calendar Settings »"
1236
  msgstr ""
1237
 
1238
  #: lib/class-ai1ec-updater.php:12
@@ -1275,12 +1285,18 @@ msgstr ""
1275
  msgid "There are no upcoming events."
1276
  msgstr ""
1277
 
1278
- #: themes-ai1ec/vortex/agenda-widget.php:48 themes-ai1ec/vortex/agenda.php:68
1279
- #: themes-ai1ec/vortex/agenda.php:118 themes-ai1ec/vortex/month.php:84
1280
- #: themes-ai1ec/vortex/oneday.php:71 themes-ai1ec/vortex/oneday.php:82
1281
- #: themes-ai1ec/vortex/oneday.php:158 themes-ai1ec/vortex/oneday.php:170
1282
- #: themes-ai1ec/vortex/week.php:70 themes-ai1ec/vortex/week.php:81
1283
- #: themes-ai1ec/vortex/week.php:160 themes-ai1ec/vortex/week.php:171
 
 
 
 
 
 
1284
  msgid "@ %s"
1285
  msgstr ""
1286
 
@@ -1290,9 +1306,7 @@ msgstr ""
1290
 
1291
  #: themes-ai1ec/vortex/agenda-widget.php:75
1292
  #: themes-ai1ec/vortex/calendar.php:114
1293
- msgid ""
1294
- "Subscribe to this calendar using your favourite calendar program (iCal, "
1295
- "Outlook, etc.)"
1296
  msgstr ""
1297
 
1298
  #: themes-ai1ec/vortex/agenda-widget.php:76
@@ -1309,8 +1323,10 @@ msgstr ""
1309
  msgid "Add to Google"
1310
  msgstr ""
1311
 
1312
- #: themes-ai1ec/vortex/agenda.php:6 themes-ai1ec/vortex/month.php:6
1313
- #: themes-ai1ec/vortex/oneday.php:7 themes-ai1ec/vortex/week.php:6
 
 
1314
  msgid "Today"
1315
  msgstr ""
1316
 
@@ -1326,8 +1342,10 @@ msgstr ""
1326
  msgid "There are no upcoming events to display at this time."
1327
  msgstr ""
1328
 
1329
- #: themes-ai1ec/vortex/agenda.php:65 themes-ai1ec/vortex/agenda.php:121
1330
- #: themes-ai1ec/vortex/month.php:88 themes-ai1ec/vortex/oneday.php:74
 
 
1331
  #: themes-ai1ec/vortex/week.php:73
1332
  msgid "(all-day)"
1333
  msgstr ""
@@ -1336,12 +1354,14 @@ msgstr ""
1336
  msgid "Read more"
1337
  msgstr ""
1338
 
1339
- #: themes-ai1ec/vortex/agenda.php:90 themes-ai1ec/vortex/event-multi.php:45
 
1340
  #: themes-ai1ec/vortex/event-single.php:57
1341
  msgid "Categories:"
1342
  msgstr ""
1343
 
1344
- #: themes-ai1ec/vortex/agenda.php:96 themes-ai1ec/vortex/event-multi.php:51
 
1345
  #: themes-ai1ec/vortex/event-single.php:64
1346
  msgid "Tags:"
1347
  msgstr ""
@@ -1414,9 +1434,7 @@ msgid "Contact:"
1414
  msgstr ""
1415
 
1416
  #: themes-ai1ec/vortex/event-single-footer.php:4
1417
- msgid ""
1418
- "This post was replicated from another site's <a class=\"ai1ec-ics-icon\" "
1419
- "href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
1420
  msgstr ""
1421
 
1422
  #: themes-ai1ec/vortex/event-single-footer.php:8
@@ -1447,39 +1465,36 @@ msgstr ""
1447
  msgid "Add to Google Calendar"
1448
  msgstr ""
1449
 
1450
- #: themes-ai1ec/vortex/month.php:67 themes-ai1ec/vortex/oneday.php:57
1451
- #: themes-ai1ec/vortex/oneday.php:148 themes-ai1ec/vortex/week.php:56
 
 
1452
  #: themes-ai1ec/vortex/week.php:150
1453
  msgid "Summary:"
1454
  msgstr ""
1455
 
1456
- #: themes-ai1ec/vortex/month.php:70 themes-ai1ec/vortex/oneday.php:60
1457
- #: themes-ai1ec/vortex/oneday.php:151 themes-ai1ec/vortex/week.php:59
 
 
1458
  #: themes-ai1ec/vortex/week.php:153
1459
  msgid "click anywhere for details"
1460
  msgstr ""
1461
 
1462
- #: themes-ai1ec/vortex/oneday.php:35 themes-ai1ec/vortex/week.php:34
 
1463
  msgid "All-day"
1464
  msgstr ""
1465
 
1466
  #. Plugin Name of the plugin/theme
1467
- msgid "All-in-One Calendar by Then.ly"
1468
  msgstr ""
1469
 
1470
- #. #-#-#-#-# plugin.pot (All-in-One Calendar by Then.ly 1.7) #-#-#-#-#
1471
  #. Plugin URI of the plugin/theme
1472
- #. #-#-#-#-# plugin.pot (All-in-One Calendar by Then.ly 1.7) #-#-#-#-#
1473
- #. Author URI of the plugin/theme
1474
- msgid "http://then.ly/"
1475
  msgstr ""
1476
 
1477
  #. Description of the plugin/theme
1478
- msgid ""
1479
- "A calendar system with month, week, day, agenda views, upcoming events "
1480
- "widget, color-coded categories, recurrence, and import/export of .ics feeds."
1481
  msgstr ""
1482
 
1483
- #. Author of the plugin/theme
1484
- msgid "Then.ly"
1485
- msgstr ""
1
+ # Copyright (C) 2012 All-in-One Event Calendar by Timely
2
+ # This file is distributed under the same license as the All-in-One Event Calendar by Timely package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: All-in-One Event Calendar by Timely 1.8\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
7
+ "POT-Creation-Date: 2012-07-25 00:36:17+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2012-07-25 03:39+0200\n"
12
+ "Last-Translator: Timely <support@time.ly>\n"
13
+ "Language-Team: Timely <support@time.ly>\n"
14
 
15
+ #: app/controller/class-ai1ec-app-controller.php:420
16
+ #: app/controller/class-ai1ec-app-controller.php:421
17
  msgid "Calendar Feeds"
18
  msgstr ""
19
 
20
+ #: app/controller/class-ai1ec-app-controller.php:436
21
+ #: app/controller/class-ai1ec-app-controller.php:437
22
  #: app/helper/class-ai1ec-settings-helper.php:320
23
  msgid "Calendar"
24
  msgstr ""
25
 
26
+ #: app/controller/class-ai1ec-app-controller.php:451
27
+ #: app/controller/class-ai1ec-app-controller.php:452
28
  msgid "Upgrade"
29
  msgstr ""
30
 
31
+ #: app/controller/class-ai1ec-app-controller.php:643
32
  msgid "You do not have sufficient permissions to update plugins for this site."
33
  msgstr ""
34
 
119
  msgstr ""
120
 
121
  #: app/controller/class-ai1ec-events-controller.php:476
122
+ msgid "Event scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Preview event</a>"
 
 
123
  msgstr ""
124
 
125
  #. translators: Publish box date format, see http:php.net/date
132
  msgstr ""
133
 
134
  #: app/controller/class-ai1ec-importer-controller.php:91
135
+ msgid "The Events Calendar → All-in-One Event Calendar"
136
  msgstr ""
137
 
138
  #: app/controller/class-ai1ec-importer-controller.php:92
139
+ msgid "Imports events created using The Events Calendar plugin into the All-in-One Event Calendar"
 
 
140
  msgstr ""
141
 
142
  #: app/controller/class-ai1ec-settings-controller.php:60
143
+ msgid "All-in-One Event Calendar: Settings"
144
  msgstr ""
145
 
146
  #: app/controller/class-ai1ec-settings-controller.php:79
147
+ msgid "All-in-One Event Calendar: Calendar Feeds"
148
  msgstr ""
149
 
150
  #: app/controller/class-ai1ec-settings-controller.php:100
175
  msgstr[0] ""
176
  msgstr[1] ""
177
 
178
+ #: app/controller/class-ai1ec-settings-controller.php:318
179
  msgctxt "meta box"
180
  msgid "General Settings"
181
  msgstr ""
182
 
183
+ #: app/controller/class-ai1ec-settings-controller.php:327
184
  msgctxt "meta box"
185
  msgid "Advanced Settings"
186
  msgstr ""
187
 
188
+ #: app/controller/class-ai1ec-settings-controller.php:336
189
+ #: app/controller/class-ai1ec-settings-controller.php:365
190
  msgctxt "meta box"
191
+ msgid "Timely Support"
192
  msgstr ""
193
 
194
+ #: app/controller/class-ai1ec-settings-controller.php:356
195
  msgctxt "meta box"
196
  msgid "Feed Subscriptions"
197
  msgstr ""
198
 
199
+ #: app/controller/class-ai1ec-settings-controller.php:381
200
  msgid "<a href=\"%s\">Settings</a>"
201
  msgstr ""
202
 
203
+ #: app/controller/class-ai1ec-settings-controller.php:395
204
  msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
205
  msgstr ""
206
 
207
+ #: app/controller/class-ai1ec-settings-controller.php:396
208
  msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
209
  msgstr ""
210
 
211
+ #: app/controller/class-ai1ec-themes-controller.php:118
212
+ #: app/controller/class-ai1ec-themes-controller.php:119
213
+ #: app/controller/class-ai1ec-themes-controller.php:182
214
+ msgid "Install Calendar Themes"
215
+ msgstr ""
216
+
217
+ #: app/controller/class-ai1ec-themes-controller.php:216
218
+ msgid "Errors occurred while we tried to install your core Calendar Themes"
219
+ msgstr ""
220
+
221
+ #: app/controller/class-ai1ec-themes-controller.php:231
222
+ msgid "Calendar themes were installed successfully"
223
+ msgstr ""
224
+
225
+ #: app/controller/class-ai1ec-themes-controller.php:234
226
+ #: app/view/admin/themes-updated.php:19
227
+ msgid "All-in-One Event Calendar Settings »"
228
+ msgstr ""
229
+
230
+ #: app/controller/class-ai1ec-themes-controller.php:252
231
+ #: app/controller/class-ai1ec-themes-controller.php:253
232
  #: app/view/admin/themes-updated.php:5
233
  msgid "Update Core Calendar Files"
234
  msgstr ""
235
 
236
+ #: app/controller/class-ai1ec-themes-controller.php:323
237
+ msgid "<div class=\"error\"><p><strong>There was an error updating one of the files.</strong> Please FTP to your web server and manually copy <pre>%s</pre> to <pre>%s</pre></p></div>"
 
 
 
238
  msgstr ""
239
 
240
+ #: app/controller/class-ai1ec-themes-controller.php:333
241
+ msgid "<div id=\"message\" class=\"error\"><h3>Errors occurred while we tried to update your core calendar files.</h3><p><strong>Please follow any instructions listed below or your calendar may malfunction:</strong></p></div>"
 
 
 
 
242
  msgstr ""
243
 
244
+ #: app/controller/class-ai1ec-themes-controller.php:336
245
+ msgid "<div id=\"message\" class=\"updated\"><h3>Your core calendar files were updated successfully.</h3></div>"
 
 
246
  msgstr ""
247
 
248
  #: app/helper/class-ai1ec-app-helper.php:156
330
  msgstr ""
331
 
332
  #: app/helper/class-ai1ec-app-helper.php:352
333
+ msgid "All Events <span class=\"update-plugins count-%d\" title=\"%d Pending Events\"><span class=\"update-count\">%d</span></span>"
 
 
334
  msgstr ""
335
 
336
  #: app/helper/class-ai1ec-app-helper.php:358
349
  msgid "Event date/time"
350
  msgstr ""
351
 
352
+ #: app/helper/class-ai1ec-app-helper.php:689
353
+ msgid "Welcome to the All-in-One Event Calendar, by timely"
354
+ msgstr ""
355
+
356
+ #: app/helper/class-ai1ec-app-helper.php:694
357
+ msgid "Watch the introductory video »"
358
+ msgstr ""
359
+
360
+ #: app/helper/class-ai1ec-app-helper.php:698
361
+ #: app/helper/class-ai1ec-app-helper.php:781
362
+ msgid "Dismiss"
363
+ msgstr ""
364
+
365
+ #: app/helper/class-ai1ec-app-helper.php:715
366
+ msgid "Introducing the All-in-One Event Calendar, by Timely"
367
+ msgstr ""
368
+
369
+ #: app/helper/class-ai1ec-app-helper.php:723
370
+ #: app/view/admin/box_support.php:41
371
+ msgid "Upgrade to Premium for Free"
372
+ msgstr ""
373
+
374
+ #: app/helper/class-ai1ec-app-helper.php:732
375
+ #: app/helper/class-ai1ec-app-helper.php:754
376
+ #: app/helper/class-ai1ec-app-helper.php:769
377
+ #: app/helper/class-ai1ec-app-helper.php:832
378
+ msgid "All-in-One Event Calendar Notice"
379
+ msgstr ""
380
+
381
+ #: app/helper/class-ai1ec-app-helper.php:801
382
  msgid "Select an option in the <strong>Calendar page</strong> dropdown list."
383
  msgstr ""
384
 
385
+ #: app/helper/class-ai1ec-app-helper.php:804
386
  msgid "Select an option in the <strong>Timezone</strong> dropdown list."
387
  msgstr ""
388
 
389
+ #: app/helper/class-ai1ec-app-helper.php:806
390
  msgid "Click <strong>Update Settings</strong>."
391
  msgstr ""
392
 
393
+ #: app/helper/class-ai1ec-app-helper.php:811
394
+ msgid "The plugin is installed, but has not been configured. <a href=\"%s\">Click here to set it up now &raquo;</a>"
 
 
395
  msgstr ""
396
 
397
+ #: app/helper/class-ai1ec-app-helper.php:819
398
+ msgid "The plugin is installed, but has not been configured. Please log in as an Administrator to set it up."
 
 
399
  msgstr ""
400
 
401
+ #: app/helper/class-ai1ec-app-helper.php:824
402
  msgid "<p>To set up the plugin:</p>"
403
  msgstr ""
404
 
405
+ #: app/helper/class-ai1ec-app-helper.php:849
 
 
 
 
406
  msgid "Event"
407
  msgid_plural "Events"
408
  msgstr[0] ""
409
  msgstr[1] ""
410
 
411
+ #: app/helper/class-ai1ec-app-helper.php:861
412
  msgid "Event Category"
413
  msgid_plural "Event Categories"
414
  msgstr[0] ""
415
  msgstr[1] ""
416
 
417
+ #: app/helper/class-ai1ec-app-helper.php:873
418
  msgid "Event Tag"
419
  msgid_plural "Event Tags"
420
  msgstr[0] ""
754
  msgstr ""
755
 
756
  #: app/view/admin/box_advanced_settings.php:5
757
+ msgid "Optional. Provide a <a href=\"http://api.jquery.com/category/selectors/\" target=\"_blank\">jQuery selector</a> that evaluates to a single DOM element. Replaces any existing markup found within target. If left empty, calendar is shown in normal page content container."
 
 
 
 
758
  msgstr ""
759
 
760
  #: app/view/admin/box_event_contact.php:1
818
  msgstr ""
819
 
820
  #: app/view/admin/box_eventbrite.php:24
821
+ msgid "To create multiple tickets per event, submit this form, then follow the link to Eventbrite."
 
 
822
  msgstr ""
823
 
824
  #: app/view/admin/box_eventbrite.php:32
842
  msgstr ""
843
 
844
  #: app/view/admin/box_eventbrite.php:68
845
+ msgid "The price for this event's first ticket will be taken from the Cost field above."
 
 
846
  msgstr ""
847
 
848
  #: app/view/admin/box_eventbrite.php:75
897
  msgid "Check for new events"
898
  msgstr ""
899
 
900
+ #: app/view/admin/box_feeds.php:19
901
+ #: app/view/admin/feed_row.php:3
902
  msgid "iCalendar/.ics Feed URL:"
903
  msgstr ""
904
 
906
  msgid "Event category"
907
  msgstr ""
908
 
909
+ #: app/view/admin/box_feeds.php:29
910
+ #: app/view/admin/feed_row.php:15
911
  msgid "Tag with"
912
  msgstr ""
913
 
960
  msgstr ""
961
 
962
  #: app/view/admin/box_general_settings.php:53
963
+ msgid "Show <strong>Post Your Event</strong> button above the calendar to privileged users"
 
 
964
  msgstr ""
965
 
966
  #: app/view/admin/box_general_settings.php:59
967
+ msgid "Hide <strong>Subscribe</strong>/<strong>Add to Calendar</strong> buttons in calendar and single event views"
 
 
968
  msgstr ""
969
 
970
  #: app/view/admin/box_general_settings.php:65
992
  msgstr ""
993
 
994
  #: app/view/admin/box_general_settings.php:95
995
+ msgid "Use the configured <strong>region</strong> (WordPress locale) to bias the address autocomplete function"
 
 
996
  msgstr ""
997
 
998
  #: app/view/admin/box_general_settings.php:101
1004
  msgstr ""
1005
 
1006
  #: app/view/admin/box_general_settings.php:109
1007
+ msgid "Allow Timely to collect calendar statistics"
1008
  msgstr ""
1009
 
1010
  #: app/view/admin/box_repeat.php:14
1023
  msgid "Cancel"
1024
  msgstr ""
1025
 
1026
+ #: app/view/admin/box_support.php:3
1027
+ msgid "Timely"
1028
  msgstr ""
1029
 
1030
+ #: app/view/admin/box_support.php:7
1031
+ msgid "Timely’s All-in-One Event Calendar is a revolutionary new way to find and share events."
 
 
1032
  msgstr ""
1033
 
1034
+ #: app/view/admin/box_support.php:16
1035
+ msgid "Follow @_Timely"
1036
  msgstr ""
1037
 
1038
+ #: app/view/admin/box_support.php:22
1039
+ msgid "Upgrade to Premium for free and get exclusive features:"
 
 
1040
  msgstr ""
1041
 
1042
+ #: app/view/admin/box_support.php:28
1043
  msgid "Calendar Themes"
1044
  msgstr ""
1045
 
1046
+ #: app/view/admin/box_support.php:29
1047
+ msgid "Posterboard View"
1048
+ msgstr ""
1049
+
1050
+ #: app/view/admin/box_support.php:30
1051
  msgid "Duplicate Events"
1052
  msgstr ""
1053
 
1054
+ #: app/view/admin/box_support.php:33
1055
+ msgid "Facebook Event Import/Export"
1056
  msgstr ""
1057
 
1058
+ #: app/view/admin/box_support.php:34
1059
+ msgid "Location by Latitude/Longitude"
1060
  msgstr ""
1061
 
1062
+ #: app/view/admin/box_support.php:35
1063
+ msgid "... and much more!"
1064
  msgstr ""
1065
 
1066
+ #: app/view/admin/box_support.php:46
1067
+ msgid "Timely is dedicated to creating the best calendar software in the world."
 
1068
  msgstr ""
1069
 
1070
+ #: app/view/admin/box_support.php:50
1071
+ msgid "Please let us know if anything is not working the way you expect. While many problems are caused by conflicts with other plugins, most problems can be solved quickly. Visit our <a href=\"http://help.time.ly/\" target=\"_blank\">Help Desk</a> to report bugs, request features, or learn how to get the most out of this plugin."
 
 
 
 
 
1072
  msgstr ""
1073
 
1074
+ #: app/view/admin/box_support.php:54
1075
  msgid "Get Support"
1076
  msgstr ""
1077
 
1078
+ #: app/view/admin/box_support.php:59
1079
+ msgid "Timely News"
1080
+ msgstr ""
1081
+
1082
+ #: app/view/admin/box_support.php:59
1083
+ msgid "view all news »"
1084
+ msgstr ""
1085
+
1086
  #: app/view/admin/box_time_and_date.php:2
1087
  msgid "Event date and time"
1088
  msgstr ""
1128
  msgstr ""
1129
 
1130
  #: app/view/admin/calendar_tasks.php:4
1131
+ msgid "to the All-in-One Event Calendar by <a href=\"http://time.ly/\" target=\"_blank\">Timely</a>"
 
 
1132
  msgstr ""
1133
 
1134
+ #: app/view/admin/calendar_tasks.php:13
1135
+ #: themes-ai1ec/vortex/calendar.php:30
1136
  msgid "Post Your Event"
1137
  msgstr ""
1138
 
1186
  msgstr ""
1187
 
1188
  #: app/view/admin/class-ai1ec-agenda-widget.php:17
1189
+ msgid "All-in-One Event Calendar: Lists upcoming events in Agenda view"
1190
  msgstr ""
1191
 
1192
  #: app/view/admin/event_categories-color_picker.php:5
1211
  msgid "Successfully imported events:"
1212
  msgstr ""
1213
 
1214
+ #: app/view/admin/row_daily.php:3
1215
+ #: app/view/admin/row_monthly.php:3
1216
+ #: app/view/admin/row_monthly.php:22
1217
+ #: app/view/admin/row_weekly.php:3
1218
  #: app/view/admin/row_yearly.php:3
1219
  msgid "Every"
1220
  msgstr ""
1242
  msgstr ""
1243
 
1244
  #: app/view/admin/themes-updated.php:16
1245
+ msgid "Whenever core files are updated, please be sure to reload your web browser to make sure the most recent versions of the files are used."
 
 
 
 
 
 
1246
  msgstr ""
1247
 
1248
  #: lib/class-ai1ec-updater.php:12
1285
  msgid "There are no upcoming events."
1286
  msgstr ""
1287
 
1288
+ #: themes-ai1ec/vortex/agenda-widget.php:48
1289
+ #: themes-ai1ec/vortex/agenda.php:68
1290
+ #: themes-ai1ec/vortex/agenda.php:118
1291
+ #: themes-ai1ec/vortex/month.php:84
1292
+ #: themes-ai1ec/vortex/oneday.php:71
1293
+ #: themes-ai1ec/vortex/oneday.php:82
1294
+ #: themes-ai1ec/vortex/oneday.php:158
1295
+ #: themes-ai1ec/vortex/oneday.php:170
1296
+ #: themes-ai1ec/vortex/week.php:70
1297
+ #: themes-ai1ec/vortex/week.php:81
1298
+ #: themes-ai1ec/vortex/week.php:160
1299
+ #: themes-ai1ec/vortex/week.php:171
1300
  msgid "@ %s"
1301
  msgstr ""
1302
 
1306
 
1307
  #: themes-ai1ec/vortex/agenda-widget.php:75
1308
  #: themes-ai1ec/vortex/calendar.php:114
1309
+ msgid "Subscribe to this calendar using your favourite calendar program (iCal, Outlook, etc.)"
 
 
1310
  msgstr ""
1311
 
1312
  #: themes-ai1ec/vortex/agenda-widget.php:76
1323
  msgid "Add to Google"
1324
  msgstr ""
1325
 
1326
+ #: themes-ai1ec/vortex/agenda.php:6
1327
+ #: themes-ai1ec/vortex/month.php:6
1328
+ #: themes-ai1ec/vortex/oneday.php:7
1329
+ #: themes-ai1ec/vortex/week.php:6
1330
  msgid "Today"
1331
  msgstr ""
1332
 
1342
  msgid "There are no upcoming events to display at this time."
1343
  msgstr ""
1344
 
1345
+ #: themes-ai1ec/vortex/agenda.php:65
1346
+ #: themes-ai1ec/vortex/agenda.php:121
1347
+ #: themes-ai1ec/vortex/month.php:88
1348
+ #: themes-ai1ec/vortex/oneday.php:74
1349
  #: themes-ai1ec/vortex/week.php:73
1350
  msgid "(all-day)"
1351
  msgstr ""
1354
  msgid "Read more"
1355
  msgstr ""
1356
 
1357
+ #: themes-ai1ec/vortex/agenda.php:90
1358
+ #: themes-ai1ec/vortex/event-multi.php:45
1359
  #: themes-ai1ec/vortex/event-single.php:57
1360
  msgid "Categories:"
1361
  msgstr ""
1362
 
1363
+ #: themes-ai1ec/vortex/agenda.php:96
1364
+ #: themes-ai1ec/vortex/event-multi.php:51
1365
  #: themes-ai1ec/vortex/event-single.php:64
1366
  msgid "Tags:"
1367
  msgstr ""
1434
  msgstr ""
1435
 
1436
  #: themes-ai1ec/vortex/event-single-footer.php:4
1437
+ msgid "This post was replicated from another site's <a class=\"ai1ec-ics-icon\" href=\"%s\" title=\"iCalendar feed\">calendar feed</a>."
 
 
1438
  msgstr ""
1439
 
1440
  #: themes-ai1ec/vortex/event-single-footer.php:8
1465
  msgid "Add to Google Calendar"
1466
  msgstr ""
1467
 
1468
+ #: themes-ai1ec/vortex/month.php:67
1469
+ #: themes-ai1ec/vortex/oneday.php:57
1470
+ #: themes-ai1ec/vortex/oneday.php:148
1471
+ #: themes-ai1ec/vortex/week.php:56
1472
  #: themes-ai1ec/vortex/week.php:150
1473
  msgid "Summary:"
1474
  msgstr ""
1475
 
1476
+ #: themes-ai1ec/vortex/month.php:70
1477
+ #: themes-ai1ec/vortex/oneday.php:60
1478
+ #: themes-ai1ec/vortex/oneday.php:151
1479
+ #: themes-ai1ec/vortex/week.php:59
1480
  #: themes-ai1ec/vortex/week.php:153
1481
  msgid "click anywhere for details"
1482
  msgstr ""
1483
 
1484
+ #: themes-ai1ec/vortex/oneday.php:35
1485
+ #: themes-ai1ec/vortex/week.php:34
1486
  msgid "All-day"
1487
  msgstr ""
1488
 
1489
  #. Plugin Name of the plugin/theme
1490
+ msgid "All-in-One Event Calendar by Timely"
1491
  msgstr ""
1492
 
 
1493
  #. Plugin URI of the plugin/theme
1494
+ msgid "http://time.ly/"
 
 
1495
  msgstr ""
1496
 
1497
  #. Description of the plugin/theme
1498
+ msgid "A calendar system with month, week, day, agenda views, upcoming events widget, color-coded categories, recurrence, and import/export of .ics feeds."
 
 
1499
  msgstr ""
1500
 
 
 
 
lib/class-ai1ec-updater.php CHANGED
@@ -48,6 +48,12 @@ class Ai1ec_Updater extends WP_Upgrader {
48
 
49
  // Force refresh of plugin update information
50
  delete_site_transient( 'update_plugins' );
 
 
 
 
 
 
51
  }
52
 
53
  //Hooked to pre_install
@@ -81,7 +87,7 @@ class Ai1ec_Updater extends WP_Upgrader {
81
  $plugins_dir = $wp_filesystem->wp_plugins_dir();
82
  $this_plugin_dir = trailingslashit( dirname( $plugins_dir . $plugin ) );
83
 
84
- $ai1ec_themes = trailingslashit( AI1EC_THEMES_ROOT );
85
  if( $wp_filesystem->exists( $ai1ec_themes ) ) {
86
  $wp_filesystem->delete( $ai1ec_themes, true );
87
  }
48
 
49
  // Force refresh of plugin update information
50
  delete_site_transient( 'update_plugins' );
51
+ wp_cache_delete( 'plugins', 'plugins' );
52
+
53
+ // activate the plugin
54
+ activate_plugin( $plugin );
55
+ echo '<p>Plugin activated.</p>';
56
+ echo '<a href="' . admin_url( 'index.php' ) . '">Continue Here</a>';
57
  }
58
 
59
  //Hooked to pre_install
87
  $plugins_dir = $wp_filesystem->wp_plugins_dir();
88
  $this_plugin_dir = trailingslashit( dirname( $plugins_dir . $plugin ) );
89
 
90
+ $ai1ec_themes = $wp_filesystem->wp_content_dir() . AI1EC_THEMES_FOLDER;
91
  if( $wp_filesystem->exists( $ai1ec_themes ) ) {
92
  $wp_filesystem->delete( $ai1ec_themes, true );
93
  }
lib/global-functions.php CHANGED
@@ -20,7 +20,7 @@ function url_get_contents( $url ) {
20
  // To make a remote call in wordpress it's better to use the wrapper functions instead
21
  // of class methods. http://codex.wordpress.org/HTTP_API
22
  // SSL Verification was disabled in the cUrl call
23
- $result = wp_remote_get( $url, array( 'sslverify' => false ) );
24
  // The wrapper functions return an WP_error if anything goes wrong.
25
  if( is_wp_error( $result ) ) {
26
  // We explicitly return false to notify an error. This is exactly the same behaviour we had before
20
  // To make a remote call in wordpress it's better to use the wrapper functions instead
21
  // of class methods. http://codex.wordpress.org/HTTP_API
22
  // SSL Verification was disabled in the cUrl call
23
+ $result = wp_remote_get( $url, array( 'sslverify' => false, 'timeout' => 120 ) );
24
  // The wrapper functions return an WP_error if anything goes wrong.
25
  if( is_wp_error( $result ) ) {
26
  // We explicitly return false to notify an error. This is exactly the same behaviour we had before
lib/iCalcreator-2.10.23/iCalUtilityFunctions.class.php DELETED
@@ -1,1578 +0,0 @@
1
- <?php
2
- /**
3
- * iCalcreator v2.10.23
4
- * copyright (c) 2007-2011 Kjell-Inge Gustafsson kigkonsult
5
- * kigkonsult.se/iCalcreator/index.php
6
- * ical@kigkonsult.se
7
- *
8
- * This library is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU Lesser General Public
10
- * License as published by the Free Software Foundation; either
11
- * version 2.1 of the License, or (at your option) any later version.
12
- *
13
- * This library is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
- * Lesser General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU Lesser General Public
19
- * License along with this library; if not, write to the Free Software
20
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
- */
22
- /**
23
- * moving all utility (static) functions to a utility class
24
- *
25
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
26
- * @since 2.10.1 - 2011-07-16
27
- *
28
- */
29
- class iCalUtilityFunctions {
30
- // Store the single instance of iCalUtilityFunctions
31
- private static $m_pInstance;
32
-
33
- // Private constructor to limit object instantiation to within the class
34
- private function __construct() {
35
- $m_pInstance = FALSE;
36
- }
37
-
38
- // Getter method for creating/returning the single instance of this class
39
- public static function getInstance() {
40
- if (!self::$m_pInstance)
41
- self::$m_pInstance = new iCalUtilityFunctions();
42
-
43
- return self::$m_pInstance;
44
- }
45
- /**
46
- * check a date(-time) for an opt. timezone and if it is a DATE-TIME or DATE
47
- *
48
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
49
- * @since 2.4.16 - 2008-10-25
50
- * @param array $date, date to check
51
- * @param int $parno, no of date parts (i.e. year, month.. .)
52
- * @return array $params, property parameters
53
- */
54
- public static function _chkdatecfg( $theDate, & $parno, & $params ) {
55
- if( isset( $params['TZID'] ))
56
- $parno = 6;
57
- elseif( isset( $params['VALUE'] ) && ( 'DATE' == $params['VALUE'] ))
58
- $parno = 3;
59
- else {
60
- if( isset( $params['VALUE'] ) && ( 'PERIOD' == $params['VALUE'] ))
61
- $parno = 7;
62
- if( is_array( $theDate )) {
63
- if( isset( $theDate['timestamp'] ))
64
- $tzid = ( isset( $theDate['tz'] )) ? $theDate['tz'] : null;
65
- else
66
- $tzid = ( isset( $theDate['tz'] )) ? $theDate['tz'] : ( 7 == count( $theDate )) ? end( $theDate ) : null;
67
- if( !empty( $tzid )) {
68
- $parno = 7;
69
- if( !iCalUtilityFunctions::_isOffset( $tzid ))
70
- $params['TZID'] = $tzid; // save only timezone
71
- }
72
- elseif( !$parno && ( 3 == count( $theDate )) &&
73
- ( isset( $params['VALUE'] ) && ( 'DATE' == $params['VALUE'] )))
74
- $parno = 3;
75
- else
76
- $parno = 6;
77
- }
78
- else { // string
79
- $date = trim( $theDate );
80
- if( 'Z' == substr( $date, -1 ))
81
- $parno = 7; // UTC DATE-TIME
82
- elseif((( 8 == strlen( $date ) && ctype_digit( $date )) || ( 11 >= strlen( $date ))) &&
83
- ( !isset( $params['VALUE'] ) || !in_array( $params['VALUE'], array( 'DATE-TIME', 'PERIOD' ))))
84
- $parno = 3; // DATE
85
- $date = iCalUtilityFunctions::_date_time_string( $date, $parno );
86
- if( !empty( $date['tz'] )) {
87
- $parno = 7;
88
- if( !iCalUtilityFunctions::_isOffset( $date['tz'] ))
89
- $params['TZID'] = $date['tz']; // save only timezone
90
- }
91
- elseif( empty( $parno ))
92
- $parno = 6;
93
- }
94
- if( isset( $params['TZID'] ))
95
- $parno = 6;
96
- }
97
- }
98
- /**
99
- * create (very simple) timezone and standard/daylight components
100
- *
101
- * Result when 'Europe/Stockholm' is used as timezone:
102
- *
103
- * BEGIN:VTIMEZONE
104
- * TZID:Europe/Stockholm
105
- * BEGIN:STANDARD
106
- * DTSTART:20101031T020000
107
- * TZOFFSETFROM:+0200
108
- * TZOFFSETTO:+0100
109
- * RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
110
- * TZNAME:CET
111
- * END:STANDARD
112
- * BEGIN:DAYLIGHT
113
- * DTSTART:20100328T030000
114
- * TZOFFSETFROM:+0100
115
- * TZOFFSETTO:+0200
116
- * RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
117
- * TZNAME:CEST
118
- * END:DAYLIGHT
119
- * END:VTIMEZONE
120
- *
121
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
122
- * @since 2.10.3 - 2011-08-01
123
- * @param object $calendar, reference to an iCalcreator calendar instance
124
- * @param string $timezone, a PHP5 (DateTimeZone) valid timezone
125
- * @param array $xProp, *[x-propName => x-propValue], optional
126
- * @return bool
127
- */
128
- public static function createTimezone( & $calendar, $timezone, $xProp=array() ) {
129
- if( !class_exists( 'DateTimeZone' ))
130
- return FALSE;
131
- if( empty( $timezone ))
132
- return FALSE;
133
- try {
134
- $dtz = new DateTimeZone( $timezone );
135
- }
136
- catch( Exception $e ) {
137
- return FALSE;
138
- }
139
- $stdDTSTART = $stdTZOFFSETTO = $stdTZOFFSETFROM = $stdTZNAME = $dlghtDTSTART = $dlghtTZOFFSETTO = $dlghtTZOFFSETFROM = $dlghtTZNAME = FALSE;
140
- $dateNow = new DateTime();
141
- $transitions = $dtz->getTransitions();
142
- foreach( $transitions as $trans ) {
143
- if( FALSE === ( $date = DateTime::createFromFormat( 'Y-m-d', substr( $trans['time'], 0, 10 ))))
144
- continue;
145
- if( $date > $dateNow )
146
- break;
147
- if( TRUE !== $trans['isdst'] ) {
148
- $stdDTSTART = $trans['time'];
149
- $stdTZOFFSETTO = $dlghtTZOFFSETFROM = iCalUtilityFunctions::offsetSec2His( $trans['offset'] );
150
- $stdTZNAME = $trans['abbr'];
151
- }
152
- else {
153
- $dlghtDTSTART = $trans['time'];
154
- $dlghtTZOFFSETTO = $stdTZOFFSETFROM = iCalUtilityFunctions::offsetSec2His( $trans['offset'] );
155
- $dlghtTZNAME = $trans['abbr'];
156
- }
157
- }
158
- if( !$stdDTSTART || !$stdTZOFFSETTO || !$stdTZOFFSETFROM )
159
- return FALSE;
160
- $tz = & $calendar->newComponent( 'vtimezone' );
161
- $tz->setproperty( 'tzid', $timezone );
162
- if( !empty( $xProp )) {
163
- foreach( $xProp as $xPropName => $xPropValue )
164
- if( 'x-' == strtolower( substr( $xPropName, 0, 2 )))
165
- $tz->setproperty( $xPropName, $xPropValue );
166
- }
167
- $std = & $tz->newComponent( 'standard' );
168
- $std->setProperty( 'dtstart', $stdDTSTART );
169
- if( $stdTZNAME )
170
- $std->setProperty( 'tzname', $stdTZNAME );
171
- $std->setProperty( 'tzoffsetto', $stdTZOFFSETTO );
172
- $std->setProperty( 'tzoffsetfrom', $stdTZOFFSETFROM );
173
- if(( $stdTZOFFSETTO != $stdTZOFFSETFROM ) && ( FALSE === iCalUtilityFunctions::_setTZrrule( $std )))
174
- $std->setProperty( 'RRULE', array( 'FREQ' => 'YEARLY', 'BYDAY' => array( '-1', 'DAY' => 'SU' ), 'BYMONTH' => 10 ));
175
- if(( !$dlghtDTSTART || !$dlghtTZOFFSETTO || !$dlghtTZOFFSETFROM ) || ( $dlghtTZOFFSETTO == $dlghtTZOFFSETFROM ))
176
- return TRUE;
177
- $dlght = & $tz->newComponent( 'daylight' );
178
- $dlght->setProperty( 'dtstart', $dlghtDTSTART );
179
- if( $dlghtTZNAME )
180
- $dlght->setProperty( 'tzname', $dlghtTZNAME );
181
- $dlght->setProperty( 'tzoffsetto', $dlghtTZOFFSETTO );
182
- $dlght->setProperty( 'tzoffsetfrom', $dlghtTZOFFSETFROM );
183
- if( FALSE === iCalUtilityFunctions::_setTZrrule( $dlght ))
184
- $dlght->setProperty( 'RRULE', array( 'FREQ' => 'YEARLY', 'BYDAY' => array( '-1', 'DAY' => 'SU' ), 'BYMONTH' => 3 ));
185
- return TRUE;
186
- }
187
- /**
188
- * convert date/datetime to timestamp
189
- *
190
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
191
- * @since 2.4.8 - 2008-10-30
192
- * @param array $datetime datetime/(date)
193
- * @param string $tz timezone
194
- * @return timestamp
195
- */
196
- public static function _date2timestamp( $datetime, $tz=null ) {
197
- $output = null;
198
- if( !isset( $datetime['hour'] )) $datetime['hour'] = '0';
199
- if( !isset( $datetime['min'] )) $datetime['min'] = '0';
200
- if( !isset( $datetime['sec'] )) $datetime['sec'] = '0';
201
- foreach( $datetime as $dkey => $dvalue ) {
202
- if( 'tz' != $dkey )
203
- $datetime[$dkey] = (integer) $dvalue;
204
- }
205
- if( $tz )
206
- $datetime['tz'] = $tz;
207
- $offset = ( isset( $datetime['tz'] ) && ( '' < trim ( $datetime['tz'] ))) ? iCalUtilityFunctions::_tz2offset( $datetime['tz'] ) : 0;
208
- $output = mktime( $datetime['hour'], $datetime['min'], ($datetime['sec'] + $offset), $datetime['month'], $datetime['day'], $datetime['year'] );
209
- return $output;
210
- }
211
- /**
212
- * ensures internal date-time/date format for input date-time/date in array format
213
- *
214
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
215
- * @since 0.3.0 - 2006-08-15
216
- * @param array $datetime
217
- * @param int $parno optional, default FALSE
218
- * @return array
219
- */
220
- public static function _date_time_array( $datetime, $parno=FALSE ) {
221
- $output = array();
222
- foreach( $datetime as $dateKey => $datePart ) {
223
- switch ( $dateKey ) {
224
- case '0': case 'year': $output['year'] = $datePart; break;
225
- case '1': case 'month': $output['month'] = $datePart; break;
226
- case '2': case 'day': $output['day'] = $datePart; break;
227
- }
228
- if( 3 != $parno ) {
229
- switch ( $dateKey ) {
230
- case '0':
231
- case '1':
232
- case '2': break;
233
- case '3': case 'hour': $output['hour'] = $datePart; break;
234
- case '4': case 'min' : $output['min'] = $datePart; break;
235
- case '5': case 'sec' : $output['sec'] = $datePart; break;
236
- case '6': case 'tz' : $output['tz'] = $datePart; break;
237
- }
238
- }
239
- }
240
- if( 3 != $parno ) {
241
- if( !isset( $output['hour'] ))
242
- $output['hour'] = 0;
243
- if( !isset( $output['min'] ))
244
- $output['min'] = 0;
245
- if( !isset( $output['sec'] ))
246
- $output['sec'] = 0;
247
- }
248
- return $output;
249
- }
250
- /**
251
- * ensures internal date-time/date format for input date-time/date in string fromat
252
- *
253
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
254
- * @since 2.6.35 - 2010-12-03
255
- * @param array $datetime
256
- * @param int $parno optional, default FALSE
257
- * @return array
258
- */
259
- public static function _date_time_string( $datetime, $parno=FALSE ) {
260
- $datetime = (string) trim( $datetime );
261
- $tz = null;
262
- $len = strlen( $datetime ) - 1;
263
- if( 'Z' == substr( $datetime, -1 )) {
264
- $tz = 'Z';
265
- $datetime = trim( substr( $datetime, 0, $len ));
266
- }
267
- elseif( ( ctype_digit( substr( $datetime, -2, 2 ))) && // time or date
268
- ( '-' == substr( $datetime, -3, 1 )) ||
269
- ( ':' == substr( $datetime, -3, 1 )) ||
270
- ( '.' == substr( $datetime, -3, 1 ))) {
271
- $continue = TRUE;
272
- }
273
- elseif( ( ctype_digit( substr( $datetime, -4, 4 ))) && // 4 pos offset
274
- ( ' +' == substr( $datetime, -6, 2 )) ||
275
- ( ' -' == substr( $datetime, -6, 2 ))) {
276
- $tz = substr( $datetime, -5, 5 );
277
- $datetime = substr( $datetime, 0, ($len - 5));
278
- }
279
- elseif( ( ctype_digit( substr( $datetime, -6, 6 ))) && // 6 pos offset
280
- ( ' +' == substr( $datetime, -8, 2 )) ||
281
- ( ' -' == substr( $datetime, -8, 2 ))) {
282
- $tz = substr( $datetime, -7, 7 );
283
- $datetime = substr( $datetime, 0, ($len - 7));
284
- }
285
- elseif( ( 6 < $len ) && ( ctype_digit( substr( $datetime, -6, 6 )))) {
286
- $continue = TRUE;
287
- }
288
- elseif( 'T' == substr( $datetime, -7, 1 )) {
289
- $continue = TRUE;
290
- }
291
- else {
292
- $cx = $tx = 0; // 19970415T133000 US-Eastern
293
- for( $cx = -1; $cx > ( 9 - $len ); $cx-- ) {
294
- $char = substr( $datetime, $cx, 1 );
295
- if(( ' ' == $char) || ctype_digit( $char))
296
- break; // if exists, tz ends here.. . ?
297
- else
298
- $tx--; // tz length counter
299
- }
300
- if( 0 > $tx ) {
301
- $tz = substr( $datetime, $tx );
302
- $datetime = trim( substr( $datetime, 0, $len + $tx + 1 ));
303
- }
304
- }
305
- if( 0 < substr_count( $datetime, '-' )) {
306
- $datetime = str_replace( '-', '/', $datetime );
307
- }
308
- elseif( ctype_digit( substr( $datetime, 0, 8 )) &&
309
- ( 'T' == substr( $datetime, 8, 1 )) &&
310
- ctype_digit( substr( $datetime, 9, 6 ))) {
311
- $datetime = substr( $datetime, 4, 2 )
312
- .'/'.substr( $datetime, 6, 2 )
313
- .'/'.substr( $datetime, 0, 4 )
314
- .' '.substr( $datetime, 9, 2 )
315
- .':'.substr( $datetime, 11, 2 )
316
- .':'.substr( $datetime, 13);
317
- }
318
- $datestring = date( 'Y-m-d H:i:s', strtotime( $datetime ));
319
- $tz = trim( $tz );
320
- $output = array();
321
- $output['year'] = substr( $datestring, 0, 4 );
322
- $output['month'] = substr( $datestring, 5, 2 );
323
- $output['day'] = substr( $datestring, 8, 2 );
324
- if(( 6 == $parno ) || ( 7 == $parno ) || ( !$parno && ( 'Z' == $tz ))) {
325
- $output['hour'] = substr( $datestring, 11, 2 );
326
- $output['min'] = substr( $datestring, 14, 2 );
327
- $output['sec'] = substr( $datestring, 17, 2 );
328
- if( !empty( $tz ))
329
- $output['tz'] = $tz;
330
- }
331
- elseif( 3 != $parno ) {
332
- if(( '00' < substr( $datestring, 11, 2 )) ||
333
- ( '00' < substr( $datestring, 14, 2 )) ||
334
- ( '00' < substr( $datestring, 17, 2 ))) {
335
- $output['hour'] = substr( $datestring, 11, 2 );
336
- $output['min'] = substr( $datestring, 14, 2 );
337
- $output['sec'] = substr( $datestring, 17, 2 );
338
- }
339
- if( !empty( $tz ))
340
- $output['tz'] = $tz;
341
- }
342
- return $output;
343
- }
344
- /**
345
- * convert local startdate/enddate (Ymd[His]) to duration array
346
- *
347
- * uses this component dates if missing input dates
348
- *
349
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
350
- * @since 2.6.11 - 2010-10-21
351
- * @param array $startdate
352
- * @param array $duration
353
- * @return array duration
354
- */
355
- public static function _date2duration( $startdate, $enddate ) {
356
- $startWdate = mktime( 0, 0, 0, $startdate['month'], $startdate['day'], $startdate['year'] );
357
- $endWdate = mktime( 0, 0, 0, $enddate['month'], $enddate['day'], $enddate['year'] );
358
- $wduration = $endWdate - $startWdate;
359
- $dur = array();
360
- $dur['week'] = (int) floor( $wduration / ( 7 * 24 * 60 * 60 ));
361
- $wduration = $wduration % ( 7 * 24 * 60 * 60 );
362
- $dur['day'] = (int) floor( $wduration / ( 24 * 60 * 60 ));
363
- $wduration = $wduration % ( 24 * 60 * 60 );
364
- $dur['hour'] = (int) floor( $wduration / ( 60 * 60 ));
365
- $wduration = $wduration % ( 60 * 60 );
366
- $dur['min'] = (int) floor( $wduration / ( 60 ));
367
- $dur['sec'] = (int) $wduration % ( 60 );
368
- return $dur;
369
- }
370
- /**
371
- * ensures internal duration format for input in array format
372
- *
373
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
374
- * @since 2.1.1 - 2007-06-24
375
- * @param array $duration
376
- * @return array
377
- */
378
- public static function _duration_array( $duration ) {
379
- $output = array();
380
- if( is_array( $duration ) &&
381
- ( 1 == count( $duration )) &&
382
- isset( $duration['sec'] ) &&
383
- ( 60 < $duration['sec'] )) {
384
- $durseconds = $duration['sec'];
385
- $output['week'] = floor( $durseconds / ( 60 * 60 * 24 * 7 ));
386
- $durseconds = $durseconds % ( 60 * 60 * 24 * 7 );
387
- $output['day'] = floor( $durseconds / ( 60 * 60 * 24 ));
388
- $durseconds = $durseconds % ( 60 * 60 * 24 );
389
- $output['hour'] = floor( $durseconds / ( 60 * 60 ));
390
- $durseconds = $durseconds % ( 60 * 60 );
391
- $output['min'] = floor( $durseconds / ( 60 ));
392
- $output['sec'] = ( $durseconds % ( 60 ));
393
- }
394
- else {
395
- foreach( $duration as $durKey => $durValue ) {
396
- if( empty( $durValue )) continue;
397
- switch ( $durKey ) {
398
- case '0': case 'week': $output['week'] = $durValue; break;
399
- case '1': case 'day': $output['day'] = $durValue; break;
400
- case '2': case 'hour': $output['hour'] = $durValue; break;
401
- case '3': case 'min': $output['min'] = $durValue; break;
402
- case '4': case 'sec': $output['sec'] = $durValue; break;
403
- }
404
- }
405
- }
406
- if( isset( $output['week'] ) && ( 0 < $output['week'] )) {
407
- unset( $output['day'], $output['hour'], $output['min'], $output['sec'] );
408
- return $output;
409
- }
410
- unset( $output['week'] );
411
- if( empty( $output['day'] ))
412
- unset( $output['day'] );
413
- if ( isset( $output['hour'] ) || isset( $output['min'] ) || isset( $output['sec'] )) {
414
- if( !isset( $output['hour'] )) $output['hour'] = 0;
415
- if( !isset( $output['min'] )) $output['min'] = 0;
416
- if( !isset( $output['sec'] )) $output['sec'] = 0;
417
- if(( 0 == $output['hour'] ) && ( 0 == $output['min'] ) && ( 0 == $output['sec'] ))
418
- unset( $output['hour'], $output['min'], $output['sec'] );
419
- }
420
- return $output;
421
- }
422
- /**
423
- * ensures internal duration format for input in string format
424
- *
425
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
426
- * @since 2.0.5 - 2007-03-14
427
- * @param string $duration
428
- * @return array
429
- */
430
- public static function _duration_string( $duration ) {
431
- $duration = (string) trim( $duration );
432
- while( 'P' != strtoupper( substr( $duration, 0, 1 ))) {
433
- if( 0 < strlen( $duration ))
434
- $duration = substr( $duration, 1 );
435
- else
436
- return false; // no leading P !?!?
437
- }
438
- $duration = substr( $duration, 1 ); // skip P
439
- $duration = str_replace ( 't', 'T', $duration );
440
- $duration = str_replace ( 'T', '', $duration );
441
- $output = array();
442
- $val = null;
443
- for( $ix=0; $ix < strlen( $duration ); $ix++ ) {
444
- switch( strtoupper( substr( $duration, $ix, 1 ))) {
445
- case 'W':
446
- $output['week'] = $val;
447
- $val = null;
448
- break;
449
- case 'D':
450
- $output['day'] = $val;
451
- $val = null;
452
- break;
453
- case 'H':
454
- $output['hour'] = $val;
455
- $val = null;
456
- break;
457
- case 'M':
458
- $output['min'] = $val;
459
- $val = null;
460
- break;
461
- case 'S':
462
- $output['sec'] = $val;
463
- $val = null;
464
- break;
465
- default:
466
- if( !ctype_digit( substr( $duration, $ix, 1 )))
467
- return false; // unknown duration control character !?!?
468
- else
469
- $val .= substr( $duration, $ix, 1 );
470
- }
471
- }
472
- return iCalUtilityFunctions::_duration_array( $output );
473
- }
474
- /**
475
- * convert duration to date in array format
476
- *
477
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
478
- * @since 2.8.7 - 2011-03-03
479
- * @param array $startdate
480
- * @param array $duration
481
- * @return array, date format
482
- */
483
- public static function _duration2date( $startdate=null, $duration=null ) {
484
- if( empty( $startdate )) return FALSE;
485
- if( empty( $duration )) return FALSE;
486
- $dateOnly = ( isset( $startdate['hour'] ) || isset( $startdate['min'] ) || isset( $startdate['sec'] )) ? FALSE : TRUE;
487
- $startdate['hour'] = ( isset( $startdate['hour'] )) ? $startdate['hour'] : 0;
488
- $startdate['min'] = ( isset( $startdate['min'] )) ? $startdate['min'] : 0;
489
- $startdate['sec'] = ( isset( $startdate['sec'] )) ? $startdate['sec'] : 0;
490
- $dtend = 0;
491
- if( isset( $duration['week'] ))
492
- $dtend += ( $duration['week'] * 7 * 24 * 60 * 60 );
493
- if( isset( $duration['day'] ))
494
- $dtend += ( $duration['day'] * 24 * 60 * 60 );
495
- if( isset( $duration['hour'] ))
496
- $dtend += ( $duration['hour'] * 60 *60 );
497
- if( isset( $duration['min'] ))
498
- $dtend += ( $duration['min'] * 60 );
499
- if( isset( $duration['sec'] ))
500
- $dtend += $duration['sec'];
501
- $dtend = mktime( $startdate['hour'], $startdate['min'], ( $startdate['sec'] + $dtend ), $startdate['month'], $startdate['day'], $startdate['year'] );
502
- $dtend2 = array();
503
- $dtend2['year'] = date('Y', $dtend );
504
- $dtend2['month'] = date('m', $dtend );
505
- $dtend2['day'] = date('d', $dtend );
506
- $dtend2['hour'] = date('H', $dtend );
507
- $dtend2['min'] = date('i', $dtend );
508
- $dtend2['sec'] = date('s', $dtend );
509
- if( isset( $startdate['tz'] ))
510
- $dtend2['tz'] = $startdate['tz'];
511
- if( $dateOnly && (( 0 == $dtend2['hour'] ) && ( 0 == $dtend2['min'] ) && ( 0 == $dtend2['sec'] )))
512
- unset( $dtend2['hour'], $dtend2['min'], $dtend2['sec'] );
513
- return $dtend2;
514
- }
515
- /**
516
- * if not preSet, if exist, remove key with expected value from array and return hit value else return elseValue
517
- *
518
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
519
- * @since 2.4.16 - 2008-11-08
520
- * @param array $array
521
- * @param string $expkey, expected key
522
- * @param string $expval, expected value
523
- * @param int $hitVal optional, return value if found
524
- * @param int $elseVal optional, return value if not found
525
- * @param int $preSet optional, return value if already preset
526
- * @return int
527
- */
528
- public static function _existRem( &$array, $expkey, $expval=FALSE, $hitVal=null, $elseVal=null, $preSet=null ) {
529
- if( $preSet )
530
- return $preSet;
531
- if( !is_array( $array ) || ( 0 == count( $array )))
532
- return $elseVal;
533
- foreach( $array as $key => $value ) {
534
- if( strtoupper( $expkey ) == strtoupper( $key )) {
535
- if( !$expval || ( strtoupper( $expval ) == strtoupper( $array[$key] ))) {
536
- unset( $array[$key] );
537
- return $hitVal;
538
- }
539
- }
540
- }
541
- return $elseVal;
542
- }
543
- /**
544
- * creates formatted output for calendar component property data value type date/date-time
545
- *
546
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
547
- * @since 2.4.8 - 2008-10-30
548
- * @param array $datetime
549
- * @param int $parno, optional, default 6
550
- * @return string
551
- */
552
- public static function _format_date_time( $datetime, $parno=6 ) {
553
- if( !isset( $datetime['year'] ) &&
554
- !isset( $datetime['month'] ) &&
555
- !isset( $datetime['day'] ) &&
556
- !isset( $datetime['hour'] ) &&
557
- !isset( $datetime['min'] ) &&
558
- !isset( $datetime['sec'] ))
559
- return ;
560
- $output = null;
561
- // if( !isset( $datetime['day'] )) { $o=''; foreach($datetime as $k=>$v) {if(is_array($v)) $v=implode('-',$v);$o.=" $k=>$v";} echo " day SAKNAS : $o <br />\n"; }
562
- foreach( $datetime as $dkey => & $dvalue )
563
- if( 'tz' != $dkey ) $dvalue = (integer) $dvalue;
564
- $output = date('Ymd', mktime( 0, 0, 0, $datetime['month'], $datetime['day'], $datetime['year']));
565
- if( isset( $datetime['hour'] ) ||
566
- isset( $datetime['min'] ) ||
567
- isset( $datetime['sec'] ) ||
568
- isset( $datetime['tz'] )) {
569
- if( isset( $datetime['tz'] ) &&
570
- !isset( $datetime['hour'] ))
571
- $datetime['hour'] = 0;
572
- if( isset( $datetime['hour'] ) &&
573
- !isset( $datetime['min'] ))
574
- $datetime['min'] = 0;
575
- if( isset( $datetime['hour'] ) &&
576
- isset( $datetime['min'] ) &&
577
- !isset( $datetime['sec'] ))
578
- $datetime['sec'] = 0;
579
- $date = mktime( $datetime['hour'], $datetime['min'], $datetime['sec'], $datetime['month'], $datetime['day'], $datetime['year']);
580
- $output .= date('\THis', $date );
581
- if( isset( $datetime['tz'] ) && ( '' < trim ( $datetime['tz'] ))) {
582
- $datetime['tz'] = trim( $datetime['tz'] );
583
- if( 'Z' == $datetime['tz'] )
584
- $output .= 'Z';
585
- $offset = iCalUtilityFunctions::_tz2offset( $datetime['tz'] );
586
- if( 0 != $offset ) {
587
- $date = mktime( $datetime['hour'], $datetime['min'], ($datetime['sec'] + $offset), $datetime['month'], $datetime['day'], $datetime['year']);
588
- $output = date( 'Ymd\THis\Z', $date );
589
- }
590
- }
591
- elseif( 7 == $parno )
592
- $output .= 'Z';
593
- }
594
- return $output;
595
- }
596
- /**
597
- * creates formatted output for calendar component property data value type duration
598
- *
599
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
600
- * @since 2.9.9 - 2011-06-17
601
- * @param array $duration ( week, day, hour, min, sec )
602
- * @return string
603
- */
604
- public static function _format_duration( $duration ) {
605
- if( isset( $duration['week'] ) ||
606
- isset( $duration['day'] ) ||
607
- isset( $duration['hour'] ) ||
608
- isset( $duration['min'] ) ||
609
- isset( $duration['sec'] ))
610
- $ok = TRUE;
611
- else
612
- return;
613
- if( isset( $duration['week'] ) && ( 0 < $duration['week'] ))
614
- return 'P'.$duration['week'].'W';
615
- $output = 'P';
616
- if( isset($duration['day'] ) && ( 0 < $duration['day'] ))
617
- $output .= $duration['day'].'D';
618
- if(( isset( $duration['hour']) && ( 0 < $duration['hour'] )) ||
619
- ( isset( $duration['min']) && ( 0 < $duration['min'] )) ||
620
- ( isset( $duration['sec']) && ( 0 < $duration['sec'] )))
621
- $output .= 'T';
622
- $output .= ( isset( $duration['hour']) && ( 0 < $duration['hour'] )) ? $duration['hour'].'H' : '';
623
- $output .= ( isset( $duration['min']) && ( 0 < $duration['min'] )) ? $duration['min']. 'M' : '';
624
- $output .= ( isset( $duration['sec']) && ( 0 < $duration['sec'] )) ? $duration['sec']. 'S' : '';
625
- if( 'P' == $output )
626
- $output = 'PT0S';
627
- return $output;
628
- }
629
- /**
630
- * checks if input array contains a date
631
- *
632
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
633
- * @since 2.4.16 - 2008-10-25
634
- * @param array $input
635
- * @return bool
636
- */
637
- public static function _isArrayDate( $input ) {
638
- if( isset( $input['week'] ) || ( !in_array( count( $input ), array( 3, 6, 7 ))))
639
- return FALSE;
640
- if( 7 == count( $input ))
641
- return TRUE;
642
- if( isset( $input['year'] ) && isset( $input['month'] ) && isset( $input['day'] ))
643
- return checkdate( (int) $input['month'], (int) $input['day'], (int) $input['year'] );
644
- if( isset( $input['day'] ) || isset( $input['hour'] ) || isset( $input['min'] ) || isset( $input['sec'] ))
645
- return FALSE;
646
- if( in_array( 0, $input ))
647
- return FALSE;
648
- if(( 1970 > $input[0] ) || ( 12 < $input[1] ) || ( 31 < $input[2] ))
649
- return FALSE;
650
- if(( isset( $input[0] ) && isset( $input[1] ) && isset( $input[2] )) &&
651
- checkdate( (int) $input[1], (int) $input[2], (int) $input[0] ))
652
- return TRUE;
653
- $input = iCalUtilityFunctions::_date_time_string( $input[1].'/'.$input[2].'/'.$input[0], 3 ); // m - d - Y
654
- if( isset( $input['year'] ) && isset( $input['month'] ) && isset( $input['day'] ))
655
- return checkdate( (int) $input['month'], (int) $input['day'], (int) $input['year'] );
656
- return FALSE;
657
- }
658
- /**
659
- * checks if input array contains a timestamp date
660
- *
661
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
662
- * @since 2.4.16 - 2008-10-18
663
- * @param array $input
664
- * @return bool
665
- */
666
- public static function _isArrayTimestampDate( $input ) {
667
- return ( is_array( $input ) && isset( $input['timestamp'] )) ? TRUE : FALSE ;
668
- }
669
- /**
670
- * controll if input string contains trailing UTC offset
671
- *
672
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
673
- * @since 2.4.16 - 2008-10-19
674
- * @param string $input
675
- * @return bool
676
- */
677
- public static function _isOffset( $input ) {
678
- $input = trim( (string) $input );
679
- if( 'Z' == substr( $input, -1 ))
680
- return TRUE;
681
- elseif(( 5 <= strlen( $input )) &&
682
- ( in_array( substr( $input, -5, 1 ), array( '+', '-' ))) &&
683
- ( '0000' < substr( $input, -4 )) && ( '9999' >= substr( $input, -4 )))
684
- return TRUE;
685
- elseif(( 7 <= strlen( $input )) &&
686
- ( in_array( substr( $input, -7, 1 ), array( '+', '-' ))) &&
687
- ( '000000' < substr( $input, -6 )) && ( '999999' >= substr( $input, -6 )))
688
- return TRUE;
689
- return FALSE;
690
-
691
- }
692
- /**
693
- * transform offset in seconds to [-/+]hhmm[ss]
694
- *
695
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
696
- * @since 2011-05-02
697
- * @param string $seconds
698
- * @return string
699
- */
700
- public static function offsetSec2His( $seconds ) {
701
- if( '-' == substr( $seconds, 0, 1 )) {
702
- $prefix = '-';
703
- $seconds = substr( $seconds, 1 );
704
- }
705
- elseif( '+' == substr( $seconds, 0, 1 )) {
706
- $prefix = '+';
707
- $seconds = substr( $seconds, 1 );
708
- }
709
- else
710
- $prefix = '+';
711
- $output = '';
712
- $hour = (int) floor( $seconds / 3600 );
713
- if( 10 > $hour )
714
- $hour = '0'.$hour;
715
- $seconds = $seconds % 3600;
716
- $min = (int) floor( $seconds / 60 );
717
- if( 10 > $min )
718
- $min = '0'.$min;
719
- $output = $hour.$min;
720
- $seconds = $seconds % 60;
721
- if( 0 < $seconds) {
722
- if( 9 < $seconds)
723
- $output .= $seconds;
724
- else
725
- $output .= '0'.$seconds;
726
- }
727
- return $prefix.$output;
728
- }
729
- /**
730
- * remakes a recur pattern to an array of dates
731
- *
732
- * if missing, UNTIL is set 1 year from startdate (emergency break)
733
- *
734
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
735
- * @since 2.10.19 - 2011-10-31
736
- * @param array $result, array to update, array([timestamp] => timestamp)
737
- * @param array $recur, pattern for recurrency (only value part, params ignored)
738
- * @param array $wdate, component start date
739
- * @param array $startdate, start date
740
- * @param array $enddate, optional
741
- * @return array of recurrence (start-)dates as index
742
- * @todo BYHOUR, BYMINUTE, BYSECOND, WEEKLY at year end/start
743
- */
744
- public static function _recur2date( & $result, $recur, $wdate, $startdate, $enddate=FALSE ) {
745
- foreach( $wdate as $k => $v ) if( ctype_digit( $v )) $wdate[$k] = (int) $v;
746
- $wdateStart = $wdate;
747
- $wdatets = iCalUtilityFunctions::_date2timestamp( $wdate );
748
- $startdatets = iCalUtilityFunctions::_date2timestamp( $startdate );
749
- if( !$enddate ) {
750
- $enddate = $startdate;
751
- $enddate['year'] += 1;
752
- }
753
- // echo "recur __in_ comp start ".implode('-',$wdate)." period start ".implode('-',$startdate)." period end ".implode('-',$enddate)."<br />\n";print_r($recur);echo "<br />\n";//test###
754
- $endDatets = iCalUtilityFunctions::_date2timestamp( $enddate ); // fix break
755
- if( !isset( $recur['COUNT'] ) && !isset( $recur['UNTIL'] ))
756
- $recur['UNTIL'] = $enddate; // create break
757
- if( isset( $recur['UNTIL'] )) {
758
- $tdatets = iCalUtilityFunctions::_date2timestamp( $recur['UNTIL'] );
759
- if( $endDatets > $tdatets ) {
760
- $endDatets = $tdatets; // emergency break
761
- $enddate = iCalUtilityFunctions::_timestamp2date( $endDatets, 6 );
762
- }
763
- else
764
- $recur['UNTIL'] = iCalUtilityFunctions::_timestamp2date( $endDatets, 6 );
765
- }
766
- if( $wdatets > $endDatets ) {
767
- // echo "recur out of date ".date('Y-m-d H:i:s',$wdatets)."<br />\n";//test
768
- return array(); // nothing to do.. .
769
- }
770
- if( !isset( $recur['FREQ'] )) // "MUST be specified.. ."
771
- $recur['FREQ'] = 'DAILY'; // ??
772
- $wkst = ( isset( $recur['WKST'] ) && ( 'SU' == $recur['WKST'] )) ? 24*60*60 : 0; // ??
773
- $weekStart = (int) date( 'W', ( $wdatets + $wkst ));
774
- if( !isset( $recur['INTERVAL'] ))
775
- $recur['INTERVAL'] = 1;
776
- $countcnt = ( !isset( $recur['BYSETPOS'] )) ? 1 : 0; // DTSTART counts as the first occurrence
777
- /* find out how to step up dates and set index for interval count */
778
- $step = array();
779
- if( 'YEARLY' == $recur['FREQ'] )
780
- $step['year'] = 1;
781
- elseif( 'MONTHLY' == $recur['FREQ'] )
782
- $step['month'] = 1;
783
- elseif( 'WEEKLY' == $recur['FREQ'] )
784
- $step['day'] = 7;
785
- else
786
- $step['day'] = 1;
787
- if( isset( $step['year'] ) && isset( $recur['BYMONTH'] ))
788
- $step = array( 'month' => 1 );
789
- if( empty( $step ) && isset( $recur['BYWEEKNO'] )) // ??
790
- $step = array( 'day' => 7 );
791
- if( isset( $recur['BYYEARDAY'] ) || isset( $recur['BYMONTHDAY'] ) || isset( $recur['BYDAY'] ))
792
- $step = array( 'day' => 1 );
793
- $intervalarr = array();
794
- if( 1 < $recur['INTERVAL'] ) {
795
- $intervalix = iCalUtilityFunctions::_recurIntervalIx( $recur['FREQ'], $wdate, $wkst );
796
- $intervalarr = array( $intervalix => 0 );
797
- }
798
- if( isset( $recur['BYSETPOS'] )) { // save start date + weekno
799
- $bysetposymd1 = $bysetposymd2 = $bysetposw1 = $bysetposw2 = array();
800
- // echo "bysetposXold_start=$bysetposYold $bysetposMold $bysetposDold<br />\n"; // test ###
801
- if( is_array( $recur['BYSETPOS'] )) {
802
- foreach( $recur['BYSETPOS'] as $bix => $bval )
803
- $recur['BYSETPOS'][$bix] = (int) $bval;
804
- }
805
- else
806
- $recur['BYSETPOS'] = array( (int) $recur['BYSETPOS'] );
807
- if( 'YEARLY' == $recur['FREQ'] ) {
808
- $wdate['month'] = $wdate['day'] = 1; // start from beginning of year
809
- $wdatets = iCalUtilityFunctions::_date2timestamp( $wdate );
810
- iCalUtilityFunctions::_stepdate( $enddate, $endDatets, array( 'year' => 1 )); // make sure to count whole last year
811
- }
812
- elseif( 'MONTHLY' == $recur['FREQ'] ) {
813
- $wdate['day'] = 1; // start from beginning of month
814
- $wdatets = iCalUtilityFunctions::_date2timestamp( $wdate );
815
- iCalUtilityFunctions::_stepdate( $enddate, $endDatets, array( 'month' => 1 )); // make sure to count whole last month
816
- }
817
- else
818
- iCalUtilityFunctions::_stepdate( $enddate, $endDatets, $step); // make sure to count whole last period
819
- // echo "BYSETPOS endDat++ =".implode('-',$enddate).' step='.var_export($step,TRUE)."<br />\n";//test###
820
- $bysetposWold = (int) date( 'W', ( $wdatets + $wkst ));
821
- $bysetposYold = $wdate['year'];
822
- $bysetposMold = $wdate['month'];
823
- $bysetposDold = $wdate['day'];
824
- }
825
- else
826
- iCalUtilityFunctions::_stepdate( $wdate, $wdatets, $step);
827
- $year_old = null;
828
- $daynames = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA' );
829
- /* MAIN LOOP */
830
- // echo "recur start ".implode('-',$wdate)." end ".implode('-',$enddate)."<br />\n";//test
831
- while( TRUE ) {
832
- if( isset( $endDatets ) && ( $wdatets > $endDatets ))
833
- break;
834
- if( isset( $recur['COUNT'] ) && ( $countcnt >= $recur['COUNT'] ))
835
- break;
836
- if( $year_old != $wdate['year'] ) {
837
- $year_old = $wdate['year'];
838
- $daycnts = array();
839
- $yeardays = $weekno = 0;
840
- $yeardaycnt = array();
841
- foreach( $daynames as $dn )
842
- $yeardaycnt[$dn] = 0;
843
- for( $m = 1; $m <= 12; $m++ ) { // count up and update up-counters
844
- $daycnts[$m] = array();
845
- $weekdaycnt = array();
846
- foreach( $daynames as $dn )
847
- $weekdaycnt[$dn] = 0;
848
- $mcnt = date( 't', mktime( 0, 0, 0, $m, 1, $wdate['year'] ));
849
- for( $d = 1; $d <= $mcnt; $d++ ) {
850
- $daycnts[$m][$d] = array();
851
- if( isset( $recur['BYYEARDAY'] )) {
852
- $yeardays++;
853
- $daycnts[$m][$d]['yearcnt_up'] = $yeardays;
854
- }
855
- if( isset( $recur['BYDAY'] )) {
856
- $day = date( 'w', mktime( 0, 0, 0, $m, $d, $wdate['year'] ));
857
- $day = $daynames[$day];
858
- $daycnts[$m][$d]['DAY'] = $day;
859
- $weekdaycnt[$day]++;
860
- $daycnts[$m][$d]['monthdayno_up'] = $weekdaycnt[$day];
861
- $yeardaycnt[$day]++;
862
- $daycnts[$m][$d]['yeardayno_up'] = $yeardaycnt[$day];
863
- }
864
- if( isset( $recur['BYWEEKNO'] ) || ( $recur['FREQ'] == 'WEEKLY' ))
865
- $daycnts[$m][$d]['weekno_up'] =(int)date('W',mktime(0,0,$wkst,$m,$d,$wdate['year']));
866
- }
867
- }
868
- $daycnt = 0;
869
- $yeardaycnt = array();
870
- if( isset( $recur['BYWEEKNO'] ) || ( $recur['FREQ'] == 'WEEKLY' )) {
871
- $weekno = null;
872
- for( $d=31; $d > 25; $d-- ) { // get last weekno for year
873
- if( !$weekno )
874
- $weekno = $daycnts[12][$d]['weekno_up'];
875
- elseif( $weekno < $daycnts[12][$d]['weekno_up'] ) {
876
- $weekno = $daycnts[12][$d]['weekno_up'];
877
- break;
878
- }
879
- }
880
- }
881
- for( $m = 12; $m > 0; $m-- ) { // count down and update down-counters
882
- $weekdaycnt = array();
883
- foreach( $daynames as $dn )
884
- $yeardaycnt[$dn] = $weekdaycnt[$dn] = 0;
885
- $monthcnt = 0;
886
- $mcnt = date( 't', mktime( 0, 0, 0, $m, 1, $wdate['year'] ));
887
- for( $d = $mcnt; $d > 0; $d-- ) {
888
- if( isset( $recur['BYYEARDAY'] )) {
889
- $daycnt -= 1;
890
- $daycnts[$m][$d]['yearcnt_down'] = $daycnt;
891
- }
892
- if( isset( $recur['BYMONTHDAY'] )) {
893
- $monthcnt -= 1;
894
- $daycnts[$m][$d]['monthcnt_down'] = $monthcnt;
895
- }
896
- if( isset( $recur['BYDAY'] )) {
897
- $day = $daycnts[$m][$d]['DAY'];
898
- $weekdaycnt[$day] -= 1;
899
- $daycnts[$m][$d]['monthdayno_down'] = $weekdaycnt[$day];
900
- $yeardaycnt[$day] -= 1;
901
- $daycnts[$m][$d]['yeardayno_down'] = $yeardaycnt[$day];
902
- }
903
- if( isset( $recur['BYWEEKNO'] ) || ( $recur['FREQ'] == 'WEEKLY' ))
904
- $daycnts[$m][$d]['weekno_down'] = ($daycnts[$m][$d]['weekno_up'] - $weekno - 1);
905
- }
906
- }
907
- }
908
- /* check interval */
909
- if( 1 < $recur['INTERVAL'] ) {
910
- /* create interval index */
911
- $intervalix = iCalUtilityFunctions::_recurIntervalIx( $recur['FREQ'], $wdate, $wkst );
912
- /* check interval */
913
- $currentKey = array_keys( $intervalarr );
914
- $currentKey = end( $currentKey ); // get last index
915
- if( $currentKey != $intervalix )
916
- $intervalarr = array( $intervalix => ( $intervalarr[$currentKey] + 1 ));
917
- if(( $recur['INTERVAL'] != $intervalarr[$intervalix] ) &&
918
- ( 0 != $intervalarr[$intervalix] )) {
919
- /* step up date */
920
- // echo "skip: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br />\n";//test
921
- iCalUtilityFunctions::_stepdate( $wdate, $wdatets, $step);
922
- continue;
923
- }
924
- else // continue within the selected interval
925
- $intervalarr[$intervalix] = 0;
926
- // echo "cont: ".implode('-',$wdate)." ix=$intervalix old=$currentKey interval=".$intervalarr[$intervalix]."<br />\n";//test
927
- }
928
- $updateOK = TRUE;
929
- if( $updateOK && isset( $recur['BYMONTH'] ))
930
- $updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYMONTH']
931
- , $wdate['month']
932
- ,($wdate['month'] - 13));
933
- if( $updateOK && isset( $recur['BYWEEKNO'] ))
934
- $updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYWEEKNO']
935
- , $daycnts[$wdate['month']][$wdate['day']]['weekno_up']
936
- , $daycnts[$wdate['month']][$wdate['day']]['weekno_down'] );
937
- if( $updateOK && isset( $recur['BYYEARDAY'] ))
938
- $updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYYEARDAY']
939
- , $daycnts[$wdate['month']][$wdate['day']]['yearcnt_up']
940
- , $daycnts[$wdate['month']][$wdate['day']]['yearcnt_down'] );
941
- if( $updateOK && isset( $recur['BYMONTHDAY'] ))
942
- $updateOK = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYMONTHDAY']
943
- , $wdate['day']
944
- , $daycnts[$wdate['month']][$wdate['day']]['monthcnt_down'] );
945
- // echo "efter BYMONTHDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br />\n";//test###
946
- if( $updateOK && isset( $recur['BYDAY'] )) {
947
- $updateOK = FALSE;
948
- $m = $wdate['month'];
949
- $d = $wdate['day'];
950
- if( isset( $recur['BYDAY']['DAY'] )) { // single day, opt with year/month day order no
951
- $daynoexists = $daynosw = $daynamesw = FALSE;
952
- if( $recur['BYDAY']['DAY'] == $daycnts[$m][$d]['DAY'] )
953
- $daynamesw = TRUE;
954
- if( isset( $recur['BYDAY'][0] )) {
955
- $daynoexists = TRUE;
956
- if(( isset( $recur['FREQ'] ) && ( $recur['FREQ'] == 'MONTHLY' )) || isset( $recur['BYMONTH'] ))
957
- $daynosw = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYDAY'][0]
958
- , $daycnts[$m][$d]['monthdayno_up']
959
- , $daycnts[$m][$d]['monthdayno_down'] );
960
- elseif( isset( $recur['FREQ'] ) && ( $recur['FREQ'] == 'YEARLY' ))
961
- $daynosw = iCalUtilityFunctions::_recurBYcntcheck( $recur['BYDAY'][0]
962
- , $daycnts[$m][$d]['yeardayno_up']
963
- , $daycnts[$m][$d]['yeardayno_down'] );
964
- }
965
- if(( $daynoexists && $daynosw && $daynamesw ) ||
966
- ( !$daynoexists && !$daynosw && $daynamesw )) {
967
- $updateOK = TRUE;
968
- // echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br />\n"; // test ###
969
- }
970
- //echo "m=$m d=$d day=".$daycnts[$m][$d]['DAY']." yeardayno_up=".$daycnts[$m][$d]['yeardayno_up']." daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw updateOK:$updateOK<br />\n"; // test ###
971
- }
972
- else {
973
- foreach( $recur['BYDAY'] as $bydayvalue ) {
974
- $daynoexists = $daynosw = $daynamesw = FALSE;
975
- if( isset( $bydayvalue['DAY'] ) &&
976
- ( $bydayvalue['DAY'] == $daycnts[$m][$d]['DAY'] ))
977
- $daynamesw = TRUE;
978
- if( isset( $bydayvalue[0] )) {
979
- $daynoexists = TRUE;
980
- if(( isset( $recur['FREQ'] ) && ( $recur['FREQ'] == 'MONTHLY' )) ||
981
- isset( $recur['BYMONTH'] ))
982
- $daynosw = iCalUtilityFunctions::_recurBYcntcheck( $bydayvalue['0']
983
- , $daycnts[$m][$d]['monthdayno_up']
984
- , $daycnts[$m][$d]['monthdayno_down'] );
985
- elseif( isset( $recur['FREQ'] ) && ( $recur['FREQ'] == 'YEARLY' ))
986
- $daynosw = iCalUtilityFunctions::_recurBYcntcheck( $bydayvalue['0']
987
- , $daycnts[$m][$d]['yeardayno_up']
988
- , $daycnts[$m][$d]['yeardayno_down'] );
989
- }
990
- // echo "daynoexists:$daynoexists daynosw:$daynosw daynamesw:$daynamesw<br />\n"; // test ###
991
- if(( $daynoexists && $daynosw && $daynamesw ) ||
992
- ( !$daynoexists && !$daynosw && $daynamesw )) {
993
- $updateOK = TRUE;
994
- break;
995
- }
996
- }
997
- }
998
- }
999
- // echo "efter BYDAY: ".implode('-',$wdate).' status: '; echo ($updateOK) ? 'TRUE' : 'FALSE'; echo "<br />\n"; // test ###
1000
- /* check BYSETPOS */
1001
- if( $updateOK ) {
1002
- if( isset( $recur['BYSETPOS'] ) &&
1003
- ( in_array( $recur['FREQ'], array( 'YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY' )))) {
1004
- if( isset( $recur['WEEKLY'] )) {
1005
- if( $bysetposWold == $daycnts[$wdate['month']][$wdate['day']]['weekno_up'] )
1006
- $bysetposw1[] = $wdatets;
1007
- else
1008
- $bysetposw2[] = $wdatets;
1009
- }
1010
- else {
1011
- if(( isset( $recur['FREQ'] ) && ( 'YEARLY' == $recur['FREQ'] ) &&
1012
- ( $bysetposYold == $wdate['year'] )) ||
1013
- ( isset( $recur['FREQ'] ) && ( 'MONTHLY' == $recur['FREQ'] ) &&
1014
- (( $bysetposYold == $wdate['year'] ) &&
1015
- ( $bysetposMold == $wdate['month'] ))) ||
1016
- ( isset( $recur['FREQ'] ) && ( 'DAILY' == $recur['FREQ'] ) &&
1017
- (( $bysetposYold == $wdate['year'] ) &&
1018
- ( $bysetposMold == $wdate['month']) &&
1019
- ( $bysetposDold == $wdate['day'] )))) {
1020
- // echo "bysetposymd1[]=".date('Y-m-d H:i:s',$wdatets)."<br />\n";//test
1021
- $bysetposymd1[] = $wdatets;
1022
- }
1023
- else {
1024
- // echo "bysetposymd2[]=".date('Y-m-d H:i:s',$wdatets)."<br />\n";//test
1025
- $bysetposymd2[] = $wdatets;
1026
- }
1027
- }
1028
- }
1029
- else {
1030
- /* update result array if BYSETPOS is set */
1031
- $countcnt++;
1032
- if( $startdatets <= $wdatets ) { // only output within period
1033
- $result[$wdatets] = TRUE;
1034
- // echo "recur ".date('Y-m-d H:i:s',$wdatets)."<br />\n";//test
1035
- }
1036
- // echo "recur undate ".date('Y-m-d H:i:s',$wdatets)." okdatstart ".date('Y-m-d H:i:s',$startdatets)."<br />\n";//test
1037
- $updateOK = FALSE;
1038
- }
1039
- }
1040
- /* step up date */
1041
- iCalUtilityFunctions::_stepdate( $wdate, $wdatets, $step);
1042
- /* check if BYSETPOS is set for updating result array */
1043
- if( $updateOK && isset( $recur['BYSETPOS'] )) {
1044
- $bysetpos = FALSE;
1045
- if( isset( $recur['FREQ'] ) && ( 'YEARLY' == $recur['FREQ'] ) &&
1046
- ( $bysetposYold != $wdate['year'] )) {
1047
- $bysetpos = TRUE;
1048
- $bysetposYold = $wdate['year'];
1049
- }
1050
- elseif( isset( $recur['FREQ'] ) && ( 'MONTHLY' == $recur['FREQ'] &&
1051
- (( $bysetposYold != $wdate['year'] ) || ( $bysetposMold != $wdate['month'] )))) {
1052
- $bysetpos = TRUE;
1053
- $bysetposYold = $wdate['year'];
1054
- $bysetposMold = $wdate['month'];
1055
- }
1056
- elseif( isset( $recur['FREQ'] ) && ( 'WEEKLY' == $recur['FREQ'] )) {
1057
- $weekno = (int) date( 'W', mktime( 0, 0, $wkst, $wdate['month'], $wdate['day'], $wdate['year']));
1058
- if( $bysetposWold != $weekno ) {
1059
- $bysetposWold = $weekno;
1060
- $bysetpos = TRUE;
1061
- }
1062
- }
1063
- elseif( isset( $recur['FREQ'] ) && ( 'DAILY' == $recur['FREQ'] ) &&
1064
- (( $bysetposYold != $wdate['year'] ) ||
1065
- ( $bysetposMold != $wdate['month'] ) ||
1066
- ( $bysetposDold != $wdate['day'] ))) {
1067
- $bysetpos = TRUE;
1068
- $bysetposYold = $wdate['year'];
1069
- $bysetposMold = $wdate['month'];
1070
- $bysetposDold = $wdate['day'];
1071
- }
1072
- if( $bysetpos ) {
1073
- if( isset( $recur['BYWEEKNO'] )) {
1074
- $bysetposarr1 = & $bysetposw1;
1075
- $bysetposarr2 = & $bysetposw2;
1076
- }
1077
- else {
1078
- $bysetposarr1 = & $bysetposymd1;
1079
- $bysetposarr2 = & $bysetposymd2;
1080
- }
1081
- // echo 'test före out startYMD (weekno)='.$wdateStart['year'].':'.$wdateStart['month'].':'.$wdateStart['day']." ($weekStart) "; // test ###
1082
- foreach( $recur['BYSETPOS'] as $ix ) {
1083
- if( 0 > $ix ) // both positive and negative BYSETPOS allowed
1084
- $ix = ( count( $bysetposarr1 ) + $ix + 1);
1085
- $ix--;
1086
- if( isset( $bysetposarr1[$ix] )) {
1087
- if( $startdatets <= $bysetposarr1[$ix] ) { // only output within period
1088
- // $testdate = iCalUtilityFunctions::_timestamp2date( $bysetposarr1[$ix], 6 ); // test ###
1089
- // $testweekno = (int) date( 'W', mktime( 0, 0, $wkst, $testdate['month'], $testdate['day'], $testdate['year'] )); // test ###
1090
- // echo " testYMD (weekno)=".$testdate['year'].':'.$testdate['month'].':'.$testdate['day']." ($testweekno)"; // test ###
1091
- $result[$bysetposarr1[$ix]] = TRUE;
1092
- // echo " recur ".date('Y-m-d H:i:s',$bysetposarr1[$ix]); // test ###
1093
- }
1094
- $countcnt++;
1095
- }
1096
- if( isset( $recur['COUNT'] ) && ( $countcnt >= $recur['COUNT'] ))
1097
- break;
1098
- }
1099
- // echo "<br />\n"; // test ###
1100
- $bysetposarr1 = $bysetposarr2;
1101
- $bysetposarr2 = array();
1102
- }
1103
- }
1104
- }
1105
- }
1106
- public static function _recurBYcntcheck( $BYvalue, $upValue, $downValue ) {
1107
- if( is_array( $BYvalue ) &&
1108
- ( in_array( $upValue, $BYvalue ) || in_array( $downValue, $BYvalue )))
1109
- return TRUE;
1110
- elseif(( $BYvalue == $upValue ) || ( $BYvalue == $downValue ))
1111
- return TRUE;
1112
- else
1113
- return FALSE;
1114
- }
1115
- public static function _recurIntervalIx( $freq, $date, $wkst ) {
1116
- /* create interval index */
1117
- switch( $freq ) {
1118
- case 'YEARLY':
1119
- $intervalix = $date['year'];
1120
- break;
1121
- case 'MONTHLY':
1122
- $intervalix = $date['year'].'-'.$date['month'];
1123
- break;
1124
- case 'WEEKLY':
1125
- $wdatets = iCalUtilityFunctions::_date2timestamp( $date );
1126
- $intervalix = (int) date( 'W', ( $wdatets + $wkst ));
1127
- break;
1128
- case 'DAILY':
1129
- default:
1130
- $intervalix = $date['year'].'-'.$date['month'].'-'.$date['day'];
1131
- break;
1132
- }
1133
- return $intervalix;
1134
- }
1135
- /**
1136
- * convert input format for exrule and rrule to internal format
1137
- *
1138
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1139
- * @since 2.9.10 - 2011-07-07
1140
- * @param array $rexrule
1141
- * @return array
1142
- */
1143
- public static function _setRexrule( $rexrule ) {
1144
- $input = array();
1145
- if( empty( $rexrule ))
1146
- return $input;
1147
- foreach( $rexrule as $rexrulelabel => $rexrulevalue ) {
1148
- $rexrulelabel = strtoupper( $rexrulelabel );
1149
- if( 'UNTIL' != $rexrulelabel )
1150
- $input[$rexrulelabel] = $rexrulevalue;
1151
- else {
1152
- if( iCalUtilityFunctions::_isArrayTimestampDate( $rexrulevalue )) // timestamp date
1153
- $input[$rexrulelabel] = iCalUtilityFunctions::_timestamp2date( $rexrulevalue, 6 );
1154
- elseif( iCalUtilityFunctions::_isArrayDate( $rexrulevalue )) // date-time
1155
- $input[$rexrulelabel] = iCalUtilityFunctions::_date_time_array( $rexrulevalue, 6 );
1156
- elseif( 8 <= strlen( trim( $rexrulevalue ))) // ex. 2006-08-03 10:12:18
1157
- $input[$rexrulelabel] = iCalUtilityFunctions::_date_time_string( $rexrulevalue );
1158
- if(( 3 < count( $input[$rexrulelabel] )) && !isset( $input[$rexrulelabel]['tz'] ))
1159
- $input[$rexrulelabel]['tz'] = 'Z';
1160
- }
1161
- }
1162
- /* set recurrence rule specification in rfc2445 order */
1163
- $input2 = array();
1164
- if( isset( $input['FREQ'] ))
1165
- $input2['FREQ'] = $input['FREQ'];
1166
- if( isset( $input['UNTIL'] ))
1167
- $input2['UNTIL'] = $input['UNTIL'];
1168
- elseif( isset( $input['COUNT'] ))
1169
- $input2['COUNT'] = $input['COUNT'];
1170
- if( isset( $input['INTERVAL'] ))
1171
- $input2['INTERVAL'] = $input['INTERVAL'];
1172
- if( isset( $input['BYSECOND'] ))
1173
- $input2['BYSECOND'] = $input['BYSECOND'];
1174
- if( isset( $input['BYMINUTE'] ))
1175
- $input2['BYMINUTE'] = $input['BYMINUTE'];
1176
- if( isset( $input['BYHOUR'] ))
1177
- $input2['BYHOUR'] = $input['BYHOUR'];
1178
- if( isset( $input['BYDAY'] )) {
1179
- if( !is_array( $input['BYDAY'] )) // ensure upper case.. .
1180
- $input2['BYDAY'] = strtoupper( $input['BYDAY'] );
1181
- else {
1182
- foreach( $input['BYDAY'] as $BYDAYx => $BYDAYv ) {
1183
- if( 'DAY' == strtoupper( $BYDAYx ))
1184
- $input2['BYDAY']['DAY'] = strtoupper( $BYDAYv );
1185
- elseif( !is_array( $BYDAYv )) {
1186
- $input2['BYDAY'][$BYDAYx] = $BYDAYv;
1187
- }
1188
- else {
1189
- foreach( $BYDAYv as $BYDAYx2 => $BYDAYv2 ) {
1190
- if( 'DAY' == strtoupper( $BYDAYx2 ))
1191
- $input2['BYDAY'][$BYDAYx]['DAY'] = strtoupper( $BYDAYv2 );
1192
- else
1193
- $input2['BYDAY'][$BYDAYx][$BYDAYx2] = $BYDAYv2;
1194
- }
1195
- }
1196
- }
1197
- }
1198
- }
1199
- if( isset( $input['BYMONTHDAY'] ))
1200
- $input2['BYMONTHDAY'] = $input['BYMONTHDAY'];
1201
- if( isset( $input['BYYEARDAY'] ))
1202
- $input2['BYYEARDAY'] = $input['BYYEARDAY'];
1203
- if( isset( $input['BYWEEKNO'] ))
1204
- $input2['BYWEEKNO'] = $input['BYWEEKNO'];
1205
- if( isset( $input['BYMONTH'] ))
1206
- $input2['BYMONTH'] = $input['BYMONTH'];
1207
- if( isset( $input['BYSETPOS'] ))
1208
- $input2['BYSETPOS'] = $input['BYSETPOS'];
1209
- if( isset( $input['WKST'] ))
1210
- $input2['WKST'] = $input['WKST'];
1211
- return $input2;
1212
- }
1213
- /**
1214
- * convert format for input date to internal date with parameters
1215
- *
1216
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1217
- * @since 2.10.4 - 2011-08-03
1218
- * @param mixed $year
1219
- * @param mixed $month optional
1220
- * @param int $day optional
1221
- * @param int $hour optional
1222
- * @param int $min optional
1223
- * @param int $sec optional
1224
- * @param string $tz optional
1225
- * @param array $params optional
1226
- * @param string $caller optional
1227
- * @param string $objName optional
1228
- * @param string $tzid optional
1229
- * @return array
1230
- */
1231
- public static function _setDate( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $tz=FALSE, $params=FALSE, $caller=null, $objName=null, $tzid=FALSE ) {
1232
- $input = $parno = null;
1233
- $localtime = (( 'dtstart' == $caller ) && in_array( $objName, array( 'vtimezone', 'standard', 'daylight' ))) ? TRUE : FALSE;
1234
- if( iCalUtilityFunctions::_isArrayDate( $year )) {
1235
- if( $localtime ) unset ( $month['VALUE'], $month['TZID'] );
1236
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
1237
- if( isset( $input['params']['TZID'] )) {
1238
- $input['params']['VALUE'] = 'DATE-TIME';
1239
- unset( $year['tz'] );
1240
- }
1241
- $hitval = (( !empty( $year['tz'] ) || !empty( $year[6] ))) ? 7 : 6;
1242
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval );
1243
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, count( $year ), $parno );
1244
- $input['value'] = iCalUtilityFunctions::_date_time_array( $year, $parno );
1245
- }
1246
- elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year )) {
1247
- if( $localtime ) unset ( $month['VALUE'], $month['TZID'] );
1248
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
1249
- if( isset( $input['params']['TZID'] )) {
1250
- $input['params']['VALUE'] = 'DATE-TIME';
1251
- unset( $year['tz'] );
1252
- }
1253
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3 );
1254
- $hitval = ( isset( $year['tz'] )) ? 7 : 6;
1255
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval, $parno );
1256
- $input['value'] = iCalUtilityFunctions::_timestamp2date( $year, $parno );
1257
- }
1258
- elseif( 8 <= strlen( trim( $year ))) { // ex. 2006-08-03 10:12:18
1259
- if( $localtime ) unset ( $month['VALUE'], $month['TZID'] );
1260
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ));
1261
- if( isset( $input['params']['TZID'] )) {
1262
- $input['params']['VALUE'] = 'DATE-TIME';
1263
- $parno = 6;
1264
- }
1265
- elseif( $tzid && iCalUtilityFunctions::_isOffset( substr( $year, -7 ))) {
1266
- if(( in_array( substr( $year, -5, 1 ), array( '+', '-' ))) &&
1267
- ( '0000' < substr( $year, -4 )) && ( '9999' >= substr( $year, -4 )))
1268
- $year = substr( $year, 0, ( strlen( $year ) - 5 ));
1269
- elseif(( in_array( substr( $input, -7, 1 ), array( '+', '-' ))) &&
1270
- ( '000000' < substr( $input, -6 )) && ( '999999' >= substr( $input, -6 )))
1271
- $year = substr( $year, 0, ( strlen( $year ) - 7 ));
1272
- $parno = 6;
1273
- }
1274
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7, $parno );
1275
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3, $parno, $parno );
1276
- $input['value'] = iCalUtilityFunctions::_date_time_string( $year, $parno );
1277
- }
1278
- else {
1279
- if( is_array( $params )) {
1280
- if( $localtime ) unset ( $params['VALUE'], $params['TZID'] );
1281
- $input['params'] = iCalUtilityFunctions::_setParams( $params, array( 'VALUE' => 'DATE-TIME' ));
1282
- }
1283
- elseif( is_array( $tz )) {
1284
- $input['params'] = iCalUtilityFunctions::_setParams( $tz, array( 'VALUE' => 'DATE-TIME' ));
1285
- $tz = FALSE;
1286
- }
1287
- elseif( is_array( $hour )) {
1288
- $input['params'] = iCalUtilityFunctions::_setParams( $hour, array( 'VALUE' => 'DATE-TIME' ));
1289
- $hour = $min = $sec = $tz = FALSE;
1290
- }
1291
- if( isset( $input['params']['TZID'] )) {
1292
- $tz = null;
1293
- $input['params']['VALUE'] = 'DATE-TIME';
1294
- }
1295
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE', 3 );
1296
- $hitval = ( !empty( $tz )) ? 7 : 6;
1297
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', $hitval, $parno, $parno );
1298
- $input['value'] = array( 'year' => $year, 'month' => $month, 'day' => $day );
1299
- if( 3 != $parno ) {
1300
- $input['value']['hour'] = ( $hour ) ? $hour : '0';
1301
- $input['value']['min'] = ( $min ) ? $min : '0';
1302
- $input['value']['sec'] = ( $sec ) ? $sec : '0';
1303
- if( !empty( $tz ))
1304
- $input['value']['tz'] = $tz;
1305
- }
1306
- }
1307
- if( 3 == $parno ) {
1308
- $input['params']['VALUE'] = 'DATE';
1309
- unset( $input['value']['tz'] );
1310
- unset( $input['params']['TZID'] );
1311
- }
1312
- elseif( isset( $input['params']['TZID'] ))
1313
- unset( $input['value']['tz'] );
1314
- if( $localtime )
1315
- unset( $input['value']['tz'], $input['params']['TZID'] );
1316
- elseif(( !isset( $input['params']['VALUE'] ) || ( $input['params']['VALUE'] != 'DATE' )) && !isset( $input['params']['TZID'] ) && $tzid )
1317
- $input['params']['TZID'] = $tzid;
1318
- if( isset( $input['value']['tz'] ))
1319
- $input['value']['tz'] = (string) $input['value']['tz'];
1320
- if( !empty( $input['value']['tz'] ) && ( 'Z' != $input['value']['tz'] ) &&
1321
- ( !iCalUtilityFunctions::_isOffset( $input['value']['tz'] )))
1322
- $input['params']['TZID'] = $input['value']['tz'];
1323
- return $input;
1324
- }
1325
- /**
1326
- * convert format for input date (UTC) to internal date with parameters
1327
- *
1328
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1329
- * @since 2.4.17 - 2008-10-31
1330
- * @param mixed $year
1331
- * @param mixed $month optional
1332
- * @param int $day optional
1333
- * @param int $hour optional
1334
- * @param int $min optional
1335
- * @param int $sec optional
1336
- * @param array $params optional
1337
- * @return array
1338
- */
1339
- public static function _setDate2( $year, $month=FALSE, $day=FALSE, $hour=FALSE, $min=FALSE, $sec=FALSE, $params=FALSE ) {
1340
- $input = null;
1341
- if( iCalUtilityFunctions::_isArrayDate( $year )) {
1342
- $input['value'] = iCalUtilityFunctions::_date_time_array( $year, 7 );
1343
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ) );
1344
- }
1345
- elseif( iCalUtilityFunctions::_isArrayTimestampDate( $year )) {
1346
- $input['value'] = iCalUtilityFunctions::_timestamp2date( $year, 7 );
1347
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ) );
1348
- }
1349
- elseif( 8 <= strlen( trim( $year ))) { // ex. 2006-08-03 10:12:18
1350
- $input['value'] = iCalUtilityFunctions::_date_time_string( $year, 7 );
1351
- $input['params'] = iCalUtilityFunctions::_setParams( $month, array( 'VALUE' => 'DATE-TIME' ) );
1352
- }
1353
- else {
1354
- $input['value'] = array( 'year' => $year
1355
- , 'month' => $month
1356
- , 'day' => $day
1357
- , 'hour' => $hour
1358
- , 'min' => $min
1359
- , 'sec' => $sec );
1360
- $input['params'] = iCalUtilityFunctions::_setParams( $params, array( 'VALUE' => 'DATE-TIME' ));
1361
- }
1362
- $parno = iCalUtilityFunctions::_existRem( $input['params'], 'VALUE', 'DATE-TIME', 7 ); // remove default
1363
- if( !isset( $input['value']['hour'] ))
1364
- $input['value']['hour'] = 0;
1365
- if( !isset( $input['value']['min'] ))
1366
- $input['value']['min'] = 0;
1367
- if( !isset( $input['value']['sec'] ))
1368
- $input['value']['sec'] = 0;
1369
- if( !isset( $input['value']['tz'] ) || !iCalUtilityFunctions::_isOffset( $input['value']['tz'] ))
1370
- $input['value']['tz'] = 'Z';
1371
- return $input;
1372
- }
1373
- /**
1374
- * check index and set (an indexed) content in multiple value array
1375
- *
1376
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1377
- * @since 2.6.12 - 2011-01-03
1378
- * @param array $valArr
1379
- * @param mixed $value
1380
- * @param array $params
1381
- * @param array $defaults
1382
- * @param int $index
1383
- * @return void
1384
- */
1385
- public static function _setMval( & $valArr, $value, $params=FALSE, $defaults=FALSE, $index=FALSE ) {
1386
- if( !is_array( $valArr )) $valArr = array();
1387
- if( $index )
1388
- $index = $index - 1;
1389
- elseif( 0 < count( $valArr )) {
1390
- $keys = array_keys( $valArr );
1391
- $index = end( $keys ) + 1;
1392
- }
1393
- else
1394
- $index = 0;
1395
- $valArr[$index] = array( 'value' => $value, 'params' => iCalUtilityFunctions::_setParams( $params, $defaults ));
1396
- ksort( $valArr );
1397
- }
1398
- /**
1399
- * set input (formatted) parameters- component property attributes
1400
- *
1401
- * default parameters can be set, if missing
1402
- *
1403
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1404
- * @since 1.x.x - 2007-05-01
1405
- * @param array $params
1406
- * @param array $defaults
1407
- * @return array
1408
- */
1409
- public static function _setParams( $params, $defaults=FALSE ) {
1410
- if( !is_array( $params))
1411
- $params = array();
1412
- $input = array();
1413
- foreach( $params as $paramKey => $paramValue ) {
1414
- if( is_array( $paramValue )) {
1415
- foreach( $paramValue as $pkey => $pValue ) {
1416
- if(( '"' == substr( $pValue, 0, 1 )) && ( '"' == substr( $pValue, -1 )))
1417
- $paramValue[$pkey] = substr( $pValue, 1, ( strlen( $pValue ) - 2 ));
1418
- }
1419
- }
1420
- elseif(( '"' == substr( $paramValue, 0, 1 )) && ( '"' == substr( $paramValue, -1 )))
1421
- $paramValue = substr( $paramValue, 1, ( strlen( $paramValue ) - 2 ));
1422
- if( 'VALUE' == strtoupper( $paramKey ))
1423
- $input['VALUE'] = strtoupper( $paramValue );
1424
- else
1425
- $input[strtoupper( $paramKey )] = $paramValue;
1426
- }
1427
- if( is_array( $defaults )) {
1428
- foreach( $defaults as $paramKey => $paramValue ) {
1429
- if( !isset( $input[$paramKey] ))
1430
- $input[$paramKey] = $paramValue;
1431
- }
1432
- }
1433
- return (0 < count( $input )) ? $input : null;
1434
- }
1435
- /**
1436
- * set RRULE in vtimezone standard/daylight components based on component dtstart
1437
- *
1438
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1439
- * @since 2.10.3 - 2011-08-01
1440
- * @param object $obj, reference to an iCalcreator vtimezone standard/daylight instance
1441
- * @return bool
1442
- */
1443
- public static function _setTZrrule( & $obj ) {
1444
- if( FALSE === ( $date = $obj->getProperty( 'dtstart' )))
1445
- return FALSE;
1446
- $ts = mktime( (int) $date['hour'], (int) $date['min'], (int) $date['sec'], (int) $date['month'], (int) $date['day'], (int) $date['year'] );
1447
- $daysNm = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU' );
1448
- $day = $daysNm[date( 'N', $ts )];
1449
- $daycnt = date( 't', $ts ) - $date['day'];
1450
- if( 8 > $daycnt )
1451
- $ordwk = -1;
1452
- elseif( 15 > $daycnt)
1453
- $ordwk = -2;
1454
- elseif( 8 > $date['day'] )
1455
- $ordwk = 1;
1456
- else
1457
- $ordwk = 2;
1458
- $obj->setProperty( 'RRULE', array( 'FREQ' => 'YEARLY', 'BYDAY' => array( (string) $ordwk, 'DAY' => $day ), 'BYMONTH' => (int) $date['month'] ));
1459
- return TRUE;
1460
- }
1461
- /**
1462
- * step date, return updated date, array and timpstamp
1463
- *
1464
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1465
- * @since 2.4.16 - 2008-10-18
1466
- * @param array $date, date to step
1467
- * @param int $timestamp
1468
- * @param array $step, default array( 'day' => 1 )
1469
- * @return void
1470
- */
1471
- public static function _stepdate( &$date, &$timestamp, $step=array( 'day' => 1 )) {
1472
- foreach( $step as $stepix => $stepvalue )
1473
- $date[$stepix] += $stepvalue;
1474
- $timestamp = iCalUtilityFunctions::_date2timestamp( $date );
1475
- $date = iCalUtilityFunctions::_timestamp2date( $timestamp, 6 );
1476
- foreach( $date as $k => $v ) {
1477
- if( ctype_digit( $v ))
1478
- $date[$k] = (int) $v;
1479
- }
1480
- }
1481
- /**
1482
- * convert timestamp to date array
1483
- *
1484
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1485
- * @since 2.4.16 - 2008-11-01
1486
- * @param mixed $timestamp
1487
- * @param int $parno
1488
- * @return array
1489
- */
1490
- public static function _timestamp2date( $timestamp, $parno=6 ) {
1491
- if( is_array( $timestamp )) {
1492
- if(( 7 == $parno ) && !empty( $timestamp['tz'] ))
1493
- $tz = $timestamp['tz'];
1494
- $timestamp = $timestamp['timestamp'];
1495
- }
1496
- $output = array( 'year' => date( 'Y', $timestamp )
1497
- , 'month' => date( 'm', $timestamp )
1498
- , 'day' => date( 'd', $timestamp ));
1499
- if( 3 != $parno ) {
1500
- $output['hour'] = date( 'H', $timestamp );
1501
- $output['min'] = date( 'i', $timestamp );
1502
- $output['sec'] = date( 's', $timestamp );
1503
- if( isset( $tz ))
1504
- $output['tz'] = $tz;
1505
- }
1506
- return $output;
1507
- }
1508
- /**
1509
- * convert timestamp to duration in array format
1510
- *
1511
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1512
- * @since 2.6.23 - 2010-10-23
1513
- * @param int $timestamp
1514
- * @return array, duration format
1515
- */
1516
- public static function _timestamp2duration( $timestamp ) {
1517
- $dur = array();
1518
- $dur['week'] = (int) floor( $timestamp / ( 7 * 24 * 60 * 60 ));
1519
- $timestamp = $timestamp % ( 7 * 24 * 60 * 60 );
1520
- $dur['day'] = (int) floor( $timestamp / ( 24 * 60 * 60 ));
1521
- $timestamp = $timestamp % ( 24 * 60 * 60 );
1522
- $dur['hour'] = (int) floor( $timestamp / ( 60 * 60 ));
1523
- $timestamp = $timestamp % ( 60 * 60 );
1524
- $dur['min'] = (int) floor( $timestamp / ( 60 ));
1525
- $dur['sec'] = (int) $timestamp % ( 60 );
1526
- return $dur;
1527
- }
1528
- /**
1529
- * transforms a dateTime from a timezone to another using PHP DateTime and DateTimeZone class (PHP >= PHP 5.2.0)
1530
- *
1531
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1532
- * @since 2.10.5 - 2011-08-03
1533
- * @param string $date (date to alter)
1534
- * @param string $tzFrom, PHP valid old timezone
1535
- * @param string $tzTo, PHP valid new timezone, default 'UTC'
1536
- * @param string $format, (opt) date output format, default 'Ymd\THis'
1537
- * @return bool
1538
- */
1539
- public static function transformDateTime( & $date, $tzFrom, $tzTo='UTC', $format = 'Ymd\THis' ) {
1540
- if( !class_exists( 'DateTime' ) || !class_exists( 'DateTimeZone' ))
1541
- return FALSE;
1542
- if( FALSE === ( $timestamp = strtotime( $date )))
1543
- return FALSE;
1544
- try {
1545
- $d = new DateTime( date( 'Y-m-d H:i:s', $timestamp ), new DateTimeZone( $tzFrom ));
1546
- $d->setTimezone( new DateTimeZone( $tzTo ));
1547
- }
1548
- catch (Exception $e) {
1549
- return FALSE;
1550
- }
1551
- $date = $d->format( $format );
1552
- return TRUE;
1553
- }
1554
- /**
1555
- * convert (numeric) local time offset to seconds correcting localtime to GMT
1556
- *
1557
- * @author Kjell-Inge Gustafsson, kigkonsult <ical@kigkonsult.se>
1558
- * @since 2.4.16 - 2008-10-19
1559
- * @param string $offset
1560
- * @return integer
1561
- */
1562
- public static function _tz2offset( $tz ) {
1563
- $tz = trim( (string) $tz );
1564
- $offset = 0;
1565
- if((( 5 != strlen( $tz )) && ( 7 != strlen( $tz ))) ||
1566
- (( '+' != substr( $tz, 0, 1 )) && ( '-' != substr( $tz, 0, 1 ))) ||
1567
- (( '0000' >= substr( $tz, 1, 4 )) && ( '9999' < substr( $tz, 1, 4 ))) ||
1568
- (( 7 == strlen( $tz )) && ( '00' > substr( $tz, 5, 2 )) && ( '99' < substr( $tz, 5, 2 ))))
1569
- return $offset;
1570
- $hours2sec = (int) substr( $tz, 1, 2 ) * 3600;
1571
- $min2sec = (int) substr( $tz, 3, 2 ) * 60;
1572
- $sec = ( 7 == strlen( $tz )) ? (int) substr( $tz, -2 ) : '00';
1573
- $offset = $hours2sec + $min2sec + $sec;
1574
- $offset = ('-' == substr( $tz, 0, 1 )) ? $offset : -1 * $offset;
1575
- return $offset;
1576
- }
1577
- }
1578
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10.23/releaseNotes-2.10.23.txt DELETED
@@ -1,8 +0,0 @@
1
- 2.10.21 ###################### Thanks Pasi
2
- updated user guide, clarification about UTC timezone usage
3
-
4
- 2.10.22 ###################### Thanks johns
5
- bug in function selectComponents; RECURRENCE-ID management
6
-
7
- 2.10.23 ######################
8
- updated user guide, relationship between getProperty/selectComponents functions, other minor clarifications
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10.23/summary.html DELETED
@@ -1,323 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
2
- "http://www.w3.org/TR/html4/frameset.dtd">
3
- <html>
4
- <head>
5
- <title>iCalcreator 2.10.23 summary</title>
6
- <meta name="author" content="Kjell-Inge Gustafsson - kigkonsult" />
7
- <meta name="copyright" content="2007-2011 Kjell-Inge Gustafsson - kigkonsult" />
8
- <meta name="keywords" content="ical, calendar, calender, xcal, xml, icalender, rfc2445, rfc5545, vcalender, php, create" />
9
- <meta name="description" content="iCalcreator summary" />
10
- <style type="text/css">
11
- body {
12
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
13
- FONT-SIZE : small;
14
- MARGIN : 10px;
15
- WIDTH : 800px;
16
- }
17
- h1 {
18
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
19
- FONT-SIZE : large;
20
- }
21
- h2 {
22
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
23
- FONT-SIZE : large;
24
- }
25
- h4 {
26
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
27
- FONT-SIZE : small;
28
- FONT-WEIGHT : bold;
29
- }
30
- .code {
31
- FONT-FAMILY : monospace;
32
- FONT-SIZE : medium;
33
- WHITE-SPACE : pre;
34
- }
35
- .comment {
36
- FONT-FAMILY : arial;
37
- FONT-SIZE : small;
38
- FONT-STYLE : italic;
39
- }
40
- </style>
41
- </head>
42
- <body>
43
- <h1>iCalcreator v2.10.23</h1>
44
- iCalcreator class v2.10.23<br />
45
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br />
46
- <a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br />
47
- ical@kigkonsult.se<br />
48
- <br />
49
- iCalcreator is a PHP class managing iCal formatted files for non-calendar
50
- systems like CMS, project management systems and other applications able
51
- to process calendar information like agendas, tasks, reports, totos,
52
- journaling data and for communication with calendar systems and applications.
53
- <br /><br />
54
- This is a <b>short summary</b> how to use iCalcreator; create, parse, edit, select and output functionality.
55
- <br /><br />
56
- iCalcreator is built of a class file with support of a function class file and are calendar component property oriented.
57
- Development environment is PHP version 5.x but coding is done to meet 4.x backward compatibility and may work.
58
- <h4>iCal</h4>
59
- A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>. If You are not familiar with iCal, read this first!<br />
60
- Knowledge of calendar protocol rfc5545/rfc5546 is to recommend;<br />
61
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="RFC5545" target="_blank">rfc5545</a>
62
- - Internet Calendaring and Scheduling Core Object Specification (iCalendar)<br />
63
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="RFC5546" target="_blank">rfc5546</a>
64
- - iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries <br />
65
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format">rfc5545</a> and
66
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format">rfc5546</a>
67
- obsoletes, respectively,
68
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format">rfc2445</a> and
69
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format">rfc2446</a>.<br />
70
- All functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly!<br />
71
-
72
-
73
- <h4>SUPPORT</h4>
74
- The main support channel is using iCalcreator
75
- <a title="Sourceforge" href="http://sourceforge.net/projects/icalcreator/forums/" target="_blank">Sourceforge</a> forum.
76
- <br />
77
- <br />
78
- Our services are available for support and designing and developing customizations,
79
- adaptations and other <i>PHP</i>/MySQL solutions with a special focus on software utility and reliability,
80
- supported through our iterative acquire/design/transition process modell.
81
-
82
- <h4>DONATE</h4>
83
- You can show your appreciation for our free software,
84
- and can support future development by making a donation to the kigkonsult GPL/LGPL projects.
85
- <br />
86
- <br />
87
- Make a donation of any size by clicking <a href="http://kigkonsult.se/contact/index.php#Donate" title="Donate" target="_blank">here</a>.
88
- Thanks in advance!
89
-
90
- <h4>Contact</h4>
91
- Use the contact <a href="http://kigkonsult.se/contact/index.php" title="kigkonsult.se/contact" target="_blank">page</a>
92
- for queries, improvement/development issues or professional support and development.
93
- Please note that paid support or consulting service has the highest priority.
94
-
95
- <h4>Downloads</h4>
96
- Download
97
- <a href="http://kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator complete manual" target="_blank"><b>complete manual</b></a>
98
- and
99
- <a href="http://kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator coding samples" target="_blank"><b>coding samples</b></a>.
100
- from <a href="http://kigkonsult.se/index.php" title="kigkonsult" target="_blank">kigkonsult.se</a>.
101
-
102
- <h4>INSTALL</h4>
103
- Unpack to any folder<br />
104
- - add this folder to your include-path<br />
105
- - or unpack to your application-(include)-folder<br />
106
- Add &quot;require_once '[folder/]iCalcreator.class.php';&quot; to your php-script.
107
- <br />
108
- <br />
109
- If using php version 5.1 or higher, the default timezone need to be set/altered, now &quot;Europe/Stockholm&quot;,
110
- line 50 in the iCalcreator.class.php file.
111
- <br />
112
- When creating a new calendar/component instance, review config settings.
113
- <br />
114
- <br />
115
- To really boost performance, visit kigkonsult.se contact <a href="http://kigkonsult.se/contact/index.php"><u>page</u></a> for information.
116
- <br />
117
-
118
- <h2>CREATE</h2>
119
-
120
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
121
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ); // <span class="comment">set Your unique id</span>
122
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
123
-
124
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
125
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
126
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
127
- $tz = &quot;Europe/Stockholm&quot;;
128
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, $tz ); // <span class="comment">required of some calendar software</span>
129
- .. .
130
- iCalUtilityFunctions::createTimezone( $v, $tz ) // <span class="comment">creates (very simple) timezone component(-s)</span>
131
- .. .
132
- $vevent = & $v->newComponent( &quot;vevent&quot; ); // <span class="comment">create an event calendar component</span>
133
- $vevent->setProperty( &quot;dtstart&quot;, array( &quot;year&quot;=&gt;2007, &quot;month&quot;=&gt;4, &quot;day&quot;=&gt;1, &quot;hour&quot;=&gt;19, &quot;min&quot;=&gt;0, &quot;sec&quot;=&gt;0 ));
134
- $vevent->setProperty( &quot;dtend&quot;, array( &quot;year&quot;=&gt;2007, &quot;month&quot;=&gt;4, &quot;day&quot;=&gt;1, &quot;hour&quot;=&gt;22, &quot;min&quot;=&gt;30, &quot;sec&quot;=&gt;0 ));
135
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Placa&quot; ); // <span class="comment">property name - case independent</span>
136
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
137
- $vevent->setProperty( &quot;description&quot;, &quot;This is a description&quot; );
138
- $vevent->setProperty( &quot;comment&quot;, &quot;This is a comment&quot; );
139
- $vevent->setProperty( &quot;attendee&quot;, &quot;attendee1@icaldomain.net&quot; );
140
- .. .
141
- $vevent = & $v->newComponent( &quot;vevent&quot; ); // <span class="comment">create next event calendar component</span>
142
- $vevent->setProperty( &quot;dtstart&quot;, &quot;20070401&quot;, array(&quot;VALUE&quot; =&gt; &quot;DATE&quot;));// <span class="comment">alt. date format, now for an all-day event</span>
143
- $vevent->setProperty( &quot;organizer&quot; , &quot;boss@icaldomain.com&quot; );
144
- $vevent->setProperty( &quot;summary&quot;, &quot;ALL-DAY event&quot; );
145
- $vevent->setProperty( &quot;description&quot;, &quot;This is a description for an all-day event&quot; );
146
- $vevent->setProperty( &quot;resources&quot;, &quot;COMPUTER PROJECTOR&quot; );
147
- $vevent->setProperty( &quot;rrule&quot;, array( &quot;FREQ&quot; =&gt; &quot;WEEKLY&quot;, &quot;count&quot; =&gt; 4));// <span class="comment">weekly, four occasions</span>
148
- $vevent->parse( &quot;LOCATION:1CP Conference Room 4350&quot; ); // <span class="comment">supporting parse of strict rfc5545 formatted text</span>
149
- .. .
150
- .. .// <span class="comment">all calendar components are described in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="RFC5545" target="_blank">rfc5545</a></span>
151
- .. .// <span class="comment">a complete iCalcreator function list (ex. setProperty) in <a href="http://kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator complete manual" target="_blank">iCalcreator manual</a></span>
152
- .. .
153
- $v->returnCalendar(); // <span class="comment">redirect calendar file to browser</span>
154
- </p>
155
- <h2>PARSE</h2>
156
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
157
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ); // <span class="comment">set Your unique id, required if any component UID is missing</span>
158
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
159
-
160
- /* start parse of local file */
161
- $config = array( &quot;directory&quot; =&gt; &quot;calendar&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
162
- $v->setConfig( $config ); // <span class="comment">set directory and file name</span>
163
- $v->parse();
164
-
165
- /* start parse of remote file */
166
- $v->setConfig( &quot;url&quot;, &quot;http://www.aDomain.net/file.ics&quot; ); // <span class="comment">iCalcreator also support parse from or write to remote files</span>
167
- $v->parse();
168
-
169
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
170
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
171
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
172
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
173
-
174
- .. .
175
- $v->sort(); // <span class="comment">ensure start date order</span>
176
- .. .
177
- </p>
178
- <h2>EDIT</h2>
179
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
180
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;directory&quot; =&gt; &quot;calendar&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
181
- // <span class="comment">set Your unique id, import directory and file name</span>
182
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
183
-
184
- $v->parse();
185
-
186
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
187
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
188
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
189
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
190
-
191
- while( $vevent = $v->getComponent( &quot;vevent&quot; )) { // <span class="comment">read events, one by one</span>
192
- $uid = $vevent->getProperty( &quot;uid&quot; ); // <span class="comment">uid required, one occurence (unique id/key for component)</span>
193
- .. .
194
- $dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="comment">dtstart required, one occurence</span>
195
- .. .
196
- if( $description = $vevent->getProperty( &quot;description&quot;, 1 )) { // <span class="comment">description optional, first occurence</span>
197
- .. . // <span class="comment">edit the description</span>
198
- $vevent->setProperty( &quot;description&quot;, $description, FALSE, 1 ); // <span class="comment">update/replace the description</span>
199
- }
200
- while( $comment = $vevent->getProperty( &quot;comment&quot; )) { // <span class="comment">comment optional, may occur more than once </span>
201
- .. . // <span class="comment">manage comments</span>
202
- }
203
- .. .
204
- while( $vevent->deleteProperty( &quot;attendee&quot; ))
205
- continue; // <span class="comment">remove all ATTENDEE properties .. .</span>
206
- .. .
207
- $v->setComponent ( $vevent, $uid ); // <span class="comment">update/replace event in calendar with <b>uid</b> as key </span>
208
- }
209
- .. .
210
- .. .// <span class="comment">a complete iCalcreator function list (ex. getProperty, deleteProperty) in <a href="http://kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator complete manual" target="_blank">iCalcreator manual</a></span>
211
- .. .
212
- </p>
213
- <h2>SELECT</h2>
214
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
215
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ); // <span class="comment">set Your unique id</span>
216
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
217
-
218
- $v->setConfig( &quot;url&quot;, &quot;http://www.aDomain.net/file.ics&quot; ); // <span class="comment">iCalcreator also support remote files</span>
219
- $v->parse();
220
- $v->sort(); // <span class="comment">ensure start date order</span>
221
-
222
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
223
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
224
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
225
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
226
- </p>
227
- <h4>Date based select</h4>
228
- <p class="code">$eventArray = $v->selectComponents(); // <span class="comment">select components occuring <b>today</b></span>
229
- // <span class="comment">(including components with recurrence pattern)</span>
230
- foreach( $eventArray as $year =&gt; $yearArray) {
231
- foreach( $yearArray as $month =&gt; $monthArray ) {
232
- foreach( $monthArray as $day =&gt; $dailyEventsArray ) {
233
- foreach( $dailyEventsArray as $vevent ) {
234
- $currddate = $event->getProperty( &quot;x-current-dtstart&quot; );
235
- // <span class="comment">if member of a recurrence set (2nd occurence etc)</span>
236
- // <span class="comment">returns array( &quot;x-current-dtstart&quot;</span>
237
- // <span class="comment"> , &lt;(string) date(&quot;Y-m-d [H:i:s][timezone/UTC offset]&quot;)&gt;)</span>
238
- $dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="comment">dtstart required, one occurence, (orig. start date)</span>
239
- $summary = $vevent->getProperty( &quot;summary&quot; );
240
- $description = $vevent->getProperty( &quot;description&quot; );
241
- .. .
242
- .. .
243
- }
244
- }
245
- }
246
- }
247
- </p>
248
- <h4>Select specific property values</h4>
249
- <p class="code">$valueOccurr = $v->getProperty( &quot;CATEGORIES&quot; ); // <span class="comment">fetch specific property (unique) values and ocurrences</span>
250
- // <span class="comment">ATTENDEE, CATEGORIES, DTSTART, LOCATION,</span>
251
- // <span class="comment">ORGANIZER, PRIORITY, RESOURCES, STATUS,</span>
252
- // <span class="comment">SUMMARY, UID</span>
253
- foreach( $valueOccurr as $uniqueValue =&gt; $occurr ) {
254
- .. .
255
- }
256
- </p>
257
- <h4>Specific property value select</h4>
258
- <p class="code">$selectSpec = array( &quot;CATEGORIES&quot; =&gt; &quot;course1&quot; );
259
- $specComps = $v->selectComponents( $selectSpec ); // <span class="comment">selects components based on specific property value(-s)</span>
260
- // <span class="comment">ATTENDEE, CATEGORIES, LOCATION, ORGANIZER,</span>
261
- // <span class="comment">PRIORITY, RESOURCES, STATUS, SUMMARY, UID</span>
262
- foreach( $specComps as $comp ) {
263
- .. .
264
- }
265
- </p>
266
- <h2>OUTPUT</h2>
267
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
268
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ); // <span class="comment">set Your unique id</span>
269
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
270
-
271
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
272
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
273
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
274
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
275
- .. .
276
- .. .// <span class="comment">parse calendar file(s) and/or edit/create calendar components.. .</span>
277
- .. .
278
- </p>
279
- <h4> // opt 1</h4>
280
- <p class="code">.. .
281
- $v->returnCalendar(); // <span class="comment">redirect calendar file to browser</span>
282
- </p>
283
- <h4> // opt 2</h4>
284
- <p class="code">.. .
285
- $config = array( &quot;directory&quot; =&gt; &quot;depot&quot;, &quot;filename&quot; =&gt; &quot;calendar.ics&quot; );
286
- $v->setConfig( $config ); // <span class="comment">set output directory and file name</span>
287
- $v->saveCalendar(); // <span class="comment">save calendar to (local) file</span>
288
- </p>
289
- <h4> // opt 3</h4>
290
- <p class="code">.. .
291
- $config = array( &quot;url&quot; =&gt; &quot;http://www.aDomain.net/file.ics&quot; );
292
- $v->setConfig( $config ); // <span class="comment">set output url</span>
293
- $v->saveCalendar(); // <span class="comment">save calendar to remote url</span>
294
- </p>
295
-
296
- <h2>COPYRIGHT AND LICENSE</h2>
297
-
298
- <h4>Copyright</h4>
299
- iCalcreator v2.10.23<br />
300
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br />
301
- <a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br />
302
- ical@kigkonsult.se<br />
303
-
304
- <h4>License</h4>
305
-
306
- This library is free software; you can redistribute it and/or
307
- modify it under the terms of the GNU Lesser General Public
308
- License as published by the Free Software Foundation; either
309
- version 2.1 of the License, or (at your option) any later version.
310
- <br /><br />
311
- This library is distributed in the hope that it will be useful,
312
- but WITHOUT ANY WARRANTY; without even the implied warranty of
313
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
314
- Lesser General Public License for more details.
315
- <br /><br />
316
- You should have received a copy of the GNU Lesser General Public
317
- License along with this library; if not, write to the Free Software
318
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
319
- or download it <a href="http://kigkonsult.se/downloads/dl.php?f=LGPL" target="_blank">here</a>.
320
- <br />
321
- <br />
322
- </body>
323
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10.23/using.html DELETED
@@ -1,5810 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
2
- "http://www.w3.org/TR/html4/frameset.dtd">
3
- <html>
4
- <head>
5
- <title>iCalcreator 2.10.23 manual</title>
6
- <meta name="author" content="Kjell-Inge Gustafsson - kigkonsult">
7
- <meta name="copyright" content="2007-2011 Kjell-Inge Gustafsson - kigkonsult">
8
- <meta name="keywords" content="ical, calendar, calender, xcal, xml, icalender, rfc2445, vcalender, php, create">
9
- <meta name="description" content="using iCalcreator v2.10.23">
10
- <style type="text/css">
11
- * {
12
- BACKGROUND-COLOR: white;
13
- COLOR : black;
14
- }
15
- a {
16
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
17
- FONT-SIZE : small;
18
- }
19
- a.ref {
20
- xbackground-color: transparent;
21
- background-color: inherit;
22
- FONT-FAMILY : monospace, arial;
23
- FONT-SIZE : small;
24
- FONT-STYLE : normal;
25
- TEXT-DECORATION : none;
26
- }
27
- body {
28
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
29
- FONT-SIZE : small;
30
- MARGIN-LEFT : 10px;
31
- WIDTH : 600px;
32
- }
33
- h1 {
34
- BACKGROUND-COLOR: silver;
35
- BORDER : thin solid black;
36
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
37
- FONT-SIZE : x-large;
38
- FONT-WEIGHT : bold;
39
- DISPLAY : block;
40
- }
41
- h2 {
42
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
43
- FONT-SIZE : large;
44
- }
45
- h3 {
46
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
47
- FONT-SIZE : medium;
48
- }
49
- h4 {
50
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
51
- FONT-SIZE : small;
52
- FONT-WEIGHT : bold;
53
- }
54
- h5 {
55
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
56
- FONT-SIZE : small;
57
- FONT-WEIGHT : normal;
58
- TEXT-DECORATION : underline;
59
- }
60
- p {
61
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
62
- FONT-SIZE : small;
63
- }
64
- .bb {
65
- BORDER-BOTTOM : gray dotted thin;
66
- }
67
- .blb {
68
- BORDER-LEFT : gray dotted thin;
69
- BORDER-BOTTOM : gray dotted thin;
70
- TEXT-ALIGN : center;
71
- }
72
- .bl {
73
- BORDER-LEFT : gray dotted thin;
74
- }
75
- .center {
76
- TEXT-ALIGN : center;
77
- }
78
- p.comment {
79
- background-color: transparent;
80
- FONT-FAMILY : monospace;
81
- FONT-SIZE : medium;
82
- FONT-STYLE : italic;
83
- FONT-WEIGHT : 300;
84
- WHITE-SPACE : pre;
85
- }
86
- span.comment {
87
- background-color: transparent;
88
- FONT-FAMILY : monospace;
89
- FONT-SIZE : medium;
90
- }
91
- .example {
92
- background-color: #DCDCDC;
93
- FONT-FAMILY : Courier, "Courier New";
94
- FONT-SIZE : small;
95
- FONT-WEIGHT : 500;
96
- LINE-HEIGHT : 1.2em;
97
- WHITE-SPACE : pre;
98
- }
99
- .format {
100
- BORDER : gray dotted thin;
101
- FONT-FAMILY : Courier, "Courier New";
102
- FONT-SIZE : small;
103
- FONT-WEIGHT : 500;
104
- LINE-HEIGHT : 1.5em;
105
- WHITE-SPACE : pre;
106
- }
107
- .header {
108
- BACKGROUND-COLOR: silver;
109
- BORDER : thin solid black;
110
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
111
- FONT-SIZE : xx-large;
112
- WIDTH : 600px;
113
- }
114
- .label {
115
- FONT-FAMILY : arial;
116
- FONT-SIZE : small;
117
- FONT-WEIGHT : bold;
118
- LETTER-SPACING : 0.1em;
119
- }
120
- .quotes {
121
- background-color: transparent;
122
- FONT-FAMILY : arial;
123
- FONT-SIZE : small;
124
- xFONT-STYLE : italic;
125
- FONT-WEIGHT : 300;
126
- LETTER-SPACING : 0.2em;
127
- WHITE-SPACE : pre;
128
- }
129
- .ref {
130
- BACKGROUND-COLOR: transparent;
131
- FONT-FAMILY : monospace, arial;
132
- FONT-SIZE : x-small;
133
- xFONT-STYLE : italic;
134
- xFONT-WEIGHT : 600;
135
- VERTICAL-ALIGN : top;
136
- LETTER-SPACING : 0.2em;
137
- }
138
- .top {
139
- VERTICAL-ALIGN : top;
140
- }
141
- </style>
142
- </head>
143
- <body>
144
- <a name="top"></a>
145
- <p class="header">iCalcreator 2.10.23</p>
146
- iCalcreator class v2.10.23<br>
147
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br>
148
- <a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br>
149
- ical@kigkonsult.se<br>
150
-
151
- <h2>Description:</h2>
152
- iCalcreator is a <i>PHP</i> implementation of RFC2445/RFC2446 to manage iCal/xCal formatted files.
153
- <br>
154
-
155
- <a name="INTRO"></a><h1>1. INTRO</h1>
156
- <p>
157
- iCalcreator is a <i>PHP</i> class managing iCal formatted files for non-<i>calendar</i>
158
- systems like CMS, project management systems and other applications able
159
- to process <i>calendar</i> information like agendas, tasks, reports, todos,
160
- journalling data and for communication with <i>calendar</i> systems and applications.
161
- </p>
162
- <p>
163
- iCalcreator features create, parse, edit and select <i>calendar</i> and <i>calendar</i> components.
164
- </p>
165
- <p>
166
- iCalcreator is built of a class file with support of a function class file and are <i>calendar</i>
167
- component property oriented. Development environment is <i>PHP</i> version 5.x but coding is done
168
- to meet 4.x backward compatibility and may work. Some functions requires <i>PHP</i> >= 5.2.0.
169
- </p>
170
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
171
-
172
- <a name="iCal"></a><h2>1.1 Ical</h2>
173
-
174
- The iCalendar format, as described in
175
- <dl>
176
- <dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a>
177
- <dd>&quot;Internet Calendaring and Scheduling Core Object Specification (iCalendar)&quot;
178
- <dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
179
- <dd>&quot;iCalendar Transport-Independent Interoperability Protocol (iTIP)&quot;<br>Scheduling Events, BusyTime, To-dos and Journal Entries
180
- </dl>
181
- <p class="quotes">. ..allows for the capture and exchange of information<br>normally stored within a calendaring and scheduling application.</p>
182
- and
183
- <p class="quotes">. ..is an exchange format between applications or systems.</p>
184
- <p><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a> and
185
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
186
- obsoletes, respectively,
187
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format" target="_blank">rfc2445</a> and
188
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format" target="_blank">rfc2446</a>.
189
- </p>
190
- <p>
191
- A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>. If You are not familiar with iCal, read this first!
192
- Knowledge of <i>calendar</i> protocol rfc5545/rfc5546 is to recommend.
193
- </p>
194
- <p>
195
- Any references to rfc2445, below, corresponds to rfc5545.
196
- </p>
197
- <p>
198
- All iCalcreator functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly!
199
- xCal (iCal xml) output format is supported but still experimental.
200
- </p>
201
- <br>
202
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
203
-
204
- <a name="This_manual"></a><h2>1.2 This manual</h2>
205
- This style is used for text.
206
- <p class="format">This style is used for formats.</p>
207
- <p class="example">This style is used for <i>PHP</i> coding examples.
208
- <span class="comment"> // this style is used for coding comments.</span>
209
- </p>
210
- <p class="comment">This style is used for content details.</p>
211
- <p class="quotes">This style is used for RFC2445 quotes.</p>
212
- <p>
213
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
214
-
215
- <a name="Versioning"></a><h2>1.3 Versioning</h2>
216
-
217
- The release numbering convention used is major.minor(.micro&nbsp;/&nbsp;suffix).
218
- <dl>
219
- <dt>Major
220
- <dd>Indicates a very large change in the core package. Rewrites or major milestones.
221
- <dt>Minor
222
- <dd>Significant amount of feature addition/modification.<br>odd number - development/experimental release<br> even number - production release
223
- <dt>Micro
224
- <dd>Primarily bug fix and maintenance number.
225
- <dt>Suffix
226
- <dd>rc1 for first release candidate etc.
227
- </dl>
228
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
229
-
230
- <a name="Support"></a><h2>1.4 Support</h2>
231
- <p>
232
- The main support channel is using iCalcreator
233
- <a title="Sourceforge" href="http://sourceforge.net/projects/icalcreator/forums/" target="_blank">Sourceforge</a> forum.
234
- </p>
235
- <p>
236
- Use the contact <a href="http://kigkonsult.se/contact/index.php" title="kigkonsult.se/contact" target="_blank">page</a>
237
- for queries, improvement/development issues or professional support and development.
238
- Please note that paid support or consulting service has the highest priority.
239
- </p>
240
- <p>
241
- Our services are available for support and designing and developing iCalcreator etc. customizations,
242
- adaptations and other <i>PHP</i>/MySQL solutions with a special focus on software utility and reliability,
243
- supported through our iterative acquire/design/transition process modell.
244
- </p>
245
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
246
-
247
- <a name="Donate"></a><h2>1.5 Donate</h2>
248
- <p>
249
- You can show your appreciation for our free software,
250
- and can support future development by making a donation to the kigkonsult project iCalcreator.
251
- </p>
252
- <p>
253
- Make a donation of any size by clicking <a href="http://kigkonsult.se/contact/index.php#Donate" title="Donate" target="_blank">here</a>.
254
- Thanks in advance!
255
- </p>
256
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
257
-
258
- <a name="INSTALL"></a><h2>1.6 Install</h2>
259
-
260
- <a name="Basic"></a><h3>1.6.1 Basic</h3>
261
- Unpack to any folder<br>
262
- - add this folder to your include-path<br>
263
- - or unpack to your application-(include)-folder<br>
264
- Add
265
- <p class="format">require_once &quot;[folder/]iCalcreator.class.php&quot;;</p>
266
- to your php-script.
267
- <br>
268
- <br>
269
- If using php version 5.1 or higher, the default timezone need to be set/altered, now &quot;Europe/Stockholm&quot;,
270
- line 50 in the iCalcreator.class.php file.
271
- <br>
272
- <br>
273
- When creating a new <i>calendar</i>/component instance, review <a href="#Calendar_configuration_functions">config</a> settings.
274
- <br>
275
- <br>
276
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
277
-
278
- <a name="Boost"></a><h3>1.6.2 Boost performance</h3>
279
- To really boost performance, kigkonsult can now offer <i>PHP</i> (4 and 5) packages (iCalcreator etc) in byte coded files,
280
- using <a href="http://www.ioncube.com" target="_blank"><u>ionCube</u></a> encoder.
281
- <br>
282
- <br>
283
- Encoded files use a platform independent file format, and can be run on any platform for which ionCube supply a (free) Loader.
284
- Currently supported platforms are Windows (e.g. NT, XP, W2K), Intel Linux, FreeBSD, NetBSD, OpenBSD, OS X, and Sparc Solaris.
285
- <br>
286
- <br>
287
- Visit kigkonsult.se contact <a href="http://kigkonsult.se/contact/index.php" target="_blank"><u>page</u></a> for information and purchase.
288
- <br>
289
- <br>
290
- Use basic install (above), install ionCube Loader (requires an update of &quot;php.ini&quot; or additional file in &quot;/etc/php.d&quot; folder AND the execute rights to use the <i>PHP</i> &quot;dl&quot; function) and simply replace the <i>PHP</i> class files with the encoded files.
291
- <br>
292
- <br>
293
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
294
-
295
- <a name="Additional_Descriptors"></a><h2>1.7 Additional Descriptors</h2>
296
- The following properties (as described in <a href="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" title="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" target="_blank">wikipedia:iCal</a>) may be required when importing iCal files into some calendaring software (MS etc.):
297
- <dl>
298
- <dt>on <i>calendar</i> level
299
- <dd><a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
300
- <dd><a href="#X-PROPERTY">X-WR-CALNAME</a> x-property
301
- <dd><a href="#X-PROPERTY">X-WR-CALDESC</a> x-property
302
- <dd><a href="#X-PROPERTY">X-WR-RELCALID</a> x-property <span class="comment">(a <a href="/wiki/Universally_Unique_Identifier" title="Universally Unique Identifier" class="mw-redirect">UUID</a>.)</span>
303
- <dd><a href="#X-PROPERTY">X-WR-TIMEZONE</a> x-property
304
- <dt>on component level
305
- <dd><a href="#DTSTAMP">DTSTAMP</a> property (in iCalcreator created automatically, if not set)
306
- <dd><a href="#UID">UID</a> property (in iCalcreator created automatically, if not set)
307
- <dt>on component level in <a href="#VTIMEZONE">vtimezone</a> component
308
- <dd><a href="#X-PROPERTY">X-LIC-LOCATION</a> x-property
309
- </dl>
310
- Recommendation is also to set <a href="#Unique_id">unique_id</a> when creating a new vcalendar/component instance, to ensure accurate setting of all components <a href="#UID">UID</a> property, even before <a href="#parse_merge">parse</a>.
311
- <p class="label">Example</p>
312
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
313
- $vcalendar = new vcalendar( $config );
314
- $vcalendar->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; )
315
- $vcalendar->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; );
316
- $vcalendar->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; );
317
- $uuid = &quot;3E26604A-50F4-4449-8B3E-E4F4932D05B5&quot;;
318
- $vcalendar->setProperty( &quot;X-WR-RELCALID&quot;, $uuid );
319
- $vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
320
- .. .
321
- </p>
322
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
323
-
324
- <a name="Addendum"></a><h2>1.8 Addendum</h2>
325
- <p>
326
- Download iCalcreator <a title="download iCalcreator coding samples" href="http://kigkonsult.se/downloads/index.php#iCalcreator" target="_blank">coding samples</a>.
327
- </p>
328
- <dl>
329
- <dt>Examples how to employ iCalcreator in software development
330
- <dd><a title="tinycal" href="http://kigkonsult.se/tinycal/index.php" target="_blank">tinycal</a>, <i>calendar</i>-in-a-box.
331
- <dd><a title="Create iCal event file on-demand from form" href="http://kigkonsult.se/eventCreator/index.php" target="_blank">The iCal file event editor</a>
332
- </dl>
333
- <p>
334
- If you are downloading the iCalcreatorusing sub-package, there are free iCal/xCal icons in the images directory, to use as buttons on a web page.
335
- </p>
336
- The <i>PHP</i> coding in this document or &quot;coding samples&quot; (above) are only for display of usage, recommendation is to use a
337
- coding standard, the following, incomplete, list is a good start;
338
- <dl>
339
- <dd><a href="http://www.dagbladet.no/development/phpcodingstandard/" target="_blank">http://www.dagbladet.no/development/phpcodingstandard/</a>
340
- <!--
341
- <br>
342
- <a href="http://ez.no/ezpublish/documentation/development/standards/php" target="_blank">http://ez.no/ezpublish/documentation/development/standards/php</a>
343
- -->
344
- <dd><a href="http://framework.zend.com/manual/en/coding-standard.overview.html" target="_blank">http://framework.zend.com/manual/en/coding-standard.overview.html</a>
345
- <!--
346
- <br>
347
- <a href="http://gforge.org/docman/view.php/1/2/coding-standards.html" target="_blank">http://gforge.org/docman/view.php/1/2/coding-standards.html</a>
348
- -->
349
- <dd><a href="http://pear.php.net/manual/en/standards.php" target="_blank">http://pear.php.net/manual/en/standards.php</a>
350
- </dl>
351
- <br>
352
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
353
-
354
- <a name="INDEX"></a><h2>1.9 INDEX</h2>
355
-
356
- <a href="#INTRO">1. INTRO</a><br>
357
- <br>
358
- <a href="#iCal">1.1 Ical</a><br>
359
- <a href="#This_manual">1.2 This manual</a><br>
360
- <a href="#Versioning">1.3 Versioning</a><br>
361
- <a href="#Support">1.4 Support</a><br>
362
- <a href="#Donate">1.5 Donate</a><br>
363
- <a href="#INSTALL">1.6 Install</a><br>
364
- <a href="#Basic">1.6.1 Basic</a><br>
365
- <a href="#Boost">1.6.2 Boost performance</a><br>
366
- <a href="#Additional_Descriptors">1.7 Additional_Descriptors</a><br>
367
- <a href="#Addendum">1.8 Addendum</a><br>
368
- <a href="#INDEX">1.9 INDEX</a><br>
369
- <br>
370
- <a href="#Calendar_Component_list">2. Calendar Component list</a><br>
371
- <br>
372
- <a href="#VCALENDAR">2.1 VCALENDAR</a><br>
373
- <a href="#VEVENT">2.2 VEVENT</a><br>
374
- <a href="#VTODO">2.3 VTODO</a><br>
375
- <a href="#VJOURNAL">2.4 VJOURNAL</a><br>
376
- <a href="#VFREEBUSY">2.5 VFREEBUSY</a><br>
377
- <a href="#VALARM">2.6 VALARM</a><br>
378
- <a href="#VTIMEZONE">2.7 VTIMEZONE</a><br>
379
- <a href="#CalProps">2.10 Component Properties</a><br>
380
- <br>
381
- <a href="#Function_list">3. Function list</a><br>
382
- <br>
383
- <a href="#Calendar_object_functions">3.1 Calendar object functions</a><br>
384
- <br>
385
- <a href="#Calendar_object_constructors">3.1.1 Constructors</a><br>
386
- <a href="#vcalendar">3.1.1.1 vcalendar</a><br>
387
- <a href="#vevent">3.1.1.2 vevent</a><br>
388
- <a href="#vtodo">3.1.1.3 vtodo</a><br>
389
- <a href="#vjournal">3.1.1.4 vjournal</a><br>
390
- <a href="#vfreebusy">3.1.1.5 vfreebusy</a><br>
391
- <a href="#valarm">3.1.1.6 valarm</a><br>
392
- <a href="#vtimezone">3.1.1.7 vtimezone</a><br>
393
- <a href="#standard">3.1.1.8 standard</a><br>
394
- <a href="#daylight">3.1.1.9 daylight</a><br>
395
- <br>
396
- <a href="#Calendar_property_functions">3.1.2 Calendar property functions</a><br>
397
- <a href="#deleteProperty">3.1.2.1 deleteProperty</a><br>
398
- <a href="#getProperty">3.1.2.2 getProperty</a><br>
399
- <a href="#setProperty">3.1.2.3 setProperty</a><br>
400
- <a href="#CALSCALE">3.1.2.4 CALSCALE</a><br>
401
- <a href="#METHOD">3.1.2.5 METHOD</a><br>
402
- <a href="#VERSION">3.1.2.6 VERSION</a><br>
403
- <a href="#X-PROPERTY">3.1.2.7 X-PROPERTY</a><br>
404
- <br>
405
- <a href="#Calendar_component_functions">3.1.3 Calendar component functions</a><br>
406
- <a href="#deleteComponent">3.1.3.1 deleteComponent</a><br>
407
- <a href="#getComponent">3.1.3.2 getComponent</a><br>
408
- <a href="#newComponent">3.1.3.3 newComponent</a><br>
409
- <a href="#selectComponents">3.1.3.4 selectComponents</a><br>
410
- <a href="#setComponent">3.1.3.5 setComponent</a><br>
411
- <br>
412
- <a href="#Calendar_inputoutput_functions">3.1.4 Calendar input/output functions</a><br>
413
- <a href="#parse_merge">3.1.4.1 parse and merge</a><br>
414
- <a href="#createCalendar">3.1.4.2 createCalendar</a><br>
415
- <a href="#returnCalendar">3.1.4.3 returnCalendar</a><br>
416
- <a href="#saveCalendar">3.1.4.4 saveCalendar</a><br>
417
- <a href="#sort">3.1.4.5 sort</a><br>
418
- <a href="#useCachedCalendar">3.1.4.6 useCachedCalendar</a><br>
419
- <br>
420
- <a href="#Calendar_configuration_functions">3.1.5 Calendar configuration functions</a><br>
421
- <a href="#configKeys">3.1.5.1 configuration keys</a><br>
422
- <a href="#getConfig">3.1.5.2 getConfig</a><br>
423
- <a href="#initConfig">3.1.5.3 <i>calendar</i>/component initialization</a><br>
424
- <a href="#setConfig">3.1.5.4 setConfig</a><br>
425
- <a href="#allowEmpty">3.1.5.5 Allow empty components</a><br>
426
- <a href="#Compsinfo">3.1.5.6 Component information</a><br>
427
- <a href="#Delimiter">3.1.5.7 Delimiter</a><br>
428
- <a href="#Directory">3.1.5.8 Directory</a><br>
429
- <a href="#Fileinfo">3.1.5.9 Fileinfo</a><br>
430
- <a href="#Filename">3.1.5.10 Filename</a><br>
431
- <a href="#Filesize">3.1.5.11 Filesize</a><br>
432
- <a href="#Format">3.1.5.12 Format</a><br>
433
- <a href="#Language">3.1.5.13 Language</a><br>
434
- <a href="#NewlineChar">3.1.5.14 NewlineChar</a><br>
435
- <a href="#dTZID">3.1.5.15 TZID</a><br>
436
- <a href="#Unique_id">3.1.5.16 Unique_id</a><br>
437
- <a href="#configURL">3.1.5.17 URL</a><br>
438
- <br>
439
- <a href="#Calendar_component_object_property_function_list">3.2 Calendar component/object property function list</a><br>
440
- <br>
441
- <a href="#deleteProperty_PROP">3.2.1 deleteProperty</a><br>
442
- <a href="#getProperty_PROP">3.2.2 getProperty</a><br>
443
- <a href="#parse">3.2.3 parse</a><br>
444
- <a href="#setProperty_PROP">3.2.4 setProperty</a><br>
445
- <br>
446
- <a href="#ACTION">3.2.5 ACTION</a><br>
447
- <a href="#ATTACH">3.2.6 ATTACH</a><br>
448
- <a href="#ATTENDEE">3.2.7 ATTENDEE</a><br>
449
- <a href="#CATEGORIES">3.2.8 CATEGORIES</a><br>
450
- <a href="#CLASS">3.2.9 CLASS</a><br>
451
- <a href="#COMMENT">3.2.10 COMMENT</a><br>
452
- <a href="#COMPLETED">3.2.11 COMPLETED</a><br>
453
- <a href="#CONTACT">3.2.12 CONTACT</a><br>
454
- <a href="#CREATED">3.2.13 CREATED</a><br>
455
- <a href="#DESCRIPTION">3.2.14 DESCRIPTION</a><br>
456
- <a href="#DTEND">3.2.15 DTEND</a><br>
457
- <a href="#DTSTAMP">3.2.16 DTSTAMP</a><br>
458
- <a href="#DTSTART">3.2.17 DTSTART</a><br>
459
- <a href="#DUE">3.2.18 DUE</a><br>
460
- <a href="#DURATION">3.2.19 DURATION</a><br>
461
- <a href="#EXDATE">3.2.20 EXDATE</a><br>
462
- <a href="#EXRULE">3.2.21 EXRULE</a><br>
463
- <a href="#FREEBUSY_PROP">3.2.22 FREEBUSY</a><br>
464
- <a href="#GEO">3.2.23 GEO</a><br>
465
- <a href="#LAST-MODIFIED">3.2.24 LAST-MODIFIED</a><br>
466
- <a href="#LOCATION">3.2.25 LOCATION</a><br>
467
- <a href="#ORGANIZER">3.2.26 ORGANIZER</a><br>
468
- <a href="#PERCENT-COMPLETE">3.2.27 PERCENT-COMPLETE</a><br>
469
- <a href="#PRIORITY">3.2.28 PRIORITY</a><br>
470
- <a href="#RDATE">3.2.29 RDATE</a><br>
471
- <a href="#RECURRENCE-ID">3.2.30 RECURRENCE-ID</a><br>
472
- <a href="#RELATED-TO">3.2.31 RELATED-TO</a><br>
473
- <a href="#REPEAT">3.2.32 REPEAT</a><br>
474
- <a href="#REQUEST-STATUS">3.2.33 REQUEST-STATUS</a><br>
475
- <a href="#RESOURCES">3.2.34 RESOURCES</a><br>
476
- <a href="#RRULE">3.2.35 RRULE</a><br>
477
- <a href="#SEQUENCE">3.2.36 SEQUENCE</a><br>
478
- <a href="#STATUS">3.2.37 STATUS</a><br>
479
- <a href="#SUMMARY">3.2.38 SUMMARY</a><br>
480
- <a href="#TRANSP">3.2.39 TRANSP</a><br>
481
- <a href="#TRIGGER">3.2.40 TRIGGER</a><br>
482
- <a href="#TZID">3.2.41 TZID</a><br>
483
- <a href="#TZNAME">3.2.42 TZNAME</a><br>
484
- <a href="#TZOFFSETFROM">3.2.43 TZOFFSETFROM</a><br>
485
- <a href="#TZOFFSETTO">3.2.44 TZOFFSETTO</a><br>
486
- <a href="#TZURL">3.2.45 TZURL</a><br>
487
- <a href="#UID">3.2.46 UID</a><br>
488
- <a href="#URL">3.2.47 URL</a><br>
489
- <a href="#X-PROPERTY_PROP">3.2.48 X-PROPERTY</a><br>
490
- <br>
491
- <a href="#Calendar_component_configuration_functions">3.3 Calendar Component configuration functions</a><br>
492
- <br>
493
- <a href="#Language_PROP">3.3.1 Language</a><br>
494
- <br>
495
- <a href="#Calendar_component_object_misc_functions">3.4 Calendar component object misc. functions</a><br>
496
- <br>
497
- <a href="#deleteComponent_PROP">3.4.1 deleteComponent</a><br>
498
- <a href="#getComponent_PROP">3.4.2 getComponent</a><br>
499
- <a href="#newComponent_PROP">3.4.3 newComponent</a><br>
500
- <a href="#setComponent_PROP">3.4.4 setComponent</a><br>
501
- <br>
502
- <a href="#iCalUtilityFunctions">4. iCalUtilityFunctions</a><br>
503
- <br>
504
- <a href="#createTimezone">4.1 createTimezone</a><br>
505
- <a href="#transformDateTime">4.2 transformDateTime</a><br>
506
- <br>
507
- <a href="#Copyright_and_Licence">5. COPYRIGHT AND LICENSE</a><br>
508
- <br>
509
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
510
-
511
- <a name="Calendar_Component_list"></a><h1>2. Calendar Component list</h1>
512
- Quote from <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar)!
513
- (Described in iCal output format, content corresponds to xCal format.)<br>
514
- <a name="VCALENDAR"></a><h2>2.1 VCALENDAR</h2>
515
- <p class="center">icalobject = 1*(&quot;BEGIN&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF</p>
516
- <p class="center">icalbody</p>
517
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF)</p>
518
- <br>
519
- icalbody = calprops component
520
- <br>
521
- calprops = 2*(
522
- <br>
523
- <p class="center">&quot;prodid&quot; and &quot;version&quot; are both REQUIRED, but MUST NOT occur more than once
524
- <p class="center">prodid / <a href="#VERSION">version</a> /</p>
525
- <p class="center">&quot;calscale&quot;and &quot;method&quot;are optional, but MUST NOT occur more than once</p>
526
- <p class="center"><a href="#CALSCALE">calscale</a> / <a href="#METHOD">method</a> /</p>
527
- <p class="center"><a href="#X-PROPERTY">x-prop</a></p>
528
- )
529
- <br>
530
- <p class="center">component = 1*(<a href="#VEVENT">eventc</a> / <a href="#VTODO">todoc</a> / <a href="#VJOURNAL">journalc</a> / <a href="#VFREEBUSY">freebusyc</a> / <a href="#VTIMEZONE">timezonec</a> / iana-comp* / x-comp*)</p>
531
- <p class="center">iana-comp = &quot;BEGIN&quot; &quot;:&quot; iana-token CRLF</p>
532
- <p class="center">1*contentline</p>
533
- <p class="center">&quot;END&quot; &quot;:&quot; iana-token CRLF</p>
534
- <p class="center">x-comp = &quot;BEGIN&quot; &quot;:&quot; x-name CRLF</p>
535
- <p class="center">1*contentline</p>
536
- <p class="center">&quot;END&quot; &quot;:&quot; x-name CRLF</p>
537
- *) <span class="comment">not supported by iCalcreator</span>
538
- <br>
539
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
540
-
541
- <a name="VEVENT"></a><h2>2.2 VEVENT</h2>
542
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
543
- <p class="center">eventprop *alarmc</p>
544
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
545
- eventprop = *(
546
- <p class="center">the following are optional,but MUST NOT occur more than once</p>
547
- <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> /</p>
548
- <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PRIORITY">priority</a> / </p>
549
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> / </p>
550
- <p class="center"><a href="#TRANSP">transp</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / <a href="#RECURRENCE-ID">recurid</a> /</p>
551
- <p class="center">either &quot;<a href="#DTEND">dtend</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;eventprop&quot;, </p>
552
- <p class="center">but &quot;<a href="#DTEND">dtend</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;eventprop&quot;</p>
553
- <p class="center"><a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> /</p>
554
- <p class="center">the following are optional, and MAY occur more than once</p>
555
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
556
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
557
- <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
558
- )
559
- <br>
560
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
561
-
562
- <a name="VTODO"></a><h2>2.3 VTODO</h2>
563
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
564
- <p class="center">todoprop *alarmc</p>
565
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
566
- todoprop = *(
567
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
568
- <p class="center"><a href="#CLASS">class</a> / <a href="#COMPLETED">completed</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTAMP">dtstamp</a> / <a href="#DTSTART">dtstart</a> / </p>
569
- <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PERCENT-COMPLETE">percent</a> / <a href="#PRIORITY">priority</a> / </p>
570
- <p class="center"><a href="#RECURRENCE-ID">recurid</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
571
- <p class="center">either &quot;<a href="#DUE">due</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;todoprop&quot;,</p>
572
- <p class="center"> but &quot;<a href="#DUE">due</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;todoprop&quot;</p>
573
- <p class="center"><a href="#DUE">due</a> / <a href="#DURATION">duration</a> /</p>
574
- <p class="center">the following are optional,and MAY occur more than once</p>
575
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
576
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
577
- <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
578
- )
579
- <br>
580
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
581
-
582
- <a name="VJOURNAL"></a><h2>2.4 VJOURNAL</h2>
583
- <p class="center">journalc = &quot;BEGIN&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
584
- <p class="center">jourprop</p>
585
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
586
- jourprop = *(
587
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
588
- <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> / </p>
589
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#ORGANIZER">organizer</a> / <a href="#RECURRENCE-ID">recurid</a> / </p>
590
- <p class="center"><a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
591
- <p class="center">the following are optional,and MAY occur more than once</p>
592
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> /</p>
593
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#RELATED-TO">related</a> / </p>
594
- <p class="center"><a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
595
- )
596
- <br>
597
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
598
-
599
- <a name="VFREEBUSY"></a><h2>2.5 VFREEBUSY</h2>
600
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
601
- <p class="center">fbprop</p>
602
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
603
- fbprop = *(
604
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
605
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#DTSTART">dtstart</a> / <a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> / </p>
606
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#ORGANIZER">organizer</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / </p>
607
- <p class="center">the following are optional,and MAY occur more than once</p>
608
- <p class="center"><a href="#ATTENDEE">attendee</a> / <a href="#COMMENT">comment</a> / <a href="#FREEBUSY_PROP">freebusy</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
609
- )
610
- <br>
611
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
612
-
613
- <a name="VALARM"></a><h2>2.6 VALARM</h2>
614
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p>
615
- <p class="center">(audioprop / dispprop / emailprop / procprop)</p>
616
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p> audioprop = 2*(
617
- <p class="center">&quot;<a href="#ACTION">action</a>&quot; and &quot;<a href="#TRIGGER">trigger</a>&quot; are both REQUIRED, but MUST NOT occur more than once</p>
618
- <p class="center"><a href="#ACTION">action</a> / <a href="#TRIGGER">trigger</a> /</p>
619
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
620
- <p class="center">but if one occurs, so MUST the other</p>
621
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
622
- <p class="center">the following is optional, but MUST NOT occur more than once</p>
623
- <p class="center"><a href="#ATTACH">attach</a> / </p>
624
- <p class="center">the following is optional, and MAY occur more than once</p>
625
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
626
- )
627
- <br>
628
- dispprop = 3*(
629
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
630
- <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> /</p>
631
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
632
- <p class="center">but if one occurs, so MUST the other</p>
633
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
634
- <p class="center">the following is optional, and MAY occur more than once</p>
635
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
636
- )
637
- <br>
638
- emailprop = 5*(
639
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
640
- <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> / <a href="#SUMMARY">summary</a></p>
641
- <p class="center">the following is REQUIRED, and MAY occur more than once</p>
642
- <p class="center"><a href="#ATTENDEE">attendee</a> / </p>
643
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
644
- <p class="center">but if one occurs, so MUST the other</p>
645
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
646
- <p class="center">the following are optional, and MAY occur more than once</p>
647
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
648
- )
649
- <br>
650
- procprop = 3*(
651
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
652
- <p class="center"><a href="#ACTION">action</a> / <a href="#ATTACH">attach</a> / <a href="#TRIGGER">trigger</a> /</p>
653
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
654
- <p class="center">but if one occurs, so MUST the other</p>
655
- <p class="center"><a href="#DURATION">duration</a> /
656
- <a href="#REPEAT">repeat</a> /</p>
657
- <p class="center">&quot;<a href="#DESCRIPTION">description</a>&quot; is optional, and MUST NOT occur more than once</p>
658
- <p class="center"><a href="#DESCRIPTION">description</a> / </p>
659
- <p class="center">the following is optional, and MAY occur more than once</p>
660
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
661
- )
662
- <br>
663
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
664
-
665
- <a name="VTIMEZONE"></a><h2>2.7 VTIMEZONE</h2>
666
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
667
- 2*(
668
- <p class="center">&quot;<a href="#TZID">tzid</a>&quot; is required, but MUST NOT occur more than once</p>
669
- <p class="center"><a href="#TZID">tzid</a> / </p>
670
- <p class="center">&quot;<a href="#LAST-MODIFIED">last-mod</a>&quot; and &quot;<a href="#TZURL">tzurl</a>&quot; are optional, but MUST NOT occur more than once</p>
671
- <p class="center"><a href="#LAST-MODIFIED">last-mod</a> / <a href="#TZURL">tzurl</a> /</p>
672
- <p class="center">one of &quot;standardc&quot; or &quot;daylightc&quot; MUST occur and each MAY occur more than once.</p>
673
- <p class="center">standardc / daylightc /</p>
674
- <p class="center">the following is optional, and MAY occur more than once</p>
675
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
676
- )
677
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
678
- <p class="center">standardc = &quot;BEGIN&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
679
- <p class="center">tzprop</p>
680
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
681
- <p class="center">daylightc = &quot;BEGIN&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
682
- <p class="center">tzprop</p>
683
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
684
- <br>
685
- tzprop = 3*(
686
- <p class="center">the following are each REQUIRED, but MUST NOT occur more than once</p>
687
- <p class="center"><a href="#DTSTART">dtstart</a> / <a href="#TZOFFSETTO">tzoffsetto</a> / <a href="#TZOFFSETFROM">tzoffsetfrom</a> /</p>
688
- <p class="center">the following are optional, and MAY occur more than once</p>
689
- <p class="center"><a href="#COMMENT">comment</a> /<a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#TZNAME">tzname</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
690
- )
691
- <br>
692
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
693
-
694
- <a name="CalProps"></a><h2>2.8 Component Properties</h2>
695
- A comprehensive table showing relation between <i>calendar</i> components and properties.
696
- <a href="#VTIMEZONE">vtimezone</a> properties are not included.
697
- <br><br>
698
- <table>
699
- <tr>
700
- <td>0-1</td>
701
- <td colspan="8">OPTIONAL property, MUST NOT occur more than once.</td>
702
- </tr>
703
- <tr>
704
- <td>0-m</td>
705
- <td colspan="8">OPTIONAL property, MAY occur more than once.</td>
706
- </tr>
707
- <tr>
708
- <td>0&nbsp;/&nbsp;1=1</td>
709
- <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST the other</td>
710
- </tr>
711
- <tr>
712
- <td>0*1</td>
713
- <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST NOT the other</td>
714
- </tr>
715
- <tr>
716
- <td>1-m</td>
717
- <td colspan="8">REQUIRED property, MAY occur more than once.</td>
718
- </tr>
719
- <tr>
720
- <td>1</td>
721
- <td colspan="8">REQUIRED property, MUST NOT occur more than once.</td>
722
- </tr>
723
- <tr>
724
- <td colspan="9">&nbsp;</td>
725
- </tr>
726
- <tr>
727
- <td>&nbsp;</td>
728
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VEVENT">v<br>e<br>v<br>e<br>n<br>t</a></td>
729
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VTODO">v<br>t<br>o<br>d<br>o</a></td>
730
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VJOURNAL">v<br>j<br>o<br>u<br>r<br>n<br>a<br>l</a></td>
731
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VFREEBUSY">v<br>f<br>r<br>e<br>e<br>b<br>u<br>s<br>y</a></td>
732
- <td class="bl top center" colspan="4"><a class="ref" href="#VALARM">v&nbsp;a&nbsp;l&nbsp;a&nbsp;r&nbsp;m</a></td>
733
- </tr>
734
- <tr>
735
- <td class="bb">&nbsp;</td>
736
- <td class="bl bb center ref"><br><br><br><br>a<br>u<br>d<br>i<br>o</td>
737
- <td class="bl bb center ref"><br><br>d<br>i<br>s<br>p<br>l<br>a<br>y</td>
738
- <td class="bl bb center ref"><br><br><br><br>e<br>m<br>a<br>i<br>l</td>
739
- <td class="bl bb center ref">p<br>r<br>o<br>c<br>e<br>d<br>u<br>r<br>e</td>
740
- </tr>
741
- <tr>
742
- <td class="bb"><a class="ref" href="#ACTION">action</a></td>
743
- <td class="blb">&nbsp;</td>
744
- <td class="blb">&nbsp;</td>
745
- <td class="blb">&nbsp;</td>
746
- <td class="blb">&nbsp;</td>
747
- <td class="blb">1</td>
748
- <td class="blb">1</td>
749
- <td class="blb">1</td>
750
- <td class="blb">1</td>
751
- </tr>
752
- <tr>
753
- <td class="bb"><a class="ref" href="#ATTACH">attach</a></td>
754
- <td class="blb">0-m</td>
755
- <td class="blb">0-m</td>
756
- <td class="blb">0-m</td>
757
- <td class="blb"></td>
758
- <td class="blb">0-1</td>
759
- <td class="blb">&nbsp;</td>
760
- <td class="blb">0-m</td>
761
- <td class="blb">1</td>
762
- </tr>
763
- <tr>
764
- <td class="bb"><a class="ref" href="#ATTENDEE">attendee</a></td>
765
- <td class="blb">0-m</td>
766
- <td class="blb">0-m</td>
767
- <td class="blb">0-m</td>
768
- <td class="blb">0-m</td>
769
- <td class="blb">&nbsp;</td>
770
- <td class="blb">&nbsp;</td>
771
- <td class="blb">1-m</td>
772
- <td class="blb">&nbsp;</td>
773
- </tr>
774
- <tr>
775
- <td class="bb"><a class="ref" href="#CATEGORIES">categories</a></td>
776
- <td class="blb">0-m</td>
777
- <td class="blb">0-m</td>
778
- <td class="blb">0-m</td>
779
- <td class="blb">&nbsp;</td>
780
- <td class="blb">&nbsp;</td>
781
- <td class="blb">&nbsp;</td>
782
- <td class="blb">&nbsp;</td>
783
- <td class="blb">&nbsp;</td>
784
- </tr>
785
- <tr>
786
- <td class="bb"><a class="ref" href="#CLASS">class</a></td>
787
- <td class="blb">0-1</td>
788
- <td class="blb">0-1</td>
789
- <td class="blb">0-1</td>
790
- <td class="blb">&nbsp;</td>
791
- <td class="blb">&nbsp;</td>
792
- <td class="blb">&nbsp;</td>
793
- <td class="blb">&nbsp;</td>
794
- <td class="blb">&nbsp;</td>
795
- </tr>
796
- <tr>
797
- <td class="bb"><a class="ref" href="#COMMENT">comment</a></td>
798
- <td class="blb">0-m</td>
799
- <td class="blb">0-m</td>
800
- <td class="blb">0-m</td>
801
- <td class="blb">0-m</td>
802
- <td class="blb">&nbsp;</td>
803
- <td class="blb">&nbsp;</td>
804
- <td class="blb">&nbsp;</td>
805
- <td class="blb">&nbsp;</td>
806
- </tr>
807
- <tr>
808
- <td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
809
- <td class="blb">&nbsp;</td>
810
- <td class="blb">0-1</td>
811
- <td class="blb">&nbsp;</td>
812
- <td class="blb">&nbsp;</td>
813
- <td class="blb">&nbsp;</td>
814
- <td class="blb">&nbsp;</td>
815
- <td class="blb">&nbsp;</td>
816
- <td class="blb">&nbsp;</td>
817
- </tr>
818
- <tr>
819
- <td class="bb"><a class="ref" href="#CONTACT">contact</a></td>
820
- <td class="blb">0-m</td>
821
- <td class="blb">0-m</td>
822
- <td class="blb">0-m</td>
823
- <td class="blb">0-1</td>
824
- <td class="blb">&nbsp;</td>
825
- <td class="blb">&nbsp;</td>
826
- <td class="blb">&nbsp;</td>
827
- <td class="blb">&nbsp;</td>
828
- </tr>
829
- <tr>
830
- <td class="bb"><a class="ref" href="#CREATED">created</a></td>
831
- <td class="blb">0-1</td>
832
- <td class="blb">0-1</td>
833
- <td class="blb">0-1</td>
834
- <td class="blb">&nbsp;</td>
835
- <td class="blb">&nbsp;</td>
836
- <td class="blb">&nbsp;</td>
837
- <td class="blb">&nbsp;</td>
838
- <td class="blb">&nbsp;</td>
839
- </tr>
840
- <tr>
841
- <td class="bb"><a class="ref" href="#DESCRIPTION">description</a></td>
842
- <td class="blb">0-1</td>
843
- <td class="blb">0-1</td>
844
- <td class="blb">0-m</td>
845
- <td class="blb">&nbsp;</td>
846
- <td class="blb">&nbsp;</td>
847
- <td class="blb">1</td>
848
- <td class="blb">1</td>
849
- <td class="blb">0-1</td>
850
- </tr>
851
- <tr>
852
- <td class="bb"><a class="ref" href="#DTEND">dtend</a></td>
853
- <td class="blb">0*1</td>
854
- <td class="blb">&nbsp;</td>
855
- <td class="blb">&nbsp;</td>
856
- <td class="blb">0-1</td>
857
- <td class="blb">&nbsp;</td>
858
- <td class="blb">&nbsp;</td>
859
- <td class="blb">&nbsp;</td>
860
- <td class="blb">&nbsp;</td>
861
- </tr>
862
- <tr>
863
- <td class="bb"><a class="ref" href="#DTSTAMP">dtstamp</a></td>
864
- <td class="blb">0-1</td>
865
- <td class="blb">0-1</td>
866
- <td class="blb">0-1</td>
867
- <td class="blb">0-1</td>
868
- <td class="blb">&nbsp;</td>
869
- <td class="blb">&nbsp;</td>
870
- <td class="blb">&nbsp;</td>
871
- <td class="blb">&nbsp;</td>
872
- </tr>
873
- <tr>
874
- <td class="bb"><a class="ref" href="#DTSTART">dtstart</a></td>
875
- <td class="blb">0-1</td>
876
- <td class="blb">0-1</td>
877
- <td class="blb">0-1</td>
878
- <td class="blb">0-1</td>
879
- <td class="blb">&nbsp;</td>
880
- <td class="blb">&nbsp;</td>
881
- <td class="blb">&nbsp;</td>
882
- <td class="blb">&nbsp;</td>
883
- </tr>
884
- <tr>
885
- <td class="bb"><a class="ref" href="#DUE">due</a></td>
886
- <td class="blb">&nbsp;</td>
887
- <td class="blb">0*1</td>
888
- <td class="blb">&nbsp;</td>
889
- <td class="blb">&nbsp;</td>
890
- <td class="blb">&nbsp;</td>
891
- <td class="blb">&nbsp;</td>
892
- <td class="blb">&nbsp;</td>
893
- <td class="blb">&nbsp;</td>
894
- </tr>
895
- <tr>
896
- <td class="bb"><a class="ref" href="#DURATION">duration</a></td>
897
- <td class="blb">0*1</td>
898
- <td class="blb">0*1</td>
899
- <td class="blb">&nbsp;</td>
900
- <td class="blb">0-1</td>
901
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
902
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
903
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
904
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
905
- </tr>
906
- <tr>
907
- <td class="bb"><a class="ref" href="#EXDATE">exdate</a></td>
908
- <td class="blb">0-m</td>
909
- <td class="blb">0-m</td>
910
- <td class="blb">0-m</td>
911
- <td class="blb">&nbsp;</td>
912
- <td class="blb">&nbsp;</td>
913
- <td class="blb">&nbsp;</td>
914
- <td class="blb">&nbsp;</td>
915
- <td class="blb">&nbsp;</td>
916
- </tr>
917
- <tr>
918
- <td class="bb"><a class="ref" href="#EXRULE">exrule</a></td>
919
- <td class="blb">0-m</td>
920
- <td class="blb">0-m</td>
921
- <td class="blb">0-m</td>
922
- <td class="blb">&nbsp;</td>
923
- <td class="blb">&nbsp;</td>
924
- <td class="blb">&nbsp;</td>
925
- <td class="blb">&nbsp;</td>
926
- <td class="blb">&nbsp;</td>
927
- </tr>
928
- <tr>
929
- <td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
930
- <td class="blb">&nbsp;</td>
931
- <td class="blb">&nbsp;</td>
932
- <td class="blb">&nbsp;</td>
933
- <td class="blb">0-m</td>
934
- <td class="blb">&nbsp;</td>
935
- <td class="blb">&nbsp;</td>
936
- <td class="blb">&nbsp;</td>
937
- <td class="blb">&nbsp;</td>
938
- </tr>
939
- <tr>
940
- <td class="bb"><a class="ref" href="#GEO">geo</a></td>
941
- <td class="blb">0-1</td>
942
- <td class="blb">0-1</td>
943
- <td class="blb">&nbsp;</td>
944
- <td class="blb">&nbsp;</td>
945
- <td class="blb">&nbsp;</td>
946
- <td class="blb">&nbsp;</td>
947
- <td class="blb">&nbsp;</td>
948
- <td class="blb">&nbsp;</td>
949
- </tr>
950
- <tr>
951
- <td class="bb"><a class="ref" href="#LAST-MODIFIED">last-mod</a></td>
952
- <td class="blb">0-1</td>
953
- <td class="blb">0-1</td>
954
- <td class="blb">0-1</td>
955
- <td class="blb"></td>
956
- <td class="blb">&nbsp;</td>
957
- <td class="blb">&nbsp;</td>
958
- <td class="blb">&nbsp;</td>
959
- <td class="blb">&nbsp;</td>
960
- </tr>
961
- <tr>
962
- <td class="bb"><a class="ref" href="#LOCATION">location</a></td>
963
- <td class="blb">0-1</td>
964
- <td class="blb">0-1</td>
965
- <td class="blb">&nbsp;</td>
966
- <td class="blb">&nbsp;</td>
967
- <td class="blb">&nbsp;</td>
968
- <td class="blb">&nbsp;</td>
969
- <td class="blb">&nbsp;</td>
970
- <td class="blb">&nbsp;</td>
971
- </tr>
972
- <tr>
973
- <td class="bb"><a class="ref" href="#ORGANIZER">organizer</a></td>
974
- <td class="blb">0-1</td>
975
- <td class="blb">0-1</td>
976
- <td class="blb">0-1</td>
977
- <td class="blb">0-1</td>
978
- <td class="blb">&nbsp;</td>
979
- <td class="blb">&nbsp;</td>
980
- <td class="blb">&nbsp;</td>
981
- <td class="blb">&nbsp;</td>
982
- </tr>
983
- <tr>
984
- <td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
985
- <td class="blb">&nbsp;</td>
986
- <td class="blb">0-1</td>
987
- <td class="blb">&nbsp;</td>
988
- <td class="blb">&nbsp;</td>
989
- <td class="blb">&nbsp;</td>
990
- <td class="blb">&nbsp;</td>
991
- <td class="blb">&nbsp;</td>
992
- <td class="blb">&nbsp;</td>
993
- </tr>
994
- <tr>
995
- <td class="bb"><a class="ref" href="#PRIORITY">priority</a></td>
996
- <td class="blb">0-1</td>
997
- <td class="blb">0-1</td>
998
- <td class="blb">&nbsp;</td>
999
- <td class="blb">&nbsp;</td>
1000
- <td class="blb">&nbsp;</td>
1001
- <td class="blb">&nbsp;</td>
1002
- <td class="blb">&nbsp;</td>
1003
- <td class="blb">&nbsp;</td>
1004
- </tr>
1005
- <tr>
1006
- <td class="bb"><a class="ref" href="#RDATE">rdate</a></td>
1007
- <td class="blb">0-m</td>
1008
- <td class="blb">0-m</td>
1009
- <td class="blb">0-m</td>
1010
- <td class="blb">&nbsp;</td>
1011
- <td class="blb">&nbsp;</td>
1012
- <td class="blb">&nbsp;</td>
1013
- <td class="blb">&nbsp;</td>
1014
- <td class="blb">&nbsp;</td>
1015
- </tr>
1016
- <tr>
1017
- <td class="bb"><a class="ref" href="#RECURRENCE-ID">recurid</a></td>
1018
- <td class="blb">0-1</td>
1019
- <td class="blb">0-1</td>
1020
- <td class="blb">0-1</td>
1021
- <td class="blb">&nbsp;</td>
1022
- <td class="blb">&nbsp;</td>
1023
- <td class="blb">&nbsp;</td>
1024
- <td class="blb">&nbsp;</td>
1025
- <td class="blb">&nbsp;</td>
1026
- </tr>
1027
- <tr>
1028
- <td class="bb"><a class="ref" href="#RELATED-TO">related</a></td>
1029
- <td class="blb">0-m</td>
1030
- <td class="blb">0-m</td>
1031
- <td class="blb">0-m</td>
1032
- <td class="blb">&nbsp;</td>
1033
- <td class="blb">&nbsp;</td>
1034
- <td class="blb">&nbsp;</td>
1035
- <td class="blb">&nbsp;</td>
1036
- <td class="blb">&nbsp;</td>
1037
- </tr>
1038
- <tr>
1039
- <td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
1040
- <td class="blb">&nbsp;</td>
1041
- <td class="blb">&nbsp;</td>
1042
- <td class="blb">&nbsp;</td>
1043
- <td class="blb">&nbsp;</td>
1044
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
1045
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
1046
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
1047
- <td class="blb">0&nbsp;/&nbsp;1=1</td>
1048
- </tr>
1049
- <tr>
1050
- <td class="bb"><a class="ref" href="#RESOURCES">resources</a></td>
1051
- <td class="blb">0-m</td>
1052
- <td class="blb">0-m</td>
1053
- <td class="blb">&nbsp;</td>
1054
- <td class="blb">&nbsp;</td>
1055
- <td class="blb">&nbsp;</td>
1056
- <td class="blb">&nbsp;</td>
1057
- <td class="blb">&nbsp;</td>
1058
- <td class="blb">&nbsp;</td>
1059
- </tr>
1060
- <tr>
1061
- <td class="bb"><a class="ref" href="#RRULE">rrule</a></td>
1062
- <td class="blb">0-m</td>
1063
- <td class="blb">0-m</td>
1064
- <td class="blb">0-m</td>
1065
- <td class="blb">&nbsp;</td>
1066
- <td class="blb">&nbsp;</td>
1067
- <td class="blb">&nbsp;</td>
1068
- <td class="blb">&nbsp;</td>
1069
- <td class="blb">&nbsp;</td>
1070
- </tr>
1071
- <tr>
1072
- <td class="bb"><a class="ref" href="#REQUEST-STATUS">rstatus</a></td>
1073
- <td class="blb">0-m</td>
1074
- <td class="blb">0-m</td>
1075
- <td class="blb">0-m</td>
1076
- <td class="blb">0-m</td>
1077
- <td class="blb">&nbsp;</td>
1078
- <td class="blb">&nbsp;</td>
1079
- <td class="blb">&nbsp;</td>
1080
- <td class="blb">&nbsp;</td>
1081
- </tr>
1082
- <tr>
1083
- <td class="bb"><a class="ref" href="#SEQUENCE">sequence</a></td>
1084
- <td class="blb">0-1</td>
1085
- <td class="blb">0-1</td>
1086
- <td class="blb">0-1</td>
1087
- <td class="blb">&nbsp;</td>
1088
- <td class="blb">&nbsp;</td>
1089
- <td class="blb">&nbsp;</td>
1090
- <td class="blb">&nbsp;</td>
1091
- <td class="blb">&nbsp;</td>
1092
- </tr>
1093
- <tr>
1094
- <td class="bb"><a class="ref" href="#STATUS">status</a></td>
1095
- <td class="blb">0-1</td>
1096
- <td class="blb">0-1</td>
1097
- <td class="blb">0-1</td>
1098
- <td class="blb">&nbsp;</td>
1099
- <td class="blb">&nbsp;</td>
1100
- <td class="blb">&nbsp;</td>
1101
- <td class="blb">&nbsp;</td>
1102
- <td class="blb">&nbsp;</td>
1103
- </tr>
1104
- <tr>
1105
- <td class="bb"><a class="ref" href="#SUMMARY">summary</a></td>
1106
- <td class="blb">0-1</td>
1107
- <td class="blb">0-1</td>
1108
- <td class="blb">0-1</td>
1109
- <td class="blb">&nbsp;</td>
1110
- <td class="blb">&nbsp;</td>
1111
- <td class="blb">&nbsp;</td>
1112
- <td class="blb">1</td>
1113
- <td class="blb">&nbsp;</td>
1114
- </tr>
1115
- <tr>
1116
- <td class="bb"><a class="ref" href="#TRANSP">transp</a></td>
1117
- <td class="blb">0-1</td>
1118
- <td class="blb">&nbsp;</td>
1119
- <td class="blb">&nbsp;</td>
1120
- <td class="blb">&nbsp;</td>
1121
- <td class="blb">&nbsp;</td>
1122
- <td class="blb">&nbsp;</td>
1123
- <td class="blb">&nbsp;</td>
1124
- <td class="blb">&nbsp;</td>
1125
- </tr>
1126
- <tr>
1127
- <td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
1128
- <td class="blb">&nbsp;</td>
1129
- <td class="blb">&nbsp;</td>
1130
- <td class="blb">&nbsp;</td>
1131
- <td class="blb">&nbsp;</td>
1132
- <td class="blb">1</td>
1133
- <td class="blb">1</td>
1134
- <td class="blb">1</td>
1135
- <td class="blb">1</td>
1136
- </tr>
1137
- <tr>
1138
- <td class="bb"><a class="ref" href="#UID">uid</a></td>
1139
- <td class="blb">0-1</td>
1140
- <td class="blb">0-1</td>
1141
- <td class="blb">0-1</td>
1142
- <td class="blb">0-1</td>
1143
- <td class="blb">&nbsp;</td>
1144
- <td class="blb">&nbsp;</td>
1145
- <td class="blb">&nbsp;</td>
1146
- <td class="blb">&nbsp;</td>
1147
- </tr>
1148
- <tr>
1149
- <td class="bb"><a class="ref" href="#URL">url</a></td>
1150
- <td class="blb">0-1</td>
1151
- <td class="blb">0-1</td>
1152
- <td class="blb">0-1</td>
1153
- <td class="blb">0-1</td>
1154
- <td class="blb">&nbsp;</td>
1155
- <td class="blb">&nbsp;</td>
1156
- <td class="blb">&nbsp;</td>
1157
- <td class="blb">&nbsp;</td>
1158
- </tr>
1159
- <tr>
1160
- <td class="bb"><a class="ref" href="#X-PROPERTY_PROP">x-prop</a></td>
1161
- <td class="blb">0-m</td>
1162
- <td class="blb">0-m</td>
1163
- <td class="blb">0-m</td>
1164
- <td class="blb">0-m</td>
1165
- <td class="blb">0-m</td>
1166
- <td class="blb">0-m</td>
1167
- <td class="blb">0-m</td>
1168
- <td class="blb">0-m</td>
1169
- </tr>
1170
- </table>
1171
- <p>
1172
- If not set, the <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties
1173
- are automatically created by iCalcreator<br>
1174
- for <a href="#VEVENT">vevent</a>,<a href="#VTODO">vtodo</a>, <a href="#VJOURNAL">vjournal</a> and <a href="#VFREEBUSY">vfreebusy</a> components<br>
1175
- when using <i>calendar</i> functions <a href="#saveCalendar">saveCalendar</a> or <a href="#returnCalendar">returnCalendar</a><br>
1176
- or when fetching DTSTAMP/UID property value with the component function <a href="#getProperty_PROP">getProperty</a>.
1177
- </p>
1178
- <br>
1179
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
1180
-
1181
- <a name="Function_list"></a><h1>3. Function list</h1>
1182
-
1183
- <a name="Calendar_object_functions"></a><h2>3.1 Calendar object functions</h2>
1184
-
1185
- <a name="Calendar_object_constructors"></a><h3>3.1.1 Constructors</h3>
1186
- <a name="vcalendar"></a><h2>3.1.1.1 vcalendar</h2>
1187
- Create a new <a href="#VCALENDAR">VCALENDAR</a> object.
1188
- <p class="label">Format</p>
1189
- <p class="format">vcalendar()</p>
1190
- <p class="label">Example</p>
1191
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1192
- $vcalendar = new vcalendar( $config );
1193
- ...
1194
- </p>
1195
- <br>
1196
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1197
-
1198
- <a name="vevent"></a><h4>3.1.1.2 vevent</h4>
1199
- <p class="label">Format 1</p>
1200
- Create a new <a href="#VEVENT">VEVENT</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
1201
- <p class="format">newComponent( &quot;vevent&quot; )</p>
1202
- <p class="label">Example</p>
1203
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1204
- $vcalendar = new vcalendar( $config );
1205
- ...
1206
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
1207
- $vevent->setProperty(...
1208
- ...
1209
- </p>
1210
- <p class="label">Format 2</p>
1211
- Create a new <a href="#VEVENT">VEVENT</a> object.
1212
- <p class="format">vevent()</p>
1213
- <p class="label">Example</p>
1214
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1215
- $vcalendar = new vcalendar( $config );
1216
- ...
1217
- $vevent = new vevent();
1218
- $vevent->setProperty(...
1219
- ...
1220
- $vcalendar->setComponent( $vevent );
1221
- ...
1222
- </p>
1223
- <br>
1224
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1225
-
1226
- <a name="vtodo"></a><h4>3.1.1.3 vtodo</h4>
1227
- <p class="label">Format 1</p>
1228
- Create a new <a href="#VTODO">VTODO</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
1229
- <p class="format">newComponent( &quot;vtodo&quot; )</p>
1230
- <p class="label">Example</p>
1231
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1232
- $vcalendar = new vcalendar( $config );
1233
- ...
1234
- $vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
1235
- $vtodo->setProperty(...
1236
- ...
1237
- </p>
1238
- <p class="label">Format 2</p>
1239
- Create a new <a href="#VTODO">VTODO</a> object.
1240
- <p class="format">vtodo()</p>
1241
- <p class="label">Example</p>
1242
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1243
- $vcalendar = new vcalendar( $config );
1244
- ...
1245
- $vtodo = new vtodo();
1246
- $vtodo->setProperty(...
1247
- ...
1248
- $vcalendar->setComponent( $vtodo );
1249
- ...
1250
- </p>
1251
- <br>
1252
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1253
-
1254
- <a name="vjournal"></a><h4>3.1.1.4 vjournal</h4>
1255
- <p class="label">Format 1</p>
1256
- Create a new <a href="#VJOUNAL">VJOURNAL</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
1257
- <p class="format">newComponent( &quot;vjournal&quot; )</p>
1258
- <p class="label">Example</p>
1259
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1260
- $vcalendar = new vcalendar( $config );
1261
- ...
1262
- $vjournal = &amp; $vcalendar->newComponent( &quot;vjournal&quot; );
1263
- $vjournal->setProperty(...
1264
- ...
1265
- </p>
1266
- <p class="label">Format 2</p>
1267
- Create a new <a href="#VJOURNAL">VJOURNAL</a> object.
1268
- <p class="format">vjournal()</p>
1269
- <p class="label">Example</p>
1270
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1271
- $vcalendar = new vcalendar( $config );
1272
- ...
1273
- $vjournal = new vjournal();
1274
- $vjournal->setProperty(...
1275
- ...
1276
- $vcalendar->setComponent( $vjournal );
1277
- ...
1278
- </p>
1279
- <br>
1280
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1281
-
1282
- <a name="vfreebusy"></a><h4>3.1.1.5 vfreebusy</h4>
1283
- <p class="label">Format 1</p>
1284
- Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
1285
- <p class="format">newComponent( &quot;vfreebusy&quot; )</p>
1286
- <p class="label">Example</p>
1287
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1288
- $vcalendar = new vcalendar( $config );
1289
- ...
1290
- $vfreebusy = &amp; $vcalendar->newComponent( &quot;vfreebusy&quot; );
1291
- $vfreebusy->setProperty(...
1292
- ...
1293
- </p>
1294
- <p class="label">Format 2</p>
1295
- Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object.
1296
- <p class="format">vfreebusy()</p>
1297
- <p class="label">Example</p>
1298
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1299
- $vcalendar = new vcalendar( $config );
1300
- ...
1301
- $vfreebusy = new vfreebusy();
1302
- $vfreebusy->setProperty(...
1303
- ...
1304
- $vcalendar->setComponent( $vfreebusy );
1305
- ...
1306
- </p>
1307
- <br>
1308
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1309
-
1310
- <a name="valarm"></a><h4>3.1.1.6 valarm</h4>
1311
- <p class="label">Format 1</p>
1312
- Create a new <a href="#VALARM">VALARM</a> object using a component factory-method, returning a reference to the new (sub-)component.
1313
- <p class="format">newComponent( &quot;valarm&quot; )</p>
1314
- <p class="label">Example</p>
1315
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1316
- $vcalendar = new vcalendar( $config );
1317
- ...
1318
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
1319
- $vevent->setProperty(...
1320
- ...
1321
- $valarm = &amp; $vevent->newComponent( &quot;valarm&quot; );
1322
- $valarm->setProperty(...
1323
- ...
1324
- </p>
1325
- <p class="label">Format 2</p>
1326
- Create a new <a href="#VALARM">VALARM</a> object.
1327
- <p class="format">valarm()</p>
1328
- <p class="label">Example</p>
1329
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1330
- $vcalendar = new vcalendar( $config );
1331
- ...
1332
- $vevent = new vevent();
1333
- $vevent->setProperty(...
1334
- ...
1335
- $valarm = new valarm();
1336
- $valarm->setProperty(...
1337
- ...
1338
- $vevent->setComponent( $valarm );
1339
- ...
1340
- $vcalendar->setComponent( $vevent );
1341
- ...
1342
- </p>
1343
- <br>
1344
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1345
-
1346
- <a name="vtimezone"></a><h4>3.1.1.7 vtimezone</h4>
1347
- <p>
1348
- The vtimezone component describe, at a minimum, the base offset from <b>UTC</b> for the time zone.
1349
- For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
1350
- </p>
1351
- <p class="label">Format 1</p>
1352
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
1353
- <p class="format">newComponent( &quot;vtimezone&quot; )</p>
1354
- <p class="label">Example</p>
1355
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1356
- $vcalendar = new vcalendar( $config );
1357
- ...
1358
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
1359
- $vtimezone->setProperty(...
1360
- ...
1361
- </p>
1362
- <p class="label">Format 2</p>
1363
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object.
1364
- <p class="format">vtimezone()</p>
1365
- <p class="label">Example</p>
1366
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1367
- $vcalendar = new vcalendar( $config );
1368
- ...
1369
- $vtimezone = new vtimezone();
1370
- $vtimezone->setProperty(...
1371
- ...
1372
- $vcalendar->setComponent( $vtimezone );
1373
- ...
1374
- </p>
1375
- <br>
1376
- <h5>Creation of timezone components</h5>
1377
- It is possible to create timezone components, using a function in iCalUtilityFunctions class, <a href="#createTimezone">createTimezone</a>
1378
- and utilizing The <i>PHP</i> DateTimeZone class (<i>PHP</i> 5 >= 5.2.0).
1379
- <br>
1380
- <br>
1381
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1382
-
1383
- <a name="standard"></a><h4>3.1.1.8 standard</h4>
1384
- <p class="label">Format 1</p>
1385
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> <b>standard</b> object using a component factory-method, returning a reference to the new (sub-)component.
1386
- <p class="format">newComponent( &quot;standard&quot; )</p>
1387
- <p class="label">Example</p>
1388
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1389
- $vcalendar = new vcalendar( $config );
1390
- ...
1391
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
1392
- $vtimezone->setProperty(...
1393
- ...
1394
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
1395
- $standard->setProperty(...
1396
- ...
1397
- $daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
1398
- $daylight->setProperty(...
1399
- ...
1400
- </p>
1401
- <p class="label">Format 2</p>
1402
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> STANDARD object.
1403
- <p class="format">vtimezone( &quot;standard&quot; )</p>
1404
- <p class="label">Example</p>
1405
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1406
- $vcalendar = new vcalendar( $config );
1407
- ...
1408
- $vtimezone = new vtimezone();
1409
- $vtimezone->setProperty(...
1410
- ...
1411
- $standard = new vtimezone( &quot;standard&quot; );
1412
- $standard->setProperty(...
1413
- ...
1414
- $vtimezone->setComponent( $standard );
1415
- ...
1416
- $daylight = new vtimezone( &quot;daylight&quot; );
1417
- $daylight->setProperty(...
1418
- ...
1419
- $vtimezone->setComponent( $daylight );
1420
- ...
1421
- $vcalendar->setComponent( $vtimezone );
1422
- ...
1423
- </p>
1424
- <br>
1425
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1426
-
1427
- <a name="daylight"></a><h4>3.1.1.9 daylight</h4>
1428
- <p class="label">Format 1</p>
1429
- Create a new <a name="VTIMEZONE">VTIMEZONE</a> <b>daylight</b> object using a component factory-method, returning a reference to the new (sub-)component.
1430
- <p class="format">newComponent( &quot;standard&quot; )</p>
1431
- <p class="label">Example</p>
1432
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1433
- $vcalendar = new vcalendar( $config );
1434
- ...
1435
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
1436
- ...
1437
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
1438
- ...
1439
- $daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
1440
- ...
1441
- </p>
1442
- <p class="label">Format 2</p>
1443
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> DAYLIGHT object.
1444
- <p class="format">vtimezone( &quot;daylight&quot; )</p>
1445
- <p class="label">Example</p>
1446
- <p class="example"></p>
1447
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1448
- $vcalendar = new vcalendar( $config );
1449
- ...
1450
- $vtimezone = new vtimezone();
1451
- ...
1452
- $standard = new vtimezone( &quot;standard&quot; );
1453
- ...
1454
- $vtimezone->setComponent( $standard );
1455
- $daylight = new vtimezone( &quot;daylight&quot; );
1456
- ...
1457
- $vtimezone->setComponent( $daylight );
1458
- $vcalendar->setComponent( $vtimezone );
1459
- ...
1460
- </p>
1461
- <br>
1462
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1463
-
1464
-
1465
- <a name="Calendar_property_functions"></a><h3>3.1.2 Calendar property functions</h3>
1466
-
1467
- <a name="deleteProperty"></a><h4>3.1.2.1 deleteProperty</h4>
1468
- General <i>calendar</i> deleteProperty function, simplifying removal of <i>calendar</i> properties.<br>
1469
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1470
- <p class="label">Format</p>
1471
- <p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
1472
- <p class="comment">propName - case independent, rfc2445 component property names,
1473
- unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1474
- order - if missing 1st/next occurrence,
1475
- used with multiple (property) occurrences
1476
- </p>
1477
- <p class="label">Example 1</p>
1478
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1479
- $vcalendar = new vcalendar( $config );
1480
- $vcalendar->parse();
1481
- if( !$vcalendar->deleteProperty( &quot;method&quot; ))
1482
- &nbsp;&nbsp;echo "METHOD property not found";
1483
- .. .
1484
- </p>
1485
- <br>
1486
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1487
-
1488
- <a name="getProperty"></a><h4>3.1.2.2 getProperty</h4>
1489
- <p class="label">Format 1</p>
1490
- General <i>calendar</i> getProperty function, simplifying fetch of <i>calendar</i> properties.<br>
1491
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1492
- <p class="format">getProperty( [ string PropName [, int order=1 [, bool complete=FALSE ]]] )</p>
1493
- <p class="comment">propName - case independent, rfc2445 component property names,
1494
- unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1495
- order - if missing 1st/next occurrence,
1496
- used with multiply (property) occurrences
1497
- complete - FALSE (default) : output only property value
1498
- - TRUE : output =
1499
- array( &quot;value&quot;=&gt; &lt;value&gt; ,&quot;params&quot; =&gt; &lt;parameter array&gt;)
1500
- </p>
1501
- <p class="label">Example 1</p>
1502
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1503
- $vcalendar = new vcalendar( $config );
1504
- $vcalendar->parse();
1505
- $calscale = $vcalendar->getProperty( &quot;calscale&quot; );
1506
- .. .
1507
- </p>
1508
- <p class="label">Example 2</p>
1509
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1510
- $vcalendar = new vcalendar( $config );
1511
- $vcalendar->parse();
1512
- while( $xprop = $vcalendar->getProperty( )) { // <span class="ref">get x-properties</span>
1513
- .. .
1514
- </p>
1515
- <a name="getProperty2">
1516
- <p class="label">Format 2</p>
1517
- Ability to fetch specific property (unique) values and number of occurrences. Supported properties are
1518
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#DTSTART">DTSTART</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>,
1519
- <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a> or &quot;RECURRENCE-ID-UID&quot; (alt. &quot;R-UID&quot; ).
1520
- The search includes in <b>ALL</b> components within <i>calendar</i>.
1521
- <br><br>
1522
- Outputs an array( *[&lt;unique-property-value&gt; =&gt; &lt;number of occurrence&gt;] )<br>or an empty array if no hits.
1523
- The array is sorted by (asc.) key.
1524
- <br><br>
1525
- If a property contains multiple values (ex. &quot;CATAGORIES:course1,courseB&quot, &quot;LOCATION:London,Paris&quot; or &quot;RESOURCES:pc,developer&quot;), they are split into unique values.
1526
- <br><br>
1527
- To select components based on property values, see <a href="#selectComponents2">selectComponents</a> (Format 2).
1528
- <p class="format">getProperty( string PropName )</p>
1529
- <p class="comment">propName - case independent
1530
- <a href="#DTSTART">DTSTART</a> as argument returns dates, in format &quot;YYYYMMDD&quot;,
1531
- &quot;RECURRENCE-ID-UID&quot;returns <a href="#UID">UID</a> values for component(-s) where <a href="#RECURRENCE-ID">RECURRENCE-ID</a> is set.
1532
- <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values are prefixed by protocol like
1533
- &quot;MAILTO:chair@kigkonsult.se&quot;.
1534
- </p>
1535
- <p class="label">Example 1</p>
1536
- <p class="example">.. .
1537
- $attendees = $vcalendar->getProperty( &quot;ATTENDEE&quot; );
1538
- foreach( $attendees as $attendee => $occurrCount ) {
1539
- .. .
1540
- </p>
1541
- <p class="label">Example 2</p>
1542
- <p class="example">.. .
1543
- $startDates = $vcalendar->getProperty( &quot;DTSTART&quot; );
1544
- foreach( $startDates as $startDate => $occurrCount ) {
1545
- .. .
1546
- </p>
1547
- <br>
1548
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1549
-
1550
- <a name="setProperty"></a><h4>3.1.2.3 setProperty</h4>
1551
- General <i>calendar</i> setProperty function,simplifying insert of <i>calendar</i> properties.<br>
1552
- A successful update returns TRUE.
1553
- <p class="label">Format</p>
1554
- <p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
1555
- propName case independent, strict rfc2445 <i>calendar</i> property names, unknown propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1556
- <p class="label">Example</p>
1557
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1558
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1559
- $vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
1560
- </p>
1561
- <br>
1562
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1563
-
1564
- <a name="CALSCALE"></a><h4>3.1.2.4 CALSCALE</h4>
1565
- This property defines the <i>calendar</i> scale used for the <i>calendar</i> information specified in the iCalendar object.
1566
- <br><br>
1567
- The default value is &quot;GREGORIAN&quot;, implied when missing.
1568
- <h5>Delete CALSCALE</h5>
1569
- Remove CALSCALE from component.
1570
- <p class="label">Format</p>
1571
- <p class="format">deleteProperty( &quot;calscale&quot; )</p>
1572
- <p class="label">Example</p>
1573
- <p class="example">$vcalendar->deleteProperty( &quot;CALSCALE&quot; );</p>
1574
- <h5>Get Calscale</h5>
1575
- Fetch property value.
1576
- <p class="label">Format</p>
1577
- <p class="format">getProperty( &quot;calscale&quot; )</p>
1578
- <p class="label">Example</p>
1579
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1580
- $vcalendar = new vcalendar( $config );
1581
- $vcalendar->parse();
1582
- $calscale = $vcalendar->getProperty( &quot;calscale&quot; );
1583
- .. .
1584
- </p>
1585
- <h5>Set CALSCALE</h5>
1586
- Insert property value.
1587
- <p class="label">Format</p>
1588
- <p class="format">setProperty( &quot;calscale&quot;, string value )</p>
1589
- <p class="label">Example</p>
1590
- <p class="example">
1591
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
1592
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1593
- $vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
1594
- .. .
1595
- </p>
1596
- <br>
1597
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1598
-
1599
-
1600
- <a name="METHOD"></a><h4>3.1.2.5 METHOD</h4>
1601
- This property defines the iCalendar object method associated with the <i>calendar</i> object.
1602
- <br><br>
1603
- METHOD property (value PUBLISH etc.) may be required when importing iCal files
1604
- into some calendaring software (MS etc.), as well as <a href="#X-PROPERTY">x-properties</a>
1605
- "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE"
1606
- and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
1607
- <h5>Delete METHOD</h5>
1608
- Remove METHOD from component.
1609
- <p class="label">Format</p>
1610
- <p class="format">deleteProperty( &quot;METHOD&quot; )</p>
1611
- <p class="label">Example</p>
1612
- <p class="example">$vcalendar->deleteProperty( &quot;METHOD&quot; );</p>
1613
- <h5>Get METHOD</h5>
1614
- Fetch property value.
1615
- <p class="label">Format</p>
1616
- <p class="format">getProperty( &quot;method&quot; );</p>
1617
- <p class="label">Example</p>
1618
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;);
1619
- $vcalendar = new vcalendar( $config );
1620
- $vcalendar->parse();
1621
- $method = $vcalendar->getProperty( &quot;method&quot; )
1622
- .. .
1623
- </p>
1624
- <h5>Set METHOD</h5>
1625
- Insert property value.
1626
- <p class="label">Format</p>
1627
- <p class="format">setProperty( &quot;method&quot;, string value )</p>
1628
- <p class="label">Example</p>
1629
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
1630
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1631
- $vcalendar->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; )
1632
- </p>
1633
- <br>
1634
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1635
-
1636
-
1637
- <a name="VERSION"></a><h4>3.1.2.6 VERSION</h4>
1638
- This property specifies the identifier corresponding to the highest version number or the minimum
1639
- and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.<br>
1640
- This property is always placed first in the <i>calendar</i> file.<br>
1641
- <h5>Get Version</h5>
1642
- Fetch property value.
1643
- <p class="label">Format</p>
1644
- <p class="format">getProperty( &quot;version&quot; )</p>
1645
- <p class="label">Example</p>
1646
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1647
- $vcalendar = new vcalendar( $config );
1648
- $vcalendar->parse();
1649
- $version = $vcalendar->getProperty( &quot;version&quot; )
1650
- .. .
1651
- </p>
1652
- <h5>Set Version</h5>
1653
- Insert property value.
1654
- Only version 2.0 valid, version is <b>AUTO</b> generated at <i>calendar</i> creation.
1655
- <p class="label">Format</p>
1656
- <p class="format">setProperty( &quot;version&quot;, string version )</p>
1657
- <p class="label">Example</p>
1658
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
1659
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1660
- $vcalendar->setProperty( &quot;version&quot;, &quot;2.0&quot; )
1661
- </p>
1662
- <br>
1663
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1664
-
1665
- <a name="X-PROPERTY"></a><h4>3.1.2.7 X-PROPERTY</h4>
1666
- A <i>calendar</i>, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a <i>calendar</i>,
1667
- an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
1668
- <br><br>
1669
- X-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE" may be required when importing iCal files
1670
- into some calendaring software (MS etc.), as well as <a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
1671
- and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
1672
- <h5>Delete X-PROPERTY</h5>
1673
- Remove X-PROPERTY from <i>calendar</i>.
1674
- <p class="label">Format</p>
1675
- <p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
1676
- <p class="label">Example 1</p>
1677
- <p class="example">$vcalendar->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
1678
- <p class="label">Example 2</p>
1679
- Deleting all x-properties.
1680
- <p class="example">while( $vcalendar->deleteProperty())
1681
- continue;</p>
1682
- <h5>Get X-PROPERTY</h5>
1683
- Fetch property value.
1684
- <p class="label">Format</p>
1685
- <p class="format">getProperty()<br>
1686
- getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
1687
- <p class="comment">output = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
1688
- <p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
1689
- <p class="comment">output = array( propertyName<span class="ref">1</span>
1690
- , array( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
1691
- , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))
1692
- </p>
1693
- <p class="label">Example 1</p>
1694
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1695
- $vcalendar = new vcalendar( $config );
1696
- $vcalendar->parse();
1697
- while( $xprop = $vcalendar->getProperty( )) { //<span class="ref">read all x-props in a loop</span>
1698
- .. .
1699
- </p>
1700
- <p class="comment">$xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
1701
- <p class="label">Example 2</p>
1702
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1703
- $vcalendar = new vcalendar( $config );
1704
- $vcalendar->parse();
1705
- if( $xprop = $vcalendar->getProperty( &quot;X-WR-TIMEZONE&quot; )) {
1706
- //<span class="ref">if exists, read X-WR-TIMEZONE x-prop</span>
1707
- .. .
1708
- </p>
1709
- <p class="comment">$xprop = array( &quot;X-WR-TIMEZONE&quot;, propertyData<span class="ref">2</span> )</p>
1710
- <p class="label">Example 3</p>
1711
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1712
- $vcalendar = new vcalendar( $config );
1713
- $vcalendar->parse();
1714
- while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
1715
- .. .
1716
- </p>
1717
- <p class="comment">$xprop = array( propertyName<span class="ref">1</span>
1718
- , array( &quot;value &quot; =&gt; propertyData<span class="ref">2</span> )
1719
- , &quot;params &quot;=&gt; params<span class="ref">&nbsp;3</span> )
1720
- </p>
1721
- <h5>Set X-PROPERTY</h5>
1722
- Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
1723
- PropertyNames are always stored upperCase, ex. x-wr-calname =&gt; X-WR-CALNAME.
1724
- <p class="label">Format</p>
1725
- <p class="format">setProperty( propertyName, propertyData [, params ] )</p>
1726
- <p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
1727
- propertyData<span class="ref">2</span> = Value type TEXT
1728
- params<span class="ref">3</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
1729
- xparam = *[ xparamkey =&gt; xparamvalue ]
1730
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
1731
- <p class="label">Example</p>
1732
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
1733
- $vcalendar = new vcalendar( $config ); // initiate new CALENDAR
1734
- // <span class="ref">set some X-properties.. .</span>
1735
- $vcalendar->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; )
1736
- $vcalendar->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; );
1737
- $vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
1738
- </p>
1739
- <br>
1740
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1741
-
1742
- <a name="Calendar_component_functions"></a><h3>3.1.3 Calendar component functions</h3>
1743
-
1744
- <a name="deleteComponent"></a><h4>3.1.3.1 deleteComponent</h4>
1745
- Remove component from <i>calendar</i>.<br>
1746
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1747
- <p class="label">format 1</p>
1748
- Remove component with order number (1st=1, 2nd=2.. .).
1749
- <p class="format">deleteComponent( int orderNumber )</p>
1750
- <p class="label">format 2</p>
1751
- Remove component with component type (e.g. &quot;vevent&quot;) and order 1 alt. suborder number.
1752
- <p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
1753
- <p class="label">format 3</p>
1754
- Remove component with <a href="#UID">UID</a>. N.B <a href="#UID">UID</a> is NOT set for
1755
- <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
1756
- <p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
1757
- <p class="label">Example 1</p>
1758
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1759
- $vcal = new vcalendar( $config );
1760
- $vcal->parse();
1761
- $vcal->deleteComponent( 1 );
1762
- $vcal->deleteComponent( &quot;vtodo&quot;, 2 );
1763
- $vcal->deleteComponent( &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);
1764
- .. .
1765
- </p>
1766
- <p class="label">Example 2</p>
1767
- Deleting all components, using format 2 without order number.
1768
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1769
- $vcal = new vcalendar( $config );
1770
- $vcal->parse();
1771
- .. .
1772
- while( $vcal->deleteComponent( &quot;vevent&quot;))
1773
- continue;
1774
- .. .
1775
- $vtodo = $vcal->getComponent( &quot;vtodo&quot; );
1776
- while( $vtodo->deleteComponent( &quot;valarm&quot;))
1777
- continue;
1778
- .. .
1779
- </p>
1780
- <br>
1781
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1782
-
1783
- <a name="getComponent"></a><h4>3.1.3.2 getComponent</h4>
1784
- Get component from <i>calendar</i>.<br>
1785
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1786
-
1787
- <p class="label">format 1</p>
1788
- Get next component, until end-of-components.
1789
- <p class="format">getComponent()</p>
1790
-
1791
- <p class="label">format 2</p>
1792
- Get specific component with order number (1st=1, 2nd=2.. .).
1793
- <p class="format">getComponent( int orderNumber )</p>
1794
-
1795
- <p class="label">format 3</p>
1796
- Get (first/next) component with component type (until end-of-components) alt.
1797
- get specific component with component type and suborder number (1st=1, 2nd=2.. .).
1798
- <p class="format">getComponent( string componentType [, int componentSuborderNumber])</p>
1799
-
1800
- <p class="label">format 4</p>
1801
- Get (first/next) component with <a href="#UID">UID</a> as key. (<a href="#UID">UID</a> is NOT set for
1802
- <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.)
1803
- <p class="format">getComponent( string <a href="#UID">UID</a> )</p>
1804
-
1805
- <p class="label">format 5</p>
1806
- Get (first/next) component based on specific property contents;
1807
- <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#CREATED">CREATED</a>, <a href="#COMPLETED">COMPLETED</a>, <a href="#DTSTAMP">DTSTAMP</a>, <a href="#LAST-MODIFIED">LAST-MODIFIED</a>, <a href="#RECURRENCE-ID">RECURRENCE-ID</a>,
1808
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>, <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a>.
1809
- For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit exists.
1810
- For the other, non-date, properties an exact (strict case) match is required.<br>
1811
- Note, <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values must be prefixed by protocol ex.&quot;MAILTO:chair@ical.net&quot;.
1812
-
1813
- <p class="format">getComponent( array(*[string propertyName =&gt; string uniqueValue] ))</p>
1814
- <p class="comment">propertyName = property name, above
1815
- propertyData = unique property value (strict case),
1816
- date format &quot;YYYYMMDD&quot; (if any side is DATE, only dates are used),
1817
- datetime format &quot;YYYYMMDDTHHMMSS&quot;
1818
- </p>
1819
- <p class="label">Example 1</p>
1820
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1821
- $vcalendar = new vcalendar( $config );
1822
- $vcalendar->parse();
1823
- while( $comp = $vcalendar->getComponent()) {
1824
- .. .
1825
- }
1826
- .. .
1827
- </p>
1828
- <p class="label">Example 2</p>
1829
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1830
- $vcalendar = new vcalendar( $config );
1831
- $vcalendar->parse();
1832
- if( $comp = $vcalendar->getComponent( 1 )) {
1833
- .. .
1834
- }
1835
- .. .
1836
- </p>
1837
- <p class="label">Example 3</p>
1838
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1839
- $vcalendar = new vcalendar( $config );
1840
- $vcalendar->parse();
1841
- if( $comp = $vcalendar->getComponent( &quot;vtodo&quot;, 2 ) {
1842
- .. .
1843
- }
1844
- .. .
1845
- </p>
1846
- <p class="label">Example 4</p>
1847
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
1848
- $vcalendar = new vcalendar( $config );
1849
- $vcalendar->parse();
1850
- $uid = &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;;
1851
- if($comp = $vcalendar->getComponent( $uid ){
1852
- .. .
1853
- }
1854
- .. .
1855
- </p>
1856
- <br>
1857
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1858
-
1859
- <a name="newComponent"></a><h4>3.1.3.3 newComponent</h4>
1860
- Create component (<a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> / <a href="#VTIMEZONE">VTIMEZONE</a>)
1861
- using a <i>calendar</i> factory-method, returning a reference to the new component.
1862
- <p class="label">Format</p>
1863
- <p class="format">newComponent( string componentType )</p>
1864
- <p class="label">Example</p>
1865
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
1866
- $vcalendar = new vcalendar( $config );
1867
- ...
1868
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
1869
- ...
1870
- </p>
1871
-
1872
- <br>
1873
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1874
-
1875
- <a name="selectComponents"></a><h4>3.1.3.4 selectComponents</h4>
1876
- <p class="label">Format 1</p>
1877
- Selects <a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> components from <i>calendar</i> on based on <b>dates</b> (notice <a href="#date_restriction">date restriction</a>), based on the initial <a href="#DTSTART">DTSTART</a> property
1878
- along with the <a href="#RRULE">RRULE</a>, <a href="#RDATE">RDATE</a>, <a href="#EXDATE">EXDATE</a> and <a href="#EXRULE">EXRULE</a> properties in the component.
1879
- If property <a href="#DTSTART">DTSTART</a> is missing in a <a href="#VTODO">VTODO</a> component then <a href="#DTSTART">DUE</a> is used.<br>
1880
- <br>
1881
- Limitations:
1882
- <ul>
1883
- <li>The values &quot;SECONDLY&quot; / &quot;MINUTELY&quot; / &quot;HOURLY&quot; in the &quot;FREQ&quot; rule part are NOT supported.
1884
- <li>If using components with properties<br />
1885
- <a href="#UID">UID</a> in combination with <a href="#SEQUENCE">SEQUENCE</a> and <a href="#RECURRENCE-ID">RECURRENCE-ID</a><br />
1886
- (i.e. an individual instance within the recurrence set),<br />
1887
- the <a href="#RECURRENCE-ID">RECURRENCE-ID</a> parameter &quot;RANGE&quot; (&quot;THISANDPRIOR&quot; / &quot;THISANDFUTURE&quot;) is NOT supported.<br>
1888
- </ul>
1889
- Requirement:
1890
- <ul>
1891
- <li><a href="#sort">sort</a> <b>MUST</b> be executed before &quot;selectComponents&quot;, notice example below.
1892
- </ul>
1893
- FALSE is returned if no selected component exists.
1894
- <p class="format">selectComponents([ int startYear, int startMonth, int startDay
1895
- [, int endYear, int endMonth, int endDay
1896
- [, mixed cType [, bool flat [,bool any [,bool split]]]]]])
1897
- </p>
1898
- Returns an array with components (events.. .).
1899
- For all recurrent instances of a <i>calendar</i> component, an x-property,
1900
- &quot;X-CURRENT-DTSTART&quot; and opt. also &quot;X-CURRENT-DTEND&quot; alt. &quot;X-CURRENT-DUE&quot;,
1901
- has been created with a TEXT content, &quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;
1902
- showing the current start and opt. also end alt. due date.<br>
1903
- Also a &quot;X-RECURRENCE&quot; x-property is set with order number (valid if selectComponents is called from DTSTART date).
1904
- <p class="comment">startYear : start year (4*digit), default current year
1905
- startMonth : start month (1-2*digit), default current month
1906
- startDay : start day (1-2*digit), default current day
1907
- endYear : end year (4*digit), default startYear
1908
- endMonth : end month (1-2*digit), default startMonth
1909
- endDay : end day (1-2*digit), default startDay
1910
- cType : <i>calendar</i> component type(-s), string/array
1911
- (&quot;vevent&quot;, &quot;vtodo&quot;, &quot;vjournal&quot;, &quot;vfreebusy&quot;)
1912
- FALSE (default) =&gt; all
1913
- flat : TRUE =&gt; output : array[] (ignores split)
1914
- component where recurrence pattern exists within period
1915
- FALSE (default) =&gt; output : array[Year][Month][Day][]
1916
- any : TRUE (default) =&gt; select components with recurrence pattern in period
1917
- FALSE =&gt; only components that starts (DTSTART) within period
1918
- split : TRUE (default) =&gt; one component copy for every day it occurs
1919
- within the period
1920
- FALSE =&gt; one occurrence of component in output array,
1921
- start date/recurrence (start) date
1922
-
1923
- valid flat any split
1924
- combinations (defaults in upper case)
1925
- 1 FALSE TRUE TRUE
1926
- 2 FALSE TRUE false
1927
- 3 FALSE false [false] (split set to false if flat=FALSE and any=false)
1928
- 4 true TRUE [false] (split set to false if flat=true)
1929
- 5 true false [false] (split set to false if flat=true)
1930
- </p>
1931
- <p class="label">Example</p>
1932
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
1933
- &quot;directory&quot; =&gt; &quot;import&quot;,
1934
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1935
- $vcalendar = new vcalendar( $config );
1936
- $vcalendar->parse();
1937
- $vcalendar->sort();
1938
- $events_arr = $vcalendar->selectComponents( 2007,11,1,2007,11,30,&quot;vevent&quot;);
1939
- // <span class="comment">select all events occurring 1-30 nov. 2007</span>
1940
- foreach( $events_arr as $year =&gt; $year_arr ) {
1941
- foreach( $year_arr as $month =&gt; $month_arr ) {
1942
- foreach( $month_arr as $day =&gt; $day_arr ) {
1943
- foreach( $day_arr as $event ) {
1944
- $currddate = $event->getProperty( &quot;x-current-dtstart&quot; );
1945
- <span class="comment">// if member of a recurrence set, returns
1946
- // array(&quot; x-current-dtstart&quot;,
1947
- // &lt;(string) date(&quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;)&gt;)</span>
1948
- $startDate = $event->getProperty( &quot;dtstart&quot; );
1949
- $summary = $event->getProperty( &quot;summary&quot; );
1950
- $description = $event->getProperty( &quot;description&quot; );
1951
- .. .
1952
- </p>
1953
- <a name="selectComponents2"></a>
1954
- <p class="label">format 2</p>
1955
- Using this format, the function selects components based on specific property value(-s),
1956
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>, <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a> or <a href="#UID">UID</a>.
1957
- For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit is found.
1958
- For the other properties an exact (strict case) match is required.<br>
1959
- <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> search values must be prefixed by protocol ex. &quot;MAILTO:chair@ical.net&quot;.
1960
- Multiple search properties may coexist.
1961
- <br>
1962
- <br>
1963
- To retrieve property values, see <a href="#getProperty2">getProperty</a> (Format 2) on <i>calendar</i> level.
1964
- <p class="format">selectComponents( searchArray )</p>
1965
- Outputs an array of matched (unique) components in <a href="#UID">UID</a> order.
1966
- <p class="comment">searchArray : array( propertyName =&gt; propertyValue )
1967
- propertyName : above (any case)
1968
- propertyValue : string value / array( *[string value] )
1969
- </p>
1970
- <p class="label">Example</p>
1971
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
1972
- &quot;directory&quot; =&gt; &quot;import&quot;,
1973
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1974
- $vcalendar = new vcalendar( $config );
1975
- $vcalendar->parse();
1976
- $vcalendar->sort();
1977
- $searchArray = array( &quot;PRIORITY&quot; =&gt; array( 1, 2, 3, 4 ));
1978
- $highPrioArr = $vcalendar->selectComponents( $searchArray );
1979
- // <span class="comment">select all components with PRIORITY set to high (1-4)</span>
1980
- if( !empty( $highPrioArr )) {
1981
- $highPrioCal = new vcalendar( array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ));
1982
- $highPrioCal-&gt;setProperty( "X-WR-CALDESC", "High priority events" );
1983
- foreach( $highPrioArr as $highPrioComponent )
1984
- $highPrioCal-&gt;setComponent( $highPrioComponent );
1985
- $highPrioCal-&gt;returnCalendar();
1986
- }
1987
- .. .
1988
- </p>
1989
- <br>
1990
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1991
-
1992
- <a name="setComponent"></a><h4>3.1.3.5 setComponent</h4>
1993
- Replace or update component in <i>calendar</i>.
1994
- Also add <i>calendar</i> component to <i>calendar</i> when <i>calendar</i> component is created with the procedural (<b>non</b>-factory) method,
1995
- see example <a href="#vevent">VEVENT</a>, format 2.
1996
- A successful update return TRUE.
1997
- <p class="label">format 1</p>
1998
- Insert last in component chain.
1999
- <p class="format">setComponent( component )
2000
- addComponent( component ) // <span class="ref">alias</span>
2001
- </p>
2002
- <p class="comment">addComponent, may be removed i future versions.</p>
2003
- <p class="label">format 2</p>
2004
- Insert/replace component with order number (1st=1, 2nd=2.. .).
2005
- If replace and orderNumber is not found, component is inserted last in chain.
2006
- <p class="format">setComponent( component, int orderNumber )</p>
2007
- <p class="label">format 3</p>
2008
- Replace component with component type and 1st alt. component order number.
2009
- If orderNumber is not found, component is inserted last in chain.
2010
- <p class="format">setComponent( component, string componentType [,int component suborder no])</p>
2011
- <p class="label">format 4</p>
2012
- Replace component with <a href="#UID">UID</a>.
2013
- N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
2014
- If <a href="#UID">UID</a> is not found, component is inserted last in chain.
2015
- <p class="format">setComponent( component, string <a href="#UID">UID</a> )</p>
2016
- <p class="label">Example</p>
2017
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
2018
- $vcalendar = new vcalendar( $config );
2019
- $vcalendar->parse();
2020
- $vevent = vcalendar->getComponent( 1 );&nbsp;//<span class="comment">fetch first EVENT</span>
2021
- $vevent->setProperty( &quot;dtstart&quot;&nbsp;//<span class="comment">update <a class="ref" href="#DTSTART">DTSTART</a> property</span>
2022
- , 2006, 12, 24, 19, 30, 00 );
2023
- .. .
2024
- $vcalendar->setComponent( $vevent, 1 ); // replace first component
2025
- .. .
2026
- </p>
2027
- <br>
2028
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
2029
-
2030
- <a name="Calendar_inputoutput_functions"></a><h3>3.1.4 Calendar input/output functions</h3>
2031
-
2032
- <a name="parse_merge"></a><h4>3.1.4.1 parse and merge</h4>
2033
- Parse iCal file(-s) or string/array <i>calendar</i>Content into a single vcalendar object (components, properties and parameters),
2034
- including multiple vcalendars (within a single ICS file) parse, e.g. Oracle Calendar exports.
2035
-
2036
- <br><br>
2037
- As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. A remote file, URL, <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.! Recommendation is to download (cache) remote file before parsing, due to execution time and control.
2038
- <br><br>
2039
- If missing, component property <a href="#UID">UID</a> is created when parsing. For that reason <a href="#Unique_id">UNIQUE_ID</a> might need to be set before parsing, Se examples below.
2040
- <br><br>
2041
- Notice <a href="#date_restriction">date restriction</a>!
2042
- <br><br>
2043
- If parse error occurs (like file access error, invalid <i>calendar</i> file or <i>calendar</i> file without components), FALSE is returned.
2044
- <p class="label">Format</p>
2045
- <p class="format">parse( [ mixed textToParse ] )</p>
2046
- <p class="comment">textToParse = string calendarContent
2047
- ex. result from - file_get_contents( &quot;filename&quot;)
2048
- array calendarContent
2049
- ex. result from - file( &quot;filename&quot;, FILE_IGNORE_NEW_LINES )</p>
2050
- <p class="label">parse example 1</p>
2051
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
2052
- $vcalendar = new vcalendar( $config );
2053
- $vcalendar->parse();
2054
- .. .
2055
- </p>
2056
- <p class="label">parse example 2</p>
2057
- <p class="example">
2058
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2059
- &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
2060
- $vcalendar = new vcalendar( $config );
2061
- $vcalendar->parse();
2062
- .. .
2063
- </p>
2064
- <p class="label">parse example 3</p>
2065
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2066
- &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
2067
- $vcalendar = new vcalendar( $config );
2068
- ...
2069
- $str = array(
2070
- &quot;BEGIN:VCALENDAR&quot;,
2071
- &quot;PRODID:-//kigkonsult.se//NONSGML kigkonsult.se iCalcreator 2.10.23//&quot;,
2072
- &quot;VERSION:2.0&quot;,
2073
- &quot;BEGIN:VEVENT&quot;,
2074
- &quot;DTSTART:20101224T190000Z&quot;,
2075
- &quot;DTEND:20101224T200000Z&quot;,
2076
- &quot;DTSTAMP:20101020T103827Z&quot;,
2077
- &quot;UID:20101020T113827-1234GkdhFR@test.org&quot;,
2078
- &quot;DESCRIPTION:example&quot;,
2079
- &quot;END:VEVENT&quot;,
2080
- &quot;END:VCALENDAR&quot;);
2081
- $vcalendar->parse( $str );
2082
- ...
2083
- </p>
2084
- <p class="label">merge example</p>
2085
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2086
- &quot;directory&quot; =&gt; &quot;import&quot; );
2087
- $vcalendar = new vcalendar( $config );
2088
-
2089
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file1.ics&quot; );
2090
- $vcalendar->parse();
2091
-
2092
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file2.ics&quot; );
2093
- $vcalendar->parse();
2094
-
2095
- $vcalendar->sort();
2096
- $vcalendar->setConfig( &quot;directory&quot;,&nbsp;&quot;export&quot; );
2097
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;icalmerge.ics&quot; );
2098
- $vcalendar->saveCalendar();
2099
- .. .
2100
- </p>
2101
- <br>
2102
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2103
-
2104
- <a name="createCalendar"></a><h4>3.1.4.2 createCalendar</h4>
2105
- Generate and return <i>calendar</i> in a string, testing.. .?
2106
- <p class="label">Format</p>
2107
- <p class="format">createCalendar()</p>
2108
- <p class="label">Example</p>
2109
- <p class="example">.. .
2110
- $str = $vcalendar->createCalendar();
2111
- echo $str;
2112
- </p>
2113
- <br>
2114
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2115
-
2116
- <a name="returnCalendar"></a><h4>3.1.4.3 returnCalendar</h4>
2117
- Redirect <i>calendar</i> content to user browser. Filename, addressed to browser, is automatically generated if missing or not set;<br>
2118
- <span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br>
2119
- <p class="label">Format</p>
2120
- <p class="format">returnCalendar( [bool utf8Encode [, bool gzip ]] )</p>
2121
- <p class="comment">utf8Encode = TRUE: utf8 encoded output, FALSE: (default) no encoding
2122
- gzip = TRUE: gzip compressed output and header &quot;Content-Encoding: gzip&quot; set,
2123
- FALSE: (default) no compressing</p>
2124
- <p class="label">Example 1</p>
2125
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
2126
- $vcalendar = new vcalendar( $config );
2127
- .. .
2128
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
2129
- $vevent->setProperty( &quot;dtstart&quot;, array( &quot;year&quot; =&gt; 2007
2130
- , &quot;month&quot; =&gt; 4
2131
- , &quot;day&quot; =&gt; 1
2132
- , &quot;hour&quot; =&gt; 19 ));
2133
- $vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
2134
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
2135
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
2136
- .. .
2137
- $vcalendar->returnCalendar();
2138
- </p>
2139
- <p class="label">Example 2</p>
2140
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2141
- &quot;directory&quot; =&gt; &quot;import&quot;,
2142
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2143
- $vcalendar = new vcalendar( $config );
2144
- $vcalendar->parse();
2145
- $utf8Encode = TRUE;
2146
- $hacPar = &quot;HTTP_ACCEPT_ENCODING&quot;;
2147
- if( isset( $_SERVER[$hacPar] ) &amp;&amp;
2148
- ( FALSE !== strpos( strtolower( $_SERVER[$hacPar] ), &quot;gzip&quot; )))
2149
- $gzip = TRUE;
2150
- else
2151
- $gzip = FALSE;
2152
- $vcalendar->returnCalendar( $utf8Encode, $gzip );
2153
- </p>
2154
- <br>
2155
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2156
-
2157
- <a name="saveCalendar"></a><h4>3.1.4.4 saveCalendar</h4>
2158
- Save ical <i>calendar</i> in a file, uses present directory if directory not set, filename is automatically generated if missing or not set;<br>
2159
- <span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br>
2160
- Directory/filename <b>must</b> be writeable, delimiter default <i>PHP</i> constant DIRECTORY_SEPARATOR.
2161
- <br><br>
2162
- As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. Recommendation is to save to a local file and upload later, due to execution time and control.
2163
- <br><br>
2164
- If file error occurs, FALSE is returned.
2165
- <p class="label">Format</p>
2166
- <p class="format">saveCalendar ( string directory/FALSE
2167
- [, string filename/FALSE
2168
- [, string delimiter/FALSE ]] )
2169
- </p>
2170
- Parameters for <span class="format">directory/filename/delimiter</span>, kept for backward compatibility,
2171
- may be removed i future versions. Recommendation is to use <span class="format">setConfig</span>, Se
2172
- example below.
2173
- <p class="label">Example</p>
2174
- <p class="example">.. .
2175
- $vcalendar->setConfig( array( &quot;directory&quot; =&gt; &quot;depot&quot;,
2176
- &quot;filename&quot; =&gt; &quot;calendar.ics&quot; ));
2177
- $result = $vcalendar->saveCalendar();
2178
- if( !$result )
2179
- &nbsp;&nbsp;echo &quot;error when saving.. .&quot;
2180
- </p>
2181
- <br>
2182
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2183
-
2184
- <a name="sort"></a><h4>3.1.4.5 sort</h4>
2185
- <p class="label">Format 1</p>
2186
- Sort created/parsed <i>calendar</i> components on the following (prioritized) keys:<br>
2187
- 1 - X-CURRENT-DTSTART - X-CURRENT-DTEND/X-CURRENT-DUE<br>
2188
- &nbsp;&nbsp;&nbsp;&nbsp;(if created in function <a href="#selectComponents">selectComponents</a>)<br>
2189
- 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DTEND">DTEND</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VEVENT">VEVENT</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components)<br>
2190
- 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DUE">DUE</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VTODO">VTODO</a> components)<br>
2191
- 1 - <a href="#DTSTART">DTSTART</a> (<a href="#VJOURNAL">VJOURNAL</a> components)<br>
2192
- 2 - <a href="#CREATED">CREATED</a> / <a href="#DTSTAMP">DTSTAMP</a><br>
2193
- 3 - <a href="#UID">UID</a><br>
2194
- <a href="#VTIMEZONE">VTIMEZONE</a> component(-s) are always sorted first in chain.<br>
2195
- Sub-components (<a href="#VTIMEZONE">STANDARD</a>&nbsp;/&nbsp;<a href="#VTIMEZONE">DAYLIGHT</a>&nbsp;/&nbsp;<a href="#VALARM">ALARM</a>), if exists, are not sorted.
2196
- <p class="format">sort()</p>
2197
- <p class="label">Example</p>
2198
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2199
- &quot;directory&quot; =&gt; &quot;import&quot;,
2200
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2201
- $vcalendar = new vcalendar( $config );
2202
- $vcalendar->parse();
2203
- $vcalendar->sort();
2204
- $vcalendar->returnCalendar();
2205
- </p>
2206
-
2207
- <p class="label">Format 2</p>
2208
- Sort created/parsed <i>calendar</i> components on specific property values and ascending order.
2209
- <p class="format">sort( sortArgument )</p>
2210
- <p class="comment">sortArgument: &quot;<a href="#ATTENDEE">ATTENDEE</a>&quot; / &quot;<a href="#CATEGORIES">CATEGORIES</a>&quot; / &quot;<a href="#DTSTAMP">DTSTAMP</a>&quot; / &quot;<a href="#LOCATION">LOCATION"</a>&quot; /
2211
- &quot;<a href="#ORGANIZER">ORGANIZER</a>&quot; /&quot;<a href="#RESOURCES">RESOURCES</a>&quot; / &quot;<a href="#PRIORITY">PRIORITY</a>&quot; / &quot;<a href="#STATUS">STATUS</a>&quot; / &quot;<a href="#SUMMARY">SUMMARY</a>&quot;
2212
- for a property where multiple occurrence may exist
2213
- (<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#RESOURCES">RESOURCES</a> ),
2214
- lowest (alphabetic) value is used as sort parameter.
2215
- </p>
2216
- <br>
2217
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2218
-
2219
- <a name="useCachedCalendar"></a><h4>3.1.4.6 useCachedCalendar</h4>
2220
- If recent version of local (non-empty and saved) <i>calendar</i> file exists, an HTTP redirect header is sent otherwise FALSE is returned.
2221
- <p class="label">Format</p>
2222
- <p class="format">useCachedCalendar( [ int timeout ] )
2223
- useCachedCalendar( string directory/FALSE
2224
- , string filename/FALSE
2225
- , string delimiter/FALSE
2226
- [, int timeout ] )
2227
- </p>
2228
- <p class="comment">timeout : default 3600 sec
2229
- Second format with parameters for <span class="format">directory/filename/delimiter</span>,<br>kept for backward compatibility, may be removed i future<br>versions. Recommendation is to use <span class="format">setConfig</span>, Se example below.</p>
2230
- <p class="label">Example</p>
2231
- <p class="example">.. .
2232
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2233
- $vcalendar->setConfig( &quot;filename&quot;, &quot;calendar.ics&quot; );
2234
- $vcalendar->useCachedCalendar();
2235
- </p>
2236
- <br>
2237
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2238
-
2239
- <a name="Calendar_configuration_functions"></a><h3>3.1.5 Calendar configuration functions</h3>
2240
-
2241
- <a name="configKeys"></a><h4>3.1.5.1 configuration keys</h4>
2242
- All configuration keys (allowEmpty, compsInfo etc.) case independent.
2243
- <br>
2244
- <br>
2245
- <table>
2246
- <tr>
2247
- <td class="bl bb">key</td>
2248
- <td class="bl bb"><i>calendar</i></td>
2249
- <td class="bl bb">component</td>
2250
- <td class="bl bb">remark</td>
2251
- </tr>
2252
- <tr>
2253
- <td class="bl bb"><a class="ref" href="#allowEmpty">allowEmpty</a></td>
2254
- <td class="bl bb center">*</td>
2255
- <td class="bl bb center">*</td>
2256
- <td class="bl bb ref">&nbsp;</td>
2257
- </tr>
2258
- <tr>
2259
- <td class="bl bb"><a class="ref" href="#Compsinfo">Compsinfo</a></td>
2260
- <td class="bl bb center">*</td>
2261
- <td class="bl bb center">*</td>
2262
- <td class="bl bb ref">getConfig only</td>
2263
- </tr>
2264
- <tr>
2265
- <td class="bl bb"><a class="ref" href="#Delimiter">Delimiter</a></td>
2266
- <td class="bl bb center">*</td>
2267
- <td class="bl bb">&nbsp;</td>
2268
- <td class="bl bb ref">&nbsp;</td>
2269
- </tr>
2270
- <tr>
2271
- <td class="bl bb"><a class="ref" href="#Directory">Directory</a></td>
2272
- <td class="bl bb center">*</td>
2273
- <td class="bl bb">&nbsp;</td>
2274
- <td class="bl bb ref">&nbsp;</td>
2275
- </tr>
2276
- <tr>
2277
- <td class="bl bb"><a class="ref" href="#Filename">Filename</a></td>
2278
- <td class="bl bb center">*</td>
2279
- <td class="bl bb">&nbsp;</td>
2280
- <td class="bl bb ref">&nbsp;</td>
2281
- </tr>
2282
- <tr>
2283
- <td class="bl bb"><a class="ref" href="#Dirfile">Dirfile</a></td>
2284
- <td class="bl bb center">*</td>
2285
- <td class="bl bb">&nbsp;</td>
2286
- <td class="bl bb ref">getConfig only</td>
2287
- </tr>
2288
- <tr>
2289
- <td class="bl bb"><a class="ref" href="#Filesize">Filesize</a></td>
2290
- <td class="bl bb center">*</td>
2291
- <td class="bl bb">&nbsp;</td>
2292
- <td class="bl bb ref">getConfig only</td>
2293
- </tr>
2294
- <tr>
2295
- <td class="bl bb"><a class="ref" href="#Format">Format</a></td>
2296
- <td class="bl bb center">*</td>
2297
- <td class="bl bb">&nbsp;</td>
2298
- <td class="bl bb ref">&nbsp;</td>
2299
- </tr>
2300
- <tr>
2301
- <td class="bl bb"><a class="ref" href="#Language">Language</a></td>
2302
- <td class="bl bb center">*</td>
2303
- <td class="bl bb center">*</td>
2304
- <td class="bl bb ref">&nbsp;</td>
2305
- </tr>
2306
- <tr>
2307
- <td class="bl bb"><a class="ref" href="#NewlineChar">NewlineChar</a></td>
2308
- <td class="bl bb center">*</td>
2309
- <td class="bl bb center">*</td>
2310
- <td class="bl bb ref">&nbsp;</td>
2311
- </tr>
2312
- <tr>
2313
- <td class="bl bb"><a class="ref" href="#dTZID">TZID</a></td>
2314
- <td class="bl bb center">*</td>
2315
- <td class="bl bb center">*</td>
2316
- <td class="bl bb ref">&nbsp;</td>
2317
- </tr>
2318
- <tr>
2319
- <td class="bl bb"><a class="ref" href="#Unique_id">Unique_id</a></td>
2320
- <td class="bl bb center">*</td>
2321
- <td class="bl bb center">*</td>
2322
- <td class="bl bb ref">&nbsp;</td>
2323
- </tr>
2324
- <tr>
2325
- <td class="bl bb"><a class="ref" href="#configURL">URL</a></td>
2326
- <td class="bl bb center">*</td>
2327
- <td class="bl bb">&nbsp;</td>
2328
- <td class="bl bb ref">&nbsp;</td>
2329
- </tr>
2330
- </table>
2331
- <br>
2332
- <br>
2333
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2334
-
2335
- <a name="getConfig"></a><h4>3.1.5.2 getConfig</h4>
2336
- <p class="format">getConfig( [string key )</p>
2337
- <p class="label">Example 1</p>
2338
- <p class="example">.. .
2339
- $filename = $vcalendar->getConfig( &quot;filename&quot; );
2340
- .. .</p>
2341
- In this example, notice <a href="#Filename">Filename</a>
2342
- <br>
2343
- <p class="label">Example 2</p>
2344
- <p class="example">.. .
2345
- $config = $vcalendar->getConfig();
2346
- .. .</p>
2347
- <p class="comment">Output= array( string key =&gt; mixed value
2348
- *[, string key =&gt; mixed value] )</p>
2349
- <br>
2350
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2351
-
2352
- <a name="initConfig"></a><h4>3.1.5.3 calendar/component initialization</h4>
2353
- <p class="label">Format</p>
2354
- When creating a new <i>calendar</i>.
2355
- <p class="format">vcalendar( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
2356
- <p class="label">Example 1</p>
2357
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2358
- &quot;directory&quot; =&gt; &quot;import&quot;,
2359
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2360
- $vcalendar = new vcalendar( $config );
2361
- .. .
2362
- </p>
2363
- When creating a new <i>calendar</i> component.
2364
- <p class="format">component( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
2365
- <p class="label">Example 2</p>
2366
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
2367
- $vevent = new vevent( $config );
2368
- .. .
2369
- </p>
2370
- <p class="label">Example 3</p>
2371
- <p class="example">. ..
2372
- $config = $vcalendar->getConfig();
2373
- $vevent = new vevent( $config );
2374
- .. .
2375
- </p>
2376
- Only component relevant configuration are set. If using the <a href="#newComponent">newComponent</a> function, configuration is set automatically.
2377
- <br>
2378
- <br>
2379
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2380
-
2381
- <a name="setConfig"></a><h4>3.1.5.4 setConfig</h4>
2382
- A successful &quot;setConfig&quot; returns TRUE.
2383
- <p class="label">Format 1</p>
2384
- <p class="format">setConfig( array( string key=>mixed value *[, string key=>mixed value]))</p>
2385
- <p class="label">Example 1</p>
2386
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2387
- &quot;directory&quot; =&gt; &quot;import&quot;,
2388
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2389
- $vcalendar = new vcalendar();
2390
- $vcalendar->setConfig( $config );
2391
- .. .
2392
- </p>
2393
- <p class="label">Example 2</p>
2394
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
2395
- $vevent = new vevent();
2396
- $vevent->setConfig( $config );
2397
- .. .
2398
- </p>
2399
- <p class="label">Format 2</p>
2400
- <p class="format">setConfig( string key, string value )</p>
2401
- <p class="label">Example 1</p>
2402
- <p class="example">$vcalendar = new vcalendar();
2403
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2404
- .. .
2405
- </p>
2406
- <p class="label">Example 2</p>
2407
- <p class="example">$vevent = new vevent();
2408
- $vevent->setConfig( &quot;unique_id&quot;, &quot;kigkonsult.se&quot; );
2409
- .. .
2410
- </p>
2411
- <br>
2412
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2413
-
2414
- <a name="allowEmpty"></a><h4>3.1.5.5 Allow empty components</h4>
2415
- Allow or reject empty <i>calendar</i> properties, default allow (TRUE).
2416
-
2417
- <br>
2418
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2419
-
2420
- <a name="Compsinfo"></a><h4>3.1.5.6 Component information</h4>
2421
- Only to use with function getConfig.<br>
2422
- <br>
2423
- Get information about <i>calendar</i> components. Returns array with basic information
2424
- about all components (in array format) within <i>calendar</i>.
2425
- <p class="comment">Output = array ( *compinfo )
2426
- compinfo = array ( &quot;ordno&quot; =&gt; int ordno,
2427
- // <span class="ref">order number (1st=1, 2nd=2..)</span>
2428
- , &quot;type&quot; =&gt; string type
2429
- // <span class="ref">component type (vevent, vtodo.. .</span>
2430
- , &quot;uid&quot; =&gt; string uid
2431
- // <span class="ref">component <a href="#UID">UID</a> (not for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a>)</span>
2432
- , &quot;props&quot; =&gt;
2433
- array( *[ propertyName =&gt; Property count ])
2434
- // <span class="ref">for every set property</span>
2435
- , &quot;sub&quot; =&gt; array( *compinfo ))
2436
- // <span class="ref">if subcomponents exists, an array for each subcomponent</span></p>
2437
- <p class="label">Example</p>
2438
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2439
- &quot;directory&quot; =&gt; &quot;import&quot;,
2440
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2441
- $vcalendar = new vcalendar( $config );
2442
- $vcalendar->parse();
2443
- $compsinfo = $vcalendar->getConfig( &quot;compsinfo&quot; );
2444
- foreach( $compsinfo as compinfo) {
2445
- &nbsp;echo &quot; order number : &quot;.$compinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2446
- &nbsp;echo &quot; type : &quot;.$compinfo[&quot;type&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2447
- &nbsp;echo &quot; UID : &quot;.$compinfo[&quot;uid&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2448
- &nbsp;foreach( $compinfo[&quot;props&quot;] as $propertyName =&gt; $propertyCount )
2449
- &nbsp;&nbsp;echo &quot; $propertyName = $propertyCount&quot;;
2450
- &nbsp;if( is_array( $compinfo[&quot;sub&quot;] )) {
2451
- &nbsp;&nbsp;foreach( $compinfo[&quot;sub&quot;] as $subcompinfo ) {
2452
- &nbsp;&nbsp;&nbsp;echo &quot; order number : &quot;.$subcompinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2453
- &nbsp;&nbsp;&nbsp;/* .. dito if subcomponents exists .. . */
2454
- &nbsp;&nbsp;}
2455
- &nbsp;}
2456
- }
2457
- </p>
2458
- <br>
2459
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2460
-
2461
- <a name="Delimiter"></a><h4>3.1.5.7 Delimiter</h4>
2462
- Directory/filename delimiter.
2463
- <br>
2464
- <br>
2465
- Default <i>PHP</i> constant DIRECTORY_SEPARATOR. If used, <b>must</b> be set BEFORE filename!
2466
- <br>
2467
- <br>
2468
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2469
-
2470
- <a name="Directory"></a><h4>3.1.5.8 Directory</h4>
2471
- Local directory to store/read iCal files, default &nbsp;&quot;<b>.</b>&quot;.
2472
- <br>
2473
- <br>
2474
- Directory <b>must</b> be set BEFORE <a href="#Filename">filename</a> and <b>must</b> exist and be writeable otherwise FALSE is returned.
2475
- If set using an config array and together with <a name="Filename"><u>Filename</u></a>, Directory are set first.
2476
- When setting Directory any previously set <a href="#configURL">URL</a> is removed.
2477
- <br>
2478
- <br>
2479
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2480
-
2481
- <a name="Fileinfo"></a><h4>3.1.5.9 Fileinfo</h4>
2482
- Only available in function getConfig, giving information in array format about <a href="#Directory">directory</a>, <a href="#Filename">filename</a> and <a href="#Filesize">filesize</a>.
2483
- <p class="label">Example</p>
2484
- <p class="example">$fileinfo = $vcalendar->getConfig( &quot;fileinfo&quot; );</p>
2485
- <p class="comment">output = array( &lt;directory&gt;, &lt;filename&gt;, &lt;filesize&gt; )</p>
2486
- <br>
2487
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2488
-
2489
- <a name="Filename"></a><h4>3.1.5.10 Filename</h4>
2490
- iCal local file name, default created like (if not set):<br>
2491
- <p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;;</p>
2492
- <p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.xml&quot;; <span class="comment"> // if <a href="#Format">format</a> set to &quot;xcal&quot;</span></p>
2493
- <br>
2494
- If not set, filename is created when requested, ex. in functions <a href="#saveCalendar">saveCalendar</a> or getConfig(&quot;filename&quot;).
2495
- <br>
2496
- <br>
2497
- Local filename <b>must</b> be set AFTER setting directory (and opt. delimiter)!
2498
- Filename (and opt. directory) <b>must</b> be readable/writeable otherwise FALSE is returned.
2499
- <br>
2500
- <br>
2501
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2502
-
2503
- <a name="Filesize"></a><h4>3.1.5.11 Filesize</h4>
2504
- Only when getting configuration (using function getConfig).<br>
2505
- Returns the size of the file in bytes, to be called<br>
2506
- - after &quot;saveCalendar()&quot;<br>
2507
- or<br>
2508
- - after a &quot;setConfig( &quot;directory&quot; / &quot;filename&quot; )&quot; and before/after &quot;parse()&quot;.<br>
2509
- Getting the filesize for a remote file (URL) will always return zero.
2510
- <br>
2511
- <br>
2512
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2513
-
2514
- <a name="Format"></a><h4>3.1.5.12 Format</h4>
2515
- Format for <i>calendar</i> output, &quot;iCal&quot;/&quot;xCal&quot;, any case.
2516
- <br>
2517
- &quot;iCal&quot; is default (rfc2445), &quot;xCal&quot; force xml formatted output.
2518
- <br>
2519
- <br>
2520
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2521
-
2522
- <a name="Language"></a><h4>3.1.5.13 Language</h4>
2523
- Language for <i>calendar</i> and component TEXT value properties as defined in [RFC 1766].
2524
- <br>
2525
- <br>
2526
- If NOT set in TEXT property parameters, language from &quot;setConfig( &quot;language&quot;, ..&quot; at component level will be used, if set,
2527
- otherwise language from &quot;setConfig( &quot;language&quot;, ..&quot; at <i>calendar</i> level will be used, if set.
2528
- <br>
2529
- <br>
2530
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2531
-
2532
- <a name="NewlineChar"></a><h4>3.1.5.14 NewlineChar</h4>
2533
- Character(s) used for carriage return + line feed (CR+LF), default &quot;\r\n&quot;.
2534
- <br>
2535
- <br>
2536
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2537
-
2538
- <a name="dTZID"></a><h4>3.1.5.15 TZID</h4>
2539
- Default (local?) timezone, will be used if no TZID parameter is supplied when setting <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a> or <a href="#RECURRENCE-ID">RECURRENCE-ID</a> (auto completion).
2540
- Note, some <i>calendar</i> software also require <a href="#Additional_Descriptors">X-WR-TIMEZONE</a> (to be set manually).
2541
- <br>
2542
- <br>
2543
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2544
-
2545
- <a name="Unique_id"></a><h4>3.1.5.16 Unique_id</h4>
2546
- Unique_id is used in property PRODID at <i>calendar</i> level and <a href="#UID">UID</a> at component level, both created automatically, if not set.
2547
- <p class="quotes">PRODID
2548
- The identifier is RECOMMENDED to be the identical syntax to the
2549
- [RFC 822] addr-spec. A good method to assure uniqueness is to put the
2550
- domain name or a domain literal IP address of the host on which.. .<p>
2551
- Default <b>AUTOMATICALLY</b> generated by using <i>PHP</i> function gethostbyname( $_SERVER[&quot;SERVER_NAME&quot;] )
2552
- when running in a web server environment or &quot;localhost&quot; when using command line interface.
2553
- Used when setting other (domain) name than server name.
2554
- <br>
2555
- <br>
2556
- A strong recommendation is <b>always</b> to set unique_id when creating a new vcalendar or component object,
2557
- to ensure accurate creation of all components <a href="#UID">UID</a> property, also before <a href="#parse">parse</a>, in case of missing <a href="#UID">UID</a>.
2558
- <br>
2559
- <br>
2560
-
2561
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2562
-
2563
- <a name="configURL"></a><h4>3.1.5.17 URL</h4>
2564
- When managing remote files with URL (writing using <a href="#saveCalendar">saveCalendar()</a>, or reading using <a href="#parse">parse()</a>),
2565
- only protocol &quot;http&quot; (&quot;webcal&quot;) is supported,
2566
- i.e. url <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.
2567
- <br>
2568
- When setting URL, any previously set Directory is removed.<br>
2569
- The URL filename part can be retrieved by - getConfig( &quot;filename&quot; ).
2570
- <br>
2571
- <br>
2572
- When storing a remote iCal file locally, only directory need to be set,
2573
- filename remains unchanged (i.e. 1. set URL, 2. parse, 3. set directory).
2574
- <p class="label">Example</p>
2575
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2576
- &quot;url&quot;, &quot;http://www.iCal.net/depot/calendar.ics&quot; );
2577
- $vcalendar = new vcalendar( $config );
2578
- $vcalendar->parse();
2579
- $vcalendar->sort();
2580
- .. .
2581
- .. .
2582
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2583
- $vcalendar->saveCalendar(); // <span class="ref">local save in &quot;depot&quot; folder, </span>
2584
- // <span class="ref">using original filename</span>
2585
- </p>
2586
- <br>
2587
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2588
-
2589
- <a name="Calendar_component_object_property_function_list"></a><h2>3.2 Calendar component object property function list</h2>
2590
- <p>
2591
- All <i>calendar</i> component property functions for get/set data.<br>
2592
- For property format in detail, see
2593
- <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
2594
- </p>
2595
- <a name="DATE_WITH_UTC_TIME"></a>
2596
- <span class="label">Notice:</span> for properties and DATE-TIME with <b>UTC</b> time.
2597
- <p class="quotes">RFC2445:
2598
- The date with UTC time, or absolute time, is identified by a LATIN
2599
- CAPITAL LETTER Z suffix character (US-ASCII decimal 90), the UTC
2600
- designator, appended to the time value. For example, the following
2601
- represents January 19, 1998, at 0700 UTC:
2602
- </p>
2603
- <p class="quotes">DTSTART:19980119T070000Z</p>
2604
- <p class="quotes">The <a href="#TZID">TZID</a> property parameter MUST <b>NOT</b> be applied to DATE-TIME
2605
- properties whose time values are specified in UTC.
2606
- </p>
2607
- <p>
2608
- <a name="date_restriction"></a>
2609
- <span class="label">Notice:</span> date limitation.<br>
2610
- Due to a limitation in <i>PHP</i> date functions, e.g. <span class="format">mktime</span>,
2611
- <span class="format">strtotime</span>, a date (e.g. while setting <a href="#DTSTART">DTSTART</a> property)
2612
- before &quot;January 1 1970 00:00:00 GMT&quot; may force a <i>PHP</i> date function to generate an error or set date to &quot;January 1 1970&quot;.
2613
- </p>
2614
- <a name="deleteProperty_PROP"></a><h3>3.2.1 deleteProperty</h3>
2615
- General <i>calendar</i> delete property function,simplifying removal of <i>calendar</i> properties.<br>
2616
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
2617
- <p class="label">Format</p>
2618
- <p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
2619
- <p class="comment">propName - case independent, rfc2445 component property names,
2620
- unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
2621
- order - if missing 1st/next occurrence,
2622
- used with multiply (property) occurrences</p>
2623
- <p class="label">Example</p>
2624
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2625
- &quot;directory&quot; =&gt; &quot;import&quot;,
2626
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2627
- $vcalendar = new vcalendar( $config );
2628
- $vcalendar->parse();
2629
- $e = $vcalendar->getComponent( &quot;vevent&quot; );
2630
- while( $e->deleteProperty( &quot;comment&quot; ))
2631
- &nbsp;&nbsp;continue; // <span class="ref">remove all COMMENT properties</span>
2632
- .. .
2633
- </p>
2634
- <br>
2635
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2636
-
2637
- <a name="getProperty_PROP"></a><h3>3.2.2 getProperty</h3>
2638
- General get property function, simplifying fetch of <i>calendar</i> properties.<br>
2639
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
2640
- <p class="label">Format</p>
2641
- <p class="format">getProperty( string PropName [, int order=1 [, bool complete=FALSE ]] )</p>
2642
- <p class="comment">propName - case independent, rfc2445 component property names,
2643
- unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
2644
- order - if missing/FALSE 1st/next occurrence,
2645
- otherwise with multiply occurrences (1st=1, 2nd=2.. .)
2646
- complete - FALSE (default): output only property value
2647
- TRUE : output =
2648
- array(&quot;value&quot; =&gt; &lt;value&gt;
2649
- ,&quot;params&quot;=&gt; &lt;parameter array&gt;)
2650
- </p>
2651
- <p class="label">Example</p>
2652
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
2653
- &quot;directory&quot; =&gt; &quot;import&quot;,
2654
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2655
- $vcalendar = new vcalendar( $config );
2656
- $vcalendar->parse();
2657
- while( $vevent = $vcalendar->getComponent( &quot;vevent&quot; )) {
2658
- &nbsp;$dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="ref">one occurrence</span>
2659
- &nbsp;$description = $vevent->getProperty( &quot;description&quot; ); // <span class="ref">one occurrence</span>
2660
- &nbsp;while( $comment = $vevent->getProperty( &quot;comment&quot; )) {
2661
- // <span class="ref">MAY occur more than once</span>
2662
- &nbsp;.. .
2663
- &nbsp;}
2664
- .. .
2665
- </p>
2666
- <br>
2667
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2668
-
2669
- <a name="parse"></a><h3>3.2.3 parse</h3>
2670
- Parse strict rfc2445 component property text and/or ALARMs.
2671
- <br><br>
2672
- A rfc2445 strict formatted property text, in string or array format and starting with property name.
2673
- <br>
2674
- <br>
2675
- Complete <a href="#VALARM">ALARM</a>s, all properties included, in array format and
2676
- first array row as &quot;BEGIN:VALARM&quot;, last as &quot;END:VALARM&quot;
2677
- as well as <a href="#VTIMEZONE">TIMEZONE</a> and standard/daylight subcomponents.
2678
- <br><br>
2679
- FALSE is returned if (read-file) problems occur.
2680
- <p class="label">Format</p>
2681
- <p class="format">parse( mixed propertyText )</p>
2682
- <p class="comment">
2683
- propertyText = string/array,
2684
- rcf2445 formatted property/properties,
2685
- property name <b>must</b> begin (first) line</p>
2686
- <p class="label">example</p>
2687
- <p class="example">.. .
2688
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
2689
- $e->parse( &quot;DTSTAMP:19970324T1200Z&quot; );
2690
- $e->parse( &quot;SEQUENCE:0&quot; );
2691
- $e->parse( &quot;ORGANIZER:MAILTO:jdoe@host1.com&quot; );
2692
- $e->parse( array(
2693
- &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com&quot;,
2694
- &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com&quot;,
2695
- &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com&quot;,
2696
- &quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com&quot; ));
2697
- $e->parse( &quot;DTSTART:19970324T123000Z&quot; );
2698
- $e->parse( &quot;DTEND:19970324T210000Z&quot; );
2699
- $e->parse( &quot;CATEGORIES:MEETING,PROJECT&quot; );
2700
- $e->parse( &quot;CLASS:PUBLIC&quot; );
2701
- $e->parse( &quot;SUMMARY:Calendaring Interoperability Planning Meeting&quot; );
2702
- $e->parse( &quot;STATUS:DRAFT&quot; );
2703
- $e->parse( array(
2704
- &quot;DESCRIPTION:Project xyz Review Meeting Minutes&quot;
2705
- ,&quot;Agenda&quot;
2706
- ,&quot;1. Review of project version 1.0 requirements.&quot;
2707
- ,&quot;2. Definition of project processes.&quot;
2708
- ,&quot;3. Review of project schedule.&quot;
2709
- ,&quot;Participants: John Smith, Jane Doe, Jim Dandy&quot;
2710
- ,&quot;- It was decided that the requirements need to be signed off by &quot;.
2711
- &quot;product marketing.&quot;
2712
- ,&quot;- Project processes were accepted.&quot;
2713
- ,&quot;- Project schedule needs to account for scheduled holidays and employee&quot;.
2714
- &quot; vacation time. Check with HR for specific dates.&quot;
2715
- ,&quot;- New schedule will be distributed by Friday.&quot;
2716
- ,&quot;- Next weeks meeting is cancelled. No meeting until 3/23.&quot; ));
2717
- $e->parse( &quot;LOCATION:LDB Lobby&quot; );
2718
- $e->parse(
2719
- &quot;ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps&quot; );
2720
- $e->parse( array(
2721
- &quot;BEGIN:VALARM&quot;,
2722
- &quot;ACTION:AUDIO&quot;,
2723
- &quot;TRIGGER;VALUE=DATE-TIME:19970224T070000Z&quot;,
2724
- &quot;ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud&quot;,
2725
- &quot;REPEAT:4&quot;,
2726
- &quot;DURATION:PT1H&quot;,
2727
- &quot;X-alarm:non-standard ALARM property&quot;,
2728
- &quot;END:VALARM&quot; ));
2729
- $e->parse(
2730
- &quot;X-xomment:non-standard property will be displayed, comma escaped&quot;);
2731
- .. .
2732
- </p>
2733
- <br>
2734
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2735
-
2736
-
2737
- <a name="setProperty_PROP"></a><h3>3.2.4 setProperty</h3>
2738
- General set property function, simplifying insert of component properties. For properties where
2739
- multiple occurrences are allowed, last parameter is an index, implementing replaceProperty functionality.<br>
2740
- A successful update returns TRUE.
2741
- <p class="label">Format</p>
2742
- <p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
2743
- <p class="comment">propName case independent, rfc2445 component property names,
2744
- unknown propName will be regarded as <a href="#X-PROPERTY_PROP">X-property</a>.</p>
2745
- <p class="label">Example</p>
2746
- <p class="example">$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
2747
- $vevent->setProperty( &quot;dtstart&quot;
2748
- , array(&quot;year&quot;=&gt;2007,&quot;month&quot;=&gt;4,&quot;day&quot;=&gt;1,&quot;hour&quot;=&gt;19));
2749
- $vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
2750
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
2751
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
2752
- .. .
2753
- </p>
2754
- <br>
2755
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2756
-
2757
-
2758
- <a name="ACTION"></a><h3>3.2.5 ACTION</h3>
2759
- This property defines the action to be invoked when an <a href="#VALARM">VALARM</a> is triggered,<br> &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;. This property is REQUIRED and MUST NOT occur more than once.
2760
- <h5>Delete ACTION</h5>
2761
- Remove ACTION from component.
2762
- <p class="label">Format</p>
2763
- <p class="format">deleteProperty( &quot;Action&quot; )</p>
2764
- <p class="label">Example</p>
2765
- <p class="example">$valarm->deleteProperty( &quot;Action&quot; );</p>
2766
- <h5>Get ACTION</h5>
2767
- Fetch property value.
2768
- <p class="label">Format 1</p>
2769
- <p class="format">getProperty( &quot;Action&quot; )</p>
2770
- <p class="comment">output = actionValue <span class="ref">1</span></p>
2771
- <p class="label">Format 2</p>
2772
- <p class="format">getProperty( &quot;Action&quot;, FALSE , TRUE )</p>
2773
- <p class="comment">output = array( &quot;value&quot; =&gt; actionValue<span class="ref">1</span>
2774
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
2775
- <p class="label">Example</p>
2776
- <p class="example">$action = $valarm->getProperty( &quot;action&quot; );</p>
2777
- <h5>Set ACTION</h5>
2778
- Insert property value.
2779
- <p class="label">Format</p>
2780
- <p class="format">setProperty( &quot;Action&quot;, actionValue [, xparam ] )</p>
2781
- <p class="comment">actionValue<span class="ref">1</span> = one of &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;
2782
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
2783
- <p class="label">Example</p>
2784
- <p class="example">$valarm->setProperty( &quot;action&quot;, &quot;DISPLAY&quot; );</p>
2785
- <br>
2786
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2787
-
2788
-
2789
- <a name="ATTACH"></a><h3>3.2.6 ATTACH</h3>
2790
- The property provides the capability to associate a document object with a <i>calendar</i> component. The property is
2791
- is REQUIRED and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;procedure&quot;),
2792
- OPTIONAL and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;audio&quot;) and
2793
- OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VALARM">VALARM</a> (&quot;ACTION&quot; &quot;email&quot;) components.
2794
- <br><br>
2795
- The default value type for ATTACH is URI. The value type can also be set to BINARY to indicate inline binary encoded content information (params <span class="ref">2</span>).
2796
- <h5>Delete ATTACH</h5>
2797
- Remove ATTACH from component.
2798
- <p class="label">Format</p>
2799
- <p class="format">deleteProperty( &quot;ATTACH&quot; )</p>
2800
- <p class="label">Example 1</p>
2801
- <p class="example">$valarm->deleteProperty( &quot;ATTACH&quot; );</p>
2802
- <p class="label">Example 2</p>
2803
- Delete ATTACH property no 2.
2804
- <p class="format">$valarm->deleteProperty( &quot;ATTACH&quot;, 2 );</p>
2805
- <p class="label">Example 3</p>
2806
- Deleting all ATTACH properties.
2807
- <p class="example">while( $valarm->deleteProperty( &quot;ATTACH&quot; ))
2808
- continue;</p>
2809
- <h5>Get ATTACH</h5>
2810
- Fetch property value.
2811
- <p class="label">Format 1</p>
2812
- <p class="format">getProperty( &quot;Attach&quot; )</p>
2813
- <p class="comment">output = attachValue<span class="ref">1</span></p>
2814
- <p class="label">Format 2</p>
2815
- <p class="format">getProperty( &quot;ATTACH&quot;, propOrderNo/FALSE , TRUE )</p>
2816
- <p class="comment">output = array( &quot;value&quot; =&gt; attachValue<span class="ref">1</span>
2817
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
2818
- <p class="label">Format 3</p>
2819
- <p class="format">getProperty( &quot;Attach&quot;, propOrderNo )</p>
2820
- <p class="comment">Get propOrderNo ATTACH</p>
2821
- <p class="label">Example</p>
2822
- <p class="example">$attach = $valarm->getProperty( &quot;attach&quot; );</p>
2823
- <h5>Set ATTACH</h5>
2824
- Insert property value.
2825
- <br>
2826
- Parameters, if any, will be ordered as prescribed in rcf2445.
2827
- <p class="label">Format</p>
2828
- <p class="format">setProperty( &quot;attach&quot;, attachValue<span class="ref">1</span> [, params [, propOrderNo ]] )</p>
2829
- <p class="comment">attachValue<span class="ref">1</span> = URI / inline binary encoded content information.
2830
- params<span class="ref">2</span> = array( [ &quot;ENCODING&quot; =&gt; &quot;BASE64&quot;, &quot;VALUE&quot; =&gt; &quot;BINARY&quot; ]
2831
- [, &quot;FMTTYPE&quot; =&gt; contentType ]
2832
- [,&nbsp;xparam ] )
2833
- contentType = The parameter value MUST be the TEXT for either
2834
- an IANA registered content type or a non-standard
2835
- content type.
2836
- xparam = *[ xparamkey =&gt; xparamvalue ]
2837
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
2838
- <p class="label">Example</p>
2839
- <p class="example">$vevent->setProperty( &quot;attach&quot;
2840
- , &quot;ftp://domain.com/pub/docs/agenda.doc&quot;
2841
- , array( &quot;FMTTYPE&quot; =&gt; &quot;application/binary&quot; ));
2842
- </p>
2843
- <br>
2844
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2845
-
2846
-
2847
- <a name="ATTENDEE"></a><h3>3.2.7 ATTENDEE</h3>
2848
- The property defines an "Attendee" within a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once
2849
- in a VALARM (&quot;ACTION&quot; &quot;email&quot;), OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
2850
- <br><br>
2851
- This value type for ATTENDEE is URI, a <i>calendar</i> user address.
2852
- <h5>Delete ATTENDEE</h5>
2853
- Remove ATTENDEE from component.
2854
- <p class="label">Format</p>
2855
- <p class="format">deleteProperty( &quot;ATTENDEE&quot; )</p>
2856
- <p class="label">Example 1</p>
2857
- <p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot; );</p>
2858
- <p class="label">Example 2</p>
2859
- Delete ATTENDEE property no 2.
2860
- <p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot;, 2 );</p>
2861
- <p class="label">Example 3</p>
2862
- Deleting all ATTENDEE properties.
2863
- <p class="example">while( $valarm->deleteProperty( &quot;ATTENDEE&quot; ))
2864
- continue;</p>
2865
- <h5>Get ATTENDEE</h5>
2866
- Fetch property value.
2867
- <p class="label">Format 1</p>
2868
- <p class="format">getProperty( &quot;Attendee&quot; )</p>
2869
- <p class="comment">output = attendeeValue <span class="ref">1</span></p>
2870
- <p class="label">Format 2</p>
2871
- <p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo/FALSE , TRUE )</p>
2872
- <p class="comment">output = array( &quot;value&quot; =&gt; attendeeValue<span class="ref">1</span>
2873
- , &quot;params&quot; =&gt; array( params<span class="ref">2</span> ))</p>
2874
- <p class="label">Format 3</p>
2875
- <p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo )</p>
2876
- <p class="comment">Get propOrderNo ATTENDEE</p>
2877
- <p class="label">Example</p>
2878
- <p class="example">$attendee = $valarm->getProperty( &quot;attendee&quot; );</p>
2879
- <h5>Set ATTENDEE</h5>
2880
- Insert property value. If exist, default parameter values are removed after input (params<span class="ref">2</span>).
2881
- Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ), if missing, &quot;mailto:&quot; is set (ex. indicating an internet mail address).
2882
- Also MEMBER and DIR parameters must be prefixed by protocol. DELEGATED-TO, DELEGATED-FROM, SENT-BY parameters must use protocol &quot;mailto:&quot;, prefixed if missing (ex. indicating an internet mail address).
2883
- <br>
2884
- Parameters, if any, will be ordered as prescribed in rcf2445.
2885
- <p class="label">Format</p>
2886
- <p class="format">setProperty( &quot;attendee&quot;, attendeeValue [, params [, propOrderNo ]] )</p>
2887
- <p class="comment">attendeeValue<span class="ref">1</span> = a <i>calendar</i> user address, a URI as defined by
2888
- [RFC 1738] or any other IANA registered form
2889
- for a URI.
2890
- params<span class="ref">2</span> = array( [CUTYPE] [,MEMBER] [,ROLE] [,PARTSTAT]
2891
- [,RVSP] [,DELEGATED-TO] [,DELEGATED-FROM]
2892
- [,SENT-BY] [,CN] [,DIR] [,LANGUAGE]
2893
- [,xparams] )
2894
- CUTYPE = "CUTYPE" =&gt; &quot;INDIVIDUAL&quot;
2895
- (An individual, <b>Default</b>)
2896
- / &quot;GROUP&quot;
2897
- (A group of individuals)
2898
- / &quot;RESOURCE&quot;
2899
- (A physical resource)
2900
- / &quot;ROOM&quot;
2901
- (A room resource)
2902
- / &quot;UNKNOWN&quot;
2903
- (Otherwise not known)
2904
- / x-name
2905
- (Experimental type)
2906
- / iana-token
2907
- (Other IANA registered type)
2908
- MEMBER = "MEMBER" =&gt; array( *[ &quot;single member
2909
- of the group or list membership&quot;])
2910
- ROLE = "ROLE" =&gt; &quot;CHAIR&quot;
2911
- (Indicates chair of the <i>calendar</i>
2912
- entity)
2913
- / &quot;REQ-PARTICIPANT&quot;
2914
- (required participation, <b>Default</b>)
2915
- / &quot;OPT-PARTICIPANT&quot;
2916
- (optional participation)
2917
- / &quot;NON-PARTICIPANT&quot;
2918
- (information purposes only)
2919
- / x-name
2920
- (Experimental role)
2921
- / iana-token
2922
- (Other IANA role)
2923
- PARTSTAT = &quot;PARTSTAT&quot; =&gt; &quot;NEEDS-ACTION&quot;
2924
- (Event needs action, <b>Default</b>)
2925
- / &quot;ACCEPTED&quot;
2926
- (Event accepted)
2927
- / &quot;DECLINED&quot;
2928
- (Event declined)
2929
- / &quot;TENTATIVE&quot;
2930
- (Event tentatively accepted)
2931
- / &quot;DELEGATED&quot;
2932
- (Event delegated)
2933
- / &quot;NEEDS-ACTION&quot;
2934
- (To-do needs action, <b>Default</b>)
2935
- / &quot;ACCEPTED&quot;
2936
- (To-do accepted)
2937
- / &quot;DECLINED&quot;
2938
- (To-do declined)
2939
- / &quot;TENTATIVE&quot;
2940
- (To-do tentatively accepted)
2941
- / &quot;DELEGATED&quot;
2942
- (To-do delegated)
2943
- / &quot;COMPLETED&quot;
2944
- (To-do completed.
2945
- <a href="#COMPLETED">COMPLETED</a> property
2946
- has date/time completed)
2947
- / &quot;IN-PROCESS&quot;
2948
- (To-do in process of being completed)
2949
- / &quot;NEEDS-ACTION&quot;
2950
- (Journal needs action, <b>Default</b>)
2951
- / &quot;ACCEPTED&quot;
2952
- (Journal accepted)
2953
- / &quot;DECLINED&quot;
2954
- (Journal declined)
2955
- / x-name
2956
- (Experimental status)
2957
- / iana-token
2958
- (Other IANA registered status)
2959
- RSVP = &quot;RSVP&quot; =&gt; &quot;TRUE&quot;
2960
- / &quot;FALSE&quot;, <b>Default</b> (reply expectation)
2961
- DELEGATED-TO = &quot;DELEGATED-TO&quot; =&gt; array(*[&quot;single <i>calendar</i> user
2962
- to specified by the property
2963
- has delegated participation&quot;])
2964
- DELEGATED-FROM = &quot;DELEGATED-FROM&quot; =&gt; array( *[ &quot;single <i>calendar</i> user that
2965
- have delegated their
2966
- participation to the
2967
- <i>calendar</i> user specified
2968
- by the property&quot; ] )
2969
- SENT-BY = &quot;SENT-BY&quot; =&gt; single <i>calendar</i> user that is
2970
- acting on behalf
2971
- of the <i>calendar</i> user
2972
- specified by the property&quot;
2973
- LANGUAGE = &quot;LANGUAGE&quot; =&gt; language for text values in CN parameter&quot;
2974
- CN = &quot;CN&quot; =&gt; &quot;common name to be associated with the <i>calendar</i>
2975
- user specified by the property&quot;
2976
- DIR = &quot;DIR&quot; =&gt; &quot;reference to a directory entry associated with
2977
- the <i>calendar</i> user specified by the property&quot;
2978
- xparam = *[ xparamkey =&gt; xparamvalue ]
2979
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
2980
- See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
2981
- <p class="label">Example</p>
2982
- <p class="example">$vevent->setProperty( &quot;attendee&quot;
2983
- , &quot;attendee1@ical.net&quot;
2984
- $vevent->setProperty( &quot;attendee&quot;
2985
- , &quot;attendee2@ical.net&quot;
2986
- , array( &quot;cutype&quot; =&gt; &quot;INDIVIDUAL&quot;
2987
- , &quot;member&quot; =&gt; array( &quot;member1@ical.net&quot;
2988
- , &quot;member2@ical.net&quot;
2989
- , &quot;member3@ical.net&quot; )
2990
- , &quot;role&quot; =&gt; &quot;CHAIR&quot;
2991
- , &quot;PARTSTAT&quot; =&gt; &quot;ACCEPTED&quot;
2992
- , &quot;RSVP&quot; =&gt; &quot;TRUE&quot;
2993
- , &quot;DELEgated-to&quot; =&gt; array( &quot;part1@ical.net&quot;
2994
- , &quot;part2@ical.net&quot;
2995
- , &quot;part3@ical.net&quot; )
2996
- , &quot;delegateD-FROM&quot; =&gt;array( &quot;cio@ical.net&quot;
2997
- , &quot;vice.cio@ical.net&quot;)
2998
- , &quot;SENT-BY&quot; =&gt; &quot;secretary@ical.net&quot;
2999
- , &quot;LANGUAGE&quot; =&gt; &quot;us-EN&quot;
3000
- , &quot;CN&quot; =&gt; &quot;John Doe&quot;
3001
- , &quot;DIR&quot; =&gt; &quot;http://www.ical.net/info.doc&quot;
3002
- , &quot;x-agenda&quot; =&gt; &quot;status reports&quot; <span class="comment">// xparam</span>
3003
- , &quot;x-length&quot; =&gt; &quot;15 min&quot; )); <span class="comment">// xparam</span>
3004
- </p>
3005
- <br>
3006
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3007
-
3008
- <a name="CATEGORIES"></a><h3>3.2.8 CATEGORIES</h3>
3009
- This property defines the categories for a <i>calendar</i> component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
3010
- The value type for CATEGORIES is TEXT.
3011
- <h5>Delete CATEGORIES</h5>
3012
- Remove CATEGORIES from component.
3013
- <p class="label">Format</p>
3014
- <p class="format">deleteProperty( &quot;CATEGORIES&quot; )</p>
3015
- <p class="label">Example 1</p>
3016
- <p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot; );</p>
3017
- <p class="label">Example 2</p>
3018
- Delete CATEGORIES property no 2.
3019
- <p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot;, 2 );</p>
3020
- <p class="label">Example 3</p>
3021
- Deleting all CATEGORIES properties.
3022
- <p class="example">while( $vevent->deleteProperty( &quot;CATEGORIES&quot; ))
3023
- continue;</p>
3024
- <h5>Get CATEGORIES</h5>
3025
- Fetch property value.
3026
- <p class="label">Format 1</p>
3027
- <p class="format">getProperty( &quot;CATEGORIES&quot; )</p>
3028
- <p class="comment">output = categoryValue<span class="ref">1</span></p>
3029
- <p class="label">Format 2</p>
3030
- <p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo/FALSE , TRUE )</p>
3031
- <p class="comment">output = array( &quot;value&quot; =&gt; categories<span class="ref">1</span>
3032
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3033
- <p class="label">Format 3</p>
3034
- <p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo )</p>
3035
- <p class="comment">Get propOrderNo CATEGORIES</p>
3036
- <p class="label">Example</p>
3037
- <p class="example">$categories = $valarm->getProperty( &quot;categories&quot; );</p>
3038
- <h5>Set CATEGORIES</h5>
3039
- Insert property value.
3040
- <br>
3041
- Parameters, if any, will be ordered as prescribed in rcf2445.
3042
- <p class="label">Format</p>
3043
- <p class="format">setProperty( &quot;categories&quot;, mixed categories [, params [, propOrderNo ]] )</p>
3044
- <p class="comment">categories<span class="ref">1</span> = string categoryValue / array( *categoryValue )
3045
- categoryValue<span class="ref"> </span>= textual categories or subtypes of the <i>calendar</i> component,
3046
- can be specified as a list of categories
3047
- separated by the COMMA character
3048
- params<span class="ref">2</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;][, xparam] )
3049
- xparam<span class="ref"> </span> = *[ xparamkey =&gt; xparamvalue ]
3050
- propOrderNo<span class="ref"> </span> = int ordernumber, 1=1st, 2=2nd etc</p>
3051
- <p class="label">Example</p>
3052
- <p class="example">$vevent->setProperty( &quot;categories&quot;, &quot;project_x&quot; );</p>
3053
- <br>
3054
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3055
-
3056
-
3057
- <a name="CLASS"></a><h3>3.2.9 CLASS</h3>
3058
- This property defines the access classification for a <i>calendar</i> component and is OPTIONAL
3059
- and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
3060
- <h5>Delete CLASS</h5>
3061
- Remove CLASS from component.
3062
- <p class="label">Format</p>
3063
- <p class="format">deleteProperty( &quot;CLASS&quot; )</p>
3064
- <p class="label">Example</p>
3065
- <p class="example">$vjournal->deleteProperty( &quot;CLASS&quot; );</p>
3066
- <h5>Get CLASS</h5>
3067
- Fetch property value.
3068
- <p class="label">Format 1</p>
3069
- <p class="format">getProperty( &quot;CLASS&quot; )</p>
3070
- <p class="comment">output = classValue<span class="ref">1</span></p>
3071
- <p class="label">Format 2</p>
3072
- <p class="format">getProperty( &quot;CLASS&quot;, FALSE , TRUE )</p>
3073
- <p class="comment">output = array &quot;value&quot; =&gt; classValue<span class="ref">1</span>
3074
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3075
- <p class="label">Example</p>
3076
- <p class="example">$class = $valarm->getProperty( &quot;class&quot; );</p>
3077
- <h5>Set CLASS</h5>
3078
- Insert property value.
3079
- <p class="label">Format</p>
3080
- <p class="format">setProperty( &quot;class&quot;, string classvalue [, xparam ] )</p>
3081
- <p class="comment">classvalue<span class="ref">1</span> = &quot;PUBLIC&quot;
3082
- / &quot;PRIVATE&quot;
3083
- / &quot;CONFIDENTIAL&quot;
3084
- / iana-token
3085
- / x-name
3086
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3087
- <p class="label">Example</p>
3088
- <p class="example">$vevent->setProperty( &quot;class&quot;, &quot;CONFIDENTIAL&quot; );</p>
3089
- <br>
3090
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3091
-
3092
- <a name="COMMENT"></a><h3>3.2.10 COMMENT</h3>
3093
- This property specifies non-processing information intended to provide a comment to the <i>calendar</i> user
3094
- and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VFREEBUSY">VFREEBUSY</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
3095
- The value type for COMMENT is TEXT.
3096
- <h5>Delete COMMENT</h5>
3097
- Remove COMMENT from component.
3098
- <p class="label">Format</p>
3099
- <p class="format">deleteProperty( &quot;COMMENT&quot; )</p>
3100
- <p class="label">Example 1</p>
3101
- <p class="example">$vevent->deleteProperty( &quot;COMMENT&quot; );</p>
3102
- <p class="label">Example 2</p>
3103
- Delete COMMENT property no 2.
3104
- <p class="example">$vevent->deleteProperty( &quot;COMMENT&quot;, 2 );</p>
3105
- <p class="label">Example 3</p>
3106
- Deleting all COMMENT properties.
3107
- <p class="example">while( $vevent->deleteProperty( &quot;COMMENT&quot; ))
3108
- continue;</p>
3109
- <h5>Get COMMENT</h5>
3110
- Fetch property value.
3111
- <p class="label">Format 1</p>
3112
- <p class="format">getProperty( &quot;COMMENT&quot; )</p>
3113
- <p class="comment">output = commentValue<span class="ref">1</span></p>
3114
- <p class="label">Format 2</p>
3115
- <p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo/FALSE , TRUE )</p>
3116
- <p class="comment">output = array( &quot;value&quot; =&gt; commentValue<span class="ref">1</span>
3117
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3118
- <p class="label">Format 3</p>
3119
- <p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo )</p>
3120
- <p class="comment">Get propOrderNo COMMENT</p>
3121
- <p class="label">Example</p>
3122
- <p class="example">$comment = $vevent->getProperty( &quot;comment&quot; );</p>
3123
- <h5>Set COMMENT</h5>
3124
- Insert property value.
3125
- <br>
3126
- Parameters, if any, will be ordered as prescribed in rcf2445.
3127
- <p class="label">Format</p>
3128
- <p class="format">setProperty( &quot;comment&quot;, commentValue [, params [, propOrderNo ]] )</p>
3129
- <p class="comment">commentValue<span class="ref">1</span> = Value type Text
3130
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3131
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3132
- [, xparam ] )
3133
- xparam = *[ xparamkey =&gt; xparamvalue ]
3134
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3135
- <p class="label">Example</p>
3136
- <p class="example">$vevent->setProperty( &quot;comment&quot;, &quot;this is a comment&quot; );</p>
3137
- <br>
3138
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3139
-
3140
-
3141
- <a name="COMPLETED"></a><h3>3.2.11 COMPLETED</h3>
3142
- This property defines the date and time that a <a href="#VTODO">VTODO</a> was actually completed and is OPTIONAL and MUST NOT occur more than once.<br><br>
3143
- The value type for COMPLETED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3144
- <h5>Delete COMPLETED</h5>
3145
- Remove COMPLETED from component.
3146
- <p class="label">Format</p>
3147
- <p class="format">deleteProperty( &quot;COMPLETED&quot; )</p>
3148
- <p class="label">Example</p>
3149
- <p class="example">$vtodo->deleteProperty( &quot;COMPLETED&quot; );</p>
3150
- <h5>Get COMPLETED</h5>
3151
- Fetch property value.
3152
- <p class="label">Format 1</p>
3153
- <p class="format">getProperty( &quot;COMPLETED&quot; )</p>
3154
- <p class="comment">output = completedDate<span class="ref">1</span></p>
3155
- <p class="label">Format 2</p>
3156
- <p class="format">getProperty( &quot;COMPLETED&quot;, FALSE , TRUE )</p>
3157
- <p class="comment">output = array( &quot;value&quot; =&gt; completedDate<span class="ref">1</span>
3158
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3159
- <p class="label">Example</p>
3160
- <p class="example">$completed = $vtodo->getProperty( &quot;completed&quot; );</p>
3161
- <h5>Set COMPLETED</h5>
3162
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
3163
- if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3164
- Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime from local to UTC datetime.
3165
- <p class="label">Format</p>
3166
- <p class="format">setProperty( &quot;completed&quot;, completedDate [, xparam ] )</p>
3167
- <p class="comment">completedDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3168
- , &quot;month&quot; =&gt; int month
3169
- , &quot;day&quot; =&gt; int day
3170
- [, &quot;hour&quot; =&gt; int hour
3171
- , &quot;min&quot; =&gt; int min
3172
- , &quot;sec&quot; =&gt; int sec
3173
- , &quot;tz&quot; =&gt; offset ]] )
3174
- completedDate = int year
3175
- , int month
3176
- , int day
3177
- [, int hour
3178
- , int min
3179
- , int sec ]
3180
- completedDate = array( int year
3181
- , int month
3182
- , int day
3183
- [, int hour
3184
- , int min
3185
- , int sec
3186
- [, offset ]] )
3187
- completedDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
3188
- completedDate = string datestring // <span class="ref">string date,
3189
- acceptable by strtotime function,
3190
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3191
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3192
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3193
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3194
- <p class="label">Example 1</p>
3195
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;);
3196
- $vcalendar = new vcalendar( $config );
3197
- $vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
3198
- .. .
3199
- $vtodo->setProperty( &quot;completed&quot;, 2006, 8, 10, 10, 0, 0 );
3200
- // <span class="ref">10 august 2006 10.00 UTC</span></p>
3201
- <p class="label">Example 2</p>
3202
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3203
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3204
- // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
3205
- $vtodo->setProperty( &quot;completed&quot;, $date );</p>
3206
- <br>
3207
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3208
-
3209
-
3210
- <a name="CONTACT"></a><h3>3.2.12 CONTACT</h3>
3211
- The property is used to represent textual contact information or alternately a reference to textual contact information associated with the <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in a VFREEBUSY or MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
3212
- The value type for CONTACT is TEXT.
3213
- <h5>Delete CONTACT</h5>
3214
- Remove CONTACT from component.
3215
- <p class="label">Format</p>
3216
- <p class="format">deleteProperty( &quot;CONTACT&quot; )</p>
3217
- <p class="label">Example 1</p>
3218
- <p class="example">$vevent->deleteProperty( &quot;CONTACT&quot; );</p>
3219
- <p class="label">Example 2</p>
3220
- Delete CONTACT property no 2.
3221
- <p class="example">$vevent->deleteProperty( &quot;CONTACT&quot;, 2 );</p>
3222
- <p class="label">Example 3</p>
3223
- Deleting all CONTACT properties.
3224
- <p class="example">while( $vevent->deleteProperty( &quot;CONTACT&quot; ))
3225
- continue;</p>
3226
- <h5>Get CONTACT</h5>
3227
- Fetch property value.
3228
- <p class="label">Format 1</p>
3229
- <p class="format">getProperty( &quot;CONTACT&quot; )</p>
3230
- <p class="comment">output = contactValue<span class="ref">1</span></p>
3231
- <p class="label">Format 2</p>
3232
- <p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo/FALSE , TRUE )</p>
3233
- <p class="comment">output = array( &quot;value&quot; =&gt; contactValue<span class="ref">1</span>
3234
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3235
- <p class="label">Format 3</p>
3236
- <p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo )</p>
3237
- <p class="comment">Get propOrderNo CONTACT</p>
3238
- <p class="label">Example</p>
3239
- <p class="example">$contact = $vevent->getProperty( &quot;contact&quot; );</p>
3240
- <h5>Set CONTACT</h5>
3241
- Insert property value.
3242
- <br>
3243
- Parameters, if any, will be ordered as prescribed in rcf2445.
3244
- <p class="label">Format</p>
3245
- <p class="format">setProperty( &quot;contact&quot;, contactValue [, params [, propOrderNo ]] )</p>
3246
- <p class="comment">contactValue<span class="ref">1</span> = Value type TEXT
3247
- params<span class="ref">2</span> = array ( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3248
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3249
- [, xparam] )
3250
- xparam = *[ xparamkey =&gt; xparamvalue ]
3251
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3252
- <p class="label">Example</p>
3253
- <p class="example">$c->setProperty( &quot;contact&quot;, &quot;tel 012-34 56 789&quot; )</p>
3254
- <br>
3255
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3256
-
3257
-
3258
- <a name="CREATED"></a><h3>3.2.13 CREATED</h3>
3259
- This property specifies the date and time that the <i>calendar</i> information was created by the <i>calendar</i> user agent in the <i>calendar</i> store. Note: This is analogous to the creation date and time for a file in the file system. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
3260
- The value type for CREATED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3261
- <h5>Delete CREATED</h5>
3262
- Remove CREATED from component.
3263
- <p class="label">Format</p>
3264
- <p class="format">deleteProperty( &quot;CREATED&quot; )</p>
3265
- <p class="label">Example</p>
3266
- <p class="example">$vevent->deleteProperty( &quot;CREATED&quot; );</p>
3267
- <h5>Get CREATED</h5>
3268
- Fetch property value.
3269
- <p class="label">Format 1</p>
3270
- <p class="format">getProperty( &quot;CREATED&quot; )</p>
3271
- <p class="comment">output = createdDate<span class="ref">1</span></p>
3272
- <p class="label">Format 2</p>
3273
- <p class="format">getProperty( &quot;CREATED&quot;, FALSE , TRUE )</p>
3274
- <p class="comment">output = array( &quot;value&quot; =&gt; createdDate<span class="ref">1</span>
3275
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3276
- <p class="label">Example</p>
3277
- <p class="example">$created = $vevent->getProperty( &quot;CREATED&quot; );</p>
3278
- <h5>Set CREATED</h5>
3279
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
3280
- if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3281
- Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime from local to UTC datetime.
3282
- <p class="label">Format</p>
3283
- <p class="format">setProperty( &quot;created&quot;, [ createdDate [, xparam ]] )</p>
3284
- <p class="comment">createdDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3285
- , &quot;month&quot; =&gt; int month
3286
- , &quot;day&quot; =&gt; int day
3287
- [, &quot;hour&quot; =&gt; int hour
3288
- , &quot;min&quot; =&gt; int min
3289
- , &quot;sec&quot; =&gt; int sec
3290
- , &quot;tz&quot; =&gt; offset ]] )
3291
- createdDate = int year
3292
- , int month
3293
- , int day
3294
- [, int hour
3295
- , int min
3296
- , int sec ]
3297
- createdDate = array( int year
3298
- , int month
3299
- , int day
3300
- [, int hour
3301
- , int min
3302
- , int sec
3303
- [, offset ]] )
3304
- createdDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
3305
- createdDate = string datestring // <span class="ref">string date,
3306
- acceptable by strtotime function,
3307
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3308
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3309
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3310
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3311
- <p class="label">Example 1</p>
3312
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
3313
- $vcalendar = new vcalendar( $config );
3314
- $vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
3315
- .. .
3316
- $vtodo->setProperty( &quot;created&quot;, 2006, 8, 11, 14, 30, 35 );
3317
- // <span class="ref">11 august 2006 14.30.35 UTC</span> </p>
3318
- <p class="label">Example 2</p>
3319
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3320
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3321
- // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
3322
- $vtodo->setProperty( &quot;created&quot;, $date );
3323
- .. .</p>
3324
- <p class="label">Example 3</p>
3325
- <p class="example">$vevent->setProperty( &quot;created&quot; );
3326
- // <span class="ref">current UTC date-time is set if called without parameters</span></p>
3327
- <br>
3328
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3329
-
3330
-
3331
- <a name="DESCRIPTION"></a><h3>3.2.14 DESCRIPTION</h3>
3332
- This property provides a more complete textual description of the <i>calendar</i> component, than that provided by the <a href="#SUMMARY">SUMMARY</a> property (, analogous to a mail BODY). The property is OPTIONAL, MUST NOT occur more than once within <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VALARM">VALARM</a> (PROCEDURE) but can be specified multiple times within a <a href="#VJOURNAL">VJOURNAL</a> <i>calendar</i> component. The property is REQUIRED in <a href="#VALARM">VALARM</a> (DISPLAY, EMAIL) component.<br><br>
3333
- The value type for DESCRIPTION is TEXT.
3334
- <h5>Delete DESCRIPTION</h5>
3335
- Remove DESCRIPTION from component.
3336
- <p class="label">Format</p>
3337
- <p class="format">deleteProperty( &quot;DESCRIPTION&quot; )</p>
3338
- <p class="label">Example 1</p>
3339
- <p class="example">$vevent->deleteProperty( &quot;DESCRIPTION&quot; );</p>
3340
- <p class="label">Example 2</p>
3341
- Delete DESCRIPTION property no 2.
3342
- <p class="example">$vjournal->deleteProperty( &quot;DESCRIPTION&quot;, 2 );</p>
3343
- <p class="label">Example 3</p>
3344
- Deleting all DESCRIPTION properties.
3345
- <p class="example">while( $vjournal->deleteProperty( &quot;DESCRIPTION&quot; ))
3346
- continue;</p>
3347
- <h5>Get DESCRIPTION</h5>
3348
- Fetch property value.
3349
- <p class="label">Format 1</p>
3350
- <p class="format">getProperty( &quot;DESCRIPTION&quot; )</p>
3351
- <p class="comment">output = descriptionValue<span class="ref">1</span></p>
3352
- <p class="label">Format 2</p>
3353
- <p class="format">getProperty( &quot;DESCRIPTION&quot;, FALSE , TRUE )</p>
3354
- <p class="comment">output = array( &quot;value&quot; =&gt; descriptionValue<span class="ref">1</span>
3355
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3356
- <p class="label">Example</p>
3357
- <p class="example">$description = $vevent->getProperty( &quot;description&quot; );</p>
3358
- <h5>Set DESCRIPTION</h5>
3359
- Insert property value.
3360
- <br>
3361
- Parameters, if any, will be ordered as prescribed in rcf2445.
3362
- <p class="label">Format</p>
3363
- <p class="format">setProperty( &quot;description&quot;, descriptionValue [, params [, propOrderNo ]] )</p>
3364
- <p class="comment">descriptionValue<span class="ref">1</span> = Value type TEXT
3365
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3366
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3367
- [, xparam] )
3368
- xparam = *[ xparamkey =&gt; xparamvalue ]
3369
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3370
- <p class="label">Example</p>
3371
- <p class="example">$vevent->setProperty( &quot;description&quot;, &quot;This is a description&quot; );</p>
3372
- <br>
3373
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3374
-
3375
-
3376
- <a name="DTEND"></a><h3>3.2.15 DTEND</h3>
3377
- This property specifies the date and time that a <i>calendar</i> component ends.
3378
- The property is OPTIONAL and MUST NOT occur more than once in VFREEBUSY and VEVENT. In VEVENT, it only occurs
3379
- if DURATION NOT occurs.
3380
- <br><br>
3381
- The default value type for DTEND is DATE-TIME, can be set to a DATE value type.
3382
- <br><br>
3383
- Notice that an end date without a time is in effect midnight of the day before the date, so for timeless dates, use the date following the event date for it to be correct. For an &quot;all-day event&quot; and using timeless dates, the DTEND is equal DTSTART plus one day, example all-day event (2007-12-01)<br>DTSTART;VALUE=DATE:20071201<br> DTEND;VALUE=DATE:20071202.
3384
- <h5>Delete DTEND</h5>
3385
- Remove DTEND from component.
3386
- <p class="label">Format</p>
3387
- <p class="format">deleteProperty( &quot;DTEND&quot; )</p>
3388
- <p class="label">Example</p>
3389
- <p class="example">$vevent->deleteProperty( &quot;DTEND&quot; );</p>
3390
- <h5>Get DTEND</h5>
3391
- Fetch property value.
3392
- <p class="label">Format 1</p>
3393
- <p class="format">getProperty( &quot;DTEND&quot; )</p>
3394
- <p class="comment">output = dtendDate<span class="ref">1</span></p>
3395
- <p class="label">Format 2</p>
3396
- <p class="format">getProperty( &quot;DTEND&quot;, FALSE , TRUE )</p>
3397
- <p class="comment">output = array( &quot;value&quot; =&gt; dtendDate<span class="ref">1</span>
3398
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3399
- <p class="label">Example</p>
3400
- <p class="example">$dtend = $vevent->getProperty( &quot;dtend&quot; );</p>
3401
- <h5>Set DTEND</h5>
3402
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
3403
- (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3404
- <br>
3405
- <br>
3406
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
3407
- date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
3408
- to change a datetime from a time zone to another.
3409
- <br>
3410
- <br>
3411
- Parameters, if any, will be ordered as prescribed in rcf2445.
3412
- <p class="label">Format</p>
3413
- <p class="format">setProperty( &quot;dtend&quot;, dtendDate [, params<span class="ref">2</span> ] )
3414
- <p class="comment">dtendDate<span class="ref">1</span> = array ( &quot;year&quot; =&gt; int year
3415
- , &quot;month&quot; =&gt; int month
3416
- , &quot;day&quot; =&gt; int day
3417
- [, &quot;hour&quot; =&gt; int hour
3418
- , &quot;min&quot; =&gt; int min
3419
- , &quot;sec&quot; =&gt; int sec
3420
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3421
- dtendDate = int year
3422
- , int month
3423
- , int day
3424
- [, int hour
3425
- , int min
3426
- , int sec
3427
- [, mixed tz ]]
3428
- dtendDate = array( int year
3429
- , int month
3430
- , int day
3431
- [, int hour
3432
- , int min
3433
- , int sec
3434
- [, mixed tz ]] )
3435
- dtendDate = array( &quot;timestamp&quot; =&gt; int timestamp [,&quot;tz&quot; =&gt; mixed tz])
3436
- dtendDate = string datestring // <span class="ref">string date,
3437
- acceptable by strtotime function,
3438
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3439
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3440
- dtendDate : Within the "VFREEBUSY" <i>calendar</i> component,
3441
- the time MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
3442
- tz = &lt;timezone identifier&gt; / UTC offset
3443
- (timezone will be used as tzidparam (below), if tzidparam not set)
3444
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3445
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[,xparams])
3446
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3447
- // <span class="ref">output as local date-time with timezone identifier</span>
3448
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3449
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
3450
- xparams = xparamkey =&gt; xparamvalue</p>
3451
- <p class="label">Example 1</p>
3452
- <p class="example">$vevent->setProperty( &quot;dtend&quot;
3453
- , 2006, 8, 11, 16, 30, 0 );
3454
- <span class="ref">// 11 august 2006 16.30.00 local date</span></p>
3455
- <p class="label">Example 2</p>
3456
- <p class="example">$vfreebusy->setProperty( &quot;dtend&quot;
3457
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3458
- <span class="ref">// 11 august 2006 16.30.00 -040000 :
3459
- local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
3460
- <p class="label">Example 3</p>
3461
- <p class="example">$vevent->setProperty( &quot;dtend&quot;
3462
- , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
3463
- , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
3464
- <span class="ref">// end of one or more all-day events</span></p>
3465
- <br>
3466
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3467
-
3468
-
3469
- <a name="DTSTAMP"></a><h3>3.2.16 DTSTAMP</h3>
3470
- The property indicates the date/time that the instance of the iCalendar object was created and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components. However, DTSTAMP is <b>AUTOMATICALLY</b> GENERATED in iCalcreator.
3471
- <br><br>
3472
- DTSTAMP may be required when importing iCal files into some calendaring software<br>(MS etc.),
3473
- as well as (<i>calendar</i>) <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and<br>"X-WR-TIMEZONE",
3474
- <a href="#METHOD">METHOD</a> property (value PUBLISH etc.) and the (also created) <a href="#UID">UID</a> property.
3475
- <br><br>
3476
- The value type for DTSTAMP is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3477
- <h5>Delete DTSTAMP</h5>
3478
- If DTSTAMP if removed from a component, DTSTAMP will automatically be recreated when calendar output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
3479
- <p class="label">Format</p>
3480
- <p class="format">deleteProperty( &quot;DTSTAMP&quot; )</p>
3481
- <p class="label">Example</p>
3482
- <p class="example">$vevent->deleteProperty( &quot;DTSTAMP&quot; );</p>
3483
- <h5>Get DTSTAMP</h5>
3484
- Fetch property value.
3485
- <p class="label">Format 1</p>
3486
- <p class="format">getProperty( &quot;DTSTAMP&quot; )</p>
3487
- <p class="comment">output = dtstampDate<span class="ref">1</span></p>
3488
- <p class="label">Format 2</p>
3489
- <p class="format">getProperty( &quot;DTSTAMP&quot;, FALSE , TRUE )</p>
3490
- <p class="comment">output = array( &quot;value&quot; =&gt; dtstampDate<span class="ref">1</span>
3491
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3492
- <p class="label">Example</p>
3493
- <p class="example">$dtstamp = $vevent->getProperty( &quot;dtstamp&quot; );</p>
3494
- <h5>Set DTSTAMP</h5>
3495
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
3496
- if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3497
- Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime To UTC.
3498
- <p class="label">Format</p>
3499
- <p class="format">setProperty( &quot;dtstamp&quot;, dtstampDate [, xparam ] )</p>
3500
- <p class="comment">dtstampDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3501
- , &quot;month&quot; =&gt; int month
3502
- , &quot;day&quot; =&gt; int day
3503
- [, &quot;hour&quot; =&gt; int hour
3504
- , &quot;min&quot; =&gt; int min
3505
- , &quot;sec&quot; =&gt; int sec
3506
- , &quot;tz&quot; =&gt; offset ]] )
3507
- dtstampDate = int year
3508
- , int month
3509
- , int day
3510
- [, int hour
3511
- , int min
3512
- , int sec ]
3513
- dtstampDate = array( int year
3514
- , int month
3515
- , int day
3516
- [, int hour
3517
- , int min
3518
- , int sec
3519
- [, offset ]] )
3520
- dtstampDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
3521
- dtstampDate = string datestring // <span class="ref">string date,
3522
- acceptable by strtotime function,
3523
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3524
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3525
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3526
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3527
- <p class="label">Example 1</p>
3528
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
3529
- $vcalendar = new vcalendar( $config );
3530
- $vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
3531
- .. .
3532
- $vtodo->setProperty( &quot;dstamp&quot;
3533
- , 2006, 8, 11, 7, 30, 1 );
3534
- <span class="ref">// 11 august 2006 07.30.01 UTC</span></p>
3535
- <p class="label">Example 2</p>
3536
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3537
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3538
- // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
3539
- $vtodo->setProperty( &quot;dtstamp&quot;, $date );
3540
- .. .</p>
3541
- <br>
3542
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3543
-
3544
- <a name="DTSTART"></a><h3>3.2.17 DTSTART</h3>
3545
- This property specifies when the <i>calendar</i> component begins.<br>
3546
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br>
3547
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
3548
- The default value type for DTSTART is DATE-TIME, can be set to a DATE value type.<br><br>
3549
- For an &quot;all-day event&quot; and using timeless dates, example (2007-12-01)<br>
3550
- DTSTART;VALUE=DATE:20071201<br>
3551
- DTEND;VALUE=DATE:20071202. // <span class="ref">opt., in effect midnight of the day <u>before</u> the date!!</span>
3552
- <h5>Delete DTSTART</h5>
3553
- Remove DTSTART from component.
3554
- <p class="label">Format</p>
3555
- <p class="format">deleteProperty( &quot;DTSTART&quot; )</p>
3556
- <p class="label">Example</p>
3557
- <p class="example">$vevent->deleteProperty( &quot;DTSTART&quot; );</p>
3558
- <h5>Get DTSTART</h5>
3559
- Fetch property value.
3560
- <p class="label">Format 1</p>
3561
- <p class="format">getProperty( &quot;DTSTART&quot; )</p>
3562
- <p class="comment">output = dtstartDate<span class="ref">1</span></p>
3563
- <p class="label">Format 2</p>
3564
- <p class="format">getProperty( &quot;DTSTART&quot;, FALSE , TRUE )</p>
3565
- <p class="comment">output = array( &quot;value&quot; =&gt; dtstartDate<span class="ref">1</span>
3566
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3567
- <p class="label">Example</p>
3568
- <p class="example">$dtstart = $vevent->getProperty( &quot;dtstart&quot; );</p>
3569
- <h5>Set DTSTART</h5>
3570
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3571
- <br>
3572
- <br>
3573
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
3574
- date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
3575
- to change a datetime from a time zones to another.
3576
- <br>
3577
- <br>
3578
- Parameters, if any, will be ordered as prescribed in rcf2445.
3579
- <p class="label">Format</p>
3580
- <p class="format">setProperty( &quot;dtstart&quot;, dtstartDate [, params ] )</p>
3581
- <p class="comment">dtstartDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3582
- , &quot;month&quot; =&gt; int month
3583
- , &quot;day&quot; =&gt; int day
3584
- [, &quot;hour&quot; =&gt; int hour
3585
- , &quot;min&quot; =&gt; int min
3586
- , &quot;sec&quot; =&gt; int sec
3587
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3588
- dtstartDate = int year
3589
- , int month
3590
- , int day
3591
- [, int hour
3592
- , int min
3593
- , int sec
3594
- [, mixed tz ]]
3595
- dtstartDate = array( int year
3596
- , int month
3597
- , int day
3598
- [, int hour
3599
- , int min
3600
- , int sec
3601
- [, mixed tz ]] )
3602
- dtstartDate = array(&quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3603
- dtstartDate = string datestring // <span class="ref">string date,
3604
- acceptable by strtotime function,
3605
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3606
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3607
- dtstartDate : Within the "VFREEBUSY" <i>calendar</i> component,
3608
- the dtstartDate MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
3609
- tz = &lt;timezone identifier&gt; / offset
3610
- (timezone will be used as tzidparam (below), if tzidparam not set)
3611
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3612
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
3613
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3614
- // <span class="ref">output as local date-time with timezone identifier</span>
3615
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3616
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
3617
- xparams = xparamkey =&gt; xparamvalue</p>
3618
- <p class="label">Example 1</p>
3619
- <p class="example">$vevent->setProperty( &quot;dstart&quot;
3620
- , 2006, 8, 11, 7, 30, 1 );
3621
- <span class="comment">// 11 august 2006 07.30.01 local date</span></p>
3622
- <p class="label">Example 2</p>
3623
- <p class="example">$vevent->setProperty( &quot;dstart&quot;
3624
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3625
- <span class="comment">// 11 august 2006 16.30.00 -040000,
3626
- // local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
3627
- <p class="label">Example 3</p>
3628
- <p class="example">$vevent->setProperty( &quot;dtstart&quot;
3629
- , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
3630
- , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
3631
- <span class="comment">// start of an all-day event, or a period of (entire) days</span></p>
3632
- <br>
3633
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3634
-
3635
-
3636
- <a name="DUE"></a><h3>3.2.18 DUE</h3>
3637
- This property defines the date and time when a <a href="#VTODO">VTODO</a> is expected to be completed
3638
- and is OPTIONAL and MUST NOT occur more than once and only if DURATION NOT occurs.<br><br>
3639
- The default value type for DUE is DATE-TIME, can be set to a DATE value type.
3640
- <h5>Delete DUE</h5>
3641
- Remove DUE from component.
3642
- <p class="label">Format</p>
3643
- <p class="format">deleteProperty( &quot;DUE&quot; )</p>
3644
- <p class="label">Example</p>
3645
- <p class="example">$vtodo->deleteProperty( &quot;DUE&quot; );</p>
3646
- <h5>Get DUE</h5>
3647
- Fetch property value.
3648
- <p class="label">Format 1</p>
3649
- <p class="format">getProperty( &quot;DUE&quot; )</p>
3650
- <p class="comment">output = dueDate<span class="ref">1</span></p>
3651
- <p class="label">Format 2</p>
3652
- <p class="format">getProperty( &quot;DUE&quot;, FALSE , TRUE )</p>
3653
- <p class="comment">output = array( &quot;value&quot; =&gt; dueDate<span class="ref">1</span>
3654
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3655
- <p class="label">Example</p>
3656
- <p class="example">$due = $vtodo->getProperty( &quot;due&quot; );</p>
3657
- <h5>Set DUE</h5>
3658
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
3659
- (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3660
- <br>
3661
- <br>
3662
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
3663
- date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
3664
- to change a datetime from a time zone to another.
3665
- <br>
3666
- <br>
3667
- Parameters, if any, will be ordered as prescribed in rcf2445.
3668
- <p class="label">Format</p>
3669
- <p class="format">setProperty( &quot;due&quot;, dueDate [, params ] )</p>
3670
- <p class="comment">dueDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3671
- , &quot;month&quot; =&gt; int month
3672
- , &quot;day&quot; =&gt; int day
3673
- [, &quot;hour&quot; =&gt; int hour
3674
- , &quot;min&quot; =&gt; int min
3675
- , &quot;sec&quot; =&gt; int sec
3676
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3677
- dueDate = int year
3678
- , int month
3679
- , int day
3680
- [, int hour
3681
- , int min
3682
- , int sec
3683
- [, mixed tz ]]
3684
- dueDate = array( int year
3685
- , int month
3686
- , int day
3687
- [, int hour
3688
- , int min
3689
- , int sec
3690
- [, mixed tz ]] )
3691
- dueDate = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3692
- dueDate = string datestring // <span class="ref">string date,
3693
- acceptable by strtotime function,
3694
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3695
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3696
- tz = &lt;timezone identifier&gt; / offset
3697
- (timezone will be used as tzidparam (below), if tzidparam not set)
3698
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3699
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
3700
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3701
- // <span class="ref">output as local date-time with timezone identifier</span>
3702
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3703
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, &quot;during the day&quot;</span>
3704
- xparams = xparamkey =&gt; xparamvalue</p>
3705
- <p class="label">Example 1</p>
3706
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3707
- , 2006, 8, 11, 18, 0, 0 );
3708
- <span class="comment">// 11 august 2005 18.00.00 local date</span></p>
3709
- <p class="label">Example 2</p>
3710
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3711
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3712
- <span class="comment">// 11 august 2006 16.30.00 -040000
3713
- // local date + UTC offset sets <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span></p>
3714
- <p class="label">Example 3</p>
3715
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3716
- , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
3717
- , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
3718
- <span class="comment">// due &quot;during the day&quot;</span></p>
3719
- <br>
3720
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3721
-
3722
-
3723
- <a name="DURATION"></a><h3>3.2.19 DURATION</h3>
3724
- The property specifies a positive duration of time<br>
3725
- In a VEVENT it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DTEND. If one occurs, so MUST NOT the other.<br>
3726
- In a VTODO it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DUE. If one occurs, so MUST NOT the other.<br>
3727
- In a VFREEBUSY it is OPTIONAL and MUST NOT occur more than once.<br>
3728
- In a VALARM it is OPTIONAL and MUST NOT occur more than once and MUST occur in pair with TRIGGER. If one occurs, so MUST the other.
3729
- <h5>Delete DURATION</h5>
3730
- Remove DURATION from component.
3731
- <p class="label">Format</p>
3732
- <p class="format">deleteProperty( &quot;DURATION&quot; )</p>
3733
- <p class="label">Example</p>
3734
- <p class="example">$valarm->deleteProperty( &quot;DURATION&quot; );</p>
3735
- <h5>Get DURATION</h5>
3736
- Fetch property value.
3737
- <p class="label">Format 1</p>
3738
- <p class="format">getProperty( &quot;DURATION&quot; )</p>
3739
- <p class="comment">output = duration<span class="ref">1</span></p>
3740
- <p class="label">Format 2</p>
3741
- <p class="format">getProperty( &quot;DURATION&quot;, FALSE , TRUE )</p>
3742
- <p class="comment">output = array( &quot;value&quot; =&gt; duration<span class="ref">1</span>
3743
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3744
- <p class="label">Example</p>
3745
- <p class="example">$duration = $vtodo->getProperty( &quot;duration&quot; );</p>
3746
- <p class="label">option</p>
3747
- If a 4th argument is used and set to TRUE, returned output is in a DATE-TIME
3748
- output format (like <a href="#DTEND">DTEND</a> / <a href="#DUE">DUE</a>), based on
3749
- <a href="#DTSTART">DTSTART</a> value with added DURATION value.
3750
- <h5>Set DURATION</h5>
3751
- Insert property value.
3752
- <p class="label">Format</p>
3753
- <p class="format">setProperty( &quot;duration&quot;, duration [, xparam ] )</p>
3754
- <p class="comment">
3755
- duration<span class="ref">1</span> = array ( &quot;week&quot; =&gt; int week )
3756
- duration<span class="ref">1</span> = array ( &quot;day&quot; =&gt; int day )
3757
- [, &quot;hour&quot; =&gt; int hour
3758
- , &quot;min&quot; =&gt; int min
3759
- , &quot;sec&quot; =&gt; int sec ])
3760
- duration = array ( &quot;sec&quot; =&gt; int sec )
3761
- duration = array( int week/false
3762
- [, int day/false
3763
- [, int hour
3764
- , int min
3765
- , int sec ]] )
3766
- duration = int week/false
3767
- [, int day/false
3768
- [, int hour
3769
- , int min
3770
- , int sec ]]
3771
- duration = string dur-value = [&quot;+&quot;] &quot;P&quot; (dur-date/dur-time/dur-week)
3772
- dur-date = dur-day [dur-time]
3773
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
3774
- dur-week = 1*DIGIT &quot;W&quot;
3775
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
3776
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
3777
- dur-second = 1*DIGIT &quot;S&quot;
3778
- dur-day = 1*DIGIT &quot;D&quot;
3779
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3780
- <p class="label">Example 1</p>
3781
- <p class="example">$vtodo->setProperty &quot;duration&quot;
3782
- , array( &quot;day&quot; =&gt; 1 )); </p>
3783
- <p class="ref">// one day</p>
3784
- <p class="label">Example 2</p>
3785
- <p class="example">$vtodo->setProperty( &quot;duration&quot;
3786
- , &quot;PT4H&quot; );
3787
- <p class="ref"> // four hours</p>
3788
- <br>
3789
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3790
-
3791
-
3792
- <a name="EXDATE"></a><h3>3.2.20 EXDATE</h3>
3793
- This property defines the list of date/time exceptions for a recurring <i>calendar</i> component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
3794
- The default value type for EXDATE is DATE-TIME, can be set to a DATE value type.
3795
- <h5>Delete EXDATE</h5>
3796
- Remove EXDATE from component.
3797
- <p class="label">Format</p>
3798
- <p class="format">deleteProperty( &quot;EXDATE&quot; )</p>
3799
- <p class="label">Example 1</p>
3800
- <p class="example">$vtodo->deleteProperty( &quot;EXDATE&quot; );</p>
3801
- <p class="label">Example 2</p>
3802
- Delete EXDATE property no 2.
3803
- <p class="example">$vjournal->deleteProperty( &quot;EXDATE&quot;, 2 );</p>
3804
- <p class="label">Example 3</p>
3805
- Deleting all EXDATE properties.
3806
- <p class="example">while( $vjournal->deleteProperty( &quot;EXDATE&quot; ))
3807
- continue;</p>
3808
- <h5>Get EXDATE</h5>
3809
- Fetch property value.
3810
- <p class="label">Format 1</p>
3811
- <p class="format">getProperty( &quot;EXDATE&quot; )<p>
3812
- <p class="comment">output = exdates<span class="ref">1</span></p>
3813
- <p class="label">Format 2</p>
3814
- <p class="format">getProperty( &quot;exdate&quot;, propOrderNo/FALSE, TRUE )</p>
3815
- <p class="comment">output = array( &quot;value&quot; =&gt; exdates<span class="ref">1</span>
3816
- , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
3817
- <p class="label">Format 3</p>
3818
- <p class="format">getProperty( &quot;EXDATE&quot;, propOrderNo )</p>
3819
- <p class="comment">Get propOrderNo EXDATE</p>
3820
- <p class="label">Example</p>
3821
- <p class="example">$exdate = $vtodo->getProperty( &quot;exdate&quot; );</p>
3822
- <h5>Set EXDATE</h5>
3823
- Insert property value.<br>
3824
- If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;,
3825
- all timezone or offset in dates are ignored and DATE-TIME value type is set.<br>
3826
- If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
3827
- If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br>
3828
- If empty params and offset in 1st date, all remaining dates are set to UTC.<br>
3829
- If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
3830
- If none of the above rules are applicable, DATE-TIME and local date is set default.<br>
3831
- Notice, use function <a href="#transformDateTime">transformDateTime</a>
3832
- to change a datetime from a time zone to another.
3833
- <br>
3834
- Parameters, if any, will be ordered as prescribed in rcf2445.
3835
- <p class="label">Format</p>
3836
- <p class="format">setProperty( &quot;exdate&quot;, exdates [, xparams [, propOrderNo ]] )</p>
3837
- <p class="comment">exdates<span class="ref">1</span> = array ( date *[, date ] )
3838
- date = array( int year
3839
- , int month
3840
- , int day
3841
- [, int hour
3842
- , int min
3843
- , int sec
3844
- [, mixed tz ]] )
3845
- date<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3846
- , &quot;month&quot; =&gt; int month
3847
- , &quot;day&quot; =&gt; int day
3848
- [, &quot;hour&quot; =&gt; int hour
3849
- , &quot;min&quot; =&gt; int min
3850
- , &quot;sec&quot; =&gt; int sec
3851
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3852
- date = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3853
- date = string datestring // <span class="ref">string date,
3854
- acceptable by strtotime function,
3855
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3856
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3857
- tz = &lt;timezone identifier&gt; / offset
3858
- (timezone will be used as tzidparam (below), if tzidparam not set)
3859
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3860
- params<span class="ref">2</span> = array([(datetimeparam/dateparam)&nbsp;/ tzidparam] [,xparam])
3861
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3862
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
3863
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3864
- xparams = *[ xparamkey =&gt; xparamvalue ]
3865
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3866
- <p class="label">Example 1</p>
3867
- <p class="example">$vevent->setProperty( &quot;exdate&quot;
3868
- , array( array( 2006, 8, 14, 16, 0, 0 ));
3869
- <span class="ref">// >exclude 2006-08-14 16.00.00 (local date) from recurrence pattern</span></p>
3870
- <p class="label">Example 2</p>
3871
- <p class="example">$vevent->setProperty( &quot;exdate&quot;
3872
- , array( array(&quot;year&quot; =&gt;,2006,&quot;month&quot; =&gt; 8,&quot;day&quot;=&gt; 11))
3873
- , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
3874
- <span class="ref">// exclude 2006-08-11 from recurrence pattern;</span></p>
3875
- <br>
3876
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3877
-
3878
-
3879
- <a name="EXRULE"></a><h3>3.2.21 EXRULE</h3>
3880
- This property defines a rule or repeating pattern for an exception to a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
3881
- <h5>Delete EXRULE</h5>
3882
- Remove EXRULE from component.
3883
- <p class="label">Format</p>
3884
- <p class="format">deleteProperty( &quot;EXRULE&quot; )</p>
3885
- <p class="label">Example 1</p>
3886
- <p class="example">$vtodo->deleteProperty( &quot;EXRULE&quot; );</p>
3887
- <p class="label">Example 2</p>
3888
- Delete EXRULE property no 2.
3889
- <p class="example">$vjournal->deleteProperty( &quot;EXRULE&quot;, 2 );</p>
3890
- <p class="label">Example 3</p>
3891
- Deleting all EXRULE properties.
3892
- <p class="example">while( $vjournal->deleteProperty( &quot;EXRULE&quot; ))
3893
- continue;</p>
3894
- <h5>Get EXRULE</h5>
3895
- Fetch property value.
3896
- <p class="label">Format 1</p>
3897
- <p class="format">getProperty( &quot;EXRULE&quot; )</p>
3898
- <p class="comment">output = recur<span class="ref">1</span></p>
3899
- <p class="label">Format 2</p>
3900
- <p class="format">getProperty( &quot;exrule&quot;, propOrderNo/FALSE, TRUE )</p>
3901
- <p class="comment">output = array( &quot;value&quot; =&gt; recur<span class="ref">1</span>
3902
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3903
- <p class="label">Format 3</p>
3904
- <p class="format">getProperty( &quot;EXRULE&quot;, propOrderNo )</p>
3905
- <p class="comment">Get propOrderNo EXRULE</p>
3906
- <p class="label">Example</p>
3907
- <p class="example">$exrule = $vtodo->getProperty( &quot;exrule&quot; );</p>
3908
- <h5>Set EXRULE</h5>
3909
- Insert property value.<br>
3910
- Notice, use function <a href="#transformDateTime">transformDateTime</a>
3911
- to change a datetime to UTC time zone.<br>
3912
- Parameters, will be ordered as prescribed in rcf2445.
3913
- <p class="label">Format</p>
3914
- <p class="format">setProperty( &quot;exrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
3915
- See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
3916
- <p class="comment">recur<span class="ref">1</span> = array( "FREQ"=&gt;freq
3917
- // <span class="ref">either UNTIL or COUNT may appear in a &quot;recur&quot;,
3918
- but UNTIL and COUNT MUST NOT occur in the same &quot;recur&quot;</span>
3919
- [, &quot;UNTIL&quot; &quot;=&gt;&quot; >enddate ]
3920
- [, &quot;COUNT&quot; &quot;=&gt;&quot; 1*DIGIT ]
3921
- // <span class="ref">the rest of these keywords are optional,
3922
- but MUST NOT occur more than once</span>
3923
- [, &quot;INTERVAL&quot; &quot;=&gt;&quot; 1*DIGIT ]
3924
- [, &quot;BYSECOND&quot; &quot;=&gt;&quot; byseclist ]
3925
- [, &quot;BYMINUTE&quot; &quot;=&gt;&quot; byminlist ]
3926
- [, &quot;BYHOUR&quot; &quot;=&gt;&quot; byhrlist ]
3927
- [, &quot;BYDAY&quot; &quot;=&gt;&quot; bywdaylist ]
3928
- [, &quot;BYMONTHDAY&quot; &quot;=&gt;&quot; bymodaylist ]
3929
- [, &quot;BYYEARDAY&quot; &quot;=&gt;&quot; byyrdaylist ]
3930
- [, &quot;BYWEEKNO&quot; &quot;=&gt;&quot; bywknolist ]
3931
- [, &quot;BYMONTH&quot; &quot;=&gt;&quot; bymolist ]
3932
- [, &quot;BYSETPOS&quot; &quot;=&gt;&quot; bysplist ]
3933
- [, &quot;WKST&quot; &quot;=&gt;&quot; weekday ]
3934
- [, x-name &quot;=&gt;&quot; text ] )
3935
- freq = &quot;SECONDLY&quot; /
3936
- &quot;MINUTELY&quot; /
3937
- &quot;HOURLY&quot; /
3938
- &quot;DAILY&quot; /
3939
- &quot;WEEKLY&quot; /
3940
- &quot;MONTHLY&quot; /
3941
- &quot;YEARLY&quot;
3942
- enddate = date
3943
- enddate = / date-time ;An <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME value
3944
- byseclist = seconds
3945
- byseclist = array(seconds *(, seconds ))
3946
- seconds = 1DIGIT / 2DIGIT ;0 to 59
3947
- byminlist = minutes
3948
- byminlist = array( minutes *(, minutes ))
3949
- minutes = 1DIGIT / 2DIGIT ;0 to 59
3950
- byhrlist = hour
3951
- byhrlist = array( hour *(, hour ))
3952
- hour = 1DIGIT / 2DIGIT ;0 to 23
3953
- bywdaylist = weekdaynum
3954
- bywdaylist = array( weekdaynum *("," weekdaynum ))
3955
- weekdaynum = array( [([plus] ordwk / minus ordwk)], &quot;DAY&quot; =&gt; weekday )
3956
- plus = &quot;+&quot;
3957
- minus = &quot;-&quot;
3958
- ordwk = 1DIGIT / 2DIGIT ;1 to 53
3959
- weekday = &quot;SU&quot; / &quot;MO&quot; / &quot;TU&quot; / &quot;WE&quot; / &quot;TH&quot; / &quot;FR&quot; / &quot;SA&quot;
3960
- ; Corresponding to
3961
- ; SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
3962
- ; FRIDAY, SATURDAY and SUNDAY days of the week.
3963
- bymodaylist = monthdaynum
3964
- bymodaylist = array( monthdaynum *(, monthdaynum ))
3965
- monthdaynum = ( [plus] ordmoday ) / ( minus ordmoday )
3966
- ordmoday = 1DIGIT / 2DIGIT ;1 to 31
3967
- byyrdaylist = yeardaynum
3968
- byyrdaylist = array( yeardaynum *(, yeardaynum ))
3969
- yeardaynum = ( [plus] ordyrday ) / ( minus ordyrday )
3970
- ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366
3971
- bywknolist = weeknum
3972
- bywknolist = array( weeknum *(, weeknum ))
3973
- weeknum = ( [plus] ordwk ) / ( minus ordwk )
3974
- bymolist = monthnum
3975
- bymolist = array( monthnum *(, monthnum ))
3976
- monthnum = 1DIGIT / 2DIGIT ;1 to 12
3977
- bysplist = setposday
3978
- bysplist = array( setposday *(, setposday ))
3979
- setposday = yeardaynum</p>
3980
- <p class="comment">
3981
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )
3982
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3983
- <p class="label">Example</p>
3984
- <p class="example">$vevent->setProperty(&nbsp;&quot;Exrule&quot;
3985
- ,&nbsp;array( &quot;FREQ&quot; =&gt; &quot;MONTHLY&quot;
3986
- , &quot;UNTIL&quot; =&gt; &quot;20060831&quot;
3987
- // <span class="ref">DATE / DATE-TIME in <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> format; string/array, see <a href="#CREATED">CREATED</a> format</span>
3988
- , &quot;INTERVAL&quot; =&gt; 2
3989
- , &quot;WKST&quot; =&gt; &quot;SU&quot;
3990
- , &quot;BYSECOND&quot; =&gt; 2
3991
- , &quot;BYMINUTE&quot; =&gt; array( 2, -4, 6 ) // (*)
3992
- , &quot;BYHOUR&quot; =&gt; array( 2, 4, -6 ) // (*)
3993
- , &quot;BYMONTHDAY&quot; =&gt; -2 // (*)
3994
- , &quot;BYYEARDAY&quot; =&gt; 2 // (*)
3995
- , &quot;BYWEEKNO&quot; =&gt; array( 2, -4, 6 ) // (*)
3996
- , &quot;BYMONTH&quot; =&gt; 2 // (*)
3997
- , &quot;BYSETPOS&quot; =&gt; array( 2, -4, 6 ) // (*)
3998
- , &quot;BYday&quot; =&gt; array( array(-2, &quot;DAY&quot; =&gt; &quot;WE&quot; )
3999
- , array( 3, &quot;DAY&quot; =&gt; &quot;TH&quot;)
4000
- , array( 5, &quot;DAY&quot; =&gt; &quot;FR&quot;)
4001
- , array( &quot;DAY&quot; =&gt; &quot;MO&quot;))
4002
- // (**)
4003
- , &quot;X-NAME&quot; =&gt; &quot;x-value&quot; )
4004
- , array( &quot;xparamkey&quot; =&gt; &quot;xparamValue&quot; ));
4005
-
4006
- $vtodo->setProperty( >&quot;exrule&quot;
4007
- , array( &quot;FREQ&quot; =&gt; &quot;WEEKLY&quot;
4008
- , &quot;COUNT&quot; =&gt; 2
4009
- , &quot;INTERVAL&quot; =&gt; 2
4010
- , &quot;WKST&quot; =&gt; &quot;SU&quot;
4011
- , &quot;BYSECOND&quot; =&gt; array( -2, 4, 6 ) // (*)
4012
- , &quot;BYMINUTE&quot; =&gt; -2 // (*)
4013
- , &quot;BYHOUR&quot; =&gt; 2 // (*)
4014
- , &quot;BYMONTHDAY&quot; =&gt; array( 2, -4, 6 ) // (*)
4015
- , &quot;BYYEARDAY&quot; =&gt; array( -2, 4, 6 ) // (*)
4016
- , &quot;BYWEEKNO&quot; =&gt; -2 // (*)
4017
- , &quot;BYMONTH&quot; =&gt; array( 2, 4, -6 ) // (*)
4018
- , &quot;BYSETPOS&quot; =&gt; -2 // (*)
4019
- , &quot;BYday&quot; =&gt; array( 5, &quot;DAY&quot; =&gt; &quot;WE&quot; )
4020
- // (**)
4021
- , &quot;X-NAME&quot; =&gt; &quot;x-value&quot; )
4022
- , array( &quot;xparamkey&quot; =&gt; &quot;xparamValue&quot; ));
4023
- //<span class="ref">(*) single value/array of values</span>
4024
- //<span class="ref">(**) single value array /array of arrays</span>
4025
- </p>
4026
- <br>
4027
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4028
-
4029
-
4030
- <a name="FREEBUSY_PROP"></a><h3>3.2.22 FREEBUSY</h3>
4031
- The property defines one or more free or busy time intervals in a <a href="#VFREEBUSY">VFREEBUSY</a> <i>calendar</i> component.<br><br>
4032
- The value type for FREEBUSY is PERIOD. A PERIOD is a DATE-TIME/DATE-TIME or a DATE-TIME/duration.
4033
- <h5>Delete FREEBUSY</h5>
4034
- Remove FREEBUSY from component.
4035
- <p class="label">Format</p>
4036
- <p class="format">deleteProperty( &quot;FREEBUSY&quot; )</p>
4037
- <p class="label">Example 1</p>
4038
- <p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot; );</p>
4039
- <p class="label">Example 2</p>
4040
- Delete FREEBUSY property no 2.
4041
- <p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot;, 2 );</p>
4042
- <p class="label">Example 3</p>
4043
- Deleting all FREEBUSY properties.
4044
- <p class="example">while( $vfreebusy->deleteProperty( &quot;FREEBUSY&quot; ))
4045
- continue;</p>
4046
- <h5>Get FREEBUSY</h5>
4047
- Fetch property value.
4048
- <p class="label">Format 1</p>
4049
- <p class="format">getProperty( &quot;FREEBUSY&quot; )</p>
4050
- <p class="comment">output = array( &quot;fbtyp&quot; =&gt; freebusytype<span class="ref">1</span> , periods<span class="ref">2</span> )</p>
4051
- <p class="label">Format 3</p>
4052
- <p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo/FALSE , TRUE )</p>
4053
- <p class="comment">output = array( &quot;value&quot; =&gt; array(&quot;fbtype&quot; =&gt; freebusytype<span class="ref">1</span> ,periods<span class="ref">2</span>)
4054
- , &quot;params&quot; =&gt; xparams<span class="ref"> 3</span> )</p>
4055
- <p class="label">Format 3</p>
4056
- <p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo )</p>
4057
- <p class="comment">Get propOrderNo FREEBUSY</p>
4058
- <p class="label">Example</p>
4059
- <p class="example">$freebusy = $vfreebusy->getProperty( &quot;FREEBUSY&quot; );</p>
4060
- <h5>Set FREEBUSY</h5>
4061
- Insert property value. A FREEBUSY input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
4062
- <p class="label">Format</p>
4063
- <p class="format">setProperty( &quot;freebusy&quot;,freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
4064
- <p class="comment">freebusytype<span class="ref">1</span> = one of &quot;FREE&quot;
4065
- / &quot;BUSY&quot; <b>Default</b>
4066
- / &quot;BUSY-UNAVAILABLE&quot;
4067
- / &quot;BUSY-TENTATIVE&quot;
4068
- / x-name
4069
- fbperiods = array( periods<span class="ref">2</span> )&nbsp;
4070
- periods<span class="ref">2</span> = array( startdate, enddate/duration )
4071
- *[, array( startdate, enddate/duration )]
4072
- startdate/enddate = array( int year
4073
- , int month
4074
- , int day
4075
- , int int hour
4076
- , int min
4077
- , int day )
4078
- startdate/enddate = array( &quot;year&quot; =&gt; int year
4079
- , &quot;month&quot; =&gt; int month
4080
- , &quot;day&quot; =&gt; int day
4081
- , &quot;hour&quot; =&gt; int hour
4082
- , &quot;min&quot; =&gt; int min
4083
- , &quot;sec&quot; =&gt; int sec ) // <span class="ref">output format</span>
4084
- startdate/enddate = array( &quot;timestamp&quot; =&gt; int timestamp )
4085
- startdate/enddate = string datestring // <span class="ref">string date,
4086
- acceptable by strtotime function,
4087
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
4088
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4089
- startdate/enddate : date and time values MUST be an <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4090
- duration = array( int week/false
4091
- [, int day/false
4092
- , int hour
4093
- , int min
4094
- , int sec] )
4095
- duration = array( &quot;week&quot; =&gt; int week/false
4096
- [, &quot;day&quot; =&gt; int day/false
4097
- [, &quot;hour&quot; =&gt; int hour
4098
- , &quot;min&quot; =&gt; int min
4099
- , &quot;sec&quot; =&gt; int sec ]] ); // <span class="ref">output format</span>
4100
- duration = array( &quot;sec&quot; =&gt; int sec )
4101
- duration = string dur-value
4102
- = ([&quot;+&quot;]/&quot;-&quot;) &quot;P&quot; (dur-date/dur-time/dur-week)
4103
- dur-date = dur-day [dur-time]
4104
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
4105
- dur-week = 1*DIGIT &quot;W&quot;
4106
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
4107
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
4108
- dur-second = 1*DIGIT &quot;S&quot;
4109
- dur-day = 1*DIGIT &quot;D&quot;
4110
- xparams<span class="ref">3</span> = array( *[ xparamkey =&gt; xparamvalue ] )
4111
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4112
- <p class="label">Example</p>
4113
- See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
4114
- <p class="example">$fdate1 = array ( 2001, 1, 1, 1, 1, 1 );
4115
- alt.
4116
- $fdate1 = array ( &quot;year&quot; =&gt; 2001
4117
- , &quot;month&quot; =&gt; 1
4118
- , &quot;day&quot; =&gt; 1
4119
- , &quot;hour&quot; =&gt; 1
4120
- , &quot;min&quot; =&gt; 1
4121
- , &quot;sec&quot; =&gt; 1 );
4122
- $fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
4123
- $fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
4124
- $fdate4 = &quot;4 April 2005 4:4:4&quot;;
4125
- $fdate7 = array ( &quot;year&quot; =&gt; 2007
4126
- , &quot;month&quot; =&gt; 7
4127
- , &quot;day&quot; =&gt; 7 );
4128
- $fdur6 = array ( &quot;week&quot; =&gt; 0
4129
- , &quot;day&quot; =&gt; 5
4130
- , &quot;hour&quot; =&gt; 5
4131
- , &quot;min&quot; =&gt; 5
4132
- , &quot;sec&quot; =&gt; 5 );
4133
- $fdur7 = array ( 0, 0, 6 ); // <span class="ref">duration for 6 hours</span>
4134
- $fdur8 = &quot;P2D&quot;; // <span class="ref">duration two days</span>
4135
- $freebusy->setProperty &quot;freebusy&quot;
4136
- , &quot;FREE&quot;
4137
- , array( array( $fdate1, $fdate2 )
4138
- , array( $fdate3, $fdur6 )
4139
- , array( $fdate4, $fdate5 )));
4140
- $freebusy->setProperty(&quot;freebusy&quot;
4141
- , &quot;Busy&quot;
4142
- , array( array( array( $fdate1, $fdate2 )
4143
- , array( $fdate3, $fdur8 )
4144
- , array( $fdate4, $fdur7 )
4145
- , array( $fdate1, $fdate3 )));</p>
4146
- <br>
4147
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4148
-
4149
-
4150
- <a name="GEO"></a><h3>3.2.23 GEO</h3>
4151
- This property specifies information related to the global position for the activity specified by VEVENT and VTODO components and is OPTIONAL and MUST NOT occur more than once.
4152
- <br><br>
4153
- Value type for latitude and longitude is FLOAT. &quot;Values for latitude and longitude shall be expressed as decimal fractions of degrees. Whole degrees of latitude shall be represented by a two-digit decimal number ranging from 0 through 90. Whole degrees of longitude shall be represented by a decimal number ranging from 0 through 180. When a decimal fraction of a degree is specified, it shall be separated from the whole number of degrees by a decimal point.&quot;
4154
- <h5>Delete GEO</h5>
4155
- Remove GEO from component.
4156
- <p class="label">Format</p>
4157
- <p class="format">deleteProperty( &quot;GEO&quot; )</p>
4158
- <p class="label">Example</p>
4159
- <p class="example">$vevent->deleteProperty( &quot;GEO&quot; );</p>
4160
- <h5>Get GEO</h5>
4161
- Fetch property value.
4162
- <p class="label">Format 1</p>
4163
- <p class="format">getProperty( &quot;GEO&quot; )</p>
4164
- <p class="comment">output = array( &quot;latitude&quot; =&gt; &lt;latitude&gt;
4165
- , &quot;longitude&quot; =&gt; &lt;longitude&gt;))</p>
4166
- <p class="label">Format 2</p>
4167
- <p class="format">getProperty( &quot;GEO&quot;, FALSE , TRUE )</p>
4168
- <p class="comment">output = array( &quot;value&quot; =&gt; array ( &quot;latitude&quot; =&gt; &lt;latitude&gt;
4169
- , &quot;longitude&quot; =&gt; &lt;longitude&gt;))
4170
- , &quot;params&quot; =&gt; xparam <span class="ref">1</span> )</p>
4171
- <p class="label">Example</p>
4172
- <p class="example">$geo = $vevent->getProperty( &quot;GEO&quot; );</p>
4173
- <h5>Set GEO</h5>
4174
- Insert property value.
4175
- <p class="label">Format</p>
4176
- <p class="format">setProperty( &quot;geo&quot;, float latitude, float longitude [, xparam ] )</p>
4177
- <p class="comment">xparam <span class="ref">1</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4178
- <p class="label">Example</p>
4179
- <p class="example">$vevent->setProperty( &quot;geo&quot;, 11.23456, -23.45678 );</p>
4180
- <br>
4181
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4182
-
4183
-
4184
- <a name="LAST-MODIFIED"></a><h3>3.2.24 LAST-MODIFIED</h3>
4185
- The property specifies the date and time that the information associated with the <i>calendar</i> component was last revised in the <i>calendar</i> store. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VTIMEZONE">VTIMEZONE</a> components.<br><br>
4186
- The value type for LAST-MODIFIED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
4187
- <h5>Delete LAST-MODIFIED</h5>
4188
- Remove LAST-MODIFIED from component.
4189
- <p class="label">Format</p>
4190
- <p class="format">deleteProperty( &quot;LAST-MODIFIED&quot; )</p>
4191
- <p class="label">Example</p>
4192
- <p class="example">$vevent->deleteProperty( &quot;LAST-MODIFIED&quot; );</p>
4193
- <h5>Get LAST-MODIFIED</h5>
4194
- Fetch property value.
4195
- <p class="label">Format 1</p>
4196
- <p class="format">getProperty( &quot;LAST-MODIFIED&quot; )</p>
4197
- <p class="comment">output = moddate<span class="ref">1</span></p>
4198
- <p class="label">Format 2</p>
4199
- <p class="format">getProperty( &quot;LAST-MODIFIED&quot;, FALSE , TRUE )</p>
4200
- <p class="comment">output = array( &quot;value&quot; =&gt; moddate<span class="ref">1</span>
4201
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4202
- <p class="label">Example</p>
4203
- <p class="example">$lastMod = $vevent->getProperty( &quot;LAST-MODIFIED&quot; );</p>
4204
- <h5>Set LAST-MODIFIED</h5>
4205
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
4206
- if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
4207
- Notice, use function <a href="#transformDateTime">transformDateTime</a>
4208
- to change a datetime to UTC time zone.
4209
- <p class="label">Format</p>
4210
- <p class="format">setProperty( &quot;Last-Modified&quot; [, moddate [, xparam ]] )</p>
4211
- <p class="comment">moddate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
4212
- , &quot;month&quot; =&gt; int month
4213
- , &quot;day&quot; =&gt; int day
4214
- [, &quot;hour&quot; =&gt; int hour
4215
- , &quot;min&quot; =&gt; int min
4216
- , &quot;sec&quot; =&gt; int sec
4217
- , &quot;tz&quot; =&gt; offset ]] )
4218
- completedDate = int year
4219
- , int month
4220
- , int day
4221
- [, int hour
4222
- , int min
4223
- , int sec ]
4224
- completedDate = array( int year
4225
- , int month
4226
- , int day
4227
- [, int hour
4228
- , int min
4229
- , int sec
4230
- [, offset ]] )
4231
- completedDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
4232
- completedDate = string datestring // <span class="ref">string date,
4233
- acceptable by strtotime function,
4234
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
4235
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4236
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4237
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4238
- <p class="label">Example 1</p>
4239
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
4240
- $vcalendar = new vcalendar( $config );
4241
- $vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
4242
- .. .
4243
- $vtodo->setProperty(&quot;last-modified&quot;
4244
- , 2006, 8, 14, 12, 1, 2 );
4245
- <span class="ref">// 14 august 2006 12.01.02 UTC</span></p>
4246
- <p class="label">Example 2</p>
4247
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
4248
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
4249
- <span class="ref">// local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
4250
- $vtodo->setProperty( &quot;last-modified&quot;, $date );
4251
- .. .</p>
4252
- <p class="label">Example 3</p>
4253
- <p class="example">$vevent->setProperty( &quot;last-modified&quot; );
4254
- <span class="ref">// current UTC DATE-TIME is set if called without parameters</span></p>
4255
- <br>
4256
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4257
-
4258
- <a name="LOCATION"></a><h3>3.2.25 LOCATION</h3>
4259
- The property defines the intended venue for the activity defined by a <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
4260
- <br><br>
4261
- The value type for LOCATION is TEXT.
4262
- <h5>Delete LOCATION</h5>
4263
- Remove LOCATION from component.
4264
- <p class="label">Format</p>
4265
- <p class="format">deleteProperty( &quot;LOCATION&quot; )</p>
4266
- <p class="label">Example</p>
4267
- <p class="example">$vevent->deleteProperty( &quot;LOCATION&quot; );</p>
4268
- <h5>Get LOCATION</h5>
4269
- Fetch property value.
4270
- <p class="label">Format 1</p>
4271
- <p class="format">getProperty( &quot;LOCATION&quot; )</p>
4272
- <p class="comment">output = location<span class="ref">1</span></p>
4273
- <p class="label">Format 2</p>
4274
- <p class="format">getProperty( &quot;LOCATION&quot;, FALSE , TRUE )</p>
4275
- <p class="comment">output = array( &quot;value&quot; =&gt; location<span class="ref">1</span>
4276
- , &quot;params&quot; =&gt; param<span class="ref">2</span> )</p>
4277
- <p class="label">Example</p>
4278
- <p class="example">$location = $vevent->getProperty( &quot;LOCATION&quot; );</p>
4279
- <h5>Set LOCATION</h5>
4280
- Insert property value.
4281
- <br>
4282
- Parameters, if any, will be ordered as prescribed in rcf2445.
4283
- <p class="label">Format</p>
4284
- <p class="format">setProperty( &quot;location&quot;, string location [, array param] )</p>
4285
- <p class="comment">location<span class="ref">1</span> = Value type TEXT
4286
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
4287
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
4288
- [, xparam ]
4289
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4290
- <p class="label">Example</p>
4291
- <p class="example">$vevent->setProperty( &quot;location&quot;, &quot;Buckingham Palace&quot; );</p>
4292
- <br>
4293
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4294
-
4295
-
4296
- <a name="ORGANIZER"></a><h3>3.2.26 ORGANIZER</h3>
4297
- The property defines the organizer for a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br><br>
4298
- This value type for ORGANIZER is URI, a <i>calendar</i> user address.
4299
- <h5>Delete ORGANIZER</h5>
4300
- Remove ORGANIZER from component.
4301
- <p class="label">Format</p>
4302
- <p class="format">deleteProperty( &quot;ORGANIZER&quot; )</p>
4303
- <p class="label">Example</p>
4304
- <p class="example">$vevent->deleteProperty( &quot;ORGANIZER&quot; );</p>
4305
- <h5>Get ORGANIZER</h5>
4306
- Fetch property value.
4307
- <p class="label">Format 1</p>
4308
- <p class="format">getProperty( &quot;ORGANIZER&quot; )</p>
4309
- <p class="comment">output = organizer<span class="ref">1</span></p>
4310
- <p class="label">Format 2</p>
4311
- <p class="format">getProperty( &quot;ORGANIZER&quot;, FALSE , TRUE )</p>
4312
- <p class="comment">output = array( &quot;value&quot; =&gt; organizer<span class="ref">1</span>
4313
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4314
- <p class="label">Example</p>
4315
- <p class="example">$organizer = $vevent->getProperty( &quot;ORGANIZER&quot; );</p>
4316
- <h5>Set ORGANIZER</h5>
4317
- Insert property value.
4318
- Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ).
4319
- Also DIR parameter must be prefixed by protocol.
4320
- SENT-BY parameter must use protocol &quot;mailto:&quot;, prefixed if missing.
4321
- <br>
4322
- Parameters, if any, will be ordered as prescribed in rcf2445.
4323
- <p class="label">Format</p>
4324
- <p class="format">setProperty( &quot;organizer&quot;, organizer [, params] )</p>
4325
- <p class="comment">organizer<span class="ref">1</span> = a <i>calendar</i> user address, a URI as defined by [RFC
4326
- 1738] or any other IANA registered form for a URI.
4327
- params<span class="ref">2</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;
4328
- (applies to the CN parameter value) ]
4329
- [, &quot;CN&quot; =&gt; &quot;common name to be associated
4330
- with the <i>calendar</i> user
4331
- specified by the property&quot;]
4332
- [, &quot;DIR&quot; =&gt; &quot;reference to a directory
4333
- entry associated with the <i>calendar</i> user
4334
- specified by the property&quot; ]
4335
- [, &quot;SENT-BY&quot; =&gt; &quot;single <i>calendar</i> user
4336
- that is acting on behalf
4337
- of the <i>calendar</i> user
4338
- specified by the property&quot; ]
4339
- [, xparam ]
4340
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4341
- <p class="label">Example</p>
4342
- <p class="example">
4343
- $dir = &quot;ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)&quot;;
4344
- $vevent-&gt;setProperty( &quot;organizer&quot;
4345
- , &quot;ical@domain.com&quot;
4346
- , array( &quot;CN&quot; =&gt; &quot;John Doe&quot;
4347
- , &quot;DIR&quot; =&gt; $dir
4348
- , &quot;SENT-BY&quot; =&gt; &quot;secretary@domain.com&quot;
4349
- , &quot;X-Key1&quot; =&gt; &quot;X-Value1&quot;
4350
- , &quot;X-Key2&quot; =&gt; &quot;X-Value2&quot; ));</p>
4351
- <br>
4352
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4353
-
4354
-
4355
- <a name="PERCENT-COMPLETE"></a><h3>3.2.27 PERCENT-COMPLETE</h3>
4356
- This property is used by an assignee or delegatee of a <a href="#VTODO">VTODO</a> to convey the percent completion of a <a href="#VTODO">VTODO</a> to the Organizer and is OPTIONAL and MUST NOT occur more than once.<br><br>
4357
- The property value is a positive integer between zero and one hundred. A value of "0" indicates the <a href="#VTODO">VTODO</a> has not yet been started. A value of "100" indicates that the <a href="#VTODO">VTODO</a> has been completed. Integer values in between indicate the percent partially complete.
4358
- <h5>Delete PERCENT-COMPLETE</h5>
4359
- Remove PERCENT-COMPLETE from component.
4360
- <p class="label">Format</p>
4361
- <p class="format">deleteProperty( &quot;PERCENT-COMPLETE&quot; )</p>
4362
- <p class="label">Example</p>
4363
- <p class="example">$vtodo->deleteProperty( &quot;PERCENT-COMPLETE&quot; );</p>
4364
- <h5>Get PERCENT-COMPLETE</h5>
4365
- Fetch property value.
4366
- <p class="label">Format 1</p>
4367
- <p class="format">getProperty( &quot;PERCENT-COMPLETE&quot; )</p>
4368
- <p class="comment">output = percent<span class="ref">1</span></p>
4369
- <p class="label">Format 2</p>
4370
- <p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
4371
- <p class="comment">output = array( &quot;value&quot; =&gt; percent<span class="ref">1</span>
4372
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4373
- <p class="label">Example</p>
4374
- <p class="example">$percent = $vtodo->getProperty( &quot;PERCENT-COMPLETE&quot; );</p>
4375
- <h5>Set PERCENT-COMPLETE</h5>
4376
- Insert property value.
4377
- <p class="label">Format</p>
4378
- <p class="format">setProperty( &quot;Percent-Complete&quot;, percent [, xparam ] )</p>
4379
- <p class="comment">percent<span class="ref">1</span> = Value type INTEGER
4380
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4381
- <p class="label">Example</p>
4382
- <p class="example">$vtodo->setProperty( &quot;percent-complete&quot;, 90 );</p>
4383
- <br>
4384
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4385
-
4386
-
4387
- <a name="PRIORITY"></a><h3>3.2.28 PRIORITY</h3>
4388
- The property defines the relative priority for a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br><br>
4389
- The priority is specified as an integer in the range zero to nine.<br>
4390
- A value of zero (US-ASCII decimal 48) specifies an undefined priority.<br>
4391
- A value of one (US-ASCII decimal 49) is the highest priority.<br>
4392
- A value of two (US-ASCII decimal 50) is the second highest priority.<br>
4393
- Subsequent numbers specify a decreasing ordinal priority.<br>
4394
- A value of nine (US-ASCII decimal 58) is the lowest priority.
4395
- <h5>Delete PRIORITY</h5>
4396
- Remove PRIORITY from component.
4397
- <p class="label">Format</p>
4398
- <p class="format">deleteProperty( &quot;PRIORITY&quot; )</p>
4399
- <p class="label">Example</p>
4400
- <p class="example">$vevent->deleteProperty( &quot;PRIORITY&quot; );</p>
4401
- <h5>Get PRIORITY</h5>
4402
- Fetch property value.
4403
- <p class="label">Format 1</p>
4404
- <p class="format">getProperty( &quot;PRIORITY&quot; )</p>
4405
- <p class="comment">output = priority<span class="ref">1</span></p>
4406
- <p class="label">Format 2</p>
4407
- <p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
4408
- <p class="comment">output = array( &quot;value&quot; =&gt; priority<span class="ref">1</span>
4409
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4410
- <p class="label">Example</p>
4411
- <p class="example">$priority = $vevent->getProperty( &quot;priority&quot; );</p>
4412
- <h5>Set PRIORITY</h5>
4413
- Insert property value.
4414
- <p class="label">Format</p>
4415
- <p class="format">setProperty( &quot;priority&quot;, priority [, xparam ] )</p>
4416
- <p class="comment">priority<span class="ref">1</span> = Value type INTEGER
4417
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4418
- <p class="label">Example</p>
4419
- <p class="example">$vevent->setProperty( &quot;priority&quot;, 3 );</p>
4420
- <br>
4421
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4422
-
4423
-
4424
- <a name="RDATE"></a><h3>3.2.29 RDATE</h3>
4425
- This property defines the list of date/times for a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
4426
- The default value type for RDATE is DATE-TIME, can be set to DATE or PERIOD (params <span class="ref">2</span>).
4427
- <h5>Delete RDATE</h5>
4428
- Remove RDATE from component.
4429
- <p class="label">Format</p>
4430
- <p class="format">deleteProperty( &quot;RDATE&quot; )</p>
4431
- <p class="label">Example 1</p>
4432
- <p class="example">$vtodo->deleteProperty( &quot;RDATE&quot; );</p>
4433
- <p class="label">Example 2</p>
4434
- Delete RDATE property no 2.
4435
- <p class="example">$vjournal->deleteProperty( &quot;RDATE&quot;, 2 );</p>
4436
- <p class="label">Example 3</p>
4437
- Deleting all RDATE properties.
4438
- <p class="example">while( $vjournal->deleteProperty( &quot;RDATE&quot; ))
4439
- continue;</p>
4440
- <h5>Get RDATE</h5>
4441
- Fetch property value.
4442
- <p class="label">Format 1</p>
4443
- <p class="format">getProperty( &quot;RDATE&quot; )</p>
4444
- <p class="comment">output = dates<span class="ref">1</span></p>
4445
- <p class="label">Format 2</p>
4446
- <p class="format">getProperty( &quot;RDATE&quot;, propOrderNo/FALSE , TRUE )</p>
4447
- <p class="comment">output = array( &quot;value&quot; =&gt; dates<span class="ref">1</span>
4448
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4449
- <p class="label">Format 3</p>
4450
- <p class="format">getProperty( &quot;RDATE&quot;, propOrderNo )</p>
4451
- <p class="comment">Get propOrderNo RDATE</p>
4452
- <p class="label">Example</p>
4453
- <p class="example">$rdates = $vevent->getProperty( &quot;RDATE&quot; );</p>
4454
- <h5>Set RDATE</h5>
4455
- Insert property value.<br>
4456
- If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;, all timezone or offset in dates are ignored and DATE-TIME value type is set.<br>
4457
- If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
4458
- If &quot;PERIOD&quot; is set in params (&quot;VALUE&quot; = &quot;PERIOD&quot;), DATE-TIME value type is set.<br>
4459
- If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br>
4460
- If empty params and offset in 1st date, all remaining dates are set to UTC.<br>
4461
- If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
4462
- If none of the above rules are applicable, DATE-TIME and local date is set default.
4463
- <br>
4464
- Parameters, if any, will be ordered as prescribed in rcf2445.
4465
- <p class="label">Format</p>
4466
- <p class="format">setProperty( &quot;rdate&quot;, dates [, params [, propOrderNo ]] )</p>
4467
- <p class="comment">dates<span class="ref">1</span> = array ( date2 *[, date2 ] )
4468
- date2 = date
4469
- date2 = array( startdate, enddate/duration ) ]
4470
- startdate = date
4471
- enddate = date
4472
- date = array( int year
4473
- , int month
4474
- , int day
4475
- [, int int hour
4476
- , int min
4477
- , int day
4478
- , mixed tz ] )
4479
- date = array( &quot;year&quot; =&gt; int year
4480
- , &quot;month&quot; =&gt; int month
4481
- , &quot;day&quot; =&gt; int day
4482
- [, &quot;hour&quot; =&gt; int hour
4483
- , &quot;min&quot; =&gt; int min
4484
- , &quot;sec&quot; =&gt; int sec
4485
- [, &quot;tz&quot; =&gt; mixed tz ]] )
4486
- // <span class="ref">output format</span>
4487
- date = array( &quot;timestamp&quot; =&gt; int timestamp
4488
- [, &quot;tz&quot; =&gt; mixed tz ] )
4489
- date = string datestring // <span class="ref">string date,
4490
- acceptable by strtotime function,
4491
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
4492
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4493
- tz = timezone / offset
4494
- (timezone will be used as tzidparam, if tzidparam not exists)
4495
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4496
- duration = array( int week/false
4497
- [, int day/false
4498
- , int hour
4499
- , int min
4500
- , int sec] )
4501
- duration = array([ &quot;week&quot; =&gt; int week/false ,] /
4502
- [ &quot;day&quot; =&gt; int day/false
4503
- [, &quot;hour&quot; =&gt; int hour
4504
- , &quot;min&quot; =&gt; int min
4505
- , &quot;sec&quot; =&gt; int sec ]] );
4506
- // <span class="ref">output format, only used keys</span>
4507
- duration = array( &quot;sec&quot; =&gt; int sec );
4508
- duration = string format duration like &quot;P15DT5H0M20S&quot;
4509
- params<span class="ref">2</span> = ([tzidparam ( / datetimeparam / dateparam / periodparam )]
4510
- *[, xparams ] )
4511
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
4512
- // <span class="ref">output as local DATE-TIME with timezone identifier</span>
4513
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
4514
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
4515
- periodparam = &quot;VALUE&quot; =&gt; &quot;PERIOD&quot; // <span class="ref">output as PERIOD (datetime)</span>
4516
- xparams = xparamkey =&gt; xparamvalue
4517
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4518
- <p class="label">Example</p>
4519
- See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).<br>
4520
- <p class="example">// $rdate1 = array ( 2001, 1, 1, 1, 1, 1 );
4521
- // alt.
4522
- $rdate1 = array( &quot;year&quot; =&gt; 2001
4523
- , &quot;month&quot; =&gt; 1
4524
- , &quot;day&quot; =&gt; 1
4525
- , &quot;hour&quot; =&gt; 1
4526
- , &quot;min&quot; =&gt; 1
4527
- , &quot;sec&quot; =&gt; 1
4528
- , &quot;tz&quot; =&gt; &quot;GMT&quot; );
4529
- $rdate2 = array( 2002, 2, 2, 2, 2, 2, &quot;GMT&quot; );
4530
- $rdate3 = &quot;3 March 2003 03.03.03&quot;;
4531
- $rdate4 = array( 2004, 4, 4, 4, 4, 4, &quot;GMT&quot; );
4532
- $rdate5 = array( 2005, 10, 5, 5, 5, 5 );
4533
- $rdate8 = array( &quot;year&quot; =&gt; 2007, &quot;month&quot; =&gt; 7, &quot;day&quot; =&gt; 7 );
4534
- $rdur6 = array( &quot;week&quot; =&gt; 0
4535
- , &quot;day&quot; =&gt; 0
4536
- , &quot;hour&quot; =&gt; 5
4537
- , &quot;min&quot; =&gt; 5
4538
- , &quot;sec&quot; =&gt; 5 );
4539
- $rdur7 = array( 0, 0, 6 );
4540
- <span class="comment">// duration for 6 hours</span>
4541
- $rdur8 = array( &quot;week&quot; =&gt; 8 );
4542
- <span class="comment">// duration for 8 weeks</span>
4543
-
4544
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
4545
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate1 ));
4546
- <span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>
4547
-
4548
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate1, $rdate2 ));
4549
- <span class="comment">// two dates, date 7-params format (DATE-TIME)</span>
4550
-
4551
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $rdate2 )
4552
- , array( $rdate3, $rdate4 ))
4553
- , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
4554
- <span class="comment">// Both fromdate and enddate must have 7 params (DATE-TIME) !!!</span>
4555
-
4556
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate2, $rdur6 ))
4557
- , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
4558
- <span class="comment">// one duration (fromdate-duration)</span>
4559
-
4560
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $date2 )
4561
- , array( $rdate3, $rdur7 ))
4562
- , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
4563
- <span class="comment">// period, pairs of fromdate+enddate and fromdate-duration</span>
4564
-
4565
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate5, $date8 ))
4566
- , array( &quot;VALUE&quot; => &quot;DATE&quot; ));
4567
- <span class="comment">// dates in DATE format</span>
4568
- .. .</p>
4569
- <br>
4570
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4571
-
4572
-
4573
- <a name="RECURRENCE-ID"></a><h3>3.2.30 RECURRENCE-ID</h3>
4574
- This property is used in conjunction with the <a href="#UID">UID</a> and <a href="#SEQUENCE">SEQUENCE</a> property to identify a specific instance of a recurring <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VJOURNAL">VJOURNAL</a> <i>calendar</i> component and is OPTIONAL and MAY NOT occur more than once.<br><br>
4575
- The property value is the effective value of the <a href="#DTSTART">DTSTART</a> property of the recurrence instance. The default value type is DATE-TIME, can be set to DATE (params <span class="ref">2</span>).
4576
- <h5>Delete RECURRENCE-ID</h5>
4577
- Remove RECURRENCE-ID from component.
4578
- <p class="label">Format</p>
4579
- <p class="format">deleteProperty( &quot;RECURRENCE-ID&quot; )</p>
4580
- <p class="label">Example</p>
4581
- <p class="example">$vevent->deleteProperty( &quot;RECURRENCE-ID&quot; );</p>
4582
- <h5>Get RECURRENCE-ID</h5>
4583
- Fetch property value.
4584
- <p class="label">Format 1</p>
4585
- <p class="format">getProperty( &quot;RECURRENCE-ID&quot; )</p>
4586
- <p class="comment">output = recurrIdDate<span class="ref">1</span></p>
4587
- <p class="label">Format 2</p>
4588
- <p class="format">getProperty( &quot;RECURRENCE-ID&quot;, FALSE , TRUE )</p>
4589
- <p class="comment">output = array( &quot;value&quot; =&gt; recurrIdDate<span class="ref">1</span>
4590
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4591
- <p class="label">Example</p>
4592
- <p class="example">$recurrDate = $vtodo->getProperty( &quot;RECURRENCE-ID&quot; );</p>
4593
- <h5>Set RECURRENCE-ID</h5>
4594
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
4595
- <br>
4596
- <br>
4597
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
4598
- date-time values will be set WITH timezone from config.
4599
- Notice, use function <a href="#transformDateTime">transformDateTime</a>
4600
- to change a datetime from a time zone to another.
4601
- <p class="label">Format</p>
4602
- <p class="format">setProperty( &quot;recurrence-id&quot;, recurrIdDate [, params ] )</p>
4603
- <p class="comment">recurrIdDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
4604
- , &quot;month&quot; =&gt; int month
4605
- , &quot;day&quot; =&gt; int day
4606
- [, &quot;hour&quot; =&gt; int hour
4607
- , &quot;min&quot; =&gt; int min
4608
- , &quot;sec&quot; =&gt; int sec
4609
- [, &quot;tz&quot; =&gt; mixed tz ]] )
4610
- recurrIdDate = int year
4611
- , int month
4612
- , int day
4613
- [, int hour
4614
- , int min
4615
- , int sec
4616
- [, mixed tz ]]
4617
- recurrIdDate = array( int year
4618
- , int month
4619
- , int day
4620
- [, int hour
4621
- , int min
4622
- , int sec
4623
- [, mixed tz ]] )
4624
- recurrIdDate = array( &quot;timestamp&quot; =&gt; int timestamp
4625
- [, &quot;tz&quot; =&gt; mixed tz ] )
4626
- recurrIdDate = string datestring // <span class="ref">string date,
4627
- acceptable by strtotime function,
4628
- ex. &quot;14 august 2006 16.00.00&quot;
4629
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4630
- tz = timezone / offset
4631
- (timezone will be used as tzidparam, if tzidparam not exists)
4632
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4633
- params<span class="ref">2</span> = array([ datetimeparam/dateparam/tzidparam ]
4634
- [, rangeparam ]
4635
- [, xparam ] )
4636
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
4637
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
4638
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
4639
- // <span class="ref">output as local date-time with timezone identifier</span>
4640
- rangeparam = &quot;RANGE&quot; =&gt; ( "THISANDPRIOR" / "THISANDFUTURE" )
4641
- // <span class="ref">range parameter</span>
4642
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4643
- <p class="label">Example</p>
4644
- <p class="example">$vtodo->setProperty( &quot;recurrence-id&quot;, &quot;3 March 2003 03.03.03&quot; );
4645
- <span class="comment">// 3 march 2003 03.03.03 local time</span></p>
4646
- <br>
4647
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4648
-
4649
-
4650
- <a name="RELATED-TO"></a><h3>3.2.31 RELATED-TO</h3>
4651
- The property is used to represent a relationship or reference between one <i>calendar</i> component and another and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
4652
- The property value consists of the persistent, globally unique identifier of another <i>calendar</i> component. This value would be represented in a <i>calendar</i> component by the <a href="#UID">UID</a> property.<br><br>
4653
- The value type for RELATED-TO is TEXT.
4654
- <h5>Delete RELATED-TO</h5>
4655
- Remove RELATED-TO from component.
4656
- <p class="label">Format</p>
4657
- <p class="format">deleteProperty( &quot;RELATED-TO&quot; )</p>
4658
- <p class="label">Example 1</p>
4659
- <p class="example">$vtodo->deleteProperty( &quot;RELATED-TO&quot; );</p>
4660
- <p class="label">Example 2</p>
4661
- Delete RELATED-TO property no 2.
4662
- <p class="example">$vjournal->deleteProperty( &quot;RELATED-TO&quot;, 2 );</p>
4663
- <p class="label">Example 3</p>
4664
- Deleting all RELATED-TO properties.
4665
- <p class="example">while( $vjournal->deleteProperty( &quot;RELATED-TO&quot; ))
4666
- continue;</p>
4667
- <h5>Get RELATED-TO</h5>
4668
- Fetch property value.
4669
- <p class="label">Format 1</p>
4670
- <p class="format">getProperty( &quot;RELATED-TO&quot; )</p>
4671
- <p class="comment">output = relid<span class="ref">1</span></p>
4672
- <p class="label">Format 2</p>
4673
- <p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo/FALSE , TRUE )</p>
4674
- <p class="comment">output = array( &quot;value&quot; =&gt; relid<span class="ref">1</span>
4675
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4676
- <p class="label">Format 3</p>
4677
- <p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo )</p>
4678
- <p class="comment">Get propOrderNo RELATED-TO</p>
4679
- <p class="label">Example</p>
4680
- <p class="example">$relatedId = $vtodo->getProperty( &quot;RELATED-TO&quot; );</p>
4681
- <h5>Set RELATED-TO</h5>
4682
- Insert property value.
4683
- <p class="label">Format</p>
4684
- <p class="format">setProperty( &quot;Related-To&quot;, relid [, params [, propOrderNo ]] )</p>
4685
- <p class="comment">relid<span class="ref">1</span> = Value type TEXT.
4686
- params<span class="ref">2</span> = array( [ reltype ] [, xparam] )
4687
- reltype = &quot;RELTYPE&quot; =&gt; (&quot;PARENT&quot; (Default)
4688
- / &quot;CHILD&quot;
4689
- / &quot;SIBLING&quot;
4690
- / iana-token
4691
- / x-name)
4692
- xparam = *[ xparamkey =&gt; xparamvalue ]
4693
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4694
- <p class="label">Example</p>
4695
- <p class="example">$vtodo->setProperty( &quot;related-to&quot;, &quot;19960401-080045-4000F192713@host.com&quot;);</p>
4696
- <br>
4697
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4698
-
4699
- <a name="REPEAT"></a><h3>3.2.32 REPEAT</h3>
4700
- This property defines the number of time the <a href="#VALARM">ALARM</a> should be repeated, after the initial trigger.
4701
- If the <a href="#VALARM">ALARM</a> triggers more than once, then this property MUST be specified along with the <a href="#DURATION">DURATION</a> property.
4702
- <h5>Delete REPEAT</h5>
4703
- Remove REPEAT from component.
4704
- <p class="label">Format</p>
4705
- <p class="format">deleteProperty( &quot;REPEAT&quot; )</p>
4706
- <p class="label">Example</p>
4707
- <p class="example">$valarm->deleteProperty( &quot;REPEAT&quot; );</p>
4708
- <h5>Get REPEAT</h5>
4709
- Fetch property value.
4710
- <p class="label">Format 1</p>
4711
- <p class="format">getProperty( &quot;REPEAT&quot; )</p>
4712
- <p class="comment">output = repeatTimes<span class="ref">1</span></p>
4713
- <p class="label">Format 2</p>
4714
- <p class="format">getProperty( &quot;REPEAT&quot;, FALSE , TRUE )</p>
4715
- <p class="comment">output = array( &quot;value&quot; =&gt; repeatTimes<span class="ref">1</span>
4716
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4717
- <p class="label">Example</p>
4718
- <p class="example">$repeat = $vtodo->getProperty( &quot;REPEAT&quot; );</p>
4719
- <h5>Set REPEAT</h5>
4720
- Insert property value.
4721
- <p class="label">Format</p>
4722
- <p class="format">setProperty( &quot;repeat&quot;, repeatTimes [, xparam ] )</p>
4723
- <p class="comment">repeatTimes<span class="ref">1</span> = Value type INTEGER
4724
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4725
- <p class="label">Example</p>
4726
- <p class="example">$valarm->setProperty( &quot;repeat&quot;, 2 );</p>
4727
- <br>
4728
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4729
-
4730
-
4731
- <a name="REQUEST-STATUS"></a><h3>3.2.33 REQUEST-STATUS</h3>
4732
- This property defines the status code returned for a scheduling request and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
4733
- <h5>Delete REQUEST-STATUS</h5>
4734
- Remove REQUEST-STATUS from component.
4735
- <p class="label">Format</p>
4736
- <p class="format">deleteProperty( &quot;REQUEST-STATUS&quot; )</p>
4737
- <p class="label">Example 1</p>
4738
- <p class="example">$vtodo->deleteProperty( &quot;REQUEST-STATUS&quot; );</p>
4739
- <p class="label">Example 2</p>
4740
- Delete REQUEST-STATUS property no 2.
4741
- <p class="example">$vjournal->deleteProperty( &quot;REQUEST-STATUS&quot;, 2 );</p>
4742
- <p class="label">Example 3</p>
4743
- Deleting all REQUEST-STATUS properties.
4744
- <p class="example">while( $vjournal->deleteProperty( &quot;REQUEST-STATUS&quot; ))
4745
- continue;</p>
4746
- <h5>Get REQUEST-STATUS</h5>
4747
- Fetch property value.
4748
- <p class="label">Format 1</p>
4749
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot; )</p>
4750
- <p class="comment">output = array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
4751
- , &quot;text&quot; =&gt; errtext<span class="ref">2</span>
4752
- [ , &quot;extdata&quot; =&gt; extraData<span class="ref"> 3</span> ] )</p>
4753
- <p class="label">Format 2</p>
4754
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo/FALSE, TRUE )</p>
4755
- <p class="comment">output = array( &quot;value&quot; =&gt; array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
4756
- , &quot;text&quot; =&gt; errtext<span class="ref">2</span>
4757
- [ , &quot;extdata&quot; =&gt; extraData<span class="ref">3</span> ] )
4758
- , &quot;params&quot; =&gt; params<span class="ref">4</span> )</p>
4759
- <p class="label">Format 3</p>
4760
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo )</p>
4761
- <p class="comment">Get propOrderNo REQUEST-STATUS</p>
4762
- <p class="label">Example</p>
4763
- <p class="example">$requestStatus = $vtodo->getProperty( &quot;REQUEST-STATUS&quot; );</p>
4764
- <h5>Set REQUEST-STATUS</h5>
4765
- Insert property value.
4766
- <p class="label">Format</p>
4767
- <p class="format">setProperty( &quot;Request-Status&quot;
4768
- , statcode, errtext [,extraData/FALSE [,params [,propOrderNo]]])</p>
4769
- <p class="comment">statcode<span class="ref">1</span> = Hierarchical, numeric return status code
4770
- (1*DIGIT *(&quot;.&quot; 1*DIGIT))
4771
- errtext<span class="ref">2</span> = Textual status description
4772
- extraData<span class="ref">3</span> = Textual exception data.
4773
- For example, the offending property name and value
4774
- or complete property line.
4775
- params<span class="ref">4</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam ] )
4776
- xparam = *[ xparamkey =&gt; xparamvalue ]
4777
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4778
- <p class="label">Example</p>
4779
- <p class="example">$vfreebusy->setProperty(&quot;request-status&quot;
4780
- , 2.0
4781
- , &quot;Invalid property value&quot;
4782
- , &quot;DTSTART:96-Apr-31&quot;);</p>
4783
- <br>
4784
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4785
-
4786
-
4787
- <a name="RESOURCES"></a><h3>3.2.34 RESOURCES</h3>
4788
- This property defines the equipment or resources anticipated for an activity specified by a <i>calendar</i> entity and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br><br>
4789
- The value type for RESOURCES is TEXT.
4790
- <h5>Delete RESOURCES</h5>
4791
- Remove RESOURCES from component.
4792
- <p class="label">Format</p>
4793
- <p class="format">deleteProperty( &quot;RESOURCES&quot; )</p>
4794
- <p class="label">Example 1</p>
4795
- <p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot; );</p>
4796
- <p class="label">Example 2</p>
4797
- Delete RESOURCES property no 2.
4798
- <p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot;, 2 );</p>
4799
- <p class="label">Example 3</p>
4800
- Deleting all RESOURCES properties.
4801
- <p class="example">while( $vevent->deleteProperty( &quot;RESOURCES&quot; ))
4802
- continue;</p>
4803
- <h5>Get RESOURCES</h5>
4804
- Fetch property value.
4805
- <p class="label">Format 1</p>
4806
- <p class="format">getProperty( &quot;RESOURCES&quot; )</p>
4807
- <p class="comment">output = resources<span class="ref">1</span></p>
4808
- <p class="label">Format 2</p>
4809
- <p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo/FALSE, TRUE )</p>
4810
- <p class="comment">output = array( &quot;value&quot; =&gt; resources<span class="ref">1</span>
4811
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4812
- <p class="label">Format 3</p>
4813
- <p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo )</p>
4814
- <p class="comment">Get propOrderNo RESOURCES</p>
4815
- <p class="label">Example</p>
4816
- <p class="example">$resources = $vtodo->getProperty( &quot;RESOURCES&quot; );</p>
4817
- <h5>Set RESOURCES</h5>
4818
- Insert property value.
4819
- <br>
4820
- Parameters, if any, will be ordered as prescribed in rcf2445.
4821
- <p class="label">Format</p>
4822
- <p class="format">setProperty( &quot;resources&quot;, resources [, params [, propOrderNo ]] )</p>
4823
- <p class="comment">resources<span class="ref">1</span> = string resource / array( *resource )
4824
- resource = textual resources or subtypes of the <i>calendar</i> component,
4825
- can be specified as a list of resources
4826
- separated by the COMMA character.
4827
- params<span class="ref">2</span> = array([ &quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
4828
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
4829
- [, xparam] )
4830
- xparam = *[ xparamkey =&gt; xparamvalue ]
4831
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4832
- <p class="label">Example</p>
4833
- <p class="example">$vevent->setProperty( &quot;resources&quot;, &quot;COMPUTER PROJECTOR&quot; );</p>
4834
- <br>
4835
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4836
-
4837
-
4838
- <a name="RRULE"></a><h3>3.2.35 RRULE</h3>
4839
- This property defines a rule or repeating pattern for recurring <a href="#VEVENT">EVENTs</a>, <a href="#VTODO">TODOs</a>, <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> definitions and is OPTIONAL and MAY occur more than once.
4840
- <h5>Delete RRULE</h5>
4841
- Remove RRULE from component.
4842
- <p class="label">Format</p>
4843
- <p class="format">deleteProperty( &quot;RRULE&quot; )</p>
4844
- <p class="label">Example 1</p>
4845
- <p class="example">$vevent->deleteProperty( &quot;RRULE&quot; );</p>
4846
- <p class="label">Example 2</p>
4847
- Delete RRULE property no 2.
4848
- <p class="example">$vevent->deleteProperty( &quot;RRULE&quot;, 2 );</p>
4849
- <p class="label">Example 3</p>
4850
- Deleting all RRULE properties.
4851
- <p class="example">while( $vevent->deleteProperty( &quot;RRULE&quot; ))
4852
- continue;</p>
4853
- <h5>Get RRULE</h5>
4854
- Fetch property value.
4855
- <p class="label">Format 1</p>
4856
- <p class="format">getProperty( &quot;RRULE&quot; )</p>
4857
- <p class="comment">output = recur<span class="ref">1</span></p>
4858
- <p class="label">Format 2</p>
4859
- <p class="format">getProperty( &quot;RRULE&quot;, propOrderNo/FALSE, TRUE )</p>
4860
- <p class="comment">output = array( &quot;value&quot; =&gt; recur<span class="ref">1</span>
4861
- , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
4862
- <p class="label">Format 3</p>
4863
- <p class="format">getProperty( &quot;RRULE&quot;, propOrderNo )</p>
4864
- <p class="comment">Get propOrderNo RRULE</p>
4865
- <p class="label">Example</p>
4866
- <p class="example">$rrules = $vtodo->getProperty( &quot;RRULE&quot; );</p>
4867
- <h5>Set RRULE</h5>
4868
- Insert property value.
4869
- <br>
4870
- Parameters will be ordered as prescribed in rcf2445.
4871
- <p class="label">Format</p>
4872
- <p class="format">setProperty( &quot;rrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
4873
- <p>
4874
- For rules example see <a href="#EXRULE">Exrule</a> format and in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
4875
- </p>
4876
- <p class="comment">recur<span class="ref">1</span> = see <a href="#EXRULE">Exrule</a>
4877
- xparams<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )
4878
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4879
- <br>
4880
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4881
-
4882
- <a name="SEQUENCE"></a><h3>3.2.36 SEQUENCE</h3>
4883
- This property defines the revision sequence number of the <i>calendar</i> component within a sequence of revisions.
4884
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
4885
- <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
4886
- <br>
4887
- <p class="quotes">
4888
- It is monotonically incremented by the <a href="#ORGANIZER">ORGANIZER's</a> CUA (Calendar
4889
- User Agent) each time the <a href="#ORGANIZER">ORGANIZER</a> makes a significant revision
4890
- to the <i>calendar</i> component.
4891
-
4892
- When the <a href="#ORGANIZER">ORGANIZER</a> makes changes to one of the following
4893
- properties, the sequence number MUST be incremented: <a href="#DTSTART">DTSTART</a>,
4894
- <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#RDATE">RDATE</a>, <a href="#RRULE">RRULE</a>,
4895
- <a href="#EXDATE">EXDATE</a>, <a href="#EXRULE">EXRULE</a>, <a href="#STATUS">STATUS</a>. In addition,
4896
- changes made by the <a href="#ORGANIZER">ORGANIZER</a> to other properties can also force
4897
- the sequence number to be incremented. The <a href="#ORGANIZER">ORGANIZER</a> CUA MUST
4898
- increment the sequence number when ever it makes changes to
4899
- properties in the <i>calendar</i> component that the <a href="#ORGANIZER">ORGANIZER</a>
4900
- deems will jeopardize the validity of the participation status of the
4901
- <a href="#ATTENDEE">Attendees</a>. For example, changing the location
4902
- of a meeting from one locale to another distant locale could
4903
- effectively impact the participation status of the <a href="#ATTENDEE">Attendees</a>.
4904
- </p>
4905
- <h5>Delete SEQUENCE</h5>
4906
- Remove SEQUENCE from component.
4907
- <p class="label">Format</p>
4908
- <p class="format">deleteProperty( &quot;SEQUENCE&quot; )</p>
4909
- <p class="label">Example</p>
4910
- <p class="example">$vtodo->deleteProperty( &quot;SEQUENCE&quot; );</p>
4911
- <h5>Get SEQUENCE</h5>
4912
- Fetch property value.
4913
- <p class="label">Format 1</p>
4914
- <p class="format">getProperty( &quot;SEQUENCE&quot; )</p>
4915
- <p class="comment">output = sequence<span class="ref">1</span></p>
4916
- <p class="label">Format 2</p>
4917
- <p class="format">getProperty( &quot;SEQUENCE&quot;, FALSE , TRUE )</p>
4918
- <p class="comment">output = array( &quot;value&quot; =&gt; sequence<span class="ref">1</span>
4919
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4920
- <p class="label">Example</p>
4921
- <p class="example">$sequence = $vtodo->getProperty( &quot;SEQUENCE&quot; );</p>
4922
- <h5>Set SEQUENCE</h5>
4923
- Insert property value.
4924
- <p class="label">Format</p>
4925
- <p class="format">setProperty( &quot;sequence&quot; [, sequence [, xparam ]] )</p>
4926
- <p class="comment">sequence<span class="ref">1</span> = Value type INTEGER
4927
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4928
- <p class="label">Example 1</p>
4929
- <p class="example">$vevent->setProperty( &quot;sequence&quot;, 2 );
4930
- <span class="comment">// set sequence number to 2</span></p>
4931
- <p class="label">Example 2</p>
4932
- <p class="example">$vevent->setProperty( &quot;sequence&quot; );
4933
- <span class="comment">// force sequence number to be set to 0
4934
- // or, if sequence exists, incremented by 1</span></p>
4935
- <br>
4936
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4937
-
4938
-
4939
- <a name="STATUS"></a><h3>3.2.37 STATUS</h3>
4940
- This property defines the overall status or confirmation for the <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
4941
- <h5>Delete STATUS</h5>
4942
- Remove STATUS from component.
4943
- <p class="label">Format</p>
4944
- <p class="format">deleteProperty( &quot;STATUS&quot; )</p>
4945
- <p class="label">Example</p>
4946
- <p class="example">$vtodo->deleteProperty( &quot;STATUS&quot; );</p>
4947
- <h5>Get STATUS</h5>
4948
- Fetch property value.
4949
- <p class="label">Format 1</p>
4950
- <p class="format">getProperty( &quot;STATUS&quot; )</p>
4951
- <p class="comment">output = status<span class="ref">1</span></p>
4952
- <p class="label">Format 2</p>
4953
- <p class="format">getProperty( &quot;STATUS&quot;, FALSE , TRUE )</p>
4954
- <p class="comment">output = array( &quot;value&quot; =&gt; status<span class="ref">1</span>
4955
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4956
- <p class="label">Example</p>
4957
- <p class="example">$status = $vtodo->getProperty( &quot;STATUS&quot; );</p>
4958
- <h5>Set STATUS</h5>
4959
- Insert property value.
4960
- <p class="label">Format</p>
4961
- <p class="format">setProperty( &quot;status&quot;, status [, xparam ] )</p>
4962
- <p class="comment"> // <span class="ref">Status values for a <a href="#vevent">VEVENT</a></span>
4963
- status<span class="ref">1</span> = &quot;TENTATIVE&quot; // <span class="ref">Indicates event is tentative</span>
4964
- / &quot;CONFIRMED&quot; // <span class="ref">Indicates event is definite</span>
4965
- / &quot;CANCELLED&quot; // <span class="ref">Indicates event was cancelled</span>
4966
- // <span class="ref">Status values for <a href="#VTODO">VTODO</a></span>
4967
- status<span class="ref">1</span> = &quot;NEEDS-ACTION&quot; // <span class="ref">Indicates to-do needs action</span>
4968
- / &quot;COMPLETED&quot; // <span class="ref">Indicates to-do completed</span>
4969
- / &quot;IN-PROCESS&quot; // <span class="ref">Indicates to-do in process of</span>
4970
- / &quot;CANCELLED&quot; // <span class="ref">Indicates to-do was cancelled</span>
4971
- // <span class="ref">Status values for <a href="#VJOURNAL">VJOURNAL</a></span>
4972
- status<span class="ref">1</span> = &quot;DRAFT&quot; // <span class="ref">Indicates journal is draft</span>
4973
- / &quot;FINAL&quot; // <span class="ref">Indicates journal is final</span>
4974
- / &quot;CANCELLED&quot; // <span class="ref">Indicates journal is removed</span>
4975
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4976
- <p class="label">Example</p>
4977
- <p class="example">$vevent->setProperty( &quot;Status&quot;, &quot;COMPLETED&quot; );</p>
4978
- <br>
4979
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4980
-
4981
-
4982
- <a name="SUMMARY"></a><h3>3.2.38 SUMMARY</h3>
4983
- This property defines a short (&quot;one line&quot;) summary or subject for the <i>calendar</i> component. (In &quot;rfc2445, Recommended Practices&quot;, up to 255 characters) (, analogous to a mail SUBJECT). The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components. The property is REQUIRED and MUST occur once in <a href="#VALARM">VALARM</a> (EMAIL) <i>calendar</i> component.<br><br>
4984
- The value type for SUMMARY is TEXT.
4985
- <h5>Delete SUMMARY</h5>
4986
- Remove SUMMARY from component.
4987
- <p class="label">Format</p>
4988
- <p class="format">deleteProperty( &quot;SUMMARY&quot; )</p>
4989
- <p class="label">Example</p>
4990
- <p class="example">$vevent->deleteProperty( &quot;SUMMARY&quot; );</p>
4991
- <h5>Get SUMMARY</h5>
4992
- Fetch property value.
4993
- <p class="label">Format 1</p>
4994
- <p class="format">getProperty( &quot;SUMMARY&quot; )</p>
4995
- <p class="comment">output = summary<span class="ref">1</span></p>
4996
- <p class="label">Format 2</p>
4997
- <p class="format">getProperty( &quot;SUMMARY&quot;, FALSE , TRUE )</p>
4998
- <p class="comment">output = array( &quot;value&quot; =&gt; summary<span class="ref">1</span>
4999
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
5000
- <p class="label">Example</p>
5001
- <p class="example">$summary = $vtodo->getProperty( &quot;SUMMARY&quot; );</p>
5002
- <h5>Set SUMMARY</h5>
5003
- Insert property value.
5004
- <br>
5005
- Parameters, if any, will be ordered as prescribed in rcf2445.
5006
- <p class="label">Format</p>
5007
- <p class="format">setProperty( &quot;summary&quot;, summary [, params ] )</p>
5008
- <p CLASS="comment">summary<span class="ref">1</span> = Value type TEXT,
5009
- a short, one line summary about the activity or journal entry.
5010
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
5011
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
5012
- [, xparam ] )
5013
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
5014
- <p class="label">Example</p>
5015
- <p class="example">$vevent->setProperty( &quot;summary&quot;, &quot;This is a summary&quot; );</p>
5016
- <br>
5017
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5018
-
5019
-
5020
- <a name="TRANSP"></a><h3>3.2.39 TRANSP</h3>
5021
- This property defines whether an <a href="#VEVENT">EVENT</a> is transparent or not to busy time searches and is OPTIONAL and MUST NOT occur more than once.
5022
- <h5>Delete TRANSP</h5>
5023
- Remove TRANSP from component.
5024
- <p class="label">Format</p>
5025
- <p class="format">deleteProperty( &quot;TRANSP&quot; )</p>
5026
- <p class="label">Example</p>
5027
- <p class="example">$vevent->deleteProperty( &quot;TRANSP&quot; );</p>
5028
- <h5>Get TRANSP</h5>
5029
- Fetch property value.
5030
- <p class="label">Format 1</p>
5031
- <p class="format">getProperty( &quot;TRANSP&quot; )</p>
5032
- <p class="comment">output = transp<span class="ref">1</span></p>
5033
- <p class="label">Format 2</p>
5034
- <p class="format">getProperty( &quot;TRANSP&quot;, FALSE , TRUE )</p>
5035
- <p class="comment">output = array( &quot;value&quot; =&gt; transp<span class="ref">1</span>
5036
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5037
- <p class="label">Example</p>
5038
- <p class="example">$transp = $vtodo->getProperty( &quot;TRANSP&quot; );</p>
5039
- <h5>Set TRANSP</h5>
5040
- Insert property value.
5041
- <p class="label">Format</p>
5042
- <p class="format">setProperty( &quot;transp&quot;, transp [, xparam ] )</p>
5043
- <p class="comment">transp<span class="ref">1</span> = &quot;OPAQUE&quot; / &quot;TRANSPARENT&quot;
5044
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5045
- <p class="label">Example</p>
5046
- <p class="example">$vevent->setProperty( &quot;transp&quot;, &quot;TRANSPARENT&quot; );</p>
5047
- <br>
5048
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5049
-
5050
-
5051
- <a name="TRIGGER"></a><h3>3.2.40 TRIGGER</h3>
5052
- This property specifies when an <a href="#VALARM">ALARM</a> will trigger and is REQUIRED and MUST NOT occur more than once.<br><br>
5053
- The default value type is DURATION. The value type can be set to a DATE-TIME value type, in which case the value MUST specify an <a href="#DATE_WITH_UTC_TIME">UTC</a> formatted DATE-TIME value.
5054
- <h5>Delete TRIGGER</h5>
5055
- Remove TRIGGER from component.
5056
- <p class="label">Format</p>
5057
- <p class="format">deleteProperty( &quot;TRIGGER&quot; )</p>
5058
- <p class="label">Example</p>
5059
- <p class="example">$valarm->deleteProperty( &quot;TRIGGER&quot; );</p>
5060
- <h5>Get TRIGGER</h5>
5061
- Fetch property value.
5062
- <p class="label">Format 1</p>
5063
- <p class="format">getProperty( &quot;TRIGGER&quot; )</p>
5064
- <p class="comment">output = duration/date</p>
5065
- <p class="label">Format 2</p>
5066
- <p class="format">getProperty( &quot;TRIGGER&quot;, FALSE , TRUE )</p>
5067
- <p class="comment">output = array( &quot;value&quot; =&gt; duration<span class="ref">1</span>/date<span class="ref">3</span> )
5068
- , &quot;params&quot; =&gt; params<span class="ref">4</span> )
5069
- <p class="label">Example</p>
5070
- <p class="example">$trigger = $vtodo->getProperty( &quot;TRIGGER&quot; );</p>
5071
- <h5>Set TRIGGER</h5>
5072
- Insert property value.<br>
5073
- Note, use function <a href="#transformDateTime">transformDateTime</a>
5074
- to change a datetime (in a local time zone) to UTC time zone.
5075
- <p class="label">Format 1</p>
5076
- <p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">1</span> [, params<span class="ref">4</span> ] )</p>
5077
- <p class="label">Format 2</p>
5078
- <p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">2</span> [, params<span class="ref">4</span> ] )</p>
5079
- <p class="label">Format 3</p>
5080
- <p class="format">setProperty( &quot;trigger&quot;, date<span class="ref">3</span> [, params<span class="ref">4</span> ] )</p>
5081
- <p class="label">Format</p>
5082
- <p class="format">setProperty( &quot;trigger&quot;, int year/FALSE
5083
- , int month/FALSE
5084
- , int day/FALSE
5085
- [, int week/FALSE
5086
- [, int hour/FALSE
5087
- , int min/FALSE
5088
- , int sec/FALSE
5089
- [, bool relatedStart=TRUE
5090
- [, bool before=TRUE
5091
- [, array params<span class="ref">4</span> ]]]]] )</p>
5092
- <p class="comment">duration<span class="ref">1</span> = array( &quot;week&quot; =&gt; int week
5093
- , &quot;relatedStart&quot; =&gt; bool relstart
5094
- , &quot;before&quot; =&gt; bool before )
5095
- duration<span class="ref">1</span> = array( &quot;day&quot; =&gt; int day
5096
- , &quot;hour&quot; =&gt; int hour
5097
- , &quot;min&quot; =&gt; int min
5098
- , &quot;sec&quot; =&gt; int sec
5099
- , &quot;relatedStart&quot; =&gt; bool relstart
5100
- , &quot;before&quot; =&gt; bool before )
5101
- relatedStart = TRUE : related start (default),
5102
- FALSE : related end
5103
- before = TRUE : before relatedStart (default),
5104
- FALSE : after relatedStart
5105
- duration<span class="ref">2</span> = string dur-value = ([&quot;+&quot;]/&quot;-&quot;)&quot;P&quot;(dur-date/dur-time/dur-week)
5106
- dur-date = dur-day [dur-time]
5107
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
5108
- dur-week = 1*DIGIT &quot;W&quot;
5109
- dur-day = 1*DIGIT &quot;D&quot;
5110
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
5111
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
5112
- dur-second = 1*DIGIT &quot;S&quot;
5113
- date<span class="ref">3</span> = array( &quot;year&quot; =&gt; int year // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
5114
- , &quot;month&quot; =&gt; int month
5115
- , &quot;day&quot; =&gt; int day
5116
- [, &quot;hour&quot; =&gt; int hour
5117
- , &quot;min&quot; =&gt; int min
5118
- , &quot;sec&quot; =&gt; int sec ])
5119
- date<span class="ref">3</span> = array ( &quot;timestamp&quot; =&gt; int timestamp ) // <span class="ref"><a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
5120
- date<span class="ref">3</span> = string datestring // <span class="ref">string date,
5121
- acceptable by strtotime function,
5122
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
5123
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
5124
- // <span class="ref"><a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
5125
- params<span class="ref">4</span> = array( [[ reltype [, trigRelparam ]] / datetimeparam ]
5126
- [, xparams ] )
5127
- reltyp = &quot;RELATED&quot; =&gt; &quot;START&quot; (default) / &quot;END&quot;
5128
- trigRelparam = &quot;VALUE&quot; =&gt; &quot;DURATION&quot;
5129
- datetimeparam= &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot;
5130
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
5131
- <p class="label">Example 1</p>
5132
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5133
- , FALSE, FALSE, FALSE, FALSE, 1, 2, 3 );
5134
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5135
- <p class="label">Example 2</p>
5136
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5137
- , array (&quot;hour&quot;=&gt;1,&quot;min&quot;=&gt;2,&quot;sec&quot;=&gt;3 );
5138
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5139
- <p class="label">Example 3</p>
5140
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5141
- , &quot;PT1H2M3S&quot; );
5142
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5143
- <p class="label">Example 4</p>
5144
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5145
- , FALSE, FALSE, FALSE, 1
5146
- , FALSE, FALSE, FALSE, FALSE, FALSE );
5147
- <span class="comment">// duration, 1 week after end</span></p>
5148
- <p class="label">Example 5</p>
5149
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5150
- , array ( &quot;week&quot; =&gt; 1
5151
- , &quot;relatedStart&quot; =&gt; FALSE
5152
- , &quot;before&quot; =&gt; FALSE ));
5153
- <span class="comment">// duration, 1 week after end</span></p>
5154
- <p class="label">Example 6</p>
5155
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5156
- , &quot;P1W&quot;
5157
- , array( &quot;related&quot; =&gt; &quot;END&quot; ));
5158
- <span class="comment">// duration, 1 week after end</span></p>
5159
- <p class="label">Example 7</p>
5160
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5161
- , array( &quot;year&quot; =&gt; 2007
5162
- , &quot;month&quot; =&gt; 6
5163
- , &quot;day&quot; =&gt; 5,
5164
- , &quot;hour&quot; =&gt; 2
5165
- , &quot;min&quot; =&gt; 2
5166
- , &quot;sec&quot; =&gt; 3 ));</p>
5167
- <br>
5168
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5169
-
5170
-
5171
- <a name="TZID"></a><h3>3.2.41 TZID</h3>
5172
- This property specifies the text value that uniquely identifies the <a href="#VTIMEZONE">VTIMEZONE</a> <i>calendar</i> component and is REQUIRED, but MUST NOT occur more than once. <br><br>
5173
- The value type for TZID is TEXT.
5174
- <h5>Delete TZID</h5>
5175
- Remove TZID from component.
5176
- <p class="label">Format</p>
5177
- <p class="format">deleteProperty( &quot;TZID&quot; )</p>
5178
- <p class="label">Example</p>
5179
- <p class="example">$vtimezone->deleteProperty( &quot;TZID&quot; );</p>
5180
- <h5>Get TZID</h5>
5181
- Fetch property value.
5182
- <p class="label">Format 1</p>
5183
- <p class="format">getProperty( &quot;TZID&quot; )</p>
5184
- <p class="comment">output = tzid<span class="ref">1</span></p>
5185
- <p class="label">Format 2</p>
5186
- <p class="format">getProperty( &quot;TZID&quot;, FALSE , TRUE )</p>
5187
- <p class="comment">output = array( &quot;value&quot; =&gt; tzid<span class="ref">1</span>
5188
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5189
- <p class="label">Example</p>
5190
- <p class="example">$tzid = $vtimezone->getProperty( &quot;TZID&quot; );</p>
5191
- <h5>Set TZID</h5>
5192
- Insert property value.
5193
- <p class="label">Format</p>
5194
- <p class="format">setProperty( &quot;tzid&quot;, tzid [, xparam ] )</p>
5195
- <p class="comment">tzid<span class="ref">1</span> = Value type TEXT
5196
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5197
- <p class="label">Example</p>
5198
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5199
- $vcalendar = new vcalendar( $config );
5200
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5201
- $vtimezone->setProperty( &quot;tzid&quot;, &quot;US-Eastern&quot; );
5202
- .. .</p>
5203
- <br>
5204
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5205
-
5206
-
5207
- <a name="TZNAME"></a><h3>3.2.42 TZNAME</h3>
5208
- This property specifies the customary designation for a <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> description and is OPTIONAL and MAY occur more than once.<br><br>
5209
- The value type for TZNAME is TEXT.
5210
- <h5>Delete TZNAME</h5>
5211
- Remove TZNAME from component.
5212
- <p class="label">Format</p>
5213
- <p class="format">deleteProperty( &quot;TZNAME&quot; )</p>
5214
- <p class="label">Example 1</p>
5215
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot; );</p>
5216
- <p class="label">Example 2</p>
5217
- Delete TZNAME property no 2.
5218
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot;, 2 );</p>
5219
- <p class="label">Example 3</p>
5220
- Deleting all TZNAME properties.
5221
- <p class="example">while( $vtimezonestd->deleteProperty( &quot;TZNAME&quot; ))
5222
- continue;</p>
5223
- <h5>Get TZNAME</h5>
5224
- Fetch property value.
5225
- <p class="label">Format 1</p>
5226
- <p class="format">getProperty( &quot;TZNAME&quot; )</p>
5227
- <p class="comment">output = tzname<span class="ref">1</span></p>
5228
- <p class="label">Format 2</p>
5229
- <p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo/FALSE, TRUE )</p>
5230
- <p class="comment">output = array( &quot;value&quot; =&gt; tzname<span class="ref">1</span>
5231
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
5232
- <p class="label">Format 3</p>
5233
- <p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo )</p>
5234
- <p class="comment">Get propOrderNo TZNAME</p>
5235
- <p class="label">Example</p>
5236
- <p class="example">$tzname = $timezonestandard->getProperty( &quot;TZNAME&quot; );</p>
5237
- <h5>Set TZNAME</h5>
5238
- Insert property value.
5239
- <p class="label">Format</p>
5240
- <p class="format">setProperty( &quot;tzname&quot;, tzname [, params [, propOrderNo ]] )</p>
5241
- <p class="comment">tzname<span class="ref">1</span> = Value type TEXT
5242
- params<span class="ref">2</span> = array( [ &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot; ] [, xparam ] )
5243
- xparam = *[ xparamkey =&gt; xparamvalue ]
5244
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
5245
- <p class="label">Example</p>
5246
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5247
- $vcalendar = new vcalendar( $config );
5248
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5249
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5250
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5251
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
5252
- $standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
5253
- .. .</p>
5254
- <br>
5255
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5256
-
5257
-
5258
- <a name="TZOFFSETFROM"></a><h3>3.2.43 TZOFFSETFROM</h3>
5259
- This property specifies the offset which is in use prior to this <a href="#VTIMEZONE">TIMEZONE</a> observance.
5260
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
5261
- <h5>Delete TZOFFSETFROM</h5>
5262
- Remove TZOFFSETFROM from component.
5263
- <p class="label">Format</p>
5264
- <p class="format">deleteProperty( &quot;TZOFFSETFROM&quot; )</p>
5265
- <p class="label">Example</p>
5266
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZOFFSETFROM&quot; );</p>
5267
- <h5>Get TZOFFSETFROM</h5>
5268
- Fetch property value.
5269
- <p class="label">Format 1</p>
5270
- <p class="format">getProperty( &quot;TZOFFSETFROM&quot; )</p>
5271
- <p class="comment">output = tzoffsetfrom<span class="ref">1</span></p>
5272
- <p class="label">Format 2</p>
5273
- <p class="format">getProperty( &quot;TZOFFSETFROM&quot;, FALSE , TRUE )</p>
5274
- <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetfrom<span class="ref">1</span>
5275
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5276
- <p class="label">Example</p>
5277
- <p class="example">$tzoffsetfrom = $timezonestandard->getProperty( &quot;TZOFFSETFROM&quot; );</p>
5278
- <h5>Set TZOFFSETFROM</h5>
5279
- Insert property value.
5280
- <p class="label">Format</p>
5281
- <p class="format">setProperty( &quot;tzoffsetfrom&quot;, tzoffsetfrom [, xparam ] )</p>
5282
- <p class="comment">tzoffsetfrom<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
5283
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5284
- <p class="label">Example</p>
5285
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5286
- $vcalendar = new vcalendar( $config );
5287
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5288
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5289
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5290
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
5291
- $standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
5292
- $standard->setProperty( &quot;tzoffsetfrom&quot;, &quot;-0500&quot; );
5293
- .. .</p>
5294
- <br>
5295
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5296
-
5297
-
5298
- <a name="TZOFFSETTO"></a><h3>3.2.44 TZOFFSETTO</h3>
5299
- This property specifies the offset which is in use in this <a href="#VTIMEZONE">TIMEZONE</a> observance.
5300
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
5301
- <h5>Delete TZOFFSETTO</h5>
5302
- Remove TZOFFSETTO from component.
5303
- <p class="label">Format</p>
5304
- <p class="format">deleteProperty( &quot;TZOFFSETTO&quot; )</p>
5305
- <p class="label">Example</p>
5306
- <p class="example">$daylight->deleteProperty( &quot;TZOFFSETTO&quot; );</p>
5307
- <h5>Get TZOFFSETTO</h5>
5308
- Fetch property value.
5309
- <p class="label">Format 1</p>
5310
- <p class="format">getProperty( &quot;TZOFFSETTO&quot; )</p>
5311
- <p class="comment">output = tzoffsetto<span class="ref">1</span></p>
5312
- <p class="label">Format 2</p>
5313
- <p class="format">getProperty( &quot;TZOFFSETTO&quot;, FALSE , TRUE )</p>
5314
- <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetto<span class="ref">1</span>
5315
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5316
- <p class="label">Example</p>
5317
- <p class="example">$tzoffsetto = $timezonestandard->getProperty( &quot;TZOFFSETTO&quot; );</p>
5318
- <h5>Set TZOFFSETTO</h5>
5319
- Insert property value.
5320
- <p class="label">Format</p>
5321
- <p class="format">setProperty( &quot;tzoffsetto&quot;, tzoffsetto [, xparam ] )</p>
5322
- <p class="comment">tzoffsetto<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
5323
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5324
- <p class="label">Example</p>
5325
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5326
- $vcalendar = new vcalendar( $config );
5327
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5328
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5329
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5330
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
5331
- .. .
5332
- $daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
5333
- $daylight->setProperty( &quot;tzoffsetto&quot;, &quot;1345&quot; );
5334
- .. .</p>
5335
- <br>
5336
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5337
-
5338
-
5339
- <a name="TZURL"></a><h3>3.2.45 TZURL</h3>
5340
- The TZURL provides a means for a <a href="#VTIMEZONE">VTIMEZONE</a> component to point to
5341
- a network location that can be used to retrieve an up-to-date version of itself. The property
5342
- is OPTIONAL and MUST NOT occur more than once.
5343
- <h5>Delete TZURL</h5>
5344
- Remove TZURL from component.
5345
- <p class="label">Format</p>
5346
- <p class="format">deleteProperty( &quot;TZURL&quot; )</p>
5347
- <p class="label">Example</p>
5348
- <p class="example">$vtimezone->deleteProperty( &quot;TZURL&quot; );</p>
5349
- <h5>Get TZURL</h5>
5350
- Fetch property value.
5351
- <p class="label">Format 1</p>
5352
- <p class="format">getProperty( &quot;TZURL&quot; )</p>
5353
- <p class="comment">output = tzurl<span class="ref">1</span></p>
5354
- <p class="label">Format 2</p>
5355
- <p class="format">getProperty( &quot;TZURL&quot;, FALSE , TRUE )</p>
5356
- <p class="comment">output = array( &quot;value&quot; =&gt; tzurl<span class="ref">1</span>
5357
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5358
- <p class="label">Example</p>
5359
- <p class="example">$tzurl = $timezonestandard->getProperty( &quot;TZURL&quot; );</p>
5360
- <h5>Set TZURL</h5>
5361
- Insert property value.
5362
- <p class="label">Format</p>
5363
- <p class="format">setProperty( &quot;tzurl&quot;, tzurl [, xparam ] )</p>
5364
- <p class="comment">tzurl<span class="ref">1</span> = Value type URI
5365
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5366
- <p class="label">Example</p>
5367
- <p class="example">$tz = &quot;http://zones.stds_r_us.net/tz/US-Eastern&quot; );
5368
- $config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5369
- $vcalendar = new vcalendar( $config );
5370
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5371
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5372
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101T000000&quot; );
5373
- $vtimezone->setProperty( &quot;tzurl&quot;, $tz );
5374
- .. .
5375
- .. .</p>
5376
- <br>
5377
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5378
-
5379
-
5380
- <a name="UID"></a><h3>3.2.46 UID</h3>
5381
- The persistent, globally <b>U</b>nique <b>ID</b>entifier for the <i>calendar</i> component.
5382
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br>
5383
- However, UID is <b>AUTOMATICALLY</b> generated in iCalcreator and configuration <a href="#Unique_id">unique_id</a>, is used when auto-creating component UID.
5384
- <br>
5385
- <br>
5386
- UID generated format :
5387
- <p class="format">date(&quot;Ymd\THisT&quot;).&quot;-&quot;.[microSec][random].&quot;@&quot;.<a href="#Unique_id">unique_id</a>
5388
- </p>
5389
- microSec = microseconds, 4 pos<br>
5390
- random = 6 characters aA-zZ, 0-9
5391
- <p class="label">Example</p>
5392
- <p class="example">&quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;</p>
5393
- UID may be required when importing iCal files into some calendaring software (MS etc.),
5394
- as well as (<i>calendar</i>) properties <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE",
5395
- <a href="#METHOD">METHOD</a> (value PUBLISH etc.) and the (also automatically created) <a href="#DTSTAMP">DTSTAMP</a> property.
5396
- <br><br>
5397
- The value type for UID is TEXT.
5398
- <h5>Delete UID</h5>
5399
- If UID is remove from a component, UID will automatically be recreated when <i>calendar</i> output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
5400
- <p class="label">Format</p>
5401
- <p class="format">deleteProperty( &quot;UID&quot; )</p>
5402
- <p class="label">Example</p>
5403
- <p class="example">$vevent->deleteProperty( &quot;UID&quot; );</p>
5404
- <h5>Get UID</h5>
5405
- Fetch property value.
5406
- <p class="label">Format 1</p>
5407
- <p class="format">getProperty( &quot;UID&quot; )</p>
5408
- <p class="comment">output = uid<span class="ref">1</span></p>
5409
- <p class="label">Format 2</p>
5410
- <p class="format">getProperty( &quot;UID&quot;, FALSE , TRUE )</p>
5411
- <p class="comment">output = array( &quot;value&quot; =&gt; uid<span class="ref">1</span>
5412
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5413
- <p class="label">Example</p>
5414
- <p class="example">$uid = $vevent->getProperty( &quot;UID&quot; );</p>
5415
- <h5>Set UID</h5>
5416
- Insert property value, overrides any previously set or auto-created UID.<br>
5417
- Do <b>NOT</b> use an integer UID or only a component name in UID (ex. &quot;vevent&quot;), this may cause malfunction in <a href="#setComponent">setComponent</a> with index or UID argument.
5418
- <p class="label">Format</p>
5419
- <p class="format">setProperty( &quot;uid&quot;, uid [, xparam ] )</p>
5420
- <p class="comment">uid<span class="ref">1</span> = Value type TEXT
5421
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5422
- <p class="label">Example</p>
5423
- <p class="example">$vevent->setProperty(&quot;uid&quot;,&quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);</p>
5424
- <br>
5425
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5426
-
5427
-
5428
- <a name="URL"></a><h3>3.2.47 URL</h3>
5429
- This property defines a Uniform Resource Locator (URL) associated with the iCalendar object.
5430
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
5431
- <h5>Delete URL</h5>
5432
- Remove URL from component.
5433
- <p class="label">Format</p>
5434
- <p class="format">deleteProperty( &quot;URL&quot; )</p>
5435
- <p class="label">Example</p>
5436
- <p class="example">$vevent->deleteProperty( &quot;URL&quot; );</p>
5437
- <h5>Get URL</h5>
5438
- Fetch property value.
5439
- <p class="label">Format 1</p>
5440
- <p class="format">getProperty( &quot;URL&quot; )</p>
5441
- <p class="comment">output = url<span class="ref">1</span></p>
5442
- <p class="label">Format 2</p>
5443
- <p class="format">getProperty( &quot;URL&quot;, FALSE , TRUE )</p>
5444
- <p class="comment">output = array &quot;value&quot; =&gt; url<span class="ref">1</span>
5445
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5446
- <p class="label">Example</p>
5447
- <p class="example">$url = $vevent->getProperty( &quot;URL&quot; );</p>
5448
- <h5>Set URL</h5>
5449
- Insert property value.<br>
5450
- <p class="label">Format</p>
5451
- <p class="format">setProperty( &quot;url&quot;, url [, xparam ] )</p>
5452
- <p class="comment">url<span class="ref">1</span> = Value type URI
5453
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] (</p>
5454
- <p class="label">Example</p>
5455
- <p class="example">$vtodo->setProperty( &quot;url&quot;, &quot;http://www.icaldomain.net&quot; );</p>
5456
- <br>
5457
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5458
-
5459
-
5460
- <a name="X-PROPERTY_PROP"></a><h3>3.2.48 X-PROPERTY</h3>
5461
- A component, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a component,
5462
- an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
5463
- <br>
5464
- <h5>Delete X-PROPERTY</h5>
5465
- Remove X-PROPERTY from component.
5466
- <p class="label">Format</p>
5467
- <p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
5468
- <p class="label">Example 1</p>
5469
- <p class="example">$vevent->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
5470
- <p class="label">Example 2</p>
5471
- Deleting all x-properties.
5472
- <p class="example">while( $vevent->deleteProperty())
5473
- continue;</p>
5474
- <h5>Get X-property</h5>
5475
- Fetch property value.
5476
- <p class="label">Format 1</p>
5477
- <p class="format">getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
5478
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5479
- , propertyData<span class="ref">2</span> )</p>
5480
- <p class="label">Format 2</p>
5481
- <p class="format">getProperty()</p>
5482
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5483
- , propertyData<span class="ref">2</span> )</p>
5484
- <p class="label">Format 3</p>
5485
- <p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
5486
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5487
- , array ( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
5488
- , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))</p>
5489
- <p class="label">Format 4</p>
5490
- <p class="format">getProperty( FALSE, propOrderNo )</p>
5491
- <p class="comment">Get propOrderNo X-property</p>
5492
-
5493
- <p class="label">Example 1</p>
5494
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5495
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5496
- $vcalendar = new vcalendar( $config );
5497
- $vcalendar->parse();
5498
- if( FALSE !== ( $d = $vcalendar->getProperty( &quot;X-WR-TIMEZONE&quot; )))
5499
- echo $d[1];
5500
- .. .</p>
5501
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
5502
-
5503
- <p class="label">Example 2</p>
5504
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5505
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5506
- $vcalendar = new vcalendar( $config );
5507
- $vcalendar->parse();
5508
- while( $xprop = $vcalendar->getProperty( )) {
5509
- .. .</p>
5510
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
5511
-
5512
- <p class="label">Example 3</p>
5513
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5514
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5515
- $vcalendar = new vcalendar( $config );
5516
- $vcalendar->parse();
5517
- while( $xprop = $vcalendar->getProperty( &quot;X-ABC-MMSUBJ&quot; )) {
5518
- .. .</p>
5519
- <p class="comment"> // $xprop = array( &quot;X-ABC-MMSUBJ&quot;, propertyData<span class="ref">2</span> )</p>
5520
- <p class="label">Example 4</p>
5521
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5522
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5523
- $vcalendar = new vcalendar( $config );
5524
- $vcalendar->parse();
5525
- while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
5526
- .. .</p>
5527
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>
5528
- // , array( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
5529
- // , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span> )</p>
5530
- <h5>Set X-property</h5>
5531
- Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
5532
- <p class="label">Format</p>
5533
- <p class="format">setProperty( propertyName, propertyData [, params ] )</p>
5534
- <p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
5535
- propertyData<span class="ref">2</span> = Value type TEXT
5536
- params<span class="ref">3</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
5537
- xparam = *[ xparamkey =&gt; xparamvalue ]
5538
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
5539
- <p class="label">Example</p>
5540
- <p class="example">$component->setProperty(&quot;X-ABC-MMSUBJ&quot;,&quot;http://load.noise.org/mysubj.wav&quot;);</p>
5541
- <br>
5542
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5543
-
5544
-
5545
-
5546
- <a NAME="Calendar_component_configuration_functions"></a><h2>3.3 Calendar Component configuration functions</h2>
5547
-
5548
- <a name="Language_PROP"></a><h3>3.3.1 Language</h3>
5549
- Language for specific <i>calendar</i> component as defined in [RFC 1766].<br>
5550
- Language set at component level can be overridden by specific component property parameter.<br>
5551
- A successful &quot;setConfig&quot; returns TRUE.
5552
- <h5>Get language</h5>
5553
- Language for <i>calendar</i> (only if language is set at component level).
5554
- <p class="label">Format</p>
5555
- <p class="format">getConfig( &quot;language&quot; )</p>
5556
- <p class="label">Example</p>
5557
- <p class="example">$lang = $vevent->getConfig( &quot;language&quot; );</p>
5558
- <h5>Set LANGUAGE</h5>
5559
- <p class="label">Format</p>
5560
- <p class="format">setConfig( &quot;language&quot;, string &lt;lang&gt; )</p>
5561
- <p class="label">Example</p>
5562
- <p class="example">$vevent->setConfig( &quot;language&quot;, &quot;en&quot; );</p>
5563
- <br>
5564
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5565
-
5566
- <a name="Calendar_component_object_misc_functions"></a><h2>3.4 Calendar component object misc. functions</h2>
5567
- Calendar component subcomponent functions
5568
-
5569
- <a name="deleteComponent_PROP"></a><h4>3.4.1 deleteComponent</h4>
5570
- Remove subcomponent from component.
5571
- <p class="label">Format</p>
5572
- <p class="format">deleteComponent( int orderNumber )</p>
5573
- <p class="comment">Remove component with order number (1st=1, 2nd=2.. .).</p>
5574
- <p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
5575
- <p class="comment">Remove component with component type (ex. &quot;vevent&quot;)
5576
- and order 1 alt. suborder number.</p>
5577
- <p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
5578
- <p class="comment">Remove component with <a href="#UID">UID</a>.
5579
- N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
5580
- <p class="label">Example 1</p>
5581
- Delete first subcomponent.
5582
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5583
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5584
- $vcalendar = new vcalendar( $config );
5585
- $vcalendar->parse();
5586
- $comp1 = $vcalendar->getComponent();
5587
- $comp1->deleteComponent( 1 );
5588
- .. .</p>
5589
- <p class="label">Example 2</p>
5590
- Delete all subcomponents.
5591
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5592
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5593
- $vcalendar = new vcalendar( $config );
5594
- $vcalendar->parse();
5595
- $comp1 = $vcalendar->getComponent();
5596
- while( $comp1->deleteComponent( &quot;valarm&quot; )
5597
- continue;
5598
- .. .</p>
5599
- <br>
5600
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5601
-
5602
- <a name="getComponent_PROP"></a><h4>3.4.2 getComponent</h4>
5603
- Get subComponent from component.
5604
- <p class="label">Format 1</p>
5605
- <p class="format">getComponent()</p>
5606
- <p class="comment">Get next component until end-of-components.</p>
5607
- <p class="label">Format 2</p>
5608
- <p class="format">getComponent( int orderNumber )</p>
5609
- <p class="comment">Get component with order number (1st=1, 2nd=2.. .).</p>
5610
- <p class="label">Format 3</p>
5611
- <p class="format">getComponent( string componentType [, int componentSuborderNumber])</p>
5612
- <p class="comment">Get (next) component with component type (until end-of-components)
5613
- alt. component with component type and suborder number (1st=1, 2nd=2..).</p>
5614
- <p class="label">Format 4</p>
5615
- <p class="format">getComponent( string <a href="#UID">UID</a> )</p>
5616
- <p class="comment">Get component with <a href="#UID">UID</a>.
5617
- N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
5618
- <p class="label">Example</p>
5619
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
5620
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5621
- $vcalendar = new vcalendar( $config );
5622
- $vcalendar->parse();
5623
- $comp1 = $vcalendar->getComponent());
5624
- while( $subComp = $comp1->getComponent()) {
5625
- .. .</p>
5626
- <br>
5627
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5628
-
5629
- <a name="newComponent_PROP"></a><h4>3.4.3 newComponent</h4>
5630
- Create subcomponent (<a href="#VALARM">ALARN</a> / <a href="#VTIMEZONE">VTIMEZONE STANDARD</a> / <a href="#VTIMEZONE">VTIMEZONE DAYLIGHT</a>)
5631
- using a component factory-method, returning a reference to the new component.
5632
- <p class="label">Format</p>
5633
- <p class="format">newComponent( string componentType )</p>
5634
- <p class="label">Example 1</p>
5635
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
5636
- $vcalendar = new vcalendar( $config );
5637
- ...
5638
- $vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
5639
- $vevent->setProperty( &quot;dtstart&quot; // <span class="ref">add some <a href="#VEVENT">EVENT</a> properties</span>
5640
- , 2006, 12, 24, 19, 30, 00 );
5641
- $vevent->setProperty(.. .
5642
- ...
5643
- $valarm = &amp; $vevent->newComponent( &quot;valarm&quot; );
5644
- $valarm->setProperty( &quot;trigger&quot;, .. .
5645
- ...
5646
- </p>
5647
- <p class="label">Example 2</p>
5648
- <p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
5649
- $vcalendar = new vcalendar( $config );
5650
- ...
5651
- $vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
5652
- $vtimezone->setProperty(.. .
5653
- ...
5654
- $standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
5655
- $standard->setProperty(.. .
5656
- ...
5657
- $daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
5658
- $daylight->setProperty(.. .
5659
- ...
5660
- </p>
5661
-
5662
- <br>
5663
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5664
-
5665
- <a name="setComponent_PROP"></a><h4>3.4.4 setComponent</h4>
5666
- Add <i>calendar</i> component to <i>calendar</i> or replace/update component in <i>calendar</i>.
5667
- <p class="label">Format 1</p>
5668
- <p class="format">setComponent( component )
5669
- addSubComponent( component ) // <span class="ref">alias</span></p>
5670
- <p class="comment">Insert last in component chain.</p>
5671
- <p class="label">Format 2</p>
5672
- <p class="format">setComponent( component, int orderNumber )</p>
5673
- <p class="comment">Replace component with order number(1st=1, 2nd=2.. .).
5674
- If orderNumber is not found, component is inserted last in chain.</p>
5675
- <p class="label">Format 3</p>
5676
- <p class="format">setComponent( component, string componentType [,component suborder number])</p>
5677
- <p class="comment">Replace component with component type and component order number.
5678
- if orderNumber is not found, component is inserted last in chain. </p>
5679
- <p class="label">Example</p>
5680
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5681
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
5682
- .. .
5683
- $vevent = new vevent();
5684
- $vevent->setProperty( &quot;dtstart&quot; // <span class="ref">add some <a href="#VEVENT">EVENT</a> properties</span>
5685
- , 2006, 12, 24, 19, 30, 00 );
5686
- $vevent->setProperty(.. .
5687
- .. .
5688
- $valarm = new valarm();
5689
- $valarm->setProperty( &quot;trigger&quot;, .. .
5690
- .. .
5691
- $vevent->setComponent( $valarm );
5692
- $vcalendar->setComponent( $vevent );
5693
- .. .
5694
- </p>
5695
- <br>
5696
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5697
-
5698
- <a name="iCalUtilityFunctions"></a><h1>4. iCalUtilityFunctions</h1>
5699
- iCalUtilityFunctions.class.php contains static functions used by iCalcreator,
5700
- also usable outside the iCalcreator class. Please examine the class file to explore other functions.
5701
- <br>
5702
- <br>
5703
- <a name="createTimezone"></a><h4>4.1 createTimezone</h4>
5704
- The function, applied on a iCalcrator instance and using a <i>PHP</i> valid timezone (as arguments)
5705
- creates simple vtimezone, standard and (opt.) daylight components, based on <i>PHP</i> DateTimeZone class and
5706
- the most recent transition dates for the timezone.<br>
5707
- (<i>PHP</i> 5 >= 5.2.0)
5708
- <br>
5709
- <br>
5710
- Note, only when timezone NOT is UTC.
5711
- For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
5712
- <br>
5713
- <br>
5714
- FALSE is returned if not using a <i>PHP</i> valid timezone.
5715
- <p class="label">Format</p>
5716
- <p class="format">createTimezone( calendar, timezone [, xprops ] )</p>
5717
- <p class="comment">calendar = iCalcreator instance
5718
- timezone = an <i>PHP</i> (DateTimeZone) valid timezone
5719
- xprops = array( *[ x-propName =&gt; value ] ), timezone non-standard properties
5720
- </p>
5721
- <p class="label">Example</p>
5722
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
5723
- $vcalendar = new vcalendar( $config );
5724
- .. .
5725
- $PHPtz = &quot;Europe/Stockholm&quot;;
5726
- $xprops = array( &quot;X-LIC-LOCATION&quot; => $PHPtz );
5727
- iCalUtilityFunctions::createTimezone( $vcalendar, $PHPtz, $xprops );
5728
- .. .
5729
- </p>
5730
- Output (when using createCalendar or returnCalendar functions):<br>
5731
- <span class="ref">
5732
- BEGIN:VTIMEZONE<br>
5733
- TZID:Europe/Stockholm<br>
5734
- X-LIC-LOCATION:Europe/Stockholm<br>
5735
- BEGIN:STANDARD<br>
5736
- DTSTART:20101031T020000<br>
5737
- TZOFFSETFROM:+0200<br>
5738
- TZOFFSETTO:+0100<br>
5739
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10<br>
5740
- TZNAME:CET<br>
5741
- END:STANDARD<br>
5742
- BEGIN:DAYLIGHT<br>
5743
- DTSTART:20100328T030000<br>
5744
- TZOFFSETFROM:+0100<br>
5745
- TZOFFSETTO:+0200<br>
5746
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3<br>
5747
- TZNAME:CEST<br>
5748
- END:DAYLIGHT<br>
5749
- END:VTIMEZONE
5750
- </span>
5751
- <br>
5752
- <br>
5753
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalUtilityFunctions">[up]</a>
5754
-
5755
- <a name="transformDateTime"></a><h4>4.2 transformDateTime</h4>
5756
- Transforms a datetime from a time zone to another. (Requires <i>PHP</i> >= 5.2.0 and <i>PHP</i> DateTimeZone acceptable time zones)
5757
- <br>
5758
- <br>
5759
- FALSE is returned if not using a &quot;strtotime&quot; acceptable datetime or unacceptable <i>PHP</i> time zones.
5760
- If TRUE, the dateTime argument (below) is converted to the new time zone, otherwise unaltered.
5761
- <p class="label">Format</p>
5762
- <p class="format">transformDateTime( dateTime, timezoneFrom, timezoneTo [, format ] )</p>
5763
- <p class="comment">dateTime = string datetime // <span class="ref">acceptable by strtotime function
5764
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
5765
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
5766
- timezoneFrom = string, a <i>PHP</i> (DateTimeZone) valid time zone
5767
- timezoneTo = string, a <i>PHP</i> (DateTimeZone) valid time zone, default &quot;UTC&quot;
5768
- format = string, format accepted by date(), default &quot;Ymd\THis&quot;
5769
- </p>
5770
- <p class="label">Example</p>
5771
- <p class="example">
5772
- .. .
5773
- $d = date( &quot;Y-m-d H:i:s&quot; );
5774
- $tzFr = &quot;Europe/Stockholm&quot;;
5775
- if( FALSE !== iCalUtilityFunctions::transformDateTime( $d, $tzFr ))
5776
- $event->setProperty( &quot;dtstart&quot;, $d.&quot;Z&quot; );
5777
- else
5778
- $event->setProperty( &quot;dtstart&quot;, $d, array( &quot;TZID&quot; => $tzFr ));
5779
- .. .<br>
5780
- </p>
5781
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalUtilityFunctions">[up]</a>
5782
-
5783
- <a name="Copyright_and_Licence"></a><h1>5. COPYRIGHT AND LICENSE</h1>
5784
- <h2>Copyright</h2>
5785
- iCalcreator class <br>
5786
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br>
5787
- <a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br>
5788
- ical@kigkonsult.se<br>
5789
-
5790
- <h2>License</h2>
5791
-
5792
- This library is free software; you can redistribute it and/or
5793
- modify it under the terms of the GNU Lesser General Public
5794
- License as published by the Free Software Foundation; either
5795
- version 2.1 of the License, or (at your option) any later version.
5796
- <br><br>
5797
- This library is distributed in the hope that it will be useful,
5798
- but WITHOUT ANY WARRANTY; without even the implied warranty of
5799
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5800
- Lesser General Public License for more details.
5801
- <br><br>
5802
- You should have received a copy of the GNU Lesser General Public
5803
- License along with this library; if not, write to the Free Software
5804
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5805
- or download it <a href="http://kigkonsult.se/downloads/dl.php?f=LGPL" target="_blank">here</a>.
5806
- <br>
5807
- <br>
5808
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
5809
- </body>
5810
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10/releaseNotes-2.10.txt DELETED
@@ -1,82 +0,0 @@
1
- 2.8.1 ######################
2
- calendar property VERSION always first
3
-
4
- 2.8.2 ###################### / thanks Alvin and Jorge L P
5
- function parse on calendar and component level
6
- updated management of line folding
7
-
8
- 2.8.3 ######################
9
- updated using.html, datetime parameter tz
10
-
11
- 2.8.4 ######################
12
- updated function sort
13
- allow sorting on Attendee, Categories, DTSTAMP, Location, Organizer, Priority, Resources, Status, Summary
14
-
15
- 2.8.5 ######################
16
- function SelectComponents
17
- allow select of calendar component properties,
18
- function argument array( <propertyName> => <propertyValue>)
19
- propertyName = 'Attendee'/'Categories'/'Location'/'Organizer'/'Priority'/'Resources'/'Status'/'Summary'/'UID'
20
- propertyValue = (string) propertyValue / (array) ( propertyValue *[, propertyValue] )
21
-
22
- 2.8.6 ######################
23
- function getProperty on calendar level
24
- new arguments: 'DTSTART', 'Attendee', 'Categories', 'Location', 'Organizer', 'Priority', 'Resources', 'Status', 'Summary', 'UID' or 'Recurrence-id-uid'
25
- Returns unique property values+counts from all calendar components,
26
- output format: array(*[<uniquePropertyValue> => occurr_cnt])
27
-
28
- 2.8.7 ######################
29
- bug in function iCalUtilityFunctions::_duration2date fixed
30
-
31
- 2.8.8 ######################
32
- updated functions getProperty and deleteProperty
33
- management of properties with multiple ocurrence
34
-
35
- 2.8.9 ###################### / thanks Jorge L P
36
- bug in function SelectComponents
37
- regarding X-CURRENT-*-values
38
-
39
- 2.8.10 ######################
40
- bug in function setFreebusy
41
- if property is empty.. .
42
-
43
- 2.9.1 ######################
44
- consecutive calls with UID as argument,
45
- function (calendar) getComponent
46
- new argument, array( *[propertyName => propertyValue] )
47
-
48
- 2.9.2 ######################
49
- Simple create of timezone (including standard/daylight) component
50
- New function in iCalUtilityFunctions:createTimezone (, offsetSec2His)
51
-
52
- 2.9.3 ###################### / thanks Jorge L P
53
- Management of properties with numeric (integer) content,
54
- PERCENT-COMPLETE, PRIORITY, REPEAT, SEQUENCE, X-PROP
55
- uppdate of get- and setfunctions
56
-
57
- 2.9.4 ###################### / thanks Jorge L P
58
- update of function parse on calendar level
59
-
60
- 2.9.5 ######################
61
- update of function parse on calendar and component level level
62
- set config when creating new component
63
-
64
- 2.9.6 ######################
65
- auto completion of (default) timezone when setting DTEND, DTSTART, DUE, RECURRENCE-ID
66
- update of setfunctions for DTEND, DTSTART, DUE, RECURRENCE-ID
67
- update of getConfig and all config setting on calendar and component level
68
-
69
- 2.9.7 ###################### / thanks Dan
70
- bug in function selectComponents - sourceforge ID: 3307044
71
-
72
- 2.9.8 ###################### / thanks Jorge L P
73
- bug in function createAttendee
74
-
75
- 2.9.9 ###################### / thanks Jorge L P
76
- bug in iCalUtilityFunctions:_format_duration, TRIGGER with no duration
77
-
78
- 2.9.10 ###################### / thanks Andrew
79
- Bug in iCalUtilityFunctions::_recur2date (, _setRexrule), BYSETPOS
80
-
81
- 2.9.12 ###################### / thanks Joc
82
- function returnCalendar, new arguments for utf8 encoding and gzencode
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10/summary.html DELETED
@@ -1,283 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
2
- "http://www.w3.org/TR/html4/frameset.dtd">
3
- <html>
4
- <head>
5
- <title>iCalcreator 2.10 summary</title>
6
- <meta name="author" content="Kjell-Inge Gustafsson - kigkonsult" />
7
- <meta name="copyright" content="2007-2011 Kjell-Inge Gustafsson - kigkonsult" />
8
- <meta name="keywords" content="ical, calendar, calender, xcal, xml, icalender, rfc2445, vcalender, php, create" />
9
- <meta name="description" content="iCalcreator" />
10
- <style type="text/css">
11
- body {
12
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
13
- FONT-SIZE : small;
14
- MARGIN : 10px;
15
- WIDTH : 800px;
16
- }
17
- h1 {
18
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
19
- FONT-SIZE : large;
20
- }
21
- h2 {
22
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
23
- FONT-SIZE : large;
24
- }
25
- h4 {
26
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
27
- FONT-SIZE : small;
28
- FONT-WEIGHT : bold;
29
- }
30
- .code {
31
- FONT-FAMILY : monospace;
32
- FONT-SIZE : medium;
33
- WHITE-SPACE : pre;
34
- }
35
- .comment {
36
- FONT-FAMILY : arial;
37
- FONT-SIZE : small;
38
- FONT-STYLE : italic;
39
- }
40
- </style>
41
- </head>
42
- <body>
43
- <h1>iCalcreator 2.10</h1>
44
- iCalcreator class v2.10<br />
45
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br />
46
- <a href="http://www.kigkonsult.se/iCalcreator/index.php" title="www.kigkonsult.se/iCalcreator" target="_blank">www.kigkonsult.se/iCalcreator</a><br />
47
- ical@kigkonsult.se<br />
48
- <br />
49
- iCalcreator is a PHP class managing iCal formatted files for non-calendar
50
- systems like CMS, project management systems and other applications able
51
- to process calendar information like agendas, tasks, reports, totos,
52
- journaling data and for communication with calendar systems and applications.
53
- <br /><br />
54
- This is a <b>short summary</b> how to use iCalcreator; create, parse, edit, select and output functionality.
55
- <br /><br />
56
- iCalcreator is built of a class file with support of a function class file and are calendar component property oriented.
57
- Development environment is PHP version 5.x but coding is done to meet 4.x backward compatibility and may work.
58
- <h4>iCal</h4>
59
- A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>. If You are not familiar with iCal, read this first!<br />
60
- Knowledge of calendar protocol rfc2445/rfc2446 is to recommend;<br />
61
- <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">rfc2445</a>
62
- - Internet Calendaring and Scheduling Core Object Specification (iCalendar)<br />
63
- <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2446" title="RFC2446" target="_blank">rfc2446</a>
64
- - iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries <br />
65
- All functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly!<br />
66
- <h4>Downloads</h4>
67
- Download
68
- <a href="http://www.kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator complete manual" target="_blank"><b>complete manual</b></a>
69
- and
70
- <a href="http://www.kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator coding samples" target="_blank"><b>coding samples</b></a>.
71
- from <a href="http://www.kigkonsult.se/iCalcreator/index.php" title="iCalcreator" target="_blank">www.kigkonsult.se/iCalcreator</a>.
72
- <h4>INSTALL</h4>
73
- Unpack to any folder<br />
74
- - add this folder to your include-path<br />
75
- - or unpack to your application-(include)-folder<br />
76
- Add &quot;require_once [folder/]iCalcreator.class.php;&quot; to your php-script.
77
- <br />
78
- <br />
79
- If using php version 5.1 or higher, the default timezone need to be set/altered, now &quot;Europe/Stockholm&quot;,
80
- line 52 in the iCalcreator.class.php file.
81
- <br />
82
- When creating a new calendar/component instance, review config settings.
83
-
84
- <h2>CREATE</h2>
85
-
86
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
87
- $config = array( &quot;unique_id&quot; =&gt; &quot;icaldomain.com&quot; ); // <span class="comment">set Your unique id</span>
88
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
89
-
90
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
91
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
92
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
93
- $tz = &quot;Europe/Stockholm&quot;;
94
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, $tz ); // <span class="comment">required of some calendar software</span>
95
- .. .
96
- iCalUtilityFunctions::createTimezone( $v, $tz ) // <span class="comment">creates (very simple) timezone component(-s)</span>
97
- .. .
98
- $vevent = & $v->newComponent( &quot;vevent&quot; ); // <span class="comment">create an event calendar component</span>
99
- $vevent->setProperty( &quot;dtstart&quot;, array( &quot;year&quot;=&gt;2007, &quot;month&quot;=&gt;4, &quot;day&quot;=&gt;1, &quot;hour&quot;=&gt;19, &quot;min&quot;=&gt;0, &quot;sec&quot;=&gt;0 ));
100
- $vevent->setProperty( &quot;dtend&quot;, array( &quot;year&quot;=&gt;2007, &quot;month&quot;=&gt;4, &quot;day&quot;=&gt;1, &quot;hour&quot;=&gt;22, &quot;min&quot;=&gt;30, &quot;sec&quot;=&gt;0 ));
101
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Placa&quot; ); // <span class="comment">property name - case independent</span>
102
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
103
- $vevent->setProperty( &quot;description&quot;, &quot;This is a description&quot; );
104
- $vevent->setProperty( &quot;comment&quot;, &quot;This is a comment&quot; );
105
- $vevent->setProperty( &quot;attendee&quot;, &quot;attendee1@icaldomain.net&quot; );
106
- .. .
107
- $vevent = & $v->newComponent( &quot;vevent&quot; ); // <span class="comment">create next event calendar component</span>
108
- $vevent->setProperty( &quot;dtstart&quot;, &quot;20070401&quot;, array(&quot;VALUE&quot; =&gt; &quot;DATE&quot;));// <span class="comment">alt. date format, now for an all-day event</span>
109
- $vevent->setProperty( &quot;organizer&quot; , &quot;boss@icaldomain.com&quot; );
110
- $vevent->setProperty( &quot;summary&quot;, &quot;ALL-DAY event&quot; );
111
- $vevent->setProperty( &quot;description&quot;, &quot;This is a description for an all-day event&quot; );
112
- $vevent->setProperty( &quot;resources&quot;, &quot;COMPUTER PROJECTOR&quot; );
113
- $vevent->setProperty( &quot;rrule&quot;, array( &quot;FREQ&quot; =&gt; &quot;WEEKLY&quot;, &quot;count&quot; =&gt; 4));// <span class="comment">weekly, four occasions</span>
114
- $vevent->parse( &quot;LOCATION:1CP Conference Room 4350&quot; ); // <span class="comment">supporting parse of strict rfc2445 formatted text</span>
115
- .. .
116
- .. .// <span class="comment">all calendar components are described in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">rfc2445</a></span>
117
- .. .// <span class="comment">a complete iCalcreator function list (ex. setProperty) in <a href="http://www.kigkonsult.se/downloads/index.php#iCalcreator" title="iCalcreator complete manual" target="_blank">iCalcreator manual</a></span>
118
- .. .
119
- $v->returnCalendar(); // <span class="comment">redirect calendar file to browser</span>
120
- </p>
121
- <h2>PARSE</h2>
122
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
123
- $config = array( &quot;unique_id&quot; =&gt; &quot;icaldomain.com&quot; ); // <span class="comment">set Your unique id, required if any component UID is missing</span>
124
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
125
-
126
- /* start parse of local file */
127
- $config = array( &quot;directory&quot; =&gt; &quot;calendar&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
128
- $v->setConfig( $config ); // <span class="comment">set directory and file name</span>
129
- $v->parse();
130
-
131
- /* start parse of remote file */
132
- $v->setConfig( &quot;url&quot;, &quot;http://www.aDomain.net/file.ics&quot; ); // <span class="comment">iCalcreator also support parse from or write to remote files</span>
133
- $v->parse();
134
-
135
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
136
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
137
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
138
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
139
-
140
- .. .
141
- $v->sort(); // <span class="comment">ensure start date order</span>
142
- .. .
143
- </p>
144
- <h2>EDIT</h2>
145
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
146
- $config = array( &quot;unique_id&quot; =&gt; &quot;icaldomain.com&quot;, &quot;directory&quot; =&gt; &quot;calendar&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
147
- // <span class="comment">set Your unique id, import directory and file name</span>
148
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
149
-
150
- $v->parse();
151
-
152
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
153
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
154
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
155
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
156
-
157
- while( $vevent = $v->getComponent( &quot;vevent&quot; )) { // <span class="comment">read events, one by one</span>
158
- $uid = $vevent->getProperty( &quot;uid&quot; ); // <span class="comment">uid required, one occurence (unique id/key for component)</span>
159
- .. .
160
- $dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="comment">dtstart required, one occurence</span>
161
- .. .
162
- if( $description = $vevent->getProperty( &quot;description&quot;, 1 )) { // <span class="comment">description optional, first occurence</span>
163
- .. . // <span class="comment">edit the description</span>
164
- $vevent->setProperty( &quot;description&quot;, $description, FALSE, 1 ); // <span class="comment">update/replace the description</span>
165
- }
166
- while( $comment = $vevent->getProperty( &quot;comment&quot; )) { // <span class="comment">comment optional, may occur more than once </span>
167
- .. . // <span class="comment">manage comments</span>
168
- }
169
- .. .
170
- while( $vevent->deleteProperty( &quot;attendee&quot; ))
171
- continue; // <span class="comment">remove all ATTENDEE properties .. .</span>
172
- .. .
173
- $v->setComponent ( $vevent, $uid ); // <span class="comment">update/replace event in calendar with <b>uid</b> as key </span>
174
- }
175
- .. .
176
- .. .// <span class="comment">a complete iCalcreator function list (ex. getProperty, deleteProperty) in <a href="http://www.kigkonsult.se/downloads/index.php" title="iCalcreator complete manual" target="_blank">iCalcreator manual</a></span>
177
- .. .
178
- </p>
179
- <h2>SELECT</h2>
180
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
181
- $config = array( &quot;unique_id&quot; =&gt; &quot;icaldomain.com&quot; ); // <span class="comment">set Your unique id</span>
182
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
183
-
184
- $v->setConfig( &quot;url&quot;, &quot;http://www.aDomain.net/file.ics&quot; ); // <span class="comment">iCalcreator also support remote files</span>
185
- $v->parse();
186
- $v->sort(); // <span class="comment">ensure start date order</span>
187
-
188
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
189
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
190
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
191
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
192
-
193
- $eventArray = $v->selectComponents(); // <span class="comment">select components occuring <b>today</b></span>
194
- // <span class="comment">(including components with recurrence pattern)</span>
195
- foreach( $eventArray as $year =&gt; $yearArray) {
196
- foreach( $yearArray as $month =&gt; $monthArray ) {
197
- foreach( $monthArray as $day =&gt; $dailyEventsArray ) {
198
- foreach( $dailyEventsArray as $vevent ) {
199
- $currddate = $event->getProperty( &quot;x-current-dtstart&quot; );
200
- // <span class="comment">if member of a recurrence set (2nd occurence etc)</span>
201
- // <span class="comment">returns array( &quot;x-current-dtstart&quot;</span>
202
- // <span class="comment"> , &lt;(string) date(&quot;Y-m-d [H:i:s][timezone/UTC offset]&quot;)&gt;)</span>
203
- $dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="comment">dtstart required, one occurence, (orig. start date)</span>
204
- $summary = $vevent->getProperty( &quot;summary&quot; );
205
- $description = $vevent->getProperty( &quot;description&quot; );
206
- .. .
207
- .. .
208
- }
209
- }
210
- }
211
- }
212
-
213
- $valueOcurr = $v->getProperty( &quot;CATEGORIES&quot; ); // <span class="comment">fetch specific property (unique) values and number of ocurrencies</span>
214
- // <span class="comment">ATTENDEE, CATEGORIES, DTSTART, LOCATION, ORGANIZER, PRIORITY, RESOURCES, STATUS, SUMMARY, UID</span>
215
- foreach( $valueOcurr as $uniqueValue =&gt; $ocurr ) {
216
- .. .
217
- }
218
-
219
- $selectSpec = array( &quot;CATEGORIES&quot; =&gt; &quot;course1&quot; );
220
- $specComps = $v->selectComponents( $selectSpec ); // <span class="comment">selects components based on specific property value(-s)</span>
221
- // <span class="comment">ATTENDEE, CATEGORIES, LOCATION, ORGANIZER, PRIORITY, RESOURCES, STATUS, SUMMARY, UID</span>
222
- foreach( $specComps as $comp ) {
223
- .. .
224
- }
225
- </p>
226
- <h2>OUTPUT</h2>
227
- <p class="code">require_once( &quot;iCalcreator.class.php&quot; );
228
- $config = array( &quot;unique_id&quot; =&gt; &quot;icaldomain.com&quot; ); // <span class="comment">set Your unique id</span>
229
- $v = new vcalendar( $config ); // <span class="comment">create a new calendar instance</span>
230
-
231
- $v->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; ); // <span class="comment">required of some calendar software</span>
232
- $v->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; ); // <span class="comment">required of some calendar software</span>
233
- $v->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; ); // <span class="comment">required of some calendar software</span>
234
- $v->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; ); // <span class="comment">required of some calendar software</span>
235
- .. .
236
- .. .// <span class="comment">parse calendar file(s) and/or edit/create calendar components.. .</span>
237
- .. .
238
- </p>
239
- <h4> // opt 1</h4>
240
- <p class="code">.. .
241
- $v->returnCalendar(); // <span class="comment">redirect calendar file to browser</span>
242
- </p>
243
- <h4> // opt 2</h4>
244
- <p class="code">.. .
245
- $config = array( &quot;directory&quot; =&gt; &quot;depot&quot;, &quot;filename&quot; =&gt; &quot;calendar.ics&quot; );
246
- $v->setConfig( $config ); // <span class="comment">set output directory and file name</span>
247
- $v->saveCalendar(); // <span class="comment">save calendar to (local) file</span>
248
- </p>
249
- <h4> // opt 3</h4>
250
- <p class="code">.. .
251
- $config = array( &quot;url&quot; =&gt; &quot;http://www.aDomain.net/file.ics&quot; );
252
- $v->setConfig( $config ); // <span class="comment">set output url</span>
253
- $v->saveCalendar(); // <span class="comment">save calendar to remote url</span>
254
- </p>
255
-
256
- <h2>COPYRIGHT AND LICENSE</h2>
257
-
258
- <h4>Copyright</h4>
259
- iCalcreator class<br />
260
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br />
261
- <a href="http://www.kigkonsult.se/iCalcreator/index.php" title="www.kigkonsult.se/iCalcreator" target="_blank">www.kigkonsult.se/iCalcreator</a><br />
262
- ical@kigkonsult.se<br />
263
-
264
- <h4>License</h4>
265
-
266
- This library is free software; you can redistribute it and/or
267
- modify it under the terms of the GNU Lesser General Public
268
- License as published by the Free Software Foundation; either
269
- version 2.1 of the License, or (at your option) any later version.
270
- <br /><br />
271
- This library is distributed in the hope that it will be useful,
272
- but WITHOUT ANY WARRANTY; without even the implied warranty of
273
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
274
- Lesser General Public License for more details.
275
- <br /><br />
276
- You should have received a copy of the GNU Lesser General Public
277
- License along with this library; if not, write to the Free Software
278
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
279
- or download it <a href="http://www.kigkonsult.se/downloads/dl.php?f=LGPL" target="_blank">here</a>.
280
- <br />
281
- <br />
282
- </body>
283
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/iCalcreator-2.10/using.html DELETED
@@ -1,5683 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
2
- "http://www.w3.org/TR/html4/frameset.dtd">
3
- <html>
4
- <head>
5
- <title>iCalcreator 2.10 manual</title>
6
- <meta name="author" content="Kjell-Inge Gustafsson - kigkonsult" />
7
- <meta name="copyright" content="2007-2011 Kjell-Inge Gustafsson - kigkonsult" />
8
- <meta name="keywords" content="ical, calendar, calender, xcal, xml, icalender, rfc2445, vcalender, php, create" />
9
- <meta name="description" content="iCalcreator" />
10
- <style type="text/css">
11
- * {
12
- BACKGROUND-COLOR: white;
13
- COLOR : black;
14
- }
15
- a {
16
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
17
- FONT-SIZE : small;
18
- }
19
- a.ref {
20
- background-color: transparent;
21
- FONT-FAMILY : monospace, arial;
22
- FONT-SIZE : small;
23
- FONT-STYLE : normal;
24
- TEXT-DECORATION : none;
25
- }
26
- body {
27
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
28
- FONT-SIZE : small;
29
- MARGIN-LEFT : 10px;
30
- WIDTH : 600px;
31
- }
32
- h1 {
33
- BACKGROUND-COLOR: silver;
34
- BORDER : thin solid black;
35
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
36
- FONT-SIZE : x-large;
37
- FONT-WEIGHT : bold;
38
- DISPLAY : block;
39
- }
40
- h2 {
41
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
42
- FONT-SIZE : large;
43
- }
44
- h3 {
45
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
46
- FONT-SIZE : medium;
47
- }
48
- h4 {
49
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
50
- FONT-SIZE : small;
51
- FONT-WEIGHT : bold;
52
- }
53
- h5 {
54
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
55
- FONT-SIZE : small;
56
- FONT-WEIGHT : normal;
57
- TEXT-DECORATION : underline;
58
- }
59
- p {
60
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
61
- FONT-SIZE : small;
62
- }
63
- .bb {
64
- BORDER-BOTTOM : gray dotted thin;
65
- }
66
- .blb {
67
- BORDER-LEFT : gray dotted thin;
68
- BORDER-BOTTOM : gray dotted thin;
69
- TEXT-ALIGN : center;
70
- }
71
- .bl {
72
- BORDER-LEFT : gray dotted thin;
73
- }
74
- .center {
75
- TEXT-ALIGN : center;
76
- }
77
- .comment {
78
- background-color: transparent;
79
- FONT-FAMILY : monospace;
80
- FONT-SIZE : medium;
81
- FONT-STYLE : italic;
82
- FONT-WEIGHT : 300;
83
- xLETTER-SPACING : 0.1em;
84
- WHITE-SPACE : pre;
85
- }
86
- .example {
87
- background-color: #DCDCDC;
88
- FONT-FAMILY : Courier, "Courier New";
89
- FONT-SIZE : small;
90
- FONT-WEIGHT : 500;
91
- LINE-HEIGHT : 1.2em;
92
- WHITE-SPACE : pre;
93
- }
94
- .format {
95
- BORDER : gray dotted thin;
96
- FONT-FAMILY : Courier, "Courier New";
97
- FONT-SIZE : small;
98
- FONT-WEIGHT : 500;
99
- LINE-HEIGHT : 1.5em;
100
- WHITE-SPACE : pre;
101
- }
102
- .header {
103
- BACKGROUND-COLOR: silver;
104
- BORDER : thin solid black;
105
- FONT-FAMILY : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
106
- FONT-SIZE : xx-large;
107
- WIDTH : 600px;
108
- }
109
- .label {
110
- FONT-FAMILY : arial;
111
- FONT-SIZE : small;
112
- FONT-WEIGHT : bold;
113
- LETTER-SPACING : 0.1em;
114
- }
115
- .quotes {
116
- background-color: transparent;
117
- FONT-FAMILY : arial;
118
- FONT-SIZE : small;
119
- FONT-STYLE : italic;
120
- FONT-WEIGHT : 300;
121
- LETTER-SPACING : 0.1em;
122
- WHITE-SPACE : pre;
123
- }
124
- .ref {
125
- BACKGROUND-COLOR: transparent;
126
- FONT-FAMILY : monospace, arial;
127
- FONT-SIZE : x-small;
128
- xFONT-STYLE : italic;
129
- xFONT-WEIGHT : 600;
130
- VERTICAL-ALIGN : top;
131
- LETTER-SPACING : 0.2em;
132
- }
133
- .top {
134
- VERTICAL-ALIGN : top;
135
- }
136
- </style>
137
- </head>
138
- <body>
139
- <a name="top"></a>
140
- <p class="header">iCalcreator 2.10</p>
141
- iCalcreator class v2.10<br />
142
- copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br />
143
- <a href="http://www.kigkonsult.se/iCalcreator/index.php" title="www.kigkonsult.Se/iCalcreator" target="_blank">www.kigkonsult.Se/iCalcreator</a><br />
144
- ical@kigkonsult.se<br />
145
-
146
- <h2>Description:</h2>
147
- iCalcreator is a PHP implementation of RFC2445/RFC2446 to manage iCal/xCal formatted files.
148
- <br />
149
-
150
- <a name="INTRO"></a><h1>1. INTRO</h1>
151
- <p>
152
- iCalcreator is a PHP class managing iCal formatted files for non-calendar
153
- systems like CMS, project management systems and other applications able
154
- to process calendar information like agendas, tasks, reports, todos,
155
- journalling data and for communication with calendar systems and applications.
156
- </p>
157
- <p>
158
- iCalcreator features create, parse, edit and select calendar and calendar components.
159
- </p>
160
- <p>
161
- iCalcreator is built of a class file with support of a function class file and are calendar
162
- component property oriented. Development environment is PHP version 5.x but coding is done
163
- to meet 4.x backward compatibility and may work.
164
- </p>
165
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
166
-
167
- <a name="iCal"></a><h2>1.1 Ical</h2>
168
-
169
- The iCalendar format, as described in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format">rfc2445</a>
170
- (and <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format">rfc2446</a>)
171
- <p class="quotes">allows for the capture and exchange of information normally stored within a<br />calendaring and scheduling application</p>
172
- and <p class="quotes">is an exchange format between applications or systems.</p>
173
-
174
- <p>
175
- A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia">Wikipedia</a>. If You are not familiar with iCal, read this first!<br />
176
- Knowledge of calendar protocol rfc2445/rfc2446 is to recommend.
177
- </p>
178
- <p>
179
- <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format">rfc2445</a>
180
- - Internet Calendaring and Scheduling Core Object Specification (iCalendar),
181
- <br />
182
- download <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format">here</a>
183
- or examine <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="view online" target="_blank">online</a>.
184
- </p>
185
- <p>
186
- <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format">rfc2446</a>
187
- - iCalendar Transport-Independent Interoperability Protocol (iTIP) Scheduling Events, BusyTime, To-dos and Journal Entries,
188
- download <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format">here</a>.
189
- </p>
190
- <p>
191
- All iCalcreator functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly!
192
- xCal (iCal xml) output format is supported but still experimental.
193
- </p>
194
- <br />
195
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
196
-
197
- <a name="This_manual"></a><h2>1.2 This manual</h2>
198
- This style is used for text.
199
- <p class="format">This style is used for formats.</p>
200
- <p class="example">This style is used for PHP coding examples.
201
- <span class="comment"> // this style is used for coding comments.</span></p>
202
- <p class="comment">This style is used for content details.</p>
203
- <p class="quotes">This style is used for RFC2445 quotes.</p>
204
- <p>
205
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
206
-
207
- <a name="Versioning"></a><h2>1.3 Versioning</h2>
208
-
209
- The release numbering convention used is major.minor.micro.
210
- <dl>
211
- <dt>Major
212
- <dd>Indicates a very large change in the core package. Rewrites or major milestones.
213
- <dt>Minor
214
- <dd>Significant amount of feature addition/modification.<br />odd number - development/experimental release<br /> even number - production release
215
- <dt>Micro
216
- <dd>Mostly bug fix and maintenance number.
217
- <dt>(Suffix)
218
- <dd>rc1 for first release candidate, a1 for alpha 1, etc.
219
- </dl>
220
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
221
-
222
- <a name="Support"></a><h2>1.4 Support</h2>
223
- <p>
224
- The main support channel is using iCalcreator
225
- <a title="Sourceforge" href="http://sourceforge.net/projects/icalcreator/forums/" target="_blank">Sourceforge</a> forum.
226
- </p>
227
- <p>
228
- Use the contact <a href="http://www.kigkonsult.se/contact/index.php" title="www.kigkonsult.Se/contact" target="_blank">page</a>
229
- for queries, improvement/development issues or professional support and development.
230
- Please note that paid support or consulting service has the highest priority.
231
- </p>
232
- <p>
233
- Our services are available for support and designing and developing iCalcreator etc. customizations,
234
- adaptations and other PHP/MySQL solutions with a special focus on software utility and reliability,
235
- supported through our iterative acquire/design/transition process modell.
236
- </p>
237
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
238
-
239
- <a name="INSTALL"></a><h2>1.5 Install</h2>
240
- Unpack to any folder<br />
241
- - add this folder to your include-path<br />
242
- - or unpack to your application-(include)-folder<br />
243
- Add
244
- <p class="format">require_once [folder/]iCalcreator.class.php;</p>
245
- to your php-script.
246
- <br />
247
- <br />
248
- If using php version 5.1 or higher, the default timezone need to be set/altered, now &quot;Europe/Stockholm&quot;,
249
- line 50 in the iCalcreator.class.php file.
250
- <br />
251
- <br />
252
- When creating a new calendar/component instance, review <a href="#Calendar_configuration_functions">config</a> settings.
253
- <br />
254
- <br />
255
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
256
-
257
- <a name="Additional_Descriptors"></a><h2>1.6 Additional Descriptors</h2>
258
- The following properties (as described in <a href="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" title="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions">wikipedia:iCal</a>) may be required when importing iCal files into some calendaring software (MS etc.):
259
- <dl>
260
- <dt>on calendar level
261
- <dd><a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
262
- <dd><a href="#X-PROPERTY">X-WR-CALNAME</a> x-property
263
- <dd><a href="#X-PROPERTY">X-WR-CALDESC</a> x-property
264
- <dd><a href="#X-PROPERTY">X-WR-RELCALID</a> x-property <span class="comment">(a <a href="/wiki/Universally_Unique_Identifier" title="Universally Unique Identifier" class="mw-redirect">UUID</a>.)</span>
265
- <dd><a href="#X-PROPERTY">X-WR-TIMEZONE</a> x-property
266
- <dt>on component level
267
- <dd><a href="#DTSTAMP">DTSTAMP</a> property (iCalcreator auto created)
268
- <dd><a href="#UID">UID</a> property (iCalcreator auto created)
269
- </dl>
270
- Recommendation is also to set <a href="#Unique_id">unique_id</a> when creating a new vcalendar/component instance, to ensure accurate setting of all components <a href="#UID">UID</a> property, even before <a href="#parse_merge">parse</a>.
271
- <p class="label">Example</p>
272
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
273
- $vcalendar = new vcalendar( $config );
274
- $vcalendar->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; )
275
- $vcalendar->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; );
276
- $vcalendar->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; );
277
- $uuid = &quot;3E26604A-50F4-4449-8B3E-E4F4932D05B5&quot;;
278
- $vcalendar->setProperty( &quot;X-WR-RELCALID&quot;, $uuid );
279
- $vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
280
- .. .
281
- </p>
282
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
283
-
284
- <a name="Addendum"></a><h2>1.7 Addendum</h2>
285
- <p>
286
- Download iCalcreator <a title="download iCalcreator coding samples" href="http://www.kigkonsult.se/downloads/index.php" target="_blank">coding samples</a>.
287
- <br />
288
- Examples how to employ iCalcreator in software development:<br />
289
- <a title="Create iCal event file on-demand from form" href="http://www.kigkonsult.se/eventCreator/index.php" target="_blank">The iCal file event editor</a> and
290
- <a title="tinycal" href="http://www.kigkonsult.se/tinycal/index.php" target="_blank">tinycal</a>, calendar-in-a-box.
291
- </p>
292
- <p>
293
- There are free iCal/xCal icons in the images directory, to use as buttons on a web page.
294
- </p>
295
- The PHP coding examples are only examples, recommendation is to use a
296
- coding standard, the following, incomplete, list is a good start;
297
- <br/>
298
- <a href="http://www.dagbladet.no/development/phpcodingstandard/" target="_blank">http://www.dagbladet.no/development/phpcodingstandard/</a>
299
- <!--
300
- <br/>
301
- <a href="http://ez.no/ezpublish/documentation/development/standards/php" target="_blank">http://ez.no/ezpublish/documentation/development/standards/php</a>
302
- -->
303
- <br/>
304
- <a href="http://framework.zend.com/manual/en/coding-standard.overview.html" target="_blank">http://framework.zend.com/manual/en/coding-standard.overview.html</a>
305
- <!--
306
- <br/>
307
- <a href="http://gforge.org/docman/view.php/1/2/coding-standards.html" target="_blank">http://gforge.org/docman/view.php/1/2/coding-standards.html</a>
308
- -->
309
- <br/>
310
- <a href="http://pear.php.net/manual/en/standards.php" target="_blank">http://pear.php.net/manual/en/standards.php</a>
311
- <br />
312
- <br />
313
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
314
-
315
- <a name="INDEX"><h2>1.8 INDEX</h2>
316
-
317
- <a href="#INTRO">1. INTRO</a><br />
318
- <br />
319
- <a href="#iCal">1.1 Ical</a><br />
320
- <a href="#This_manual">1.2 This manual</a><br />
321
- <a href="#Versioning">1.3 Versioning</a><br />
322
- <a href="#Support">1.4 Support</a><br />
323
- <a href="#INSTALL">1.5 Install</a><br />
324
- <a href="#Additional_Descriptors">1.6 Additional_Descriptors</a><br />
325
- <a href="#Addendum">1.7 Addendum</a><br />
326
- <a href="#INDEX">1.8 INDEX</a><br />
327
- <br />
328
- <a href="#Calendar_Component_list">2. Calendar Component list</a><br />
329
- <br />
330
- <a href="#VCALENDAR">2.1 VCALENDAR</a><br />
331
- <a href="#VEVENT">2.2 VEVENT</a><br />
332
- <a href="#VTODO">2.3 VTODO</a><br />
333
- <a href="#VJOURNAL">2.4 VJOURNAL</a><br />
334
- <a href="#VFREEBUSY">2.5 VFREEBUSY</a><br />
335
- <a href="#VALARM">2.6 VALARM</a><br />
336
- <a href="#VTIMEZONE">2.7 VTIMEZONE</a><br />
337
- <a href="#CalProps">2.10 Component Properties</a><br />
338
- <br />
339
- <a href="#Function_list">3. Function list</a><br />
340
- <br />
341
- <a href="#Calendar_object_functions">3.1 Calendar object functions</a><br />
342
- <br />
343
- <a href="#Calendar_object_constructors">3.1.1 Constructors</a><br />
344
- <a href="#vcalendar">3.1.1.1 vcalendar</a><br />
345
- <a href="#vevent">3.1.1.2 vevent</a><br />
346
- <a href="#vtodo">3.1.1.3 vtodo</a><br />
347
- <a href="#vjournal">3.1.1.4 vjournal</a><br />
348
- <a href="#vfreebusy">3.1.1.5 vfreebusy</a><br />
349
- <a href="#valarm">3.1.1.6 valarm</a><br />
350
- <a href="#vtimezone">3.1.1.7 vtimezone</a><br />
351
- <a href="#standard">3.1.1.8 standard</a><br />
352
- <a href="#daylight">3.1.1.9 daylight</a><br />
353
- <br />
354
- <a href="#Calendar_property_functions">3.1.2 Calendar property functions</a><br />
355
- <a href="#deleteProperty">3.1.2.1 deleteProperty</a><br />
356
- <a href="#getProperty">3.1.2.2 getProperty</a><br />
357
- <a href="#setProperty">3.1.2.3 setProperty</a><br />
358
- <a href="#CALSCALE">3.1.2.4 CALSCALE</a><br />
359
- <a href="#METHOD">3.1.2.5 METHOD</a><br />
360
- <a href="#VERSION">3.1.2.6 VERSION</a><br />
361
- <a href="#X-PROPERTY">3.1.2.7 X-PROPERTY</a><br />
362
- <br />
363
- <a href="#Calendar_component_functions">3.1.3 Calendar component functions</a><br />
364
- <a href="#deleteComponent">3.1.3.1 deleteComponent</a><br />
365
- <a href="#getComponent">3.1.3.2 getComponent</a><br />
366
- <a href="#newComponent">3.1.3.3 newComponent</a><br />
367
- <a href="#selectComponents">3.1.3.4 selectComponents</a><br />
368
- <a href="#setComponent">3.1.3.5 setComponent</a><br />
369
- <br />
370
- <a href="#Calendar_inputoutput_functions">3.1.4 Calendar input/output functions</a><br />
371
- <a href="#parse_merge">3.1.4.1 parse and merge</a><br />
372
- <a href="#createCalendar">3.1.4.2 createCalendar</a><br />
373
- <a href="#returnCalendar">3.1.4.3 returnCalendar</a><br />
374
- <a href="#saveCalendar">3.1.4.4 saveCalendar</a><br />
375
- <a href="#sort">3.1.4.5 sort</a><br />
376
- <a href="#useCachedCalendar">3.1.4.6 useCachedCalendar</a><br />
377
- <br />
378
- <a href="#Calendar_configuration_functions">3.1.5 Calendar configuration functions</a><br />
379
- <a href="#configKeys">3.1.5.1 configuration keys</a><br />
380
- <a href="#getConfig">3.1.5.2 getConfig</a><br />
381
- <a href="#initConfig">3.1.5.3 calendar/component initialization</a><br />
382
- <a href="#setConfig">3.1.5.4 setConfig</a><br />
383
- <a href="#allowEmpty">3.1.5.5 Allow empty components</h4><br />
384
- <a href="#Compsinfo">3.1.5.6 Component information</h4><br />
385
- <a href="#Delimiter">3.1.5.7 Delimiter</a><br />
386
- <a href="#Directory">3.1.5.8 Directory</a><br />
387
- <a href="#Fileinfo">3.1.5.9 Fileinfo</a><br />
388
- <a href="#Filename">3.1.5.10 Filename</a><br />
389
- <a href="#Filesize">3.1.5.11 Filesize</a><br />
390
- <a href="#Format">3.1.5.12 Format</a><br />
391
- <a href="#Language">3.1.5.13 Language</a><br />
392
- <a href="#NewlineChar">3.1.5.14 NewlineChar</a><br />
393
- <a href="#dTZID">3.1.5.15 TZID</a><br />
394
- <a href="#Unique_id">3.1.5.16 Unique_id</a><br />
395
- <a href="#configURL">3.1.5.17 URL</a><br />
396
- <br />
397
- <a href="#Calendar_component_object_property_function_list">3.2 Calendar component/object property function list</a><br />
398
- <br />
399
- <a href="#deleteProperty_PROP">3.2.1 deleteProperty</a><br />
400
- <a href="#getProperty_PROP">3.2.2 getProperty</a><br />
401
- <a href="#parse">3.2.3 parse</a><br />
402
- <a href="#setProperty_PROP">3.2.4 setProperty</a><br />
403
- <br />
404
- <a href="#ACTION">3.2.5 ACTION</a><br />
405
- <a href="#ATTACH">3.2.6 ATTACH</a><br />
406
- <a href="#ATTENDEE">3.2.7 ATTENDEE</a><br />
407
- <a href="#CATEGORIES">3.2.8 CATEGORIES</a><br />
408
- <a href="#CLASS">3.2.9 CLASS</a><br />
409
- <a href="#COMMENT">3.2.10 COMMENT</a><br />
410
- <a href="#COMPLETED">3.2.11 COMPLETED</a><br />
411
- <a href="#CONTACT">3.2.12 CONTACT</a><br />
412
- <a href="#CREATED">3.2.13 CREATED</a><br />
413
- <a href="#DESCRIPTION">3.2.14 DESCRIPTION</a><br />
414
- <a href="#DTEND">3.2.15 DTEND</a><br />
415
- <a href="#DTSTAMP">3.2.16 DTSTAMP</a><br />
416
- <a href="#DTSTART">3.2.17 DTSTART</a><br />
417
- <a href="#DUE">3.2.18 DUE</a><br />
418
- <a href="#DURATION">3.2.19 DURATION</a><br />
419
- <a href="#EXDATE">3.2.20 EXDATE</a><br />
420
- <a href="#EXRULE">3.2.21 EXRULE</a><br />
421
- <a href="#FREEBUSY_PROP">3.2.22 FREEBUSY</a><br />
422
- <a href="#GEO">3.2.23 GEO</a><br />
423
- <a href="#LAST-MODIFIED">3.2.24 LAST-MODIFIED</a><br />
424
- <a href="#LOCATION">3.2.25 LOCATION</a><br />
425
- <a href="#ORGANIZER">3.2.26 ORGANIZER</a><br />
426
- <a href="#PERCENT-COMPLETE">3.2.27 PERCENT-COMPLETE</a><br />
427
- <a href="#PRIORITY">3.2.28 PRIORITY</a><br />
428
- <a href="#RDATE">3.2.29 RDATE</a><br />
429
- <a href="#RECURRENCE-ID">3.2.30 RECURRENCE-ID</a><br />
430
- <a href="#RELATED-TO">3.2.31 RELATED-TO</a><br />
431
- <a href="#REPEAT">3.2.32 REPEAT</a><br />
432
- <a href="#REQUEST-STATUS">3.2.33 REQUEST-STATUS</a><br />
433
- <a href="#RESOURCES">3.2.34 RESOURCES</a><br />
434
- <a href="#RRULE">3.2.35 RRULE</a><br />
435
- <a href="#SEQUENCE">3.2.36 SEQUENCE</a><br />
436
- <a href="#STATUS">3.2.37 STATUS</a><br />
437
- <a href="#SUMMARY">3.2.38 SUMMARY</a><br />
438
- <a href="#TRANSP">3.2.39 TRANSP</a><br />
439
- <a href="#TRIGGER">3.2.40 TRIGGER</a><br />
440
- <a href="#TZID">3.2.41 TZID</a><br />
441
- <a href="#TZNAME">3.2.42 TZNAME</a><br />
442
- <a href="#TZOFFSETFROM">3.2.43 TZOFFSETFROM</a><br />
443
- <a href="#TZOFFSETTO">3.2.44 TZOFFSETTO</a><br />
444
- <a href="#TZURL">3.2.45 TZURL</a><br />
445
- <a href="#UID">3.2.46 UID</a><br />
446
- <a href="#URL">3.2.47 URL</a><br />
447
- <a href="#X-PROPERTY_PROP">3.2.48 X-PROPERTY</a><br />
448
- <br />
449
- <a href="#Calendar_component_configuration_functions">3.3 Calendar Component configuration functions</a><br />
450
- <br />
451
- <a href="#Language_PROP">3.3.1 Language</a><br />
452
- <br />
453
- <a href="#Calendar_component_object_misc_functions">3.4 Calendar component object misc. functions</a><br />
454
- <br />
455
- <a href="#deleteComponent_PROP">3.4.1 deleteComponent</a><br />
456
- <a href="#getComponent_PROP">3.4.2 getComponent</a><br />
457
- <a href="#newComponent_PROP">3.4.3 newComponent</a><br />
458
- <a href="#setComponent_PROP">3.4.4 setComponent</a><br />
459
- <br />
460
- <a href="#iCalUtilityFunctions">4. iCalUtilityFunctions</a><br />
461
- <br />
462
- <a href="#createTimezone">4.1 createTimezone</a><br />
463
- <br />
464
- <a href="#Copyright_and_Licence">5. COPYRIGHT AND LICENSE</a><br />
465
- <br />
466
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a>
467
-
468
- <a name="Calendar_Component_list"></a><h1>2. Calendar Component list</h1>
469
- Quote from <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format">rfc2445</a>!
470
- (Described in iCal output format, content corresponds to xCal format.)<br />
471
-
472
- <a name="VCALENDAR"></a><h2>2.1 VCALENDAR</h2>
473
- <p class="center">icalobject = 1*(&quot;BEGIN&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF</p>
474
- <p class="center">icalbody</p>
475
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF)</p>
476
- <br />
477
- icalbody = calprops component
478
- <br />
479
- calprops = 2*(
480
- <br />
481
- <p class="center">&quot;prodid&quot; and &quot;version&quot; are both REQUIRED, but MUST NOT occur more than once
482
- <p class="center">prodid / <a href="#VERSION">version</a> /</p>
483
- <p class="center">&quot;calscale&quot;and &quot;method&quot;are optional, but MUST NOT occur more than once</p>
484
- <p class="center"><a href="#CALSCALE">calscale</a> / <a href="#METHOD">method</a> /</p>
485
- <p class="center"><a href="#X-PROPERTY">x-prop</a></p>
486
- )
487
- <br />
488
- <p class="center">component = 1*(<a href="#VEVENT">eventc</a> / <a href="#VTODO">todoc</a> / <a href="#VJOURNAL">journalc</a> / <a href="#VFREEBUSY">freebusyc</a> / <a href="#VTIMEZONE">timezonec</a> / iana-comp* / x-comp*)</p>
489
- <p class="center">iana-comp = &quot;BEGIN&quot; &quot;:&quot; iana-token CRLF</p>
490
- <p class="center">1*contentline</p>
491
- <p class="center">&quot;END&quot; &quot;:&quot; iana-token CRLF</p>
492
- <p class="center">x-comp = &quot;BEGIN&quot; &quot;:&quot; x-name CRLF</p>
493
- <p class="center">1*contentline</p>
494
- <p class="center">&quot;END&quot; &quot;:&quot; x-name CRLF</p>
495
- *) <span class="comment">not supported by iCalcreator</span></p>
496
- <br />
497
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
498
-
499
- <a name="VEVENT"></a><h2>2.2 VEVENT</h2>
500
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
501
- <p class="center">eventprop *alarmc</p>
502
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
503
- eventprop = *(
504
- <p class="center">the following are optional,but MUST NOT occur more than once</p>
505
- <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> /</p>
506
- <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PRIORITY">priority</a> / </p>
507
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> / </p>
508
- <p class="center"><a href="#TRANSP">transp</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / <a href="#RECURRENCE-ID">recurid</a> /</p>
509
- <p class="center">either &quot;<a href="#DTEND">dtend</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;eventprop&quot;, </p>
510
- <p class="center">but &quot;<a href="#DTEND">dtend</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;eventprop&quot;</p>
511
- <p class="center"><a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> /</p>
512
- <p class="center">the following are optional, and MAY occur more than once</p>
513
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
514
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
515
- <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
516
- )
517
- <br />
518
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
519
-
520
- <a name="VTODO"></a><h2>2.3 VTODO</h2>
521
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
522
- <p class="center">todoprop *alarmc</p>
523
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
524
- todoprop = *(
525
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
526
- <p class="center"><a href="#CLASS">class</a> / <a href="#COMPLETED">completed</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTAMP">dtstamp</a> / <a href="#DTSTART">dtstart</a> / </p>
527
- <p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PERCENT-COMPLETE">percent</a> / <a href="#PRIORITY">priority</a> / </p>
528
- <p class="center"><a href="#RECURRENCE-ID">recurid</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
529
- <p class="center">either &quot;<a href="#DUE">due</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;todoprop&quot;,</p>
530
- <p class="center"> but &quot;<a href="#DUE">due</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;todoprop&quot;</p>
531
- <p class="center"><a href="#DUE">due</a> / <a href="#DURATION">duration</a> /</p>
532
- <p class="center">the following are optional,and MAY occur more than once</p>
533
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
534
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
535
- <p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
536
- )
537
- <br />
538
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
539
-
540
- <a name="VJOURNAL"></a><h2>2.4 VJOURNAL</h2>
541
- <p class="center">journalc = &quot;BEGIN&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
542
- <p class="center">jourprop</p>
543
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
544
- jourprop = *(
545
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
546
- <p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> / </p>
547
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#ORGANIZER">organizer</a> / <a href="#RECURRENCE-ID">recurid</a> / </p>
548
- <p class="center"><a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
549
- <p class="center">the following are optional,and MAY occur more than once</p>
550
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> /</p>
551
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#RELATED-TO">related</a> / </p>
552
- <p class="center"><a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
553
- )
554
- <br />
555
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
556
-
557
- <a name="VFREEBUSY"></a><h2>2.5 VFREEBUSY</h2>
558
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
559
- <p class="center">fbprop</p>
560
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
561
- fbprop = *(
562
- <p class="center">the following are optional, but MUST NOT occur more than once</p>
563
- <p class="center"><a href="#CONTACT">contact</a> / <a href="#DTSTART">dtstart</a> / <a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> / </p>
564
- <p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#ORGANIZER">organizer</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / </p>
565
- <p class="center">the following are optional,and MAY occur more than once</p>
566
- <p class="center"><a href="#ATTENDEE">attendee</a> / <a href="#COMMENT">comment</a> / <a href="#FREEBUSY_PROP">freebusy</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
567
- )
568
- <br />
569
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
570
-
571
- <a name="VALARM"></a><h2>2.6 VALARM</h2>
572
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p>
573
- <p class="center">(audioprop / dispprop / emailprop / procprop)</p>
574
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p> audioprop = 2*(
575
- <p class="center">&quot;<a href="#ACTION">action</a>&quot; and &quot;<a href="#TRIGGER">trigger</a>&quot; are both REQUIRED, but MUST NOT occur more than once</p>
576
- <p class="center"><a href="#ACTION">action</a> / <a href="#TRIGGER">trigger</a> /</p>
577
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
578
- <p class="center">but if one occurs, so MUST the other</p>
579
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
580
- <p class="center">the following is optional, but MUST NOT occur more than once</p>
581
- <p class="center"><a href="#ATTACH">attach</a> / </p>
582
- <p class="center">the following is optional, and MAY occur more than once</p>
583
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
584
- )
585
- <br />
586
- dispprop = 3*(
587
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
588
- <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> /</p>
589
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
590
- <p class="center">but if one occurs, so MUST the other</p>
591
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
592
- <p class="center">the following is optional, and MAY occur more than once</p>
593
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
594
- )
595
- <br />
596
- emailprop = 5*(
597
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
598
- <p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> / <a href="#SUMMARY">summary</a></p>
599
- <p class="center">the following is REQUIRED, and MAY occur more than once</p>
600
- <p class="center"><a href="#ATTENDEE">attendee</a> / </p>
601
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
602
- <p class="center">but if one occurs, so MUST the other</p>
603
- <p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
604
- <p class="center">the following are optional, and MAY occur more than once</p>
605
- <p class="center"><a href="#ATTACH">attach</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
606
- )
607
- <br />
608
- procprop = 3*(
609
- <p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
610
- <p class="center"><a href="#ACTION">action</a> / <a href="#ATTACH">attach</a> / <a href="#TRIGGER">trigger</a> /</p>
611
- <p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
612
- <p class="center">but if one occurs, so MUST the other</p>
613
- <p class="center"><a href="#DURATION">duration</a> /
614
- <a href="#REPEAT">repeat</a> /</p>
615
- <p class="center">&quot;<a href="#DESCRIPTION">description</a>&quot; is optional, and MUST NOT occur more than once</p>
616
- <p class="center"><a href="#DESCRIPTION">description</a> / </p>
617
- <p class="center">the following is optional, and MAY occur more than once</p>
618
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
619
- )
620
- <br />
621
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
622
-
623
- <a name="VTIMEZONE"></a><h2>2.7 VTIMEZONE</h2>
624
- <p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
625
- 2*(
626
- <p class="center">&quot;<a href="#TZID">tzid</a>&quot; is required, but MUST NOT occur more than once</p>
627
- <p class="center"><a href="#TZID">tzid</a> / </p>
628
- <p class="center">&quot;<a href="#LAST-MODIFIED">last-mod</a>&quot; and &quot;<a href="#TZURL">tzurl</a>&quot; are optional, but MUST NOT occur more than once</p>
629
- <p class="center"><a href="#LAST-MODIFIED">last-mod</a> / <a href="#TZURL">tzurl</a> /</p>
630
- <p class="center">one of &quot;standardc&quot; or &quot;daylightc&quot; MUST occur and each MAY occur more than once.</p>
631
- <p class="center">standardc / daylightc /</p>
632
- <p class="center">the following is optional, and MAY occur more than once</p>
633
- <p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
634
- )
635
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
636
- <p class="center">standardc = &quot;BEGIN&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
637
- <p class="center">tzprop</p>
638
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
639
- <p class="center">daylightc = &quot;BEGIN&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
640
- <p class="center">tzprop</p>
641
- <p class="center">&quot;END&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
642
- <br />
643
- tzprop = 3*(
644
- <p class="center">the following are each REQUIRED, but MUST NOT occur more than once</p>
645
- <p class="center"><a href="#DTSTART">dtstart</a> / <a href="#TZOFFSETTO">tzoffsetto</a> / <a href="#TZOFFSETFROM">tzoffsetfrom</a> /</p>
646
- <p class="center">the following are optional, and MAY occur more than once</p>
647
- <p class="center"><a href="#COMMENT">comment</a> /<a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#TZNAME">tzname</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
648
- )
649
- <br />
650
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
651
-
652
- <a name="CalProps"></a><h2>2.8 Component Properties</h2>
653
- A comprehensive table showing relation between calendar components and properties.
654
- <a href="#VTIMEZONE">vtimezone</a> properties are not included.
655
- <br /><br />
656
- <table>
657
- <tr>
658
- <td>0-1</td>
659
- <td colspan="8">OPTIONAL property, MUST NOT occur more than once.</td>
660
- </tr>
661
- <tr>
662
- <td>0-m</td>
663
- <td colspan="8">OPTIONAL property, MAY occur more than once.</td>
664
- </tr>
665
- <tr>
666
- <td>0&nbsp;or&nbsp;1=1</td>
667
- <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br />If one occurs, so MUST the other</td>
668
- </tr>
669
- <tr>
670
- <td>0*1</td>
671
- <td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br />If one occurs, so MUST NOT the other</td>
672
- </tr>
673
- <tr>
674
- <td>1-m</td>
675
- <td colspan="8">REQUIRED property, MAY occur more than once.</td>
676
- </tr>
677
- <tr>
678
- <td>1</td>
679
- <td colspan="8">REQUIRED property, MUST NOT occur more than once.</td>
680
- </tr>
681
- <tr>
682
- <td colspan="9">&nbsp;</td>
683
- </tr>
684
- <tr>
685
- <td>&nbsp;</td>
686
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VEVENT">v<br/>e<br/>v<br/>e<br/>n<br/>t</a></td>
687
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VTODO">v<br/>t<br/>o<br/>d<br/>o</a></td>
688
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VJOURNAL">v<br/>j<br/>o<br/>u<br/>r<br/>n<br/>a<br/>l</a></td>
689
- <td class="bl bb center top" rowspan="2"><a class="ref" href="#VFREEBUSY">v<br/>f<br/>r<br/>e<br/>e<br/>b<br/>u<br/>s<br/>y</a></td>
690
- <td class="bl top center" colspan="4"><a class="ref" href="#VALARM">v&nbsp;a&nbsp;l&nbsp;a&nbsp;r&nbsp;m</a></td>
691
- </tr>
692
- <tr>
693
- <td class="bb">&nbsp;</td>
694
- <td class="bl bb center ref"><br/><br/><br/><br/>a<br/>u<br/>d<br/>i<br/>o</td>
695
- <td class="bl bb center ref"><br/><br/>d<br/>i<br/>s<br/>p<br/>l<br/>a<br/>y</td>
696
- <td class="bl bb center ref"><br/><br/><br/><br/>e<br/>m<br/>a<br/>i<br/>l</td>
697
- <td class="bl bb center ref">p<br/>r<br/>o<br/>c<br/>e<br/>d<br/>u<br/>r<br/>e</td>
698
- </tr>
699
- <tr>
700
- <td class="bb"><a class="ref" href="#ACTION">action</a></td>
701
- <td class="blb">&nbsp;</td>
702
- <td class="blb">&nbsp;</td>
703
- <td class="blb">&nbsp;</td>
704
- <td class="blb">&nbsp;</td>
705
- <td class="blb">1</td>
706
- <td class="blb">1</td>
707
- <td class="blb">1</td>
708
- <td class="blb">1</td>
709
- </tr>
710
- <tr>
711
- <td class="bb"><a class="ref" href="#ATTACH">attach</a></td>
712
- <td class="blb">0-m</td>
713
- <td class="blb">0-m</td>
714
- <td class="blb">0-m</td>
715
- <td class="blb"></td>
716
- <td class="blb">0-1</td>
717
- <td class="blb">&nbsp;</td>
718
- <td class="blb">0-m</td>
719
- <td class="blb">1</td>
720
- </tr>
721
- <tr>
722
- <td class="bb"><a class="ref" href="#ATTENDEE">attendee</a></td>
723
- <td class="blb">0-m</td>
724
- <td class="blb">0-m</td>
725
- <td class="blb">0-m</td>
726
- <td class="blb">0-m</td>
727
- <td class="blb">&nbsp;</td>
728
- <td class="blb">&nbsp;</td>
729
- <td class="blb">1-m</td>
730
- <td class="blb">&nbsp;</td>
731
- </tr>
732
- <tr>
733
- <td class="bb"><a class="ref" href="#CATEGORIES">categories</a></td>
734
- <td class="blb">0-m</td>
735
- <td class="blb">0-m</td>
736
- <td class="blb">0-m</td>
737
- <td class="blb">&nbsp;</td>
738
- <td class="blb">&nbsp;</td>
739
- <td class="blb">&nbsp;</td>
740
- <td class="blb">&nbsp;</td>
741
- <td class="blb">&nbsp;</td>
742
- </tr>
743
- <tr>
744
- <td class="bb"><a class="ref" href="#CLASS">class</a></td>
745
- <td class="blb">0-1</td>
746
- <td class="blb">0-1</td>
747
- <td class="blb">0-1</td>
748
- <td class="blb">&nbsp;</td>
749
- <td class="blb">&nbsp;</td>
750
- <td class="blb">&nbsp;</td>
751
- <td class="blb">&nbsp;</td>
752
- <td class="blb">&nbsp;</td>
753
- </tr>
754
- <tr>
755
- <td class="bb"><a class="ref" href="#COMMENT">comment</a></td>
756
- <td class="blb">0-m</td>
757
- <td class="blb">0-m</td>
758
- <td class="blb">0-m</td>
759
- <td class="blb">0-m</td>
760
- <td class="blb">&nbsp;</td>
761
- <td class="blb">&nbsp;</td>
762
- <td class="blb">&nbsp;</td>
763
- <td class="blb">&nbsp;</td>
764
- </tr>
765
- <tr>
766
- <td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
767
- <td class="blb">&nbsp;</td>
768
- <td class="blb">0-1</td>
769
- <td class="blb">&nbsp;</td>
770
- <td class="blb">&nbsp;</td>
771
- <td class="blb">&nbsp;</td>
772
- <td class="blb">&nbsp;</td>
773
- <td class="blb">&nbsp;</td>
774
- <td class="blb">&nbsp;</td>
775
- </tr>
776
- <tr>
777
- <td class="bb"><a class="ref" href="#CONTACT">contact</a></td>
778
- <td class="blb">0-m</td>
779
- <td class="blb">0-m</td>
780
- <td class="blb">0-m</td>
781
- <td class="blb">0-1</td>
782
- <td class="blb">&nbsp;</td>
783
- <td class="blb">&nbsp;</td>
784
- <td class="blb">&nbsp;</td>
785
- <td class="blb">&nbsp;</td>
786
- </tr>
787
- <tr>
788
- <td class="bb"><a class="ref" href="#CREATED">created</a></td>
789
- <td class="blb">0-1</td>
790
- <td class="blb">0-1</td>
791
- <td class="blb">0-1</td>
792
- <td class="blb">&nbsp;</td>
793
- <td class="blb">&nbsp;</td>
794
- <td class="blb">&nbsp;</td>
795
- <td class="blb">&nbsp;</td>
796
- <td class="blb">&nbsp;</td>
797
- </tr>
798
- <tr>
799
- <td class="bb"><a class="ref" href="#DESCRIPTION">description</a></td>
800
- <td class="blb">0-1</td>
801
- <td class="blb">0-1</td>
802
- <td class="blb">0-m</td>
803
- <td class="blb">&nbsp;</td>
804
- <td class="blb">&nbsp;</td>
805
- <td class="blb">1</td>
806
- <td class="blb">1</td>
807
- <td class="blb">0-1</td>
808
- </tr>
809
- <tr>
810
- <td class="bb"><a class="ref" href="#DTEND">dtend</a></td>
811
- <td class="blb">0*1</td>
812
- <td class="blb">&nbsp;</td>
813
- <td class="blb">&nbsp;</td>
814
- <td class="blb">0-1</td>
815
- <td class="blb">&nbsp;</td>
816
- <td class="blb">&nbsp;</td>
817
- <td class="blb">&nbsp;</td>
818
- <td class="blb">&nbsp;</td>
819
- </tr>
820
- <tr>
821
- <td class="bb"><a class="ref" href="#DTSTAMP">dtstamp</a></td>
822
- <td class="blb">0-1</td>
823
- <td class="blb">0-1</td>
824
- <td class="blb">0-1</td>
825
- <td class="blb">0-1</td>
826
- <td class="blb">&nbsp;</td>
827
- <td class="blb">&nbsp;</td>
828
- <td class="blb">&nbsp;</td>
829
- <td class="blb">&nbsp;</td>
830
- </tr>
831
- <tr>
832
- <td class="bb"><a class="ref" href="#DTSTART">dtstart</a></td>
833
- <td class="blb">0-1</td>
834
- <td class="blb">0-1</td>
835
- <td class="blb">0-1</td>
836
- <td class="blb">0-1</td>
837
- <td class="blb">&nbsp;</td>
838
- <td class="blb">&nbsp;</td>
839
- <td class="blb">&nbsp;</td>
840
- <td class="blb">&nbsp;</td>
841
- </tr>
842
- <tr>
843
- <td class="bb"><a class="ref" href="#DUE">due</a></td>
844
- <td class="blb">&nbsp;</td>
845
- <td class="blb">0*1</td>
846
- <td class="blb">&nbsp;</td>
847
- <td class="blb">&nbsp;</td>
848
- <td class="blb">&nbsp;</td>
849
- <td class="blb">&nbsp;</td>
850
- <td class="blb">&nbsp;</td>
851
- <td class="blb">&nbsp;</td>
852
- </tr>
853
- <tr>
854
- <td class="bb"><a class="ref" href="#DURATION">duration</a></td>
855
- <td class="blb">0*1</td>
856
- <td class="blb">0*1</td>
857
- <td class="blb">&nbsp;</td>
858
- <td class="blb">0-1</td>
859
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
860
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
861
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
862
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
863
- </tr>
864
- <tr>
865
- <td class="bb"><a class="ref" href="#EXDATE">exdate</a></td>
866
- <td class="blb">0-m</td>
867
- <td class="blb">0-m</td>
868
- <td class="blb">0-m</td>
869
- <td class="blb">&nbsp;</td>
870
- <td class="blb">&nbsp;</td>
871
- <td class="blb">&nbsp;</td>
872
- <td class="blb">&nbsp;</td>
873
- <td class="blb">&nbsp;</td>
874
- </tr>
875
- <tr>
876
- <td class="bb"><a class="ref" href="#EXRULE">exrule</a></td>
877
- <td class="blb">0-m</td>
878
- <td class="blb">0-m</td>
879
- <td class="blb">0-m</td>
880
- <td class="blb">&nbsp;</td>
881
- <td class="blb">&nbsp;</td>
882
- <td class="blb">&nbsp;</td>
883
- <td class="blb">&nbsp;</td>
884
- <td class="blb">&nbsp;</td>
885
- </tr>
886
- <tr>
887
- <td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
888
- <td class="blb">&nbsp;</td>
889
- <td class="blb">&nbsp;</td>
890
- <td class="blb">&nbsp;</td>
891
- <td class="blb">0-m</td>
892
- <td class="blb">&nbsp;</td>
893
- <td class="blb">&nbsp;</td>
894
- <td class="blb">&nbsp;</td>
895
- <td class="blb">&nbsp;</td>
896
- </tr>
897
- <tr>
898
- <td class="bb"><a class="ref" href="#GEO">geo</a></td>
899
- <td class="blb">0-1</td>
900
- <td class="blb">0-1</td>
901
- <td class="blb">&nbsp;</td>
902
- <td class="blb">&nbsp;</td>
903
- <td class="blb">&nbsp;</td>
904
- <td class="blb">&nbsp;</td>
905
- <td class="blb">&nbsp;</td>
906
- <td class="blb">&nbsp;</td>
907
- </tr>
908
- <tr>
909
- <td class="bb"><a class="ref" href="#LAST-MODIFIED">last-mod</a></td>
910
- <td class="blb">0-1</td>
911
- <td class="blb">0-1</td>
912
- <td class="blb">0-1</td>
913
- <td class="blb"></td>
914
- <td class="blb">&nbsp;</td>
915
- <td class="blb">&nbsp;</td>
916
- <td class="blb">&nbsp;</td>
917
- <td class="blb">&nbsp;</td>
918
- </tr>
919
- <tr>
920
- <td class="bb"><a class="ref" href="#LOCATION">location</a></td>
921
- <td class="blb">0-1</td>
922
- <td class="blb">0-1</td>
923
- <td class="blb">&nbsp;</td>
924
- <td class="blb">&nbsp;</td>
925
- <td class="blb">&nbsp;</td>
926
- <td class="blb">&nbsp;</td>
927
- <td class="blb">&nbsp;</td>
928
- <td class="blb">&nbsp;</td>
929
- </tr>
930
- <tr>
931
- <td class="bb"><a class="ref" href="#ORGANIZER">organizer</a></td>
932
- <td class="blb">0-1</td>
933
- <td class="blb">0-1</td>
934
- <td class="blb">0-1</td>
935
- <td class="blb">0-1</td>
936
- <td class="blb">&nbsp;</td>
937
- <td class="blb">&nbsp;</td>
938
- <td class="blb">&nbsp;</td>
939
- <td class="blb">&nbsp;</td>
940
- </tr>
941
- <tr>
942
- <td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
943
- <td class="blb">&nbsp;</td>
944
- <td class="blb">0-1</td>
945
- <td class="blb">&nbsp;</td>
946
- <td class="blb">&nbsp;</td>
947
- <td class="blb">&nbsp;</td>
948
- <td class="blb">&nbsp;</td>
949
- <td class="blb">&nbsp;</td>
950
- <td class="blb">&nbsp;</td>
951
- </tr>
952
- <tr>
953
- <td class="bb"><a class="ref" href="#PRIORITY">priority</a></td>
954
- <td class="blb">0-1</td>
955
- <td class="blb">0-1</td>
956
- <td class="blb">&nbsp;</td>
957
- <td class="blb">&nbsp;</td>
958
- <td class="blb">&nbsp;</td>
959
- <td class="blb">&nbsp;</td>
960
- <td class="blb">&nbsp;</td>
961
- <td class="blb">&nbsp;</td>
962
- </tr>
963
- <tr>
964
- <td class="bb"><a class="ref" href="#RDATE">rdate</a></td>
965
- <td class="blb">0-m</td>
966
- <td class="blb">0-m</td>
967
- <td class="blb">0-m</td>
968
- <td class="blb">&nbsp;</td>
969
- <td class="blb">&nbsp;</td>
970
- <td class="blb">&nbsp;</td>
971
- <td class="blb">&nbsp;</td>
972
- <td class="blb">&nbsp;</td>
973
- </tr>
974
- <tr>
975
- <td class="bb"><a class="ref" href="#RECURRENCE-ID">recurid</a></td>
976
- <td class="blb">0-1</td>
977
- <td class="blb">0-1</td>
978
- <td class="blb">0-1</td>
979
- <td class="blb">&nbsp;</td>
980
- <td class="blb">&nbsp;</td>
981
- <td class="blb">&nbsp;</td>
982
- <td class="blb">&nbsp;</td>
983
- <td class="blb">&nbsp;</td>
984
- </tr>
985
- <tr>
986
- <td class="bb"><a class="ref" href="#RELATED-TO">related</a></td>
987
- <td class="blb">0-m</td>
988
- <td class="blb">0-m</td>
989
- <td class="blb">0-m</td>
990
- <td class="blb">&nbsp;</td>
991
- <td class="blb">&nbsp;</td>
992
- <td class="blb">&nbsp;</td>
993
- <td class="blb">&nbsp;</td>
994
- <td class="blb">&nbsp;</td>
995
- </tr>
996
- <tr>
997
- <td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
998
- <td class="blb">&nbsp;</td>
999
- <td class="blb">&nbsp;</td>
1000
- <td class="blb">&nbsp;</td>
1001
- <td class="blb">&nbsp;</td>
1002
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
1003
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
1004
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
1005
- <td class="blb">0&nbsp;or&nbsp;1=1</td>
1006
- </tr>
1007
- <tr>
1008
- <td class="bb"><a class="ref" href="#RESOURCES">resources</a></td>
1009
- <td class="blb">0-m</td>
1010
- <td class="blb">0-m</td>
1011
- <td class="blb">&nbsp;</td>
1012
- <td class="blb">&nbsp;</td>
1013
- <td class="blb">&nbsp;</td>
1014
- <td class="blb">&nbsp;</td>
1015
- <td class="blb">&nbsp;</td>
1016
- <td class="blb">&nbsp;</td>
1017
- </tr>
1018
- <tr>
1019
- <td class="bb"><a class="ref" href="#RRULE">rrule</a></td>
1020
- <td class="blb">0-m</td>
1021
- <td class="blb">0-m</td>
1022
- <td class="blb">0-m</td>
1023
- <td class="blb">&nbsp;</td>
1024
- <td class="blb">&nbsp;</td>
1025
- <td class="blb">&nbsp;</td>
1026
- <td class="blb">&nbsp;</td>
1027
- <td class="blb">&nbsp;</td>
1028
- </tr>
1029
- <tr>
1030
- <td class="bb"><a class="ref" href="#REQUEST-STATUS">rstatus</a></td>
1031
- <td class="blb">0-m</td>
1032
- <td class="blb">0-m</td>
1033
- <td class="blb">0-m</td>
1034
- <td class="blb">0-m</td>
1035
- <td class="blb">&nbsp;</td>
1036
- <td class="blb">&nbsp;</td>
1037
- <td class="blb">&nbsp;</td>
1038
- <td class="blb">&nbsp;</td>
1039
- </tr>
1040
- <tr>
1041
- <td class="bb"><a class="ref" href="#SEQUENCE">sequence</a></td>
1042
- <td class="blb">0-1</td>
1043
- <td class="blb">0-1</td>
1044
- <td class="blb">0-1</td>
1045
- <td class="blb">&nbsp;</td>
1046
- <td class="blb">&nbsp;</td>
1047
- <td class="blb">&nbsp;</td>
1048
- <td class="blb">&nbsp;</td>
1049
- <td class="blb">&nbsp;</td>
1050
- </tr>
1051
- <tr>
1052
- <td class="bb"><a class="ref" href="#STATUS">status</a></td>
1053
- <td class="blb">0-1</td>
1054
- <td class="blb">0-1</td>
1055
- <td class="blb">0-1</td>
1056
- <td class="blb">&nbsp;</td>
1057
- <td class="blb">&nbsp;</td>
1058
- <td class="blb">&nbsp;</td>
1059
- <td class="blb">&nbsp;</td>
1060
- <td class="blb">&nbsp;</td>
1061
- </tr>
1062
- <tr>
1063
- <td class="bb"><a class="ref" href="#SUMMARY">summary</a></td>
1064
- <td class="blb">0-1</td>
1065
- <td class="blb">0-1</td>
1066
- <td class="blb">0-1</td>
1067
- <td class="blb">&nbsp;</td>
1068
- <td class="blb">&nbsp;</td>
1069
- <td class="blb">&nbsp;</td>
1070
- <td class="blb">1</td>
1071
- <td class="blb">&nbsp;</td>
1072
- </tr>
1073
- <tr>
1074
- <td class="bb"><a class="ref" href="#TRANSP">transp</a></td>
1075
- <td class="blb">0-1</td>
1076
- <td class="blb">&nbsp;</td>
1077
- <td class="blb">&nbsp;</td>
1078
- <td class="blb">&nbsp;</td>
1079
- <td class="blb">&nbsp;</td>
1080
- <td class="blb">&nbsp;</td>
1081
- <td class="blb">&nbsp;</td>
1082
- <td class="blb">&nbsp;</td>
1083
- </tr>
1084
- <tr>
1085
- <td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
1086
- <td class="blb">&nbsp;</td>
1087
- <td class="blb">&nbsp;</td>
1088
- <td class="blb">&nbsp;</td>
1089
- <td class="blb">&nbsp;</td>
1090
- <td class="blb">1</td>
1091
- <td class="blb">1</td>
1092
- <td class="blb">1</td>
1093
- <td class="blb">1</td>
1094
- </tr>
1095
- <tr>
1096
- <td class="bb"><a class="ref" href="#UID">uid</a></td>
1097
- <td class="blb">0-1</td>
1098
- <td class="blb">0-1</td>
1099
- <td class="blb">0-1</td>
1100
- <td class="blb">0-1</td>
1101
- <td class="blb">&nbsp;</td>
1102
- <td class="blb">&nbsp;</td>
1103
- <td class="blb">&nbsp;</td>
1104
- <td class="blb">&nbsp;</td>
1105
- </tr>
1106
- <tr>
1107
- <td class="bb"><a class="ref" href="#URL">url</a></td>
1108
- <td class="blb">0-1</td>
1109
- <td class="blb">0-1</td>
1110
- <td class="blb">0-1</td>
1111
- <td class="blb">0-1</td>
1112
- <td class="blb">&nbsp;</td>
1113
- <td class="blb">&nbsp;</td>
1114
- <td class="blb">&nbsp;</td>
1115
- <td class="blb">&nbsp;</td>
1116
- </tr>
1117
- <tr>
1118
- <td class="bb"><a class="ref" href="#X-PROPERTY_PROP">x-prop</a></td>
1119
- <td class="blb">0-m</td>
1120
- <td class="blb">0-m</td>
1121
- <td class="blb">0-m</td>
1122
- <td class="blb">0-m</td>
1123
- <td class="blb">0-m</td>
1124
- <td class="blb">0-m</td>
1125
- <td class="blb">0-m</td>
1126
- <td class="blb">0-m</td>
1127
- </tr>
1128
- </table>
1129
- <p>
1130
- If not set, <a href="#DTSTART">DTSTART</a> and <a href="#UID">UID</a> are created automatic by iCalcreator for <a href="#VEVENT">vevent</a>, <a href="#VTODO">vtodo</a>, <a href="#VJOURNAL">vjournal</a> and <a href="#VFREEBUSY">vfreebusy</a> components
1131
- when using calendar functions <a href="#saveCalendar">saveCalendar</a> or <a href="#returnCalendar">returnCalendar</a> or when fetching DTSTART/UID property value with
1132
- component function <a href="#getProperty">getProperty</a>.
1133
- </p>
1134
- <br />
1135
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>
1136
-
1137
- <a name="Function_list"></a><h1>3. Function list</h1>
1138
-
1139
- <a name="Calendar_object_functions"></a><h2>3.1 Calendar object functions</h2>
1140
-
1141
- <a name="Calendar_object_constructors"></a><h3>3.1.1 Constructors</h3>
1142
- <a name="vcalendar"></a><h2>3.1.1.1 vcalendar</h2>
1143
- Create a new <a href="#VCALENDAR">VCALENDAR</a> object.
1144
- <p class="label">Format</p>
1145
- <p class="format">vcalendar()</p>
1146
- <p class="label">Example</p>
1147
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1148
- $vcalendar = new vcalendar( $config );
1149
- ...
1150
- </p>
1151
- <br />
1152
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1153
-
1154
- <a name="vevent"></a><h4>3.1.1.2 vevent</h4>
1155
- <p class="label">Format 1</p>
1156
- Create a new <a href="#VEVENT">VEVENT</a> object using a calendar factory-method, returning a reference to the new component.
1157
- <p class="format">newComponent( 'vevent' )</p>
1158
- <p class="label">Example</p>
1159
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1160
- $vcalendar = new vcalendar( $config );
1161
- ...
1162
- $vevent = & $vcalendar->newComponent( 'vevent' );
1163
- ...
1164
- </p>
1165
- <p class="label">Format 2</p>
1166
- Create a new <a href="#VEVENT">VEVENT</a> object.
1167
- <p class="format">vevent()</p>
1168
- <p class="label">Example</p>
1169
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1170
- $vcalendar = new vcalendar( $config );
1171
- ...
1172
- $vevent = new vevent();
1173
- ...
1174
- $vcalendar->setComponent( $vevent );
1175
- // <span class="ref">required, inserts component object within calendar object</span>
1176
- ...
1177
- </p>
1178
- <br />
1179
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1180
-
1181
- <a name="vtodo"></a><h4>3.1.1.3 vtodo</h4>
1182
- <p class="label">Format 1</p>
1183
- Create a new <a href="#VTODO">VTODO</a> object using a calendar factory-method, returning a reference to the new component.
1184
- <p class="format">newComponent( 'vtodo' )</p>
1185
- <p class="label">Example</p>
1186
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1187
- $vcalendar = new vcalendar( $config );
1188
- ...
1189
- $vtodo = & $vcalendar->newComponent( 'vtodo' );
1190
- ...
1191
- </p>
1192
- <p class="label">Format 2</p>
1193
- Create a new <a href="#VTODO">VTODO</a> object.
1194
- <p class="format">vtodo()</p>
1195
- <p class="label">Example</p>
1196
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1197
- $vcalendar = new vcalendar( $config );
1198
- ...
1199
- $vtodo = new vtodo();
1200
- ...
1201
- $vcalendar->setComponent( $vtodo );
1202
- // <span class="ref">required, inserts component object within calendar object</span>
1203
- ...
1204
- </p>
1205
- <br />
1206
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1207
-
1208
- <a name="vjournal"></a><h4>3.1.1.4 vjournal</h4>
1209
- <p class="label">Format 1</p>
1210
- Create a new <a href="#VJOUNAL">VJOURNAL</a> object using a calendar factory-method, returning a reference to the new component.
1211
- <p class="format">newComponent( 'vjournal' )</p>
1212
- <p class="label">Example</p>
1213
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1214
- $vcalendar = new vcalendar( $config );
1215
- ...
1216
- $vjournal = & $vcalendar->newComponent( 'vjournal' );
1217
- ...
1218
- </p>
1219
- <p class="label">Format 2</p>
1220
- Create a new <a href="#VJOURNAL">VJOURNAL</a> object.
1221
- <p class="format">vjournal()</p>
1222
- <p class="label">Example</p>
1223
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1224
- $vcalendar = new vcalendar( $config );
1225
- ...
1226
- $vjournal = new vjournal();
1227
- ...
1228
- $vcalendar->setComponent( $vjournal );
1229
- ...
1230
- </p>
1231
- <br />
1232
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1233
-
1234
- <a name="vfreebusy"></a><h4>3.1.1.5 vfreebusy</h4>
1235
- <p class="label">Format 1</p>
1236
- Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object using a calendar factory-method, returning a reference to the new component.
1237
- <p class="format">newComponent( 'vfreebusy' )</p>
1238
- <p class="label">Example</p>
1239
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1240
- $vcalendar = new vcalendar( $config );
1241
- ...
1242
- $vfreebusy = & $vcalendar->newComponent( 'vfreebusy' );
1243
- ...
1244
- </p>
1245
- <p class="label">Format 2</p>
1246
- Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object.
1247
- <p class="format">vfreebusy()</p>
1248
- <p class="label">Example</p>
1249
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1250
- $vcalendar = new vcalendar( $config );
1251
- ...
1252
- $vfreebusy = new vfreebusy();
1253
- ...
1254
- $vcalendar->setComponent( $vfreebusy );
1255
- // <span class="ref">required, inserts component object within calendar object</span>
1256
- ...
1257
- </p>
1258
- <br />
1259
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1260
-
1261
- <a name="valarm"></a><h4>3.1.1.6 valarm</h4>
1262
- <p class="label">Format 1</p>
1263
- Create a new <a href="#VALARM">VALARM</a> object using a component factory-method, returning a reference to the new (sub-)component.
1264
- <p class="format">newComponent( 'valarm' )</p>
1265
- <p class="label">Example</p>
1266
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1267
- $vcalendar = new vcalendar( $config );
1268
- ...
1269
- $vevent = & $vcalendar->newComponent( 'vevent' );
1270
- ...
1271
- $valarm = & $vevent->newComponent( 'valarm' );
1272
- ...
1273
- </p>
1274
- <p class="label">Format 2</p>
1275
- Create a new <a href="#VALARM">VALARM</a> object.
1276
- <p class="format">valarm()</p>
1277
- <p class="label">Example</p>
1278
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1279
- $vcalendar = new vcalendar( $config );
1280
- ...
1281
- $vevent = new vevent();
1282
- ...
1283
- $valarm = new valarm();
1284
- ...
1285
- $vevent->setComponent( $valarm );
1286
- // <span class="ref">required, inserts subcomponent object within component object</span>
1287
- $vcalendar->setComponent( $vevent );
1288
- // <span class="ref">required, inserts component object within calendar object</span>
1289
- ...
1290
- </p>
1291
- <br />
1292
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1293
-
1294
- <a name="vtimezone"></a><h4>3.1.1.7 vtimezone</h4>
1295
- <p class="label">Format 1</p>
1296
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object using a calendar factory-method, returning a reference to the new component.
1297
- <p class="format">newComponent( 'vtimezone' )</p>
1298
- <p class="label">Example</p>
1299
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1300
- $vcalendar = new vcalendar( $config );
1301
- ...
1302
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
1303
- ...
1304
- </p>
1305
- <p class="label">Format 2</p>
1306
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object.
1307
- <p class="format">vtimezone()</p>
1308
- <p class="label">Example</p>
1309
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1310
- $vcalendar = new vcalendar( $config );
1311
- ...
1312
- $vtimezone = new vtimezone();
1313
- ...
1314
- $vcalendar->setComponent( $vtimezone );
1315
- // <span class="ref">required, inserts component object within calendar object</span>
1316
- ...
1317
- </p>
1318
- <br />
1319
- <h5>Auto create timezone components</h5>
1320
- It is possible to auto create timezone components, using a function in iCalUtilityFunctions class, createTimezone,
1321
- and utilizing The PHP DateTimeZone class (PHP 5 >= 5.2.0).
1322
- <p class="label">Format</p>
1323
- <p class="format">iCalUtilityFunctions::createTimezone( vcalendar calendar, string timezone)</p>
1324
- <p class="comment">calendar = vcalendar instance
1325
- timezone = a PHP5 (DateTimeZone) valid timezone
1326
- </p>
1327
- <p class="label">Example</p>
1328
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1329
- $vcalendar = new vcalendar( $config );
1330
- iCalUtilityFunctions::createTimezone( $vcalendar, 'Europe/Stockholm' )</p>
1331
- will results in (when using function createCalendar/returnCalendar)
1332
- <p class="comment">BEGIN:VTIMEZONE
1333
- TZID:Europe/Stockholm
1334
- BEGIN:STANDARD
1335
- DTSTART:20101031T020000
1336
- TZOFFSETFROM:+0200
1337
- TZOFFSETTO:+0100
1338
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
1339
- TZNAME:CET
1340
- END:STANDARD
1341
- BEGIN:DAYLIGHT
1342
- DTSTART:20100328T030000
1343
- TZOFFSETFROM:+0100
1344
- TZOFFSETTO:+0200
1345
- RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
1346
- TZNAME:CEST
1347
- END:DAYLIGHT
1348
- END:VTIMEZONE</p>
1349
- <br />
1350
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1351
-
1352
- <a name="standard"></a><h4>3.1.1.8 standard</h4>
1353
- <p class="label">Format 1</p>
1354
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> <b>standard</b> object using a component factory-method, returning a reference to the new (sub-)component.
1355
- <p class="format">newComponent( 'standard' )</p>
1356
- <p class="label">Example</p>
1357
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1358
- $vcalendar = new vcalendar( $config );
1359
- ...
1360
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
1361
- ...
1362
- $standard = & $vtimezone->newComponent( 'standard' );
1363
- ...
1364
- $daylight = & $vtimezone->newComponent( 'daylight' );
1365
- ...
1366
- </p>
1367
- <p class="label">Format 2</p>
1368
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> STANDARD object.
1369
- <p class="format">vtimezone( 'standard' )</p>
1370
- <p class="label">Example</p>
1371
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1372
- $vcalendar = new vcalendar( $config );
1373
- ...
1374
- $vtimezone = new vtimezone();
1375
- ...
1376
- $standard = new vtimezone( 'standard' );
1377
- ...
1378
- $vtimezone->setComponent( $standard );
1379
- // <span class="ref">required, inserts subcomponent object within component object</span>
1380
- $daylight = new vtimezone( 'daylight' );
1381
- ...
1382
- $vtimezone->setComponent( $daylight );
1383
- // <span class="ref">required, inserts subcomponent object within component object</span>
1384
- $vcalendar->setComponent( $vtimezone );
1385
- // <span class="ref">required, inserts component object within calendar object</span>
1386
- ...
1387
- </p>
1388
- <br />
1389
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1390
-
1391
- <a name="daylight"></a><h4>3.1.1.9 daylight</h4>
1392
- <p class="label">Format 1</p>
1393
- Create a new <a name="VTIMEZONE">VTIMEZONE</a> <b>daylight</b> object using a component factory-method, returning a reference to the new (sub-)component.
1394
- <p class="format">newComponent( 'standard' )</p>
1395
- <p class="label">Example</p>
1396
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1397
- $vcalendar = new vcalendar( $config );
1398
- ...
1399
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
1400
- ...
1401
- $standard = & $vtimezone->newComponent( 'standard' );
1402
- ...
1403
- $daylight = & $vtimezone->newComponent( 'daylight' );
1404
- ...
1405
- </p>
1406
- <p class="label">Format 2</p>
1407
- Create a new <a href="#VTIMEZONE">VTIMEZONE</a> DAYLIGHT object.
1408
- <p class="format">vtimezone( 'daylight' )</p>
1409
- <p class="label">Example</p>
1410
- <p class="example"></p>
1411
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1412
- $vcalendar = new vcalendar( $config );
1413
- ...
1414
- $vtimezone = new vtimezone();
1415
- ...
1416
- $standard = new vtimezone( 'standard' );
1417
- ...
1418
- $vtimezone->setComponent( $standard );
1419
- $daylight = new vtimezone( 'daylight' );
1420
- ...
1421
- $vtimezone->setComponent( $daylight );
1422
- $vcalendar->setComponent( $vtimezone );
1423
- ...
1424
- </p>
1425
- <br />
1426
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>
1427
-
1428
-
1429
- <a name="Calendar_property_functions"></a><h3>3.1.2 Calendar property functions</h3>
1430
-
1431
- <a name="deleteProperty"></a><h4>3.1.2.1 deleteProperty</h4>
1432
- General calendar deleteProperty function, simplifying removal of calendar properties.<br />
1433
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1434
- <p class="label">Format</p>
1435
- <p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
1436
- <p class="comment">propName - case independent, rfc2445 component property names,
1437
- unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1438
- order - if missing 1st/next occurrence,
1439
- used with multiple (property) occurrences
1440
- </p>
1441
- <p class="label">Example 1</p>
1442
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1443
- $vcalendar = new vcalendar( $config );
1444
- $vcalendar->parse();
1445
- if( !$vcalendar->deleteProperty( &quot;method&quot; ))
1446
- &nbsp;&nbsp;echo "METHOD property not found";
1447
- .. .
1448
- </p>
1449
- <br />
1450
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1451
-
1452
- <a name="getProperty"></a><h4>3.1.2.2 getProperty</h4>
1453
- <p class="label">Format 1</p>
1454
- General calendar getProperty function, simplifying fetch of calendar properties.<br />
1455
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1456
- <p class="format">getProperty( [ string PropName [, int order=1 [, bool complete=FALSE ]]] )</p>
1457
- <p class="comment">propName - case independent, rfc2445 component property names,
1458
- unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1459
- order - if missing 1st/next occurrence,
1460
- used with multiply (property) occurrences
1461
- complete - FALSE (default) : output only property value
1462
- - TRUE : output =
1463
- array( &quot;value&quot;=&gt; &lt;value&gt; ,&quot;params&quot; =&gt; &lt;parameter array&gt;)
1464
- </p>
1465
- <p class="label">Example 1</p>
1466
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1467
- $vcalendar = new vcalendar( $config );
1468
- $vcalendar->parse();
1469
- $calscale = $vcalendar->getProperty( &quot;calscale&quot; );
1470
- .. .
1471
- </p>
1472
- <p class="label">Example 2</p>
1473
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1474
- $vcalendar = new vcalendar( $config );
1475
- $vcalendar->parse();
1476
- while( $xprop = $vcalendar->getProperty( )) { // <span class="ref">get x-properties in order.. .</span>
1477
- .. .
1478
- </p>
1479
- <p class="label">Format 2</p>
1480
- Ability to fetch specific property (unique) values and number of ocurrencies,
1481
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#DTSTART">DTSTART</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>,
1482
- <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a> or &quot;RECURRENCE-ID-UID&quot; (alt. &quot;R-UID&quot; ) from <b>ALL</b> components within calendar.<br />
1483
- Outputs an array( *[&lt;unique-property-value&gt; =&gt; &lt;number of ocurrency&gt;] )<br />or an empty array if no hits.<br />
1484
- If a property contains multiple values (ex. &quot;RESOURCES:pc,developer&quot; or &quot;CATAGORIES:course1,courseB&quot;), they are split into unique values.
1485
- <p class="format">getProperty( string PropName )</p>
1486
- <p class="comment">propName - case independent, above
1487
- <a href="#DTSTART">DTSTART</a> as argument returns dates, in format &quot;YYYYMMDD&quot;,
1488
- &quot;RECURRENCE-ID-UID&quot;returns <a href="#UID">UID</a> values for component(-s) where <a href="#RECURRENCE-ID">RECURRENCE-ID</a> is set.
1489
- <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values are prefixed by protocol ex.&quot;MAILTO:chair@ical.net&quot;.
1490
- </p>
1491
- <br />
1492
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1493
-
1494
- <a name="setProperty"></a><h4>3.1.2.3 setProperty</h4>
1495
- General calendar setProperty function,simplifying insert of calendar properties.<br />
1496
- A successful update returns TRUE.
1497
- <p class="label">Format</p>
1498
- <p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
1499
- propName case independent, strict rfc2445 calendar property names, unknown propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
1500
- <p class="label">Example</p>
1501
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1502
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1503
- $vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
1504
- </p>
1505
- <br />
1506
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1507
-
1508
- <a name="CALSCALE"></a><h4>3.1.2.4 CALSCALE</h4>
1509
- This property defines the calendar scale used for the calendar information specified in the iCalendar object.
1510
- <br /><br />
1511
- The default value is &quot;GREGORIAN&quot;, implied when missing.
1512
- <h5>Delete CALSCALE</h5>
1513
- Remove CALSCALE from component.
1514
- <p class="label">Format</p>
1515
- <p class="format">deleteProperty( &quot;calscale&quot; )</p>
1516
- <p class="label">Example</p>
1517
- <p class="example">$vcalendar->deleteProperty( &quot;CALSCALE&quot; );</p>
1518
- <h5>Get Calscale</h5>
1519
- Fetch property value.
1520
- <p class="label">Format</p>
1521
- <p class="format">getProperty( &quot;calscale&quot; )</p>
1522
- <p class="label">Example</p>
1523
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1524
- $vcalendar = new vcalendar( $config );
1525
- $vcalendar->parse();
1526
- $calscale = $vcalendar->getProperty( &quot;calscale&quot; );
1527
- .. .
1528
- </p>
1529
- <h5>Set CALSCALE</h5>
1530
- Insert property value.
1531
- <p class="label">Format</p>
1532
- <p class="format">setProperty( &quot;calscale&quot;, string value )</p>
1533
- <p class="label">Example</p>
1534
- <p class="example">
1535
- $config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
1536
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1537
- $vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
1538
- .. .
1539
- </p>
1540
- <br />
1541
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1542
-
1543
-
1544
- <a name="METHOD"></a><h4>3.1.2.5 METHOD</h4>
1545
- This property defines the iCalendar object method associated with the calendar object.
1546
- <br /><br />
1547
- METHOD property (value PUBLISH etc.) may be required when importing iCal files
1548
- into some calendaring software (MS etc.), as well as <a href="#X-PROPERTY">x-properties</a>
1549
- "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE"
1550
- and (auto created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
1551
- <h5>Delete METHOD</h5>
1552
- Remove METHOD from component.
1553
- <p class="label">Format</p>
1554
- <p class="format">deleteProperty( &quot;METHOD&quot; )</p>
1555
- <p class="label">Example</p>
1556
- <p class="example">$vcalendar->deleteProperty( &quot;METHOD&quot; );</p>
1557
- <h5>Get METHOD</h5>
1558
- Fetch property value.
1559
- <p class="label">Format</p>
1560
- <p class="format">getProperty( &quot;method&quot; );</p>
1561
- <p class="label">Example</p>
1562
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
1563
- $vcalendar = new vcalendar( $config );
1564
- $vcalendar->parse();
1565
- $method = $vcalendar->getProperty( &quot;method&quot; )
1566
- .. .
1567
- </p>
1568
- <h5>Set METHOD</h5>
1569
- Insert property value.
1570
- <p class="label">Format</p>
1571
- <p class="format">setProperty( &quot;method&quot;, string value )</p>
1572
- <p class="label">Example</p>
1573
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
1574
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1575
- $vcalendar->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; )
1576
- </p>
1577
- <br />
1578
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1579
-
1580
-
1581
- <a name="VERSION"></a><h4>3.1.2.6 VERSION</h4>
1582
- This property specifies the identifier corresponding to the highest version number or the minimum
1583
- and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.<br />
1584
- This property is always placed first in the calendar file.<br />
1585
- <h5>Get Version</h5>
1586
- Fetch property value.
1587
- <p class="label">Format</p>
1588
- <p class="format">getProperty( &quot;version&quot; )</p>
1589
- <p class="label">Example</p>
1590
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1591
- $vcalendar = new vcalendar( $config );
1592
- $vcalendar->parse();
1593
- $version = $vcalendar->getProperty( &quot;version&quot; )
1594
- .. .
1595
- </p>
1596
- <h5>Set Version</h5>
1597
- Insert property value.
1598
- Only version 2.0 valid, version is <b>AUTO</b> generated at calendar creation.
1599
- <p class="label">Format</p>
1600
- <p class="format">setProperty( &quot;version&quot;, string version )</p>
1601
- <p class="label">Example</p>
1602
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
1603
- $vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
1604
- $vcalendar->setProperty( &quot;version&quot;, &quot;2.0&quot; )
1605
- </p>
1606
- <br />
1607
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1608
-
1609
- <a name="X-PROPERTY"></a><h4>3.1.2.7 X-PROPERTY</h4>
1610
- A calendar, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a calendar,
1611
- an x-prop, with an unique name, can occur only once but the number of x-props are unlimited.
1612
- <br /><br />
1613
- X-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE" may be required when importing iCal files
1614
- into some calendaring software (MS etc.), as well as <a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
1615
- and (auto created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
1616
- <h5>Delete X-PROPERTY</h5>
1617
- Remove X-PROPERTY from calendar.
1618
- <p class="label">Format</p>
1619
- <p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
1620
- <p class="label">Example 1</p>
1621
- <p class="example">$vcalendar->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
1622
- <p class="label">Example 2</p>
1623
- Deleting all x-properties.
1624
- <p class="example">while( $vcalendar->deleteProperty())
1625
- continue;</p>
1626
- <h5>Get X-PROPERTY</h5>
1627
- Fetch property value.
1628
- <p class="label">Format</p>
1629
- <p class="format">getProperty()<br />
1630
- getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
1631
- <p class="comment">output = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
1632
- <p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
1633
- <p class="comment">output = array( propertyName<span class="ref">1</span>
1634
- , array( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
1635
- , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))
1636
- </p>
1637
- <p class="label">Example 1</p>
1638
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1639
- $vcalendar = new vcalendar( $config );
1640
- $vcalendar->parse();
1641
- while( $xprop = $vcalendar->getProperty( )) { //<span class="ref">read all x-props in a loop</span>
1642
- .. .
1643
- </p>
1644
- <p class="comment">$xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
1645
- <p class="label">Example 2</p>
1646
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1647
- $vcalendar = new vcalendar( $config );
1648
- $vcalendar->parse();
1649
- if( $xprop = $vcalendar->getProperty( &quot;X-WR-TIMEZONE&quot; )) {
1650
- //<span class="ref">if exists, read X-WR-TIMEZONE x-prop</span>
1651
- .. .
1652
- </p>
1653
- <p class="comment">$xprop = array( &quot;X-WR-TIMEZONE&quot;, propertyData<span class="ref">2</span> )</p>
1654
- <p class="label">Example 3</p>
1655
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1656
- $vcalendar = new vcalendar( $config );
1657
- $vcalendar->parse();
1658
- while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
1659
- .. .
1660
- </p>
1661
- <p class="comment">$xprop = array( propertyName<span class="ref">1</span>
1662
- , array( &quot;value &quot; =&gt; propertyData<span class="ref">2</span> )
1663
- , &quot;params &quot;=&gt; params<span class="ref">&nbsp;3</span> )
1664
- </p>
1665
- <h5>Set X-PROPERTY</h5>
1666
- Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
1667
- PropertyNames are always stored upperCase, ex. x-wr-calname =&gt; X-WR-CALNAME.
1668
- <p class="label">Format</p>
1669
- <p class="format">setProperty( propertyName, propertyData [, params ] )</p>
1670
- <p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
1671
- propertyData<span class="ref">2</span> = Value type TEXT
1672
- params<span class="ref">3</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
1673
- xparam = *[ xparamkey =&gt; xparamvalue ]
1674
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
1675
- </p>
1676
- <p class="label">Example</p>
1677
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
1678
- $vcalendar = new vcalendar( $config ); // initiate new CALENDAR
1679
- // <span class="ref">set some X-properties.. .</span>
1680
- $vcalendar->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; )
1681
- $vcalendar->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; );
1682
- $vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
1683
- </p>
1684
- <br />
1685
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>
1686
-
1687
- <a name="Calendar_component_functions"></a><h3>3.1.3 Calendar component functions</h3>
1688
-
1689
- <a name="deleteComponent"></a><h4>3.1.3.1 deleteComponent</h4>
1690
- Remove component from calendar.<br />
1691
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1692
- <p class="label">format 1</p>
1693
- Remove component with order number (1st=1, 2nd=2.. .).
1694
- <p class="format">deleteComponent( int orderNumber )</p>
1695
- <p class="label">format 2</p>
1696
- Remove component with component type (e.g. &quot;vevent&quot;) and order 1 alt. suborder number.
1697
- <p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
1698
- <p class="label">format 3</p>
1699
- Remove component with <a href="#UID">UID</a>. N.B <a href="#UID">UID</a> is NOT set for
1700
- <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
1701
- <p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
1702
- <p class="label">Example 1</p>
1703
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1704
- $vcalendar = new vcalendar( $config );
1705
- $vcalendar->parse();
1706
- $vcalendar->deleteComponent( 1 );
1707
- $vcalendar->deleteComponent( &quot;vtodo&quot;, 2 );
1708
- $vcalendar->deleteComponent( &quot;20070803T194810CEST-0123U3PXiX@domain.com&quot;);
1709
- .. .
1710
- </p>
1711
- <p class="label">Example 2</p>
1712
- Deleting all components, using format 2 without order number.
1713
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1714
- $vcalendar = new vcalendar( $config );
1715
- $vcalendar->parse();
1716
- .. .
1717
- while( $vcalendar->deleteComponent( &quot;vevent&quot;))
1718
- continue;
1719
- .. .
1720
- $vtodo = $vcalendar->getComponent( 'vtodo' );
1721
- while( $vtodo->deleteComponent( &quot;valarm&quot;))
1722
- continue;
1723
- .. .
1724
- </p>
1725
- <br />
1726
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1727
-
1728
- <a name="getComponent"></a><h4>3.1.3.2 getComponent</h4>
1729
- Get component from calendar.<br />
1730
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
1731
-
1732
- <p class="label">format 1</p>
1733
- Get next component, until end-of-components.
1734
- <p class="format">getComponent()</p>
1735
-
1736
- <p class="label">format 2</p>
1737
- Get specific component with order number (1st=1, 2nd=2.. .).
1738
- <p class="format">getComponent( int orderNumber )</p>
1739
-
1740
- <p class="label">format 3</p>
1741
- Get (first/next) component with component type (until end-of-components) alt.
1742
- get specific component with component type and suborder number (1st=1, 2nd=2.. .).
1743
- <p class="format">getComponent( string componentType [, int componentSuborderNumber])</p>
1744
-
1745
- <p class="label">format 4</p>
1746
- Get (first/next) component with <a href="#UID">UID</a> as key. (<a href="#UID">UID</a> is NOT set for
1747
- <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.)
1748
- <p class="format">getComponent( string <a href="#UID">UID</a> )</p>
1749
-
1750
- <p class="label">format 5</p>
1751
- Get (first/next) component based on specific property contents;
1752
- <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#CREATED">CREATED</a>, <a href="#COMPLETED">COMPLETED</a>, <a href="#DTSTAMP">DTSTAMP</a>, <a href="#LAST-MODIFIED">LAST-MODIFIED</a>, <a href="#RECURRENCE-ID">RECURRENCE-ID</a>,
1753
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="RESOURCES">RESOURCES</a>, <a href="STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a>.
1754
- For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit exists.
1755
- For the other, non-date, properties an exact (strict case) match is required.<br />
1756
- Note, <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values must be prefixed by protocol ex.&quot;MAILTO:chair@ical.net&quot;.
1757
-
1758
- <p class="format">getComponent( array(*[string propertyName =&gt; string uniqueValue] ))</p>
1759
- <p class="comment">propertyName = property name, above
1760
- propertyData = unique property value (strict case),
1761
- date format &quot;YYYYMMDD&quot; (if any side is DATE, only dates are used),
1762
- datetime format &quot;YYYYMMDDTHHMMSS&quot;
1763
- </p>
1764
- <p class="label">Example 1</p>
1765
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1766
- $vcalendar = new vcalendar( $config );
1767
- $vcalendar->parse();
1768
- while( $comp = $vcalendar->getComponent()) {
1769
- .. .
1770
- }
1771
- .. .
1772
- </p>
1773
- <p class="label">Example 2</p>
1774
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1775
- $vcalendar = new vcalendar( $config );
1776
- $vcalendar->parse();
1777
- if( $comp = $vcalendar->getComponent( 1 )) {
1778
- .. .
1779
- }
1780
- .. .
1781
- </p>
1782
- <p class="label">Example 3</p>
1783
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1784
- $vcalendar = new vcalendar( $config );
1785
- $vcalendar->parse();
1786
- if( $comp = $vcalendar->getComponent( &quot;vtodo&quot;, 2 ) {
1787
- .. .
1788
- }
1789
- .. .
1790
- </p>
1791
- <p class="label">Example 4</p>
1792
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1793
- $vcalendar = new vcalendar( $config );
1794
- $vcalendar->parse();
1795
- $uid = &quot;20070803T194810CEST-0123U3PXiX@domain.com&quot;;
1796
- if($comp = $vcalendar->getComponent( $uid ){
1797
- .. .
1798
- }
1799
- .. .
1800
- </p>
1801
- <br />
1802
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1803
-
1804
- <a name="newComponent"></a><h4>3.1.3.3 newComponent</h4>
1805
- Create component (<a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> / <a href="#VTIMEZONE">VTIMEZONE</a>)
1806
- using a calendar factory-method, returning a reference to the new component.
1807
- <p class="label">Format</p>
1808
- <p class="format">newComponent( string componentType )</p>
1809
- <p class="label">Example</p>
1810
- <p class="example">$config = array( 'unique_id' => 'domain.org' );
1811
- $vcalendar = new vcalendar( $config );
1812
- ...
1813
- $vevent = & $vcalendar->newComponent( 'vevent' );
1814
- ...
1815
- </p>
1816
-
1817
- <br />
1818
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1819
-
1820
- <a name="selectComponents"></a><h4>3.1.3.4 selectComponents</h4>
1821
- <p class="label">Format 1</p>
1822
- Selects <a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> components from calendar on based on <i>dates</i> (notice <a href="#date_restriction">date restriction</a>), based on the initial <a href="#DTSTART">DTSTART</a> property
1823
- along with the <a href="#RRULE">RRULE</a>, <a href="#RDATE">RDATE</a>, <a href="#EXDATE">EXDATE</a> and <a href="#EXRULE">EXRULE</a> properties in the component.
1824
- If property <a href="#DTSTART">DTSTART</a> is missing in a <a href="#VTODO">VTODO</a> component then <a href="#DTSTART">DUE</a> is used.<br />
1825
- <br />
1826
- Limitation; if using component properties <a href="#UID">UID</a> in combination with <a href="#SEQUENCE">SEQUENCE</a> and <a href="#RECURRENCE-ID">RECURRENCE-ID</a> (i.e an individual instance within the recurrence set),
1827
- the use of recurrence-id parameter &quot;RANGE&quot; (&quot;THISANDPRIOR&quot; and/or &quot;THISANDFUTURE&quot;) has no effect.<br />
1828
- <br />
1829
- This function requires calendar components in order, i.e. execute <a href="#sort">sort</a> before &quot;selectComponents&quot;, notice example below.<br />
1830
- <br />
1831
- FALSE is returned if no selected component exists.
1832
- <p class="format">selectComponents([ int startYear, int startMonth, int startDay
1833
- [, int endYear, int endMonth, int endDay
1834
- [, mixed cType [, bool flat [,bool any [,bool split]]]]]])
1835
- </p>
1836
- Returns an array with components (events.. .).
1837
- For all recurrent instances of a calendar component, an x-property,
1838
- &quot;X-CURRENT-DTSTART&quot; and opt. also &quot;X-CURRENT-DTEND&quot; alt. &quot;X-CURRENT-DUE&quot;,
1839
- has been created with a TEXT content, &quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;
1840
- showing the current start and opt. also end alt. due date.<br />
1841
- Also a &quot;X-RECURRENCE&quot; x-property is set with order number (valid if selectComponents is called from DTSTART date).
1842
- <p class="comment">startYear : start year (4*digit), default current year
1843
- startMonth : start month (1-2*digit), default current month
1844
- startDay : start day (1-2*digit), default current day
1845
- endYear : end year (4*digit), default startYear
1846
- endMonth : end month (-2*digit), default startMonth
1847
- endDay : end day (1-2*digit), default startDay
1848
- cType : calendar component type(-s), string/array
1849
- ('vevent', 'vtodo', 'vjournal', 'vfreebusy')
1850
- FALSE (default) all
1851
- flat : TRUE =&gt; output : array[] (ignores split)
1852
- FALSE (default) =&gt;
1853
- output : array[Year][Month][Day][]
1854
- any : TRUE (default) -
1855
- select component that occurs within period
1856
- FALSE -
1857
- only components that starts (DTSTART) within period
1858
- split : TRUE (default) -
1859
- one component copy for every day it occurs
1860
- within the period (implies flat=FALSE)
1861
- FALSE - one occurrence of component in output array
1862
- ,start date/recurrence date
1863
- </p>
1864
- <p class="label">Example</p>
1865
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
1866
- &quot;directory&quot; =&gt; &quot;import&quot;,
1867
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1868
- $vcalendar = new vcalendar( $config );
1869
- $vcalendar->parse();
1870
- $vcalendar->sort();
1871
- $events_arr = $vcalendar->selectComponents( 2007,11,1,2007,11,30,'vevent');
1872
- // <span class="comment">select all events occurring 1-30 nov. 2007</span>
1873
- foreach( $events_arr as $year =&gt; $year_arr ) {
1874
- foreach( $year_arr as $month =&gt; $month_arr ) {
1875
- foreach( $month_arr as $day =&gt; $day_arr ) {
1876
- foreach( $day_arr as $event ) {
1877
- $currddate = $event->getProperty( 'x-current-dtstart' );
1878
- <span class="comment">// if member of a recurrence set, returns
1879
- // array(' x-current-dtstart',
1880
- // &lt;(string) date(&quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;)&gt;)</span>
1881
- $startDate = $event->getProperty( 'dtstart' );
1882
- $summary = $event->getProperty( 'summary' );
1883
- $description = $event->getProperty( 'description' );
1884
- .. .
1885
- </p>
1886
- <p class="label">format 2</p>
1887
- Using this format, the function selects components based on specific property value(-s),
1888
- <a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>, <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a> or <a href="#UID">UID</a>.
1889
- For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit exists.
1890
- For the other properties an exact (strict case) match is required.<br />
1891
- <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> search values must be prefixed by protocol ex. &quot;MAILTO:chair@ical.net&quot;.
1892
- Multiple search properties may coexist.
1893
- <p class="format">selectComponents( searchArray )</p>
1894
- Outputs an array of matched (unique) components in <a href="#UID">UID</a> order.
1895
- <p class="comment">searchArray : array( propertyName =&gt; propertyValue )
1896
- propertyName : above (any case)
1897
- propertyValue : string value / array( *[string value] )
1898
- </p>
1899
- <p class="label">Example</p>
1900
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
1901
- &quot;directory&quot; =&gt; &quot;import&quot;,
1902
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1903
- $vcalendar = new vcalendar( $config );
1904
- $vcalendar->parse();
1905
- $vcalendar->sort();
1906
- $searchArray = array( &quot;PRIORITY&quot; =&gt; array( 1, 2, 3, 4, 5 ));
1907
- $mediumHighPrioArr = $vcalendar->selectComponents( $searchArray );
1908
- // <span class="comment">select all components with high (1) and medium priority</span>
1909
- if( !empty( $mediumHighPrioArr )) {
1910
- $mediumHighPrioCal = new vcalendar();
1911
- $mediumHighPrioCal-&gt;setProperty("X-WR-CALDESC", "High-Medium events");
1912
- foreach( $mediumHighPrioArr as $mediumHighPrioComponent )
1913
- $mediumHighPrioCal-&gt;setComponent( $mediumHighPrioComponent );
1914
- $mediumHighPrioCal-&gt;returnCalendar();
1915
- }
1916
- .. .
1917
- </p>
1918
- <br />
1919
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1920
-
1921
- <a name="setComponent"></a><h4>3.1.3.5 setComponent</h4>
1922
- Replace or update component in calendar.
1923
- Also add calendar component to calendar when calendar component is created with the procedural (<b>non</b>-factory) method,
1924
- see example <a href="#vevent">VEVENT</a>, format 2.
1925
- A successful update return TRUE.
1926
- <p class="label">format 1</p>
1927
- Insert last in component chain.
1928
- <p class="format">setComponent( component )
1929
- addComponent( component ) // <span class="ref">alias</span>
1930
- </p>
1931
- <p class="comment">addComponent, may be removed i future versions.</p>
1932
- <p class="label">format 2</p>
1933
- Insert/replace component with order number (1st=1, 2nd=2.. .).
1934
- If replace and orderNumber is not found, component is inserted last in chain.
1935
- <p class="format">setComponent( component, int orderNumber )</p>
1936
- <p class="label">format 3</p>
1937
- Replace component with component type and 1st alt. component order number.
1938
- If orderNumber is not found, component is inserted last in chain.
1939
- <p class="format">setComponent( component, string componentType [,int component suborder no])</p>
1940
- <p class="label">format 4</p>
1941
- Replace component with <a href="#UID">UID</a>.
1942
- N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
1943
- If <a href="#UID">UID</a> is not found, component is inserted last in chain.
1944
- <p class="format">setComponent( component, string <a href="#UID">UID</a> )</p>
1945
- <p class="label">Example</p>
1946
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1947
- $vcalendar = new vcalendar( $config );
1948
- $vcalendar->parse();
1949
- $vevent = vcalendar->getComponent( 1 );&nbsp;//<span class="comment">fetch first EVENT</span>
1950
- $vevent->setProperty( &quot;dtstart&quot;&nbsp;//<span class="comment">update <a href="#DTSTART">DTSTART</a> property</span>
1951
- , 2006, 12, 24, 19, 30, 00 );
1952
- .. .
1953
- $vcalendar->setComponent( $vevent, 1 ); // replace first component
1954
- .. .
1955
- </p>
1956
- <br />
1957
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>
1958
-
1959
- <a name="Calendar_inputoutput_functions"></a><h3>3.1.4 Calendar input/output functions</h3>
1960
-
1961
- <a name="parse_merge"></a><h4>3.1.4.1 parse and merge</h4>
1962
- Parse iCal file(-s) or string/array calendarContent into a single vcalendar object (components, properties and parameters),
1963
- including multiple vcalendars (within a single ICS file) parse, e.g. Oracle Calendar exports.
1964
-
1965
- <br /><br />
1966
- As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. A remote file, URL, <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.! Recommendation is to download (cache) remote file before parsing, due to execution time and control.
1967
- <br /><br />
1968
- If missing, component property <a href="#UID">UID</a> is created when parsing. For that reason <a href="#Unique_id">UNIQUE_ID</a> might need to be set before parsing, Se examples below.
1969
- <br /><br />
1970
- Notice <a href="#date_restriction">date restriction</a>!
1971
- <br /><br />
1972
- If parse error occurs (like file access error, invalid calendar file or calendar file without components), FALSE is returned.
1973
- <p class="label">Format</p>
1974
- <p class="format">parse( [ mixed textToParse ] )</p>
1975
- <p class="comment">textToParse = string calendarContent
1976
- ex. result from &quot;file_get_contents( 'filename')&quot;
1977
- array calendarContent
1978
- ex. result from &quot;file( 'filename', FILE_IGNORE_NEW_LINES )&quot;</p>
1979
- <p class="label">parse example 1</p>
1980
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot; );
1981
- $vcalendar = new vcalendar( $config );
1982
- $vcalendar->parse();
1983
- .. .
1984
- </p>
1985
- <p class="label">parse example 2</p>
1986
- <p class="example">
1987
- $config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
1988
- &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
1989
- $vcalendar = new vcalendar( $config );
1990
- $vcalendar->parse();
1991
- .. .
1992
- </p>
1993
- <p class="label">parse example 3</p>
1994
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
1995
- &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
1996
- $vcalendar = new vcalendar( $config );
1997
- ...
1998
- $str = array(
1999
- 'BEGIN:VCALENDAR',
2000
- 'PRODID:-//test.org//NONSGML kigkonsult.se iCalcreator 2.10//',
2001
- 'VERSION:2.0',
2002
- 'BEGIN:VEVENT',
2003
- 'DTSTART:20101224T190000Z',
2004
- 'DTEND:20101224T200000Z',
2005
- 'DTSTAMP:20101020T103827Z',
2006
- 'UID:20101020T113827-1234GkdhFR@test.org',
2007
- 'DESCRIPTION:example',
2008
- 'END:VEVENT',
2009
- 'END:VCALENDAR');
2010
- $vcalendar->parse( $str );
2011
- ...
2012
- </p>
2013
- <p class="label">merge example</p>
2014
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2015
- &quot;directory&quot; =&gt; &quot;import&quot; );
2016
- $vcalendar = new vcalendar( $config );
2017
-
2018
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file1.ics&quot; );
2019
- $vcalendar->parse();
2020
-
2021
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file2.ics&quot; );
2022
- $vcalendar->parse();
2023
-
2024
- $vcalendar->sort();
2025
- $vcalendar->setConfig( &quot;directory&quot;,&nbsp;&quot;export&quot; );
2026
- $vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;icalmerge.ics&quot; );
2027
- $vcalendar->saveCalendar();
2028
- .. .
2029
- </p>
2030
- <br />
2031
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2032
-
2033
- <a name="createCalendar"></a><h4>3.1.4.2 createCalendar</h4>
2034
- Generate and return calendar in a string, testing.. .?
2035
- <p class="label">Format</p>
2036
- <p class="format">createCalendar()</p>
2037
- <p class="label">Example</p>
2038
- <p class="example">.. .
2039
- $str = $vcalendar->createCalendar();
2040
- echo $str;
2041
- </p>
2042
- <br />
2043
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2044
-
2045
- <a name="returnCalendar"></a><h4>3.1.4.3 returnCalendar</h4>
2046
- Redirect calendar content to user browser. Filename, addressed to browser, is auto generated if missing or not set;<br />
2047
- <span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br />
2048
- <p class="label">Format</p>
2049
- <p class="format">returnCalendar( [bool utf8Encode [, bool gzip ]] )</p>
2050
- <p class="comment">utf8Encode = TRUE: utf8 encoded output, FALSE: (default) no encoding
2051
- gzip = TRUE: gzip compressed output and header 'Content-Encoding: gzip' set,
2052
- FALSE: (default) no compressing</p>
2053
- <p class="label">Example 1</p>
2054
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
2055
- $vcalendar = new vcalendar( $config );
2056
- .. .
2057
- $vevent = & $vcalendar->newComponent( 'vevent' );
2058
- $vevent->setProperty( &quot;dtstart&quot;, array( &quot;year&quot; =&gt; 2007
2059
- , &quot;month&quot; =&gt; 4
2060
- , &quot;day&quot; =&gt; 1
2061
- , &quot;hour&quot; =&gt; 19 ));
2062
- $vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
2063
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
2064
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
2065
- .. .
2066
- $vcalendar->returnCalendar();
2067
- </p>
2068
- <p class="label">Example 2</p>
2069
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2070
- &quot;directory&quot; =&gt; &quot;import&quot;,
2071
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2072
- $vcalendar = new vcalendar( $config );
2073
- $vcalendar->parse();
2074
- $utf8Encode = TRUE;
2075
- $hacPar = 'HTTP_ACCEPT_ENCODING';
2076
- if( isset( $_SERVER[$hacPar] ) &amp;&amp;
2077
- ( FALSE !== strpos( strtolower( $_SERVER[$hacPar] ), 'gzip' )))
2078
- $gzip = TRUE;
2079
- else
2080
- $gzip = FALSE;
2081
- $vcalendar->returnCalendar( $utf8Encode, $gzip );
2082
- </p>
2083
- <br />
2084
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2085
-
2086
- <a name="saveCalendar"></a><h4>3.1.4.4 saveCalendar</h4>
2087
- Save ical calendar in a file, uses present directory if directory not set, filename is auto generated if missing or not set;<br />
2088
- <span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br />
2089
- Directory/filename <b>must</b> be writeable, delimiter default PHP constant DIRECTORY_SEPARATOR.
2090
- <br /><br />
2091
- As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. Recommendation is to save to a local file and upload later, due to execution time and control.
2092
- <br /><br />
2093
- If file error occurs, FALSE is returned.
2094
- <p class="label">Format</p>
2095
- <p class="format">saveCalendar ( string directory/FALSE
2096
- [, string filename/FALSE
2097
- [, string delimiter/FALSE ]] )
2098
- </p>
2099
- Parameters for <span class="format">directory/filename/delimiter</span>, kept for backward compatibility,
2100
- may be removed i future versions. Recommendation is to use <span class="format">setConfig</span>, Se
2101
- example below.
2102
- <p class="label">Example</p>
2103
- <p class="example">.. .
2104
- $vcalendar->setConfig( array( &quot;directory&quot; =&gt; &quot;depot&quot;,
2105
- &quot;filename&quot; =&gt; &quot;calendar.ics&quot; ));
2106
- $result = $vcalendar->saveCalendar();
2107
- if( !$result )
2108
- &nbsp;&nbsp;echo &quot;error when saving.. .&quot;
2109
- </p>
2110
- <br />
2111
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2112
-
2113
- <a name="sort"></a><h4>3.1.4.5 sort</h4>
2114
- <p class="label">Format 1</p>
2115
- Sort created/parsed calendar components on the following (prioritized) keys:<br />
2116
- 1 - X-CURRENT-DTSTART - X-CURRENT-DTEND/X-CURRENT-DUE<br />
2117
- &nbsp;&nbsp;&nbsp;&nbsp;(if created in function <a href="#selectComponents">selectComponents</a>)<br />
2118
- 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DTEND">DTEND</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VEVENT">VEVENT</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components)<br />
2119
- 1 - <a href="#DTSTART">DTSTART</a> - <a href="#DUE">DUE</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VTODO">VTODO</a> components)<br />
2120
- 1 - <a href="#DTSTART">DTSTART</a> (<a href="#VJOURNAL">VJOURNAL</a> components)<br />
2121
- 2 - <a href="#CREATED">CREATED</a> / <a href="#DTSTAMP">DTSTAMP</a><br />
2122
- 3 - <a href="#UID">UID</a><br />
2123
- <a href="#VTIMEZONE">VTIMEZONE</a> component(-s) are always sorted first in chain.<br />
2124
- Sub-components (<a href="#VTIMEZONE">STANDARD</a>&nbsp;/&nbsp;<a href="#VTIMEZONE">DAYLIGHT</a>&nbsp;/&nbsp;<a href="#VALARM">ALARM</a>), if exists, are not sorted.
2125
- <p class="format">sort()</p>
2126
- <p class="label">Example</p>
2127
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2128
- &quot;directory&quot; =&gt; &quot;import&quot;,
2129
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2130
- $vcalendar = new vcalendar( $config );
2131
- $vcalendar->parse();
2132
- $vcalendar->sort();
2133
- $vcalendar->returnCalendar();
2134
- </p>
2135
-
2136
- <p class="label">Format 2</p>
2137
- Sort created/parsed calendar components on specific property values and ascending order.
2138
- <p class="format">sort( sortArgument )</p>
2139
- <p class="comment">sortArgument: &quot;<a href="#ATTENDEE">ATTENDEE</a>&quot; / &quot;<a href="#CATEGORIES">CATEGORIES</a>&quot; / &quot;<a href="#DTSTAMP">DTSTAMP</a>&quot; / &quot;<a href="#LOCATION">LOCATION"</a>&quot; /
2140
- &quot;<a href="#ORGANIZER">ORGANIZER</a>&quot; /&quot;<a href="#RESOURCES">RESOURCES</a>&quot; / &quot;<a href="#PRIORITY">PRIORITY</a>&quot; / &quot;<a href="#STATUS">STATUS</a>&quot; / &quot;<a href="#SUMMARY">SUMMARY</a>&quot;
2141
- for a property where multiple ocurrence may exist
2142
- (<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#RESOURCES">RESOURCES</a> ),
2143
- lowest (alphabetic) value is used as sort parameter.
2144
- </p>
2145
- <br />
2146
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2147
-
2148
- <a name="useCachedCalendar"></a><h4>3.1.4.6 useCachedCalendar</h4>
2149
- If recent version of local (non-empty and saved) calendar file exists, an HTTP redirect header is sent otherwise FALSE is returned.
2150
- <p class="label">Format</p>
2151
- <p class="format">useCachedCalendar( [ int timeout ] )
2152
- useCachedCalendar( string directory/FALSE
2153
- , string filename/FALSE
2154
- , string delimiter/FALSE
2155
- [, int timeout ] )
2156
- </p>
2157
- <p class="comment">timeout : default 3600 sec
2158
- Second format with parameters for <span class="format">directory/filename/delimiter</span>,<br />kept for backward compatibility, may be removed i future<br />versions. Recommendation is to use <span class="format">setConfig</span>, Se example below.</span></p>
2159
- <p class="label">Example</p>
2160
- <p class="example">.. .
2161
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2162
- $vcalendar->setConfig( &quot;filename&quot;, &quot;calendar.ics&quot; );
2163
- $vcalendar->useCachedCalendar();
2164
- </p>
2165
- <br />
2166
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>
2167
-
2168
- <a name="Calendar_configuration_functions"></a><h3>3.1.5 Calendar configuration functions</h3>
2169
-
2170
- <a name="configKeys"></a><h4>3.1.5.1 configuration keys</h4>
2171
- All configuration keys (allowEmpty, compsInfo etc.) case independent.
2172
- <br />
2173
- <br />
2174
- <table>
2175
- <tr>
2176
- <td class="bl bb">key</td>
2177
- <td class="bl bb">calendar</td>
2178
- <td class="bl bb">component</td>
2179
- <td class="bl bb">remark</td>
2180
- </tr>
2181
- <tr>
2182
- <td class="bl bb"><a class="ref" href="#allowEmpty">allowEmpty</a></td>
2183
- <td class="bl bb center">*</td>
2184
- <td class="bl bb center">*</td>
2185
- <td class="bl bb ref">&nbsp;</td>
2186
- </tr>
2187
- <tr>
2188
- <td class="bl bb"><a class="ref" href="#Compsinfo">Compsinfo</a></td>
2189
- <td class="bl bb center">*</td>
2190
- <td class="bl bb center">*</td>
2191
- <td class="bl bb ref">getConfig only</td>
2192
- </tr>
2193
- <tr>
2194
- <td class="bl bb"><a class="ref" href="#Delimiter">Delimiter</a></td>
2195
- <td class="bl bb center">*</td>
2196
- <td class="bl bb">&nbsp;</td>
2197
- <td class="bl bb ref">&nbsp;</td>
2198
- </tr>
2199
- <tr>
2200
- <td class="bl bb"><a class="ref" href="#Directory">Directory</a></td>
2201
- <td class="bl bb center">*</td>
2202
- <td class="bl bb">&nbsp;</td>
2203
- <td class="bl bb ref">&nbsp;</td>
2204
- </tr>
2205
- <tr>
2206
- <td class="bl bb"><a class="ref" href="#Filename">Filename</a></td>
2207
- <td class="bl bb center">*</td>
2208
- <td class="bl bb">&nbsp;</td>
2209
- <td class="bl bb ref">&nbsp;</td>
2210
- </tr>
2211
- <tr>
2212
- <td class="bl bb"><a class="ref" href="#Dirfile">Dirfile</a></td>
2213
- <td class="bl bb center">*</td>
2214
- <td class="bl bb">&nbsp;</td>
2215
- <td class="bl bb ref">getConfig only</td>
2216
- </tr>
2217
- <tr>
2218
- <td class="bl bb"><a class="ref" href="#Filesize">Filesize</a></td>
2219
- <td class="bl bb center">*</td>
2220
- <td class="bl bb">&nbsp;</td>
2221
- <td class="bl bb ref">getConfig only</td>
2222
- </tr>
2223
- <tr>
2224
- <td class="bl bb"><a class="ref" href="#Format">Format</a></td>
2225
- <td class="bl bb center">*</td>
2226
- <td class="bl bb">&nbsp;</td>
2227
- <td class="bl bb ref">&nbsp;</td>
2228
- </tr>
2229
- <tr>
2230
- <td class="bl bb"><a class="ref" href="#Language">Language</a></td>
2231
- <td class="bl bb center">*</td>
2232
- <td class="bl bb center">*</td>
2233
- <td class="bl bb ref">&nbsp;</td>
2234
- </tr>
2235
- <tr>
2236
- <td class="bl bb"><a class="ref" href="#NewlineChar">NewlineChar</a></td>
2237
- <td class="bl bb center">*</td>
2238
- <td class="bl bb center">*</td>
2239
- <td class="bl bb ref">&nbsp;</td>
2240
- </tr>
2241
- <tr>
2242
- <td class="bl bb"><a class="ref" href="#dTZID">TZID</a></td>
2243
- <td class="bl bb center">*</td>
2244
- <td class="bl bb center">*</td>
2245
- <td class="bl bb ref">&nbsp;</td>
2246
- </tr>
2247
- <tr>
2248
- <td class="bl bb"><a class="ref" href="#Unique_id">Unique_id</a></td>
2249
- <td class="bl bb center">*</td>
2250
- <td class="bl bb center">*</td>
2251
- <td class="bl bb ref">&nbsp;</td>
2252
- </tr>
2253
- <tr>
2254
- <td class="bl bb"><a class="ref" href="#configURL">URL</a></td>
2255
- <td class="bl bb center">*</td>
2256
- <td class="bl bb">&nbsp;</td>
2257
- <td class="bl bb ref">&nbsp;</td>
2258
- </tr>
2259
- </table>
2260
- <br />
2261
- <br />
2262
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2263
-
2264
- <a name="getConfig"></a><h4>3.1.5.2 getConfig</h4>
2265
- <p class="format">getConfig( [string key )</p>
2266
- <p class="label">Example 1</p>
2267
- <p class="example">.. .
2268
- $filename = $vcalendar->getConfig( 'filename' );<span class="comment">
2269
- .. .</p>
2270
- In this example, notice <a href="#Filename">Filename</a></span>
2271
- <br />
2272
- <p class="label">Example 2</p>
2273
- <p class="example">.. .
2274
- $config = $vcalendar->getConfig();
2275
- .. .</p>
2276
- <p class="comment">Output= array( string key =&gt; mixed value
2277
- *[, string key =&gt; mixed value] )</p>
2278
- <br />
2279
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2280
-
2281
- <a name="initConfig"></a><h4>3.1.5.3 calendar/component initialization</h4>
2282
- <p class="label">Format</p>
2283
- When creating a new calendar.
2284
- <p class="format">vcalendar( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
2285
- <p class="label">Example 1</p>
2286
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2287
- &quot;directory&quot; =&gt; &quot;import&quot;,
2288
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2289
- $vcalendar = new vcalendar( $config );
2290
- .. .
2291
- </p>
2292
- When creating a new calendar component.
2293
- <p class="format">component( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
2294
- <p class="label">Example 2</p>
2295
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
2296
- $vevent = new vevent( $config );
2297
- .. .
2298
- </p>
2299
- <p class="label">Example 3</p>
2300
- <p class="example">. ..
2301
- $config = $vcalendar->getConfig();
2302
- $vevent = new vevent( $config );
2303
- .. .
2304
- </p>
2305
- Only component relevant configuration are set. If using the <a href="#newComponent">newComponent</a> function, configuration is set automatically.
2306
- <br />
2307
- <br />
2308
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2309
-
2310
- <a name="setConfig"></a><h4>3.1.5.4 setConfig</h4>
2311
- A successful &quot;setConfig&quot; returns TRUE.
2312
- <p class="label">Format 1</p>
2313
- <p class="format">setConfig( array( string key=>mixed value *[, string key=>mixed value]))</p>
2314
- <p class="label">Example 1</p>
2315
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2316
- &quot;directory&quot; =&gt; &quot;import&quot;,
2317
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2318
- $vcalendar = new vcalendar();
2319
- $vcalendar->setConfig( $config );
2320
- .. .
2321
- </p>
2322
- <p class="label">Example 2</p>
2323
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
2324
- $vevent = new vevent();
2325
- $vevent->setConfig( $config );
2326
- .. .
2327
- </p>
2328
- <p class="label">Format 2</p>
2329
- <p class="format">setConfig( string key, string value )</p>
2330
- <p class="label">Example 1</p>
2331
- <p class="example">$vcalendar = new vcalendar();
2332
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2333
- .. .
2334
- </p>
2335
- <p class="label">Example 2</p>
2336
- <p class="example">$vevent = new vevent();
2337
- $vevent->setConfig( &quot;unique_id&quot;, &quot;domain.com&quot; );
2338
- .. .
2339
- </p>
2340
- <br />
2341
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2342
-
2343
- <a name="allowEmpty"></a><h4>3.1.5.5 Allow empty components</h4>
2344
- Allow or reject empty calendar properties, default allow (TRUE).
2345
-
2346
- <br />
2347
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2348
-
2349
- <a name="Compsinfo"></a><h4>3.1.5.6 Component information</h4>
2350
- Only to use with function getConfig.<br/>
2351
- <br />
2352
- Get information about calendar components. Returns array with basic information
2353
- about all components (in array format) within calendar.
2354
- <p class="comment">Output = array ( *compinfo )
2355
- compinfo = array ( &quot;ordno&quot; =&gt; int ordno,
2356
- // <span class="ref">order number (1st=1, 2nd=2..)</span>
2357
- , &quot;type&quot; =&gt; string type
2358
- // <span class="ref">component type (vevent, vtodo.. .</span>
2359
- , &quot;uid&quot; =&gt; string uid
2360
- // <span class="ref">component <a href="#UID">UID</a> (not for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a>)</span>
2361
- , &quot;props&quot; =&gt;
2362
- array( *[ propertyName =&gt; Property count ])
2363
- // <span class="ref">for every set property</span>
2364
- , &quot;sub&quot; =&gt; array( *compinfo ))
2365
- // <span class="ref">if subcomponents exists, an array for each subcomponent</span></p>
2366
- <p class="label">Example</p>
2367
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2368
- &quot;directory&quot; =&gt; &quot;import&quot;,
2369
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2370
- $vcalendar = new vcalendar( $config );
2371
- $vcalendar->parse();
2372
- $compsinfo = $vcalendar->getConfig( &quot;compsinfo&quot; );
2373
- foreach( $compsinfo as compinfo) {
2374
- &nbsp;echo &quot; order number : &quot;.$compinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2375
- &nbsp;echo &quot; type : &quot;.$compinfo[&quot;type&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2376
- &nbsp;echo &quot; UID : &quot;.$compinfo[&quot;uid&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2377
- &nbsp;foreach( $compinfo[&quot;props&quot;] as $propertyName =&gt; $propertyCount )
2378
- &nbsp;&nbsp;echo &quot; $propertyName = $propertyCount&quot;;
2379
- &nbsp;if( is_array( $compinfo[&quot;sub&quot;] )) {
2380
- &nbsp;&nbsp;foreach( $compinfo[&quot;sub&quot;] as $subcompinfo ) {
2381
- &nbsp;&nbsp;&nbsp;echo &quot; order number : &quot;.$subcompinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
2382
- &nbsp;&nbsp;&nbsp;/* .. dito if subcomponents exists .. . */
2383
- &nbsp;&nbsp;}
2384
- &nbsp;}
2385
- }
2386
- </p>
2387
- <br />
2388
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2389
-
2390
- <a name="Delimiter"></a><h4>3.1.5.7 Delimiter</h4>
2391
- Directory/filename delimiter.
2392
- <br />
2393
- <br />
2394
- Default PHP constant DIRECTORY_SEPARATOR. If used, <b>must</b> be set BEFORE filename!
2395
- <br />
2396
- <br />
2397
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2398
-
2399
- <a name="Directory"></a><h4>3.1.5.8 Directory</h4>
2400
- Local directory to store/read iCal files, default &nbsp;&quot;<b>.</b>&quot;.
2401
- <br />
2402
- <br />
2403
- Directory <b>must</b> be set BEFORE <a href="#Filename">filename</a> and <b>must</b> exist and be writeable otherwise FALSE is returned.
2404
- When setting Directory any previously set <a href="#configURL">URL</a> is removed.
2405
- <br />
2406
- <br />
2407
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2408
-
2409
- <a name="Fileinfo"></a><h4>3.1.5.9 Fileinfo</h4>
2410
- Only available in function getConfig, giving information in array format about <a href="#Directory">directory</a>, <a href="#Filename">filename</a> and <a href="#Filesize">filesize</a>.
2411
- <p class="label">Example</p>
2412
- <p class="example">$fileinfo = $vcalendar->getConfig( &quot;fileinfo&quot; );</p>
2413
- <p class="comment">output = array( &lt;directory&gt;, &lt;filename&gt;, &lt;filesize&gt; )</p>
2414
- <br />
2415
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2416
-
2417
- <a name="Filename"></a><h4>3.1.5.10 Filename</h4>
2418
- iCal local file name, default created like (if not set):<br />
2419
- <p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;;</p>
2420
- <p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.xml&quot;; <span class="comment"> // if <a href="#Format">format</a> set to &quot;xcal&quot;</span></p>
2421
- <br />
2422
- If not set, filename is created when requested, ex. in functions <a href="#saveCalendar">saveCalendar</a> or getConfig('filename').
2423
- <br />
2424
- <br />
2425
- Local filename <b>must</b> be set AFTER setting directory (and opt. delimiter)!
2426
- Filename (and opt. directory) <b>must</b> be readable/writeable otherwise FALSE is returned.
2427
- <br />
2428
- <br />
2429
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2430
-
2431
- <a name="Filesize"></a><h4>3.1.5.11 Filesize</h4>
2432
- Only when getting configuration (using function getConfig).<br/>
2433
- Returns the size of the file in bytes, to be called<br />
2434
- - after &quot;saveCalendar()&quot;<br />
2435
- or<br />
2436
- - after a &quot;setConfig( &quot;directory&quot; / &quot;filename&quot; )&quot; and before/after &quot;parse()&quot;.<br />
2437
- Getting the filesize for a remote file (URL) will always return zero.
2438
- <br />
2439
- <br />
2440
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2441
-
2442
- <a name="Format"></a><h4>3.1.5.12 Format</h4>
2443
- Format for calendar output, &quot;iCal&quot;/&quot;xCal&quot;, any case.
2444
- <br />
2445
- &quot;iCal&quot; is default (rfc2445), &quot;xCal&quot; force xml formatted output.
2446
- <br />
2447
- <br />
2448
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2449
-
2450
- <a name="Language"></a><h4>3.1.5.13 Language</h4>
2451
- Language for calendar and component TEXT value properties as defined in [RFC 1766].
2452
- <br />
2453
- <br />
2454
- If NOT set in TEXT property parameters, language from &quot;setConfig( &quot;language&quot;, ..&quot; at component level will be used, if set,
2455
- otherwise language from &quot;setConfig( &quot;language&quot;, ..&quot; at calendar level will be used, if set.
2456
- <br />
2457
- <br />
2458
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2459
-
2460
- <a name="NewlineChar"></a><h4>3.1.5.14 NewlineChar</h4>
2461
- Character(s) used for carriage return + line feed (CR+LF), default &quot;\r\n&quot;.
2462
- <br />
2463
- <br />
2464
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2465
-
2466
- <a name="dTZID"></a><h4>3.1.5.15 TZID</h4>
2467
- Default (local) timezone, will be used if no TZID parameter is used when setting <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a> or <a href="#RECURRENCE-ID">RECURRENCE-ID</a> (auto completion).
2468
- Note, some calendar software require <a href="#Additional_Descriptors">X-WR-TIMEZONE</a> (to be set manually).
2469
- <br />
2470
- <br />
2471
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2472
-
2473
- <a name="Unique_id"></a><h4>3.1.5.16 Unique_id</h4>
2474
- Unique_id is used when creating property PRODID (default auto created) at calendar level
2475
- and <a href="#UID">UID</a> at component level.
2476
- <p class="quotes">PRODID
2477
- RFC2445:
2478
- * The identifier is RECOMMENDED to be the identical syntax to the
2479
- * [RFC 822] addr-spec. A good method to assure uniqueness is to put the
2480
- * domain name or a domain literal IP address of the host on which.. .<p>
2481
- Default <b>AUTO</b> generated, PHP: gethostbyname( $_SERVER[&quot;SERVER_NAME&quot;] )
2482
- when running in a web server environment or &quot;localhost&quot; when doing command line execution.
2483
- Used when setting other (domain) name than server name.
2484
- <br />
2485
- <br />
2486
- A strong recommendation is <b>always</b> to set unique_id when creating a new vcalendar or component object,
2487
- to ensure accurate creation of all components <a href="#UID">UID</a> property, also before <a href="#parse">parse</a>, in case of missing <a href="#UID">UID</a>.
2488
- <br />
2489
- <br />
2490
-
2491
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2492
-
2493
- <a name="configURL"></a><h4>3.1.5.17 URL</h4>
2494
- When managing remote files with URL (writing using <a href="#saveCalendar">saveCalendar()</a>, or reading using <a href="#parse">parse()</a>),
2495
- only protocol &quot;http&quot; (&quot;webcal&quot;) is supported,
2496
- i.e. <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.
2497
-
2498
- <h5>Set URL</h5>
2499
- When setting URL, any previously set Directory is removed.<br />
2500
- The URL filename part can be retrieved by &quot;getConfig( 'filename' )&quot;.
2501
- <br />
2502
- <br />
2503
- When storing a remote iCal file locally, only directory need to be set,
2504
- filename remains unchanged (i.e. 1. set URL, 2. parse, 3. set directory).
2505
- <p class="label">Example</p>
2506
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2507
- &quot;url&quot;, &quot;http://www.iCal.net/depot/calendar.ics&quot; );
2508
- $vcalendar = new vcalendar( $config );
2509
- $vcalendar->parse();
2510
- $vcalendar->sort();
2511
- .. .
2512
- .. .
2513
- $vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
2514
- $vcalendar->saveCalendar(); // <span class="ref">local save in &quot;depot&quot; folder, </span>
2515
- // <span class="ref">using original filename</span>
2516
- </p>
2517
- <br />
2518
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>
2519
-
2520
- <a name="Calendar_component_object_property_function_list"></a><h2>3.2 Calendar component object property function list</h2>
2521
- <p>
2522
- All calendar component property functions for get/set data.<br />
2523
- For property format in detail, see
2524
- RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a>
2525
- and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.
2526
- </p>
2527
- <a name="DATE_WITH_UTC_TIME"></a>
2528
- <span class="label">Notice:</span> for properties and DATE-TIME with <b>UTC</b> time.
2529
- <p class="quotes">RFC2445:
2530
- The date with UTC time, or absolute time, is identified by a LATIN CAPITAL
2531
- LETTER Z suffix character (US-ASCII decimal 90), the UTC designator,
2532
- appended to the time value. For example, the following represents January
2533
- 19, 1998, at 0700 UTC:</p>
2534
- <p class="quotes">DTSTART:19980119T070000Z</p>
2535
- <p class="quotes">The <a href="#TZID">TZID</a> property parameter MUST <b>NOT</b> be applied to DATE-TIME properties
2536
- whose time values are specified in UTC.</p>
2537
- </p>
2538
- <p>
2539
- <a name="date_restriction"></a>
2540
- <span class="label">Notice:</span> date limitation.<br />
2541
- Due to limitation in PHP date commands, e.g. <span class="format">mktime</span>, <span class="format">strtotime</span>, a date (e.g. while setting <a href="#DTSTART">DTSTART</a> property) before &quot;January 1 1970 00:00:00 GMT&quot; can force a PHP date command to generate an error or set date to &quot;January 1 1970&quot;.
2542
- </p>
2543
- <a name="deleteProperty_PROP"></a><h3>3.2.1 deleteProperty</h3>
2544
- General calendar delete property function,simplifying removal of calendar properties.<br />
2545
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
2546
- <p class="label">Format</p>
2547
- <p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
2548
- <p class="comment">propName - case independent, rfc2445 component property names,
2549
- unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
2550
- order - if missing 1st/next occurrence,
2551
- used with multiply (property) occurrences</p>
2552
- <p class="label">Example</p>
2553
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2554
- &quot;directory&quot; =&gt; &quot;import&quot;,
2555
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2556
- $vcalendar = new vcalendar( $config );
2557
- $vcalendar->parse();
2558
- $e = $vcalendar->getComponent( &quot;vevent&quot; );
2559
- while( $e->deleteProperty( &quot;comment&quot; ))
2560
- &nbsp;&nbsp;continue; // <span class="ref">remove all COMMENT properties</span>
2561
- .. .
2562
- </p>
2563
- <br />
2564
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2565
-
2566
- <a name="getProperty_PROP"></a><h3>3.2.2 getProperty</h3>
2567
- General get property function, simplifying fetch of calendar properties.<br />
2568
- FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
2569
- <p class="label">Format</p>
2570
- <p class="format">getProperty( string PropName [, int order=1 [, bool complete=FALSE ]] )</p>
2571
- <p class="comment">propName - case independent, rfc2445 component property names,
2572
- unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
2573
- order - if missing/FALSE 1st/next occurrence,
2574
- otherwise with multiply occurrences (1st=1, 2nd=2.. .)
2575
- complete - FALSE (default): output only property value
2576
- TRUE : output =
2577
- array(&quot;value&quot; =&gt; &lt;value&gt;
2578
- ,&quot;params&quot;=&gt; &lt;parameter array&gt;)
2579
- </p>
2580
- <p class="label">Example</p>
2581
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
2582
- &quot;directory&quot; =&gt; &quot;import&quot;,
2583
- &quot;filename&quot; =&gt; &quot;file.ics&quot; );
2584
- $vcalendar = new vcalendar( $config );
2585
- $vcalendar->parse();
2586
- while( $vevent = $vcalendar->getComponent( &quot;vevent&quot; )) {
2587
- &nbsp;$dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="ref">one occurrence</span>
2588
- &nbsp;$description = $vevent->getProperty( &quot;description&quot; ); // <span class="ref">one occurrence</span>
2589
- &nbsp;while( $comment = $vevent->getProperty( &quot;comment&quot; )) {
2590
- // <span class="ref">MAY occur more than once</span>
2591
- &nbsp;.. .
2592
- &nbsp;}
2593
- .. .
2594
- </p>
2595
- <br />
2596
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2597
-
2598
- <a name="parse"></a><h3>3.2.3 parse</h3>
2599
- Parse strict rfc2445 component property text and/or ALARMs.
2600
- <br /><br />
2601
- A rfc2445 strict formatted property text, in string or array format and starting with property name.
2602
- <br />
2603
- <br />
2604
- Complete <a href="#VALARM">ALARM</a>s, all properties included, in array format and
2605
- first array row as &quot;BEGIN:VALARM&quot;, last as &quot;END:VALARM&quot;
2606
- as well as <a href="#VTIMEZONE">TIMEZONE</a> and standard/daylight subcomponents.
2607
- <br /><br />
2608
- FALSE is returned if (read-file) problems occur.
2609
- <p class="label">Format</p>
2610
- <p class="format">parse( mixed propertyText )</p>
2611
- <p class="comment">
2612
- propertyText = string/array,
2613
- rcf2445 formatted property/properties,
2614
- property name <b>must</b> begin (first) line</p>
2615
- <p class="label">example</p>
2616
- <p class="example">.. .
2617
- $vevent = & $vcalendar->newComponent( 'vevent' );
2618
- $e->parse( 'DTSTAMP:19970324T1200Z' );
2619
- $e->parse( 'SEQUENCE:0' );
2620
- $e->parse( 'ORGANIZER:MAILTO:jdoe@host1.com' );
2621
- $e->parse( array(
2622
- 'ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com',
2623
- 'ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com',
2624
- 'ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com',
2625
- 'ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com' ));
2626
- $e->parse( 'DTSTART:19970324T123000Z' );
2627
- $e->parse( 'DTEND:19970324T210000Z' );
2628
- $e->parse( 'CATEGORIES:MEETING,PROJECT' );
2629
- $e->parse( 'CLASS:PUBLIC' );
2630
- $e->parse( 'SUMMARY:Calendaring Interoperability Planning Meeting' );
2631
- $e->parse( 'STATUS:DRAFT' );
2632
- $e->parse( array(
2633
- 'DESCRIPTION:Project xyz Review Meeting Minutes'
2634
- ,'Agenda'
2635
- ,'1. Review of project version 1.0 requirements.'
2636
- ,'2. Definition of project processes.'
2637
- ,'3. Review of project schedule.'
2638
- ,'Participants: John Smith, Jane Doe, Jim Dandy'
2639
- ,'- It was decided that the requirements need to be signed off by '.
2640
- 'product marketing.'
2641
- ,'- Project processes were accepted.'
2642
- ,'- Project schedule needs to account for scheduled holidays and employee'.
2643
- ' vacation time. Check with HR for specific dates.'
2644
- ,'- New schedule will be distributed by Friday.'
2645
- ,'- Next weeks meeting is cancelled. No meeting until 3/23.' ));
2646
- $e->parse( 'LOCATION:LDB Lobby' );
2647
- $e->parse(
2648
- 'ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps' );
2649
- $e->parse( array(
2650
- 'BEGIN:VALARM',
2651
- 'ACTION:AUDIO',
2652
- 'TRIGGER;VALUE=DATE-TIME:19970224T070000Z',
2653
- 'ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud',
2654
- 'REPEAT:4',
2655
- 'DURATION:PT1H',
2656
- 'X-alarm:non-standard ALARM property',
2657
- 'END:VALARM' ));
2658
- $e->parse(
2659
- 'X-xomment:non-standard property will be displayed, comma escaped');
2660
- .. .
2661
- </p>
2662
- <br />
2663
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2664
-
2665
-
2666
- <a name="setProperty_PROP"></a><h3>3.2.4 setProperty</h3>
2667
- General set property function, simplifying insert of component properties. For properties where
2668
- multiple occurrences are allowed, last parameter is an index, implementing replaceProperty functionality.<br />
2669
- A successful update returns TRUE.
2670
- <p class="label">Format</p>
2671
- <p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
2672
- <p class="comment">propName case independent, rfc2445 component property names,
2673
- unknown propName will be regarded as <a href="#X-PROPERTY_PROP">X-property</a>.</p>
2674
- <p class="label">Example</p>
2675
- <p class="example">$vevent = & $vcalendar->newComponent( 'vevent' );
2676
- $vevent->setProperty( &quot;dtstart&quot;
2677
- , array(&quot;year&quot;=&gt;2007,&quot;month&quot;=&gt;4,&quot;day&quot;=&gt;1,&quot;hour&quot;=&gt;19));
2678
- $vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
2679
- $vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
2680
- $vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
2681
- .. .
2682
- </p>
2683
- <br />
2684
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2685
-
2686
-
2687
- <a name="ACTION"></a><h3>3.2.5 ACTION</h3>
2688
- This property defines the action to be invoked when an <a href="#VALARM">VALARM</a> is triggered,<br /> &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;. This property is REQUIRED and MUST NOT occur more than once.
2689
- <h5>Delete ACTION</h5>
2690
- Remove ACTION from component.
2691
- <p class="label">Format</p>
2692
- <p class="format">deleteProperty( &quot;Action&quot; )</p>
2693
- <p class="label">Example</p>
2694
- <p class="example">$valarm->deleteProperty( &quot;Action&quot; );</p>
2695
- <h5>Get ACTION</h5>
2696
- Fetch property value.
2697
- <p class="label">Format 1</p>
2698
- <p class="format">getProperty( &quot;Action&quot; )</p>
2699
- <p class="comment">output = actionValue <span class="ref">1</span></p>
2700
- <p class="label">Format 2</p>
2701
- <p class="format">getProperty( &quot;Action&quot;, FALSE , TRUE )</p>
2702
- <p class="comment">output = array( &quot;value&quot; =&gt; actionValue<span class="ref">1</span>
2703
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
2704
- <p class="label">Example</p>
2705
- <p class="example">$action = $valarm->getProperty( &quot;action&quot; );</p>
2706
- <h5>Set ACTION</h5>
2707
- Insert property value.
2708
- <p class="label">Format</p>
2709
- <p class="format">setProperty( &quot;Action&quot;, actionValue [, xparam ] )</p>
2710
- <p class="comment">actionValue<span class="ref">1</span> = one of &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;
2711
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
2712
- <p class="label">Example</p>
2713
- <p class="example">$valarm->setProperty( &quot;action&quot;, &quot;DISPLAY&quot; );</p>
2714
- <br />
2715
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2716
-
2717
-
2718
- <a name="ATTACH"></a><h3>3.2.6 ATTACH</h3>
2719
- The property provides the capability to associate a document object with a calendar component. The property is
2720
- is REQUIRED and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;procedure&quot;),
2721
- OPTIONAL and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;audio&quot;) and
2722
- OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VALARM">VALARM</a> (&quot;ACTION&quot; &quot;email&quot;) components.
2723
- <br /><br />
2724
- The default value type for ATTACH is URI. The value type can also be set to BINARY to indicate inline binary encoded content information (params <span class="ref">2</span>).
2725
- <h5>Delete ATTACH</h5>
2726
- Remove ATTACH from component.
2727
- <p class="label">Format</p>
2728
- <p class="format">deleteProperty( &quot;ATTACH&quot; )</p>
2729
- <p class="label">Example 1</p>
2730
- <p class="example">$valarm->deleteProperty( &quot;ATTACH&quot; );</p>
2731
- <p class="label">Example 2</p>
2732
- Delete ATTACH property no 2.
2733
- <p class="format">$valarm->deleteProperty( &quot;ATTACH&quot;, 2 );</p>
2734
- <p class="label">Example 3</p>
2735
- Deleting all ATTACH properties.
2736
- <p class="example">while( $valarm->deleteProperty( &quot;ATTACH&quot; ))
2737
- continue;</p>
2738
- <h5>Get ATTACH</h5>
2739
- Fetch property value.
2740
- <p class="label">Format 1</p>
2741
- <p class="format">getProperty( &quot;Attach&quot; )</p>
2742
- <p class="comment">output = attachValue<span class="ref">1</span></p>
2743
- <p class="label">Format 2</p>
2744
- <p class="format">getProperty( &quot;ATTACH&quot;, propOrderNo/FALSE , TRUE )</p>
2745
- <p class="comment">output = array( &quot;value&quot; =&gt; attachValue<span class="ref">1</span>
2746
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
2747
- <p class="label">Format 3</p>
2748
- <p class="format">getProperty( &quot;Attach&quot;, propOrderNo )</p>
2749
- <p class="comment">Get propOrderNo ATTACH</p>
2750
- <p class="label">Example</p>
2751
- <p class="example">$attach = $valarm->getProperty( &quot;attach&quot; );</p>
2752
- <h5>Set ATTACH</h5>
2753
- Insert property value.
2754
- <br />
2755
- Parameters, if any, will be ordered as prescribed in rcf2445.
2756
- <p class="label">Format</p>
2757
- <p class="format">setProperty( &quot;attach&quot;, attachValue<span class="ref">1</span> [, params [, propOrderNo ]] )</p>
2758
- <p class="comment">attachValue<span class="ref">1</span> = URI / inline binary encoded content information.
2759
- params<span class="ref">2</span> = array( [ &quot;ENCODING&quot; =&gt; &quot;BASE64&quot;,
2760
- &quot;VALUE&quot; =&gt; &quot;BINARY&quot; ]
2761
- [, &quot;FMTTYPE&quot; =&gt; contentType ]
2762
- [,&nbsp;xparam ] )
2763
- contentType = The parameter value MUST be the TEXT for either
2764
- an IANA registered content type or a non-standard
2765
- content type.
2766
- xparam = *[ xparamkey =&gt; xparamvalue ]
2767
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
2768
- <p class="label">Example</p>
2769
- <p class="example">$vevent->setProperty( &quot;attach&quot;
2770
- , &quot;ftp://domain.com/pub/docs/agenda.doc&quot;
2771
- , array( &quot;FMTTYPE&quot; =&gt; &quot;application/binary&quot; ));
2772
- </p>
2773
- <br />
2774
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2775
-
2776
-
2777
- <a name="ATTENDEE"></a><h3>3.2.7 ATTENDEE</h3>
2778
- The property defines an "Attendee" within a calendar component and is OPTIONAL and MUST NOT occur more than once
2779
- in a VALARM (&quot;ACTION&quot; &quot;email&quot;), OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
2780
- <br /><br />
2781
- This value type for ATTENDEE is URI, a calendar user address.
2782
- <h5>Delete ATTENDEE</h5>
2783
- Remove ATTENDEE from component.
2784
- <p class="label">Format</p>
2785
- <p class="format">deleteProperty( &quot;ATTENDEE&quot; )</p>
2786
- <p class="label">Example 1</p>
2787
- <p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot; );</p>
2788
- <p class="label">Example 2</p>
2789
- Delete ATTENDEE property no 2.
2790
- <p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot;, 2 );</p>
2791
- <p class="label">Example 3</p>
2792
- Deleting all ATTENDEE properties.
2793
- <p class="example">while( $valarm->deleteProperty( &quot;ATTENDEE&quot; ))
2794
- continue;</p>
2795
- <h5>Get ATTENDEE</h5>
2796
- Fetch property value.
2797
- <p class="label">Format 1</p>
2798
- <p class="format">getProperty( &quot;Attendee&quot; )</p>
2799
- <p class="comment">output = attendeeValue <span class="ref">1</span></p>
2800
- <p class="label">Format 2</p>
2801
- <p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo/FALSE , TRUE )</p>
2802
- <p class="comment">output = array( &quot;value&quot; =&gt; attendeeValue<span class="ref">1</span>
2803
- , &quot;params&quot; =&gt; array( params<span class="ref">2</span> ))</p>
2804
- <p class="label">Format 3</p>
2805
- <p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo )</p>
2806
- <p class="comment">Get propOrderNo ATTENDEE</p>
2807
- <p class="label">Example</p>
2808
- <p class="example">$attendee = $valarm->getProperty( &quot;attendee&quot; );</p>
2809
- <h5>Set ATTENDEE</h5>
2810
- Insert property value. If exist, default parameter values are removed after input (params<span class="ref">2</span>).
2811
- Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ), if missing, 'mailto:' is set (ex. indicating an internet mail address).
2812
- Also MEMBER and DIR parameters must be prefixed by protocol. DELEGATED-TO, DELEGATED-FROM, SENT-BY parameters must use protocol 'mailto:', prefixed if missing (ex. indicating an internet mail address).
2813
- <br />
2814
- Parameters, if any, will be ordered as prescribed in rcf2445.
2815
- <p class="label">Format</p>
2816
- <p class="format">setProperty( &quot;attendee&quot;, attendeeValue [, params [, propOrderNo ]] )</p>
2817
- <p class="comment">attendeeValue<span class="ref">1</span> = a calendar user address, a URI as defined by
2818
- [RFC 1738] or any other IANA registered form
2819
- for a URI.
2820
- params<span class="ref">2</span> = array( [CUTYPE] [,MEMBER] [,ROLE] [,PARTSTAT]
2821
- [,RVSP] [,DELEGATED-TO] [,DELEGATED-FROM]
2822
- [,SENT-BY] [,CN] [,DIR] [,LANGUAGE]
2823
- [,xparams] )
2824
- CUTYPE = "CUTYPE" =&gt; &quot;INDIVIDUAL&quot;
2825
- (An individual, <b>Default</b>)
2826
- / &quot;GROUP&quot;
2827
- (A group of individuals)
2828
- / &quot;RESOURCE&quot;
2829
- (A physical resource)
2830
- / &quot;ROOM&quot;
2831
- (A room resource)
2832
- / &quot;UNKNOWN&quot;
2833
- (Otherwise not known)
2834
- / x-name
2835
- (Experimental type)
2836
- / iana-token
2837
- (Other IANA registered type)
2838
- MEMBER = "MEMBER" =&gt; array( *[ &quot;single member
2839
- of the group or list membership&quot;])
2840
- ROLE = "ROLE" =&gt; &quot;CHAIR&quot;
2841
- (Indicates chair of the calendar
2842
- entity)
2843
- / &quot;REQ-PARTICIPANT&quot;
2844
- (required participation, <b>Default</b>)
2845
- / &quot;OPT-PARTICIPANT&quot;
2846
- (optional participation)
2847
- / &quot;NON-PARTICIPANT&quot;
2848
- (information purposes only)
2849
- / x-name
2850
- (Experimental role)
2851
- / iana-token
2852
- (Other IANA role)
2853
- PARTSTAT = &quot;PARTSTAT&quot; =&gt; &quot;NEEDS-ACTION&quot;
2854
- (Event needs action, <b>Default</b>)
2855
- / &quot;ACCEPTED&quot;
2856
- (Event accepted)
2857
- / &quot;DECLINED&quot;
2858
- (Event declined)
2859
- / &quot;TENTATIVE&quot;
2860
- (Event tentatively accepted)
2861
- / &quot;DELEGATED&quot;
2862
- (Event delegated)
2863
- / &quot;NEEDS-ACTION&quot;
2864
- (To-do needs action, <b>Default</b>)
2865
- / &quot;ACCEPTED&quot;
2866
- (To-do accepted)
2867
- / &quot;DECLINED&quot;
2868
- (To-do declined)
2869
- / &quot;TENTATIVE&quot;
2870
- (To-do tentatively accepted)
2871
- / &quot;DELEGATED&quot;
2872
- (To-do delegated)
2873
- / &quot;COMPLETED&quot;
2874
- (To-do completed.
2875
- <a href="#COMPLETED">COMPLETED</a> property
2876
- has date/time completed)
2877
- / &quot;IN-PROCESS&quot;
2878
- (To-do in process of being completed)
2879
- / &quot;NEEDS-ACTION&quot;
2880
- (Journal needs action, <b>Default</b>)
2881
- / &quot;ACCEPTED&quot;
2882
- (Journal accepted)
2883
- / &quot;DECLINED&quot;
2884
- (Journal declined)
2885
- / x-name
2886
- (Experimental status)
2887
- / iana-token
2888
- (Other IANA registered status)
2889
- RSVP = &quot;RSVP&quot; =&gt; &quot;TRUE&quot;
2890
- / &quot;FALSE&quot;, <b>Default</b> (reply expectation)
2891
- DELEGATED-TO = &quot;DELEGATED-TO&quot; =&gt; array(*[&quot;single calendar user
2892
- to specified by the property
2893
- has delegated participation&quot;])
2894
- DELEGATED-FROM = &quot;DELEGATED-FROM&quot; =&gt; array( *[ &quot;single calendar user that
2895
- have delegated their
2896
- participation to the
2897
- calendar user specified
2898
- by the property&quot; ] )
2899
- SENT-BY = &quot;SENT-BY&quot; =&gt; single calendar user that is
2900
- acting on behalf
2901
- of the calendar user
2902
- specified by the property&quot;
2903
- LANGUAGE = &quot;LANGUAGE&quot; =&gt; language for text values in CN parameter&quot;
2904
- CN = &quot;CN&quot; =&gt; &quot;common name to be associated with the calendar
2905
- user specified by the property&quot;
2906
- DIR = &quot;DIR&quot; =&gt; &quot;reference to a directory entry associated with
2907
- the calendar user specified by the property&quot;
2908
- xparam = *[ xparamkey =&gt; xparamvalue ]
2909
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
2910
- See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a> and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.
2911
- <p class="label">Example</p>
2912
- <p class="example">$vevent->setProperty( &quot;attendee&quot;
2913
- , &quot;attendee1@ical.net&quot;
2914
- $vevent->setProperty( &quot;attendee&quot;
2915
- , &quot;attendee2@ical.net&quot;
2916
- , array( &quot;cutype&quot; =&gt; &quot;INDIVIDUAL&quot;
2917
- , &quot;member&quot; =&gt; array( &quot;member1@ical.net&quot;
2918
- , &quot;member2@ical.net&quot;
2919
- , &quot;member3@ical.net&quot; )
2920
- , &quot;role&quot; =&gt; &quot;CHAIR&quot;
2921
- , &quot;PARTSTAT&quot; =&gt; &quot;ACCEPTED&quot;
2922
- , &quot;RSVP&quot; =&gt; &quot;TRUE&quot;
2923
- , &quot;DELEgated-to&quot; =&gt; array( &quot;part1@ical.net&quot;
2924
- , &quot;part2@ical.net&quot;
2925
- , &quot;part3@ical.net&quot; )
2926
- , &quot;delegateD-FROM&quot; =&gt;array( &quot;cio@ical.net&quot;
2927
- , &quot;vice.cio@ical.net&quot;)
2928
- , &quot;SENT-BY&quot; =&gt; &quot;secretary@ical.net&quot;
2929
- , &quot;LANGUAGE&quot; =&gt; &quot;us-EN&quot;
2930
- , &quot;CN&quot; =&gt; &quot;John Doe&quot;
2931
- , &quot;DIR&quot; =&gt; &quot;http://www.ical.net/info.doc&quot;
2932
- , &quot;x-agenda&quot; =&gt; &quot;status reports&quot; <span class="comment">// xparam</span>
2933
- , &quot;x-length&quot; =&gt; &quot;15 min&quot; )); <span class="comment">// xparam</span>
2934
- </p>
2935
- <br />
2936
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2937
-
2938
- <a name="CATEGORIES"></a><h3>3.2.8 CATEGORIES</h3>
2939
- This property defines the categories for a calendar component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br /><br />
2940
- The value type for CATEGORIES is TEXT.
2941
- <h5>Delete CATEGORIES</h5>
2942
- Remove CATEGORIES from component.
2943
- <p class="label">Format</p>
2944
- <p class="format">deleteProperty( &quot;CATEGORIES&quot; )</p>
2945
- <p class="label">Example 1</p>
2946
- <p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot; );</p>
2947
- <p class="label">Example 2</p>
2948
- Delete CATEGORIES property no 2.
2949
- <p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot;, 2 );</p>
2950
- <p class="label">Example 3</p>
2951
- Deleting all CATEGORIES properties.
2952
- <p class="example">while( $vevent->deleteProperty( &quot;CATEGORIES&quot; ))
2953
- continue;</p>
2954
- <h5>Get CATEGORIES</h5>
2955
- Fetch property value.
2956
- <p class="label">Format 1</p>
2957
- <p class="format">getProperty( &quot;CATEGORIES&quot; )</p>
2958
- <p class="comment">output = categoryValue<span class="ref">1</span></p>
2959
- <p class="label">Format 2</p>
2960
- <p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo/FALSE , TRUE )</p>
2961
- <p class="comment">output = array( &quot;value&quot; =&gt; categories<span class="ref">1</span>
2962
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
2963
- <p class="label">Format 3</p>
2964
- <p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo )</p>
2965
- <p class="comment">Get propOrderNo CATEGORIES</p>
2966
- <p class="label">Example</p>
2967
- <p class="example">$categories = $valarm->getProperty( &quot;categories&quot; );</p>
2968
- <h5>Set CATEGORIES</h5>
2969
- Insert property value.
2970
- <br />
2971
- Parameters, if any, will be ordered as prescribed in rcf2445.
2972
- <p class="label">Format</p>
2973
- <p class="format">setProperty( &quot;categories&quot;, mixed categories [, params [, propOrderNo ]] )</p>
2974
- <p class="comment">categories<span class="ref">1</span> = string categoryValue / array( *categoryValue )
2975
- categoryValue<span class="ref"> </span>= textual categories or subtypes of the calendar component,
2976
- can be specified as a list of categories
2977
- separated by the COMMA character
2978
- params<span class="ref">2</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;][, xparam] )
2979
- xparam<span class="ref"> </span> = *[ xparamkey =&gt; xparamvalue ]
2980
- propOrderNo<span class="ref"> </span> = int ordernumber, 1=1st, 2=2nd etc</p>
2981
- <p class="label">Example</p>
2982
- <p class="example">$vevent->setProperty( &quot;categories&quot;, &quot;project_x&quot; );</p>
2983
- <br />
2984
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
2985
-
2986
-
2987
- <a name="CLASS"></a><h3>3.2.9 CLASS</h3>
2988
- This property defines the access classification for a calendar component and is OPTIONAL
2989
- and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
2990
- <h5>Delete CLASS</h5>
2991
- Remove CLASS from component.
2992
- <p class="label">Format</p>
2993
- <p class="format">deleteProperty( &quot;CLASS&quot; )</p>
2994
- <p class="label">Example</p>
2995
- <p class="example">$vjournal->deleteProperty( &quot;CLASS&quot; );</p>
2996
- <h5>Get CLASS</h5>
2997
- Fetch property value.
2998
- <p class="label">Format 1</p>
2999
- <p class="format">getProperty( &quot;CLASS&quot; )</p>
3000
- <p class="comment">output = classValue<span class="ref">1</span></p>
3001
- <p class="label">Format 2</p>
3002
- <p class="format">getProperty( &quot;CLASS&quot;, FALSE , TRUE )</p>
3003
- <p class="comment">output = array &quot;value&quot; =&gt; classValue<span class="ref">1</span>
3004
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3005
- <p class="label">Example</p>
3006
- <p class="example">$class = $valarm->getProperty( &quot;class&quot; );</p>
3007
- <h5>Set CLASS</h5>
3008
- Insert property value.
3009
- <p class="label">Format</p>
3010
- <p class="format">setProperty( &quot;class&quot;, string classvalue [, xparam ] )</p>
3011
- <p class="comment">classvalue<span class="ref">1</span> = &quot;PUBLIC&quot;
3012
- / &quot;PRIVATE&quot;
3013
- / &quot;CONFIDENTIAL&quot;
3014
- / iana-token
3015
- / x-name
3016
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3017
- <p class="label">Example</p>
3018
- <p class="example">$vevent->setProperty( &quot;class&quot;, &quot;CONFIDENTIAL&quot; );</p>
3019
- <br />
3020
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3021
-
3022
- <a name="COMMENT"></a><h3>3.2.10 COMMENT</h3>
3023
- This property specifies non-processing information intended to provide a comment to the calendar user
3024
- and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VFREEBUSY">VFREEBUSY</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br /><br />
3025
- The value type for COMMENT is TEXT.
3026
- <h5>Delete COMMENT</h5>
3027
- Remove COMMENT from component.
3028
- <p class="label">Format</p>
3029
- <p class="format">deleteProperty( &quot;COMMENT&quot; )</p>
3030
- <p class="label">Example 1</p>
3031
- <p class="example">$vevent->deleteProperty( &quot;COMMENT&quot; );</p>
3032
- <p class="label">Example 2</p>
3033
- Delete COMMENT property no 2.
3034
- <p class="example">$vevent->deleteProperty( &quot;COMMENT&quot;, 2 );</p>
3035
- <p class="label">Example 3</p>
3036
- Deleting all COMMENT properties.
3037
- <p class="example">while( $vevent->deleteProperty( &quot;COMMENT&quot; ))
3038
- continue;</p>
3039
- <h5>Get COMMENT</h5>
3040
- Fetch property value.
3041
- <p class="label">Format 1</p>
3042
- <p class="format">getProperty( &quot;COMMENT&quot; )</p>
3043
- <p class="comment">output = commentValue<span class="ref">1</span></p>
3044
- <p class="label">Format 2</p>
3045
- <p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo/FALSE , TRUE )</p>
3046
- <p class="comment">output = array( &quot;value&quot; =&gt; commentValue<span class="ref">1</span>
3047
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3048
- <p class="label">Format 3</p>
3049
- <p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo )</p>
3050
- <p class="comment">Get propOrderNo COMMENT</p>
3051
- <p class="label">Example</p>
3052
- <p class="example">$comment = $vevent->getProperty( &quot;comment&quot; );</p>
3053
- <h5>Set COMMENT</h5>
3054
- Insert property value.
3055
- <br />
3056
- Parameters, if any, will be ordered as prescribed in rcf2445.
3057
- <p class="label">Format</p>
3058
- <p class="format">setProperty( &quot;comment&quot;, commentValue [, params [, propOrderNo ]] )</p>
3059
- <p class="comment">commentValue<span class="ref">1</span> = Value type Text
3060
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3061
- [, [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3062
- [, xparam] )
3063
- xparam = *[ xparamkey =&gt; xparamvalue ]
3064
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3065
- <p class="label">Example</p>
3066
- <p class="example">$vevent->setProperty( &quot;comment&quot;, &quot;this is a comment&quot; );</p>
3067
- <br />
3068
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3069
-
3070
-
3071
- <a name="COMPLETED"></a><h3>3.2.11 COMPLETED</h3>
3072
- This property defines the date and time that a <a href="#VTODO">VTODO</a> was actually completed and is OPTIONAL and MUST NOT occur more than once.<br /><br />
3073
- The value type for COMPLETED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3074
- <h5>Delete COMPLETED</h5>
3075
- Remove COMPLETED from component.
3076
- <p class="label">Format</p>
3077
- <p class="format">deleteProperty( &quot;COMPLETED&quot; )</p>
3078
- <p class="label">Example</p>
3079
- <p class="example">$vtodo->deleteProperty( &quot;COMPLETED&quot; );</p>
3080
- <h5>Get COMPLETED</h5>
3081
- Fetch property value.
3082
- <p class="label">Format 1</p>
3083
- <p class="format">getProperty( &quot;COMPLETED&quot; )</p>
3084
- <p class="comment">output = completedDate<span class="ref">1</span></p>
3085
- <p class="label">Format 2</p>
3086
- <p class="format">getProperty( &quot;COMPLETED&quot;, FALSE , TRUE )</p>
3087
- <p class="comment">output = array( &quot;value&quot; =&gt; completedDate<span class="ref">1</span>
3088
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3089
- <p class="label">Example</p>
3090
- <p class="example">$completed = $vtodo->getProperty( &quot;completed&quot; );</p>
3091
- <h5>Set COMPLETED</h5>
3092
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or, if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3093
- <p class="label">Format</p>
3094
- <p class="format">setProperty( &quot;completed&quot;, completedDate [, xparam ] )</p>
3095
- <p class="comment">completedDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3096
- , &quot;month&quot; =&gt; int month
3097
- , &quot;day&quot; =&gt; int day
3098
- [, &quot;hour&quot; =&gt; int hour
3099
- , &quot;min&quot; =&gt; int min
3100
- , &quot;sec&quot; =&gt; int sec
3101
- , &quot;tz&quot; =&gt; offset ]] )
3102
- completedDate = int year
3103
- , int month
3104
- , int day
3105
- [, int hour
3106
- , int min
3107
- , int sec ]
3108
- completedDate = array( int year
3109
- , int month
3110
- , int day
3111
- [, int hour
3112
- , int min
3113
- , int sec
3114
- [, offset ]] )
3115
- completedDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
3116
- completedDate = string datestring // <span class="ref">string date,
3117
- acceptable by strtotime-command,
3118
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3119
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3120
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3121
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3122
- <p class="label">Example 1</p>
3123
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;);
3124
- $vcalendar = new vcalendar( $config );
3125
- $vtodo = & $vcalendar->newComponent( 'vtodo' );
3126
- .. .
3127
- $vtodo->setProperty( &quot;completed&quot;, 2006, 8, 10, 10, 0, 0 );
3128
- // <span class="ref">10 august 2006 10.00 UTC</span></p>
3129
- <p class="label">Example 2</p>
3130
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3131
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3132
- // <span class="ref">local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
3133
- $vtodo->setProperty( &quot;completed&quot;, $date );</p>
3134
- <br />
3135
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3136
-
3137
-
3138
- <a name="CONTACT"></a><h3>3.2.12 CONTACT</h3>
3139
- The property is used to represent textual contact information or alternately a reference to textual contact information associated with the calendar component. The property is OPTIONAL and MUST NOT occur more than once in a VFREEBUSY or MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br /><br />
3140
- The value type for CONTACT is TEXT.
3141
- <h5>Delete CONTACT</h5>
3142
- Remove CONTACT from component.
3143
- <p class="label">Format</p>
3144
- <p class="format">deleteProperty( &quot;CONTACT&quot; )</p>
3145
- <p class="label">Example 1</p>
3146
- <p class="example">$vevent->deleteProperty( &quot;CONTACT&quot; );</p>
3147
- <p class="label">Example 2</p>
3148
- Delete CONTACT property no 2.
3149
- <p class="example">$vevent->deleteProperty( &quot;CONTACT&quot;, 2 );</p>
3150
- <p class="label">Example 3</p>
3151
- Deleting all CONTACT properties.
3152
- <p class="example">while( $vevent->deleteProperty( &quot;CONTACT&quot; ))
3153
- continue;</p>
3154
- <h5>Get CONTACT</h5>
3155
- Fetch property value.
3156
- <p class="label">Format 1</p>
3157
- <p class="format">getProperty( &quot;CONTACT&quot; )</p>
3158
- <p class="comment">output = contactValue<span class="ref">1</span></p>
3159
- <p class="label">Format 2</p>
3160
- <p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo/FALSE , TRUE )</p>
3161
- <p class="comment">output = array( &quot;value&quot; =&gt; contactValue<span class="ref">1</span>
3162
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3163
- <p class="label">Format 3</p>
3164
- <p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo )</p>
3165
- <p class="comment">Get propOrderNo CONTACT</p>
3166
- <p class="label">Example</p>
3167
- <p class="example">$contact = $vevent->getProperty( &quot;contact&quot; );</p>
3168
- <h5>Set CONTACT</h5>
3169
- Insert property value.
3170
- <br />
3171
- Parameters, if any, will be ordered as prescribed in rcf2445.
3172
- <p class="label">Format</p>
3173
- <p class="format">setproperty( &quot;contact&quot;, contactValue [, params [, propOrderNo ]] )</p>
3174
- <p class="comment">contactValue<span class="ref">1</span> = Value type TEXT
3175
- params<span class="ref">2</span> = array ( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3176
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3177
- [, xparam] )
3178
- xparam = *[ xparamkey =&gt; xparamvalue ]
3179
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3180
- <p class="label">Example</p>
3181
- <p class="example">$c->setProperty( &quot;contact&quot;, &quot;tel 012-34 56 789&quot; )</p>
3182
- <br />
3183
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3184
-
3185
-
3186
- <a name="CREATED"></a><h3>3.2.13 CREATED</h3>
3187
- This property specifies the date and time that the calendar information was created by the calendar user agent in the calendar store. Note: This is analogous to the creation date and time for a file in the file system. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br /><br />
3188
- The value type for CREATED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3189
- <h5>Delete CREATED</h5>
3190
- Remove CREATED from component.
3191
- <p class="label">Format</p>
3192
- <p class="format">deleteProperty( &quot;CREATED&quot; )</p>
3193
- <p class="label">Example</p>
3194
- <p class="example">$vevent->deleteProperty( &quot;CREATED&quot; );</p>
3195
- <h5>Get CREATED</h5>
3196
- Fetch property value.
3197
- <p class="label">Format 1</p>
3198
- <p class="format">getProperty( &quot;CREATED&quot; )</p>
3199
- <p class="comment">output = createdDate<span class="ref">1</span></p>
3200
- <p class="label">Format 2</p>
3201
- <p class="format">getProperty( &quot;CREATED&quot;, FALSE , TRUE )</p>
3202
- <p class="comment">output = array( &quot;value&quot; =&gt; createdDate<span class="ref">1</span>
3203
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3204
- <p class="label">Example</p>
3205
- <p class="example">$created = $vevent->getProperty( &quot;CREATED&quot; );</p>
3206
- <h5>Set CREATED</h5>
3207
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or, if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3208
- <p class="label">Format</p>
3209
- <p class="format">setProperty( &quot;created&quot;, [ createdDate [, xparam ]] )</p>
3210
- <p class="comment">createdDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3211
- , &quot;month&quot; =&gt; int month
3212
- , &quot;day&quot; =&gt; int day
3213
- [, &quot;hour&quot; =&gt; int hour
3214
- , &quot;min&quot; =&gt; int min
3215
- , &quot;sec&quot; =&gt; int sec
3216
- , &quot;tz&quot; =&gt; offset ]] )
3217
- createdDate = int year
3218
- , int month
3219
- , int day
3220
- [, int hour
3221
- , int min
3222
- , int sec ]
3223
- createdDate = array( int year
3224
- , int month
3225
- , int day
3226
- [, int hour
3227
- , int min
3228
- , int sec
3229
- [, offset ]] )
3230
- createdDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
3231
- createdDate = string datestring // <span class="ref">string date,
3232
- acceptable by strtotime-command,
3233
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3234
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3235
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3236
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3237
- <p class="label">Example 1</p>
3238
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
3239
- $vcalendar = new vcalendar( $config );
3240
- $vtodo = & $vcalendar->newComponent( 'vtodo' );
3241
- .. .
3242
- $vtodo->setProperty( &quot;created&quot;, 2006, 8, 11, 14, 30, 35 );
3243
- // <span class="ref">11 august 2006 14.30.35 UTC</span> </p>
3244
- <p class="label">Example 2</p>
3245
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3246
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3247
- // <span class="ref">local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
3248
- $vtodo->setProperty( &quot;created&quot;, $date );
3249
- .. .</p>
3250
- <p class="label">Example 3</p>
3251
- <p class="example">$vevent->setProperty( &quot;created&quot; );
3252
- // <span class="ref">current UTC date-time is set if called without parameters</span></p>
3253
- <br />
3254
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3255
-
3256
-
3257
- <a name="DESCRIPTION"></a><h3>3.2.14 DESCRIPTION</h3>
3258
- This property provides a more complete textual description of the calendar component, than that provided by the <a href="#SUMMARY">SUMMARY</a> property (, analogous to a mail BODY). The property is OPTIONAL, MUST NOT occur more than once within <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VALARM">VALARM</a> (PROCEDURE) but can be specified multiple times within a <a href="#VJOURNAL">VJOURNAL</a> calendar component. The property is REQUIRED in <a href="#VALARM">VALARM</a> (DISPLAY, EMAIL) component.<br /><br />
3259
- The value type for DESCRIPTION is TEXT.
3260
- <h5>Delete DESCRIPTION</h5>
3261
- Remove DESCRIPTION from component.
3262
- <p class="label">Format</p>
3263
- <p class="format">deleteProperty( &quot;DESCRIPTION&quot; )</p>
3264
- <p class="label">Example 1</p>
3265
- <p class="example">$vevent->deleteProperty( &quot;DESCRIPTION&quot; );</p>
3266
- <p class="label">Example 2</p>
3267
- Delete DESCRIPTION property no 2.
3268
- <p class="example">$vjournal->deleteProperty( &quot;DESCRIPTION&quot;, 2 );</p>
3269
- <p class="label">Example 3</p>
3270
- Deleting all DESCRIPTION properties.
3271
- <p class="example">while( $vjournal->deleteProperty( &quot;DESCRIPTION&quot; ))
3272
- continue;</p>
3273
- <h5>Get DESCRIPTION</h5>
3274
- Fetch property value.
3275
- <p class="label">Format 1</p>
3276
- <p class="format">getProperty( &quot;DESCRIPTION&quot; )</p>
3277
- <p class="comment">output = descriptionValue<span class="ref">1</span></p>
3278
- <p class="label">Format 2</p>
3279
- <p class="format">getProperty( &quot;DESCRIPTION&quot;, FALSE , TRUE )</p>
3280
- <p class="comment">output = array( &quot;value&quot; =&gt; descriptionValue<span class="ref">1</span>
3281
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3282
- <p class="label">Example</p>
3283
- <p class="example">$description = $vevent->getProperty( &quot;description&quot; );</p>
3284
- <h5>Set DESCRIPTION</h5>
3285
- Insert property value.
3286
- <br />
3287
- Parameters, if any, will be ordered as prescribed in rcf2445.
3288
- <p class="label">Format</p>
3289
- <p class="format">setProperty( &quot;description&quot;, descriptionValue [, params [, propOrderNo ]] )</p>
3290
- <p class="comment">descriptionValue<span class="ref">1</span> = Value type TEXT
3291
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
3292
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
3293
- [, xparam] )
3294
- xparam = *[ xparamkey =&gt; xparamvalue ]
3295
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3296
- <p class="label">Example</p>
3297
- <p class="example">$vevent->setProperty( &quot;description&quot;, &quot;This is a description&quot; );</p>
3298
- <br />
3299
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3300
-
3301
-
3302
- <a name="DTEND"></a><h3>3.2.15 DTEND</h3>
3303
- This property specifies the date and time that a calendar component ends.
3304
- The property is OPTIONAL and MUST NOT occur more than once in VFREEBUSY and VEVENT. In VEVENT, it only occurs
3305
- if DURATION NOT occurs.
3306
- <br /><br />
3307
- The default value type for DTEND is DATE-TIME, can be set to a DATE value type.
3308
- <br /><br />
3309
- Notice that an end date without a time is in effect midnight of the day before the date, so for timeless dates, use the date following the event date for it to be correct. For an &quot;all-day event&quot; and using timeless dates, the DTEND is equal DTSTART plus one day, example all-day event (2007-12-01)<br />DTSTART;VALUE=DATE:20071201<br /> DTEND;VALUE=DATE:20071202.
3310
- <h5>Delete DTEND</h5>
3311
- Remove DTEND from component.
3312
- <p class="label">Format</p>
3313
- <p class="format">deleteProperty( &quot;DTEND&quot; )</p>
3314
- <p class="label">Example</p>
3315
- <p class="example">$vevent->deleteProperty( &quot;DTEND&quot; );</p>
3316
- <h5>Get DTEND</h5>
3317
- Fetch property value.
3318
- <p class="label">Format 1</p>
3319
- <p class="format">getProperty( &quot;DTEND&quot; )</p>
3320
- <p class="comment">output = dtendDate<span class="ref">1</span></p>
3321
- <p class="label">Format 2</p>
3322
- <p class="format">getProperty( &quot;DTEND&quot;, FALSE , TRUE )</span>
3323
- <p class="comment">output = array( &quot;value&quot; =&gt; dtendDate<span class="ref">1</span>
3324
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3325
- <p class="label">Example</p>
3326
- <p class="example">$dtend = $vevent->getProperty( &quot;dtend&quot; );</p>
3327
- <h5>Set DTEND</h5>
3328
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
3329
- (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3330
- <br />
3331
- <br />
3332
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set, date-time values will be set WITH timezone from config.
3333
- <br />
3334
- <br />
3335
- Parameters, if any, will be ordered as prescribed in rcf2445.
3336
- <p class="label">Format</p>
3337
- <p class="format">setProperty( &quot;dtend&quot;, dtendDate [, params<span class="ref">2</span> ] )</span>
3338
- <p class="comment">dtendDate<span class="ref">1</span> = array ( &quot;year&quot; =&gt; int year
3339
- , &quot;month&quot; =&gt; int month
3340
- , &quot;day&quot; =&gt; int day
3341
- [, &quot;hour&quot; =&gt; int hour
3342
- , &quot;min&quot; =&gt; int min
3343
- , &quot;sec&quot; =&gt; int sec
3344
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3345
- dtendDate = int year
3346
- , int month
3347
- , int day
3348
- [, int hour
3349
- , int min
3350
- , int sec
3351
- [, mixed tz ]]
3352
- dtendDate = array( int year
3353
- , int month
3354
- , int day
3355
- [, int hour
3356
- , int min
3357
- , int sec
3358
- [, mixed tz ]] )
3359
- dtendDate = array( &quot;timestamp&quot; =&gt; int timestamp [,&quot;tz&quot; =&gt; mixed tz])
3360
- dtendDate = string datestring // <span class="ref">string date,
3361
- acceptable by strtotime-command,
3362
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3363
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3364
- dtendDate : Within the "VFREEBUSY" calendar component,
3365
- the time MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
3366
- tz = &lt;timezone identifier&gt; / UTC offset
3367
- (timezone will be used as tzidparam (below), if tzidparam not set)
3368
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3369
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[,xparams])
3370
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3371
- // <span class="ref">output as local date-time with timezone identifier</span>
3372
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3373
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
3374
- xparams = xparamkey =&gt; xparamvalue</p>
3375
- <p class="label">Example 1</p>
3376
- <p class="example">$vevent->setProperty( &quot;dtend&quot;
3377
- , 2006, 8, 11, 16, 30, 0 );
3378
- <span class="ref">// 11 august 2006 16.30.00 local date</span></p>
3379
- <p class="label">Example 2</p>
3380
- <p class="example">$vfreebusy->setProperty( &quot;dtend&quot;
3381
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3382
- <span class="ref">// 11 august 2006 16.30.00 -040000 :
3383
- local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
3384
- <p class="label">Example 3</p>
3385
- <p class="example">$vevent->setProperty( &quot;dtend&quot;
3386
- , array( 'year' =&gt;, 2006, 'month' =&gt; 8, 'day'=&gt; 11 )
3387
- , array( 'VALUE' =&gt; 'DATE' ));
3388
- <span class="ref">// end of one or more all-day events</span></p>
3389
- <br />
3390
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3391
-
3392
-
3393
- <a name="DTSTAMP"></a><h3>3.2.16 DTSTAMP</h3>
3394
- The property indicates the date/time that the instance of the iCalendar object was created and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components. However, DTSTAMP is <b>AUTO</b> GENERATED in iCalcreator.
3395
- <br /><br />
3396
- DTSTAMP may be required when importing iCal files into some calendaring software<br />(MS etc.),
3397
- as well as (calendar) <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and<br />"X-WR-TIMEZONE",
3398
- <a href="#METHOD">METHOD</a> property (value PUBLISH etc.) and (also auto created) <a href="#UID">UID</a> property.
3399
- <br /><br />
3400
- The value type for DTSTAMP is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3401
- <h5>Delete DTSTAMP</h5>
3402
- If DTSTAMP if removed from a component, DTSTAMP will automatically be recreated when calendar output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
3403
- <p class="label">Format</p>
3404
- <p class="format">deleteProperty( &quot;DTSTAMP&quot; )</p>
3405
- <p class="label">Example</p>
3406
- <p class="example">$vevent->deleteProperty( &quot;DTSTAMP&quot; );</p>
3407
- <h5>Get DTSTAMP</h5>
3408
- Fetch property value.
3409
- <p class="label">Format 1</p>
3410
- <p class="format">getProperty( &quot;DTSTAMP&quot; )</p>
3411
- <p class="comment">output = dtstampDate<span class="ref">1</span></p>
3412
- <p class="label">Format 2</p>
3413
- <p class="format">getProperty( &quot;DTSTAMP&quot;, FALSE , TRUE )</p>
3414
- <p class="comment">output = array( &quot;value&quot; =&gt; dtstampDate<span class="ref">1</span>
3415
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3416
- <p class="label">Example</p>
3417
- <p class="example">$dtstamp = $vevent->getProperty( &quot;dtstamp&quot; );</p>
3418
- <h5>Set DTSTAMP</h5>
3419
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or, if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3420
- <p class="label">Format</p>
3421
- <p class="format">setProperty( &quot;dtstamp&quot;, dtstampDate [, xparam ] )</p>
3422
- <p class="comment">dtstampDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3423
- , &quot;month&quot; =&gt; int month
3424
- , &quot;day&quot; =&gt; int day
3425
- [, &quot;hour&quot; =&gt; int hour
3426
- , &quot;min&quot; =&gt; int min
3427
- , &quot;sec&quot; =&gt; int sec
3428
- , &quot;tz&quot; =&gt; offset ]] )
3429
- dtstampDate = int year
3430
- , int month
3431
- , int day
3432
- [, int hour
3433
- , int min
3434
- , int sec ]
3435
- dtstampDate = array( int year
3436
- , int month
3437
- , int day
3438
- [, int hour
3439
- , int min
3440
- , int sec
3441
- [, offset ]] )
3442
- dtstampDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
3443
- dtstampDate = string datestring // <span class="ref">string date,
3444
- acceptable by strtotime-command,
3445
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
3446
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3447
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3448
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3449
- <p class="label">Example 1</p>
3450
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
3451
- $vcalendar = new vcalendar( $config );
3452
- $vtodo = & $vcalendar->newComponent( 'vtodo' );
3453
- .. .
3454
- $vtodo->setProperty( &quot;dstamp&quot;
3455
- , 2006, 8, 11, 7, 30, 1 );
3456
- <span class="ref">// 11 august 2006 07.30.01 UTC</span></p>
3457
- <p class="label">Example 2</p>
3458
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
3459
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
3460
- // <span class="ref">local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
3461
- $vtodo->setProperty( &quot;dtstamp&quot;, $date );
3462
- .. .</p>
3463
- <br />
3464
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3465
-
3466
- <a name="DTSTART"></a><h3>3.2.17 DTSTART</h3>
3467
- This property specifies when the calendar component begins.<br />
3468
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br />
3469
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br /><br />
3470
- The default value type for DTSTART is DATE-TIME, can be set to a DATE value type.<br /><br />
3471
- For an &quot;all-day event&quot; and using timeless dates, example (2007-12-01)<br />
3472
- DTSTART;VALUE=DATE:20071201<br />
3473
- DTEND;VALUE=DATE:20071202. // <span class="ref">opt., in effect midnight of the day <u>before</u> the date!!</span>
3474
- <h5>Delete DTSTART</h5>
3475
- Remove DTSTART from component.
3476
- <p class="label">Format</p>
3477
- <p class="format">deleteProperty( &quot;DTSTART&quot; )</p>
3478
- <p class="label">Example</p>
3479
- <p class="example">$vevent->deleteProperty( &quot;DTSTART&quot; );</p>
3480
- <h5>Get DTSTART</h5>
3481
- Fetch property value.
3482
- <p class="label">Format 1</p>
3483
- <p class="format">getProperty( &quot;DTSTART&quot; )</p>
3484
- <p class="comment">output = dtstartDate<span class="ref">1</span></p>
3485
- <p class="label">Format 2</p>
3486
- <p class="format">getProperty( &quot;DTSTART&quot;, FALSE , TRUE )</p>
3487
- <p class="comment">output = array( &quot;value&quot; =&gt; dtstartDate<span class="ref">1</span>
3488
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3489
- <p class="label">Example</p>
3490
- <p class="example">$dtstart = $vevent->getProperty( &quot;dtstart&quot; );</p>
3491
- <h5>Set DTSTART</h5>
3492
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3493
- <br />
3494
- <br />
3495
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set, date-time values will be set WITH timezone from config.
3496
- <br />
3497
- <br />
3498
- Parameters, if any, will be ordered as prescribed in rcf2445.
3499
- <p class="label">Format</p>
3500
- <p class="format">setProperty( &quot;dtstart&quot;, dtstartDate [, params ] )</p>
3501
- <p class="comment">dtstartDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3502
- , &quot;month&quot; =&gt; int month
3503
- , &quot;day&quot; =&gt; int day
3504
- [, &quot;hour&quot; =&gt; int hour
3505
- , &quot;min&quot; =&gt; int min
3506
- , &quot;sec&quot; =&gt; int sec
3507
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3508
- dtstartDate = int year
3509
- , int month
3510
- , int day
3511
- [, int hour
3512
- , int min
3513
- , int sec
3514
- [, mixed tz ]]
3515
- dtstartDate = array( int year
3516
- , int month
3517
- , int day
3518
- [, int hour
3519
- , int min
3520
- , int sec
3521
- [, mixed tz ]] )
3522
- dtstartDate = array(&quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3523
- dtstartDate = string datestring // <span class="ref">string date,
3524
- acceptable by strtotime-command,
3525
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3526
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3527
- dtstartDate : Within the "VFREEBUSY" calendar component,
3528
- the dtstartDate MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
3529
- tz = &lt;timezone identifier&gt; / offset
3530
- (timezone will be used as tzidparam (below), if tzidparam not set)
3531
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3532
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
3533
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3534
- // <span class="ref">output as local date-time with timezone identifier</span>
3535
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3536
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
3537
- xparams = xparamkey =&gt; xparamvalue</p>
3538
- <p class="label">Example 1</p>
3539
- <p class="example">$vevent->setProperty( &quot;dstart&quot;
3540
- , 2006, 8, 11, 7, 30, 1 );
3541
- <span class="comment">// 11 august 2006 07.30.01 local date</span></p>
3542
- <p class="label">Example 2</p>
3543
- <p class="example">$vevent->setProperty( &quot;dstart&quot;
3544
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3545
- <span class="comment">// 11 august 2006 16.30.00 -040000,
3546
- // local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
3547
- <p class="label">Example 3</p>
3548
- <p class="example">$vevent->setProperty( &quot;dtstart&quot;
3549
- , array( 'year' =&gt;, 2006, 'month' =&gt; 8, 'day'=&gt; 11 )
3550
- , array( 'VALUE' =&gt; 'DATE' ));
3551
- <span class="comment">// start of an all-day event, or a period of (entire) days</span></p>
3552
- <br />
3553
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3554
-
3555
-
3556
- <a name="DUE"></a><h3>3.2.18 DUE</h3>
3557
- This property defines the date and time when a <a href="#VTODO">VTODO</a> is expected to be completed
3558
- and is OPTIONAL and MUST NOT occur more than once and only if DURATION NOT occurs.<br /><br />
3559
- The default value type for DUE is DATE-TIME, can be set to a DATE value type.
3560
- <h5>Delete DUE</h5>
3561
- Remove DUE from component.
3562
- <p class="label">Format</p>
3563
- <p class="format">deleteProperty( &quot;DUE&quot; )</p>
3564
- <p class="label">Example</p>
3565
- <p class="example">$vtodo->deleteProperty( &quot;DUE&quot; );</p>
3566
- <h5>Get DUE</h5>
3567
- Fetch property value.
3568
- <p class="label">Format 1</p>
3569
- <p class="format">getProperty( &quot;DUE&quot; )</p>
3570
- <p class="comment">output = dueDate<span class="ref">1</span></p>
3571
- <p class="label">Format 2</p>
3572
- <p class="format">getProperty( &quot;DUE&quot;, FALSE , TRUE )</p>
3573
- <p class="comment">output = array( &quot;value&quot; =&gt; dueDate<span class="ref">1</span>
3574
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
3575
- <p class="label">Example</p>
3576
- <p class="example">$due = $vtodo->getProperty( &quot;due&quot; );</p>
3577
- <h5>Set DUE</h5>
3578
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
3579
- (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
3580
- <br />
3581
- <br />
3582
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set, date-time values will be set WITH timezone from config.
3583
- <br />
3584
- <br />
3585
- Parameters, if any, will be ordered as prescribed in rcf2445.
3586
- <p class="label">Format</p>
3587
- <p class="format">setProperty( &quot;due&quot;, dueDate [, params ] )</p>
3588
- <p class="comment">dueDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3589
- , &quot;month&quot; =&gt; int month
3590
- , &quot;day&quot; =&gt; int day
3591
- [, &quot;hour&quot; =&gt; int hour
3592
- , &quot;min&quot; =&gt; int min
3593
- , &quot;sec&quot; =&gt; int sec
3594
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3595
- dueDate = int year
3596
- , int month
3597
- , int day
3598
- [, int hour
3599
- , int min
3600
- , int sec
3601
- [, mixed tz ]]
3602
- dueDate = array( int year
3603
- , int month
3604
- , int day
3605
- [, int hour
3606
- , int min
3607
- , int sec
3608
- [, mixed tz ]] )
3609
- dueDate = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3610
- dueDate = string datestring // <span class="ref">string date,
3611
- acceptable by strtotime-command,
3612
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3613
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3614
- tz = &lt;timezone identifier&gt; / offset
3615
- (timezone will be used as tzidparam (below), if tzidparam not set)
3616
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3617
- params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
3618
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3619
- // <span class="ref">output as local date-time with timezone identifier</span>
3620
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3621
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, &quot;during the day&quot;</span>
3622
- xparams = xparamkey =&gt; xparamvalue<p/>
3623
- <p class="label">Example 1</p>
3624
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3625
- , 2006, 8, 11, 18, 0, 0 );
3626
- <span class="comment">// 11 august 2005 18.00.00 local date</span></p>
3627
- <p class="label">Example 2</p>
3628
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3629
- , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
3630
- <span class="comment">// 11 august 2006 16.30.00 -040000
3631
- // local date + UTC offset sets <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
3632
- <p class="label">Example 3</p>
3633
- <p class="example">$vtodo->setProperty( &quot;due&quot;
3634
- , array( 'year' =&gt;, 2006, 'month' =&gt; 8, 'day'=&gt; 11 )
3635
- , array( 'VALUE' =&gt; 'DATE' ));
3636
- <span class="comment">// due &quot;during the day&quot;</span></p>
3637
- <br />
3638
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3639
-
3640
-
3641
- <a name="DURATION"></a><h3>3.2.19 DURATION</h3>
3642
- The property specifies a positive duration of time<br />
3643
- In a VEVENT it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DTEND. If one occurs, so MUST NOT the other.<br />
3644
- In a VTODO it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DUE. If one occurs, so MUST NOT the other.<br />
3645
- In a VFREEBUSY it is OPTIONAL and MUST NOT occur more than once.<br />
3646
- In a VALARM it is OPTIONAL and MUST NOT occur more than once and MUST occur in pair with TRIGGER. If one occurs, so MUST the other.
3647
- <h5>Delete DURATION</h5>
3648
- Remove DURATION from component.
3649
- <p class="label">Format</p>
3650
- <p class="format">deleteProperty( &quot;DURATION&quot; )</p>
3651
- <p class="label">Example</p>
3652
- <p class="example">$valarm->deleteProperty( &quot;DURATION&quot; );</p>
3653
- <h5>Get DURATION</h5>
3654
- Fetch property value.
3655
- <p class="label">Format 1</p>
3656
- <p class="format">getProperty( &quot;DURATION&quot; )</p>
3657
- <p class="comment">output = duration<span class="ref">1</span></p>
3658
- <p class="label">Format 2</p>
3659
- <p class="format">getProperty( &quot;DURATION&quot;, FALSE , TRUE )</p>
3660
- <p class="comment">output = array( &quot;value&quot; =&gt; duration<span class="ref">1</span>
3661
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3662
- <p class="label">Example</p>
3663
- <p class="example">$duration = $vtodo->getProperty( &quot;duration&quot; );</p>
3664
- <p class="label">option</p>
3665
- If a 4th argument is used and set to TRUE, returned output is in a DATE-TIME
3666
- output format (like <a href="#DTEND">DTEND</a> / <a href="#DUE">DUE</a>), based on
3667
- <a href="#DTSTART">DTSTART</a> value with added DURATION value.
3668
- <h5>Set DURATION</h5>
3669
- Insert property value.
3670
- <p class="label">Format</p>
3671
- <p class="format">setProperty( &quot;duration&quot;, duration [, xparam ] )</p>
3672
- <p class="comment">
3673
- duration<span class="ref">1</span> = array ( &quot;week&quot; =&gt; int week )
3674
- duration<span class="ref">1</span> = array ( &quot;day&quot; =&gt; int day )
3675
- [, &quot;hour&quot; =&gt; int hour
3676
- , &quot;min&quot; =&gt; int min
3677
- , &quot;sec&quot; =&gt; int sec ])
3678
- duration = array ( &quot;sec&quot; =&gt; int sec )
3679
- duration = array( int week/false
3680
- [, int day/false
3681
- [, int hour
3682
- , int min
3683
- , int sec ]] )
3684
- duration = int week/false
3685
- [, int day/false
3686
- [, int hour
3687
- , int min
3688
- , int sec ]]
3689
- duration = string dur-value = [&quot;+&quot;] &quot;P&quot; (dur-date/dur-time/dur-week)
3690
- dur-date = dur-day [dur-time]
3691
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
3692
- dur-week = 1*DIGIT &quot;W&quot;
3693
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
3694
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
3695
- dur-second = 1*DIGIT &quot;S&quot;
3696
- dur-day = 1*DIGIT &quot;D&quot;
3697
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
3698
- <p class="label">Example 1</p>
3699
- <p class="example">$vtodo->setProperty &quot;duration&quot;
3700
- , array( &quot;day&quot; =&gt; 1 )); </p>
3701
- <p class="ref">// one day</p>
3702
- <p class="label">Example 2</p>
3703
- <p class="example">$vtodo->setProperty( &quot;duration&quot;
3704
- , &quot;PT4H&quot; );
3705
- <p class="ref"> // four hours</p>
3706
- <br />
3707
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3708
-
3709
-
3710
- <a name="EXDATE"></a><h3>3.2.20 EXDATE</h3>
3711
- This property defines the list of date/time exceptions for a recurring calendar component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br /><br />
3712
- The default value type for EXDATE is DATE-TIME, can be set to a DATE value type.
3713
- <h5>Delete EXDATE</h5>
3714
- Remove EXDATE from component.
3715
- <p class="label">Format</p>
3716
- <p class="format">deleteProperty( &quot;EXDATE&quot; )</p>
3717
- <p class="label">Example 1</p>
3718
- <p class="example">$vtodo->deleteProperty( &quot;EXDATE&quot; );</p>
3719
- <p class="label">Example 2</p>
3720
- Delete EXDATE property no 2.
3721
- <p class="example">$vjournal->deleteProperty( &quot;EXDATE&quot;, 2 );</p>
3722
- <p class="label">Example 3</p>
3723
- Deleting all EXDATE properties.
3724
- <p class="example">while( $vjournal->deleteProperty( &quot;EXDATE&quot; ))
3725
- continue;</p>
3726
- <h5>Get EXDATE</h5>
3727
- Fetch property value.
3728
- <p class="label">Format 1</p>
3729
- <p class="format">getProperty( &quot;EXDATE&quot; )<p>
3730
- <p class="comment">output = exdates<span class="ref">1</span></p>
3731
- <p class="label">Format 2</p>
3732
- <p class="format">getProperty( &quot;exdate&quot;, propOrderNo/FALSE, TRUE )</p>
3733
- <p class="comment">output = array( &quot;value&quot; =&gt; exdates<span class="ref">1</span>
3734
- , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
3735
- <p class="label">Format 3</p>
3736
- <p class="format">getProperty( &quot;EXDATE&quot;, propOrderNo )</p>
3737
- <p class="comment">Get propOrderNo EXDATE</p>
3738
- <p class="label">Example</p>
3739
- <p class="example">$exdate = $vtodo->getProperty( &quot;exdate&quot; );</p>
3740
- <h5>Set EXDATE</h5>
3741
- Insert property value.<br />
3742
- If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;,
3743
- all timezone or offset in dates are ignored and DATE-TIME value type is set.<br />
3744
- If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br />
3745
- If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br />
3746
- If empty params and offset in 1st date, all remaining dates are set to UTC.<br />
3747
- If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br />
3748
- If none of the above rules are applicable, DATE-TIME and local date is set default.
3749
- <br />
3750
- Parameters, if any, will be ordered as prescribed in rcf2445.
3751
- <p class="label">Format</p>
3752
- <p class="format">setProperty( &quot;exdate&quot;, exdates [, xparams [, propOrderNo ]] )</p>
3753
- <p class="comment">exdates<span class="ref">1</span> = array ( date *[, date ] )
3754
- date = array( int year
3755
- , int month
3756
- , int day
3757
- [, int hour
3758
- , int min
3759
- , int sec
3760
- [, mixed tz ]] )
3761
- date<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
3762
- , &quot;month&quot; =&gt; int month
3763
- , &quot;day&quot; =&gt; int day
3764
- [, &quot;hour&quot; =&gt; int hour
3765
- , &quot;min&quot; =&gt; int min
3766
- , &quot;sec&quot; =&gt; int sec
3767
- [, &quot;tz&quot; =&gt; mixed tz ]] )
3768
- date = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
3769
- date = string datestring // <span class="ref">string date,
3770
- acceptable by strtotime-command,
3771
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
3772
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
3773
- tz = &lt;timezone identifier&gt; / offset
3774
- (timezone will be used as tzidparam (below), if tzidparam not set)
3775
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
3776
- params<span class="ref">2</span> = array([(datetimeparam/dateparam)&nbsp;/ tzidparam] [,xparam])
3777
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
3778
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
3779
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
3780
- xparams = *[ xparamkey =&gt; xparamvalue ]
3781
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3782
- <p class="label">Example 1</p>
3783
- <p class="example">$vevent->setProperty( &quot;exdate&quot;
3784
- , array( array( 2006, 8, 14, 16, 0, 0 ));
3785
- <span class="ref">// >exclude 2006-08-14 16.00.00 (local date) from recurrence pattern</span></p>
3786
- <p class="label">Example 2</p>
3787
- <p class="example">$vevent->setProperty( &quot;exdate&quot;
3788
- , array( array('year' =&gt;,2006,'month' =&gt; 8,'day'=&gt; 11))
3789
- , array( 'VALUE' =&gt; 'DATE' ));
3790
- <span class="ref">// exclude 2006-08-11 from recurrence pattern;</span></p>
3791
- <br />
3792
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3793
-
3794
-
3795
- <a name="EXRULE"></a><h3>3.2.21 EXRULE</h3>
3796
- This property defines a rule or repeating pattern for an exception to a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
3797
- <h5>Delete EXRULE</h5>
3798
- Remove EXRULE from component.
3799
- <p class="label">Format</p>
3800
- <p class="format">deleteProperty( &quot;EXRULE&quot; )</p>
3801
- <p class="label">Example 1</p>
3802
- <p class="example">$vtodo->deleteProperty( &quot;EXRULE&quot; );</p>
3803
- <p class="label">Example 2</p>
3804
- Delete EXRULE property no 2.
3805
- <p class="example">$vjournal->deleteProperty( &quot;EXRULE&quot;, 2 );</p>
3806
- <p class="label">Example 3</p>
3807
- Deleting all EXRULE properties.
3808
- <p class="example">while( $vjournal->deleteProperty( &quot;EXRULE&quot; ))
3809
- continue;</p>
3810
- <h5>Get EXRULE</h5>
3811
- Fetch property value.
3812
- <p class="label">Format 1</p>
3813
- <p class="format">getProperty( &quot;EXRULE&quot; )</p>
3814
- <p class="comment">output = recur<span class="ref">1</span></p>
3815
- <p class="label">Format 2</p>
3816
- <p class="format">getProperty( &quot;exrule&quot;, propOrderNo/FALSE, TRUE )</p>
3817
- <p class="comment">output = array( &quot;value&quot; =&gt; recur<span class="ref">1</span>
3818
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
3819
- <p class="label">Format 3</p>
3820
- <p class="format">getProperty( &quot;EXRULE&quot;, propOrderNo )</p>
3821
- <p class="comment">Get propOrderNo EXRULE</p>
3822
- <p class="label">Example</p>
3823
- <p class="example">$exrule = $vtodo->getProperty( &quot;exrule&quot; );</p>
3824
- <h5>Set EXRULE</h5>
3825
- Insert property value.
3826
- <br />
3827
- Parameters, will be ordered as prescribed in rcf2445.
3828
- <p class="label">Format</p>
3829
- <p class="format">setProperty( &quot;exrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
3830
- See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/iCalcreator/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a>
3831
- and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.
3832
- <p class="comment">recur<span class="ref">1</span> = array( "FREQ"=&gt;freq
3833
- // <span class="ref">either UNTIL or COUNT may appear in a &quot;recur&quot;,
3834
- but UNTIL and COUNT MUST NOT occur in the same &quot;recur&quot;</span>
3835
- [, &quot;UNTIL&quot; &quot;=&gt;&quot; >enddate ]
3836
- [, &quot;COUNT&quot; &quot;=&gt;&quot; 1*DIGIT ]
3837
- // <span class="ref">the rest of these keywords are optional,
3838
- but MUST NOT occur more than once</span>
3839
- [, &quot;INTERVAL&quot; &quot;=&gt;&quot; 1*DIGIT ]
3840
- [, &quot;BYSECOND&quot; &quot;=&gt;&quot; byseclist ]
3841
- [, &quot;BYMINUTE&quot; &quot;=&gt;&quot; byminlist ]
3842
- [, &quot;BYHOUR&quot; &quot;=&gt;&quot; byhrlist ]
3843
- [, &quot;BYDAY&quot; &quot;=&gt;&quot; bywdaylist ]
3844
- [, &quot;BYMONTHDAY&quot; &quot;=&gt;&quot; bymodaylist ]
3845
- [, &quot;BYYEARDAY&quot; &quot;=&gt;&quot; byyrdaylist ]
3846
- [, &quot;BYWEEKNO&quot; &quot;=&gt;&quot; bywknolist ]
3847
- [, &quot;BYMONTH&quot; &quot;=&gt;&quot; bymolist ]
3848
- [, &quot;BYSETPOS&quot; &quot;=&gt;&quot; bysplist ]
3849
- [, &quot;WKST&quot; &quot;=&gt;&quot; weekday ]
3850
- [, x-name &quot;=&gt;&quot; text ] )
3851
- freq = &quot;SECONDLY&quot; /
3852
- &quot;MINUTELY&quot; /
3853
- &quot;HOURLY&quot; /
3854
- &quot;DAILY&quot; /
3855
- &quot;WEEKLY&quot; /
3856
- &quot;MONTHLY&quot; /
3857
- &quot;YEARLY&quot;
3858
- enddate = date
3859
- enddate = / date-time ;An <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME value
3860
- byseclist = seconds
3861
- byseclist = array(seconds *(, seconds ))
3862
- seconds = 1DIGIT / 2DIGIT ;0 to 59
3863
- byminlist = minutes
3864
- byminlist = array( minutes *(, minutes ))
3865
- minutes = 1DIGIT / 2DIGIT ;0 to 59
3866
- byhrlist = hour
3867
- byhrlist = array( hour *(, hour ))
3868
- hour = 1DIGIT / 2DIGIT ;0 to 23
3869
- bywdaylist = weekdaynum
3870
- bywdaylist = array( weekdaynum *("," weekdaynum ))
3871
- weekdaynum = array( [([plus] ordwk / minus ordwk)], &quot;DAY&quot; =&gt; weekday )
3872
- plus = &quot;+&quot;
3873
- minus = &quot;-&quot;
3874
- ordwk = 1DIGIT / 2DIGIT ;1 to 53
3875
- weekday = &quot;SU&quot; / &quot;MO&quot; / &quot;TU&quot; / &quot;WE&quot; / &quot;TH&quot; / &quot;FR&quot; / &quot;SA&quot;
3876
- ; Corresponding to
3877
- ; SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
3878
- ; FRIDAY, SATURDAY and SUNDAY days of the week.
3879
- bymodaylist = monthdaynum
3880
- bymodaylist = array( monthdaynum *(, monthdaynum ))
3881
- monthdaynum = ( [plus] ordmoday ) / ( minus ordmoday )
3882
- ordmoday = 1DIGIT / 2DIGIT ;1 to 31
3883
- byyrdaylist = yeardaynum
3884
- byyrdaylist = array( yeardaynum *(, yeardaynum ))
3885
- yeardaynum = ( [plus] ordyrday ) / ( minus ordyrday )
3886
- ordyrday = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366
3887
- bywknolist = weeknum
3888
- bywknolist = array( weeknum *(, weeknum ))
3889
- weeknum = ( [plus] ordwk ) / ( minus ordwk )
3890
- bymolist = monthnum
3891
- bymolist = array( monthnum *(, monthnum ))
3892
- monthnum = 1DIGIT / 2DIGIT ;1 to 12
3893
- bysplist = setposday
3894
- bysplist = array( setposday *(, setposday ))
3895
- setposday = yeardaynum</p>
3896
- <p class="comment">
3897
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )
3898
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
3899
- <p class="label">Example</p>
3900
- <p class="example">$vevent->setProperty(&nbsp;&quot;Exrule&quot;
3901
- ,&nbsp;array( &quot;FREQ&quot; =&gt; &quot;MONTHLY&quot;
3902
- , &quot;UNTIL&quot; =&gt; &quot;20060831&quot;
3903
- // <span class="ref">DATE / DATE-TIME in <a href="#DATE_WITH_UTC_TIME">UTC</a> format; string/array, see <a href="#CREATED">CREATED</a> format</span>
3904
- , &quot;INTERVAL&quot; =&gt; 2
3905
- , &quot;WKST&quot; =&gt; &quot;SU&quot;
3906
- , &quot;BYSECOND&quot; =&gt; 2
3907
- , &quot;BYMINUTE&quot; =&gt; array( 2, -4, 6 ) // (*)
3908
- , &quot;BYHOUR&quot; =&gt; array( 2, 4, -6 ) // (*)
3909
- , &quot;BYMONTHDAY&quot; =&gt; -2 // (*)
3910
- , &quot;BYYEARDAY&quot; =&gt; 2 // (*)
3911
- , &quot;BYWEEKNO&quot; =&gt; array( 2, -4, 6 ) // (*)
3912
- , &quot;BYMONTH&quot; =&gt; 2 // (*)
3913
- , &quot;BYSETPOS&quot; =&gt; array( 2, -4, 6 ) // (*)
3914
- , &quot;BYday&quot; =&gt; array( array(-2, &quot;DAY&quot; =&gt; &quot;WE&quot; )
3915
- , array( 3, &quot;DAY&quot; =&gt; &quot;TH&quot;)
3916
- , array( 5, &quot;DAY&quot; =&gt; &quot;FR&quot;)
3917
- , array( &quot;DAY&quot; =&gt; &quot;MO&quot;))
3918
- // (**)
3919
- , &quot;X-NAME&quot; =&gt; &quot;x-value&quot; )
3920
- , array( &quot;xparamkey&quot; =&gt; &quot;xparamValue&quot; ));
3921
-
3922
- $vtodo->setProperty( >&quot;exrule&quot;
3923
- , array( &quot;FREQ&quot; =&gt; &quot;WEEKLY&quot;
3924
- , &quot;COUNT&quot; =&gt; 2
3925
- , &quot;INTERVAL&quot; =&gt; 2
3926
- , &quot;WKST&quot; =&gt; &quot;SU&quot;
3927
- , &quot;BYSECOND&quot; =&gt; array( -2, 4, 6 ) // (*)
3928
- , &quot;BYMINUTE&quot; =&gt; -2 // (*)
3929
- , &quot;BYHOUR&quot; =&gt; 2 // (*)
3930
- , &quot;BYMONTHDAY&quot; =&gt; array( 2, -4, 6 ) // (*)
3931
- , &quot;BYYEARDAY&quot; =&gt; array( -2, 4, 6 ) // (*)
3932
- , &quot;BYWEEKNO&quot; =&gt; -2 // (*)
3933
- , &quot;BYMONTH&quot; =&gt; array( 2, 4, -6 ) // (*)
3934
- , &quot;BYSETPOS&quot; =&gt; -2 // (*)
3935
- , &quot;BYday&quot; =&gt; array( 5, &quot;DAY&quot; =&gt; &quot;WE&quot; )
3936
- // (**)
3937
- , &quot;X-NAME&quot; =&gt; &quot;x-value&quot; )
3938
- , array( &quot;xparamkey&quot; =&gt; &quot;xparamValue&quot; ));
3939
- //<span class="ref">(*) single value/array of values</span>
3940
- //<span class="ref">(**) single value array /array of arrays</span>
3941
- </p>
3942
- <br />
3943
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
3944
-
3945
-
3946
- <a name="FREEBUSY_PROP"></a><h3>3.2.22 FREEBUSY</h3>
3947
- The property defines one or more free or busy time intervals in a <a href="#VFREEBUSY">VFREEBUSY</a> calendar component.<br /><br />
3948
- The value type for FREEBUSY is PERIOD. A PERIOD is a DATE-TIME/DATE-TIME or a DATE-TIME/duration.
3949
- <h5>Delete FREEBUSY</h5>
3950
- Remove FREEBUSY from component.
3951
- <p class="label">Format</p>
3952
- <p class="format">deleteProperty( &quot;FREEBUSY&quot; )</p>
3953
- <p class="label">Example 1</p>
3954
- <p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot; );</p>
3955
- <p class="label">Example 2</p>
3956
- Delete FREEBUSY property no 2.
3957
- <p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot;, 2 );</p>
3958
- <p class="label">Example 3</p>
3959
- Deleting all FREEBUSY properties.
3960
- <p class="example">while( $vfreebusy->deleteProperty( &quot;FREEBUSY&quot; ))
3961
- continue;</p>
3962
- <h5>Get FREEBUSY</h5>
3963
- Fetch property value.
3964
- <p class="label">Format 1</p>
3965
- <p class="format">getProperty( &quot;FREEBUSY&quot; )</p>
3966
- <p class="comment">output = array( &quot;fbtyp&quot; =&gt; freebusytype<span class="ref">1</span> , periods<span class="ref">2</span> )</p>
3967
- <p class="label">Format 3</p>
3968
- <p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo/FALSE , TRUE )</p>
3969
- <p class="comment">output = array( &quot;value&quot; =&gt; array(&quot;fbtype&quot; =&gt; freebusytype<span class="ref">1</span> ,periods<span class="ref">2</span>)
3970
- , &quot;params&quot; =&gt; xparams<span class="ref"> 3</span> )</p>
3971
- <p class="label">Format 3</p>
3972
- <p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo )</p>
3973
- <p class="comment">Get propOrderNo FREEBUSY</p>
3974
- <p class="label">Example</p>
3975
- <p class="example">$freebusy = $vfreebusy->getProperty( &quot;FREEBUSY&quot; );</p>
3976
- <h5>Set FREEBUSY</h5>
3977
- Insert property value. A FREEBUSY input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
3978
- <p class="label">Format</p>
3979
- <p class="format">setProperty( &quot;freebusy&quot;,freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
3980
- <p class="comment">freebusytype<span class="ref">1</span> = one of &quot;FREE&quot;
3981
- / &quot;BUSY&quot; <b>Default</b>
3982
- / &quot;BUSY-UNAVAILABLE&quot;
3983
- / &quot;BUSY-TENTATIVE&quot;
3984
- / x-name
3985
- fbperiods = array( periods<span class="ref">2</span> )&nbsp;
3986
- periods<span class="ref">2</span> = array( startdate, enddate/duration )
3987
- *[, array( startdate, enddate/duration )]
3988
- startdate/enddate = array( int year
3989
- , int month
3990
- , int day
3991
- , int int hour
3992
- , int min
3993
- , int day )
3994
- startdate/enddate = array( &quot;year&quot; =&gt; int year
3995
- , &quot;month&quot; =&gt; int month
3996
- , &quot;day&quot; =&gt; int day
3997
- , &quot;hour&quot; =&gt; int hour
3998
- , &quot;min&quot; =&gt; int min
3999
- , &quot;sec&quot; =&gt; int sec ) // <span class="ref">output format</span>
4000
- startdate/enddate = array( &quot;timestamp&quot; =&gt; int timestamp )
4001
- startdate/enddate = string datestring // <span class="ref">string date,
4002
- acceptable by strtotime-command,
4003
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
4004
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4005
- startdate/enddate : date and time values MUST be an <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4006
- duration = array( int week/false
4007
- [, int day/false
4008
- , int hour
4009
- , int min
4010
- , int sec] )
4011
- duration = array( &quot;week&quot; =&gt; int week/false
4012
- [, &quot;day&quot; =&gt; int day/false
4013
- [, &quot;hour&quot; =&gt; int hour
4014
- , &quot;min&quot; =&gt; int min
4015
- , &quot;sec&quot; =&gt; int sec ]] ); // <span class="ref">output format</span>
4016
- duration = array( &quot;sec&quot; =&gt; int sec )
4017
- duration = string dur-value
4018
- = ([&quot;+&quot;]/&quot;-&quot;) &quot;P&quot; (dur-date/dur-time/dur-week)
4019
- dur-date = dur-day [dur-time]
4020
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
4021
- dur-week = 1*DIGIT &quot;W&quot;
4022
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
4023
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
4024
- dur-second = 1*DIGIT &quot;S&quot;
4025
- dur-day = 1*DIGIT &quot;D&quot;
4026
- xparams<span class="ref">3</span> = array( *[ xparamkey =&gt; xparamvalue ] )
4027
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4028
- <p class="label">Example</p>
4029
- See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a>
4030
- and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.
4031
- <p class="example">$fdate1 = array ( 2001, 1, 1, 1, 1, 1 );
4032
- alt.
4033
- $fdate1 = array ( &quot;year&quot; =&gt; 2001
4034
- , &quot;month&quot; =&gt; 1
4035
- , &quot;day&quot; =&gt; 1
4036
- , &quot;hour&quot; =&gt; 1
4037
- , &quot;min&quot; =&gt; 1
4038
- , &quot;sec&quot; =&gt; 1 );
4039
- $fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
4040
- $fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
4041
- $fdate4 = &quot;4 April 2005 4:4:4&quot;;
4042
- $fdate7 = array ( &quot;year&quot; =&gt; 2007
4043
- , &quot;month&quot; =&gt; 7
4044
- , &quot;day&quot; =&gt; 7 );
4045
- $fdur6 = array ( &quot;week&quot; =&gt; 0
4046
- , &quot;day&quot; =&gt; 5
4047
- , &quot;hour&quot; =&gt; 5
4048
- , &quot;min&quot; =&gt; 5
4049
- , &quot;sec&quot; =&gt; 5 );
4050
- $fdur7 = array ( 0, 0, 6 ); // <span class="ref">duration for 6 hours</span>
4051
- $fdur8 = &quot;P2D&quot;; // <span class="ref">duration two days</span>
4052
- $freebusy->setProperty &quot;freebusy&quot;
4053
- , &quot;FREE&quot;
4054
- , array( array( $fdate1, $fdate2 )
4055
- , array( $fdate3, $fdur6 )
4056
- , array( $fdate4, $fdate5 )));
4057
- $freebusy->setProperty(&quot;freebusy&quot;
4058
- , &quot;Busy&quot;
4059
- , array( array( array( $fdate1, $fdate2 )
4060
- , array( $fdate3, $fdur8 )
4061
- , array( $fdate4, $fdur7 )
4062
- , array( $fdate1, $fdate3 )));</p>
4063
- <br />
4064
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4065
-
4066
-
4067
- <a name="GEO"></a><h3>3.2.23 GEO</h3>
4068
- This property specifies information related to the global position for the activity specified by VEVENT and VTODO components and is OPTIONAL and MUST NOT occur more than once.
4069
- <br /><br />
4070
- Value type for latitude and longitude is FLOAT. &quot;Values for latitude and longitude shall be expressed as decimal fractions of degrees. Whole degrees of latitude shall be represented by a two-digit decimal number ranging from 0 through 90. Whole degrees of longitude shall be represented by a decimal number ranging from 0 through 180. When a decimal fraction of a degree is specified, it shall be separated from the whole number of degrees by a decimal point.&quot;
4071
- <h5>Delete GEO</h5>
4072
- Remove GEO from component.
4073
- <p class="label">Format</p>
4074
- <p class="format">deleteProperty( &quot;GEO&quot; )</p>
4075
- <p class="label">Example</p>
4076
- <p class="example">$vevent->deleteProperty( &quot;FREEBUSY&quot; );</p>
4077
- <h5>Get GEO</h5>
4078
- Fetch property value.
4079
- <p class="label">Format 1</p>
4080
- <p class="format">getProperty( &quot;GEO&quot; )</p>
4081
- <p class="comment">output = array( &quot;latitude&quot; =&gt; &lt;latitude&gt;
4082
- , &quot;longitude&quot; =&gt; &lt;longitude&gt;))</p>
4083
- <p class="label">Format 2</p>
4084
- <p class="format">getProperty( &quot;GEO&quot;, FALSE , TRUE )</p>
4085
- <p class="comment">output = array( &quot;value&quot; =&gt; array ( &quot;latitude&quot; =&gt; &lt;latitude&gt;
4086
- , &quot;longitude&quot; =&gt; &lt;longitude&gt;))
4087
- , &quot;params&quot; =&gt; xparam <span class="ref">1</span> )</p>
4088
- <p class="label">Example</p>
4089
- <p class="example">$geo = $vevent->getProperty( &quot;GEO&quot; );</p>
4090
- <h5>Set GEO</h5>
4091
- Insert property value.
4092
- <p class="label">Format</p>
4093
- <p class="format">setProperty( &quot;geo&quot;, float latitude, float longitude [, xparam ] )</p>
4094
- <p class="comment">xparam <span class="ref">1</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4095
- <p class="label">Example</p>
4096
- <p class="example">$vevent->setProperty( &quot;geo&quot;, 11.23456, -23.45678 );</p>
4097
- <br />
4098
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4099
-
4100
-
4101
- <a name="LAST-MODIFIED"></a><h3>3.2.24 LAST-MODIFIED</h3>
4102
- The property specifies the date and time that the information associated with the calendar component was last revised in the calendar store. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VTIMEZONE">VTIMEZONE</a> components.<br /><br />
4103
- The value type for LAST-MODIFIED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
4104
- <h5>Delete LAST-MODIFIED</h5>
4105
- Remove LAST-MODIFIED from component.
4106
- <p class="label">Format</p>
4107
- <p class="format">deleteProperty( &quot;LAST-MODIFIED&quot; )</p>
4108
- <p class="label">Example</p>
4109
- <p class="example">$vevent->deleteProperty( &quot;LAST-MODIFIED&quot; );</p>
4110
- <h5>Get LAST-MODIFIED</h5>
4111
- Fetch property value.
4112
- <p class="label">Format 1</p>
4113
- <p class="format">getProperty( &quot;LAST-MODIFIED&quot; )</p>
4114
- <p class="comment">output = moddate<span class="ref">1</span></p>
4115
- <p class="label">Format 2</p>
4116
- <p class="format">getProperty( &quot;LAST-MODIFIED&quot;, FALSE , TRUE )</p>
4117
- <p class="comment">output = array( &quot;value&quot; =&gt; moddate<span class="ref">1</span>
4118
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4119
- <p class="label">Example</p>
4120
- <p class="example">$lastMod = $vevent->getProperty( &quot;LAST-MODIFIED&quot; );</p>
4121
- <h5>Set LAST-MODIFIED</h5>
4122
- Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or, if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
4123
- <p class="label">Format</p>
4124
- <p class="format">setProperty( &quot;Last-Modified&quot; [, moddate [, xparam ]] )</p>
4125
- <p class="comment">moddate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
4126
- , &quot;month&quot; =&gt; int month
4127
- , &quot;day&quot; =&gt; int day
4128
- [, &quot;hour&quot; =&gt; int hour
4129
- , &quot;min&quot; =&gt; int min
4130
- , &quot;sec&quot; =&gt; int sec
4131
- , &quot;tz&quot; =&gt; offset ]] )
4132
- completedDate = int year
4133
- , int month
4134
- , int day
4135
- [, int hour
4136
- , int min
4137
- , int sec ]
4138
- completedDate = array( int year
4139
- , int month
4140
- , int day
4141
- [, int hour
4142
- , int min
4143
- , int sec
4144
- [, offset ]] )
4145
- completedDate = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
4146
- completedDate = string datestring // <span class="ref">string date,
4147
- acceptable by strtotime-command,
4148
- ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
4149
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4150
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4151
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4152
- <p class="label">Example 1</p>
4153
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
4154
- $vcalendar = new vcalendar( $config );
4155
- $vtodo = & $vcalendar->newComponent( 'vtodo' );
4156
- .. .
4157
- $vtodo->setProperty(&quot;last-modified&quot;
4158
- , <td>2006, 8, 14, 12, 1, 2 );
4159
- <span class="ref">// 14 august 2006 12.01.02 UTC</span></p>
4160
- <p class="label">Example 2</p>
4161
- <p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
4162
- &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
4163
- <span class="ref">// local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
4164
- $vtodo->setProperty( &quot;last-modified&quot;, $date );
4165
- .. .</p>
4166
- <p class="label">Example 3</p>
4167
- <p class="example">$vevent->setProperty( &quot;last-modified&quot; );
4168
- <span class="ref">// current UTC DATE-TIME is set if called without parameters</span></p>
4169
- <br />
4170
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4171
-
4172
- <a name="LOCATION"></a><h3>3.2.25 LOCATION</h3>
4173
- The property defines the intended venue for the activity defined by a calendar component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
4174
- <br /><br />
4175
- The value type for LOCATION is TEXT.
4176
- <h5>Delete LOCATION</h5>
4177
- Remove LOCATION from component.
4178
- <p class="label">Format</p>
4179
- <p class="format">deleteProperty( &quot;LOCATION&quot; )</p>
4180
- <p class="label">Example</p>
4181
- <p class="example">$vevent->deleteProperty( &quot;LOCATION&quot; );</p>
4182
- <h5>Get LOCATION</h5>
4183
- Fetch property value.
4184
- <p class="label">Format 1</p>
4185
- <p class="format">getProperty( &quot;LOCATION&quot; )</p>
4186
- <p class="comment">output = location<span class="ref">1</span></p>
4187
- <p class="label">Format 2</p>
4188
- <p class="format">getProperty( &quot;LOCATION&quot;, FALSE , TRUE )</p>
4189
- <p class="comment">output = array( &quot;value&quot; =&gt; location<span class="ref">1</span>
4190
- , &quot;params&quot; =&gt; param<span class="ref">2</span> )</p>
4191
- <p class="label">Example</p>
4192
- <p class="example">$location = $vevent->getProperty( &quot;LOCATION&quot; );</p>
4193
- <h5>Set LOCATION</h5>
4194
- Insert property value.
4195
- <br />
4196
- Parameters, if any, will be ordered as prescribed in rcf2445.
4197
- <p class="label">Format</p>
4198
- <p class="format">setProperty( &quot;location&quot;, string location [, array param] )</p>
4199
- <p class="comment">location<span class="ref">1</span> = Value type TEXT
4200
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
4201
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
4202
- [, xparam ]
4203
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4204
- <p class="label">Example</p>
4205
- <p class="example">$vevent->setProperty( &quot;location&quot;, &quot;Buckingham Palace&quot; );</p>
4206
- <br />
4207
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4208
-
4209
-
4210
- <a name="ORGANIZER"></a><h3>3.2.26 ORGANIZER</h3>
4211
- The property defines the organizer for a calendar component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br /><br />
4212
- This value type for ORGANIZER is URI, a calendar user address.
4213
- <h5>Delete ORGANIZER</h5>
4214
- Remove ORGANIZER from component.
4215
- <p class="label">Format</p>
4216
- <p class="format">deleteProperty( &quot;ORGANIZER&quot; )</p>
4217
- <p class="label">Example</p>
4218
- <p class="example">$vevent->deleteProperty( &quot;ORGANIZER&quot; );</p>
4219
- <h5>Get ORGANIZER</h5>
4220
- Fetch property value.
4221
- <p class="label">Format 1</p>
4222
- <p class="format">getProperty( &quot;ORGANIZER&quot; )</p>
4223
- <p class="comment">output = organizer<span class="ref">1</span></p>
4224
- <p class="label">Format 2</p>
4225
- <p class="format">getProperty( &quot;ORGANIZER&quot;, FALSE , TRUE )</p>
4226
- <p class="comment">output = array( &quot;value&quot; =&gt; organizer<span class="ref">1</span>
4227
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4228
- <p class="label">Example</p>
4229
- <p class="example">$organizer = $vevent->getProperty( &quot;ORGANIZER&quot; );</p>
4230
- <h5>Set ORGANIZER</h5>
4231
- Insert property value.
4232
- Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ).
4233
- Also DIR parameter must be prefixed by protocol.
4234
- SENT-BY parameter must use protocol &quot;mailto:&quot;, prefixed if missing.
4235
- <br />
4236
- Parameters, if any, will be ordered as prescribed in rcf2445.
4237
- <p class="label">Format</p>
4238
- <p class="format">setProperty( &quot;organizer&quot;, organizer [, params] )</p>
4239
- <p class="comment">organizer<span class="ref">1</span> = a calendar user address, a URI as defined by [RFC
4240
- 1738] or any other IANA registered form for a URI.
4241
- params<span class="ref">2</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;
4242
- (applies to the CN parameter value) ]
4243
- [, &quot;CN&quot; =&gt; &quot;common name to be associated
4244
- with the calendar user
4245
- specified by the property&quot;]
4246
- [, &quot;DIR&quot; =&gt; &quot;reference to a directory
4247
- entry associated with the calendar user
4248
- specified by the property&quot; ]
4249
- [, &quot;SENT-BY&quot; =&gt; &quot;single calendar user
4250
- that is acting on behalf
4251
- of the calendar user
4252
- specified by the property&quot; ]
4253
- [, xparam ]
4254
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4255
- <p class="label">Example</p>
4256
- <p class="example">
4257
- $dir = &quot;ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)&quot;;
4258
- $vevent-&gt;setProperty( &quot;organizer&quot;
4259
- , &quot;ical@domain.com&quot;
4260
- , array( &quot;CN&quot; =&gt; &quot;John Doe&quot;
4261
- , &quot;DIR&quot; =&gt; $dir
4262
- , &quot;SENT-BY&quot; =&gt; &quot;secretary@domain.com&quot;
4263
- , &quot;X-Key1&quot; =&gt; &quot;X-Value1&quot;
4264
- , &quot;X-Key2&quot; =&gt; &quot;X-Value2&quot; ));</p>
4265
- <br />
4266
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4267
-
4268
-
4269
- <a name="PERCENT-COMPLETE"></a><h3>3.2.27 PERCENT-COMPLETE</h3>
4270
- This property is used by an assignee or delegatee of a <a href="#VTODO">VTODO</a> to convey the percent completion of a <a href="#VTODO">VTODO</a> to the Organizer and is OPTIONAL and MUST NOT occur more than once.<br /><br />
4271
- The property value is a positive integer between zero and one hundred. A value of "0" indicates the <a href="#VTODO">VTODO</a> has not yet been started. A value of "100" indicates that the <a href="#VTODO">VTODO</a> has been completed. Integer values in between indicate the percent partially complete.
4272
- <h5>Delete PERCENT-COMPLETE</h5>
4273
- Remove PERCENT-COMPLETE from component.
4274
- <p class="label">Format</p>
4275
- <p class="format">deleteProperty( &quot;PERCENT-COMPLETE&quot; )</p>
4276
- <p class="label">Example</p>
4277
- <p class="example">$vtodo->deleteProperty( &quot;PERCENT-COMPLETE&quot; );</p>
4278
- <h5>Get PERCENT-COMPLETE</h5>
4279
- Fetch property value.
4280
- <p class="label">Format 1</p>
4281
- <p class="format">getProperty( &quot;PERCENT-COMPLETE&quot; )</p>
4282
- <p class="comment">output = percent<span class="ref">1</span></p>
4283
- <p class="label">Format 2</p>
4284
- <p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
4285
- <p class="comment">output = array( &quot;value&quot; =&gt; percent<span class="ref">1</span>
4286
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4287
- <p class="label">Example</p>
4288
- <p class="example">$percent = $vtodo->getProperty( &quot;PERCENT-COMPLETE&quot; );</p>
4289
- <h5>Set PERCENT-COMPLETE</h5>
4290
- Insert property value.
4291
- <p class="label">Format</p>
4292
- <p class="format">setProperty( &quot;Percent-Complete&quot;, percent [, xparam ] )</p>
4293
- <p class="comment">percent<span class="ref">1</span> = Value type INTEGER
4294
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4295
- <p class="label">Example</p>
4296
- <p class="example">$vtodo->setProperty( &quot;percent-complete&quot;, 90 );</p>
4297
- <br />
4298
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4299
-
4300
-
4301
- <a name="PRIORITY"></a><h3>3.2.28 PRIORITY</h3>
4302
- The property defines the relative priority for a calendar component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br /><br />
4303
- The priority is specified as an integer in the range zero to nine.<br />
4304
- A value of zero (US-ASCII decimal 48) specifies an undefined priority.<br />
4305
- A value of one (US-ASCII decimal 49) is the highest priority.<br />
4306
- A value of two (US-ASCII decimal 50) is the second highest priority.<br />
4307
- Subsequent numbers specify a decreasing ordinal priority.<br />
4308
- A value of nine (US-ASCII decimal 58) is the lowest priority.
4309
- <h5>Delete PRIORITY</h5>
4310
- Remove PRIORITY from component.
4311
- <p class="label">Format</p>
4312
- <p class="format">deleteProperty( &quot;PRIORITY&quot; )</p>
4313
- <p class="label">Example</p>
4314
- <p class="example">$vevent->deleteProperty( &quot;PRIORITY&quot; );</p>
4315
- <h5>Get PRIORITY</h5>
4316
- Fetch property value.
4317
- <p class="label">Format 1</p>
4318
- <p class="format">getProperty( &quot;PRIORITY&quot; )</p>
4319
- <p class="comment">output = priority<span class="ref">1</span></p>
4320
- <p class="label">Format 2</p>
4321
- <p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
4322
- <p class="comment">output = array( &quot;value&quot; =&gt; priority<span class="ref">1</span>
4323
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4324
- <p class="label">Example</p>
4325
- <p class="example">$priority = $vevent->getProperty( &quot;priority&quot; );</p>
4326
- <h5>Set PRIORITY</h5>
4327
- Insert property value.
4328
- <p class="label">Format</p>
4329
- <p class="format">setProperty( &quot;priority&quot;, priority [, xparam ] )</p>
4330
- <p class="comment">priority<span class="ref">1</span> = Value type INTEGER
4331
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4332
- <p class="label">Example</p>
4333
- <p class="example">$vevent->setProperty( &quot;priority&quot;, 3 );</p>
4334
- <br />
4335
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4336
-
4337
-
4338
- <a name="RDATE"></a><h3>3.2.29 RDATE</h3>
4339
- This property defines the list of date/times for a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br /><br />
4340
- The default value type for RDATE is DATE-TIME, can be set to DATE or PERIOD (params <span class="ref">2</span>).
4341
- <h5>Delete RDATE</h5>
4342
- Remove RDATE from component.
4343
- <p class="label">Format</p>
4344
- <p class="format">deleteProperty( &quot;RDATE&quot; )</p>
4345
- <p class="label">Example 1</p>
4346
- <p class="example">$vtodo->deleteProperty( &quot;RDATE&quot; );</p>
4347
- <p class="label">Example 2</p>
4348
- Delete RDATE property no 2.
4349
- <p class="example">$vjournal->deleteProperty( &quot;RDATE&quot;, 2 );</p>
4350
- <p class="label">Example 3</p>
4351
- Deleting all RDATE properties.
4352
- <p class="example">while( $vjournal->deleteProperty( &quot;RDATE&quot; ))
4353
- continue;</p>
4354
- <h5>Get RDATE</h5>
4355
- Fetch property value.
4356
- <p class="label">Format 1</p>
4357
- <p class="format">getProperty( &quot;RDATE&quot; )</p>
4358
- <p class="comment">output = dates<span class="ref">1</span></p>
4359
- <p class="label">Format 2</p>
4360
- <p class="format">getProperty( &quot;RDATE&quot;, propOrderNo/FALSE , TRUE )</p>
4361
- <p class="comment">output = array( &quot;value&quot; =&gt; dates<span class="ref">1</span>
4362
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4363
- <p class="label">Format 3</p>
4364
- <p class="format">getProperty( &quot;RDATE&quot;, propOrderNo )</p>
4365
- <p class="comment">Get propOrderNo RDATE</p>
4366
- <p class="label">Example</p>
4367
- <p class="example">$rdates = $vevent->getProperty( &quot;RDATE&quot; );</p>
4368
- <h5>Set RDATE</h5>
4369
- Insert property value.<br />
4370
- If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;, all timezone or offset in dates are ignored and DATE-TIME value type is set.<br />
4371
- If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br />
4372
- If &quot;PERIOD&quot; is set in params (&quot;VALUE&quot; = &quot;PERIOD&quot;), DATE-TIME value type is set.<br />
4373
- If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br />
4374
- If empty params and offset in 1st date, all remaining dates are set to UTC.<br />
4375
- If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br />
4376
- If none of the above rules are applicable, DATE-TIME and local date is set default.
4377
- <br />
4378
- Parameters, if any, will be ordered as prescribed in rcf2445.
4379
- <p class="label">Format</p>
4380
- <p class="format">setProperty( &quot;rdate&quot;, dates [, params [, propOrderNo ]] )</p>
4381
- <p class="comment">dates<span class="ref">1</span> = array ( date2 *[, date2 ] )
4382
- date2 = date
4383
- date2 = array( startdate, enddate/duration ) ]
4384
- startdate = date
4385
- enddate = date
4386
- date = array( int year
4387
- , int month
4388
- , int day
4389
- [, int int hour
4390
- , int min
4391
- , int day
4392
- , mixed tz ] )
4393
- date = array( &quot;year&quot; =&gt; int year
4394
- , &quot;month&quot; =&gt; int month
4395
- , &quot;day&quot; =&gt; int day
4396
- [, &quot;hour&quot; =&gt; int hour
4397
- , &quot;min&quot; =&gt; int min
4398
- , &quot;sec&quot; =&gt; int sec
4399
- [, &quot;tz&quot; =&gt; mixed tz ]] )
4400
- // <span class="ref">output format</span>
4401
- date = array( &quot;timestamp&quot; =&gt; int timestamp
4402
- [, &quot;tz&quot; =&gt; mixed tz ] )
4403
- date = string datestring // <span class="ref">string date,
4404
- acceptable by strtotime-command,
4405
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
4406
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4407
- tz = timezone / offset
4408
- (timezone will be used as tzidparam, if tzidparam not exists)
4409
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4410
- duration = array( int week/false
4411
- [, int day/false
4412
- , int hour
4413
- , int min
4414
- , int sec] )
4415
- duration = array([ &quot;week&quot; =&gt; int week/false ,] /
4416
- [ &quot;day&quot; =&gt; int day/false
4417
- [, &quot;hour&quot; =&gt; int hour
4418
- , &quot;min&quot; =&gt; int min
4419
- , &quot;sec&quot; =&gt; int sec ]] );
4420
- // <span class="ref">output format, only used keys</span>
4421
- duration = array( &quot;sec&quot; =&gt; int sec );
4422
- duration = string format duration like &quot;P15DT5H0M20S&quot;
4423
- params<span class="ref">2</span> = ([tzidparam ( / datetimeparam / dateparam / periodparam )]
4424
- *[, xparams ] )
4425
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
4426
- // <span class="ref">output as local DATE-TIME with timezone identifier</span>
4427
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
4428
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
4429
- periodparam = &quot;VALUE&quot; =&gt; &quot;PERIOD&quot; // <span class="ref">output as PERIOD (datetime)</span>
4430
- xparams = xparamkey =&gt; xparamvalue
4431
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4432
- <p class="label">Example</p>
4433
- See rules in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a>
4434
- and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.<br />
4435
- <p class="example">// $rdate1 = array ( 2001, 1, 1, 1, 1, 1 );
4436
- // alt.
4437
- $rdate1 = array( &quot;year&quot; =&gt; 2001
4438
- , &quot;month&quot; =&gt; 1
4439
- , &quot;day&quot; =&gt; 1
4440
- , &quot;hour&quot; =&gt; 1
4441
- , &quot;min&quot; =&gt; 1
4442
- , &quot;sec&quot; =&gt; 1
4443
- , &quot;tz&quot; =&gt; &quot;GMT&quot; );
4444
- $rdate2 = array( 2002, 2, 2, 2, 2, 2, &quot;GMT&quot; );
4445
- $rdate3 = &quot;3 March 2003 03.03.03&quot;;
4446
- $rdate4 = array( 2004, 4, 4, 4, 4, 4, &quot;GMT&quot; );
4447
- $rdate5 = array( 2005, 10, 5, 5, 5, 5 );
4448
- $rdate8 = array( &quot;year&quot; =&gt; 2007, &quot;month&quot; =&gt; 7, &quot;day&quot; =&gt; 7 );
4449
- $rdur6 = array( &quot;week&quot; =&gt; 0
4450
- , &quot;day&quot; =&gt; 0
4451
- , &quot;hour&quot; =&gt; 5
4452
- , &quot;min&quot; =&gt; 5
4453
- , &quot;sec&quot; =&gt; 5 );
4454
- $rdur7 = array( 0, 0, 6 );
4455
- <span class="comment">// duration for 6 hours</span>
4456
- $rdur8 = array( &quot;week&quot; =&gt; 8 );
4457
- <span class="comment">// duration for 8 weeks</span>
4458
-
4459
- $vevent = & $vcalendar->newComponent( 'vevent' );
4460
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate1 ));
4461
- <span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>
4462
-
4463
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate1, $rdate2 ));
4464
- <span class="comment">// two dates, date 7-params format (DATE-TIME)</span>
4465
-
4466
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $rdate2 )
4467
- , array( $rdate3, $rdate4 ))
4468
- , array( 'VALUE' => 'PERIOD' ));
4469
- <span class="comment">// Both fromdate and enddate must have 7 params (DATE-TIME) !!!</span>
4470
-
4471
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate2, $rdur6 ))
4472
- , array( 'VALUE' => 'PERIOD' ));
4473
- <span class="comment">// one duration (fromdate-duration)</span>
4474
-
4475
- $vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $date2 )
4476
- , array( $rdate3, $rdur7 ))
4477
- , array( 'VALUE' => 'PERIOD' ));
4478
- <span class="comment">// period, pairs of fromdate+enddate and fromdate-duration</span>
4479
-
4480
- $vevent->setProperty( &quot;rdate&quot;, array( $rdate5, $date8 ))
4481
- , array( 'VALUE' => 'DATE' ));
4482
- <span class="comment">// dates in DATE format</span>
4483
- .. .</p>
4484
- <br />
4485
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4486
-
4487
-
4488
- <a name="RECURRENCE-ID"></a><h3>3.2.30 RECURRENCE-ID</h3>
4489
- This property is used in conjunction with the <a href="#UID">UID</a> and <a href="#SEQUENCE">SEQUENCE</a> property to identify a specific instance of a recurring <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VJOURNAL">VJOURNAL</a> calendar component and is OPTIONAL and MAY NOT occur more than once.<br /><br />
4490
- The property value is the effective value of the <a href="#DTSTART">DTSTART</a> property of the recurrence instance. The default value type is DATE-TIME, can be set to DATE (params <span class="ref">2</span>).
4491
- <h5>Delete RECURRENCE-ID</h5>
4492
- Remove RECURRENCE-ID from component.
4493
- <p class="label">Format</p>
4494
- <p class="format">deleteProperty( &quot;RECURRENCE-ID&quot; )</p>
4495
- <p class="label">Example</p>
4496
- <p class="example">$vevent->deleteProperty( &quot;RECURRENCE-ID&quot; );</p>
4497
- <h5>Get RECURRENCE-ID</h5>
4498
- Fetch property value.
4499
- <p class="label">Format 1</p>
4500
- <p class="format">getProperty( &quot;RECURRENCE-ID&quot; )</p>
4501
- <p class="comment">output = recurrIdDate<span class="ref">1</span></p>
4502
- <p class="label">Format 2</p>
4503
- <p class="format">getProperty( &quot;RECURRENCE-ID&quot;, FALSE , TRUE )</p>
4504
- <p class="comment">output = array( &quot;value&quot; =&gt; recurrIdDate<span class="ref">1</span>
4505
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4506
- <p class="label">Example</p>
4507
- <p class="example">$recurrDate = $vtodo->getProperty( &quot;RECURRENCE-ID&quot; );</p>
4508
- <h5>Set RECURRENCE-ID</h5>
4509
- Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
4510
- <br />
4511
- <br />
4512
- If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set, date-time values will be set WITH timezone from config.
4513
- <p class="label">Format</p>
4514
- <p class="format">setProperty( &quot;recurrence-id&quot;, recurrIdDate [, params ] )</p>
4515
- <p class="comment">recurrIdDate<span class="ref">1</span> = array( &quot;year&quot; =&gt; int year
4516
- , &quot;month&quot; =&gt; int month
4517
- , &quot;day&quot; =&gt; int day
4518
- [, &quot;hour&quot; =&gt; int hour
4519
- , &quot;min&quot; =&gt; int min
4520
- , &quot;sec&quot; =&gt; int sec
4521
- [, &quot;tz&quot; =&gt; mixed tz ]] )
4522
- recurrIdDate = int year
4523
- , int month
4524
- , int day
4525
- [, int hour
4526
- , int min
4527
- , int sec
4528
- [, mixed tz ]]
4529
- recurrIdDate = array( int year
4530
- , int month
4531
- , int day
4532
- [, int hour
4533
- , int min
4534
- , int sec
4535
- [, mixed tz ]] )
4536
- recurrIdDate = array( &quot;timestamp&quot; =&gt; int timestamp
4537
- [, &quot;tz&quot; =&gt; mixed tz ] )
4538
- recurrIdDate = string datestring // <span class="ref">string date,
4539
- acceptable by strtotime-command,
4540
- ex. &quot;14 august 2006 16.00.00&quot;
4541
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
4542
- tz = timezone / offset
4543
- (timezone will be used as tzidparam, if tzidparam not exists)
4544
- offset = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
4545
- params<span class="ref">2</span> = array([ datetimeparam/dateparam/tzidparam ]
4546
- [, rangeparam ]
4547
- [, xparam ] )
4548
- datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
4549
- dateparam = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
4550
- tzidparam = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
4551
- // <span class="ref">output as local date-time with timezone identifier</span>
4552
- rangeparam = &quot;RANGE&quot; =&gt; ( "THISANDPRIOR" / "THISANDFUTURE" )
4553
- // <span class="ref">range parameter</span>
4554
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4555
- <p class="label">Example</p>
4556
- <p class="example">$vtodo->setProperty( &quot;recurrence-id&quot;, &quot;3 March 2003 03.03.03&quot; );
4557
- <span class="comment">// 3 march 2003 03.03.03 local time</span></p>
4558
- <br />
4559
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4560
-
4561
-
4562
- <a name="RELATED-TO"></a><h3>3.2.31 RELATED-TO</h3>
4563
- The property is used to represent a relationship or reference between one calendar component and another and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br /><br />
4564
- The property value consists of the persistent, globally unique identifier of another calendar component. This value would be represented in a calendar component by the <a href="#UID">UID</a> property.<br /><br />
4565
- The value type for RELATED-TO is TEXT.
4566
- <h5>Delete RELATED-TO</h5>
4567
- Remove RELATED-TO from component.
4568
- <p class="label">Format</p>
4569
- <p class="format">deleteProperty( &quot;RELATED-TO&quot; )</p>
4570
- <p class="label">Example 1</p>
4571
- <p class="example">$vtodo->deleteProperty( &quot;RELATED-TO&quot; );</p>
4572
- <p class="label">Example 2</p>
4573
- Delete RELATED-TO property no 2.
4574
- <p class="example">$vjournal->deleteProperty( &quot;RELATED-TO&quot;, 2 );</p>
4575
- <p class="label">Example 3</p>
4576
- Deleting all RELATED-TO properties.
4577
- <p class="example">while( $vjournal->deleteProperty( &quot;RELATED-TO&quot; ))
4578
- continue;</p>
4579
- <h5>Get RELATED-TO</h5>
4580
- Fetch property value.
4581
- <p class="label">Format 1</p>
4582
- <p class="format">getProperty( &quot;RELATED-TO&quot; )</p>
4583
- <p class="comment">output = relid<span class="ref">1</span></p>
4584
- <p class="label">Format 2</p>
4585
- <p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo/FALSE , TRUE )</p>
4586
- <p class="comment">output = array( &quot;value&quot; =&gt; relid<span class="ref">1</span>
4587
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4588
- <p class="label">Format 3</p>
4589
- <p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo )</p>
4590
- <p class="comment">Get propOrderNo RELATED-TO</p>
4591
- <p class="label">Example</p>
4592
- <p class="example">$relatedId = $vtodo->getProperty( &quot;RELATED-TO&quot; );</p>
4593
- <h5>Set RELATED-TO</h5>
4594
- Insert property value.
4595
- <p class="label">Format</p>
4596
- <p class="format">setProperty( &quot;Related-To&quot;, relid [, params [, propOrderNo ]] )</p>
4597
- <p class="comment">relid<span class="ref">1</span> = Value type TEXT.
4598
- params<span class="ref">2</span> = array( [ reltype ] [, xparam] )
4599
- reltype = &quot;RELTYPE&quot; =&gt; (&quot;PARENT&quot; (Default)
4600
- / &quot;CHILD&quot;
4601
- / &quot;SIBLING&quot;
4602
- / iana-token
4603
- / x-name)
4604
- xparam = *[ xparamkey =&gt; xparamvalue ]
4605
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4606
- <p class="label">Example</p>
4607
- <p class="example">$vtodo->setProperty( &quot;related-to&quot;, &quot;19960401-080045-4000F192713@host.com&quot;);</p>
4608
- <br />
4609
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4610
-
4611
- <a name="REPEAT"></a><h3>3.2.32 REPEAT</h3>
4612
- This property defines the number of time the <a href="#VALARM">ALARM</a> should be repeated, after the initial trigger.
4613
- If the <a href="#VALARM">ALARM</a> triggers more than once, then this property MUST be specified along with the <a href="#DURATION">DURATION</a> property.
4614
- <h5>Delete REPEAT</h5>
4615
- Remove REPEAT from component.
4616
- <p class="label">Format</p>
4617
- <p class="format">deleteProperty( &quot;REPEAT&quot; )</p>
4618
- <p class="label">Example</p>
4619
- <p class="example">$valarm->deleteProperty( &quot;REPEAT&quot; );</p>
4620
- <h5>Get REPEAT</h5>
4621
- Fetch property value.
4622
- <p class="label">Format 1</p>
4623
- <p class="format">getProperty( &quot;REPEAT&quot; )</p>
4624
- <p class="comment">output = repeatTimes<span class="ref">1</span></p>
4625
- <p class="label">Format 2</p>
4626
- <p class="format">getProperty( &quot;REPEAT&quot;, FALSE , TRUE )</p>
4627
- <p class="comment">output = array( &quot;value&quot; =&gt; repeatTimes<span class="ref">1</span>
4628
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4629
- <p class="label">Example</p>
4630
- <p class="example">$repeat = $vtodo->getProperty( &quot;REPEAT&quot; );</p>
4631
- <h5>Set REPEAT</h5>
4632
- Insert property value.
4633
- <p class="label">Format</p>
4634
- <p class="format">setProperty( &quot;repeat&quot;, repeatTimes [, xparam ] )</p>
4635
- <p class="comment">repeatTimes<span class="ref">1</span> = Value type INTEGER
4636
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4637
- <p class="label">Example</p>
4638
- <p class="example">$valarm->setProperty( &quot;repeat&quot;, 2 );</p>
4639
- <br />
4640
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4641
-
4642
-
4643
- <a name="REQUEST-STATUS"></a><h3>3.2.33 REQUEST-STATUS</h3>
4644
- This property defines the status code returned for a scheduling request and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
4645
- <h5>Delete REQUEST-STATUS</h5>
4646
- Remove REQUEST-STATUS from component.
4647
- <p class="label">Format</p>
4648
- <p class="format">deleteProperty( &quot;REQUEST-STATUS&quot; )</p>
4649
- <p class="label">Example 1</p>
4650
- <p class="example">$vtodo->deleteProperty( &quot;REQUEST-STATUS&quot; );</p>
4651
- <p class="label">Example 2</p>
4652
- Delete REQUEST-STATUS property no 2.
4653
- <p class="example">$vjournal->deleteProperty( &quot;REQUEST-STATUS&quot;, 2 );</p>
4654
- <p class="label">Example 3</p>
4655
- Deleting all REQUEST-STATUS properties.
4656
- <p class="example">while( $vjournal->deleteProperty( &quot;REQUEST-STATUS&quot; ))
4657
- continue;</p>
4658
- <h5>Get REQUEST-STATUS</h5>
4659
- Fetch property value.
4660
- <p class="label">Format 1</p>
4661
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot; )</p>
4662
- <p class="comment">output = array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
4663
- , &quot;text&quot; =&gt; errtext<span class="ref">2</span>
4664
- [ , &quot;extdata&quot; =&gt; extraData<span class="ref"> 3</span> ] )</p>
4665
- <p class="label">Format 2</p>
4666
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo/FALSE, TRUE )</p>
4667
- <p class="comment">output = array( &quot;value&quot; =&gt; array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
4668
- , &quot;text&quot; =&gt; errtext<span class="ref">2</span>
4669
- [ , &quot;extdata&quot; =&gt; extraData<span class="ref">3</span> ] )
4670
- , &quot;params&quot; =&gt; params<span class="ref">4</span> )</p>
4671
- <p class="label">Format 3</p>
4672
- <p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo )</p>
4673
- <p class="comment">Get propOrderNo REQUEST-STATUS</p>
4674
- <p class="label">Example</p>
4675
- <p class="example">$requestStatus = $vtodo->getProperty( &quot;REQUEST-STATUS&quot; );</p>
4676
- <h5>Set REQUEST-STATUS</h5>
4677
- Insert property value.
4678
- <p class="label">Format</p>
4679
- <p class="format">setProperty( &quot;Request-Status&quot;
4680
- , statcode, errtext [,extraData/FALSE [,params [,propOrderNo]]])</p>
4681
- <p class="comment">statcode<span class="ref">1</span> = Hierarchical, numeric return status code
4682
- (1*DIGIT *(&quot;.&quot; 1*DIGIT))
4683
- errtext<span class="ref">2</span> = Textual status description
4684
- extraData<span class="ref">3</span> = Textual exception data.
4685
- For example, the offending property name and value
4686
- or complete property line.
4687
- params<span class="ref">4</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam ] )
4688
- xparam = *[ xparamkey =&gt; xparamvalue ]
4689
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4690
- <p class="label">Example</p>
4691
- <p class="example">$vfreebusy->setProperty(&quot;request-status&quot;
4692
- , 2.0
4693
- , &quot;Invalid property value&quot;
4694
- , &quot;DTSTART:96-Apr-31&quot;);</p>
4695
- <br />
4696
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4697
-
4698
-
4699
- <a name="RESOURCES"></a><h3>3.2.34 RESOURCES</h3>
4700
- This property defines the equipment or resources anticipated for an activity specified by a calendar entity and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br /><br />
4701
- The value type for RESOURCES is TEXT.
4702
- <h5>Delete RESOURCES</h5>
4703
- Remove RESOURCES from component.
4704
- <p class="label">Format</p>
4705
- <p class="format">deleteProperty( &quot;RESOURCES&quot; )</p>
4706
- <p class="label">Example 1</p>
4707
- <p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot; );</p>
4708
- <p class="label">Example 2</p>
4709
- Delete RESOURCES property no 2.
4710
- <p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot;, 2 );</p>
4711
- <p class="label">Example 3</p>
4712
- Deleting all RESOURCES properties.
4713
- <p class="example">while( $vevent->deleteProperty( &quot;RESOURCES&quot; ))
4714
- continue;</p>
4715
- <h5>Get RESOURCES</h5>
4716
- Fetch property value.
4717
- <p class="label">Format 1</p>
4718
- <p class="format">getProperty( &quot;RESOURCES&quot; )</p>
4719
- <p class="comment">output = resources<span class="ref">1</span></p>
4720
- <p class="label">Format 2</p>
4721
- <p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo/FALSE, TRUE )</p>
4722
- <p class="comment">output = array( &quot;value&quot; =&gt; resources<span class="ref">1</span>
4723
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4724
- <p class="label">Format 3</p>
4725
- <p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo )</p>
4726
- <p class="comment">Get propOrderNo RESOURCES</p>
4727
- <p class="label">Example</p>
4728
- <p class="example">$resources = $vtodo->getProperty( &quot;RESOURCES&quot; );</p>
4729
- <h5>Set RESOURCES</h5>
4730
- Insert property value.
4731
- <br />
4732
- Parameters, if any, will be ordered as prescribed in rcf2445.
4733
- <p class="label">Format</p>
4734
- <p class="format">setProperty( &quot;resources&quot;, resources [, params [, propOrderNo ]] )</p>
4735
- <p class="comment">resources<span class="ref">1</span> = string resource / array( *resource )
4736
- resource = textual resources or subtypes of the calendar component,
4737
- can be specified as a list of resources
4738
- separated by the COMMA character.
4739
- params<span class="ref">2</span> = array([ &quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
4740
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
4741
- [, xparam] )
4742
- xparam = *[ xparamkey =&gt; xparamvalue ]
4743
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4744
- <p class="label">Example</p>
4745
- <p class="example">$vevent->setProperty( &quot;resources&quot;, &quot;COMPUTER PROJECTOR&quot; );</p>
4746
- <br />
4747
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4748
-
4749
-
4750
- <a name="RRULE"></a><h3>3.2.35 RRULE</h3>
4751
- This property defines a rule or repeating pattern for recurring <a href="#VEVENT">EVENTs</a>, <a href="#VTODO">TODOs</a>, <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> definitions and is OPTIONAL and MAY occur more than once.
4752
- <h5>Delete RRULE</h5>
4753
- Remove RRULE from component.
4754
- <p class="label">Format</p>
4755
- <p class="format">deleteProperty( &quot;RRULE&quot; )</p>
4756
- <p class="label">Example 1</p>
4757
- <p class="example">$vevent->deleteProperty( &quot;RRULE&quot; );</p>
4758
- <p class="label">Example 2</p>
4759
- Delete RRULE property no 2.
4760
- <p class="example">$vevent->deleteProperty( &quot;RRULE&quot;, 2 );</p>
4761
- <p class="label">Example 3</p>
4762
- Deleting all RRULE properties.
4763
- <p class="example">while( $vevent->deleteProperty( &quot;RRULE&quot; ))
4764
- continue;</p>
4765
- <h5>Get RRULE</h5>
4766
- Fetch property value.
4767
- <p class="label">Format 1</p>
4768
- <p class="format">getProperty( &quot;RRULE&quot; )</p>
4769
- <p class="comment">output = recur<span class="ref">1</span></p>
4770
- <p class="label">Format 2</p>
4771
- <p class="format">getProperty( &quot;RRULE&quot;, propOrderNo/FALSE, TRUE )</p>
4772
- <p class="comment">output = array( &quot;value&quot; =&gt; recur<span class="ref">1</span>
4773
- , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
4774
- <p class="label">Format 3</p>
4775
- <p class="format">getProperty( &quot;RRULE&quot;, propOrderNo )</p>
4776
- <p class="comment">Get propOrderNo RRULE</p>
4777
- <p class="label">Example</p>
4778
- <p class="example">$rrules = $vtodo->getProperty( &quot;RRULE&quot; );</p>
4779
- <h5>Set RRULE</h5>
4780
- Insert property value.
4781
- <br />
4782
- Parameters will be ordered as prescribed in rcf2445.
4783
- <p class="label">Format</p>
4784
- <p class="format">setProperty( &quot;rrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
4785
- <p>
4786
- For rules example see <a href="#EXRULE">Exrule</a> format and in detail in RFC2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) in <a href="http://www.kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445 in text format"><b>text</b></a>
4787
- and <a href="http://www.kigkonsult.se/iCalcreator/iCalDictionary/index.html" title="RFC2445 in HTML format" target="_blank"><b>HTML</b></a> format.
4788
- </p>
4789
- <p class="comment">recur<span class="ref">1</span> = see <a href="#EXRULE">Exrule</a>
4790
- xparams<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )
4791
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
4792
- <br />
4793
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4794
-
4795
- <a name="SEQUENCE"></a><h3>3.2.36 SEQUENCE</h3>
4796
- This property defines the revision sequence number of the calendar component within a sequence of revisions.
4797
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
4798
- <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
4799
- <br />
4800
- <p class="quotes">
4801
- It is monotonically incremented by the <a href="#ORGANIZER">ORGANIZER's</a> CUA (Calendar User Agent)
4802
- each time the <a href="#ORGANIZER">ORGANIZER</a> makes a significant revision to the calendar component.
4803
- When the <a href="#ORGANIZER">ORGANIZER</a> makes changes to one of the following properties, the
4804
- sequence number MUST be incremented: <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#RDATE">RDATE</a>, <a href="#RRULE">RRULE</a>,
4805
- <a href="#EXDATE">EXDATE</a>, <a href="#EXRULE">EXRULE</a>, <a href="#STATUS">STATUS</a>. In addition, changes made by the <a href="#ORGANIZER">ORGANIZER</a> to other
4806
- properties can also force the sequence number to be incremented. The <a href="#ORGANIZER">ORGANIZER</a>
4807
- CUA MUST increment the sequence number when ever it makes changes to
4808
- properties in the calendar component that the <a href="#ORGANIZER">ORGANIZER</a> deems will jeopardize
4809
- the validity of the participation status of the <a href="#ATTENDEE">Attendees</a>. For example, changing
4810
- the location of a meeting from one locale to another distant locale could effectively
4811
- impact the participation status of the <a href="#ATTENDEE">Attendees</a>.
4812
- </p>
4813
- <h5>Delete SEQUENCE</h5>
4814
- Remove SEQUENCE from component.
4815
- <p class="label">Format</p>
4816
- <p class="format">deleteProperty( &quot;SEQUENCE&quot; )</p>
4817
- <p class="label">Example</p>
4818
- <p class="example">$vtodo->deleteProperty( &quot;SEQUENCE&quot; );</p>
4819
- <h5>Get SEQUENCE</h5>
4820
- Fetch property value.
4821
- <p class="label">Format 1</p>
4822
- <p class="format">getProperty( &quot;SEQUENCE&quot; )</p>
4823
- <p class="comment">output = sequence<span class="ref">1</span></p>
4824
- <p class="label">Format 2</p>
4825
- <p class="format">getProperty( &quot;SEQUENCE&quot;, FALSE , TRUE )</p>
4826
- <p class="comment">output = array( &quot;value&quot; =&gt; sequence<span class="ref">1</span>
4827
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4828
- <p class="label">Example</p>
4829
- <p class="example">$sequence = $vtodo->getProperty( &quot;SEQUENCE&quot; );</p>
4830
- <h5>Set SEQUENCE</h5>
4831
- Insert property value.
4832
- <p class="label">Format</p>
4833
- <p class="format">setProperty( &quot;sequence&quot; [, sequence [, xparam ]] )</p>
4834
- <p class="comment">sequence<span class="ref">1</span> = Value type INTEGER
4835
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4836
- <p class="label">Example 1</p>
4837
- <p class="example">$vevent->setProperty( &quot;sequence&quot;, 2 );
4838
- <span class="comment">// set sequence number to 2</span></p>
4839
- <p class="label">Example 2</p>
4840
- <p class="example">$vevent->setProperty( &quot;sequence&quot; );
4841
- <span class="comment">// force sequence number to be set to 1
4842
- // or, if sequence exists, incremented by 1</span></p>
4843
- <br />
4844
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4845
-
4846
-
4847
- <a name="STATUS"></a><h3>3.2.37 STATUS</h3>
4848
- This property defines the overall status or confirmation for the calendar component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
4849
- <h5>Delete STATUS</h5>
4850
- Remove STATUS from component.
4851
- <p class="label">Format</p>
4852
- <p class="format">deleteProperty( &quot;STATUS&quot; )</p>
4853
- <p class="label">Example</p>
4854
- <p class="example">$vtodo->deleteProperty( &quot;STATUS&quot; );</p>
4855
- <h5>Get STATUS</h5>
4856
- Fetch property value.
4857
- <p class="label">Format 1</p>
4858
- <p class="format">getProperty( &quot;STATUS&quot; )</p>
4859
- <p class="comment">output = status<span class="ref">1</span></p>
4860
- <p class="label">Format 2</p>
4861
- <p class="format">getProperty( &quot;STATUS&quot;, FALSE , TRUE )</p>
4862
- <p class="comment">output = array( &quot;value&quot; =&gt; status<span class="ref">1</span>
4863
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4864
- <p class="label">Example</p>
4865
- <p class="example">$status = $vtodo->getProperty( &quot;STATUS&quot; );</p>
4866
- <h5>Set STATUS</h5>
4867
- Insert property value.
4868
- <p class="label">Format</p>
4869
- <p class="format">setProperty( &quot;status&quot;, status [, xparam ] )</p>
4870
- <p class="comment"> // <span class="ref">Status values for a <a href="#vevent">VEVENT</a></span>
4871
- status<span class="ref">1</span> = &quot;TENTATIVE&quot; // <span class="ref">Indicates event is tentative</span>
4872
- / &quot;CONFIRMED&quot; // <span class="ref">Indicates event is definite</span>
4873
- / &quot;CANCELLED&quot; // <span class="ref">Indicates event was cancelled</span>
4874
- // <span class="ref">Status values for <a href="#VTODO">VTODO</a></span>
4875
- status<span class="ref">1</span> = &quot;NEEDS-ACTION&quot; // <span class="ref">Indicates to-do needs action</span>
4876
- / &quot;COMPLETED&quot; // <span class="ref">Indicates to-do completed</span>
4877
- / &quot;IN-PROCESS&quot; // <span class="ref">Indicates to-do in process of</span>
4878
- / &quot;CANCELLED&quot; // <span class="ref">Indicates to-do was cancelled</span>
4879
- // <span class="ref">Status values for <a href="#VJOURNAL">VJOURNAL</a></span>
4880
- status<span class="ref">1</span> = &quot;DRAFT&quot; // <span class="ref">Indicates journal is draft</span>
4881
- / &quot;FINAL&quot; // <span class="ref">Indicates journal is final</span>
4882
- / &quot;CANCELLED&quot; // <span class="ref">Indicates journal is removed</span>
4883
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4884
- <p class="label">Example</p>
4885
- <p class="example">$vevent->setProperty( &quot;Status&quot;, &quot;COMPLETED&quot; );</p>
4886
- <br />
4887
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4888
-
4889
-
4890
- <a name="SUMMARY"></a><h3>3.2.38 SUMMARY</h3>
4891
- This property defines a short (&quot;one line&quot;) summary or subject for the calendar component. (In &quot;rfc2445, Recommended Practices&quot;, up to 255 characters) (, analogous to a mail SUBJECT). The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components. The property is REQUIRED and MUST occur once in <a href="#VALARM">VALARM</a> (EMAIL) calendar component.<br /><br />
4892
- The value type for SUMMARY is TEXT.
4893
- <h5>Delete SUMMARY</h5>
4894
- Remove SUMMARY from component.
4895
- <p class="label">Format</p>
4896
- <p class="format">deleteProperty( &quot;SUMMARY&quot; )</p>
4897
- <p class="label">Example</p>
4898
- <p class="example">$vevent->deleteProperty( &quot;SUMMARY&quot; );</p>
4899
- <h5>Get SUMMARY</h5>
4900
- Fetch property value.
4901
- <p class="label">Format 1</p>
4902
- <p class="format">getProperty( &quot;SUMMARY&quot; )</p>
4903
- <p class="comment">output = summary<span class="ref">1</span></p>
4904
- <p class="label">Format 2</p>
4905
- <p class="format">getProperty( &quot;SUMMARY&quot;, FALSE , TRUE )</p>
4906
- <p class="comment">output = array( &quot;value&quot; =&gt; summary<span class="ref">1</span>
4907
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
4908
- <p class="label">Example</p>
4909
- <p class="example">$summary = $vtodo->getProperty( &quot;SUMMARY&quot; );</p>
4910
- <h5>Set SUMMARY</h5>
4911
- Insert property value.
4912
- <br />
4913
- Parameters, if any, will be ordered as prescribed in rcf2445.
4914
- <p class="label">Format</p>
4915
- <p class="format">setProperty( &quot;summary&quot;, summary [, params ] )</p>
4916
- <p CLASS="comment">summary<span class="ref">1</span> = Value type TEXT,
4917
- a short, one line summary about the activity or journal entry.
4918
- params<span class="ref">2</span> = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
4919
- [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
4920
- [, xparam ] )
4921
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
4922
- <p class="label">Example</p>
4923
- <p class="example">$vevent->setProperty( &quot;summary&quot;, &quot;This is a summary&quot; );</p>
4924
- <br />
4925
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4926
-
4927
-
4928
- <a name="TRANSP"></a><h3>3.2.39 TRANSP</h3>
4929
- This property defines whether an <a href="#VEVENT">EVENT</a> is transparent or not to busy time searches and is OPTIONAL and MUST NOT occur more than once.
4930
- <h5>Delete TRANSP</h5>
4931
- Remove TRANSP from component.
4932
- <p class="label">Format</p>
4933
- <p class="format">deleteProperty( &quot;TRANSP&quot; )</p>
4934
- <p class="label">Example</p>
4935
- <p class="example">$vevent->deleteProperty( &quot;TRANSP&quot; );</p>
4936
- <h5>Get TRANSP</h5>
4937
- Fetch property value.
4938
- <p class="label">Format 1</p>
4939
- <p class="format">getProperty( &quot;TRANSP&quot; )</p>
4940
- <p class="comment">output = transp<span class="ref">1</span></p>
4941
- <p class="label">Format 2</p>
4942
- <p class="format">getProperty( &quot;TRANSP&quot;, FALSE , TRUE )</p>
4943
- <p class="comment">output = array( &quot;value&quot; =&gt; transp<span class="ref">1</span>
4944
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
4945
- <p class="label">Example</p>
4946
- <p class="example">$transp = $vtodo->getProperty( &quot;TRANSP&quot; );</p>
4947
- <h5>Set TRANSP</h5>
4948
- Insert property value.
4949
- <p class="label">Format</p>
4950
- <p class="format">setProperty( &quot;transp&quot;, transp [, xparam ] )</p>
4951
- <p class="comment">transp<span class="ref">1</span> = &quot;OPAQUE&quot; / &quot;TRANSPARENT&quot;
4952
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
4953
- <p class="label">Example</p>
4954
- <p class="example">$vevent->setProperty( &quot;transp&quot;, &quot;TRANSPARENT&quot; );</p>
4955
- <br />
4956
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
4957
-
4958
-
4959
- <a name="TRIGGER"></a><h3>3.2.40 TRIGGER</h3>
4960
- This property specifies when an <a href="#VALARM">ALARM</a> will trigger and is REQUIRED and MUST NOT occur more than once.<br /><br />
4961
- The default value type is DURATION. The value type can be set to a DATE-TIME value type, in which case the value MUST specify an <a href="#DATE_WITH_UTC_TIME">UTC</a> formatted DATE-TIME value.
4962
- <h5>Delete TRIGGER</h5>
4963
- Remove TRIGGER from component.
4964
- <p class="label">Format</p>
4965
- <p class="format">deleteProperty( &quot;TRIGGER&quot; )</p>
4966
- <p class="label">Example</p>
4967
- <p class="example">$valarm->deleteProperty( &quot;TRIGGER&quot; );</p>
4968
- <h5>Get TRIGGER</h5>
4969
- Fetch property value.
4970
- <p class="label">Format 1</p>
4971
- <p class="format">getProperty( &quot;TRIGGER&quot; )</p>
4972
- <p class="comment">output = duration/date</p>
4973
- <p class="label">Format 2</p>
4974
- <p class="format">getProperty( &quot;TRIGGER&quot;, FALSE , TRUE )</p>
4975
- <p class="comment">output = array( &quot;value&quot; =&gt; duration<span class="ref">1</span>/date<span class="ref">3</span> )
4976
- , &quot;params&quot; =&gt; params<span class="ref">4</span> )
4977
- <p class="label">Example</p>
4978
- <p class="example">$trigger = $vtodo->getProperty( &quot;TRIGGER&quot; );</p>
4979
- <h5>Set TRIGGER</h5>
4980
- Insert property value.
4981
- <p class="label">Format 1</p>
4982
- <p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">1</span> [, params<span class="ref">4</span> ] )</p>
4983
- <p class="label">Format 2</p>
4984
- <p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">2</span> [, params<span class="ref">4</span> ] )</p>
4985
- <p class="label">Format 3</p>
4986
- <p class="format">setProperty( &quot;trigger&quot;, date<span class="ref">3</span> [, params<span class="ref">4</span> ] )</p>
4987
- <p class="label">Format</p>
4988
- <p class="format">setProperty( &quot;trigger&quot;, int year/FALSE
4989
- , int month/FALSE
4990
- , int day/FALSE
4991
- [, int week/FALSE
4992
- [, int hour/FALSE
4993
- , int min/FALSE
4994
- , int sec/FALSE
4995
- [, bool relatedStart=TRUE
4996
- [, bool before=TRUE
4997
- [, array params<span class="ref">4</span> ]]]]] )</p>
4998
- <p class="comment">duration<span class="ref">1</span> = array( &quot;week&quot; =&gt; int week
4999
- , &quot;relatedStart&quot; =&gt; bool relstart
5000
- , &quot;before&quot; =&gt; bool before )
5001
- duration<span class="ref">1</span> = array( &quot;day&quot; =&gt; int day
5002
- , &quot;hour&quot; =&gt; int hour
5003
- , &quot;min&quot; =&gt; int min
5004
- , &quot;sec&quot; =&gt; int sec
5005
- , &quot;relatedStart&quot; =&gt; bool relstart
5006
- , &quot;before&quot; =&gt; bool before )
5007
- relatedStart = TRUE : related start (default),
5008
- FALSE : related end
5009
- before = TRUE : before relatedStart (default),
5010
- FALSE : after relatedStart
5011
- duration<span class="ref">2</span> = string dur-value = ([&quot;+&quot;]/&quot;-&quot;)&quot;P&quot;(dur-date/dur-time/dur-week)
5012
- dur-date = dur-day [dur-time]
5013
- dur-time = &quot;T&quot; (dur-hour / dur-minute / dur-second)
5014
- dur-week = 1*DIGIT &quot;W&quot;
5015
- dur-day = 1*DIGIT &quot;D&quot;
5016
- dur-hour = 1*DIGIT &quot;H&quot; [dur-minute]
5017
- dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
5018
- dur-second = 1*DIGIT &quot;S&quot;
5019
- date<span class="ref">3</span> = array( &quot;year&quot; =&gt; int year // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
5020
- , &quot;month&quot; =&gt; int month
5021
- , &quot;day&quot; =&gt; int day
5022
- [, &quot;hour&quot; =&gt; int hour
5023
- , &quot;min&quot; =&gt; int min
5024
- , &quot;sec&quot; =&gt; int sec ])
5025
- date<span class="ref">3</span> = array ( &quot;timestamp&quot; =&gt; int timestamp ) // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
5026
- date<span class="ref">3</span> = string datestring // <span class="ref">string date,
5027
- acceptable by strtotime-command,
5028
- ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
5029
- (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
5030
- // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
5031
- params<span class="ref">4</span> = array( [[ reltype [, trigRelparam ]] / datetimeparam ]
5032
- [, xparams ] )
5033
- reltyp = &quot;RELATED&quot; =&gt; &quot;START&quot; (default) / &quot;END&quot;
5034
- trigRelparam = &quot;VALUE&quot; =&gt; &quot;DURATION&quot;
5035
- datetimeparam= &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot;
5036
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
5037
- <p class="label">Example 1</p>
5038
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5039
- , FALSE, FALSE, FALSE, FALSE, 1, 2, 3 );
5040
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5041
- <p class="label">Example 2</p>
5042
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5043
- , array (&quot;hour&quot;=&gt;1,&quot;min&quot;=&gt;2,&quot;sec&quot;=&gt;3 );
5044
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5045
- <p class="label">Example 3</p>
5046
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5047
- , &quot;PT1H2M3S&quot; );
5048
- <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
5049
- <p class="label">Example 4</p>
5050
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5051
- , FALSE, FALSE, FALSE, 1
5052
- , FALSE, FALSE, FALSE, FALSE, FALSE );
5053
- <span class="comment">// duration, 1 week after end</span></p>
5054
- <p class="label">Example 5</p>
5055
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5056
- , array ( &quot;week&quot; =&gt; 1
5057
- , &quot;relatedStart&quot; =&gt; FALSE
5058
- , &quot;before&quot; =&gt; FALSE ));
5059
- <span class="comment">// duration, 1 week after end</span></p>
5060
- <p class="label">Example 6</p>
5061
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5062
- , &quot;P1W&quot;
5063
- , array( &quot;related&quot; =&gt; &quot;END&quot; ));
5064
- <span class="comment">// duration, 1 week after end</span></p>
5065
- <p class="label">Example 7</p>
5066
- <p class="example">$valarm->setProperty( &quot;trigger&quot;
5067
- , array( &quot;year&quot; =&gt; 2007
5068
- , &quot;month&quot; =&gt; 6
5069
- , &quot;day&quot; =&gt; 5,
5070
- , &quot;hour&quot; =&gt; 2
5071
- , &quot;min&quot; =&gt; 2
5072
- , &quot;sec&quot; =&gt; 3 ));</p>
5073
- <br />
5074
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5075
-
5076
-
5077
- <a name="TZID"></a><h3>3.2.41 TZID</h3>
5078
- This property specifies the text value that uniquely identifies the <a href="#VTIMEZONE">VTIMEZONE</a> calendar component and is REQUIRED, but MUST NOT occur more than once. <br /><br />
5079
- The value type for TZID is TEXT.
5080
- <h5>Delete TZID</h5>
5081
- Remove TZID from component.
5082
- <p class="label">Format</p>
5083
- <p class="format">deleteProperty( &quot;TZID&quot; )</p>
5084
- <p class="label">Example</p>
5085
- <p class="example">$vtimezone->deleteProperty( &quot;TZID&quot; );</p>
5086
- <h5>Get TZID</h5>
5087
- Fetch property value.
5088
- <p class="label">Format 1</p>
5089
- <p class="format">getProperty( &quot;TZID&quot; )</p>
5090
- <p class="comment">output = tzid<span class="ref">1</span></p>
5091
- <p class="label">Format 2</p>
5092
- <p class="format">getProperty( &quot;TZID&quot;, FALSE , TRUE )</p>
5093
- <p class="comment">output = array( &quot;value&quot; =&gt; tzid<span class="ref">1</span>
5094
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5095
- <p class="label">Example</p>
5096
- <p class="example">$tzid = $vtimezone->getProperty( &quot;TZID&quot; );</p>
5097
- <h5>Set TZID</h5>
5098
- Insert property value.
5099
- <p class="label">Format</p>
5100
- <p class="format">setProperty( &quot;tzid&quot;, tzid [, xparam ] )</p>
5101
- <p class="comment">tzid<span class="ref">1</span> = Value type TEXT
5102
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5103
- <p class="label">Example</p>
5104
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
5105
- $vcalendar = new vcalendar( $config );
5106
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
5107
- $vtimezone->setProperty( &quot;tzid&quot;, &quot;US-Eastern&quot; );
5108
- .. .</p>
5109
- <br />
5110
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5111
-
5112
-
5113
- <a name="TZNAME"></a><h3>3.2.42 TZNAME</h3>
5114
- This property specifies the customary designation for a <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> description and is OPTIONAL and MAY occur more than once.<br /><br />
5115
- The value type for TZNAME is TEXT.
5116
- <h5>Delete TZNAME</h5>
5117
- Remove TZNAME from component.
5118
- <p class="label">Format</p>
5119
- <p class="format">deleteProperty( &quot;TZNAME&quot; )</p>
5120
- <p class="label">Example 1</p>
5121
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot; );</p>
5122
- <p class="label">Example 2</p>
5123
- Delete TZNAME property no 2.
5124
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot;, 2 );</p>
5125
- <p class="label">Example 3</p>
5126
- Deleting all TZNAME properties.
5127
- <p class="example">while( $vtimezonestd->deleteProperty( &quot;TZNAME&quot; ))
5128
- continue;</p>
5129
- <h5>Get TZNAME</h5>
5130
- Fetch property value.
5131
- <p class="label">Format 1</p>
5132
- <p class="format">getProperty( &quot;TZNAME&quot; )</p>
5133
- <p class="comment">output = tzname<span class="ref">1</span></p>
5134
- <p class="label">Format 2</p>
5135
- <p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo/FALSE, TRUE )</p>
5136
- <p class="comment">output = array( &quot;value&quot; =&gt; tzname<span class="ref">1</span>
5137
- , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
5138
- <p class="label">Format 3</p>
5139
- <p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo )</p>
5140
- <p class="comment">Get propOrderNo TZNAME</p>
5141
- <p class="label">Example</p>
5142
- <p class="example">$tzname = $timezonestandard->getProperty( &quot;TZNAME&quot; );</p>
5143
- <h5>Set TZNAME</h5>
5144
- Insert property value.
5145
- <p class="label">Format</p>
5146
- <p class="format">setProperty( &quot;tzname&quot;, tzname [, params [, propOrderNo ]] )</p>
5147
- <p class="comment">tzname<span class="ref">1</span> = Value type TEXT
5148
- params<span class="ref">2</span> = array( [ &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot; ] [, xparam ] )
5149
- xparam = *[ xparamkey =&gt; xparamvalue ]
5150
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
5151
- <p class="label">Example</p>
5152
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
5153
- $vcalendar = new vcalendar( $config );
5154
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
5155
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5156
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5157
- $standard = & $vtimezone->newComponent( &quot;standard&quot; );
5158
- $standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
5159
- .. .</p>
5160
- <br />
5161
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5162
-
5163
-
5164
- <a name="TZOFFSETFROM"></a><h3>3.2.43 TZOFFSETFROM</h3>
5165
- This property specifies the offset which is in use prior to this <a href="#VTIMEZONE">TIMEZONE</a> observance.
5166
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
5167
- <h5>Delete TZOFFSETFROM</h5>
5168
- Remove TZOFFSETFROM from component.
5169
- <p class="label">Format</p>
5170
- <p class="format">deleteProperty( &quot;TZOFFSETFROM&quot; )</p>
5171
- <p class="label">Example</p>
5172
- <p class="example">$vtimezonestd->deleteProperty( &quot;TZOFFSETFROM&quot; );</p>
5173
- <h5>Get TZOFFSETFROM</h5>
5174
- Fetch property value.
5175
- <p class="label">Format 1</p>
5176
- <p class="format">getProperty( &quot;TZOFFSETFROM&quot; )</p>
5177
- <p class="comment">output = tzoffsetfrom<span class="ref">1</span></p>
5178
- <p class="label">Format 2</p>
5179
- <p class="format">getProperty( &quot;TZOFFSETFROM&quot;, FALSE , TRUE )</p>
5180
- <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetfrom<span class="ref">1</span>
5181
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5182
- <p class="label">Example</p>
5183
- <p class="example">$tzoffsetfrom = $timezonestandard->getProperty( &quot;TZOFFSETFROM&quot; );</p>
5184
- <h5>Set TZOFFSETFROM</h5>
5185
- Insert property value.
5186
- <p class="label">Format</p>
5187
- <p class="format">setProperty( &quot;tzoffsetfrom&quot;, tzoffsetfrom [, xparam ] )</p>
5188
- <p class="comment">tzoffsetfrom<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
5189
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5190
- <p class="label">Example</p>
5191
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
5192
- $vcalendar = new vcalendar( $config );
5193
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
5194
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5195
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5196
- $standard = & $vtimezone->newComponent( &quot;standard&quot; );
5197
- $standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
5198
- $standard->setProperty( &quot;tzoffsetfrom&quot;, &quot;-0500&quot; );
5199
- .. .</p>
5200
- <br />
5201
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5202
-
5203
-
5204
- <a name="TZOFFSETTO"></a><h3>3.2.44 TZOFFSETTO</h3>
5205
- This property specifies the offset which is in use in this <a href="#VTIMEZONE">TIMEZONE</a> observance.
5206
- The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
5207
- <h5>Delete TZOFFSETTO</h5>
5208
- Remove TZOFFSETTO from component.
5209
- <p class="label">Format</p>
5210
- <p class="format">deleteProperty( &quot;TZOFFSETTO&quot; )</p>
5211
- <p class="label">Example</p>
5212
- <p class="example">$daylight->deleteProperty( &quot;TZOFFSETTO&quot; );</p>
5213
- <h5>Get TZOFFSETTO</h5>
5214
- Fetch property value.
5215
- <p class="label">Format 1</p>
5216
- <p class="format">getProperty( &quot;TZOFFSETTO&quot; )</p>
5217
- <p class="comment">output = tzoffsetto<span class="ref">1</span></p>
5218
- <p class="label">Format 2</p>
5219
- <p class="format">getProperty( &quot;TZOFFSETTO&quot;, FALSE , TRUE )</p>
5220
- <p class="comment">output = array( &quot;value&quot; =&gt; tzoffsetto<span class="ref">1</span>
5221
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5222
- <p class="label">Example</p>
5223
- <p class="example">$tzoffsetto = $timezonestandard->getProperty( &quot;TZOFFSETTO&quot; );</p>
5224
- <h5>Set TZOFFSETTO</h5>
5225
- Insert property value.
5226
- <p class="label">Format</p>
5227
- <p class="format">setproperty( &quot;tzoffsetto&quot;, tzoffsetto [, xparam ] )</p>
5228
- <p class="comment">tzoffsetto<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
5229
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5230
- <p class="label">Example</p>
5231
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
5232
- $vcalendar = new vcalendar( $config );
5233
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
5234
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5235
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
5236
- $standard = & $vtimezone->newComponent( &quot;standard&quot; );
5237
- .. .
5238
- $daylight = & $vtimezone->newComponent( &quot;daylight&quot; );
5239
- $daylight->setProperty( &quot;tzoffsetto&quot;, &quot;1345&quot; );
5240
- .. .</p>
5241
- <br />
5242
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5243
-
5244
-
5245
- <a name="TZURL"></a><h3>3.2.45 TZURL</h3>
5246
- The TZURL provides a means for a <a href="#VTIMEZONE">VTIMEZONE</a> component to point to
5247
- a network location that can be used to retrieve an up-to-date version of itself. The property
5248
- is OPTIONAL and MUST NOT occur more than once.
5249
- <h5>Delete TZURL</h5>
5250
- Remove TZURL from component.
5251
- <p class="label">Format</p>
5252
- <p class="format">deleteProperty( &quot;TZURL&quot; )</p>
5253
- <p class="label">Example</p>
5254
- <p class="example">$vtimezone->deleteProperty( &quot;TZURL&quot; );</p>
5255
- <h5>Get TZURL</h5>
5256
- Fetch property value.
5257
- <p class="label">Format 1</p>
5258
- <p class="format">getProperty( &quot;TZURL&quot; )</p>
5259
- <p class="comment">output = tzurl<span class="ref">1</span></p>
5260
- <p class="label">Format 2</p>
5261
- <p class="format">getProperty( &quot;TZURL&quot;, FALSE , TRUE )</p>
5262
- <p class="comment">output = array( &quot;value&quot; =&gt; tzurl<span class="ref">1</span>
5263
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5264
- <p class="label">Example</p>
5265
- <p class="example">$tzurl = $timezonestandard->getProperty( &quot;TZURL&quot; );</p>
5266
- <h5>Set TZURL</h5>
5267
- Insert property value.
5268
- <p class="label">Format</p>
5269
- <p class="format">setProperty( &quot;tzurl&quot;, tzurl [, xparam ] )</p>
5270
- <p class="comment">tzurl<span class="ref">1</span> = Value type URI
5271
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5272
- <p class="label">Example</p>
5273
- <p class="example">$tz = &quot;http://zones.stds_r_us.net/tz/US-Eastern&quot; );
5274
- $config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot; );
5275
- $vcalendar = new vcalendar( $config );
5276
- $vtimezone = & $vcalendar->newComponent( 'vtimezone' );
5277
- $vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
5278
- $vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101T000000&quot; );
5279
- $vtimezone->setProperty( &quot;tzurl&quot;, $tz );
5280
- .. .
5281
- .. .</p>
5282
- <br />
5283
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5284
-
5285
-
5286
- <a name="UID"></a><h3>3.2.46 UID</h3>
5287
- The persistent, globally <b>U</b>nique <b>ID</b>entifier for the calendar component.
5288
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br />
5289
- However, UID is <b>AUTOMATICALLY</b> generated in iCalcreator and configuration <a href="#Unique_id">unique_id</a>, is used when auto-creating component UID.
5290
- <br />
5291
- <br />
5292
- UID generated format :
5293
- <p class="format">date(&quot;Ymd\THisT&quot;).&quot;-&quot;.[microSec][random].&quot;@&quot;.<a href="#Unique_id">unique_id</a>
5294
- </p>
5295
- microSec = microseconds, 4 pos<br />
5296
- random = 6 characters aA-zZ, 0-9
5297
- <p class="label">Example</p>
5298
- <p class="example">&quot;20070803T194810CEST-0123U3PXiX@domain.com&quot;</p>
5299
- UID may be required when importing iCal files into some calendaring software (MS etc.),
5300
- as well as (calendar) <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE",
5301
- <a href="#METHOD">METHOD</a> property (value PUBLISH etc.) and (also auto created) <a href="#DTSTAMP">DTSTAMP</a> property.
5302
- <br /><br />
5303
- The value type for UID is TEXT.
5304
- <h5>Delete UID</h5>
5305
- If UID is remove from a component, UID will automatically be recreated when calendar output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
5306
- <p class="label">Format</p>
5307
- <p class="format">deleteProperty( &quot;UID&quot; )</p>
5308
- <p class="label">Example</p>
5309
- <p class="example">$vevent->deleteProperty( &quot;UID&quot; );</p>
5310
- <h5>Get UID</h5>
5311
- Fetch property value.
5312
- <p class="label">Format 1</p>
5313
- <p class="format">getProperty( &quot;UID&quot; )</p>
5314
- <p class="comment">output = uid<span class="ref">1</span></p>
5315
- <p class="label">Format 2</p>
5316
- <p class="format">getProperty( &quot;UID&quot;, FALSE , TRUE )</p>
5317
- <p class="comment">output = array( &quot;value&quot; =&gt; uid<span class="ref">1</span>
5318
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5319
- <p class="label">Example</p>
5320
- <p class="example">$uid = $vevent->getProperty( &quot;UID&quot; );</p>
5321
- <h5>Set UID</h5>
5322
- Insert property value, overrides any previously set or auto-created UID.<br />
5323
- Do <b>NOT</b> use an integer UID or only a component name in UID (ex. &quot;vevent&quot;), this may cause malfunction in <a href="#setComponent">setComponent</a> with index or UID argument.
5324
- <p class="label">Format</p>
5325
- <p class="format">setProperty( &quot;uid&quot;, uid [, xparam ] )</p>
5326
- <p class="comment">uid<span class="ref">1</span> = Value type TEXT
5327
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
5328
- <p class="label">Example</p>
5329
- <p class="example">$vevent->setProperty(&quot;uid&quot;,&quot;20070803T194810CEST-0123U3PXiX@domain.com&quot;);</p>
5330
- <br />
5331
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5332
-
5333
-
5334
- <a name="URL"></a><h3>3.2.47 URL</h3>
5335
- This property defines a Uniform Resource Locator (URL) associated with the iCalendar object.
5336
- The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
5337
- <h5>Delete URL</h5>
5338
- Remove URL from component.
5339
- <p class="label">Format</p>
5340
- <p class="format">deleteProperty( &quot;URL&quot; )</p>
5341
- <p class="label">Example</p>
5342
- <p class="example">$vevent->deleteProperty( &quot;URL&quot; );</p>
5343
- <h5>Get URL</h5>
5344
- Fetch property value.
5345
- <p class="label">Format 1</p>
5346
- <p class="format">getProperty( &quot;URL&quot; )</p>
5347
- <p class="comment">output = url<span class="ref">1</span></p>
5348
- <p class="label">Format 2</p>
5349
- <p class="format">getProperty( &quot;URL&quot;, FALSE , TRUE )</p>
5350
- <p class="comment">output = array &quot;value&quot; =&gt; url<span class="ref">1</span>
5351
- , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
5352
- <p class="label">Example</p>
5353
- <p class="example">$url = $vevent->getProperty( &quot;URL&quot; );</p>
5354
- <h5>Set URL</h5>
5355
- Insert property value.<br/>
5356
- <p class="label">Format</p>
5357
- <p class="format">setProperty( &quot;url&quot;, url [, xparam ] )</p>
5358
- <p class="comment">url<span class="ref">1</span> = Value type URI
5359
- xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] (</p>
5360
- <p class="label">Example</p>
5361
- <p class="example">$vtodo->setProperty( &quot;url&quot;, &quot;http://www.icaldomain.net&quot; );</p>
5362
- <br />
5363
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5364
-
5365
-
5366
- <a name="X-PROPERTY_PROP"></a><h3>3.2.48 X-PROPERTY</h3>
5367
- A calendar, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a calendar,
5368
- an x-prop, with an unique name, can occur only once but the number of x-props are unlimited.
5369
- <br />
5370
- <h5>Delete X-PROPERTY</h5>
5371
- Remove X-PROPERTY from component.
5372
- <p class="label">Format</p>
5373
- <p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
5374
- <p class="label">Example 1</p>
5375
- <p class="example">$vevent->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
5376
- <p class="label">Example 2</p>
5377
- Deleting all x-properties.
5378
- <p class="example">while( $vevent->deleteProperty())
5379
- continue;</p>
5380
- <h5>Get X-property</h5>
5381
- Fetch property value.
5382
- <p class="label">Format 1</p>
5383
- <p class="format">getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
5384
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5385
- , propertyData<span class="ref">2</span> )</p>
5386
- <p class="label">Format 2</p>
5387
- <p class="format">getProperty()</p>
5388
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5389
- , propertyData<span class="ref">2</span> )</p>
5390
- <p class="label">Format 3</p>
5391
- <p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
5392
- <p class="comment">output = array( propertyName<span class="ref">1</span>
5393
- , array ( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
5394
- , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))</p>
5395
- <p class="label">Format 4</p>
5396
- <p class="format">getProperty( FALSE, propOrderNo )</p>
5397
- <p class="comment">Get propOrderNo X-property</p>
5398
-
5399
- <p class="label">Example 1</p>
5400
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
5401
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5402
- $vcalendar = new vcalendar( $config );
5403
- $vcalendar->parse();
5404
- if( FALSE !== ( $d = $vcalendar->getProperty( 'X-WR-TIMEZONE' )))
5405
- echo $d[1];
5406
- .. .</p>
5407
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
5408
-
5409
- <p class="label">Example 2</p>
5410
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
5411
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5412
- $vcalendar = new vcalendar( $config );
5413
- $vcalendar->parse();
5414
- while( $xprop = $vcalendar->getProperty( )) {
5415
- .. .</p>
5416
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
5417
-
5418
- <p class="label">Example 3</p>
5419
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
5420
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5421
- $vcalendar = new vcalendar( $config );
5422
- $vcalendar->parse();
5423
- while( $xprop = $vcalendar->getProperty( &quot;X-ABC-MMSUBJ&quot; )) {
5424
- .. .</p>
5425
- <p class="comment"> // $xprop = array( &quot;X-ABC-MMSUBJ&quot;, propertyData<span class="ref">2</span> )</p>
5426
- <p class="label">Example 4</p>
5427
- <p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;domain.com&quot;,
5428
- &quot;filename&quot;, &quot;file.ics&quot; ); );
5429
- $vcalendar = new vcalendar( $config );
5430
- $vcalendar->parse();
5431
- while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
5432
- .. .</p>
5433
- <p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>
5434
- // , array( &quot;value&quot; =&gt; propertyData<span class="ref">2</span> )
5435
- // , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span> )</p>
5436
- <h5>Set X-property</h5>
5437
- Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
5438
- <p class="label">Format</p>
5439
- <p class="format">setProperty( propertyName, propertyData [, params ] )</p>
5440
- <p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
5441
- propertyData<span class="ref">2</span> = Value type TEXT
5442
- params<span class="ref">3</span> = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
5443
- xparam = *[ xparamkey =&gt; xparamvalue ]</p>
5444
- propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
5445
- <p class="label">Example</p>
5446
- <p class="example">$component->setProperty(&quot;X-ABC-MMSUBJ&quot;,&quot;http://load.noise.org/mysubj.wav&quot;);</p>
5447
- <br />
5448
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>
5449
-
5450
-
5451
-
5452
- <a NAME="Calendar_component_configuration_functions"></a><h2>3.3 Calendar Component configuration functions</h2>
5453
-
5454
- <a name="Language_PROP"></a><h3>3.3.1 Language</h3>
5455
- Language for specific calendar component as defined in [RFC 1766].<br />
5456
- Language set at component level can be overridden by specific component property parameter.<br />
5457
- A successful &quot;setConfig&quot; returns TRUE.
5458
- <h5>Get language</h5>
5459
- Language for calendar (only if language is set at component level).
5460
- <p class="label">Format</p>
5461
- <p class="format">getConfig( &quot;language&quot; )</p>
5462
- <p class="label">Example</p>
5463
- <p class="example">$lang = $vevent->getConfig( &quot;language&quot; );</p>
5464
- <h5>Set LANGUAGE</h5>
5465
- <p class="label">Format</p>
5466
- <p class="format">setConfig( &quot;language&quot;, string &lt;lang&gt; )</p>
5467
- <p class="label">Example</p>
5468
- <p class="example">$vevent->setConfig( &quot;language&quot;, &quot;en&quot; );</p>
5469
- <br />
5470
- <a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>
5471
-
5472
- <a name="Calendar_component_object_misc_functions"></a><h2>3.4 Calendar component object misc. functions</h2>
5473
- Calendar component subcomponent functions
5474
-
5475
- <a name="deleteComponent_PROP"></a><h4>3.4.1 deleteComponent</h4>
5476
- Remove subcomponent from component.
5477
- <p class="label">Format</p>
5478
- <p class="format">deleteComponent( int orderNumber )</p>
5479
- <p class="comment">Remove component with order number (1st=1, 2nd=2.. .).</p>
5480
- <p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
5481
- <p class="comment">Remove component with component type (ex. &quot;vevent&quot;)
5482
- and order 1 alt. suborder number.</p>
5483
- <p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
5484
- <p class="comment">Remove component with <a href="#UID">UID</a>.
5485
- N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM