Version Description
Download this release
Release Info
Developer | yani.iliev |
Plugin | All-in-One Event Calendar |
Version | 1.8 |
Comparing to | |
See all releases |
Code changes from version 1.7 to 1.8
- all-in-one-event-calendar.php +17 -13
- app/controller/class-ai1ec-app-controller.php +42 -15
- app/controller/class-ai1ec-calendar-controller.php +2 -2
- app/controller/class-ai1ec-events-controller.php +2 -2
- app/controller/class-ai1ec-exporter-controller.php +9 -9
- app/controller/class-ai1ec-importer-controller.php +3 -3
- app/controller/class-ai1ec-settings-controller.php +30 -13
- app/controller/class-ai1ec-themes-controller.php +116 -28
- app/exception/class-ai1ec-event-not-found.php +6 -6
- app/exception/class-ai1ec-file-not-found.php +6 -6
- app/exception/class-ai1ec-file-not-provided.php +6 -6
- app/exception/class-ai1ec-invalid-argument.php +6 -6
- app/helper/class-ai1ec-app-helper.php +64 -14
- app/helper/class-ai1ec-calendar-helper.php +1 -1
- app/helper/class-ai1ec-events-helper.php +1 -1
- app/helper/class-ai1ec-exporter-helper.php +14 -14
- app/helper/class-ai1ec-importer-helper.php +9 -10
- app/helper/class-ai1ec-settings-helper.php +4 -4
- app/helper/class-ai1ec-view-helper.php +9 -1
- app/model/class-ai1ec-event.php +20 -12
- app/model/class-ai1ec-exporter.php +11 -11
- app/model/class-ai1ec-importer.php +10 -10
- app/model/class-ai1ec-settings.php +21 -1
- app/view/admin/admin_notices.php +1 -0
- app/view/admin/box_advanced_settings.php +3 -1
- app/view/admin/box_general_settings.php +2 -2
- app/view/admin/box_support.php +74 -0
- app/view/admin/box_the_seed_studio.php +0 -60
- app/view/admin/calendar_tasks.php +2 -2
- app/view/admin/class-ai1ec-agenda-widget.php +1 -1
- app/view/admin/css/bootstrap.min.css +2 -2
- app/view/admin/css/settings.css +19 -20
- app/view/admin/img/timely-logo.png +0 -0
- app/view/admin/js/add_new_event.js +32 -9
- app/view/admin/js/bootstrap-modal.js +218 -0
- app/view/admin/less/bootstrap.less +0 -82
- app/view/admin/less/build-css.sh +0 -10
- app/view/admin/less/button-groups.less +0 -172
- app/view/admin/less/buttons.less +0 -187
- app/view/admin/less/dropdowns.less +0 -148
- app/view/admin/less/font-awesome.less +0 -264
- app/view/admin/less/grid.less +0 -5
- app/view/admin/less/hero-unit.less +0 -22
- app/view/admin/less/mixins.less +0 -614
- app/view/admin/less/navs.less +0 -363
- app/view/admin/less/reset.less +0 -126
- app/view/admin/less/scaffolding.less +0 -29
- app/view/admin/less/type.less +0 -234
- app/view/admin/less/utilities.less +0 -23
- app/view/admin/less/variables.less +0 -205
- app/view/admin/themes-updated.php +1 -1
- app/view/admin/video_modal.php +46 -0
- language/all-in-one-event-calendar-fr_FR.mo +0 -0
- language/all-in-one-event-calendar-fr_FR.po +1332 -1091
- language/all-in-one-event-calendar.mo +0 -0
- language/all-in-one-event-calendar.po +0 -1254
- language/all-in-one-event-calendar.pot +188 -173
- lib/class-ai1ec-updater.php +7 -1
- lib/global-functions.php +1 -1
- lib/iCalcreator-2.10.23/iCalUtilityFunctions.class.php +0 -1578
- lib/iCalcreator-2.10.23/releaseNotes-2.10.23.txt +0 -8
- lib/iCalcreator-2.10.23/summary.html +0 -323
- lib/iCalcreator-2.10.23/using.html +0 -5810
- lib/iCalcreator-2.10/releaseNotes-2.10.txt +0 -82
- lib/iCalcreator-2.10/summary.html +0 -283
- 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
|
4 |
-
* Plugin URI: http://
|
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:
|
7 |
-
* Author URI: http://
|
8 |
-
* Version: 1.
|
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.
|
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',
|
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://
|
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', '
|
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', '
|
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://
|
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.
|
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
|
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 |
-
|
|
|
|
|
|
|
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
|
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 |
-
'
|
432 |
-
__( '
|
433 |
-
__( '
|
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"] = $
|
|
|
|
|
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"] = $
|
|
|
|
|
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
|
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 |
-
|
641 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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', '
|
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
|
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', '
|
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
|
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
|
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
|
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 |
-
*
|
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 '
|
317 |
add_meta_box(
|
318 |
-
'
|
319 |
-
_x( '
|
320 |
-
array( &$ai1ec_settings_helper, '
|
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 '
|
346 |
add_meta_box(
|
347 |
-
'
|
348 |
-
_x( '
|
349 |
-
array( &$ai1ec_settings_helper, '
|
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.
|
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
|
14 |
**/
|
15 |
class Ai1ec_Themes_Controller {
|
16 |
/**
|
@@ -93,31 +93,35 @@ class Ai1ec_Themes_Controller {
|
|
93 |
}
|
94 |
|
95 |
/**
|
96 |
-
*
|
97 |
-
*
|
98 |
-
*
|
99 |
*
|
100 |
* @return bool
|
101 |
**/
|
102 |
public function are_themes_available() {
|
103 |
-
//
|
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 |
-
|
115 |
-
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
'
|
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(
|
|
|
|
|
|
|
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/
|
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
|
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
|
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
|
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
|
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
|
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
|
732 |
-
'<p>You may opt in
|
733 |
-
'http://
|
734 |
admin_url( AI1EC_SETTINGS_BASE_URL )
|
735 |
),
|
736 |
-
'button' => (object) array(
|
|
|
|
|
|
|
737 |
);
|
738 |
$ai1ec_view_helper->display_admin( 'admin_notices.php', $args );
|
739 |
}
|
740 |
|
741 |
-
// If calendar page
|
742 |
-
//
|
743 |
-
|
|
|
|
|
|
|
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 |
-
$
|
762 |
__( 'The plugin is installed, but has not been configured. <a href="%s">Click here to set it up now »</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( '
|
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"> </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 . '&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 »</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
|
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
|
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
|
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
|
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.
|
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
|
14 |
**/
|
15 |
class Ai1ec_Settings_Helper {
|
16 |
/**
|
@@ -403,18 +403,18 @@ class Ai1ec_Settings_Helper {
|
|
403 |
}
|
404 |
|
405 |
/**
|
406 |
-
* Renders the contents of the
|
407 |
*
|
408 |
* @return void
|
409 |
*/
|
410 |
-
function
|
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( '
|
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
|
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
|
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 |
-
|
509 |
$timespan .= '<span class="ai1ec-allday-label">';
|
510 |
$timespan .= __( ' (all-day)', AI1EC_PLUGIN_NAME );
|
511 |
$timespan .= '</span>';
|
512 |
-
}
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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( ' ', ' ', esc_html( $this->long_start_date ) );
|
502 |
+
$long_end_date = str_replace( ' ', ' ', 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( ' ', ' ', esc_html( $this->long_start_time ) );
|
515 |
+
$long_end_time = str_replace( ' ', ' ', esc_html( $this->long_end_time ) );
|
516 |
+
$end_time = str_replace( ' ', ' ', 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
|
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
|
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
|
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 |
-
|
|
|
|
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( '
|
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
|
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"> </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 . '&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"> </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 . '&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="
|
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://
|
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=
|
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 .
|
11 |
-
|
12 |
-
|
13 |
-
|
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
|
53 |
float: left;
|
54 |
clear: left;
|
55 |
margin: 0.25em 0;
|
56 |
}
|
57 |
-
.column-1-ai1ec
|
58 |
float: left;
|
59 |
margin: 0.25em 0.5em 0 0;
|
60 |
}
|
61 |
-
.column-1-ai1ec
|
62 |
clear: left;
|
63 |
font-size: 0.95em;
|
64 |
line-height: 1.5em;
|
65 |
-
margin
|
66 |
}
|
67 |
-
.column-1-ai1ec
|
68 |
width: 230px;
|
69 |
}
|
70 |
-
.column-1-ai1ec
|
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
|
29 |
-
class
|
30 |
}
|
31 |
);
|
32 |
// Insert error message
|
33 |
jQuery( el ).after( error );
|
34 |
}
|
|
|
35 |
/**
|
36 |
-
*
|
37 |
-
*
|
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:
|
6 |
-
"PO-Revision-Date:
|
7 |
-
"Last-Translator:
|
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
|
17 |
-
"X-
|
18 |
-
"X-Poedit-Bookmarks: \n"
|
19 |
"X-Poedit-SearchPath-0: .\n"
|
20 |
-
"X-Textdomain-Support: yes"
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
|
|
26 |
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
-
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
msgctxt "Custom post type name"
|
35 |
msgid "Events"
|
36 |
msgstr "Evénements"
|
37 |
|
38 |
-
|
39 |
-
|
40 |
msgctxt "Custom post type name (singular)"
|
41 |
msgid "Event"
|
42 |
msgstr "Evénements"
|
43 |
|
44 |
-
|
45 |
-
|
46 |
msgid "Add New"
|
47 |
msgstr "Ajouter nouveau"
|
48 |
|
49 |
-
|
50 |
-
|
51 |
msgid "Add New Event"
|
52 |
msgstr "Ajouter nouvel événement"
|
53 |
|
54 |
-
|
55 |
-
|
56 |
msgid "Edit Event"
|
57 |
msgstr "Editer un événement"
|
58 |
|
59 |
-
|
60 |
-
|
61 |
msgid "New Event"
|
62 |
msgstr "Nouvel événement"
|
63 |
|
64 |
-
|
65 |
-
|
66 |
msgid "View Event"
|
67 |
msgstr "Voir l'événement"
|
68 |
|
69 |
-
|
70 |
-
|
71 |
msgid "Search Events"
|
72 |
msgstr "Chercher des événements"
|
73 |
|
74 |
-
|
75 |
-
|
76 |
msgid "No Events found"
|
77 |
msgstr "Aucun événement trouvé"
|
78 |
|
79 |
-
|
80 |
-
|
81 |
msgid "No Events found in Trash"
|
82 |
msgstr "Aucun événement trouvé dans la corbeille"
|
83 |
|
84 |
-
|
85 |
-
|
86 |
msgid "Parent Event"
|
87 |
msgstr "Evénement parent"
|
88 |
|
89 |
-
|
90 |
-
#: app/
|
91 |
-
#@ all-in-one-event-calendar
|
92 |
msgid "Events"
|
93 |
msgstr "Evénements"
|
94 |
|
95 |
-
|
96 |
-
|
97 |
msgctxt "Event categories taxonomy"
|
98 |
msgid "Event Categories"
|
99 |
msgstr "Catégories d'événement"
|
100 |
|
101 |
-
|
102 |
-
|
103 |
msgctxt "Event categories taxonomy (singular)"
|
104 |
msgid "Event Category"
|
105 |
msgstr "Catégorie d'événement"
|
106 |
|
107 |
-
|
108 |
-
|
109 |
msgctxt "Event tags taxonomy"
|
110 |
msgid "Event Tags"
|
111 |
-
msgstr "Mots
|
112 |
|
113 |
-
|
114 |
-
|
115 |
msgctxt "Event tags taxonomy (singular)"
|
116 |
msgid "Event Tag"
|
117 |
-
msgstr "Mot
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
120 |
-
|
121 |
-
|
|
|
|
|
|
|
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 |
-
|
126 |
-
|
127 |
msgid "All Events"
|
128 |
msgstr "Tous les événements"
|
129 |
|
130 |
-
|
131 |
-
|
132 |
msgid "Event Details"
|
133 |
msgstr "Détail de l'événement"
|
134 |
|
135 |
-
|
136 |
-
|
137 |
msgid "Post Date"
|
138 |
msgstr "Date de publication"
|
139 |
|
140 |
-
|
141 |
-
|
142 |
msgid "Event date/time"
|
143 |
msgstr "Date/heure de l'événement"
|
144 |
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
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 |
-
|
173 |
-
#: app/helper/class-ai1ec-
|
174 |
-
|
175 |
-
|
176 |
-
msgstr "Pas de répétition"
|
177 |
|
178 |
-
#: app/helper/class-ai1ec-
|
179 |
-
|
180 |
-
|
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 |
-
|
188 |
-
#: app/helper/class-ai1ec-
|
189 |
-
|
190 |
-
|
191 |
-
#@ all-in-one-event-calendar
|
192 |
-
msgid "Weekly"
|
193 |
-
msgstr "Hebdomadaire"
|
194 |
|
195 |
-
|
196 |
-
#: app/helper/class-ai1ec-
|
197 |
-
|
198 |
-
|
199 |
-
#@ all-in-one-event-calendar
|
200 |
-
msgid "Monthly"
|
201 |
-
msgstr "Mensuel"
|
202 |
|
203 |
-
#: app/helper/class-ai1ec-
|
204 |
-
|
205 |
-
|
206 |
-
#: app/view/box_time_and_date.php:61
|
207 |
-
#@ all-in-one-event-calendar
|
208 |
-
msgid "Yearly"
|
209 |
-
msgstr "Annuel"
|
210 |
|
211 |
-
|
212 |
-
|
213 |
-
msgid "
|
214 |
-
msgstr "
|
215 |
|
216 |
-
|
217 |
-
|
218 |
-
msgid "
|
219 |
-
|
|
|
|
|
220 |
|
221 |
-
|
222 |
-
|
223 |
-
msgid "
|
224 |
-
|
|
|
|
|
225 |
|
226 |
-
|
227 |
-
#: app/
|
228 |
-
|
229 |
-
|
230 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
232 |
-
#: app/helper/class-ai1ec-
|
233 |
-
|
234 |
-
msgid "
|
235 |
-
msgstr "
|
236 |
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
msgstr "Vue \"%s\" »"
|
242 |
|
243 |
-
|
244 |
-
#: app/
|
245 |
-
|
246 |
-
|
247 |
-
#@ all-in-one-event-calendar
|
248 |
-
msgid "Month"
|
249 |
-
msgstr "Mois"
|
250 |
|
251 |
-
|
252 |
-
#: app/helper/class-ai1ec-
|
253 |
-
#: app/
|
254 |
-
|
255 |
-
|
256 |
-
msgstr "Agenda"
|
257 |
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
|
|
262 |
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
|
|
267 |
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
|
|
272 |
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
|
|
277 |
|
278 |
-
|
279 |
-
#: app/
|
280 |
-
|
281 |
-
msgid "
|
282 |
-
msgstr "
|
283 |
|
284 |
-
|
285 |
-
|
286 |
-
msgid "
|
287 |
-
msgstr "
|
288 |
|
289 |
-
|
290 |
-
#: app/
|
291 |
-
|
292 |
-
|
293 |
-
msgstr "Indexé avec"
|
294 |
|
295 |
-
|
296 |
-
|
297 |
-
msgid "
|
298 |
-
msgstr "
|
299 |
|
300 |
-
|
301 |
-
|
302 |
-
msgid "
|
303 |
-
msgstr "
|
304 |
|
305 |
-
|
306 |
-
|
307 |
-
msgid "
|
308 |
-
msgstr "
|
309 |
|
310 |
-
|
311 |
-
|
312 |
-
msgid "
|
313 |
-
msgstr "
|
314 |
|
315 |
-
|
316 |
-
|
317 |
-
msgid "
|
318 |
-
msgstr "
|
319 |
|
320 |
-
|
321 |
-
|
322 |
-
msgid "
|
323 |
-
msgstr "
|
324 |
|
325 |
-
|
326 |
-
|
327 |
-
msgid "
|
328 |
-
msgstr "
|
329 |
|
330 |
-
|
331 |
-
#: app/
|
332 |
-
|
333 |
-
|
334 |
-
msgstr "S'abonner à ce calendrier en utilisant votre logiciel d'agenda favori"
|
335 |
|
336 |
-
|
337 |
-
#: app/
|
338 |
-
|
339 |
-
|
340 |
-
msgstr "S'abonner"
|
341 |
|
342 |
-
|
343 |
-
|
344 |
-
msgid "
|
345 |
-
msgstr "
|
346 |
|
347 |
-
|
348 |
-
#: app/
|
349 |
-
|
350 |
-
|
351 |
-
msgstr "S'abonner à ce calendrier dans votre agenda Google"
|
352 |
|
353 |
-
|
354 |
-
|
355 |
-
msgid "
|
356 |
-
msgstr "
|
357 |
|
358 |
-
|
359 |
-
|
360 |
-
msgid "
|
361 |
-
msgstr "
|
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 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
#: app/view/
|
389 |
-
|
390 |
-
|
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 |
-
|
439 |
-
#: app/
|
440 |
-
#: app/
|
441 |
-
|
442 |
-
|
443 |
-
|
|
|
444 |
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
|
|
|
|
|
|
449 |
|
450 |
-
|
451 |
-
#: app/
|
452 |
-
|
453 |
-
|
454 |
-
|
|
|
|
|
455 |
|
456 |
-
|
457 |
-
#: app/
|
458 |
-
|
459 |
-
|
460 |
-
msgid "Where:"
|
461 |
-
msgstr "Où:"
|
462 |
|
463 |
-
|
464 |
-
|
465 |
-
msgid "
|
466 |
-
msgstr "
|
467 |
|
468 |
-
|
469 |
-
|
470 |
-
msgid "
|
471 |
-
msgstr "
|
472 |
|
473 |
-
|
474 |
-
|
475 |
-
msgid "
|
476 |
-
msgstr "
|
477 |
|
478 |
-
|
479 |
-
|
480 |
-
msgid "
|
481 |
-
msgstr "
|
482 |
|
483 |
-
|
484 |
-
#: app/
|
485 |
-
|
486 |
-
|
487 |
-
msgstr "Coût:"
|
488 |
|
489 |
-
|
490 |
-
#: app/
|
491 |
-
|
492 |
-
msgid "
|
493 |
-
msgstr "
|
494 |
|
495 |
-
#: app/
|
496 |
-
#: app/
|
497 |
-
#: app/
|
498 |
-
|
499 |
-
msgid "
|
500 |
-
msgstr "
|
501 |
|
502 |
-
|
503 |
-
#: app/
|
504 |
-
#: app/
|
505 |
-
|
506 |
-
msgid "
|
507 |
-
msgstr "
|
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/
|
540 |
-
|
541 |
-
|
542 |
-
|
|
|
|
|
|
|
543 |
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
|
|
|
|
548 |
|
549 |
-
#: app/
|
550 |
-
|
551 |
-
|
552 |
-
|
|
|
|
|
553 |
|
554 |
-
|
555 |
-
#: app/
|
556 |
-
|
557 |
-
|
558 |
-
msgstr "Couleur des catégories"
|
559 |
|
560 |
-
|
561 |
-
#: app/
|
562 |
-
|
563 |
-
|
564 |
-
msgstr "Les événements de cette catégories seront identifiés de cette couleur"
|
565 |
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
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 |
-
|
573 |
-
|
574 |
-
msgid "
|
575 |
-
msgstr "
|
576 |
|
577 |
-
|
578 |
-
|
579 |
-
msgid "
|
580 |
-
msgstr "
|
581 |
|
582 |
-
|
583 |
-
|
584 |
-
msgid "
|
585 |
-
msgstr "
|
586 |
|
587 |
-
|
588 |
-
|
589 |
-
msgid "
|
590 |
-
msgstr "
|
591 |
|
592 |
-
|
593 |
-
|
594 |
-
msgid "
|
595 |
-
msgstr "
|
596 |
|
597 |
-
|
598 |
-
|
599 |
-
msgid "
|
600 |
-
msgstr "
|
601 |
|
602 |
-
|
603 |
-
|
604 |
-
msgid "
|
605 |
-
msgstr "
|
606 |
|
607 |
-
|
608 |
-
|
609 |
-
msgid "
|
610 |
-
msgstr "
|
611 |
|
612 |
-
|
613 |
-
|
614 |
-
msgid "
|
615 |
-
msgstr "
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
msgid "
|
620 |
-
msgstr "
|
621 |
|
622 |
-
|
623 |
-
|
624 |
-
msgid "
|
625 |
-
msgstr "
|
626 |
|
627 |
-
|
628 |
-
|
629 |
-
msgid "
|
630 |
-
msgstr "
|
631 |
|
632 |
-
|
633 |
-
|
634 |
-
msgid "
|
635 |
-
msgstr "
|
636 |
|
637 |
-
|
638 |
-
|
639 |
-
msgid "
|
640 |
-
msgstr "
|
641 |
|
642 |
-
|
643 |
-
|
644 |
-
msgid "
|
645 |
-
msgstr "
|
646 |
|
647 |
-
|
648 |
-
|
649 |
-
msgid "
|
650 |
-
msgstr "
|
651 |
|
652 |
-
|
653 |
-
|
654 |
-
msgid "
|
655 |
-
msgstr "
|
656 |
|
657 |
-
|
658 |
-
|
659 |
-
msgid "
|
660 |
-
msgstr "
|
661 |
|
662 |
-
|
663 |
-
|
664 |
-
msgid "
|
665 |
-
msgstr "
|
666 |
|
667 |
-
|
668 |
-
|
669 |
-
msgid "
|
670 |
-
msgstr "
|
671 |
|
672 |
-
|
673 |
-
|
674 |
-
msgid "
|
675 |
-
msgstr "
|
676 |
|
677 |
-
|
678 |
-
|
679 |
-
msgid "
|
680 |
-
msgstr "
|
681 |
|
682 |
-
|
683 |
-
|
684 |
-
msgid "
|
685 |
-
msgstr "
|
686 |
|
687 |
-
|
688 |
-
|
689 |
-
msgid "
|
690 |
-
msgstr "
|
691 |
|
692 |
-
|
693 |
-
|
694 |
-
msgid "
|
695 |
-
msgstr "
|
696 |
|
697 |
-
|
698 |
-
|
699 |
-
msgid "
|
700 |
-
msgstr "
|
701 |
|
702 |
-
|
703 |
-
|
704 |
msgid "Show <strong>View Calendar</strong> button"
|
705 |
msgstr "Afficher le bouton <strong>Vue calendrier</strong>"
|
706 |
|
707 |
-
|
708 |
-
|
709 |
msgid "Show <strong>Subscribe</strong> buttons"
|
710 |
msgstr "Montrer les boutons <strong>S'abonner</strong>"
|
711 |
|
712 |
-
|
713 |
-
|
714 |
msgid "Hide this widget on calendar page"
|
715 |
msgstr "Cacher ce Widget sur la page \"Calendrier\""
|
716 |
|
717 |
-
|
718 |
-
#: app/view/
|
719 |
-
|
720 |
-
|
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 |
-
|
771 |
-
|
772 |
-
msgid "
|
773 |
-
msgstr "
|
774 |
|
775 |
-
|
776 |
-
|
777 |
msgid "Organizer contact info"
|
778 |
msgstr "Information planning contact"
|
779 |
|
780 |
-
|
781 |
-
|
782 |
msgid "Contact name:"
|
783 |
-
msgstr "Nom du contact
|
784 |
|
785 |
-
|
786 |
-
|
787 |
msgid "Phone:"
|
788 |
-
msgstr "Téléphone
|
789 |
|
790 |
-
|
791 |
-
|
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 |
-
|
807 |
-
|
808 |
msgid "Event cost"
|
809 |
msgstr "Coût de l'événement"
|
810 |
|
811 |
-
|
812 |
-
|
813 |
msgid "Cost"
|
814 |
msgstr "Coût"
|
815 |
|
816 |
-
|
817 |
-
|
818 |
-
msgid "
|
819 |
-
msgstr "
|
820 |
|
821 |
-
|
822 |
-
|
823 |
-
msgid "
|
824 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
825 |
|
826 |
-
|
827 |
-
|
|
|
|
|
|
|
|
|
|
|
828 |
msgid "Eventbrite Ticketing"
|
829 |
msgstr "Billetterie Eventbrite"
|
830 |
|
831 |
-
|
832 |
-
|
833 |
msgid "Register this event with Eventbrite.com?"
|
834 |
msgstr "Enregistrer cet événement avec Eventbrite.com ?"
|
835 |
|
836 |
-
|
837 |
-
|
838 |
msgid "Yes"
|
839 |
msgstr "Oui"
|
840 |
|
841 |
-
|
842 |
-
|
843 |
msgid "No"
|
844 |
msgstr "Non"
|
845 |
|
846 |
-
|
847 |
-
|
848 |
msgid "Set up your first ticket"
|
849 |
msgstr "Configurer votre premier ticket"
|
850 |
|
851 |
-
|
852 |
-
|
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 |
-
|
857 |
-
|
858 |
msgid "Name"
|
859 |
msgstr "Nom"
|
860 |
|
861 |
-
|
862 |
-
|
863 |
msgid "Description"
|
864 |
msgstr "Description"
|
865 |
|
866 |
-
|
867 |
-
|
868 |
msgid "Type"
|
869 |
msgstr "Type"
|
870 |
|
871 |
-
|
872 |
-
|
873 |
msgid "Set Price"
|
874 |
msgstr "Définir le prix"
|
875 |
|
876 |
-
|
877 |
-
|
878 |
msgid "Donation Based"
|
879 |
msgstr "Sur la base de contribution"
|
880 |
|
881 |
-
|
882 |
-
|
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 |
-
|
887 |
-
|
888 |
msgid "Quantity"
|
889 |
msgstr "Quantité"
|
890 |
|
891 |
-
|
892 |
-
|
893 |
msgid "Include Fee in Price"
|
894 |
msgstr "Compter les frais dans le prix"
|
895 |
|
896 |
-
|
897 |
-
|
898 |
msgid "Add Service Fee on top of price"
|
899 |
msgstr "Ajouter des frais de service en plus du prix"
|
900 |
|
901 |
-
|
902 |
-
|
903 |
msgid "Include Service fee in price"
|
904 |
msgstr "Inclure les frais de service dans le prix"
|
905 |
|
906 |
-
|
907 |
-
|
908 |
msgid "Payment Options"
|
909 |
msgstr "Options de paiement"
|
910 |
|
911 |
-
|
912 |
-
|
913 |
msgid "Paypal"
|
914 |
msgstr "Paypal"
|
915 |
|
916 |
-
|
917 |
-
|
918 |
msgid "Google Checkout"
|
919 |
msgstr "Google Checkout"
|
920 |
|
921 |
-
|
922 |
-
|
923 |
msgid "Check"
|
924 |
msgstr "Vérification"
|
925 |
|
926 |
-
|
927 |
-
|
928 |
msgid "Cash"
|
929 |
-
msgstr "En
|
930 |
|
931 |
-
|
932 |
-
|
933 |
msgid "Send an Invoice"
|
934 |
msgstr "Envoyer une facture"
|
935 |
|
936 |
-
#: app/view/
|
937 |
-
|
938 |
-
|
939 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
940 |
|
941 |
-
|
942 |
-
|
943 |
-
msgid "
|
944 |
-
msgstr "
|
945 |
|
946 |
-
|
947 |
-
#: app/view/
|
948 |
-
|
949 |
-
msgid "
|
950 |
-
msgstr "
|
951 |
|
952 |
-
|
953 |
-
#: app/view/
|
954 |
-
|
955 |
-
|
956 |
-
msgid "Flush 1 event"
|
957 |
-
msgid_plural "Flush %s events"
|
958 |
-
msgstr[0] ""
|
959 |
-
msgstr[1] ""
|
960 |
|
961 |
-
|
962 |
-
|
963 |
-
msgid "
|
964 |
-
msgstr "
|
965 |
|
966 |
-
|
967 |
-
|
968 |
-
msgid "
|
969 |
-
msgstr "
|
970 |
|
971 |
-
|
972 |
-
|
973 |
-
msgid "
|
974 |
-
msgstr "
|
975 |
|
976 |
-
|
977 |
-
|
978 |
-
msgid "
|
979 |
-
msgstr "
|
980 |
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
msgstr "Evénement mis à jour. <a href=\"%s\">Voir l'événement</a>"
|
986 |
|
987 |
-
|
988 |
-
|
989 |
-
msgid "
|
990 |
-
msgstr "
|
991 |
|
992 |
-
|
993 |
-
|
994 |
-
msgid "
|
995 |
-
msgstr "
|
996 |
|
997 |
-
|
998 |
-
|
999 |
-
msgid "
|
1000 |
-
msgstr "
|
1001 |
|
1002 |
-
|
1003 |
-
#: app/
|
1004 |
-
|
1005 |
-
|
1006 |
-
msgid "Event restored to revision from %s"
|
1007 |
-
msgstr "Evénément restauré depuis la révision %s"
|
1008 |
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
msgstr "Evénement publié. <a href=\"%s\">Voir l'événement</a>"
|
1014 |
|
1015 |
-
|
1016 |
-
|
1017 |
-
msgid "
|
1018 |
-
msgstr ""
|
1019 |
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
msgstr "Evénément envoyé. <a target=\"_blank\" href=\"%s\">Précédent</a>"
|
1025 |
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
msgstr "Evénement programmé pour: <strong>%1$s</strong>. <a target=\"_blank\" href=\"%2$s\">Précédent</a>"
|
1031 |
|
1032 |
-
|
1033 |
-
|
1034 |
-
msgid "
|
1035 |
-
msgstr "
|
1036 |
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
msgstr "Brouillon mis à jour. <a target=\"_blank\" href=\"%s\">Prévisualiser l'événement</a>"
|
1042 |
|
1043 |
-
|
1044 |
-
#: app/
|
1045 |
-
|
1046 |
-
|
1047 |
-
msgstr "Options"
|
1048 |
|
1049 |
-
#: app/
|
1050 |
-
|
1051 |
-
|
1052 |
-
msgstr "Options mises à jour"
|
1053 |
|
1054 |
-
#: app/
|
1055 |
-
|
1056 |
-
|
1057 |
-
msgid "Flushed %d events"
|
1058 |
-
msgstr "Nettoyer %d événements"
|
1059 |
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
msgstr "Importer %d événements"
|
1065 |
|
1066 |
-
#: app/
|
1067 |
-
|
1068 |
-
|
1069 |
-
msgid "General Settings"
|
1070 |
-
msgstr "Configuration générale"
|
1071 |
|
1072 |
-
#: app/
|
1073 |
-
|
1074 |
-
|
1075 |
-
msgid "The Seed Studio Support"
|
1076 |
-
msgstr "Assistance The Seed Studio"
|
1077 |
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
msgstr "Options d'importation ICS"
|
1083 |
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
msgstr "<a href=\"%s\">Options</a>"
|
1089 |
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
msgstr "<a href=\"%s\" target=\"_blank\">Contribuer</a>"
|
1095 |
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
msgstr "<a href=\"%s\" target=\"_blank\">Aide</a>"
|
1101 |
|
1102 |
-
#: app/
|
1103 |
-
|
1104 |
-
|
1105 |
-
msgstr "The Events Calendar → All-in-One Event Calendar"
|
1106 |
|
1107 |
-
#: app/
|
1108 |
-
|
1109 |
-
|
1110 |
-
msgstr "Importer des événements en utilisant l'extension The Events Calendar dans All-in-One Event Calendar"
|
1111 |
|
1112 |
-
|
1113 |
-
|
1114 |
-
msgid "
|
1115 |
-
msgstr "
|
1116 |
|
1117 |
-
#: app/
|
1118 |
-
|
1119 |
-
|
1120 |
-
msgid "Every day"
|
1121 |
-
msgstr "Tous les jours"
|
1122 |
|
1123 |
-
|
1124 |
-
#: app/
|
1125 |
-
|
1126 |
-
|
1127 |
-
msgstr "Toutes les semaines"
|
1128 |
|
1129 |
-
|
1130 |
-
#: app/
|
1131 |
-
|
1132 |
-
|
1133 |
-
msgstr "Tous les mois"
|
1134 |
|
1135 |
-
#: app/
|
1136 |
-
|
1137 |
-
|
1138 |
-
msgid "Every year"
|
1139 |
-
msgstr "Tous les ans"
|
1140 |
|
1141 |
-
#: app/
|
1142 |
-
|
1143 |
-
|
1144 |
-
msgid "-----------"
|
1145 |
-
msgstr "-----------"
|
1146 |
|
1147 |
-
#: app/
|
1148 |
-
|
1149 |
-
|
1150 |
-
msgid "Custom..."
|
1151 |
-
msgstr "Personnalisé..."
|
1152 |
|
1153 |
-
#: app/
|
1154 |
-
|
1155 |
-
|
1156 |
-
msgstr "premier"
|
1157 |
|
1158 |
-
#: app/
|
1159 |
-
|
1160 |
-
|
1161 |
-
msgstr "deuxième"
|
1162 |
|
1163 |
-
|
1164 |
-
|
1165 |
-
msgid "
|
1166 |
-
msgstr "
|
1167 |
|
1168 |
-
|
1169 |
-
|
1170 |
-
msgid "
|
1171 |
-
msgstr "
|
1172 |
|
1173 |
-
|
1174 |
-
|
1175 |
-
msgid "
|
1176 |
-
msgstr "
|
1177 |
|
1178 |
-
|
1179 |
-
|
1180 |
-
msgid "
|
1181 |
-
msgstr "
|
1182 |
|
1183 |
-
|
1184 |
-
|
1185 |
-
msgid "
|
1186 |
-
msgstr "
|
1187 |
|
1188 |
-
|
1189 |
-
|
1190 |
-
msgid "
|
1191 |
-
msgstr "
|
1192 |
|
1193 |
-
#: app/
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1197 |
|
1198 |
-
#: app/
|
1199 |
-
|
1200 |
-
|
1201 |
-
msgstr "Mercredi"
|
1202 |
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
|
|
1207 |
|
1208 |
-
|
1209 |
-
|
1210 |
-
msgid "
|
1211 |
-
msgstr "
|
1212 |
|
1213 |
-
|
1214 |
-
|
1215 |
-
|
1216 |
-
|
|
|
1217 |
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
|
|
1222 |
|
1223 |
-
|
1224 |
-
|
1225 |
-
msgid "
|
1226 |
-
msgstr "
|
1227 |
|
1228 |
-
|
1229 |
-
|
1230 |
-
msgid "
|
1231 |
-
msgstr "
|
1232 |
|
1233 |
-
|
1234 |
-
|
1235 |
-
msgid "
|
1236 |
-
msgstr "
|
1237 |
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
|
|
|
|
|
|
|
|
1242 |
|
1243 |
-
|
1244 |
-
|
1245 |
-
msgid "
|
1246 |
-
msgstr "
|
1247 |
|
1248 |
-
|
1249 |
-
|
1250 |
-
msgid "
|
1251 |
-
msgstr "
|
1252 |
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
|
|
1257 |
|
1258 |
-
|
1259 |
-
#: app/
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
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 |
-
|
1272 |
-
#: app/
|
1273 |
-
|
1274 |
-
|
1275 |
-
msgid "and"
|
1276 |
-
msgstr "et"
|
1277 |
|
1278 |
-
#:
|
1279 |
-
|
1280 |
-
|
1281 |
-
#@ all-in-one-event-calendar
|
1282 |
-
msgid "of the month"
|
1283 |
-
msgstr "dans le mois"
|
1284 |
|
1285 |
-
#:
|
1286 |
-
|
1287 |
-
|
1288 |
-
msgstr "Tous les autres jours"
|
1289 |
|
1290 |
-
#:
|
1291 |
-
|
1292 |
-
|
1293 |
-
msgid "Every %d days"
|
1294 |
-
msgstr "Tous les %d jours"
|
1295 |
|
1296 |
-
#:
|
1297 |
-
|
1298 |
-
|
1299 |
-
msgstr "Toutes les autres semaines"
|
1300 |
|
1301 |
-
#:
|
1302 |
-
|
1303 |
-
|
1304 |
-
msgid "Every %d weeks"
|
1305 |
-
msgstr "Toutes les %d semaines"
|
1306 |
|
1307 |
-
#:
|
1308 |
-
|
1309 |
-
|
1310 |
-
msgstr "Tous les autres mois"
|
1311 |
|
1312 |
-
#:
|
1313 |
-
|
1314 |
-
|
1315 |
-
msgid "Every %d months"
|
1316 |
-
msgstr "Tous les %d mois"
|
1317 |
|
1318 |
-
#:
|
1319 |
-
|
1320 |
-
|
1321 |
-
msgstr "Toutes les autres années"
|
1322 |
|
1323 |
-
#:
|
1324 |
-
|
1325 |
-
|
1326 |
-
msgid "Every %d years"
|
1327 |
-
msgstr "Toutes les %d années"
|
1328 |
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
msgstr "jusqu'à %s"
|
1334 |
|
1335 |
-
|
1336 |
-
|
1337 |
-
|
1338 |
-
|
1339 |
-
msgstr "pour %d occurrences"
|
1340 |
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
|
|
1345 |
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
|
|
1350 |
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
|
|
1355 |
|
1356 |
-
|
1357 |
-
|
1358 |
-
msgid "
|
1359 |
-
msgstr "
|
1360 |
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
|
|
|
|
|
|
1365 |
|
1366 |
-
|
1367 |
-
|
1368 |
-
msgid "
|
1369 |
-
msgstr "
|
1370 |
|
1371 |
-
|
1372 |
-
|
1373 |
-
msgid "
|
1374 |
-
msgstr "
|
1375 |
|
1376 |
-
|
1377 |
-
|
1378 |
-
msgid "
|
1379 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1380 |
|
1381 |
-
|
1382 |
-
|
1383 |
msgid "Categories"
|
1384 |
msgstr "Catégories"
|
1385 |
|
1386 |
-
|
1387 |
-
|
1388 |
msgid "Tags"
|
1389 |
-
msgstr "Mots
|
1390 |
|
1391 |
-
|
1392 |
-
|
1393 |
-
msgid "
|
1394 |
-
msgstr "
|
1395 |
|
1396 |
-
|
1397 |
-
|
1398 |
-
msgid "
|
1399 |
-
msgstr "
|
1400 |
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
|
|
|
|
1405 |
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
|
|
|
|
1410 |
|
1411 |
-
|
1412 |
-
|
1413 |
-
msgid "
|
1414 |
-
msgstr "
|
1415 |
|
1416 |
-
|
1417 |
-
#:
|
1418 |
-
|
1419 |
-
|
1420 |
-
#@ all-in-one-event-calendar
|
1421 |
-
msgid "Every"
|
1422 |
-
msgstr "Tous les"
|
1423 |
|
1424 |
-
|
1425 |
-
|
1426 |
-
msgid "
|
1427 |
-
msgstr "
|
1428 |
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
|
|
1433 |
|
1434 |
-
|
1435 |
-
|
1436 |
-
msgid "
|
1437 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 : <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 : 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 : 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 »</a>"
|
397 |
+
msgstr "L'extension est installée mais non configurée. <a href=\"%s\">Cliquez ici pour la configurer »</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 :</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 : 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 :"
|
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 :"
|
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 :"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 :"
|
850 |
|
851 |
+
# @ all-in-one-event-calendar
|
852 |
+
#: app/view/admin/box_event_contact.php:17
|
853 |
msgid "Phone:"
|
854 |
+
msgstr "Téléphone :"
|
855 |
|
856 |
+
# @ all-in-one-event-calendar
|
857 |
+
#: app/view/admin/box_event_contact.php:27
|
858 |
msgid "E-mail:"
|
859 |
+
msgstr "E-mail :"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 :"
|
880 |
+
|
881 |
+
# @ all-in-one-event-calendar
|
882 |
+
#: app/view/admin/box_event_location.php:18
|
883 |
+
msgid "Address:"
|
884 |
+
msgstr "Adresse :"
|
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 :"
|
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 :"
|
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 :"
|
1053 |
|
1054 |
+
# @ all-in-one-event-calendar
|
1055 |
+
#: app/view/admin/box_general_settings.php:14
|
1056 |
+
msgid "Timezone:"
|
1057 |
+
msgstr "Fuseau horaire :"
|
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 :"
|
|
|
|
|
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 !"
|
|
|
|
|
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 : 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>…"
|
1405 |
+
msgstr "Téléchargement de la mise à jour depuis <span class=\"code\">%s</span>…"
|
|
|
|
|
1406 |
|
1407 |
+
#: lib/class-ai1ec-updater.php:15
|
1408 |
+
msgid "Unpacking the update…"
|
1409 |
+
msgstr "Décompression de la mise à jour…"
|
|
|
1410 |
|
1411 |
+
#: lib/class-ai1ec-updater.php:16
|
1412 |
+
msgid "Deactivating the plugin…"
|
1413 |
+
msgstr "Désactivation de l'extension…"
|
|
|
|
|
1414 |
|
1415 |
+
#: lib/class-ai1ec-updater.php:17
|
1416 |
+
msgid "Removing the old version of the plugin…"
|
1417 |
+
msgstr "Suppression de l'ancienne version de l'extension…"
|
|
|
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 :"
|
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 :"
|
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 :"
|
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 :"
|
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 :"
|
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ù :"
|
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 :"
|
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 :"
|
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 :"
|
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é :"
|
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é :"
|
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
|
2 |
-
# This file is distributed under the same license as the All-in-One Calendar by
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: All-in-One Calendar by
|
6 |
"Report-Msgid-Bugs-To: http://wordpress.org/tag/all-in-one-event-calendar\n"
|
7 |
-
"POT-Creation-Date: 2012-
|
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-
|
12 |
-
"Last-Translator:
|
13 |
-
"Language-Team:
|
14 |
|
15 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
16 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
17 |
msgid "Calendar Feeds"
|
18 |
msgstr ""
|
19 |
|
20 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
21 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
22 |
#: app/helper/class-ai1ec-settings-helper.php:320
|
23 |
msgid "Calendar"
|
24 |
msgstr ""
|
25 |
|
26 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
27 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
28 |
msgid "Upgrade"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: app/controller/class-ai1ec-app-controller.php:
|
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:
|
183 |
msgctxt "meta box"
|
184 |
msgid "General Settings"
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
188 |
msgctxt "meta box"
|
189 |
msgid "Advanced Settings"
|
190 |
msgstr ""
|
191 |
|
192 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
193 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
194 |
msgctxt "meta box"
|
195 |
-
msgid "
|
196 |
msgstr ""
|
197 |
|
198 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
199 |
msgctxt "meta box"
|
200 |
msgid "Feed Subscriptions"
|
201 |
msgstr ""
|
202 |
|
203 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
204 |
msgid "<a href=\"%s\">Settings</a>"
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
208 |
msgid "<a href=\"%s\" target=\"_blank\">Donate</a>"
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: app/controller/class-ai1ec-settings-controller.php:
|
212 |
msgid "<a href=\"%s\" target=\"_blank\">Get Support</a>"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: app/controller/class-ai1ec-themes-controller.php:
|
216 |
-
#: app/controller/class-ai1ec-themes-controller.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
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:
|
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:
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
349 |
msgid "Select an option in the <strong>Calendar page</strong> dropdown list."
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
353 |
msgid "Select an option in the <strong>Timezone</strong> dropdown list."
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
357 |
msgid "Click <strong>Update Settings</strong>."
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
361 |
-
msgid ""
|
362 |
-
"The plugin is installed, but has not been configured. <a href=\"%s\">Click "
|
363 |
-
"here to set it up now »</a>"
|
364 |
msgstr ""
|
365 |
|
366 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
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:
|
373 |
msgid "<p>To set up the plugin:</p>"
|
374 |
msgstr ""
|
375 |
|
376 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
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:
|
387 |
msgid "Event Category"
|
388 |
msgid_plural "Event Categories"
|
389 |
msgstr[0] ""
|
390 |
msgstr[1] ""
|
391 |
|
392 |
-
#: app/helper/class-ai1ec-app-helper.php:
|
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
|
|
|
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
|
|
|
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
|
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/
|
1014 |
-
msgid "
|
1015 |
msgstr ""
|
1016 |
|
1017 |
-
#: app/view/admin/
|
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/
|
1024 |
-
msgid "Follow @
|
1025 |
msgstr ""
|
1026 |
|
1027 |
-
#: app/view/admin/
|
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/
|
1034 |
msgid "Calendar Themes"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: app/view/admin/
|
|
|
|
|
|
|
|
|
1038 |
msgid "Duplicate Events"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
-
#: app/view/admin/
|
1042 |
-
msgid "
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: app/view/admin/
|
1046 |
-
msgid "
|
1047 |
msgstr ""
|
1048 |
|
1049 |
-
#: app/view/admin/
|
1050 |
-
msgid "
|
1051 |
msgstr ""
|
1052 |
|
1053 |
-
#: app/view/admin/
|
1054 |
-
msgid ""
|
1055 |
-
"Then.ly is dedicated to creating the best calendar software in the world."
|
1056 |
msgstr ""
|
1057 |
|
1058 |
-
#: app/view/admin/
|
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/
|
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
|
|
|
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
|
1201 |
-
#: app/view/admin/row_monthly.php:
|
|
|
|
|
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
|
1279 |
-
#: themes-ai1ec/vortex/agenda.php:
|
1280 |
-
#: themes-ai1ec/vortex/
|
1281 |
-
#: themes-ai1ec/vortex/
|
1282 |
-
#: themes-ai1ec/vortex/
|
1283 |
-
#: themes-ai1ec/vortex/
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
1313 |
-
#: themes-ai1ec/vortex/
|
|
|
|
|
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
|
1330 |
-
#: themes-ai1ec/vortex/
|
|
|
|
|
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
|
|
|
1340 |
#: themes-ai1ec/vortex/event-single.php:57
|
1341 |
msgid "Categories:"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: themes-ai1ec/vortex/agenda.php:96
|
|
|
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
|
1451 |
-
#: themes-ai1ec/vortex/oneday.php:
|
|
|
|
|
1452 |
#: themes-ai1ec/vortex/week.php:150
|
1453 |
msgid "Summary:"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
-
#: themes-ai1ec/vortex/month.php:70
|
1457 |
-
#: themes-ai1ec/vortex/oneday.php:
|
|
|
|
|
1458 |
#: themes-ai1ec/vortex/week.php:153
|
1459 |
msgid "click anywhere for details"
|
1460 |
msgstr ""
|
1461 |
|
1462 |
-
#: themes-ai1ec/vortex/oneday.php:35
|
|
|
1463 |
msgid "All-day"
|
1464 |
msgstr ""
|
1465 |
|
1466 |
#. Plugin Name of the plugin/theme
|
1467 |
-
msgid "All-in-One Calendar by
|
1468 |
msgstr ""
|
1469 |
|
1470 |
-
#. #-#-#-#-# plugin.pot (All-in-One Calendar by Then.ly 1.7) #-#-#-#-#
|
1471 |
#. Plugin URI of the plugin/theme
|
1472 |
-
|
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 »</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 =
|
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 "require_once '[folder/]iCalcreator.class.php';" 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 "Europe/Stockholm",
|
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( "iCalcreator.class.php" );
|
121 |
-
$config = array( "unique_id" => "kigkonsult.se" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
125 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
126 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
127 |
-
$tz = "Europe/Stockholm";
|
128 |
-
$v->setProperty( "X-WR-TIMEZONE", $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( "vevent" ); // <span class="comment">create an event calendar component</span>
|
133 |
-
$vevent->setProperty( "dtstart", array( "year"=>2007, "month"=>4, "day"=>1, "hour"=>19, "min"=>0, "sec"=>0 ));
|
134 |
-
$vevent->setProperty( "dtend", array( "year"=>2007, "month"=>4, "day"=>1, "hour"=>22, "min"=>30, "sec"=>0 ));
|
135 |
-
$vevent->setProperty( "LOCATION", "Central Placa" ); // <span class="comment">property name - case independent</span>
|
136 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
137 |
-
$vevent->setProperty( "description", "This is a description" );
|
138 |
-
$vevent->setProperty( "comment", "This is a comment" );
|
139 |
-
$vevent->setProperty( "attendee", "attendee1@icaldomain.net" );
|
140 |
-
.. .
|
141 |
-
$vevent = & $v->newComponent( "vevent" ); // <span class="comment">create next event calendar component</span>
|
142 |
-
$vevent->setProperty( "dtstart", "20070401", array("VALUE" => "DATE"));// <span class="comment">alt. date format, now for an all-day event</span>
|
143 |
-
$vevent->setProperty( "organizer" , "boss@icaldomain.com" );
|
144 |
-
$vevent->setProperty( "summary", "ALL-DAY event" );
|
145 |
-
$vevent->setProperty( "description", "This is a description for an all-day event" );
|
146 |
-
$vevent->setProperty( "resources", "COMPUTER PROJECTOR" );
|
147 |
-
$vevent->setProperty( "rrule", array( "FREQ" => "WEEKLY", "count" => 4));// <span class="comment">weekly, four occasions</span>
|
148 |
-
$vevent->parse( "LOCATION:1CP Conference Room 4350" ); // <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( "iCalcreator.class.php" );
|
157 |
-
$config = array( "unique_id" => "kigkonsult.se" ); // <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( "directory" => "calendar", "filename" => "file.ics" );
|
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( "url", "http://www.aDomain.net/file.ics" ); // <span class="comment">iCalcreator also support parse from or write to remote files</span>
|
167 |
-
$v->parse();
|
168 |
-
|
169 |
-
$v->setProperty( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
170 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
171 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
172 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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( "iCalcreator.class.php" );
|
180 |
-
$config = array( "unique_id" => "kigkonsult.se", "directory" => "calendar", "filename" => "file.ics" );
|
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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
187 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
188 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
189 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <span class="comment">required of some calendar software</span>
|
190 |
-
|
191 |
-
while( $vevent = $v->getComponent( "vevent" )) { // <span class="comment">read events, one by one</span>
|
192 |
-
$uid = $vevent->getProperty( "uid" ); // <span class="comment">uid required, one occurence (unique id/key for component)</span>
|
193 |
-
.. .
|
194 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="comment">dtstart required, one occurence</span>
|
195 |
-
.. .
|
196 |
-
if( $description = $vevent->getProperty( "description", 1 )) { // <span class="comment">description optional, first occurence</span>
|
197 |
-
.. . // <span class="comment">edit the description</span>
|
198 |
-
$vevent->setProperty( "description", $description, FALSE, 1 ); // <span class="comment">update/replace the description</span>
|
199 |
-
}
|
200 |
-
while( $comment = $vevent->getProperty( "comment" )) { // <span class="comment">comment optional, may occur more than once </span>
|
201 |
-
.. . // <span class="comment">manage comments</span>
|
202 |
-
}
|
203 |
-
.. .
|
204 |
-
while( $vevent->deleteProperty( "attendee" ))
|
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( "iCalcreator.class.php" );
|
215 |
-
$config = array( "unique_id" => "kigkonsult.se" ); // <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( "url", "http://www.aDomain.net/file.ics" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
223 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
224 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
225 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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 => $yearArray) {
|
231 |
-
foreach( $yearArray as $month => $monthArray ) {
|
232 |
-
foreach( $monthArray as $day => $dailyEventsArray ) {
|
233 |
-
foreach( $dailyEventsArray as $vevent ) {
|
234 |
-
$currddate = $event->getProperty( "x-current-dtstart" );
|
235 |
-
// <span class="comment">if member of a recurrence set (2nd occurence etc)</span>
|
236 |
-
// <span class="comment">returns array( "x-current-dtstart"</span>
|
237 |
-
// <span class="comment"> , <(string) date("Y-m-d [H:i:s][timezone/UTC offset]")>)</span>
|
238 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="comment">dtstart required, one occurence, (orig. start date)</span>
|
239 |
-
$summary = $vevent->getProperty( "summary" );
|
240 |
-
$description = $vevent->getProperty( "description" );
|
241 |
-
.. .
|
242 |
-
.. .
|
243 |
-
}
|
244 |
-
}
|
245 |
-
}
|
246 |
-
}
|
247 |
-
</p>
|
248 |
-
<h4>Select specific property values</h4>
|
249 |
-
<p class="code">$valueOccurr = $v->getProperty( "CATEGORIES" ); // <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 => $occurr ) {
|
254 |
-
.. .
|
255 |
-
}
|
256 |
-
</p>
|
257 |
-
<h4>Specific property value select</h4>
|
258 |
-
<p class="code">$selectSpec = array( "CATEGORIES" => "course1" );
|
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( "iCalcreator.class.php" );
|
268 |
-
$config = array( "unique_id" => "kigkonsult.se" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
272 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
273 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
274 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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( "directory" => "depot", "filename" => "calendar.ics" );
|
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( "url" => "http://www.aDomain.net/file.ics" );
|
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>"Internet Calendaring and Scheduling Core Object Specification (iCalendar)"
|
178 |
-
<dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
|
179 |
-
<dd>"iCalendar Transport-Independent Interoperability Protocol (iTIP)"<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 / 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 "[folder/]iCalcreator.class.php";</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 "Europe/Stockholm",
|
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 "php.ini" or additional file in "/etc/php.d" folder AND the execute rights to use the <i>PHP</i> "dl" 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( "unique_id" => "kigkonsult.se" );
|
313 |
-
$vcalendar = new vcalendar( $config );
|
314 |
-
$vcalendar->setProperty( "method", "PUBLISH" )
|
315 |
-
$vcalendar->setProperty( "x-wr-calname", "Calendar Sample" );
|
316 |
-
$vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" );
|
317 |
-
$uuid = "3E26604A-50F4-4449-8B3E-E4F4932D05B5";
|
318 |
-
$vcalendar->setProperty( "X-WR-RELCALID", $uuid );
|
319 |
-
$vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );
|
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 "coding samples" (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*("BEGIN" ":" "VCALENDAR" CRLF</p>
|
516 |
-
<p class="center">icalbody</p>
|
517 |
-
<p class="center">"END" ":" "VCALENDAR" CRLF)</p>
|
518 |
-
<br>
|
519 |
-
icalbody = calprops component
|
520 |
-
<br>
|
521 |
-
calprops = 2*(
|
522 |
-
<br>
|
523 |
-
<p class="center">"prodid" and "version" 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">"calscale"and "method"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 = "BEGIN" ":" iana-token CRLF</p>
|
532 |
-
<p class="center">1*contentline</p>
|
533 |
-
<p class="center">"END" ":" iana-token CRLF</p>
|
534 |
-
<p class="center">x-comp = "BEGIN" ":" x-name CRLF</p>
|
535 |
-
<p class="center">1*contentline</p>
|
536 |
-
<p class="center">"END" ":" 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">"BEGIN" ":" "VEVENT" CRLF</p>
|
543 |
-
<p class="center">eventprop *alarmc</p>
|
544 |
-
<p class="center">"END" ":" "VEVENT" 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 "<a href="#DTEND">dtend</a>" or "<a href="#DURATION">duration</a>" may appear in a "eventprop", </p>
|
552 |
-
<p class="center">but "<a href="#DTEND">dtend</a>" and "<a href="#DURATION">duration</a>" MUST NOT occur in the same "eventprop"</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">"BEGIN" ":" "VTODO" CRLF</p>
|
564 |
-
<p class="center">todoprop *alarmc</p>
|
565 |
-
<p class="center">"END" ":" "VTODO" 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 "<a href="#DUE">due</a>" or "<a href="#DURATION">duration</a>" may appear in a "todoprop",</p>
|
572 |
-
<p class="center"> but "<a href="#DUE">due</a>" and "<a href="#DURATION">duration</a>" MUST NOT occur in the same "todoprop"</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 = "BEGIN" ":" "VJOURNAL" CRLF</p>
|
584 |
-
<p class="center">jourprop</p>
|
585 |
-
<p class="center">"END" ":" "VJOURNAL" 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">"BEGIN" ":" "VFREEBUSY" CRLF</p>
|
601 |
-
<p class="center">fbprop</p>
|
602 |
-
<p class="center">"END" ":" "VFREEBUSY" 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">"BEGIN" ":" "VALARM" CRLF</p>
|
615 |
-
<p class="center">(audioprop / dispprop / emailprop / procprop)</p>
|
616 |
-
<p class="center">"END" ":" "VALARM" CRLF</p> audioprop = 2*(
|
617 |
-
<p class="center">"<a href="#ACTION">action</a>" and "<a href="#TRIGGER">trigger</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DESCRIPTION">description</a>" 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">"BEGIN" ":" "VTIMEZONE" CRLF</p>
|
667 |
-
2*(
|
668 |
-
<p class="center">"<a href="#TZID">tzid</a>" is required, but MUST NOT occur more than once</p>
|
669 |
-
<p class="center"><a href="#TZID">tzid</a> / </p>
|
670 |
-
<p class="center">"<a href="#LAST-MODIFIED">last-mod</a>" and "<a href="#TZURL">tzurl</a>" 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 "standardc" or "daylightc" 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">"END" ":" "VTIMEZONE" CRLF</p>
|
678 |
-
<p class="center">standardc = "BEGIN" ":" "STANDARD" CRLF</p>
|
679 |
-
<p class="center">tzprop</p>
|
680 |
-
<p class="center">"END" ":" "STANDARD" CRLF</p>
|
681 |
-
<p class="center">daylightc = "BEGIN" ":" "DAYLIGHT" CRLF</p>
|
682 |
-
<p class="center">tzprop</p>
|
683 |
-
<p class="center">"END" ":" "DAYLIGHT" 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 / 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"> </td>
|
725 |
-
</tr>
|
726 |
-
<tr>
|
727 |
-
<td> </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 a l a r m</a></td>
|
733 |
-
</tr>
|
734 |
-
<tr>
|
735 |
-
<td class="bb"> </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"> </td>
|
744 |
-
<td class="blb"> </td>
|
745 |
-
<td class="blb"> </td>
|
746 |
-
<td class="blb"> </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"> </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"> </td>
|
770 |
-
<td class="blb"> </td>
|
771 |
-
<td class="blb">1-m</td>
|
772 |
-
<td class="blb"> </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"> </td>
|
780 |
-
<td class="blb"> </td>
|
781 |
-
<td class="blb"> </td>
|
782 |
-
<td class="blb"> </td>
|
783 |
-
<td class="blb"> </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"> </td>
|
791 |
-
<td class="blb"> </td>
|
792 |
-
<td class="blb"> </td>
|
793 |
-
<td class="blb"> </td>
|
794 |
-
<td class="blb"> </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"> </td>
|
803 |
-
<td class="blb"> </td>
|
804 |
-
<td class="blb"> </td>
|
805 |
-
<td class="blb"> </td>
|
806 |
-
</tr>
|
807 |
-
<tr>
|
808 |
-
<td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
|
809 |
-
<td class="blb"> </td>
|
810 |
-
<td class="blb">0-1</td>
|
811 |
-
<td class="blb"> </td>
|
812 |
-
<td class="blb"> </td>
|
813 |
-
<td class="blb"> </td>
|
814 |
-
<td class="blb"> </td>
|
815 |
-
<td class="blb"> </td>
|
816 |
-
<td class="blb"> </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"> </td>
|
825 |
-
<td class="blb"> </td>
|
826 |
-
<td class="blb"> </td>
|
827 |
-
<td class="blb"> </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"> </td>
|
835 |
-
<td class="blb"> </td>
|
836 |
-
<td class="blb"> </td>
|
837 |
-
<td class="blb"> </td>
|
838 |
-
<td class="blb"> </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"> </td>
|
846 |
-
<td class="blb"> </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"> </td>
|
855 |
-
<td class="blb"> </td>
|
856 |
-
<td class="blb">0-1</td>
|
857 |
-
<td class="blb"> </td>
|
858 |
-
<td class="blb"> </td>
|
859 |
-
<td class="blb"> </td>
|
860 |
-
<td class="blb"> </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"> </td>
|
869 |
-
<td class="blb"> </td>
|
870 |
-
<td class="blb"> </td>
|
871 |
-
<td class="blb"> </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"> </td>
|
880 |
-
<td class="blb"> </td>
|
881 |
-
<td class="blb"> </td>
|
882 |
-
<td class="blb"> </td>
|
883 |
-
</tr>
|
884 |
-
<tr>
|
885 |
-
<td class="bb"><a class="ref" href="#DUE">due</a></td>
|
886 |
-
<td class="blb"> </td>
|
887 |
-
<td class="blb">0*1</td>
|
888 |
-
<td class="blb"> </td>
|
889 |
-
<td class="blb"> </td>
|
890 |
-
<td class="blb"> </td>
|
891 |
-
<td class="blb"> </td>
|
892 |
-
<td class="blb"> </td>
|
893 |
-
<td class="blb"> </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"> </td>
|
900 |
-
<td class="blb">0-1</td>
|
901 |
-
<td class="blb">0 / 1=1</td>
|
902 |
-
<td class="blb">0 / 1=1</td>
|
903 |
-
<td class="blb">0 / 1=1</td>
|
904 |
-
<td class="blb">0 / 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"> </td>
|
912 |
-
<td class="blb"> </td>
|
913 |
-
<td class="blb"> </td>
|
914 |
-
<td class="blb"> </td>
|
915 |
-
<td class="blb"> </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"> </td>
|
923 |
-
<td class="blb"> </td>
|
924 |
-
<td class="blb"> </td>
|
925 |
-
<td class="blb"> </td>
|
926 |
-
<td class="blb"> </td>
|
927 |
-
</tr>
|
928 |
-
<tr>
|
929 |
-
<td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
|
930 |
-
<td class="blb"> </td>
|
931 |
-
<td class="blb"> </td>
|
932 |
-
<td class="blb"> </td>
|
933 |
-
<td class="blb">0-m</td>
|
934 |
-
<td class="blb"> </td>
|
935 |
-
<td class="blb"> </td>
|
936 |
-
<td class="blb"> </td>
|
937 |
-
<td class="blb"> </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"> </td>
|
944 |
-
<td class="blb"> </td>
|
945 |
-
<td class="blb"> </td>
|
946 |
-
<td class="blb"> </td>
|
947 |
-
<td class="blb"> </td>
|
948 |
-
<td class="blb"> </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"> </td>
|
957 |
-
<td class="blb"> </td>
|
958 |
-
<td class="blb"> </td>
|
959 |
-
<td class="blb"> </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"> </td>
|
966 |
-
<td class="blb"> </td>
|
967 |
-
<td class="blb"> </td>
|
968 |
-
<td class="blb"> </td>
|
969 |
-
<td class="blb"> </td>
|
970 |
-
<td class="blb"> </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"> </td>
|
979 |
-
<td class="blb"> </td>
|
980 |
-
<td class="blb"> </td>
|
981 |
-
<td class="blb"> </td>
|
982 |
-
</tr>
|
983 |
-
<tr>
|
984 |
-
<td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
|
985 |
-
<td class="blb"> </td>
|
986 |
-
<td class="blb">0-1</td>
|
987 |
-
<td class="blb"> </td>
|
988 |
-
<td class="blb"> </td>
|
989 |
-
<td class="blb"> </td>
|
990 |
-
<td class="blb"> </td>
|
991 |
-
<td class="blb"> </td>
|
992 |
-
<td class="blb"> </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"> </td>
|
999 |
-
<td class="blb"> </td>
|
1000 |
-
<td class="blb"> </td>
|
1001 |
-
<td class="blb"> </td>
|
1002 |
-
<td class="blb"> </td>
|
1003 |
-
<td class="blb"> </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"> </td>
|
1011 |
-
<td class="blb"> </td>
|
1012 |
-
<td class="blb"> </td>
|
1013 |
-
<td class="blb"> </td>
|
1014 |
-
<td class="blb"> </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"> </td>
|
1022 |
-
<td class="blb"> </td>
|
1023 |
-
<td class="blb"> </td>
|
1024 |
-
<td class="blb"> </td>
|
1025 |
-
<td class="blb"> </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"> </td>
|
1033 |
-
<td class="blb"> </td>
|
1034 |
-
<td class="blb"> </td>
|
1035 |
-
<td class="blb"> </td>
|
1036 |
-
<td class="blb"> </td>
|
1037 |
-
</tr>
|
1038 |
-
<tr>
|
1039 |
-
<td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
|
1040 |
-
<td class="blb"> </td>
|
1041 |
-
<td class="blb"> </td>
|
1042 |
-
<td class="blb"> </td>
|
1043 |
-
<td class="blb"> </td>
|
1044 |
-
<td class="blb">0 / 1=1</td>
|
1045 |
-
<td class="blb">0 / 1=1</td>
|
1046 |
-
<td class="blb">0 / 1=1</td>
|
1047 |
-
<td class="blb">0 / 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"> </td>
|
1054 |
-
<td class="blb"> </td>
|
1055 |
-
<td class="blb"> </td>
|
1056 |
-
<td class="blb"> </td>
|
1057 |
-
<td class="blb"> </td>
|
1058 |
-
<td class="blb"> </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"> </td>
|
1066 |
-
<td class="blb"> </td>
|
1067 |
-
<td class="blb"> </td>
|
1068 |
-
<td class="blb"> </td>
|
1069 |
-
<td class="blb"> </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"> </td>
|
1078 |
-
<td class="blb"> </td>
|
1079 |
-
<td class="blb"> </td>
|
1080 |
-
<td class="blb"> </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"> </td>
|
1088 |
-
<td class="blb"> </td>
|
1089 |
-
<td class="blb"> </td>
|
1090 |
-
<td class="blb"> </td>
|
1091 |
-
<td class="blb"> </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"> </td>
|
1099 |
-
<td class="blb"> </td>
|
1100 |
-
<td class="blb"> </td>
|
1101 |
-
<td class="blb"> </td>
|
1102 |
-
<td class="blb"> </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"> </td>
|
1110 |
-
<td class="blb"> </td>
|
1111 |
-
<td class="blb"> </td>
|
1112 |
-
<td class="blb">1</td>
|
1113 |
-
<td class="blb"> </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"> </td>
|
1119 |
-
<td class="blb"> </td>
|
1120 |
-
<td class="blb"> </td>
|
1121 |
-
<td class="blb"> </td>
|
1122 |
-
<td class="blb"> </td>
|
1123 |
-
<td class="blb"> </td>
|
1124 |
-
<td class="blb"> </td>
|
1125 |
-
</tr>
|
1126 |
-
<tr>
|
1127 |
-
<td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
|
1128 |
-
<td class="blb"> </td>
|
1129 |
-
<td class="blb"> </td>
|
1130 |
-
<td class="blb"> </td>
|
1131 |
-
<td class="blb"> </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"> </td>
|
1144 |
-
<td class="blb"> </td>
|
1145 |
-
<td class="blb"> </td>
|
1146 |
-
<td class="blb"> </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"> </td>
|
1155 |
-
<td class="blb"> </td>
|
1156 |
-
<td class="blb"> </td>
|
1157 |
-
<td class="blb"> </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( "unique_id" => "kigkonsult.se" );
|
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( "vevent" )</p>
|
1202 |
-
<p class="label">Example</p>
|
1203 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1204 |
-
$vcalendar = new vcalendar( $config );
|
1205 |
-
...
|
1206 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "vtodo" )</p>
|
1230 |
-
<p class="label">Example</p>
|
1231 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1232 |
-
$vcalendar = new vcalendar( $config );
|
1233 |
-
...
|
1234 |
-
$vtodo = & $vcalendar->newComponent( "vtodo" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "vjournal" )</p>
|
1258 |
-
<p class="label">Example</p>
|
1259 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1260 |
-
$vcalendar = new vcalendar( $config );
|
1261 |
-
...
|
1262 |
-
$vjournal = & $vcalendar->newComponent( "vjournal" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "vfreebusy" )</p>
|
1286 |
-
<p class="label">Example</p>
|
1287 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1288 |
-
$vcalendar = new vcalendar( $config );
|
1289 |
-
...
|
1290 |
-
$vfreebusy = & $vcalendar->newComponent( "vfreebusy" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "valarm" )</p>
|
1314 |
-
<p class="label">Example</p>
|
1315 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1316 |
-
$vcalendar = new vcalendar( $config );
|
1317 |
-
...
|
1318 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
1319 |
-
$vevent->setProperty(...
|
1320 |
-
...
|
1321 |
-
$valarm = & $vevent->newComponent( "valarm" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "vtimezone" )</p>
|
1354 |
-
<p class="label">Example</p>
|
1355 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1356 |
-
$vcalendar = new vcalendar( $config );
|
1357 |
-
...
|
1358 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
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( "unique_id" => "kigkonsult.se" );
|
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( "standard" )</p>
|
1387 |
-
<p class="label">Example</p>
|
1388 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1389 |
-
$vcalendar = new vcalendar( $config );
|
1390 |
-
...
|
1391 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
1392 |
-
$vtimezone->setProperty(...
|
1393 |
-
...
|
1394 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
1395 |
-
$standard->setProperty(...
|
1396 |
-
...
|
1397 |
-
$daylight = & $vtimezone->newComponent( "daylight" );
|
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( "standard" )</p>
|
1404 |
-
<p class="label">Example</p>
|
1405 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1406 |
-
$vcalendar = new vcalendar( $config );
|
1407 |
-
...
|
1408 |
-
$vtimezone = new vtimezone();
|
1409 |
-
$vtimezone->setProperty(...
|
1410 |
-
...
|
1411 |
-
$standard = new vtimezone( "standard" );
|
1412 |
-
$standard->setProperty(...
|
1413 |
-
...
|
1414 |
-
$vtimezone->setComponent( $standard );
|
1415 |
-
...
|
1416 |
-
$daylight = new vtimezone( "daylight" );
|
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( "standard" )</p>
|
1431 |
-
<p class="label">Example</p>
|
1432 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1433 |
-
$vcalendar = new vcalendar( $config );
|
1434 |
-
...
|
1435 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
1436 |
-
...
|
1437 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
1438 |
-
...
|
1439 |
-
$daylight = & $vtimezone->newComponent( "daylight" );
|
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( "daylight" )</p>
|
1445 |
-
<p class="label">Example</p>
|
1446 |
-
<p class="example"></p>
|
1447 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1448 |
-
$vcalendar = new vcalendar( $config );
|
1449 |
-
...
|
1450 |
-
$vtimezone = new vtimezone();
|
1451 |
-
...
|
1452 |
-
$standard = new vtimezone( "standard" );
|
1453 |
-
...
|
1454 |
-
$vtimezone->setComponent( $standard );
|
1455 |
-
$daylight = new vtimezone( "daylight" );
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1479 |
-
$vcalendar = new vcalendar( $config );
|
1480 |
-
$vcalendar->parse();
|
1481 |
-
if( !$vcalendar->deleteProperty( "method" ))
|
1482 |
-
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( "value"=> <value> ,"params" => <parameter array>)
|
1500 |
-
</p>
|
1501 |
-
<p class="label">Example 1</p>
|
1502 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1503 |
-
$vcalendar = new vcalendar( $config );
|
1504 |
-
$vcalendar->parse();
|
1505 |
-
$calscale = $vcalendar->getProperty( "calscale" );
|
1506 |
-
.. .
|
1507 |
-
</p>
|
1508 |
-
<p class="label">Example 2</p>
|
1509 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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 "RECURRENCE-ID-UID" (alt. "R-UID" ).
|
1520 |
-
The search includes in <b>ALL</b> components within <i>calendar</i>.
|
1521 |
-
<br><br>
|
1522 |
-
Outputs an array( *[<unique-property-value> => <number of occurrence>] )<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. "CATAGORIES:course1,courseB", "LOCATION:London,Paris" or "RESOURCES:pc,developer"), 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 "YYYYMMDD",
|
1531 |
-
"RECURRENCE-ID-UID"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 |
-
"MAILTO:chair@kigkonsult.se".
|
1534 |
-
</p>
|
1535 |
-
<p class="label">Example 1</p>
|
1536 |
-
<p class="example">.. .
|
1537 |
-
$attendees = $vcalendar->getProperty( "ATTENDEE" );
|
1538 |
-
foreach( $attendees as $attendee => $occurrCount ) {
|
1539 |
-
.. .
|
1540 |
-
</p>
|
1541 |
-
<p class="label">Example 2</p>
|
1542 |
-
<p class="example">.. .
|
1543 |
-
$startDates = $vcalendar->getProperty( "DTSTART" );
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1558 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1559 |
-
$vcalendar->setProperty( "calscale", "GREGORIAN" );
|
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 "GREGORIAN", implied when missing.
|
1568 |
-
<h5>Delete CALSCALE</h5>
|
1569 |
-
Remove CALSCALE from component.
|
1570 |
-
<p class="label">Format</p>
|
1571 |
-
<p class="format">deleteProperty( "calscale" )</p>
|
1572 |
-
<p class="label">Example</p>
|
1573 |
-
<p class="example">$vcalendar->deleteProperty( "CALSCALE" );</p>
|
1574 |
-
<h5>Get Calscale</h5>
|
1575 |
-
Fetch property value.
|
1576 |
-
<p class="label">Format</p>
|
1577 |
-
<p class="format">getProperty( "calscale" )</p>
|
1578 |
-
<p class="label">Example</p>
|
1579 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1580 |
-
$vcalendar = new vcalendar( $config );
|
1581 |
-
$vcalendar->parse();
|
1582 |
-
$calscale = $vcalendar->getProperty( "calscale" );
|
1583 |
-
.. .
|
1584 |
-
</p>
|
1585 |
-
<h5>Set CALSCALE</h5>
|
1586 |
-
Insert property value.
|
1587 |
-
<p class="label">Format</p>
|
1588 |
-
<p class="format">setProperty( "calscale", string value )</p>
|
1589 |
-
<p class="label">Example</p>
|
1590 |
-
<p class="example">
|
1591 |
-
$config = array( "unique_id" => "kigkonsult.se" );
|
1592 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1593 |
-
$vcalendar->setProperty( "calscale", "GREGORIAN" );
|
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( "METHOD" )</p>
|
1611 |
-
<p class="label">Example</p>
|
1612 |
-
<p class="example">$vcalendar->deleteProperty( "METHOD" );</p>
|
1613 |
-
<h5>Get METHOD</h5>
|
1614 |
-
Fetch property value.
|
1615 |
-
<p class="label">Format</p>
|
1616 |
-
<p class="format">getProperty( "method" );</p>
|
1617 |
-
<p class="label">Example</p>
|
1618 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se");
|
1619 |
-
$vcalendar = new vcalendar( $config );
|
1620 |
-
$vcalendar->parse();
|
1621 |
-
$method = $vcalendar->getProperty( "method" )
|
1622 |
-
.. .
|
1623 |
-
</p>
|
1624 |
-
<h5>Set METHOD</h5>
|
1625 |
-
Insert property value.
|
1626 |
-
<p class="label">Format</p>
|
1627 |
-
<p class="format">setProperty( "method", string value )</p>
|
1628 |
-
<p class="label">Example</p>
|
1629 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1630 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1631 |
-
$vcalendar->setProperty( "method", "PUBLISH" )
|
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( "version" )</p>
|
1645 |
-
<p class="label">Example</p>
|
1646 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1647 |
-
$vcalendar = new vcalendar( $config );
|
1648 |
-
$vcalendar->parse();
|
1649 |
-
$version = $vcalendar->getProperty( "version" )
|
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( "version", string version )</p>
|
1657 |
-
<p class="label">Example</p>
|
1658 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1659 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1660 |
-
$vcalendar->setProperty( "version", "2.0" )
|
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 "X-" 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( "<X-PROPERTY>" )</p>
|
1676 |
-
<p class="label">Example 1</p>
|
1677 |
-
<p class="example">$vcalendar->deleteProperty( "<X-PROPERTY>" );</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( "<X-PROPERTY>" )</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( "value" => propertyData<span class="ref">2</span> )
|
1691 |
-
, "params" => params<span class="ref"> 3</span>))
|
1692 |
-
</p>
|
1693 |
-
<p class="label">Example 1</p>
|
1694 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1703 |
-
$vcalendar = new vcalendar( $config );
|
1704 |
-
$vcalendar->parse();
|
1705 |
-
if( $xprop = $vcalendar->getProperty( "X-WR-TIMEZONE" )) {
|
1706 |
-
//<span class="ref">if exists, read X-WR-TIMEZONE x-prop</span>
|
1707 |
-
.. .
|
1708 |
-
</p>
|
1709 |
-
<p class="comment">$xprop = array( "X-WR-TIMEZONE", propertyData<span class="ref">2</span> )</p>
|
1710 |
-
<p class="label">Example 3</p>
|
1711 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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( "value " => propertyData<span class="ref">2</span> )
|
1719 |
-
, "params "=> params<span class="ref"> 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 => 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 "X-" prefix
|
1727 |
-
propertyData<span class="ref">2</span> = Value type TEXT
|
1728 |
-
params<span class="ref">3</span> = array( ["LANGUAGE" => "<lang>"] [, xparam] )
|
1729 |
-
xparam = *[ xparamkey => xparamvalue ]
|
1730 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
1731 |
-
<p class="label">Example</p>
|
1732 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
1733 |
-
$vcalendar = new vcalendar( $config ); // initiate new CALENDAR
|
1734 |
-
// <span class="ref">set some X-properties.. .</span>
|
1735 |
-
$vcalendar->setProperty( "x-wr-calname", "Calendar Sample" )
|
1736 |
-
$vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" );
|
1737 |
-
$vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );
|
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. "vevent") 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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1759 |
-
$vcal = new vcalendar( $config );
|
1760 |
-
$vcal->parse();
|
1761 |
-
$vcal->deleteComponent( 1 );
|
1762 |
-
$vcal->deleteComponent( "vtodo", 2 );
|
1763 |
-
$vcal->deleteComponent( "20070803T194810CEST-0123U3PXiX@kigkonsult.se");
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1769 |
-
$vcal = new vcalendar( $config );
|
1770 |
-
$vcal->parse();
|
1771 |
-
.. .
|
1772 |
-
while( $vcal->deleteComponent( "vevent"))
|
1773 |
-
continue;
|
1774 |
-
.. .
|
1775 |
-
$vtodo = $vcal->getComponent( "vtodo" );
|
1776 |
-
while( $vtodo->deleteComponent( "valarm"))
|
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 "SUMMARY" ,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."MAILTO:chair@ical.net".
|
1812 |
-
|
1813 |
-
<p class="format">getComponent( array(*[string propertyName => string uniqueValue] ))</p>
|
1814 |
-
<p class="comment">propertyName = property name, above
|
1815 |
-
propertyData = unique property value (strict case),
|
1816 |
-
date format "YYYYMMDD" (if any side is DATE, only dates are used),
|
1817 |
-
datetime format "YYYYMMDDTHHMMSS"
|
1818 |
-
</p>
|
1819 |
-
<p class="label">Example 1</p>
|
1820 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1839 |
-
$vcalendar = new vcalendar( $config );
|
1840 |
-
$vcalendar->parse();
|
1841 |
-
if( $comp = $vcalendar->getComponent( "vtodo", 2 ) {
|
1842 |
-
.. .
|
1843 |
-
}
|
1844 |
-
.. .
|
1845 |
-
</p>
|
1846 |
-
<p class="label">Example 4</p>
|
1847 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
1848 |
-
$vcalendar = new vcalendar( $config );
|
1849 |
-
$vcalendar->parse();
|
1850 |
-
$uid = "20070803T194810CEST-0123U3PXiX@kigkonsult.se";
|
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( "unique_id" => "kigkonsult.se" );
|
1866 |
-
$vcalendar = new vcalendar( $config );
|
1867 |
-
...
|
1868 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
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 "SECONDLY" / "MINUTELY" / "HOURLY" in the "FREQ" 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 "RANGE" ("THISANDPRIOR" / "THISANDFUTURE") is NOT supported.<br>
|
1888 |
-
</ul>
|
1889 |
-
Requirement:
|
1890 |
-
<ul>
|
1891 |
-
<li><a href="#sort">sort</a> <b>MUST</b> be executed before "selectComponents", 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 |
-
"X-CURRENT-DTSTART" and opt. also "X-CURRENT-DTEND" alt. "X-CURRENT-DUE",
|
1901 |
-
has been created with a TEXT content, "Y-m-d [H:i:s][timezone/UTC offset]"
|
1902 |
-
showing the current start and opt. also end alt. due date.<br>
|
1903 |
-
Also a "X-RECURRENCE" 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 |
-
("vevent", "vtodo", "vjournal", "vfreebusy")
|
1912 |
-
FALSE (default) => all
|
1913 |
-
flat : TRUE => output : array[] (ignores split)
|
1914 |
-
component where recurrence pattern exists within period
|
1915 |
-
FALSE (default) => output : array[Year][Month][Day][]
|
1916 |
-
any : TRUE (default) => select components with recurrence pattern in period
|
1917 |
-
FALSE => only components that starts (DTSTART) within period
|
1918 |
-
split : TRUE (default) => one component copy for every day it occurs
|
1919 |
-
within the period
|
1920 |
-
FALSE => 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( "unique_id" => "kigkonsult.se",
|
1933 |
-
"directory" => "import",
|
1934 |
-
"filename" => "file.ics" );
|
1935 |
-
$vcalendar = new vcalendar( $config );
|
1936 |
-
$vcalendar->parse();
|
1937 |
-
$vcalendar->sort();
|
1938 |
-
$events_arr = $vcalendar->selectComponents( 2007,11,1,2007,11,30,"vevent");
|
1939 |
-
// <span class="comment">select all events occurring 1-30 nov. 2007</span>
|
1940 |
-
foreach( $events_arr as $year => $year_arr ) {
|
1941 |
-
foreach( $year_arr as $month => $month_arr ) {
|
1942 |
-
foreach( $month_arr as $day => $day_arr ) {
|
1943 |
-
foreach( $day_arr as $event ) {
|
1944 |
-
$currddate = $event->getProperty( "x-current-dtstart" );
|
1945 |
-
<span class="comment">// if member of a recurrence set, returns
|
1946 |
-
// array(" x-current-dtstart",
|
1947 |
-
// <(string) date("Y-m-d [H:i:s][timezone/UTC offset]")>)</span>
|
1948 |
-
$startDate = $event->getProperty( "dtstart" );
|
1949 |
-
$summary = $event->getProperty( "summary" );
|
1950 |
-
$description = $event->getProperty( "description" );
|
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 "SUMMARY" ,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. "MAILTO:chair@ical.net".
|
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 => 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( "unique_id" => "kigkonsult.se",
|
1972 |
-
"directory" => "import",
|
1973 |
-
"filename" => "file.ics" );
|
1974 |
-
$vcalendar = new vcalendar( $config );
|
1975 |
-
$vcalendar->parse();
|
1976 |
-
$vcalendar->sort();
|
1977 |
-
$searchArray = array( "PRIORITY" => 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( "unique_id" => "kigkonsult.se" ));
|
1982 |
-
$highPrioCal->setProperty( "X-WR-CALDESC", "High priority events" );
|
1983 |
-
foreach( $highPrioArr as $highPrioComponent )
|
1984 |
-
$highPrioCal->setComponent( $highPrioComponent );
|
1985 |
-
$highPrioCal->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( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
2018 |
-
$vcalendar = new vcalendar( $config );
|
2019 |
-
$vcalendar->parse();
|
2020 |
-
$vevent = vcalendar->getComponent( 1 ); //<span class="comment">fetch first EVENT</span>
|
2021 |
-
$vevent->setProperty( "dtstart" //<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 "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), are supported. A remote file, URL, <b>must</b> be prefixed by "http://" ("webcal://") 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( "filename")
|
2048 |
-
array calendarContent
|
2049 |
-
ex. result from - file( "filename", FILE_IGNORE_NEW_LINES )</p>
|
2050 |
-
<p class="label">parse example 1</p>
|
2051 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se", "filename" => "file.ics");
|
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( "unique_id" => "kigkonsult.se",
|
2059 |
-
"url" => "http://www.ical.net/calendars/calendar.ics" );
|
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( "unique_id" => "kigkonsult.se",
|
2066 |
-
"url" => "http://www.ical.net/calendars/calendar.ics" );
|
2067 |
-
$vcalendar = new vcalendar( $config );
|
2068 |
-
...
|
2069 |
-
$str = array(
|
2070 |
-
"BEGIN:VCALENDAR",
|
2071 |
-
"PRODID:-//kigkonsult.se//NONSGML kigkonsult.se iCalcreator 2.10.23//",
|
2072 |
-
"VERSION:2.0",
|
2073 |
-
"BEGIN:VEVENT",
|
2074 |
-
"DTSTART:20101224T190000Z",
|
2075 |
-
"DTEND:20101224T200000Z",
|
2076 |
-
"DTSTAMP:20101020T103827Z",
|
2077 |
-
"UID:20101020T113827-1234GkdhFR@test.org",
|
2078 |
-
"DESCRIPTION:example",
|
2079 |
-
"END:VEVENT",
|
2080 |
-
"END:VCALENDAR");
|
2081 |
-
$vcalendar->parse( $str );
|
2082 |
-
...
|
2083 |
-
</p>
|
2084 |
-
<p class="label">merge example</p>
|
2085 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se",
|
2086 |
-
"directory" => "import" );
|
2087 |
-
$vcalendar = new vcalendar( $config );
|
2088 |
-
|
2089 |
-
$vcalendar->setConfig( "filename", "file1.ics" );
|
2090 |
-
$vcalendar->parse();
|
2091 |
-
|
2092 |
-
$vcalendar->setConfig( "filename", "file2.ics" );
|
2093 |
-
$vcalendar->parse();
|
2094 |
-
|
2095 |
-
$vcalendar->sort();
|
2096 |
-
$vcalendar->setConfig( "directory", "export" );
|
2097 |
-
$vcalendar->setConfig( "filename", "icalmerge.ics" );
|
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( "YmdHis" ).".ics" </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 "Content-Encoding: gzip" set,
|
2123 |
-
FALSE: (default) no compressing</p>
|
2124 |
-
<p class="label">Example 1</p>
|
2125 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
2126 |
-
$vcalendar = new vcalendar( $config );
|
2127 |
-
.. .
|
2128 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
2129 |
-
$vevent->setProperty( "dtstart", array( "year" => 2007
|
2130 |
-
, "month" => 4
|
2131 |
-
, "day" => 1
|
2132 |
-
, "hour" => 19 ));
|
2133 |
-
$vevent->setProperty( "duration", 0, 0, 3 ));
|
2134 |
-
$vevent->setProperty( "LOCATION", "Central Plaza" );
|
2135 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
2136 |
-
.. .
|
2137 |
-
$vcalendar->returnCalendar();
|
2138 |
-
</p>
|
2139 |
-
<p class="label">Example 2</p>
|
2140 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se",
|
2141 |
-
"directory" => "import",
|
2142 |
-
"filename" => "file.ics" );
|
2143 |
-
$vcalendar = new vcalendar( $config );
|
2144 |
-
$vcalendar->parse();
|
2145 |
-
$utf8Encode = TRUE;
|
2146 |
-
$hacPar = "HTTP_ACCEPT_ENCODING";
|
2147 |
-
if( isset( $_SERVER[$hacPar] ) &&
|
2148 |
-
( FALSE !== strpos( strtolower( $_SERVER[$hacPar] ), "gzip" )))
|
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( "YmdHis" ).".ics" </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 "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), 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( "directory" => "depot",
|
2176 |
-
"filename" => "calendar.ics" ));
|
2177 |
-
$result = $vcalendar->saveCalendar();
|
2178 |
-
if( !$result )
|
2179 |
-
echo "error when saving.. ."
|
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 |
-
(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> / <a href="#VTIMEZONE">DAYLIGHT</a> / <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( "unique_id" => "kigkonsult.se",
|
2199 |
-
"directory" => "import",
|
2200 |
-
"filename" => "file.ics" );
|
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: "<a href="#ATTENDEE">ATTENDEE</a>" / "<a href="#CATEGORIES">CATEGORIES</a>" / "<a href="#DTSTAMP">DTSTAMP</a>" / "<a href="#LOCATION">LOCATION"</a>" /
|
2211 |
-
"<a href="#ORGANIZER">ORGANIZER</a>" /"<a href="#RESOURCES">RESOURCES</a>" / "<a href="#PRIORITY">PRIORITY</a>" / "<a href="#STATUS">STATUS</a>" / "<a href="#SUMMARY">SUMMARY</a>"
|
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( "directory", "depot" );
|
2233 |
-
$vcalendar->setConfig( "filename", "calendar.ics" );
|
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"> </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"> </td>
|
2268 |
-
<td class="bl bb ref"> </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"> </td>
|
2274 |
-
<td class="bl bb ref"> </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"> </td>
|
2280 |
-
<td class="bl bb ref"> </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"> </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"> </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"> </td>
|
2298 |
-
<td class="bl bb ref"> </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"> </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"> </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"> </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"> </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"> </td>
|
2328 |
-
<td class="bl bb ref"> </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( "filename" );
|
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 => mixed value
|
2348 |
-
*[, string key => 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 => mixed value *[,string key => mixed value]))</p>
|
2356 |
-
<p class="label">Example 1</p>
|
2357 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se",
|
2358 |
-
"directory" => "import",
|
2359 |
-
"filename" => "file.ics" );
|
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 => mixed value *[,string key => mixed value]))</p>
|
2365 |
-
<p class="label">Example 2</p>
|
2366 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
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 "setConfig" 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( "unique_id" => "kigkonsult.se",
|
2387 |
-
"directory" => "import",
|
2388 |
-
"filename" => "file.ics" );
|
2389 |
-
$vcalendar = new vcalendar();
|
2390 |
-
$vcalendar->setConfig( $config );
|
2391 |
-
.. .
|
2392 |
-
</p>
|
2393 |
-
<p class="label">Example 2</p>
|
2394 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
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( "directory", "depot" );
|
2404 |
-
.. .
|
2405 |
-
</p>
|
2406 |
-
<p class="label">Example 2</p>
|
2407 |
-
<p class="example">$vevent = new vevent();
|
2408 |
-
$vevent->setConfig( "unique_id", "kigkonsult.se" );
|
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 ( "ordno" => int ordno,
|
2427 |
-
// <span class="ref">order number (1st=1, 2nd=2..)</span>
|
2428 |
-
, "type" => string type
|
2429 |
-
// <span class="ref">component type (vevent, vtodo.. .</span>
|
2430 |
-
, "uid" => 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 |
-
, "props" =>
|
2433 |
-
array( *[ propertyName => Property count ])
|
2434 |
-
// <span class="ref">for every set property</span>
|
2435 |
-
, "sub" => 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( "unique_id" => "kigkonsult.se",
|
2439 |
-
"directory" => "import",
|
2440 |
-
"filename" => "file.ics" );
|
2441 |
-
$vcalendar = new vcalendar( $config );
|
2442 |
-
$vcalendar->parse();
|
2443 |
-
$compsinfo = $vcalendar->getConfig( "compsinfo" );
|
2444 |
-
foreach( $compsinfo as compinfo) {
|
2445 |
-
echo " order number : ".$compinfo["ordno"]."<br />";
|
2446 |
-
echo " type : ".$compinfo["type"]."<br />";
|
2447 |
-
echo " UID : ".$compinfo["uid"]."<br />";
|
2448 |
-
foreach( $compinfo["props"] as $propertyName => $propertyCount )
|
2449 |
-
echo " $propertyName = $propertyCount";
|
2450 |
-
if( is_array( $compinfo["sub"] )) {
|
2451 |
-
foreach( $compinfo["sub"] as $subcompinfo ) {
|
2452 |
-
echo " order number : ".$subcompinfo["ordno"]."<br />";
|
2453 |
-
/* .. dito if subcomponents exists .. . */
|
2454 |
-
}
|
2455 |
-
}
|
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 "<b>.</b>".
|
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( "fileinfo" );</p>
|
2485 |
-
<p class="comment">output = array( <directory>, <filename>, <filesize> )</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( "YmdHis" ).".ics";</p>
|
2492 |
-
<p class="format">$filename = date( "YmdHis" ).".xml"; <span class="comment"> // if <a href="#Format">format</a> set to "xcal"</span></p>
|
2493 |
-
<br>
|
2494 |
-
If not set, filename is created when requested, ex. in functions <a href="#saveCalendar">saveCalendar</a> or getConfig("filename").
|
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 "saveCalendar()"<br>
|
2507 |
-
or<br>
|
2508 |
-
- after a "setConfig( "directory" / "filename" )" and before/after "parse()".<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, "iCal"/"xCal", any case.
|
2516 |
-
<br>
|
2517 |
-
"iCal" is default (rfc2445), "xCal" 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 "setConfig( "language", .." at component level will be used, if set,
|
2527 |
-
otherwise language from "setConfig( "language", .." 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 "\r\n".
|
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["SERVER_NAME"] )
|
2552 |
-
when running in a web server environment or "localhost" 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 "http" ("webcal") is supported,
|
2566 |
-
i.e. url <b>must</b> be prefixed by "http://" ("webcal://") 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( "filename" ).
|
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( "unique_id" => "kigkonsult.se",
|
2576 |
-
"url", "http://www.iCal.net/depot/calendar.ics" );
|
2577 |
-
$vcalendar = new vcalendar( $config );
|
2578 |
-
$vcalendar->parse();
|
2579 |
-
$vcalendar->sort();
|
2580 |
-
.. .
|
2581 |
-
.. .
|
2582 |
-
$vcalendar->setConfig( "directory", "depot" );
|
2583 |
-
$vcalendar->saveCalendar(); // <span class="ref">local save in "depot" 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 "January 1 1970 00:00:00 GMT" may force a <i>PHP</i> date function to generate an error or set date to "January 1 1970".
|
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( "unique_id" => "kigkonsult.se",
|
2625 |
-
"directory" => "import",
|
2626 |
-
"filename" => "file.ics" );
|
2627 |
-
$vcalendar = new vcalendar( $config );
|
2628 |
-
$vcalendar->parse();
|
2629 |
-
$e = $vcalendar->getComponent( "vevent" );
|
2630 |
-
while( $e->deleteProperty( "comment" ))
|
2631 |
-
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("value" => <value>
|
2649 |
-
,"params"=> <parameter array>)
|
2650 |
-
</p>
|
2651 |
-
<p class="label">Example</p>
|
2652 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se",
|
2653 |
-
"directory" => "import",
|
2654 |
-
"filename" => "file.ics" );
|
2655 |
-
$vcalendar = new vcalendar( $config );
|
2656 |
-
$vcalendar->parse();
|
2657 |
-
while( $vevent = $vcalendar->getComponent( "vevent" )) {
|
2658 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="ref">one occurrence</span>
|
2659 |
-
$description = $vevent->getProperty( "description" ); // <span class="ref">one occurrence</span>
|
2660 |
-
while( $comment = $vevent->getProperty( "comment" )) {
|
2661 |
-
// <span class="ref">MAY occur more than once</span>
|
2662 |
-
.. .
|
2663 |
-
}
|
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 "BEGIN:VALARM", last as "END:VALARM"
|
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 = & $vcalendar->newComponent( "vevent" );
|
2689 |
-
$e->parse( "DTSTAMP:19970324T1200Z" );
|
2690 |
-
$e->parse( "SEQUENCE:0" );
|
2691 |
-
$e->parse( "ORGANIZER:MAILTO:jdoe@host1.com" );
|
2692 |
-
$e->parse( array(
|
2693 |
-
"ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com",
|
2694 |
-
"ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com",
|
2695 |
-
"ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com",
|
2696 |
-
"ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com" ));
|
2697 |
-
$e->parse( "DTSTART:19970324T123000Z" );
|
2698 |
-
$e->parse( "DTEND:19970324T210000Z" );
|
2699 |
-
$e->parse( "CATEGORIES:MEETING,PROJECT" );
|
2700 |
-
$e->parse( "CLASS:PUBLIC" );
|
2701 |
-
$e->parse( "SUMMARY:Calendaring Interoperability Planning Meeting" );
|
2702 |
-
$e->parse( "STATUS:DRAFT" );
|
2703 |
-
$e->parse( array(
|
2704 |
-
"DESCRIPTION:Project xyz Review Meeting Minutes"
|
2705 |
-
,"Agenda"
|
2706 |
-
,"1. Review of project version 1.0 requirements."
|
2707 |
-
,"2. Definition of project processes."
|
2708 |
-
,"3. Review of project schedule."
|
2709 |
-
,"Participants: John Smith, Jane Doe, Jim Dandy"
|
2710 |
-
,"- It was decided that the requirements need to be signed off by ".
|
2711 |
-
"product marketing."
|
2712 |
-
,"- Project processes were accepted."
|
2713 |
-
,"- Project schedule needs to account for scheduled holidays and employee".
|
2714 |
-
" vacation time. Check with HR for specific dates."
|
2715 |
-
,"- New schedule will be distributed by Friday."
|
2716 |
-
,"- Next weeks meeting is cancelled. No meeting until 3/23." ));
|
2717 |
-
$e->parse( "LOCATION:LDB Lobby" );
|
2718 |
-
$e->parse(
|
2719 |
-
"ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps" );
|
2720 |
-
$e->parse( array(
|
2721 |
-
"BEGIN:VALARM",
|
2722 |
-
"ACTION:AUDIO",
|
2723 |
-
"TRIGGER;VALUE=DATE-TIME:19970224T070000Z",
|
2724 |
-
"ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud",
|
2725 |
-
"REPEAT:4",
|
2726 |
-
"DURATION:PT1H",
|
2727 |
-
"X-alarm:non-standard ALARM property",
|
2728 |
-
"END:VALARM" ));
|
2729 |
-
$e->parse(
|
2730 |
-
"X-xomment:non-standard property will be displayed, comma escaped");
|
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 = & $vcalendar->newComponent( "vevent" );
|
2747 |
-
$vevent->setProperty( "dtstart"
|
2748 |
-
, array("year"=>2007,"month"=>4,"day"=>1,"hour"=>19));
|
2749 |
-
$vevent->setProperty( "duration", 0, 0, 3 ));
|
2750 |
-
$vevent->setProperty( "LOCATION", "Central Plaza" );
|
2751 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
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> "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE". 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( "Action" )</p>
|
2764 |
-
<p class="label">Example</p>
|
2765 |
-
<p class="example">$valarm->deleteProperty( "Action" );</p>
|
2766 |
-
<h5>Get ACTION</h5>
|
2767 |
-
Fetch property value.
|
2768 |
-
<p class="label">Format 1</p>
|
2769 |
-
<p class="format">getProperty( "Action" )</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( "Action", FALSE , TRUE )</p>
|
2773 |
-
<p class="comment">output = array( "value" => actionValue<span class="ref">1</span>
|
2774 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
2775 |
-
<p class="label">Example</p>
|
2776 |
-
<p class="example">$action = $valarm->getProperty( "action" );</p>
|
2777 |
-
<h5>Set ACTION</h5>
|
2778 |
-
Insert property value.
|
2779 |
-
<p class="label">Format</p>
|
2780 |
-
<p class="format">setProperty( "Action", actionValue [, xparam ] )</p>
|
2781 |
-
<p class="comment">actionValue<span class="ref">1</span> = one of "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE"
|
2782 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
2783 |
-
<p class="label">Example</p>
|
2784 |
-
<p class="example">$valarm->setProperty( "action", "DISPLAY" );</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 "ALARM" ("ACTION" "procedure"),
|
2792 |
-
OPTIONAL and MUST NOT occur more than once in an "ALARM" ("ACTION" "audio") 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> ("ACTION" "email") 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( "ATTACH" )</p>
|
2800 |
-
<p class="label">Example 1</p>
|
2801 |
-
<p class="example">$valarm->deleteProperty( "ATTACH" );</p>
|
2802 |
-
<p class="label">Example 2</p>
|
2803 |
-
Delete ATTACH property no 2.
|
2804 |
-
<p class="format">$valarm->deleteProperty( "ATTACH", 2 );</p>
|
2805 |
-
<p class="label">Example 3</p>
|
2806 |
-
Deleting all ATTACH properties.
|
2807 |
-
<p class="example">while( $valarm->deleteProperty( "ATTACH" ))
|
2808 |
-
continue;</p>
|
2809 |
-
<h5>Get ATTACH</h5>
|
2810 |
-
Fetch property value.
|
2811 |
-
<p class="label">Format 1</p>
|
2812 |
-
<p class="format">getProperty( "Attach" )</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( "ATTACH", propOrderNo/FALSE , TRUE )</p>
|
2816 |
-
<p class="comment">output = array( "value" => attachValue<span class="ref">1</span>
|
2817 |
-
, "params" => params<span class="ref">2</span> )</p>
|
2818 |
-
<p class="label">Format 3</p>
|
2819 |
-
<p class="format">getProperty( "Attach", propOrderNo )</p>
|
2820 |
-
<p class="comment">Get propOrderNo ATTACH</p>
|
2821 |
-
<p class="label">Example</p>
|
2822 |
-
<p class="example">$attach = $valarm->getProperty( "attach" );</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( "attach", 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( [ "ENCODING" => "BASE64", "VALUE" => "BINARY" ]
|
2831 |
-
[, "FMTTYPE" => contentType ]
|
2832 |
-
[, 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 => xparamvalue ]
|
2837 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
2838 |
-
<p class="label">Example</p>
|
2839 |
-
<p class="example">$vevent->setProperty( "attach"
|
2840 |
-
, "ftp://domain.com/pub/docs/agenda.doc"
|
2841 |
-
, array( "FMTTYPE" => "application/binary" ));
|
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 ("ACTION" "email"), 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( "ATTENDEE" )</p>
|
2856 |
-
<p class="label">Example 1</p>
|
2857 |
-
<p class="example">$valarm->deleteProperty( "ATTENDEE" );</p>
|
2858 |
-
<p class="label">Example 2</p>
|
2859 |
-
Delete ATTENDEE property no 2.
|
2860 |
-
<p class="example">$valarm->deleteProperty( "ATTENDEE", 2 );</p>
|
2861 |
-
<p class="label">Example 3</p>
|
2862 |
-
Deleting all ATTENDEE properties.
|
2863 |
-
<p class="example">while( $valarm->deleteProperty( "ATTENDEE" ))
|
2864 |
-
continue;</p>
|
2865 |
-
<h5>Get ATTENDEE</h5>
|
2866 |
-
Fetch property value.
|
2867 |
-
<p class="label">Format 1</p>
|
2868 |
-
<p class="format">getProperty( "Attendee" )</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( "ATTENDEE", propOrderNo/FALSE , TRUE )</p>
|
2872 |
-
<p class="comment">output = array( "value" => attendeeValue<span class="ref">1</span>
|
2873 |
-
, "params" => array( params<span class="ref">2</span> ))</p>
|
2874 |
-
<p class="label">Format 3</p>
|
2875 |
-
<p class="format">getProperty( "ATTENDEE", propOrderNo )</p>
|
2876 |
-
<p class="comment">Get propOrderNo ATTENDEE</p>
|
2877 |
-
<p class="label">Example</p>
|
2878 |
-
<p class="example">$attendee = $valarm->getProperty( "attendee" );</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, "mailto:" 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 "mailto:", 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( "attendee", 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" => "INDIVIDUAL"
|
2895 |
-
(An individual, <b>Default</b>)
|
2896 |
-
/ "GROUP"
|
2897 |
-
(A group of individuals)
|
2898 |
-
/ "RESOURCE"
|
2899 |
-
(A physical resource)
|
2900 |
-
/ "ROOM"
|
2901 |
-
(A room resource)
|
2902 |
-
/ "UNKNOWN"
|
2903 |
-
(Otherwise not known)
|
2904 |
-
/ x-name
|
2905 |
-
(Experimental type)
|
2906 |
-
/ iana-token
|
2907 |
-
(Other IANA registered type)
|
2908 |
-
MEMBER = "MEMBER" => array( *[ "single member
|
2909 |
-
of the group or list membership"])
|
2910 |
-
ROLE = "ROLE" => "CHAIR"
|
2911 |
-
(Indicates chair of the <i>calendar</i>
|
2912 |
-
entity)
|
2913 |
-
/ "REQ-PARTICIPANT"
|
2914 |
-
(required participation, <b>Default</b>)
|
2915 |
-
/ "OPT-PARTICIPANT"
|
2916 |
-
(optional participation)
|
2917 |
-
/ "NON-PARTICIPANT"
|
2918 |
-
(information purposes only)
|
2919 |
-
/ x-name
|
2920 |
-
(Experimental role)
|
2921 |
-
/ iana-token
|
2922 |
-
(Other IANA role)
|
2923 |
-
PARTSTAT = "PARTSTAT" => "NEEDS-ACTION"
|
2924 |
-
(Event needs action, <b>Default</b>)
|
2925 |
-
/ "ACCEPTED"
|
2926 |
-
(Event accepted)
|
2927 |
-
/ "DECLINED"
|
2928 |
-
(Event declined)
|
2929 |
-
/ "TENTATIVE"
|
2930 |
-
(Event tentatively accepted)
|
2931 |
-
/ "DELEGATED"
|
2932 |
-
(Event delegated)
|
2933 |
-
/ "NEEDS-ACTION"
|
2934 |
-
(To-do needs action, <b>Default</b>)
|
2935 |
-
/ "ACCEPTED"
|
2936 |
-
(To-do accepted)
|
2937 |
-
/ "DECLINED"
|
2938 |
-
(To-do declined)
|
2939 |
-
/ "TENTATIVE"
|
2940 |
-
(To-do tentatively accepted)
|
2941 |
-
/ "DELEGATED"
|
2942 |
-
(To-do delegated)
|
2943 |
-
/ "COMPLETED"
|
2944 |
-
(To-do completed.
|
2945 |
-
<a href="#COMPLETED">COMPLETED</a> property
|
2946 |
-
has date/time completed)
|
2947 |
-
/ "IN-PROCESS"
|
2948 |
-
(To-do in process of being completed)
|
2949 |
-
/ "NEEDS-ACTION"
|
2950 |
-
(Journal needs action, <b>Default</b>)
|
2951 |
-
/ "ACCEPTED"
|
2952 |
-
(Journal accepted)
|
2953 |
-
/ "DECLINED"
|
2954 |
-
(Journal declined)
|
2955 |
-
/ x-name
|
2956 |
-
(Experimental status)
|
2957 |
-
/ iana-token
|
2958 |
-
(Other IANA registered status)
|
2959 |
-
RSVP = "RSVP" => "TRUE"
|
2960 |
-
/ "FALSE", <b>Default</b> (reply expectation)
|
2961 |
-
DELEGATED-TO = "DELEGATED-TO" => array(*["single <i>calendar</i> user
|
2962 |
-
to specified by the property
|
2963 |
-
has delegated participation"])
|
2964 |
-
DELEGATED-FROM = "DELEGATED-FROM" => array( *[ "single <i>calendar</i> user that
|
2965 |
-
have delegated their
|
2966 |
-
participation to the
|
2967 |
-
<i>calendar</i> user specified
|
2968 |
-
by the property" ] )
|
2969 |
-
SENT-BY = "SENT-BY" => single <i>calendar</i> user that is
|
2970 |
-
acting on behalf
|
2971 |
-
of the <i>calendar</i> user
|
2972 |
-
specified by the property"
|
2973 |
-
LANGUAGE = "LANGUAGE" => language for text values in CN parameter"
|
2974 |
-
CN = "CN" => "common name to be associated with the <i>calendar</i>
|
2975 |
-
user specified by the property"
|
2976 |
-
DIR = "DIR" => "reference to a directory entry associated with
|
2977 |
-
the <i>calendar</i> user specified by the property"
|
2978 |
-
xparam = *[ xparamkey => 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( "attendee"
|
2983 |
-
, "attendee1@ical.net"
|
2984 |
-
$vevent->setProperty( "attendee"
|
2985 |
-
, "attendee2@ical.net"
|
2986 |
-
, array( "cutype" => "INDIVIDUAL"
|
2987 |
-
, "member" => array( "member1@ical.net"
|
2988 |
-
, "member2@ical.net"
|
2989 |
-
, "member3@ical.net" )
|
2990 |
-
, "role" => "CHAIR"
|
2991 |
-
, "PARTSTAT" => "ACCEPTED"
|
2992 |
-
, "RSVP" => "TRUE"
|
2993 |
-
, "DELEgated-to" => array( "part1@ical.net"
|
2994 |
-
, "part2@ical.net"
|
2995 |
-
, "part3@ical.net" )
|
2996 |
-
, "delegateD-FROM" =>array( "cio@ical.net"
|
2997 |
-
, "vice.cio@ical.net")
|
2998 |
-
, "SENT-BY" => "secretary@ical.net"
|
2999 |
-
, "LANGUAGE" => "us-EN"
|
3000 |
-
, "CN" => "John Doe"
|
3001 |
-
, "DIR" => "http://www.ical.net/info.doc"
|
3002 |
-
, "x-agenda" => "status reports" <span class="comment">// xparam</span>
|
3003 |
-
, "x-length" => "15 min" )); <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( "CATEGORIES" )</p>
|
3015 |
-
<p class="label">Example 1</p>
|
3016 |
-
<p class="example">$vevent->deleteProperty( "CATEGORIES" );</p>
|
3017 |
-
<p class="label">Example 2</p>
|
3018 |
-
Delete CATEGORIES property no 2.
|
3019 |
-
<p class="example">$vevent->deleteProperty( "CATEGORIES", 2 );</p>
|
3020 |
-
<p class="label">Example 3</p>
|
3021 |
-
Deleting all CATEGORIES properties.
|
3022 |
-
<p class="example">while( $vevent->deleteProperty( "CATEGORIES" ))
|
3023 |
-
continue;</p>
|
3024 |
-
<h5>Get CATEGORIES</h5>
|
3025 |
-
Fetch property value.
|
3026 |
-
<p class="label">Format 1</p>
|
3027 |
-
<p class="format">getProperty( "CATEGORIES" )</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( "CATEGORIES", propOrderNo/FALSE , TRUE )</p>
|
3031 |
-
<p class="comment">output = array( "value" => categories<span class="ref">1</span>
|
3032 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3033 |
-
<p class="label">Format 3</p>
|
3034 |
-
<p class="format">getProperty( "CATEGORIES", propOrderNo )</p>
|
3035 |
-
<p class="comment">Get propOrderNo CATEGORIES</p>
|
3036 |
-
<p class="label">Example</p>
|
3037 |
-
<p class="example">$categories = $valarm->getProperty( "categories" );</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( "categories", 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( ["LANGUAGE" => "<lang>"][, xparam] )
|
3049 |
-
xparam<span class="ref"> </span> = *[ xparamkey => 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( "categories", "project_x" );</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( "CLASS" )</p>
|
3064 |
-
<p class="label">Example</p>
|
3065 |
-
<p class="example">$vjournal->deleteProperty( "CLASS" );</p>
|
3066 |
-
<h5>Get CLASS</h5>
|
3067 |
-
Fetch property value.
|
3068 |
-
<p class="label">Format 1</p>
|
3069 |
-
<p class="format">getProperty( "CLASS" )</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( "CLASS", FALSE , TRUE )</p>
|
3073 |
-
<p class="comment">output = array "value" => classValue<span class="ref">1</span>
|
3074 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3075 |
-
<p class="label">Example</p>
|
3076 |
-
<p class="example">$class = $valarm->getProperty( "class" );</p>
|
3077 |
-
<h5>Set CLASS</h5>
|
3078 |
-
Insert property value.
|
3079 |
-
<p class="label">Format</p>
|
3080 |
-
<p class="format">setProperty( "class", string classvalue [, xparam ] )</p>
|
3081 |
-
<p class="comment">classvalue<span class="ref">1</span> = "PUBLIC"
|
3082 |
-
/ "PRIVATE"
|
3083 |
-
/ "CONFIDENTIAL"
|
3084 |
-
/ iana-token
|
3085 |
-
/ x-name
|
3086 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3087 |
-
<p class="label">Example</p>
|
3088 |
-
<p class="example">$vevent->setProperty( "class", "CONFIDENTIAL" );</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( "COMMENT" )</p>
|
3100 |
-
<p class="label">Example 1</p>
|
3101 |
-
<p class="example">$vevent->deleteProperty( "COMMENT" );</p>
|
3102 |
-
<p class="label">Example 2</p>
|
3103 |
-
Delete COMMENT property no 2.
|
3104 |
-
<p class="example">$vevent->deleteProperty( "COMMENT", 2 );</p>
|
3105 |
-
<p class="label">Example 3</p>
|
3106 |
-
Deleting all COMMENT properties.
|
3107 |
-
<p class="example">while( $vevent->deleteProperty( "COMMENT" ))
|
3108 |
-
continue;</p>
|
3109 |
-
<h5>Get COMMENT</h5>
|
3110 |
-
Fetch property value.
|
3111 |
-
<p class="label">Format 1</p>
|
3112 |
-
<p class="format">getProperty( "COMMENT" )</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( "COMMENT", propOrderNo/FALSE , TRUE )</p>
|
3116 |
-
<p class="comment">output = array( "value" => commentValue<span class="ref">1</span>
|
3117 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3118 |
-
<p class="label">Format 3</p>
|
3119 |
-
<p class="format">getProperty( "COMMENT", propOrderNo )</p>
|
3120 |
-
<p class="comment">Get propOrderNo COMMENT</p>
|
3121 |
-
<p class="label">Example</p>
|
3122 |
-
<p class="example">$comment = $vevent->getProperty( "comment" );</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( "comment", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
3131 |
-
[, "LANGUAGE" => "<lang>"]
|
3132 |
-
[, xparam ] )
|
3133 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3134 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3135 |
-
<p class="label">Example</p>
|
3136 |
-
<p class="example">$vevent->setProperty( "comment", "this is a comment" );</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( "COMPLETED" )</p>
|
3148 |
-
<p class="label">Example</p>
|
3149 |
-
<p class="example">$vtodo->deleteProperty( "COMPLETED" );</p>
|
3150 |
-
<h5>Get COMPLETED</h5>
|
3151 |
-
Fetch property value.
|
3152 |
-
<p class="label">Format 1</p>
|
3153 |
-
<p class="format">getProperty( "COMPLETED" )</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( "COMPLETED", FALSE , TRUE )</p>
|
3157 |
-
<p class="comment">output = array( "value" => completedDate<span class="ref">1</span>
|
3158 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3159 |
-
<p class="label">Example</p>
|
3160 |
-
<p class="example">$completed = $vtodo->getProperty( "completed" );</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 "offset" 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( "completed", completedDate [, xparam ] )</p>
|
3167 |
-
<p class="comment">completedDate<span class="ref">1</span> = array( "year" => int year
|
3168 |
-
, "month" => int month
|
3169 |
-
, "day" => int day
|
3170 |
-
[, "hour" => int hour
|
3171 |
-
, "min" => int min
|
3172 |
-
, "sec" => int sec
|
3173 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset])
|
3188 |
-
completedDate = string datestring // <span class="ref">string date,
|
3189 |
-
acceptable by strtotime function,
|
3190 |
-
ex. "14 august 2006 16.00.00"
|
3191 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3192 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3193 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3194 |
-
<p class="label">Example 1</p>
|
3195 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se");
|
3196 |
-
$vcalendar = new vcalendar( $config );
|
3197 |
-
$vtodo = & $vcalendar->newComponent( "vtodo" );
|
3198 |
-
.. .
|
3199 |
-
$vtodo->setProperty( "completed", 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("year" => 2006, "month" => 10, "day" => 10,
|
3203 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3204 |
-
// <span class="ref">local date + UTC offset => <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
|
3205 |
-
$vtodo->setProperty( "completed", $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( "CONTACT" )</p>
|
3217 |
-
<p class="label">Example 1</p>
|
3218 |
-
<p class="example">$vevent->deleteProperty( "CONTACT" );</p>
|
3219 |
-
<p class="label">Example 2</p>
|
3220 |
-
Delete CONTACT property no 2.
|
3221 |
-
<p class="example">$vevent->deleteProperty( "CONTACT", 2 );</p>
|
3222 |
-
<p class="label">Example 3</p>
|
3223 |
-
Deleting all CONTACT properties.
|
3224 |
-
<p class="example">while( $vevent->deleteProperty( "CONTACT" ))
|
3225 |
-
continue;</p>
|
3226 |
-
<h5>Get CONTACT</h5>
|
3227 |
-
Fetch property value.
|
3228 |
-
<p class="label">Format 1</p>
|
3229 |
-
<p class="format">getProperty( "CONTACT" )</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( "CONTACT", propOrderNo/FALSE , TRUE )</p>
|
3233 |
-
<p class="comment">output = array( "value" => contactValue<span class="ref">1</span>
|
3234 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3235 |
-
<p class="label">Format 3</p>
|
3236 |
-
<p class="format">getProperty( "CONTACT", propOrderNo )</p>
|
3237 |
-
<p class="comment">Get propOrderNo CONTACT</p>
|
3238 |
-
<p class="label">Example</p>
|
3239 |
-
<p class="example">$contact = $vevent->getProperty( "contact" );</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( "contact", 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 ( ["ALTREP" => "<an alternate text representation, URI>"]
|
3248 |
-
[, "LANGUAGE" => "<lang>"]
|
3249 |
-
[, xparam] )
|
3250 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3251 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3252 |
-
<p class="label">Example</p>
|
3253 |
-
<p class="example">$c->setProperty( "contact", "tel 012-34 56 789" )</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( "CREATED" )</p>
|
3265 |
-
<p class="label">Example</p>
|
3266 |
-
<p class="example">$vevent->deleteProperty( "CREATED" );</p>
|
3267 |
-
<h5>Get CREATED</h5>
|
3268 |
-
Fetch property value.
|
3269 |
-
<p class="label">Format 1</p>
|
3270 |
-
<p class="format">getProperty( "CREATED" )</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( "CREATED", FALSE , TRUE )</p>
|
3274 |
-
<p class="comment">output = array( "value" => createdDate<span class="ref">1</span>
|
3275 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3276 |
-
<p class="label">Example</p>
|
3277 |
-
<p class="example">$created = $vevent->getProperty( "CREATED" );</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 "offset" 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( "created", [ createdDate [, xparam ]] )</p>
|
3284 |
-
<p class="comment">createdDate<span class="ref">1</span> = array( "year" => int year
|
3285 |
-
, "month" => int month
|
3286 |
-
, "day" => int day
|
3287 |
-
[, "hour" => int hour
|
3288 |
-
, "min" => int min
|
3289 |
-
, "sec" => int sec
|
3290 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset ])
|
3305 |
-
createdDate = string datestring // <span class="ref">string date,
|
3306 |
-
acceptable by strtotime function,
|
3307 |
-
ex. "14 august 2006 16.00.00"
|
3308 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3309 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3310 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3311 |
-
<p class="label">Example 1</p>
|
3312 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
3313 |
-
$vcalendar = new vcalendar( $config );
|
3314 |
-
$vtodo = & $vcalendar->newComponent( "vtodo" );
|
3315 |
-
.. .
|
3316 |
-
$vtodo->setProperty( "created", 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("year" => 2006, "month" => 10, "day" => 10,
|
3320 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3321 |
-
// <span class="ref">local date + UTC offset => <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
3322 |
-
$vtodo->setProperty( "created", $date );
|
3323 |
-
.. .</p>
|
3324 |
-
<p class="label">Example 3</p>
|
3325 |
-
<p class="example">$vevent->setProperty( "created" );
|
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( "DESCRIPTION" )</p>
|
3338 |
-
<p class="label">Example 1</p>
|
3339 |
-
<p class="example">$vevent->deleteProperty( "DESCRIPTION" );</p>
|
3340 |
-
<p class="label">Example 2</p>
|
3341 |
-
Delete DESCRIPTION property no 2.
|
3342 |
-
<p class="example">$vjournal->deleteProperty( "DESCRIPTION", 2 );</p>
|
3343 |
-
<p class="label">Example 3</p>
|
3344 |
-
Deleting all DESCRIPTION properties.
|
3345 |
-
<p class="example">while( $vjournal->deleteProperty( "DESCRIPTION" ))
|
3346 |
-
continue;</p>
|
3347 |
-
<h5>Get DESCRIPTION</h5>
|
3348 |
-
Fetch property value.
|
3349 |
-
<p class="label">Format 1</p>
|
3350 |
-
<p class="format">getProperty( "DESCRIPTION" )</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( "DESCRIPTION", FALSE , TRUE )</p>
|
3354 |
-
<p class="comment">output = array( "value" => descriptionValue<span class="ref">1</span>
|
3355 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3356 |
-
<p class="label">Example</p>
|
3357 |
-
<p class="example">$description = $vevent->getProperty( "description" );</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( "description", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
3366 |
-
[, "LANGUAGE" => "<lang>"]
|
3367 |
-
[, xparam] )
|
3368 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3369 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3370 |
-
<p class="label">Example</p>
|
3371 |
-
<p class="example">$vevent->setProperty( "description", "This is a description" );</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 "all-day event" 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( "DTEND" )</p>
|
3388 |
-
<p class="label">Example</p>
|
3389 |
-
<p class="example">$vevent->deleteProperty( "DTEND" );</p>
|
3390 |
-
<h5>Get DTEND</h5>
|
3391 |
-
Fetch property value.
|
3392 |
-
<p class="label">Format 1</p>
|
3393 |
-
<p class="format">getProperty( "DTEND" )</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( "DTEND", FALSE , TRUE )</p>
|
3397 |
-
<p class="comment">output = array( "value" => dtendDate<span class="ref">1</span>
|
3398 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3399 |
-
<p class="label">Example</p>
|
3400 |
-
<p class="example">$dtend = $vevent->getProperty( "dtend" );</p>
|
3401 |
-
<h5>Set DTEND</h5>
|
3402 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "dtend", dtendDate [, params<span class="ref">2</span> ] )
|
3414 |
-
<p class="comment">dtendDate<span class="ref">1</span> = array ( "year" => int year
|
3415 |
-
, "month" => int month
|
3416 |
-
, "day" => int day
|
3417 |
-
[, "hour" => int hour
|
3418 |
-
, "min" => int min
|
3419 |
-
, "sec" => int sec
|
3420 |
-
[, "tz" => 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( "timestamp" => int timestamp [,"tz" => mixed tz])
|
3436 |
-
dtendDate = string datestring // <span class="ref">string date,
|
3437 |
-
acceptable by strtotime function,
|
3438 |
-
ex. "14 august 2006 16.00.00"
|
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 = <timezone identifier> / UTC offset
|
3443 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3444 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3445 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[,xparams])
|
3446 |
-
tzidparam = "TZID" => <timezone identifier>
|
3447 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3448 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3449 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, ex. all-day event</span>
|
3450 |
-
xparams = xparamkey => xparamvalue</p>
|
3451 |
-
<p class="label">Example 1</p>
|
3452 |
-
<p class="example">$vevent->setProperty( "dtend"
|
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( "dtend"
|
3457 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
3458 |
-
<span class="ref">// 11 august 2006 16.30.00 -040000 :
|
3459 |
-
local date + UTC offset => <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( "dtend"
|
3462 |
-
, array( "year" =>, 2006, "month" => 8, "day"=> 11 )
|
3463 |
-
, array( "VALUE" => "DATE" ));
|
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( "DTSTAMP" )</p>
|
3481 |
-
<p class="label">Example</p>
|
3482 |
-
<p class="example">$vevent->deleteProperty( "DTSTAMP" );</p>
|
3483 |
-
<h5>Get DTSTAMP</h5>
|
3484 |
-
Fetch property value.
|
3485 |
-
<p class="label">Format 1</p>
|
3486 |
-
<p class="format">getProperty( "DTSTAMP" )</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( "DTSTAMP", FALSE , TRUE )</p>
|
3490 |
-
<p class="comment">output = array( "value" => dtstampDate<span class="ref">1</span>
|
3491 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3492 |
-
<p class="label">Example</p>
|
3493 |
-
<p class="example">$dtstamp = $vevent->getProperty( "dtstamp" );</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 "offset" 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( "dtstamp", dtstampDate [, xparam ] )</p>
|
3500 |
-
<p class="comment">dtstampDate<span class="ref">1</span> = array( "year" => int year
|
3501 |
-
, "month" => int month
|
3502 |
-
, "day" => int day
|
3503 |
-
[, "hour" => int hour
|
3504 |
-
, "min" => int min
|
3505 |
-
, "sec" => int sec
|
3506 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset ])
|
3521 |
-
dtstampDate = string datestring // <span class="ref">string date,
|
3522 |
-
acceptable by strtotime function,
|
3523 |
-
ex. "14 august 2006 16.00.00"
|
3524 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3525 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3526 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3527 |
-
<p class="label">Example 1</p>
|
3528 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
3529 |
-
$vcalendar = new vcalendar( $config );
|
3530 |
-
$vtodo = & $vcalendar->newComponent( "vtodo" );
|
3531 |
-
.. .
|
3532 |
-
$vtodo->setProperty( "dstamp"
|
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("year" => 2006, "month" => 10, "day" => 10,
|
3537 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3538 |
-
// <span class="ref">local date + UTC offset => <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
3539 |
-
$vtodo->setProperty( "dtstamp", $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 "all-day event" 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( "DTSTART" )</p>
|
3556 |
-
<p class="label">Example</p>
|
3557 |
-
<p class="example">$vevent->deleteProperty( "DTSTART" );</p>
|
3558 |
-
<h5>Get DTSTART</h5>
|
3559 |
-
Fetch property value.
|
3560 |
-
<p class="label">Format 1</p>
|
3561 |
-
<p class="format">getProperty( "DTSTART" )</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( "DTSTART", FALSE , TRUE )</p>
|
3565 |
-
<p class="comment">output = array( "value" => dtstartDate<span class="ref">1</span>
|
3566 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3567 |
-
<p class="label">Example</p>
|
3568 |
-
<p class="example">$dtstart = $vevent->getProperty( "dtstart" );</p>
|
3569 |
-
<h5>Set DTSTART</h5>
|
3570 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "dtstart", dtstartDate [, params ] )</p>
|
3581 |
-
<p class="comment">dtstartDate<span class="ref">1</span> = array( "year" => int year
|
3582 |
-
, "month" => int month
|
3583 |
-
, "day" => int day
|
3584 |
-
[, "hour" => int hour
|
3585 |
-
, "min" => int min
|
3586 |
-
, "sec" => int sec
|
3587 |
-
[, "tz" => 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("timestamp" => int timestamp [, "tz" => mixed tz])
|
3603 |
-
dtstartDate = string datestring // <span class="ref">string date,
|
3604 |
-
acceptable by strtotime function,
|
3605 |
-
ex. "14 august 2006 16.00.00"
|
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 = <timezone identifier> / offset
|
3610 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3611 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3612 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
|
3613 |
-
tzidparam = "TZID" => <timezone identifier>
|
3614 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3615 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3616 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, ex. all-day event</span>
|
3617 |
-
xparams = xparamkey => xparamvalue</p>
|
3618 |
-
<p class="label">Example 1</p>
|
3619 |
-
<p class="example">$vevent->setProperty( "dstart"
|
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( "dstart"
|
3624 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
3625 |
-
<span class="comment">// 11 august 2006 16.30.00 -040000,
|
3626 |
-
// local date + UTC offset => <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( "dtstart"
|
3629 |
-
, array( "year" =>, 2006, "month" => 8, "day"=> 11 )
|
3630 |
-
, array( "VALUE" => "DATE" ));
|
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( "DUE" )</p>
|
3644 |
-
<p class="label">Example</p>
|
3645 |
-
<p class="example">$vtodo->deleteProperty( "DUE" );</p>
|
3646 |
-
<h5>Get DUE</h5>
|
3647 |
-
Fetch property value.
|
3648 |
-
<p class="label">Format 1</p>
|
3649 |
-
<p class="format">getProperty( "DUE" )</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( "DUE", FALSE , TRUE )</p>
|
3653 |
-
<p class="comment">output = array( "value" => dueDate<span class="ref">1</span>
|
3654 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3655 |
-
<p class="label">Example</p>
|
3656 |
-
<p class="example">$due = $vtodo->getProperty( "due" );</p>
|
3657 |
-
<h5>Set DUE</h5>
|
3658 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "due", dueDate [, params ] )</p>
|
3670 |
-
<p class="comment">dueDate<span class="ref">1</span> = array( "year" => int year
|
3671 |
-
, "month" => int month
|
3672 |
-
, "day" => int day
|
3673 |
-
[, "hour" => int hour
|
3674 |
-
, "min" => int min
|
3675 |
-
, "sec" => int sec
|
3676 |
-
[, "tz" => 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( "timestamp" => int timestamp [, "tz" => mixed tz])
|
3692 |
-
dueDate = string datestring // <span class="ref">string date,
|
3693 |
-
acceptable by strtotime function,
|
3694 |
-
ex. "14 august 2006 16.00.00"
|
3695 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3696 |
-
tz = <timezone identifier> / offset
|
3697 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3698 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3699 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
|
3700 |
-
tzidparam = "TZID" => <timezone identifier>
|
3701 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3702 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3703 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, "during the day"</span>
|
3704 |
-
xparams = xparamkey => xparamvalue</p>
|
3705 |
-
<p class="label">Example 1</p>
|
3706 |
-
<p class="example">$vtodo->setProperty( "due"
|
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( "due"
|
3711 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
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( "due"
|
3716 |
-
, array( "year" =>, 2006, "month" => 8, "day"=> 11 )
|
3717 |
-
, array( "VALUE" => "DATE" ));
|
3718 |
-
<span class="comment">// due "during the day"</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( "DURATION" )</p>
|
3733 |
-
<p class="label">Example</p>
|
3734 |
-
<p class="example">$valarm->deleteProperty( "DURATION" );</p>
|
3735 |
-
<h5>Get DURATION</h5>
|
3736 |
-
Fetch property value.
|
3737 |
-
<p class="label">Format 1</p>
|
3738 |
-
<p class="format">getProperty( "DURATION" )</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( "DURATION", FALSE , TRUE )</p>
|
3742 |
-
<p class="comment">output = array( "value" => duration<span class="ref">1</span>
|
3743 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3744 |
-
<p class="label">Example</p>
|
3745 |
-
<p class="example">$duration = $vtodo->getProperty( "duration" );</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( "duration", duration [, xparam ] )</p>
|
3754 |
-
<p class="comment">
|
3755 |
-
duration<span class="ref">1</span> = array ( "week" => int week )
|
3756 |
-
duration<span class="ref">1</span> = array ( "day" => int day )
|
3757 |
-
[, "hour" => int hour
|
3758 |
-
, "min" => int min
|
3759 |
-
, "sec" => int sec ])
|
3760 |
-
duration = array ( "sec" => 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 = ["+"] "P" (dur-date/dur-time/dur-week)
|
3772 |
-
dur-date = dur-day [dur-time]
|
3773 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
3774 |
-
dur-week = 1*DIGIT "W"
|
3775 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
3776 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
3777 |
-
dur-second = 1*DIGIT "S"
|
3778 |
-
dur-day = 1*DIGIT "D"
|
3779 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3780 |
-
<p class="label">Example 1</p>
|
3781 |
-
<p class="example">$vtodo->setProperty "duration"
|
3782 |
-
, array( "day" => 1 )); </p>
|
3783 |
-
<p class="ref">// one day</p>
|
3784 |
-
<p class="label">Example 2</p>
|
3785 |
-
<p class="example">$vtodo->setProperty( "duration"
|
3786 |
-
, "PT4H" );
|
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( "EXDATE" )</p>
|
3799 |
-
<p class="label">Example 1</p>
|
3800 |
-
<p class="example">$vtodo->deleteProperty( "EXDATE" );</p>
|
3801 |
-
<p class="label">Example 2</p>
|
3802 |
-
Delete EXDATE property no 2.
|
3803 |
-
<p class="example">$vjournal->deleteProperty( "EXDATE", 2 );</p>
|
3804 |
-
<p class="label">Example 3</p>
|
3805 |
-
Deleting all EXDATE properties.
|
3806 |
-
<p class="example">while( $vjournal->deleteProperty( "EXDATE" ))
|
3807 |
-
continue;</p>
|
3808 |
-
<h5>Get EXDATE</h5>
|
3809 |
-
Fetch property value.
|
3810 |
-
<p class="label">Format 1</p>
|
3811 |
-
<p class="format">getProperty( "EXDATE" )<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( "exdate", propOrderNo/FALSE, TRUE )</p>
|
3815 |
-
<p class="comment">output = array( "value" => exdates<span class="ref">1</span>
|
3816 |
-
, "params" => xparams<span class="ref">2</span> )</p>
|
3817 |
-
<p class="label">Format 3</p>
|
3818 |
-
<p class="format">getProperty( "EXDATE", propOrderNo )</p>
|
3819 |
-
<p class="comment">Get propOrderNo EXDATE</p>
|
3820 |
-
<p class="label">Example</p>
|
3821 |
-
<p class="example">$exdate = $vtodo->getProperty( "exdate" );</p>
|
3822 |
-
<h5>Set EXDATE</h5>
|
3823 |
-
Insert property value.<br>
|
3824 |
-
If "TZID" is set in params, ex. "TZID" = "CET",
|
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 ("VALUE" = "DATE"), all timezone or offset in dates are ignored.<br>
|
3827 |
-
If no "VALUE" 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 "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" 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( "exdate", 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( "year" => int year
|
3846 |
-
, "month" => int month
|
3847 |
-
, "day" => int day
|
3848 |
-
[, "hour" => int hour
|
3849 |
-
, "min" => int min
|
3850 |
-
, "sec" => int sec
|
3851 |
-
[, "tz" => mixed tz ]] )
|
3852 |
-
date = array( "timestamp" => int timestamp [, "tz" => mixed tz])
|
3853 |
-
date = string datestring // <span class="ref">string date,
|
3854 |
-
acceptable by strtotime function,
|
3855 |
-
ex. "14 august 2006 16.00.00"
|
3856 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3857 |
-
tz = <timezone identifier> / offset
|
3858 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3859 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3860 |
-
params<span class="ref">2</span> = array([(datetimeparam/dateparam) / tzidparam] [,xparam])
|
3861 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3862 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
3863 |
-
tzidparam = "TZID" => <timezone identifier>
|
3864 |
-
xparams = *[ xparamkey => xparamvalue ]
|
3865 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3866 |
-
<p class="label">Example 1</p>
|
3867 |
-
<p class="example">$vevent->setProperty( "exdate"
|
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( "exdate"
|
3872 |
-
, array( array("year" =>,2006,"month" => 8,"day"=> 11))
|
3873 |
-
, array( "VALUE" => "DATE" ));
|
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( "EXRULE" )</p>
|
3885 |
-
<p class="label">Example 1</p>
|
3886 |
-
<p class="example">$vtodo->deleteProperty( "EXRULE" );</p>
|
3887 |
-
<p class="label">Example 2</p>
|
3888 |
-
Delete EXRULE property no 2.
|
3889 |
-
<p class="example">$vjournal->deleteProperty( "EXRULE", 2 );</p>
|
3890 |
-
<p class="label">Example 3</p>
|
3891 |
-
Deleting all EXRULE properties.
|
3892 |
-
<p class="example">while( $vjournal->deleteProperty( "EXRULE" ))
|
3893 |
-
continue;</p>
|
3894 |
-
<h5>Get EXRULE</h5>
|
3895 |
-
Fetch property value.
|
3896 |
-
<p class="label">Format 1</p>
|
3897 |
-
<p class="format">getProperty( "EXRULE" )</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( "exrule", propOrderNo/FALSE, TRUE )</p>
|
3901 |
-
<p class="comment">output = array( "value" => recur<span class="ref">1</span>
|
3902 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3903 |
-
<p class="label">Format 3</p>
|
3904 |
-
<p class="format">getProperty( "EXRULE", propOrderNo )</p>
|
3905 |
-
<p class="comment">Get propOrderNo EXRULE</p>
|
3906 |
-
<p class="label">Example</p>
|
3907 |
-
<p class="example">$exrule = $vtodo->getProperty( "exrule" );</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( "exrule", 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"=>freq
|
3917 |
-
// <span class="ref">either UNTIL or COUNT may appear in a "recur",
|
3918 |
-
but UNTIL and COUNT MUST NOT occur in the same "recur"</span>
|
3919 |
-
[, "UNTIL" "=>" >enddate ]
|
3920 |
-
[, "COUNT" "=>" 1*DIGIT ]
|
3921 |
-
// <span class="ref">the rest of these keywords are optional,
|
3922 |
-
but MUST NOT occur more than once</span>
|
3923 |
-
[, "INTERVAL" "=>" 1*DIGIT ]
|
3924 |
-
[, "BYSECOND" "=>" byseclist ]
|
3925 |
-
[, "BYMINUTE" "=>" byminlist ]
|
3926 |
-
[, "BYHOUR" "=>" byhrlist ]
|
3927 |
-
[, "BYDAY" "=>" bywdaylist ]
|
3928 |
-
[, "BYMONTHDAY" "=>" bymodaylist ]
|
3929 |
-
[, "BYYEARDAY" "=>" byyrdaylist ]
|
3930 |
-
[, "BYWEEKNO" "=>" bywknolist ]
|
3931 |
-
[, "BYMONTH" "=>" bymolist ]
|
3932 |
-
[, "BYSETPOS" "=>" bysplist ]
|
3933 |
-
[, "WKST" "=>" weekday ]
|
3934 |
-
[, x-name "=>" text ] )
|
3935 |
-
freq = "SECONDLY" /
|
3936 |
-
"MINUTELY" /
|
3937 |
-
"HOURLY" /
|
3938 |
-
"DAILY" /
|
3939 |
-
"WEEKLY" /
|
3940 |
-
"MONTHLY" /
|
3941 |
-
"YEARLY"
|
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)], "DAY" => weekday )
|
3956 |
-
plus = "+"
|
3957 |
-
minus = "-"
|
3958 |
-
ordwk = 1DIGIT / 2DIGIT ;1 to 53
|
3959 |
-
weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA"
|
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 => xparamvalue ] )
|
3982 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3983 |
-
<p class="label">Example</p>
|
3984 |
-
<p class="example">$vevent->setProperty( "Exrule"
|
3985 |
-
, array( "FREQ" => "MONTHLY"
|
3986 |
-
, "UNTIL" => "20060831"
|
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 |
-
, "INTERVAL" => 2
|
3989 |
-
, "WKST" => "SU"
|
3990 |
-
, "BYSECOND" => 2
|
3991 |
-
, "BYMINUTE" => array( 2, -4, 6 ) // (*)
|
3992 |
-
, "BYHOUR" => array( 2, 4, -6 ) // (*)
|
3993 |
-
, "BYMONTHDAY" => -2 // (*)
|
3994 |
-
, "BYYEARDAY" => 2 // (*)
|
3995 |
-
, "BYWEEKNO" => array( 2, -4, 6 ) // (*)
|
3996 |
-
, "BYMONTH" => 2 // (*)
|
3997 |
-
, "BYSETPOS" => array( 2, -4, 6 ) // (*)
|
3998 |
-
, "BYday" => array( array(-2, "DAY" => "WE" )
|
3999 |
-
, array( 3, "DAY" => "TH")
|
4000 |
-
, array( 5, "DAY" => "FR")
|
4001 |
-
, array( "DAY" => "MO"))
|
4002 |
-
// (**)
|
4003 |
-
, "X-NAME" => "x-value" )
|
4004 |
-
, array( "xparamkey" => "xparamValue" ));
|
4005 |
-
|
4006 |
-
$vtodo->setProperty( >"exrule"
|
4007 |
-
, array( "FREQ" => "WEEKLY"
|
4008 |
-
, "COUNT" => 2
|
4009 |
-
, "INTERVAL" => 2
|
4010 |
-
, "WKST" => "SU"
|
4011 |
-
, "BYSECOND" => array( -2, 4, 6 ) // (*)
|
4012 |
-
, "BYMINUTE" => -2 // (*)
|
4013 |
-
, "BYHOUR" => 2 // (*)
|
4014 |
-
, "BYMONTHDAY" => array( 2, -4, 6 ) // (*)
|
4015 |
-
, "BYYEARDAY" => array( -2, 4, 6 ) // (*)
|
4016 |
-
, "BYWEEKNO" => -2 // (*)
|
4017 |
-
, "BYMONTH" => array( 2, 4, -6 ) // (*)
|
4018 |
-
, "BYSETPOS" => -2 // (*)
|
4019 |
-
, "BYday" => array( 5, "DAY" => "WE" )
|
4020 |
-
// (**)
|
4021 |
-
, "X-NAME" => "x-value" )
|
4022 |
-
, array( "xparamkey" => "xparamValue" ));
|
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( "FREEBUSY" )</p>
|
4037 |
-
<p class="label">Example 1</p>
|
4038 |
-
<p class="example">$vfreebusy->deleteProperty( "FREEBUSY" );</p>
|
4039 |
-
<p class="label">Example 2</p>
|
4040 |
-
Delete FREEBUSY property no 2.
|
4041 |
-
<p class="example">$vfreebusy->deleteProperty( "FREEBUSY", 2 );</p>
|
4042 |
-
<p class="label">Example 3</p>
|
4043 |
-
Deleting all FREEBUSY properties.
|
4044 |
-
<p class="example">while( $vfreebusy->deleteProperty( "FREEBUSY" ))
|
4045 |
-
continue;</p>
|
4046 |
-
<h5>Get FREEBUSY</h5>
|
4047 |
-
Fetch property value.
|
4048 |
-
<p class="label">Format 1</p>
|
4049 |
-
<p class="format">getProperty( "FREEBUSY" )</p>
|
4050 |
-
<p class="comment">output = array( "fbtyp" => 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( "FREEBUSY", propOrderNo/FALSE , TRUE )</p>
|
4053 |
-
<p class="comment">output = array( "value" => array("fbtype" => freebusytype<span class="ref">1</span> ,periods<span class="ref">2</span>)
|
4054 |
-
, "params" => xparams<span class="ref"> 3</span> )</p>
|
4055 |
-
<p class="label">Format 3</p>
|
4056 |
-
<p class="format">getProperty( "FREEBUSY", propOrderNo )</p>
|
4057 |
-
<p class="comment">Get propOrderNo FREEBUSY</p>
|
4058 |
-
<p class="label">Example</p>
|
4059 |
-
<p class="example">$freebusy = $vfreebusy->getProperty( "FREEBUSY" );</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( "freebusy",freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
|
4064 |
-
<p class="comment">freebusytype<span class="ref">1</span> = one of "FREE"
|
4065 |
-
/ "BUSY" <b>Default</b>
|
4066 |
-
/ "BUSY-UNAVAILABLE"
|
4067 |
-
/ "BUSY-TENTATIVE"
|
4068 |
-
/ x-name
|
4069 |
-
fbperiods = array( periods<span class="ref">2</span> )
|
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( "year" => int year
|
4079 |
-
, "month" => int month
|
4080 |
-
, "day" => int day
|
4081 |
-
, "hour" => int hour
|
4082 |
-
, "min" => int min
|
4083 |
-
, "sec" => int sec ) // <span class="ref">output format</span>
|
4084 |
-
startdate/enddate = array( "timestamp" => int timestamp )
|
4085 |
-
startdate/enddate = string datestring // <span class="ref">string date,
|
4086 |
-
acceptable by strtotime function,
|
4087 |
-
ex. "14 august 2006 16.00.00"
|
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( "week" => int week/false
|
4096 |
-
[, "day" => int day/false
|
4097 |
-
[, "hour" => int hour
|
4098 |
-
, "min" => int min
|
4099 |
-
, "sec" => int sec ]] ); // <span class="ref">output format</span>
|
4100 |
-
duration = array( "sec" => int sec )
|
4101 |
-
duration = string dur-value
|
4102 |
-
= (["+"]/"-") "P" (dur-date/dur-time/dur-week)
|
4103 |
-
dur-date = dur-day [dur-time]
|
4104 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
4105 |
-
dur-week = 1*DIGIT "W"
|
4106 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
4107 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
4108 |
-
dur-second = 1*DIGIT "S"
|
4109 |
-
dur-day = 1*DIGIT "D"
|
4110 |
-
xparams<span class="ref">3</span> = array( *[ xparamkey => 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 ( "year" => 2001
|
4117 |
-
, "month" => 1
|
4118 |
-
, "day" => 1
|
4119 |
-
, "hour" => 1
|
4120 |
-
, "min" => 1
|
4121 |
-
, "sec" => 1 );
|
4122 |
-
$fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
|
4123 |
-
$fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
|
4124 |
-
$fdate4 = "4 April 2005 4:4:4";
|
4125 |
-
$fdate7 = array ( "year" => 2007
|
4126 |
-
, "month" => 7
|
4127 |
-
, "day" => 7 );
|
4128 |
-
$fdur6 = array ( "week" => 0
|
4129 |
-
, "day" => 5
|
4130 |
-
, "hour" => 5
|
4131 |
-
, "min" => 5
|
4132 |
-
, "sec" => 5 );
|
4133 |
-
$fdur7 = array ( 0, 0, 6 ); // <span class="ref">duration for 6 hours</span>
|
4134 |
-
$fdur8 = "P2D"; // <span class="ref">duration two days</span>
|
4135 |
-
$freebusy->setProperty "freebusy"
|
4136 |
-
, "FREE"
|
4137 |
-
, array( array( $fdate1, $fdate2 )
|
4138 |
-
, array( $fdate3, $fdur6 )
|
4139 |
-
, array( $fdate4, $fdate5 )));
|
4140 |
-
$freebusy->setProperty("freebusy"
|
4141 |
-
, "Busy"
|
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. "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."
|
4154 |
-
<h5>Delete GEO</h5>
|
4155 |
-
Remove GEO from component.
|
4156 |
-
<p class="label">Format</p>
|
4157 |
-
<p class="format">deleteProperty( "GEO" )</p>
|
4158 |
-
<p class="label">Example</p>
|
4159 |
-
<p class="example">$vevent->deleteProperty( "GEO" );</p>
|
4160 |
-
<h5>Get GEO</h5>
|
4161 |
-
Fetch property value.
|
4162 |
-
<p class="label">Format 1</p>
|
4163 |
-
<p class="format">getProperty( "GEO" )</p>
|
4164 |
-
<p class="comment">output = array( "latitude" => <latitude>
|
4165 |
-
, "longitude" => <longitude>))</p>
|
4166 |
-
<p class="label">Format 2</p>
|
4167 |
-
<p class="format">getProperty( "GEO", FALSE , TRUE )</p>
|
4168 |
-
<p class="comment">output = array( "value" => array ( "latitude" => <latitude>
|
4169 |
-
, "longitude" => <longitude>))
|
4170 |
-
, "params" => xparam <span class="ref">1</span> )</p>
|
4171 |
-
<p class="label">Example</p>
|
4172 |
-
<p class="example">$geo = $vevent->getProperty( "GEO" );</p>
|
4173 |
-
<h5>Set GEO</h5>
|
4174 |
-
Insert property value.
|
4175 |
-
<p class="label">Format</p>
|
4176 |
-
<p class="format">setProperty( "geo", float latitude, float longitude [, xparam ] )</p>
|
4177 |
-
<p class="comment">xparam <span class="ref">1</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4178 |
-
<p class="label">Example</p>
|
4179 |
-
<p class="example">$vevent->setProperty( "geo", 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( "LAST-MODIFIED" )</p>
|
4191 |
-
<p class="label">Example</p>
|
4192 |
-
<p class="example">$vevent->deleteProperty( "LAST-MODIFIED" );</p>
|
4193 |
-
<h5>Get LAST-MODIFIED</h5>
|
4194 |
-
Fetch property value.
|
4195 |
-
<p class="label">Format 1</p>
|
4196 |
-
<p class="format">getProperty( "LAST-MODIFIED" )</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( "LAST-MODIFIED", FALSE , TRUE )</p>
|
4200 |
-
<p class="comment">output = array( "value" => moddate<span class="ref">1</span>
|
4201 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4202 |
-
<p class="label">Example</p>
|
4203 |
-
<p class="example">$lastMod = $vevent->getProperty( "LAST-MODIFIED" );</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 "offset" 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( "Last-Modified" [, moddate [, xparam ]] )</p>
|
4211 |
-
<p class="comment">moddate<span class="ref">1</span> = array( "year" => int year
|
4212 |
-
, "month" => int month
|
4213 |
-
, "day" => int day
|
4214 |
-
[, "hour" => int hour
|
4215 |
-
, "min" => int min
|
4216 |
-
, "sec" => int sec
|
4217 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset])
|
4232 |
-
completedDate = string datestring // <span class="ref">string date,
|
4233 |
-
acceptable by strtotime function,
|
4234 |
-
ex. "14 august 2006 16.00.00"
|
4235 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
4236 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
4237 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4238 |
-
<p class="label">Example 1</p>
|
4239 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
4240 |
-
$vcalendar = new vcalendar( $config );
|
4241 |
-
$vtodo = & $vcalendar->newComponent( "vtodo" );
|
4242 |
-
.. .
|
4243 |
-
$vtodo->setProperty("last-modified"
|
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("year" => 2006, "month" => 10, "day" => 10,
|
4248 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
4249 |
-
<span class="ref">// local date + UTC offset => <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
4250 |
-
$vtodo->setProperty( "last-modified", $date );
|
4251 |
-
.. .</p>
|
4252 |
-
<p class="label">Example 3</p>
|
4253 |
-
<p class="example">$vevent->setProperty( "last-modified" );
|
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( "LOCATION" )</p>
|
4266 |
-
<p class="label">Example</p>
|
4267 |
-
<p class="example">$vevent->deleteProperty( "LOCATION" );</p>
|
4268 |
-
<h5>Get LOCATION</h5>
|
4269 |
-
Fetch property value.
|
4270 |
-
<p class="label">Format 1</p>
|
4271 |
-
<p class="format">getProperty( "LOCATION" )</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( "LOCATION", FALSE , TRUE )</p>
|
4275 |
-
<p class="comment">output = array( "value" => location<span class="ref">1</span>
|
4276 |
-
, "params" => param<span class="ref">2</span> )</p>
|
4277 |
-
<p class="label">Example</p>
|
4278 |
-
<p class="example">$location = $vevent->getProperty( "LOCATION" );</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( "location", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
4287 |
-
[, "LANGUAGE" => "<lang>"]
|
4288 |
-
[, xparam ]
|
4289 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4290 |
-
<p class="label">Example</p>
|
4291 |
-
<p class="example">$vevent->setProperty( "location", "Buckingham Palace" );</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( "ORGANIZER" )</p>
|
4303 |
-
<p class="label">Example</p>
|
4304 |
-
<p class="example">$vevent->deleteProperty( "ORGANIZER" );</p>
|
4305 |
-
<h5>Get ORGANIZER</h5>
|
4306 |
-
Fetch property value.
|
4307 |
-
<p class="label">Format 1</p>
|
4308 |
-
<p class="format">getProperty( "ORGANIZER" )</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( "ORGANIZER", FALSE , TRUE )</p>
|
4312 |
-
<p class="comment">output = array( "value" => organizer<span class="ref">1</span>
|
4313 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4314 |
-
<p class="label">Example</p>
|
4315 |
-
<p class="example">$organizer = $vevent->getProperty( "ORGANIZER" );</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 "mailto:", 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( "organizer", 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( ["LANGUAGE" => "<lang>"
|
4328 |
-
(applies to the CN parameter value) ]
|
4329 |
-
[, "CN" => "common name to be associated
|
4330 |
-
with the <i>calendar</i> user
|
4331 |
-
specified by the property"]
|
4332 |
-
[, "DIR" => "reference to a directory
|
4333 |
-
entry associated with the <i>calendar</i> user
|
4334 |
-
specified by the property" ]
|
4335 |
-
[, "SENT-BY" => "single <i>calendar</i> user
|
4336 |
-
that is acting on behalf
|
4337 |
-
of the <i>calendar</i> user
|
4338 |
-
specified by the property" ]
|
4339 |
-
[, xparam ]
|
4340 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4341 |
-
<p class="label">Example</p>
|
4342 |
-
<p class="example">
|
4343 |
-
$dir = "ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)";
|
4344 |
-
$vevent->setProperty( "organizer"
|
4345 |
-
, "ical@domain.com"
|
4346 |
-
, array( "CN" => "John Doe"
|
4347 |
-
, "DIR" => $dir
|
4348 |
-
, "SENT-BY" => "secretary@domain.com"
|
4349 |
-
, "X-Key1" => "X-Value1"
|
4350 |
-
, "X-Key2" => "X-Value2" ));</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( "PERCENT-COMPLETE" )</p>
|
4362 |
-
<p class="label">Example</p>
|
4363 |
-
<p class="example">$vtodo->deleteProperty( "PERCENT-COMPLETE" );</p>
|
4364 |
-
<h5>Get PERCENT-COMPLETE</h5>
|
4365 |
-
Fetch property value.
|
4366 |
-
<p class="label">Format 1</p>
|
4367 |
-
<p class="format">getProperty( "PERCENT-COMPLETE" )</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( "PRIORITY", FALSE , TRUE )</p>
|
4371 |
-
<p class="comment">output = array( "value" => percent<span class="ref">1</span>
|
4372 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4373 |
-
<p class="label">Example</p>
|
4374 |
-
<p class="example">$percent = $vtodo->getProperty( "PERCENT-COMPLETE" );</p>
|
4375 |
-
<h5>Set PERCENT-COMPLETE</h5>
|
4376 |
-
Insert property value.
|
4377 |
-
<p class="label">Format</p>
|
4378 |
-
<p class="format">setProperty( "Percent-Complete", 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 => xparamvalue ] )</p>
|
4381 |
-
<p class="label">Example</p>
|
4382 |
-
<p class="example">$vtodo->setProperty( "percent-complete", 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( "PRIORITY" )</p>
|
4399 |
-
<p class="label">Example</p>
|
4400 |
-
<p class="example">$vevent->deleteProperty( "PRIORITY" );</p>
|
4401 |
-
<h5>Get PRIORITY</h5>
|
4402 |
-
Fetch property value.
|
4403 |
-
<p class="label">Format 1</p>
|
4404 |
-
<p class="format">getProperty( "PRIORITY" )</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( "PRIORITY", FALSE , TRUE )</p>
|
4408 |
-
<p class="comment">output = array( "value" => priority<span class="ref">1</span>
|
4409 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4410 |
-
<p class="label">Example</p>
|
4411 |
-
<p class="example">$priority = $vevent->getProperty( "priority" );</p>
|
4412 |
-
<h5>Set PRIORITY</h5>
|
4413 |
-
Insert property value.
|
4414 |
-
<p class="label">Format</p>
|
4415 |
-
<p class="format">setProperty( "priority", 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 => xparamvalue ] )</p>
|
4418 |
-
<p class="label">Example</p>
|
4419 |
-
<p class="example">$vevent->setProperty( "priority", 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( "RDATE" )</p>
|
4431 |
-
<p class="label">Example 1</p>
|
4432 |
-
<p class="example">$vtodo->deleteProperty( "RDATE" );</p>
|
4433 |
-
<p class="label">Example 2</p>
|
4434 |
-
Delete RDATE property no 2.
|
4435 |
-
<p class="example">$vjournal->deleteProperty( "RDATE", 2 );</p>
|
4436 |
-
<p class="label">Example 3</p>
|
4437 |
-
Deleting all RDATE properties.
|
4438 |
-
<p class="example">while( $vjournal->deleteProperty( "RDATE" ))
|
4439 |
-
continue;</p>
|
4440 |
-
<h5>Get RDATE</h5>
|
4441 |
-
Fetch property value.
|
4442 |
-
<p class="label">Format 1</p>
|
4443 |
-
<p class="format">getProperty( "RDATE" )</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( "RDATE", propOrderNo/FALSE , TRUE )</p>
|
4447 |
-
<p class="comment">output = array( "value" => dates<span class="ref">1</span>
|
4448 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4449 |
-
<p class="label">Format 3</p>
|
4450 |
-
<p class="format">getProperty( "RDATE", propOrderNo )</p>
|
4451 |
-
<p class="comment">Get propOrderNo RDATE</p>
|
4452 |
-
<p class="label">Example</p>
|
4453 |
-
<p class="example">$rdates = $vevent->getProperty( "RDATE" );</p>
|
4454 |
-
<h5>Set RDATE</h5>
|
4455 |
-
Insert property value.<br>
|
4456 |
-
If "TZID" is set in params, ex. "TZID" = "CET", 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 ("VALUE" = "DATE"), all timezone or offset in dates are ignored.<br>
|
4458 |
-
If "PERIOD" is set in params ("VALUE" = "PERIOD"), DATE-TIME value type is set.<br>
|
4459 |
-
If no "VALUE" 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 "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" 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( "rdate", 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( "year" => int year
|
4480 |
-
, "month" => int month
|
4481 |
-
, "day" => int day
|
4482 |
-
[, "hour" => int hour
|
4483 |
-
, "min" => int min
|
4484 |
-
, "sec" => int sec
|
4485 |
-
[, "tz" => mixed tz ]] )
|
4486 |
-
// <span class="ref">output format</span>
|
4487 |
-
date = array( "timestamp" => int timestamp
|
4488 |
-
[, "tz" => mixed tz ] )
|
4489 |
-
date = string datestring // <span class="ref">string date,
|
4490 |
-
acceptable by strtotime function,
|
4491 |
-
ex. "14 august 2006 16.00.00"
|
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 => <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([ "week" => int week/false ,] /
|
4502 |
-
[ "day" => int day/false
|
4503 |
-
[, "hour" => int hour
|
4504 |
-
, "min" => int min
|
4505 |
-
, "sec" => int sec ]] );
|
4506 |
-
// <span class="ref">output format, only used keys</span>
|
4507 |
-
duration = array( "sec" => int sec );
|
4508 |
-
duration = string format duration like "P15DT5H0M20S"
|
4509 |
-
params<span class="ref">2</span> = ([tzidparam ( / datetimeparam / dateparam / periodparam )]
|
4510 |
-
*[, xparams ] )
|
4511 |
-
tzidparam = "TZID" => <timezone identifier>
|
4512 |
-
// <span class="ref">output as local DATE-TIME with timezone identifier</span>
|
4513 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as DATE-TIME</span>
|
4514 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
4515 |
-
periodparam = "VALUE" => "PERIOD" // <span class="ref">output as PERIOD (datetime)</span>
|
4516 |
-
xparams = xparamkey => 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( "year" => 2001
|
4523 |
-
, "month" => 1
|
4524 |
-
, "day" => 1
|
4525 |
-
, "hour" => 1
|
4526 |
-
, "min" => 1
|
4527 |
-
, "sec" => 1
|
4528 |
-
, "tz" => "GMT" );
|
4529 |
-
$rdate2 = array( 2002, 2, 2, 2, 2, 2, "GMT" );
|
4530 |
-
$rdate3 = "3 March 2003 03.03.03";
|
4531 |
-
$rdate4 = array( 2004, 4, 4, 4, 4, 4, "GMT" );
|
4532 |
-
$rdate5 = array( 2005, 10, 5, 5, 5, 5 );
|
4533 |
-
$rdate8 = array( "year" => 2007, "month" => 7, "day" => 7 );
|
4534 |
-
$rdur6 = array( "week" => 0
|
4535 |
-
, "day" => 0
|
4536 |
-
, "hour" => 5
|
4537 |
-
, "min" => 5
|
4538 |
-
, "sec" => 5 );
|
4539 |
-
$rdur7 = array( 0, 0, 6 );
|
4540 |
-
<span class="comment">// duration for 6 hours</span>
|
4541 |
-
$rdur8 = array( "week" => 8 );
|
4542 |
-
<span class="comment">// duration for 8 weeks</span>
|
4543 |
-
|
4544 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
4545 |
-
$vevent->setProperty( "rdate", array( $rdate1 ));
|
4546 |
-
<span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>
|
4547 |
-
|
4548 |
-
$vevent->setProperty( "rdate", array( $rdate1, $rdate2 ));
|
4549 |
-
<span class="comment">// two dates, date 7-params format (DATE-TIME)</span>
|
4550 |
-
|
4551 |
-
$vevent->setProperty( "rdate", array( array( $rdate1, $rdate2 )
|
4552 |
-
, array( $rdate3, $rdate4 ))
|
4553 |
-
, array( "VALUE" => "PERIOD" ));
|
4554 |
-
<span class="comment">// Both fromdate and enddate must have 7 params (DATE-TIME) !!!</span>
|
4555 |
-
|
4556 |
-
$vevent->setProperty( "rdate", array( array( $rdate2, $rdur6 ))
|
4557 |
-
, array( "VALUE" => "PERIOD" ));
|
4558 |
-
<span class="comment">// one duration (fromdate-duration)</span>
|
4559 |
-
|
4560 |
-
$vevent->setProperty( "rdate", array( array( $rdate1, $date2 )
|
4561 |
-
, array( $rdate3, $rdur7 ))
|
4562 |
-
, array( "VALUE" => "PERIOD" ));
|
4563 |
-
<span class="comment">// period, pairs of fromdate+enddate and fromdate-duration</span>
|
4564 |
-
|
4565 |
-
$vevent->setProperty( "rdate", array( $rdate5, $date8 ))
|
4566 |
-
, array( "VALUE" => "DATE" ));
|
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( "RECURRENCE-ID" )</p>
|
4580 |
-
<p class="label">Example</p>
|
4581 |
-
<p class="example">$vevent->deleteProperty( "RECURRENCE-ID" );</p>
|
4582 |
-
<h5>Get RECURRENCE-ID</h5>
|
4583 |
-
Fetch property value.
|
4584 |
-
<p class="label">Format 1</p>
|
4585 |
-
<p class="format">getProperty( "RECURRENCE-ID" )</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( "RECURRENCE-ID", FALSE , TRUE )</p>
|
4589 |
-
<p class="comment">output = array( "value" => recurrIdDate<span class="ref">1</span>
|
4590 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4591 |
-
<p class="label">Example</p>
|
4592 |
-
<p class="example">$recurrDate = $vtodo->getProperty( "RECURRENCE-ID" );</p>
|
4593 |
-
<h5>Set RECURRENCE-ID</h5>
|
4594 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "recurrence-id", recurrIdDate [, params ] )</p>
|
4603 |
-
<p class="comment">recurrIdDate<span class="ref">1</span> = array( "year" => int year
|
4604 |
-
, "month" => int month
|
4605 |
-
, "day" => int day
|
4606 |
-
[, "hour" => int hour
|
4607 |
-
, "min" => int min
|
4608 |
-
, "sec" => int sec
|
4609 |
-
[, "tz" => 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( "timestamp" => int timestamp
|
4625 |
-
[, "tz" => mixed tz ] )
|
4626 |
-
recurrIdDate = string datestring // <span class="ref">string date,
|
4627 |
-
acceptable by strtotime function,
|
4628 |
-
ex. "14 august 2006 16.00.00"
|
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 => <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 = "VALUE" => "DATE-TIME" // <span class="ref">default, output as DATE-TIME</span>
|
4637 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
4638 |
-
tzidparam = "TZID" => <timezone identifier>
|
4639 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
4640 |
-
rangeparam = "RANGE" => ( "THISANDPRIOR" / "THISANDFUTURE" )
|
4641 |
-
// <span class="ref">range parameter</span>
|
4642 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4643 |
-
<p class="label">Example</p>
|
4644 |
-
<p class="example">$vtodo->setProperty( "recurrence-id", "3 March 2003 03.03.03" );
|
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( "RELATED-TO" )</p>
|
4658 |
-
<p class="label">Example 1</p>
|
4659 |
-
<p class="example">$vtodo->deleteProperty( "RELATED-TO" );</p>
|
4660 |
-
<p class="label">Example 2</p>
|
4661 |
-
Delete RELATED-TO property no 2.
|
4662 |
-
<p class="example">$vjournal->deleteProperty( "RELATED-TO", 2 );</p>
|
4663 |
-
<p class="label">Example 3</p>
|
4664 |
-
Deleting all RELATED-TO properties.
|
4665 |
-
<p class="example">while( $vjournal->deleteProperty( "RELATED-TO" ))
|
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( "RELATED-TO" )</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( "RELATED-TO", propOrderNo/FALSE , TRUE )</p>
|
4674 |
-
<p class="comment">output = array( "value" => relid<span class="ref">1</span>
|
4675 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4676 |
-
<p class="label">Format 3</p>
|
4677 |
-
<p class="format">getProperty( "RELATED-TO", propOrderNo )</p>
|
4678 |
-
<p class="comment">Get propOrderNo RELATED-TO</p>
|
4679 |
-
<p class="label">Example</p>
|
4680 |
-
<p class="example">$relatedId = $vtodo->getProperty( "RELATED-TO" );</p>
|
4681 |
-
<h5>Set RELATED-TO</h5>
|
4682 |
-
Insert property value.
|
4683 |
-
<p class="label">Format</p>
|
4684 |
-
<p class="format">setProperty( "Related-To", 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 = "RELTYPE" => ("PARENT" (Default)
|
4688 |
-
/ "CHILD"
|
4689 |
-
/ "SIBLING"
|
4690 |
-
/ iana-token
|
4691 |
-
/ x-name)
|
4692 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4693 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4694 |
-
<p class="label">Example</p>
|
4695 |
-
<p class="example">$vtodo->setProperty( "related-to", "19960401-080045-4000F192713@host.com");</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( "REPEAT" )</p>
|
4706 |
-
<p class="label">Example</p>
|
4707 |
-
<p class="example">$valarm->deleteProperty( "REPEAT" );</p>
|
4708 |
-
<h5>Get REPEAT</h5>
|
4709 |
-
Fetch property value.
|
4710 |
-
<p class="label">Format 1</p>
|
4711 |
-
<p class="format">getProperty( "REPEAT" )</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( "REPEAT", FALSE , TRUE )</p>
|
4715 |
-
<p class="comment">output = array( "value" => repeatTimes<span class="ref">1</span>
|
4716 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4717 |
-
<p class="label">Example</p>
|
4718 |
-
<p class="example">$repeat = $vtodo->getProperty( "REPEAT" );</p>
|
4719 |
-
<h5>Set REPEAT</h5>
|
4720 |
-
Insert property value.
|
4721 |
-
<p class="label">Format</p>
|
4722 |
-
<p class="format">setProperty( "repeat", 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 => xparamvalue ] )</p>
|
4725 |
-
<p class="label">Example</p>
|
4726 |
-
<p class="example">$valarm->setProperty( "repeat", 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( "REQUEST-STATUS" )</p>
|
4737 |
-
<p class="label">Example 1</p>
|
4738 |
-
<p class="example">$vtodo->deleteProperty( "REQUEST-STATUS" );</p>
|
4739 |
-
<p class="label">Example 2</p>
|
4740 |
-
Delete REQUEST-STATUS property no 2.
|
4741 |
-
<p class="example">$vjournal->deleteProperty( "REQUEST-STATUS", 2 );</p>
|
4742 |
-
<p class="label">Example 3</p>
|
4743 |
-
Deleting all REQUEST-STATUS properties.
|
4744 |
-
<p class="example">while( $vjournal->deleteProperty( "REQUEST-STATUS" ))
|
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( "REQUEST-STATUS" )</p>
|
4750 |
-
<p class="comment">output = array( "statcode" => statcode<span class="ref">1</span>
|
4751 |
-
, "text" => errtext<span class="ref">2</span>
|
4752 |
-
[ , "extdata" => extraData<span class="ref"> 3</span> ] )</p>
|
4753 |
-
<p class="label">Format 2</p>
|
4754 |
-
<p class="format">getProperty( "REQUEST-STATUS", propOrderNo/FALSE, TRUE )</p>
|
4755 |
-
<p class="comment">output = array( "value" => array( "statcode" => statcode<span class="ref">1</span>
|
4756 |
-
, "text" => errtext<span class="ref">2</span>
|
4757 |
-
[ , "extdata" => extraData<span class="ref">3</span> ] )
|
4758 |
-
, "params" => params<span class="ref">4</span> )</p>
|
4759 |
-
<p class="label">Format 3</p>
|
4760 |
-
<p class="format">getProperty( "REQUEST-STATUS", propOrderNo )</p>
|
4761 |
-
<p class="comment">Get propOrderNo REQUEST-STATUS</p>
|
4762 |
-
<p class="label">Example</p>
|
4763 |
-
<p class="example">$requestStatus = $vtodo->getProperty( "REQUEST-STATUS" );</p>
|
4764 |
-
<h5>Set REQUEST-STATUS</h5>
|
4765 |
-
Insert property value.
|
4766 |
-
<p class="label">Format</p>
|
4767 |
-
<p class="format">setProperty( "Request-Status"
|
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 *("." 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( ["LANGUAGE" => "<lang>"] [, xparam ] )
|
4776 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4777 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4778 |
-
<p class="label">Example</p>
|
4779 |
-
<p class="example">$vfreebusy->setProperty("request-status"
|
4780 |
-
, 2.0
|
4781 |
-
, "Invalid property value"
|
4782 |
-
, "DTSTART:96-Apr-31");</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( "RESOURCES" )</p>
|
4794 |
-
<p class="label">Example 1</p>
|
4795 |
-
<p class="example">$vevent->deleteProperty( "RESOURCES" );</p>
|
4796 |
-
<p class="label">Example 2</p>
|
4797 |
-
Delete RESOURCES property no 2.
|
4798 |
-
<p class="example">$vevent->deleteProperty( "RESOURCES", 2 );</p>
|
4799 |
-
<p class="label">Example 3</p>
|
4800 |
-
Deleting all RESOURCES properties.
|
4801 |
-
<p class="example">while( $vevent->deleteProperty( "RESOURCES" ))
|
4802 |
-
continue;</p>
|
4803 |
-
<h5>Get RESOURCES</h5>
|
4804 |
-
Fetch property value.
|
4805 |
-
<p class="label">Format 1</p>
|
4806 |
-
<p class="format">getProperty( "RESOURCES" )</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( "RESOURCES", propOrderNo/FALSE, TRUE )</p>
|
4810 |
-
<p class="comment">output = array( "value" => resources<span class="ref">1</span>
|
4811 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4812 |
-
<p class="label">Format 3</p>
|
4813 |
-
<p class="format">getProperty( "RESOURCES", propOrderNo )</p>
|
4814 |
-
<p class="comment">Get propOrderNo RESOURCES</p>
|
4815 |
-
<p class="label">Example</p>
|
4816 |
-
<p class="example">$resources = $vtodo->getProperty( "RESOURCES" );</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( "resources", 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([ "ALTREP" => "<an alternate text representation, URI>"]
|
4828 |
-
[, "LANGUAGE" => "<lang>"]
|
4829 |
-
[, xparam] )
|
4830 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4831 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4832 |
-
<p class="label">Example</p>
|
4833 |
-
<p class="example">$vevent->setProperty( "resources", "COMPUTER PROJECTOR" );</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( "RRULE" )</p>
|
4844 |
-
<p class="label">Example 1</p>
|
4845 |
-
<p class="example">$vevent->deleteProperty( "RRULE" );</p>
|
4846 |
-
<p class="label">Example 2</p>
|
4847 |
-
Delete RRULE property no 2.
|
4848 |
-
<p class="example">$vevent->deleteProperty( "RRULE", 2 );</p>
|
4849 |
-
<p class="label">Example 3</p>
|
4850 |
-
Deleting all RRULE properties.
|
4851 |
-
<p class="example">while( $vevent->deleteProperty( "RRULE" ))
|
4852 |
-
continue;</p>
|
4853 |
-
<h5>Get RRULE</h5>
|
4854 |
-
Fetch property value.
|
4855 |
-
<p class="label">Format 1</p>
|
4856 |
-
<p class="format">getProperty( "RRULE" )</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( "RRULE", propOrderNo/FALSE, TRUE )</p>
|
4860 |
-
<p class="comment">output = array( "value" => recur<span class="ref">1</span>
|
4861 |
-
, "params" => xparams<span class="ref">2</span> )</p>
|
4862 |
-
<p class="label">Format 3</p>
|
4863 |
-
<p class="format">getProperty( "RRULE", propOrderNo )</p>
|
4864 |
-
<p class="comment">Get propOrderNo RRULE</p>
|
4865 |
-
<p class="label">Example</p>
|
4866 |
-
<p class="example">$rrules = $vtodo->getProperty( "RRULE" );</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( "rrule", 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 => 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( "SEQUENCE" )</p>
|
4909 |
-
<p class="label">Example</p>
|
4910 |
-
<p class="example">$vtodo->deleteProperty( "SEQUENCE" );</p>
|
4911 |
-
<h5>Get SEQUENCE</h5>
|
4912 |
-
Fetch property value.
|
4913 |
-
<p class="label">Format 1</p>
|
4914 |
-
<p class="format">getProperty( "SEQUENCE" )</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( "SEQUENCE", FALSE , TRUE )</p>
|
4918 |
-
<p class="comment">output = array( "value" => sequence<span class="ref">1</span>
|
4919 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4920 |
-
<p class="label">Example</p>
|
4921 |
-
<p class="example">$sequence = $vtodo->getProperty( "SEQUENCE" );</p>
|
4922 |
-
<h5>Set SEQUENCE</h5>
|
4923 |
-
Insert property value.
|
4924 |
-
<p class="label">Format</p>
|
4925 |
-
<p class="format">setProperty( "sequence" [, 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 => xparamvalue ] )</p>
|
4928 |
-
<p class="label">Example 1</p>
|
4929 |
-
<p class="example">$vevent->setProperty( "sequence", 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( "sequence" );
|
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( "STATUS" )</p>
|
4945 |
-
<p class="label">Example</p>
|
4946 |
-
<p class="example">$vtodo->deleteProperty( "STATUS" );</p>
|
4947 |
-
<h5>Get STATUS</h5>
|
4948 |
-
Fetch property value.
|
4949 |
-
<p class="label">Format 1</p>
|
4950 |
-
<p class="format">getProperty( "STATUS" )</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( "STATUS", FALSE , TRUE )</p>
|
4954 |
-
<p class="comment">output = array( "value" => status<span class="ref">1</span>
|
4955 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4956 |
-
<p class="label">Example</p>
|
4957 |
-
<p class="example">$status = $vtodo->getProperty( "STATUS" );</p>
|
4958 |
-
<h5>Set STATUS</h5>
|
4959 |
-
Insert property value.
|
4960 |
-
<p class="label">Format</p>
|
4961 |
-
<p class="format">setProperty( "status", 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> = "TENTATIVE" // <span class="ref">Indicates event is tentative</span>
|
4964 |
-
/ "CONFIRMED" // <span class="ref">Indicates event is definite</span>
|
4965 |
-
/ "CANCELLED" // <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> = "NEEDS-ACTION" // <span class="ref">Indicates to-do needs action</span>
|
4968 |
-
/ "COMPLETED" // <span class="ref">Indicates to-do completed</span>
|
4969 |
-
/ "IN-PROCESS" // <span class="ref">Indicates to-do in process of</span>
|
4970 |
-
/ "CANCELLED" // <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> = "DRAFT" // <span class="ref">Indicates journal is draft</span>
|
4973 |
-
/ "FINAL" // <span class="ref">Indicates journal is final</span>
|
4974 |
-
/ "CANCELLED" // <span class="ref">Indicates journal is removed</span>
|
4975 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4976 |
-
<p class="label">Example</p>
|
4977 |
-
<p class="example">$vevent->setProperty( "Status", "COMPLETED" );</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 ("one line") summary or subject for the <i>calendar</i> component. (In "rfc2445, Recommended Practices", 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( "SUMMARY" )</p>
|
4989 |
-
<p class="label">Example</p>
|
4990 |
-
<p class="example">$vevent->deleteProperty( "SUMMARY" );</p>
|
4991 |
-
<h5>Get SUMMARY</h5>
|
4992 |
-
Fetch property value.
|
4993 |
-
<p class="label">Format 1</p>
|
4994 |
-
<p class="format">getProperty( "SUMMARY" )</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( "SUMMARY", FALSE , TRUE )</p>
|
4998 |
-
<p class="comment">output = array( "value" => summary<span class="ref">1</span>
|
4999 |
-
, "params" => params<span class="ref">2</span> )</p>
|
5000 |
-
<p class="label">Example</p>
|
5001 |
-
<p class="example">$summary = $vtodo->getProperty( "SUMMARY" );</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( "summary", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
5011 |
-
[, "LANGUAGE" => "<lang>"]
|
5012 |
-
[, xparam ] )
|
5013 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
5014 |
-
<p class="label">Example</p>
|
5015 |
-
<p class="example">$vevent->setProperty( "summary", "This is a summary" );</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( "TRANSP" )</p>
|
5026 |
-
<p class="label">Example</p>
|
5027 |
-
<p class="example">$vevent->deleteProperty( "TRANSP" );</p>
|
5028 |
-
<h5>Get TRANSP</h5>
|
5029 |
-
Fetch property value.
|
5030 |
-
<p class="label">Format 1</p>
|
5031 |
-
<p class="format">getProperty( "TRANSP" )</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( "TRANSP", FALSE , TRUE )</p>
|
5035 |
-
<p class="comment">output = array( "value" => transp<span class="ref">1</span>
|
5036 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5037 |
-
<p class="label">Example</p>
|
5038 |
-
<p class="example">$transp = $vtodo->getProperty( "TRANSP" );</p>
|
5039 |
-
<h5>Set TRANSP</h5>
|
5040 |
-
Insert property value.
|
5041 |
-
<p class="label">Format</p>
|
5042 |
-
<p class="format">setProperty( "transp", transp [, xparam ] )</p>
|
5043 |
-
<p class="comment">transp<span class="ref">1</span> = "OPAQUE" / "TRANSPARENT"
|
5044 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
5045 |
-
<p class="label">Example</p>
|
5046 |
-
<p class="example">$vevent->setProperty( "transp", "TRANSPARENT" );</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( "TRIGGER" )</p>
|
5058 |
-
<p class="label">Example</p>
|
5059 |
-
<p class="example">$valarm->deleteProperty( "TRIGGER" );</p>
|
5060 |
-
<h5>Get TRIGGER</h5>
|
5061 |
-
Fetch property value.
|
5062 |
-
<p class="label">Format 1</p>
|
5063 |
-
<p class="format">getProperty( "TRIGGER" )</p>
|
5064 |
-
<p class="comment">output = duration/date</p>
|
5065 |
-
<p class="label">Format 2</p>
|
5066 |
-
<p class="format">getProperty( "TRIGGER", FALSE , TRUE )</p>
|
5067 |
-
<p class="comment">output = array( "value" => duration<span class="ref">1</span>/date<span class="ref">3</span> )
|
5068 |
-
, "params" => params<span class="ref">4</span> )
|
5069 |
-
<p class="label">Example</p>
|
5070 |
-
<p class="example">$trigger = $vtodo->getProperty( "TRIGGER" );</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( "trigger", 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( "trigger", 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( "trigger", date<span class="ref">3</span> [, params<span class="ref">4</span> ] )</p>
|
5081 |
-
<p class="label">Format</p>
|
5082 |
-
<p class="format">setProperty( "trigger", 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( "week" => int week
|
5093 |
-
, "relatedStart" => bool relstart
|
5094 |
-
, "before" => bool before )
|
5095 |
-
duration<span class="ref">1</span> = array( "day" => int day
|
5096 |
-
, "hour" => int hour
|
5097 |
-
, "min" => int min
|
5098 |
-
, "sec" => int sec
|
5099 |
-
, "relatedStart" => bool relstart
|
5100 |
-
, "before" => 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 = (["+"]/"-")"P"(dur-date/dur-time/dur-week)
|
5106 |
-
dur-date = dur-day [dur-time]
|
5107 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
5108 |
-
dur-week = 1*DIGIT "W"
|
5109 |
-
dur-day = 1*DIGIT "D"
|
5110 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
5111 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
5112 |
-
dur-second = 1*DIGIT "S"
|
5113 |
-
date<span class="ref">3</span> = array( "year" => int year // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
5114 |
-
, "month" => int month
|
5115 |
-
, "day" => int day
|
5116 |
-
[, "hour" => int hour
|
5117 |
-
, "min" => int min
|
5118 |
-
, "sec" => int sec ])
|
5119 |
-
date<span class="ref">3</span> = array ( "timestamp" => 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. "14 august 2006 16.00.00"
|
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 = "RELATED" => "START" (default) / "END"
|
5128 |
-
trigRelparam = "VALUE" => "DURATION"
|
5129 |
-
datetimeparam= "VALUE" => "DATE-TIME"
|
5130 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
5131 |
-
<p class="label">Example 1</p>
|
5132 |
-
<p class="example">$valarm->setProperty( "trigger"
|
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( "trigger"
|
5137 |
-
, array ("hour"=>1,"min"=>2,"sec"=>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( "trigger"
|
5141 |
-
, "PT1H2M3S" );
|
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( "trigger"
|
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( "trigger"
|
5150 |
-
, array ( "week" => 1
|
5151 |
-
, "relatedStart" => FALSE
|
5152 |
-
, "before" => 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( "trigger"
|
5156 |
-
, "P1W"
|
5157 |
-
, array( "related" => "END" ));
|
5158 |
-
<span class="comment">// duration, 1 week after end</span></p>
|
5159 |
-
<p class="label">Example 7</p>
|
5160 |
-
<p class="example">$valarm->setProperty( "trigger"
|
5161 |
-
, array( "year" => 2007
|
5162 |
-
, "month" => 6
|
5163 |
-
, "day" => 5,
|
5164 |
-
, "hour" => 2
|
5165 |
-
, "min" => 2
|
5166 |
-
, "sec" => 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( "TZID" )</p>
|
5178 |
-
<p class="label">Example</p>
|
5179 |
-
<p class="example">$vtimezone->deleteProperty( "TZID" );</p>
|
5180 |
-
<h5>Get TZID</h5>
|
5181 |
-
Fetch property value.
|
5182 |
-
<p class="label">Format 1</p>
|
5183 |
-
<p class="format">getProperty( "TZID" )</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( "TZID", FALSE , TRUE )</p>
|
5187 |
-
<p class="comment">output = array( "value" => tzid<span class="ref">1</span>
|
5188 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5189 |
-
<p class="label">Example</p>
|
5190 |
-
<p class="example">$tzid = $vtimezone->getProperty( "TZID" );</p>
|
5191 |
-
<h5>Set TZID</h5>
|
5192 |
-
Insert property value.
|
5193 |
-
<p class="label">Format</p>
|
5194 |
-
<p class="format">setProperty( "tzid", 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 => xparamvalue ] )</p>
|
5197 |
-
<p class="label">Example</p>
|
5198 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5199 |
-
$vcalendar = new vcalendar( $config );
|
5200 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5201 |
-
$vtimezone->setProperty( "tzid", "US-Eastern" );
|
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( "TZNAME" )</p>
|
5214 |
-
<p class="label">Example 1</p>
|
5215 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZNAME" );</p>
|
5216 |
-
<p class="label">Example 2</p>
|
5217 |
-
Delete TZNAME property no 2.
|
5218 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZNAME", 2 );</p>
|
5219 |
-
<p class="label">Example 3</p>
|
5220 |
-
Deleting all TZNAME properties.
|
5221 |
-
<p class="example">while( $vtimezonestd->deleteProperty( "TZNAME" ))
|
5222 |
-
continue;</p>
|
5223 |
-
<h5>Get TZNAME</h5>
|
5224 |
-
Fetch property value.
|
5225 |
-
<p class="label">Format 1</p>
|
5226 |
-
<p class="format">getProperty( "TZNAME" )</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( "TZNAME", propOrderNo/FALSE, TRUE )</p>
|
5230 |
-
<p class="comment">output = array( "value" => tzname<span class="ref">1</span>
|
5231 |
-
, "params" => params<span class="ref">2</span> )</p>
|
5232 |
-
<p class="label">Format 3</p>
|
5233 |
-
<p class="format">getProperty( "TZNAME", propOrderNo )</p>
|
5234 |
-
<p class="comment">Get propOrderNo TZNAME</p>
|
5235 |
-
<p class="label">Example</p>
|
5236 |
-
<p class="example">$tzname = $timezonestandard->getProperty( "TZNAME" );</p>
|
5237 |
-
<h5>Set TZNAME</h5>
|
5238 |
-
Insert property value.
|
5239 |
-
<p class="label">Format</p>
|
5240 |
-
<p class="format">setProperty( "tzname", 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( [ "LANGUAGE" => "<lang>" ] [, xparam ] )
|
5243 |
-
xparam = *[ xparamkey => xparamvalue ]
|
5244 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
5245 |
-
<p class="label">Example</p>
|
5246 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5247 |
-
$vcalendar = new vcalendar( $config );
|
5248 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5249 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5250 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5251 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5252 |
-
$standard->setProperty( "tzname", "EST" );
|
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( "TZOFFSETFROM" )</p>
|
5265 |
-
<p class="label">Example</p>
|
5266 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZOFFSETFROM" );</p>
|
5267 |
-
<h5>Get TZOFFSETFROM</h5>
|
5268 |
-
Fetch property value.
|
5269 |
-
<p class="label">Format 1</p>
|
5270 |
-
<p class="format">getProperty( "TZOFFSETFROM" )</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( "TZOFFSETFROM", FALSE , TRUE )</p>
|
5274 |
-
<p class="comment">output = array( "value" => tzoffsetfrom<span class="ref">1</span>
|
5275 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5276 |
-
<p class="label">Example</p>
|
5277 |
-
<p class="example">$tzoffsetfrom = $timezonestandard->getProperty( "TZOFFSETFROM" );</p>
|
5278 |
-
<h5>Set TZOFFSETFROM</h5>
|
5279 |
-
Insert property value.
|
5280 |
-
<p class="label">Format</p>
|
5281 |
-
<p class="format">setProperty( "tzoffsetfrom", 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 => xparamvalue ] )</p>
|
5284 |
-
<p class="label">Example</p>
|
5285 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5286 |
-
$vcalendar = new vcalendar( $config );
|
5287 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5288 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5289 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5290 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5291 |
-
$standard->setProperty( "tzname", "EST" );
|
5292 |
-
$standard->setProperty( "tzoffsetfrom", "-0500" );
|
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( "TZOFFSETTO" )</p>
|
5305 |
-
<p class="label">Example</p>
|
5306 |
-
<p class="example">$daylight->deleteProperty( "TZOFFSETTO" );</p>
|
5307 |
-
<h5>Get TZOFFSETTO</h5>
|
5308 |
-
Fetch property value.
|
5309 |
-
<p class="label">Format 1</p>
|
5310 |
-
<p class="format">getProperty( "TZOFFSETTO" )</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( "TZOFFSETTO", FALSE , TRUE )</p>
|
5314 |
-
<p class="comment">output = array( "value" => tzoffsetto<span class="ref">1</span>
|
5315 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5316 |
-
<p class="label">Example</p>
|
5317 |
-
<p class="example">$tzoffsetto = $timezonestandard->getProperty( "TZOFFSETTO" );</p>
|
5318 |
-
<h5>Set TZOFFSETTO</h5>
|
5319 |
-
Insert property value.
|
5320 |
-
<p class="label">Format</p>
|
5321 |
-
<p class="format">setProperty( "tzoffsetto", 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 => xparamvalue ] )</p>
|
5324 |
-
<p class="label">Example</p>
|
5325 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5326 |
-
$vcalendar = new vcalendar( $config );
|
5327 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5328 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5329 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5330 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5331 |
-
.. .
|
5332 |
-
$daylight = & $vtimezone->newComponent( "daylight" );
|
5333 |
-
$daylight->setProperty( "tzoffsetto", "1345" );
|
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( "TZURL" )</p>
|
5347 |
-
<p class="label">Example</p>
|
5348 |
-
<p class="example">$vtimezone->deleteProperty( "TZURL" );</p>
|
5349 |
-
<h5>Get TZURL</h5>
|
5350 |
-
Fetch property value.
|
5351 |
-
<p class="label">Format 1</p>
|
5352 |
-
<p class="format">getProperty( "TZURL" )</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( "TZURL", FALSE , TRUE )</p>
|
5356 |
-
<p class="comment">output = array( "value" => tzurl<span class="ref">1</span>
|
5357 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5358 |
-
<p class="label">Example</p>
|
5359 |
-
<p class="example">$tzurl = $timezonestandard->getProperty( "TZURL" );</p>
|
5360 |
-
<h5>Set TZURL</h5>
|
5361 |
-
Insert property value.
|
5362 |
-
<p class="label">Format</p>
|
5363 |
-
<p class="format">setProperty( "tzurl", 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 => xparamvalue ] )</p>
|
5366 |
-
<p class="label">Example</p>
|
5367 |
-
<p class="example">$tz = "http://zones.stds_r_us.net/tz/US-Eastern" );
|
5368 |
-
$config = array( "unique_id" => "kigkonsult.se" );
|
5369 |
-
$vcalendar = new vcalendar( $config );
|
5370 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5371 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5372 |
-
$vtimezone->setProperty( "Last-Modified", "19870101T000000" );
|
5373 |
-
$vtimezone->setProperty( "tzurl", $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("Ymd\THisT")."-".[microSec][random]."@".<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">"20070803T194810CEST-0123U3PXiX@kigkonsult.se"</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( "UID" )</p>
|
5402 |
-
<p class="label">Example</p>
|
5403 |
-
<p class="example">$vevent->deleteProperty( "UID" );</p>
|
5404 |
-
<h5>Get UID</h5>
|
5405 |
-
Fetch property value.
|
5406 |
-
<p class="label">Format 1</p>
|
5407 |
-
<p class="format">getProperty( "UID" )</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( "UID", FALSE , TRUE )</p>
|
5411 |
-
<p class="comment">output = array( "value" => uid<span class="ref">1</span>
|
5412 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5413 |
-
<p class="label">Example</p>
|
5414 |
-
<p class="example">$uid = $vevent->getProperty( "UID" );</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. "vevent"), 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( "uid", 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 => xparamvalue ] )</p>
|
5422 |
-
<p class="label">Example</p>
|
5423 |
-
<p class="example">$vevent->setProperty("uid","20070803T194810CEST-0123U3PXiX@kigkonsult.se");</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( "URL" )</p>
|
5435 |
-
<p class="label">Example</p>
|
5436 |
-
<p class="example">$vevent->deleteProperty( "URL" );</p>
|
5437 |
-
<h5>Get URL</h5>
|
5438 |
-
Fetch property value.
|
5439 |
-
<p class="label">Format 1</p>
|
5440 |
-
<p class="format">getProperty( "URL" )</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( "URL", FALSE , TRUE )</p>
|
5444 |
-
<p class="comment">output = array "value" => url<span class="ref">1</span>
|
5445 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5446 |
-
<p class="label">Example</p>
|
5447 |
-
<p class="example">$url = $vevent->getProperty( "URL" );</p>
|
5448 |
-
<h5>Set URL</h5>
|
5449 |
-
Insert property value.<br>
|
5450 |
-
<p class="label">Format</p>
|
5451 |
-
<p class="format">setProperty( "url", 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 => xparamvalue ] (</p>
|
5454 |
-
<p class="label">Example</p>
|
5455 |
-
<p class="example">$vtodo->setProperty( "url", "http://www.icaldomain.net" );</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 "X-" 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( "<X-PROPERTY>" )</p>
|
5468 |
-
<p class="label">Example 1</p>
|
5469 |
-
<p class="example">$vevent->deleteProperty( "<X-PROPERTY>" );</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( "<X-PROPERTY>" )</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 ( "value" => propertyData<span class="ref">2</span> )
|
5488 |
-
, "params" => params<span class="ref"> 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( "unique_id" => "kigkonsult.se",
|
5495 |
-
"filename", "file.ics" ); );
|
5496 |
-
$vcalendar = new vcalendar( $config );
|
5497 |
-
$vcalendar->parse();
|
5498 |
-
if( FALSE !== ( $d = $vcalendar->getProperty( "X-WR-TIMEZONE" )))
|
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( "unique_id" => "kigkonsult.se",
|
5505 |
-
"filename", "file.ics" ); );
|
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( "unique_id" => "kigkonsult.se",
|
5514 |
-
"filename", "file.ics" ); );
|
5515 |
-
$vcalendar = new vcalendar( $config );
|
5516 |
-
$vcalendar->parse();
|
5517 |
-
while( $xprop = $vcalendar->getProperty( "X-ABC-MMSUBJ" )) {
|
5518 |
-
.. .</p>
|
5519 |
-
<p class="comment"> // $xprop = array( "X-ABC-MMSUBJ", propertyData<span class="ref">2</span> )</p>
|
5520 |
-
<p class="label">Example 4</p>
|
5521 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se",
|
5522 |
-
"filename", "file.ics" ); );
|
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( "value" => propertyData<span class="ref">2</span> )
|
5529 |
-
// , "params" => params<span class="ref"> 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 "X-" prefix
|
5535 |
-
propertyData<span class="ref">2</span> = Value type TEXT
|
5536 |
-
params<span class="ref">3</span> = array( ["LANGUAGE" => "<lang>"] [, xparam] )
|
5537 |
-
xparam = *[ xparamkey => xparamvalue ]
|
5538 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
5539 |
-
<p class="label">Example</p>
|
5540 |
-
<p class="example">$component->setProperty("X-ABC-MMSUBJ","http://load.noise.org/mysubj.wav");</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 "setConfig" 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( "language" )</p>
|
5556 |
-
<p class="label">Example</p>
|
5557 |
-
<p class="example">$lang = $vevent->getConfig( "language" );</p>
|
5558 |
-
<h5>Set LANGUAGE</h5>
|
5559 |
-
<p class="label">Format</p>
|
5560 |
-
<p class="format">setConfig( "language", string <lang> )</p>
|
5561 |
-
<p class="label">Example</p>
|
5562 |
-
<p class="example">$vevent->setConfig( "language", "en" );</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. "vevent")
|
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( "unique_id" => "kigkonsult.se",
|
5583 |
-
"filename", "file.ics" ); );
|
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( "unique_id" => "kigkonsult.se",
|
5592 |
-
"filename", "file.ics" ); );
|
5593 |
-
$vcalendar = new vcalendar( $config );
|
5594 |
-
$vcalendar->parse();
|
5595 |
-
$comp1 = $vcalendar->getComponent();
|
5596 |
-
while( $comp1->deleteComponent( "valarm" )
|
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( "unique_id" => "kigkonsult.se",
|
5620 |
-
"filename", "file.ics" ); );
|
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( "unique_id" => "kigkonsult.se" );
|
5636 |
-
$vcalendar = new vcalendar( $config );
|
5637 |
-
...
|
5638 |
-
$vevent = & $vcalendar->newComponent( "vevent" );
|
5639 |
-
$vevent->setProperty( "dtstart" // <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 = & $vevent->newComponent( "valarm" );
|
5644 |
-
$valarm->setProperty( "trigger", .. .
|
5645 |
-
...
|
5646 |
-
</p>
|
5647 |
-
<p class="label">Example 2</p>
|
5648 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5649 |
-
$vcalendar = new vcalendar( $config );
|
5650 |
-
...
|
5651 |
-
$vtimezone = & $vcalendar->newComponent( "vtimezone" );
|
5652 |
-
$vtimezone->setProperty(.. .
|
5653 |
-
...
|
5654 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5655 |
-
$standard->setProperty(.. .
|
5656 |
-
...
|
5657 |
-
$daylight = & $vtimezone->newComponent( "daylight" );
|
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( "unique_id" => "kigkonsult.se" );
|
5681 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
5682 |
-
.. .
|
5683 |
-
$vevent = new vevent();
|
5684 |
-
$vevent->setProperty( "dtstart" // <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( "trigger", .. .
|
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 => value ] ), timezone non-standard properties
|
5720 |
-
</p>
|
5721 |
-
<p class="label">Example</p>
|
5722 |
-
<p class="example">$config = array( "unique_id" => "kigkonsult.se" );
|
5723 |
-
$vcalendar = new vcalendar( $config );
|
5724 |
-
.. .
|
5725 |
-
$PHPtz = "Europe/Stockholm";
|
5726 |
-
$xprops = array( "X-LIC-LOCATION" => $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 "strtotime" 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. "14 august 2006 16.00.00"
|
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 "UTC"
|
5768 |
-
format = string, format accepted by date(), default "Ymd\THis"
|
5769 |
-
</p>
|
5770 |
-
<p class="label">Example</p>
|
5771 |
-
<p class="example">
|
5772 |
-
.. .
|
5773 |
-
$d = date( "Y-m-d H:i:s" );
|
5774 |
-
$tzFr = "Europe/Stockholm";
|
5775 |
-
if( FALSE !== iCalUtilityFunctions::transformDateTime( $d, $tzFr ))
|
5776 |
-
$event->setProperty( "dtstart", $d."Z" );
|
5777 |
-
else
|
5778 |
-
$event->setProperty( "dtstart", $d, array( "TZID" => $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 "require_once [folder/]iCalcreator.class.php;" 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 "Europe/Stockholm",
|
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( "iCalcreator.class.php" );
|
87 |
-
$config = array( "unique_id" => "icaldomain.com" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
91 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
92 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
93 |
-
$tz = "Europe/Stockholm";
|
94 |
-
$v->setProperty( "X-WR-TIMEZONE", $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( "vevent" ); // <span class="comment">create an event calendar component</span>
|
99 |
-
$vevent->setProperty( "dtstart", array( "year"=>2007, "month"=>4, "day"=>1, "hour"=>19, "min"=>0, "sec"=>0 ));
|
100 |
-
$vevent->setProperty( "dtend", array( "year"=>2007, "month"=>4, "day"=>1, "hour"=>22, "min"=>30, "sec"=>0 ));
|
101 |
-
$vevent->setProperty( "LOCATION", "Central Placa" ); // <span class="comment">property name - case independent</span>
|
102 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
103 |
-
$vevent->setProperty( "description", "This is a description" );
|
104 |
-
$vevent->setProperty( "comment", "This is a comment" );
|
105 |
-
$vevent->setProperty( "attendee", "attendee1@icaldomain.net" );
|
106 |
-
.. .
|
107 |
-
$vevent = & $v->newComponent( "vevent" ); // <span class="comment">create next event calendar component</span>
|
108 |
-
$vevent->setProperty( "dtstart", "20070401", array("VALUE" => "DATE"));// <span class="comment">alt. date format, now for an all-day event</span>
|
109 |
-
$vevent->setProperty( "organizer" , "boss@icaldomain.com" );
|
110 |
-
$vevent->setProperty( "summary", "ALL-DAY event" );
|
111 |
-
$vevent->setProperty( "description", "This is a description for an all-day event" );
|
112 |
-
$vevent->setProperty( "resources", "COMPUTER PROJECTOR" );
|
113 |
-
$vevent->setProperty( "rrule", array( "FREQ" => "WEEKLY", "count" => 4));// <span class="comment">weekly, four occasions</span>
|
114 |
-
$vevent->parse( "LOCATION:1CP Conference Room 4350" ); // <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( "iCalcreator.class.php" );
|
123 |
-
$config = array( "unique_id" => "icaldomain.com" ); // <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( "directory" => "calendar", "filename" => "file.ics" );
|
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( "url", "http://www.aDomain.net/file.ics" ); // <span class="comment">iCalcreator also support parse from or write to remote files</span>
|
133 |
-
$v->parse();
|
134 |
-
|
135 |
-
$v->setProperty( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
136 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
137 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
138 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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( "iCalcreator.class.php" );
|
146 |
-
$config = array( "unique_id" => "icaldomain.com", "directory" => "calendar", "filename" => "file.ics" );
|
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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
153 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
154 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
155 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <span class="comment">required of some calendar software</span>
|
156 |
-
|
157 |
-
while( $vevent = $v->getComponent( "vevent" )) { // <span class="comment">read events, one by one</span>
|
158 |
-
$uid = $vevent->getProperty( "uid" ); // <span class="comment">uid required, one occurence (unique id/key for component)</span>
|
159 |
-
.. .
|
160 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="comment">dtstart required, one occurence</span>
|
161 |
-
.. .
|
162 |
-
if( $description = $vevent->getProperty( "description", 1 )) { // <span class="comment">description optional, first occurence</span>
|
163 |
-
.. . // <span class="comment">edit the description</span>
|
164 |
-
$vevent->setProperty( "description", $description, FALSE, 1 ); // <span class="comment">update/replace the description</span>
|
165 |
-
}
|
166 |
-
while( $comment = $vevent->getProperty( "comment" )) { // <span class="comment">comment optional, may occur more than once </span>
|
167 |
-
.. . // <span class="comment">manage comments</span>
|
168 |
-
}
|
169 |
-
.. .
|
170 |
-
while( $vevent->deleteProperty( "attendee" ))
|
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( "iCalcreator.class.php" );
|
181 |
-
$config = array( "unique_id" => "icaldomain.com" ); // <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( "url", "http://www.aDomain.net/file.ics" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
189 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
190 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
191 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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 => $yearArray) {
|
196 |
-
foreach( $yearArray as $month => $monthArray ) {
|
197 |
-
foreach( $monthArray as $day => $dailyEventsArray ) {
|
198 |
-
foreach( $dailyEventsArray as $vevent ) {
|
199 |
-
$currddate = $event->getProperty( "x-current-dtstart" );
|
200 |
-
// <span class="comment">if member of a recurrence set (2nd occurence etc)</span>
|
201 |
-
// <span class="comment">returns array( "x-current-dtstart"</span>
|
202 |
-
// <span class="comment"> , <(string) date("Y-m-d [H:i:s][timezone/UTC offset]")>)</span>
|
203 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="comment">dtstart required, one occurence, (orig. start date)</span>
|
204 |
-
$summary = $vevent->getProperty( "summary" );
|
205 |
-
$description = $vevent->getProperty( "description" );
|
206 |
-
.. .
|
207 |
-
.. .
|
208 |
-
}
|
209 |
-
}
|
210 |
-
}
|
211 |
-
}
|
212 |
-
|
213 |
-
$valueOcurr = $v->getProperty( "CATEGORIES" ); // <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 => $ocurr ) {
|
216 |
-
.. .
|
217 |
-
}
|
218 |
-
|
219 |
-
$selectSpec = array( "CATEGORIES" => "course1" );
|
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( "iCalcreator.class.php" );
|
228 |
-
$config = array( "unique_id" => "icaldomain.com" ); // <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( "method", "PUBLISH" ); // <span class="comment">required of some calendar software</span>
|
232 |
-
$v->setProperty( "x-wr-calname", "Calendar Sample" ); // <span class="comment">required of some calendar software</span>
|
233 |
-
$v->setProperty( "X-WR-CALDESC", "Calendar Description" ); // <span class="comment">required of some calendar software</span>
|
234 |
-
$v->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" ); // <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( "directory" => "depot", "filename" => "calendar.ics" );
|
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( "url" => "http://www.aDomain.net/file.ics" );
|
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 "Europe/Stockholm",
|
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( "unique_id" => "domain.com" );
|
273 |
-
$vcalendar = new vcalendar( $config );
|
274 |
-
$vcalendar->setProperty( "method", "PUBLISH" )
|
275 |
-
$vcalendar->setProperty( "x-wr-calname", "Calendar Sample" );
|
276 |
-
$vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" );
|
277 |
-
$uuid = "3E26604A-50F4-4449-8B3E-E4F4932D05B5";
|
278 |
-
$vcalendar->setProperty( "X-WR-RELCALID", $uuid );
|
279 |
-
$vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );
|
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*("BEGIN" ":" "VCALENDAR" CRLF</p>
|
474 |
-
<p class="center">icalbody</p>
|
475 |
-
<p class="center">"END" ":" "VCALENDAR" CRLF)</p>
|
476 |
-
<br />
|
477 |
-
icalbody = calprops component
|
478 |
-
<br />
|
479 |
-
calprops = 2*(
|
480 |
-
<br />
|
481 |
-
<p class="center">"prodid" and "version" 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">"calscale"and "method"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 = "BEGIN" ":" iana-token CRLF</p>
|
490 |
-
<p class="center">1*contentline</p>
|
491 |
-
<p class="center">"END" ":" iana-token CRLF</p>
|
492 |
-
<p class="center">x-comp = "BEGIN" ":" x-name CRLF</p>
|
493 |
-
<p class="center">1*contentline</p>
|
494 |
-
<p class="center">"END" ":" 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">"BEGIN" ":" "VEVENT" CRLF</p>
|
501 |
-
<p class="center">eventprop *alarmc</p>
|
502 |
-
<p class="center">"END" ":" "VEVENT" 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 "<a href="#DTEND">dtend</a>" or "<a href="#DURATION">duration</a>" may appear in a "eventprop", </p>
|
510 |
-
<p class="center">but "<a href="#DTEND">dtend</a>" and "<a href="#DURATION">duration</a>" MUST NOT occur in the same "eventprop"</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">"BEGIN" ":" "VTODO" CRLF</p>
|
522 |
-
<p class="center">todoprop *alarmc</p>
|
523 |
-
<p class="center">"END" ":" "VTODO" 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 "<a href="#DUE">due</a>" or "<a href="#DURATION">duration</a>" may appear in a "todoprop",</p>
|
530 |
-
<p class="center"> but "<a href="#DUE">due</a>" and "<a href="#DURATION">duration</a>" MUST NOT occur in the same "todoprop"</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 = "BEGIN" ":" "VJOURNAL" CRLF</p>
|
542 |
-
<p class="center">jourprop</p>
|
543 |
-
<p class="center">"END" ":" "VJOURNAL" 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">"BEGIN" ":" "VFREEBUSY" CRLF</p>
|
559 |
-
<p class="center">fbprop</p>
|
560 |
-
<p class="center">"END" ":" "VFREEBUSY" 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">"BEGIN" ":" "VALARM" CRLF</p>
|
573 |
-
<p class="center">(audioprop / dispprop / emailprop / procprop)</p>
|
574 |
-
<p class="center">"END" ":" "VALARM" CRLF</p> audioprop = 2*(
|
575 |
-
<p class="center">"<a href="#ACTION">action</a>" and "<a href="#TRIGGER">trigger</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DURATION">duration</a>" and "<a href="#REPEAT">repeat</a>" 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">"<a href="#DESCRIPTION">description</a>" 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">"BEGIN" ":" "VTIMEZONE" CRLF</p>
|
625 |
-
2*(
|
626 |
-
<p class="center">"<a href="#TZID">tzid</a>" is required, but MUST NOT occur more than once</p>
|
627 |
-
<p class="center"><a href="#TZID">tzid</a> / </p>
|
628 |
-
<p class="center">"<a href="#LAST-MODIFIED">last-mod</a>" and "<a href="#TZURL">tzurl</a>" 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 "standardc" or "daylightc" 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">"END" ":" "VTIMEZONE" CRLF</p>
|
636 |
-
<p class="center">standardc = "BEGIN" ":" "STANDARD" CRLF</p>
|
637 |
-
<p class="center">tzprop</p>
|
638 |
-
<p class="center">"END" ":" "STANDARD" CRLF</p>
|
639 |
-
<p class="center">daylightc = "BEGIN" ":" "DAYLIGHT" CRLF</p>
|
640 |
-
<p class="center">tzprop</p>
|
641 |
-
<p class="center">"END" ":" "DAYLIGHT" 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 or 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"> </td>
|
683 |
-
</tr>
|
684 |
-
<tr>
|
685 |
-
<td> </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 a l a r m</a></td>
|
691 |
-
</tr>
|
692 |
-
<tr>
|
693 |
-
<td class="bb"> </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"> </td>
|
702 |
-
<td class="blb"> </td>
|
703 |
-
<td class="blb"> </td>
|
704 |
-
<td class="blb"> </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"> </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"> </td>
|
728 |
-
<td class="blb"> </td>
|
729 |
-
<td class="blb">1-m</td>
|
730 |
-
<td class="blb"> </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"> </td>
|
738 |
-
<td class="blb"> </td>
|
739 |
-
<td class="blb"> </td>
|
740 |
-
<td class="blb"> </td>
|
741 |
-
<td class="blb"> </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"> </td>
|
749 |
-
<td class="blb"> </td>
|
750 |
-
<td class="blb"> </td>
|
751 |
-
<td class="blb"> </td>
|
752 |
-
<td class="blb"> </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"> </td>
|
761 |
-
<td class="blb"> </td>
|
762 |
-
<td class="blb"> </td>
|
763 |
-
<td class="blb"> </td>
|
764 |
-
</tr>
|
765 |
-
<tr>
|
766 |
-
<td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
|
767 |
-
<td class="blb"> </td>
|
768 |
-
<td class="blb">0-1</td>
|
769 |
-
<td class="blb"> </td>
|
770 |
-
<td class="blb"> </td>
|
771 |
-
<td class="blb"> </td>
|
772 |
-
<td class="blb"> </td>
|
773 |
-
<td class="blb"> </td>
|
774 |
-
<td class="blb"> </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"> </td>
|
783 |
-
<td class="blb"> </td>
|
784 |
-
<td class="blb"> </td>
|
785 |
-
<td class="blb"> </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"> </td>
|
793 |
-
<td class="blb"> </td>
|
794 |
-
<td class="blb"> </td>
|
795 |
-
<td class="blb"> </td>
|
796 |
-
<td class="blb"> </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"> </td>
|
804 |
-
<td class="blb"> </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"> </td>
|
813 |
-
<td class="blb"> </td>
|
814 |
-
<td class="blb">0-1</td>
|
815 |
-
<td class="blb"> </td>
|
816 |
-
<td class="blb"> </td>
|
817 |
-
<td class="blb"> </td>
|
818 |
-
<td class="blb"> </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"> </td>
|
827 |
-
<td class="blb"> </td>
|
828 |
-
<td class="blb"> </td>
|
829 |
-
<td class="blb"> </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"> </td>
|
838 |
-
<td class="blb"> </td>
|
839 |
-
<td class="blb"> </td>
|
840 |
-
<td class="blb"> </td>
|
841 |
-
</tr>
|
842 |
-
<tr>
|
843 |
-
<td class="bb"><a class="ref" href="#DUE">due</a></td>
|
844 |
-
<td class="blb"> </td>
|
845 |
-
<td class="blb">0*1</td>
|
846 |
-
<td class="blb"> </td>
|
847 |
-
<td class="blb"> </td>
|
848 |
-
<td class="blb"> </td>
|
849 |
-
<td class="blb"> </td>
|
850 |
-
<td class="blb"> </td>
|
851 |
-
<td class="blb"> </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"> </td>
|
858 |
-
<td class="blb">0-1</td>
|
859 |
-
<td class="blb">0 or 1=1</td>
|
860 |
-
<td class="blb">0 or 1=1</td>
|
861 |
-
<td class="blb">0 or 1=1</td>
|
862 |
-
<td class="blb">0 or 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"> </td>
|
870 |
-
<td class="blb"> </td>
|
871 |
-
<td class="blb"> </td>
|
872 |
-
<td class="blb"> </td>
|
873 |
-
<td class="blb"> </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"> </td>
|
881 |
-
<td class="blb"> </td>
|
882 |
-
<td class="blb"> </td>
|
883 |
-
<td class="blb"> </td>
|
884 |
-
<td class="blb"> </td>
|
885 |
-
</tr>
|
886 |
-
<tr>
|
887 |
-
<td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
|
888 |
-
<td class="blb"> </td>
|
889 |
-
<td class="blb"> </td>
|
890 |
-
<td class="blb"> </td>
|
891 |
-
<td class="blb">0-m</td>
|
892 |
-
<td class="blb"> </td>
|
893 |
-
<td class="blb"> </td>
|
894 |
-
<td class="blb"> </td>
|
895 |
-
<td class="blb"> </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"> </td>
|
902 |
-
<td class="blb"> </td>
|
903 |
-
<td class="blb"> </td>
|
904 |
-
<td class="blb"> </td>
|
905 |
-
<td class="blb"> </td>
|
906 |
-
<td class="blb"> </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"> </td>
|
915 |
-
<td class="blb"> </td>
|
916 |
-
<td class="blb"> </td>
|
917 |
-
<td class="blb"> </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"> </td>
|
924 |
-
<td class="blb"> </td>
|
925 |
-
<td class="blb"> </td>
|
926 |
-
<td class="blb"> </td>
|
927 |
-
<td class="blb"> </td>
|
928 |
-
<td class="blb"> </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"> </td>
|
937 |
-
<td class="blb"> </td>
|
938 |
-
<td class="blb"> </td>
|
939 |
-
<td class="blb"> </td>
|
940 |
-
</tr>
|
941 |
-
<tr>
|
942 |
-
<td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
|
943 |
-
<td class="blb"> </td>
|
944 |
-
<td class="blb">0-1</td>
|
945 |
-
<td class="blb"> </td>
|
946 |
-
<td class="blb"> </td>
|
947 |
-
<td class="blb"> </td>
|
948 |
-
<td class="blb"> </td>
|
949 |
-
<td class="blb"> </td>
|
950 |
-
<td class="blb"> </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"> </td>
|
957 |
-
<td class="blb"> </td>
|
958 |
-
<td class="blb"> </td>
|
959 |
-
<td class="blb"> </td>
|
960 |
-
<td class="blb"> </td>
|
961 |
-
<td class="blb"> </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"> </td>
|
969 |
-
<td class="blb"> </td>
|
970 |
-
<td class="blb"> </td>
|
971 |
-
<td class="blb"> </td>
|
972 |
-
<td class="blb"> </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"> </td>
|
980 |
-
<td class="blb"> </td>
|
981 |
-
<td class="blb"> </td>
|
982 |
-
<td class="blb"> </td>
|
983 |
-
<td class="blb"> </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"> </td>
|
991 |
-
<td class="blb"> </td>
|
992 |
-
<td class="blb"> </td>
|
993 |
-
<td class="blb"> </td>
|
994 |
-
<td class="blb"> </td>
|
995 |
-
</tr>
|
996 |
-
<tr>
|
997 |
-
<td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
|
998 |
-
<td class="blb"> </td>
|
999 |
-
<td class="blb"> </td>
|
1000 |
-
<td class="blb"> </td>
|
1001 |
-
<td class="blb"> </td>
|
1002 |
-
<td class="blb">0 or 1=1</td>
|
1003 |
-
<td class="blb">0 or 1=1</td>
|
1004 |
-
<td class="blb">0 or 1=1</td>
|
1005 |
-
<td class="blb">0 or 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"> </td>
|
1012 |
-
<td class="blb"> </td>
|
1013 |
-
<td class="blb"> </td>
|
1014 |
-
<td class="blb"> </td>
|
1015 |
-
<td class="blb"> </td>
|
1016 |
-
<td class="blb"> </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"> </td>
|
1024 |
-
<td class="blb"> </td>
|
1025 |
-
<td class="blb"> </td>
|
1026 |
-
<td class="blb"> </td>
|
1027 |
-
<td class="blb"> </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"> </td>
|
1036 |
-
<td class="blb"> </td>
|
1037 |
-
<td class="blb"> </td>
|
1038 |
-
<td class="blb"> </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"> </td>
|
1046 |
-
<td class="blb"> </td>
|
1047 |
-
<td class="blb"> </td>
|
1048 |
-
<td class="blb"> </td>
|
1049 |
-
<td class="blb"> </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"> </td>
|
1057 |
-
<td class="blb"> </td>
|
1058 |
-
<td class="blb"> </td>
|
1059 |
-
<td class="blb"> </td>
|
1060 |
-
<td class="blb"> </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"> </td>
|
1068 |
-
<td class="blb"> </td>
|
1069 |
-
<td class="blb"> </td>
|
1070 |
-
<td class="blb">1</td>
|
1071 |
-
<td class="blb"> </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"> </td>
|
1077 |
-
<td class="blb"> </td>
|
1078 |
-
<td class="blb"> </td>
|
1079 |
-
<td class="blb"> </td>
|
1080 |
-
<td class="blb"> </td>
|
1081 |
-
<td class="blb"> </td>
|
1082 |
-
<td class="blb"> </td>
|
1083 |
-
</tr>
|
1084 |
-
<tr>
|
1085 |
-
<td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
|
1086 |
-
<td class="blb"> </td>
|
1087 |
-
<td class="blb"> </td>
|
1088 |
-
<td class="blb"> </td>
|
1089 |
-
<td class="blb"> </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"> </td>
|
1102 |
-
<td class="blb"> </td>
|
1103 |
-
<td class="blb"> </td>
|
1104 |
-
<td class="blb"> </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"> </td>
|
1113 |
-
<td class="blb"> </td>
|
1114 |
-
<td class="blb"> </td>
|
1115 |
-
<td class="blb"> </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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1443 |
-
$vcalendar = new vcalendar( $config );
|
1444 |
-
$vcalendar->parse();
|
1445 |
-
if( !$vcalendar->deleteProperty( "method" ))
|
1446 |
-
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( "value"=> <value> ,"params" => <parameter array>)
|
1464 |
-
</p>
|
1465 |
-
<p class="label">Example 1</p>
|
1466 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1467 |
-
$vcalendar = new vcalendar( $config );
|
1468 |
-
$vcalendar->parse();
|
1469 |
-
$calscale = $vcalendar->getProperty( "calscale" );
|
1470 |
-
.. .
|
1471 |
-
</p>
|
1472 |
-
<p class="label">Example 2</p>
|
1473 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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 "RECURRENCE-ID-UID" (alt. "R-UID" ) from <b>ALL</b> components within calendar.<br />
|
1483 |
-
Outputs an array( *[<unique-property-value> => <number of ocurrency>] )<br />or an empty array if no hits.<br />
|
1484 |
-
If a property contains multiple values (ex. "RESOURCES:pc,developer" or "CATAGORIES:course1,courseB"), 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 "YYYYMMDD",
|
1488 |
-
"RECURRENCE-ID-UID"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."MAILTO:chair@ical.net".
|
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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1502 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1503 |
-
$vcalendar->setProperty( "calscale", "GREGORIAN" );
|
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 "GREGORIAN", implied when missing.
|
1512 |
-
<h5>Delete CALSCALE</h5>
|
1513 |
-
Remove CALSCALE from component.
|
1514 |
-
<p class="label">Format</p>
|
1515 |
-
<p class="format">deleteProperty( "calscale" )</p>
|
1516 |
-
<p class="label">Example</p>
|
1517 |
-
<p class="example">$vcalendar->deleteProperty( "CALSCALE" );</p>
|
1518 |
-
<h5>Get Calscale</h5>
|
1519 |
-
Fetch property value.
|
1520 |
-
<p class="label">Format</p>
|
1521 |
-
<p class="format">getProperty( "calscale" )</p>
|
1522 |
-
<p class="label">Example</p>
|
1523 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1524 |
-
$vcalendar = new vcalendar( $config );
|
1525 |
-
$vcalendar->parse();
|
1526 |
-
$calscale = $vcalendar->getProperty( "calscale" );
|
1527 |
-
.. .
|
1528 |
-
</p>
|
1529 |
-
<h5>Set CALSCALE</h5>
|
1530 |
-
Insert property value.
|
1531 |
-
<p class="label">Format</p>
|
1532 |
-
<p class="format">setProperty( "calscale", string value )</p>
|
1533 |
-
<p class="label">Example</p>
|
1534 |
-
<p class="example">
|
1535 |
-
$config = array( "unique_id" => "domain.com" );
|
1536 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1537 |
-
$vcalendar->setProperty( "calscale", "GREGORIAN" );
|
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( "METHOD" )</p>
|
1555 |
-
<p class="label">Example</p>
|
1556 |
-
<p class="example">$vcalendar->deleteProperty( "METHOD" );</p>
|
1557 |
-
<h5>Get METHOD</h5>
|
1558 |
-
Fetch property value.
|
1559 |
-
<p class="label">Format</p>
|
1560 |
-
<p class="format">getProperty( "method" );</p>
|
1561 |
-
<p class="label">Example</p>
|
1562 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
1563 |
-
$vcalendar = new vcalendar( $config );
|
1564 |
-
$vcalendar->parse();
|
1565 |
-
$method = $vcalendar->getProperty( "method" )
|
1566 |
-
.. .
|
1567 |
-
</p>
|
1568 |
-
<h5>Set METHOD</h5>
|
1569 |
-
Insert property value.
|
1570 |
-
<p class="label">Format</p>
|
1571 |
-
<p class="format">setProperty( "method", string value )</p>
|
1572 |
-
<p class="label">Example</p>
|
1573 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
1574 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1575 |
-
$vcalendar->setProperty( "method", "PUBLISH" )
|
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( "version" )</p>
|
1589 |
-
<p class="label">Example</p>
|
1590 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1591 |
-
$vcalendar = new vcalendar( $config );
|
1592 |
-
$vcalendar->parse();
|
1593 |
-
$version = $vcalendar->getProperty( "version" )
|
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( "version", string version )</p>
|
1601 |
-
<p class="label">Example</p>
|
1602 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
1603 |
-
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
|
1604 |
-
$vcalendar->setProperty( "version", "2.0" )
|
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 "X-" 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( "<X-PROPERTY>" )</p>
|
1620 |
-
<p class="label">Example 1</p>
|
1621 |
-
<p class="example">$vcalendar->deleteProperty( "<X-PROPERTY>" );</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( "<X-PROPERTY>" )</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( "value" => propertyData<span class="ref">2</span> )
|
1635 |
-
, "params" => params<span class="ref"> 3</span>))
|
1636 |
-
</p>
|
1637 |
-
<p class="label">Example 1</p>
|
1638 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1647 |
-
$vcalendar = new vcalendar( $config );
|
1648 |
-
$vcalendar->parse();
|
1649 |
-
if( $xprop = $vcalendar->getProperty( "X-WR-TIMEZONE" )) {
|
1650 |
-
//<span class="ref">if exists, read X-WR-TIMEZONE x-prop</span>
|
1651 |
-
.. .
|
1652 |
-
</p>
|
1653 |
-
<p class="comment">$xprop = array( "X-WR-TIMEZONE", propertyData<span class="ref">2</span> )</p>
|
1654 |
-
<p class="label">Example 3</p>
|
1655 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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( "value " => propertyData<span class="ref">2</span> )
|
1663 |
-
, "params "=> params<span class="ref"> 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 => 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 "X-" prefix
|
1671 |
-
propertyData<span class="ref">2</span> = Value type TEXT
|
1672 |
-
params<span class="ref">3</span> = array( ["LANGUAGE" => "<lang>"] [, xparam] )
|
1673 |
-
xparam = *[ xparamkey => 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( "unique_id" => "domain.com" );
|
1678 |
-
$vcalendar = new vcalendar( $config ); // initiate new CALENDAR
|
1679 |
-
// <span class="ref">set some X-properties.. .</span>
|
1680 |
-
$vcalendar->setProperty( "x-wr-calname", "Calendar Sample" )
|
1681 |
-
$vcalendar->setProperty( "X-WR-CALDESC", "Calendar Description" );
|
1682 |
-
$vcalendar->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );
|
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. "vevent") 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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1704 |
-
$vcalendar = new vcalendar( $config );
|
1705 |
-
$vcalendar->parse();
|
1706 |
-
$vcalendar->deleteComponent( 1 );
|
1707 |
-
$vcalendar->deleteComponent( "vtodo", 2 );
|
1708 |
-
$vcalendar->deleteComponent( "20070803T194810CEST-0123U3PXiX@domain.com");
|
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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1714 |
-
$vcalendar = new vcalendar( $config );
|
1715 |
-
$vcalendar->parse();
|
1716 |
-
.. .
|
1717 |
-
while( $vcalendar->deleteComponent( "vevent"))
|
1718 |
-
continue;
|
1719 |
-
.. .
|
1720 |
-
$vtodo = $vcalendar->getComponent( 'vtodo' );
|
1721 |
-
while( $vtodo->deleteComponent( "valarm"))
|
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 "SUMMARY" ,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."MAILTO:chair@ical.net".
|
1757 |
-
|
1758 |
-
<p class="format">getComponent( array(*[string propertyName => string uniqueValue] ))</p>
|
1759 |
-
<p class="comment">propertyName = property name, above
|
1760 |
-
propertyData = unique property value (strict case),
|
1761 |
-
date format "YYYYMMDD" (if any side is DATE, only dates are used),
|
1762 |
-
datetime format "YYYYMMDDTHHMMSS"
|
1763 |
-
</p>
|
1764 |
-
<p class="label">Example 1</p>
|
1765 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1784 |
-
$vcalendar = new vcalendar( $config );
|
1785 |
-
$vcalendar->parse();
|
1786 |
-
if( $comp = $vcalendar->getComponent( "vtodo", 2 ) {
|
1787 |
-
.. .
|
1788 |
-
}
|
1789 |
-
.. .
|
1790 |
-
</p>
|
1791 |
-
<p class="label">Example 4</p>
|
1792 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1793 |
-
$vcalendar = new vcalendar( $config );
|
1794 |
-
$vcalendar->parse();
|
1795 |
-
$uid = "20070803T194810CEST-0123U3PXiX@domain.com";
|
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 "RANGE" ("THISANDPRIOR" and/or "THISANDFUTURE") has no effect.<br />
|
1828 |
-
<br />
|
1829 |
-
This function requires calendar components in order, i.e. execute <a href="#sort">sort</a> before "selectComponents", 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 |
-
"X-CURRENT-DTSTART" and opt. also "X-CURRENT-DTEND" alt. "X-CURRENT-DUE",
|
1839 |
-
has been created with a TEXT content, "Y-m-d [H:i:s][timezone/UTC offset]"
|
1840 |
-
showing the current start and opt. also end alt. due date.<br />
|
1841 |
-
Also a "X-RECURRENCE" 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 => output : array[] (ignores split)
|
1852 |
-
FALSE (default) =>
|
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( "unique_id" => "domain.com",
|
1866 |
-
"directory" => "import",
|
1867 |
-
"filename" => "file.ics" );
|
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 => $year_arr ) {
|
1874 |
-
foreach( $year_arr as $month => $month_arr ) {
|
1875 |
-
foreach( $month_arr as $day => $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 |
-
// <(string) date("Y-m-d [H:i:s][timezone/UTC offset]")>)</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 "SUMMARY" ,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. "MAILTO:chair@ical.net".
|
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 => 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( "unique_id" => "domain.com",
|
1901 |
-
"directory" => "import",
|
1902 |
-
"filename" => "file.ics" );
|
1903 |
-
$vcalendar = new vcalendar( $config );
|
1904 |
-
$vcalendar->parse();
|
1905 |
-
$vcalendar->sort();
|
1906 |
-
$searchArray = array( "PRIORITY" => 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->setProperty("X-WR-CALDESC", "High-Medium events");
|
1912 |
-
foreach( $mediumHighPrioArr as $mediumHighPrioComponent )
|
1913 |
-
$mediumHighPrioCal->setComponent( $mediumHighPrioComponent );
|
1914 |
-
$mediumHighPrioCal->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( "unique_id" => "domain.com", "filename" => "file.ics" );
|
1947 |
-
$vcalendar = new vcalendar( $config );
|
1948 |
-
$vcalendar->parse();
|
1949 |
-
$vevent = vcalendar->getComponent( 1 ); //<span class="comment">fetch first EVENT</span>
|
1950 |
-
$vevent->setProperty( "dtstart" //<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 "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), are supported. A remote file, URL, <b>must</b> be prefixed by "http://" ("webcal://") 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 "file_get_contents( 'filename')"
|
1977 |
-
array calendarContent
|
1978 |
-
ex. result from "file( 'filename', FILE_IGNORE_NEW_LINES )"</p>
|
1979 |
-
<p class="label">parse example 1</p>
|
1980 |
-
<p class="example">$config = array( "unique_id" => "domain.com", "filename" => "file.ics" );
|
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( "unique_id" => "domain.com",
|
1988 |
-
"url" => "http://www.ical.net/calendars/calendar.ics" );
|
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( "unique_id" => "domain.com",
|
1995 |
-
"url" => "http://www.ical.net/calendars/calendar.ics" );
|
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( "unique_id" => "domain.com",
|
2015 |
-
"directory" => "import" );
|
2016 |
-
$vcalendar = new vcalendar( $config );
|
2017 |
-
|
2018 |
-
$vcalendar->setConfig( "filename", "file1.ics" );
|
2019 |
-
$vcalendar->parse();
|
2020 |
-
|
2021 |
-
$vcalendar->setConfig( "filename", "file2.ics" );
|
2022 |
-
$vcalendar->parse();
|
2023 |
-
|
2024 |
-
$vcalendar->sort();
|
2025 |
-
$vcalendar->setConfig( "directory", "export" );
|
2026 |
-
$vcalendar->setConfig( "filename", "icalmerge.ics" );
|
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( "YmdHis" ).".ics" </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( "unique_id" => "domain.com" );
|
2055 |
-
$vcalendar = new vcalendar( $config );
|
2056 |
-
.. .
|
2057 |
-
$vevent = & $vcalendar->newComponent( 'vevent' );
|
2058 |
-
$vevent->setProperty( "dtstart", array( "year" => 2007
|
2059 |
-
, "month" => 4
|
2060 |
-
, "day" => 1
|
2061 |
-
, "hour" => 19 ));
|
2062 |
-
$vevent->setProperty( "duration", 0, 0, 3 ));
|
2063 |
-
$vevent->setProperty( "LOCATION", "Central Plaza" );
|
2064 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
2065 |
-
.. .
|
2066 |
-
$vcalendar->returnCalendar();
|
2067 |
-
</p>
|
2068 |
-
<p class="label">Example 2</p>
|
2069 |
-
<p class="example">$config = array( "unique_id" => "domain.com",
|
2070 |
-
"directory" => "import",
|
2071 |
-
"filename" => "file.ics" );
|
2072 |
-
$vcalendar = new vcalendar( $config );
|
2073 |
-
$vcalendar->parse();
|
2074 |
-
$utf8Encode = TRUE;
|
2075 |
-
$hacPar = 'HTTP_ACCEPT_ENCODING';
|
2076 |
-
if( isset( $_SERVER[$hacPar] ) &&
|
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( "YmdHis" ).".ics" </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 "allow_url_fopen" is enabled, remote files, URLs; protocol "http" ("webcal"), 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( "directory" => "depot",
|
2105 |
-
"filename" => "calendar.ics" ));
|
2106 |
-
$result = $vcalendar->saveCalendar();
|
2107 |
-
if( !$result )
|
2108 |
-
echo "error when saving.. ."
|
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 |
-
(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> / <a href="#VTIMEZONE">DAYLIGHT</a> / <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( "unique_id" => "domain.com",
|
2128 |
-
"directory" => "import",
|
2129 |
-
"filename" => "file.ics" );
|
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: "<a href="#ATTENDEE">ATTENDEE</a>" / "<a href="#CATEGORIES">CATEGORIES</a>" / "<a href="#DTSTAMP">DTSTAMP</a>" / "<a href="#LOCATION">LOCATION"</a>" /
|
2140 |
-
"<a href="#ORGANIZER">ORGANIZER</a>" /"<a href="#RESOURCES">RESOURCES</a>" / "<a href="#PRIORITY">PRIORITY</a>" / "<a href="#STATUS">STATUS</a>" / "<a href="#SUMMARY">SUMMARY</a>"
|
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( "directory", "depot" );
|
2162 |
-
$vcalendar->setConfig( "filename", "calendar.ics" );
|
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"> </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"> </td>
|
2197 |
-
<td class="bl bb ref"> </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"> </td>
|
2203 |
-
<td class="bl bb ref"> </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"> </td>
|
2209 |
-
<td class="bl bb ref"> </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"> </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"> </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"> </td>
|
2227 |
-
<td class="bl bb ref"> </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"> </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"> </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"> </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"> </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"> </td>
|
2257 |
-
<td class="bl bb ref"> </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 => mixed value
|
2277 |
-
*[, string key => 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 => mixed value *[,string key => mixed value]))</p>
|
2285 |
-
<p class="label">Example 1</p>
|
2286 |
-
<p class="example">$config = array( "unique_id" => "domain.com",
|
2287 |
-
"directory" => "import",
|
2288 |
-
"filename" => "file.ics" );
|
2289 |
-
$vcalendar = new vcalendar( $config );
|
2290 |
-
.. .
|
2291 |
-
</p>
|
2292 |
-
When creating a new calendar component.
|
2293 |
-
<p class="format">component( array( string key => mixed value *[,string key => mixed value]))</p>
|
2294 |
-
<p class="label">Example 2</p>
|
2295 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
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 "setConfig" 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( "unique_id" => "domain.com",
|
2316 |
-
"directory" => "import",
|
2317 |
-
"filename" => "file.ics" );
|
2318 |
-
$vcalendar = new vcalendar();
|
2319 |
-
$vcalendar->setConfig( $config );
|
2320 |
-
.. .
|
2321 |
-
</p>
|
2322 |
-
<p class="label">Example 2</p>
|
2323 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
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( "directory", "depot" );
|
2333 |
-
.. .
|
2334 |
-
</p>
|
2335 |
-
<p class="label">Example 2</p>
|
2336 |
-
<p class="example">$vevent = new vevent();
|
2337 |
-
$vevent->setConfig( "unique_id", "domain.com" );
|
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 ( "ordno" => int ordno,
|
2356 |
-
// <span class="ref">order number (1st=1, 2nd=2..)</span>
|
2357 |
-
, "type" => string type
|
2358 |
-
// <span class="ref">component type (vevent, vtodo.. .</span>
|
2359 |
-
, "uid" => 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 |
-
, "props" =>
|
2362 |
-
array( *[ propertyName => Property count ])
|
2363 |
-
// <span class="ref">for every set property</span>
|
2364 |
-
, "sub" => 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( "unique_id" => "domain.com",
|
2368 |
-
"directory" => "import",
|
2369 |
-
"filename" => "file.ics" );
|
2370 |
-
$vcalendar = new vcalendar( $config );
|
2371 |
-
$vcalendar->parse();
|
2372 |
-
$compsinfo = $vcalendar->getConfig( "compsinfo" );
|
2373 |
-
foreach( $compsinfo as compinfo) {
|
2374 |
-
echo " order number : ".$compinfo["ordno"]."<br />";
|
2375 |
-
echo " type : ".$compinfo["type"]."<br />";
|
2376 |
-
echo " UID : ".$compinfo["uid"]."<br />";
|
2377 |
-
foreach( $compinfo["props"] as $propertyName => $propertyCount )
|
2378 |
-
echo " $propertyName = $propertyCount";
|
2379 |
-
if( is_array( $compinfo["sub"] )) {
|
2380 |
-
foreach( $compinfo["sub"] as $subcompinfo ) {
|
2381 |
-
echo " order number : ".$subcompinfo["ordno"]."<br />";
|
2382 |
-
/* .. dito if subcomponents exists .. . */
|
2383 |
-
}
|
2384 |
-
}
|
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 "<b>.</b>".
|
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( "fileinfo" );</p>
|
2413 |
-
<p class="comment">output = array( <directory>, <filename>, <filesize> )</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( "YmdHis" ).".ics";</p>
|
2420 |
-
<p class="format">$filename = date( "YmdHis" ).".xml"; <span class="comment"> // if <a href="#Format">format</a> set to "xcal"</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 "saveCalendar()"<br />
|
2435 |
-
or<br />
|
2436 |
-
- after a "setConfig( "directory" / "filename" )" and before/after "parse()".<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, "iCal"/"xCal", any case.
|
2444 |
-
<br />
|
2445 |
-
"iCal" is default (rfc2445), "xCal" 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 "setConfig( "language", .." at component level will be used, if set,
|
2455 |
-
otherwise language from "setConfig( "language", .." 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 "\r\n".
|
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["SERVER_NAME"] )
|
2482 |
-
when running in a web server environment or "localhost" 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 "http" ("webcal") is supported,
|
2496 |
-
i.e. <b>must</b> be prefixed by "http://" ("webcal://") 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 "getConfig( 'filename' )".
|
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( "unique_id" => "domain.com",
|
2507 |
-
"url", "http://www.iCal.net/depot/calendar.ics" );
|
2508 |
-
$vcalendar = new vcalendar( $config );
|
2509 |
-
$vcalendar->parse();
|
2510 |
-
$vcalendar->sort();
|
2511 |
-
.. .
|
2512 |
-
.. .
|
2513 |
-
$vcalendar->setConfig( "directory", "depot" );
|
2514 |
-
$vcalendar->saveCalendar(); // <span class="ref">local save in "depot" 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 "January 1 1970 00:00:00 GMT" can force a PHP date command to generate an error or set date to "January 1 1970".
|
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( "unique_id" => "domain.com",
|
2554 |
-
"directory" => "import",
|
2555 |
-
"filename" => "file.ics" );
|
2556 |
-
$vcalendar = new vcalendar( $config );
|
2557 |
-
$vcalendar->parse();
|
2558 |
-
$e = $vcalendar->getComponent( "vevent" );
|
2559 |
-
while( $e->deleteProperty( "comment" ))
|
2560 |
-
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("value" => <value>
|
2578 |
-
,"params"=> <parameter array>)
|
2579 |
-
</p>
|
2580 |
-
<p class="label">Example</p>
|
2581 |
-
<p class="example">$config = array( "unique_id" => "domain.com",
|
2582 |
-
"directory" => "import",
|
2583 |
-
"filename" => "file.ics" );
|
2584 |
-
$vcalendar = new vcalendar( $config );
|
2585 |
-
$vcalendar->parse();
|
2586 |
-
while( $vevent = $vcalendar->getComponent( "vevent" )) {
|
2587 |
-
$dtstart = $vevent->getProperty( "dtstart" ); // <span class="ref">one occurrence</span>
|
2588 |
-
$description = $vevent->getProperty( "description" ); // <span class="ref">one occurrence</span>
|
2589 |
-
while( $comment = $vevent->getProperty( "comment" )) {
|
2590 |
-
// <span class="ref">MAY occur more than once</span>
|
2591 |
-
.. .
|
2592 |
-
}
|
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 "BEGIN:VALARM", last as "END:VALARM"
|
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( "dtstart"
|
2677 |
-
, array("year"=>2007,"month"=>4,"day"=>1,"hour"=>19));
|
2678 |
-
$vevent->setProperty( "duration", 0, 0, 3 ));
|
2679 |
-
$vevent->setProperty( "LOCATION", "Central Plaza" );
|
2680 |
-
$vevent->setProperty( "summary", "PHP summit" );
|
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 /> "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE". 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( "Action" )</p>
|
2693 |
-
<p class="label">Example</p>
|
2694 |
-
<p class="example">$valarm->deleteProperty( "Action" );</p>
|
2695 |
-
<h5>Get ACTION</h5>
|
2696 |
-
Fetch property value.
|
2697 |
-
<p class="label">Format 1</p>
|
2698 |
-
<p class="format">getProperty( "Action" )</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( "Action", FALSE , TRUE )</p>
|
2702 |
-
<p class="comment">output = array( "value" => actionValue<span class="ref">1</span>
|
2703 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
2704 |
-
<p class="label">Example</p>
|
2705 |
-
<p class="example">$action = $valarm->getProperty( "action" );</p>
|
2706 |
-
<h5>Set ACTION</h5>
|
2707 |
-
Insert property value.
|
2708 |
-
<p class="label">Format</p>
|
2709 |
-
<p class="format">setProperty( "Action", actionValue [, xparam ] )</p>
|
2710 |
-
<p class="comment">actionValue<span class="ref">1</span> = one of "AUDIO" / "DISPLAY" / "EMAIL" / "PROCEDURE"
|
2711 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
2712 |
-
<p class="label">Example</p>
|
2713 |
-
<p class="example">$valarm->setProperty( "action", "DISPLAY" );</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 "ALARM" ("ACTION" "procedure"),
|
2721 |
-
OPTIONAL and MUST NOT occur more than once in an "ALARM" ("ACTION" "audio") 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> ("ACTION" "email") 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( "ATTACH" )</p>
|
2729 |
-
<p class="label">Example 1</p>
|
2730 |
-
<p class="example">$valarm->deleteProperty( "ATTACH" );</p>
|
2731 |
-
<p class="label">Example 2</p>
|
2732 |
-
Delete ATTACH property no 2.
|
2733 |
-
<p class="format">$valarm->deleteProperty( "ATTACH", 2 );</p>
|
2734 |
-
<p class="label">Example 3</p>
|
2735 |
-
Deleting all ATTACH properties.
|
2736 |
-
<p class="example">while( $valarm->deleteProperty( "ATTACH" ))
|
2737 |
-
continue;</p>
|
2738 |
-
<h5>Get ATTACH</h5>
|
2739 |
-
Fetch property value.
|
2740 |
-
<p class="label">Format 1</p>
|
2741 |
-
<p class="format">getProperty( "Attach" )</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( "ATTACH", propOrderNo/FALSE , TRUE )</p>
|
2745 |
-
<p class="comment">output = array( "value" => attachValue<span class="ref">1</span>
|
2746 |
-
, "params" => params<span class="ref">2</span> )</p>
|
2747 |
-
<p class="label">Format 3</p>
|
2748 |
-
<p class="format">getProperty( "Attach", propOrderNo )</p>
|
2749 |
-
<p class="comment">Get propOrderNo ATTACH</p>
|
2750 |
-
<p class="label">Example</p>
|
2751 |
-
<p class="example">$attach = $valarm->getProperty( "attach" );</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( "attach", 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( [ "ENCODING" => "BASE64",
|
2760 |
-
"VALUE" => "BINARY" ]
|
2761 |
-
[, "FMTTYPE" => contentType ]
|
2762 |
-
[, 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 => xparamvalue ]
|
2767 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
2768 |
-
<p class="label">Example</p>
|
2769 |
-
<p class="example">$vevent->setProperty( "attach"
|
2770 |
-
, "ftp://domain.com/pub/docs/agenda.doc"
|
2771 |
-
, array( "FMTTYPE" => "application/binary" ));
|
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 ("ACTION" "email"), 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( "ATTENDEE" )</p>
|
2786 |
-
<p class="label">Example 1</p>
|
2787 |
-
<p class="example">$valarm->deleteProperty( "ATTENDEE" );</p>
|
2788 |
-
<p class="label">Example 2</p>
|
2789 |
-
Delete ATTENDEE property no 2.
|
2790 |
-
<p class="example">$valarm->deleteProperty( "ATTENDEE", 2 );</p>
|
2791 |
-
<p class="label">Example 3</p>
|
2792 |
-
Deleting all ATTENDEE properties.
|
2793 |
-
<p class="example">while( $valarm->deleteProperty( "ATTENDEE" ))
|
2794 |
-
continue;</p>
|
2795 |
-
<h5>Get ATTENDEE</h5>
|
2796 |
-
Fetch property value.
|
2797 |
-
<p class="label">Format 1</p>
|
2798 |
-
<p class="format">getProperty( "Attendee" )</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( "ATTENDEE", propOrderNo/FALSE , TRUE )</p>
|
2802 |
-
<p class="comment">output = array( "value" => attendeeValue<span class="ref">1</span>
|
2803 |
-
, "params" => array( params<span class="ref">2</span> ))</p>
|
2804 |
-
<p class="label">Format 3</p>
|
2805 |
-
<p class="format">getProperty( "ATTENDEE", propOrderNo )</p>
|
2806 |
-
<p class="comment">Get propOrderNo ATTENDEE</p>
|
2807 |
-
<p class="label">Example</p>
|
2808 |
-
<p class="example">$attendee = $valarm->getProperty( "attendee" );</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( "attendee", 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" => "INDIVIDUAL"
|
2825 |
-
(An individual, <b>Default</b>)
|
2826 |
-
/ "GROUP"
|
2827 |
-
(A group of individuals)
|
2828 |
-
/ "RESOURCE"
|
2829 |
-
(A physical resource)
|
2830 |
-
/ "ROOM"
|
2831 |
-
(A room resource)
|
2832 |
-
/ "UNKNOWN"
|
2833 |
-
(Otherwise not known)
|
2834 |
-
/ x-name
|
2835 |
-
(Experimental type)
|
2836 |
-
/ iana-token
|
2837 |
-
(Other IANA registered type)
|
2838 |
-
MEMBER = "MEMBER" => array( *[ "single member
|
2839 |
-
of the group or list membership"])
|
2840 |
-
ROLE = "ROLE" => "CHAIR"
|
2841 |
-
(Indicates chair of the calendar
|
2842 |
-
entity)
|
2843 |
-
/ "REQ-PARTICIPANT"
|
2844 |
-
(required participation, <b>Default</b>)
|
2845 |
-
/ "OPT-PARTICIPANT"
|
2846 |
-
(optional participation)
|
2847 |
-
/ "NON-PARTICIPANT"
|
2848 |
-
(information purposes only)
|
2849 |
-
/ x-name
|
2850 |
-
(Experimental role)
|
2851 |
-
/ iana-token
|
2852 |
-
(Other IANA role)
|
2853 |
-
PARTSTAT = "PARTSTAT" => "NEEDS-ACTION"
|
2854 |
-
(Event needs action, <b>Default</b>)
|
2855 |
-
/ "ACCEPTED"
|
2856 |
-
(Event accepted)
|
2857 |
-
/ "DECLINED"
|
2858 |
-
(Event declined)
|
2859 |
-
/ "TENTATIVE"
|
2860 |
-
(Event tentatively accepted)
|
2861 |
-
/ "DELEGATED"
|
2862 |
-
(Event delegated)
|
2863 |
-
/ "NEEDS-ACTION"
|
2864 |
-
(To-do needs action, <b>Default</b>)
|
2865 |
-
/ "ACCEPTED"
|
2866 |
-
(To-do accepted)
|
2867 |
-
/ "DECLINED"
|
2868 |
-
(To-do declined)
|
2869 |
-
/ "TENTATIVE"
|
2870 |
-
(To-do tentatively accepted)
|
2871 |
-
/ "DELEGATED"
|
2872 |
-
(To-do delegated)
|
2873 |
-
/ "COMPLETED"
|
2874 |
-
(To-do completed.
|
2875 |
-
<a href="#COMPLETED">COMPLETED</a> property
|
2876 |
-
has date/time completed)
|
2877 |
-
/ "IN-PROCESS"
|
2878 |
-
(To-do in process of being completed)
|
2879 |
-
/ "NEEDS-ACTION"
|
2880 |
-
(Journal needs action, <b>Default</b>)
|
2881 |
-
/ "ACCEPTED"
|
2882 |
-
(Journal accepted)
|
2883 |
-
/ "DECLINED"
|
2884 |
-
(Journal declined)
|
2885 |
-
/ x-name
|
2886 |
-
(Experimental status)
|
2887 |
-
/ iana-token
|
2888 |
-
(Other IANA registered status)
|
2889 |
-
RSVP = "RSVP" => "TRUE"
|
2890 |
-
/ "FALSE", <b>Default</b> (reply expectation)
|
2891 |
-
DELEGATED-TO = "DELEGATED-TO" => array(*["single calendar user
|
2892 |
-
to specified by the property
|
2893 |
-
has delegated participation"])
|
2894 |
-
DELEGATED-FROM = "DELEGATED-FROM" => array( *[ "single calendar user that
|
2895 |
-
have delegated their
|
2896 |
-
participation to the
|
2897 |
-
calendar user specified
|
2898 |
-
by the property" ] )
|
2899 |
-
SENT-BY = "SENT-BY" => single calendar user that is
|
2900 |
-
acting on behalf
|
2901 |
-
of the calendar user
|
2902 |
-
specified by the property"
|
2903 |
-
LANGUAGE = "LANGUAGE" => language for text values in CN parameter"
|
2904 |
-
CN = "CN" => "common name to be associated with the calendar
|
2905 |
-
user specified by the property"
|
2906 |
-
DIR = "DIR" => "reference to a directory entry associated with
|
2907 |
-
the calendar user specified by the property"
|
2908 |
-
xparam = *[ xparamkey => 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( "attendee"
|
2913 |
-
, "attendee1@ical.net"
|
2914 |
-
$vevent->setProperty( "attendee"
|
2915 |
-
, "attendee2@ical.net"
|
2916 |
-
, array( "cutype" => "INDIVIDUAL"
|
2917 |
-
, "member" => array( "member1@ical.net"
|
2918 |
-
, "member2@ical.net"
|
2919 |
-
, "member3@ical.net" )
|
2920 |
-
, "role" => "CHAIR"
|
2921 |
-
, "PARTSTAT" => "ACCEPTED"
|
2922 |
-
, "RSVP" => "TRUE"
|
2923 |
-
, "DELEgated-to" => array( "part1@ical.net"
|
2924 |
-
, "part2@ical.net"
|
2925 |
-
, "part3@ical.net" )
|
2926 |
-
, "delegateD-FROM" =>array( "cio@ical.net"
|
2927 |
-
, "vice.cio@ical.net")
|
2928 |
-
, "SENT-BY" => "secretary@ical.net"
|
2929 |
-
, "LANGUAGE" => "us-EN"
|
2930 |
-
, "CN" => "John Doe"
|
2931 |
-
, "DIR" => "http://www.ical.net/info.doc"
|
2932 |
-
, "x-agenda" => "status reports" <span class="comment">// xparam</span>
|
2933 |
-
, "x-length" => "15 min" )); <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( "CATEGORIES" )</p>
|
2945 |
-
<p class="label">Example 1</p>
|
2946 |
-
<p class="example">$vevent->deleteProperty( "CATEGORIES" );</p>
|
2947 |
-
<p class="label">Example 2</p>
|
2948 |
-
Delete CATEGORIES property no 2.
|
2949 |
-
<p class="example">$vevent->deleteProperty( "CATEGORIES", 2 );</p>
|
2950 |
-
<p class="label">Example 3</p>
|
2951 |
-
Deleting all CATEGORIES properties.
|
2952 |
-
<p class="example">while( $vevent->deleteProperty( "CATEGORIES" ))
|
2953 |
-
continue;</p>
|
2954 |
-
<h5>Get CATEGORIES</h5>
|
2955 |
-
Fetch property value.
|
2956 |
-
<p class="label">Format 1</p>
|
2957 |
-
<p class="format">getProperty( "CATEGORIES" )</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( "CATEGORIES", propOrderNo/FALSE , TRUE )</p>
|
2961 |
-
<p class="comment">output = array( "value" => categories<span class="ref">1</span>
|
2962 |
-
, "params" => params<span class="ref">2</span> )</p>
|
2963 |
-
<p class="label">Format 3</p>
|
2964 |
-
<p class="format">getProperty( "CATEGORIES", propOrderNo )</p>
|
2965 |
-
<p class="comment">Get propOrderNo CATEGORIES</p>
|
2966 |
-
<p class="label">Example</p>
|
2967 |
-
<p class="example">$categories = $valarm->getProperty( "categories" );</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( "categories", 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( ["LANGUAGE" => "<lang>"][, xparam] )
|
2979 |
-
xparam<span class="ref"> </span> = *[ xparamkey => 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( "categories", "project_x" );</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( "CLASS" )</p>
|
2994 |
-
<p class="label">Example</p>
|
2995 |
-
<p class="example">$vjournal->deleteProperty( "CLASS" );</p>
|
2996 |
-
<h5>Get CLASS</h5>
|
2997 |
-
Fetch property value.
|
2998 |
-
<p class="label">Format 1</p>
|
2999 |
-
<p class="format">getProperty( "CLASS" )</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( "CLASS", FALSE , TRUE )</p>
|
3003 |
-
<p class="comment">output = array "value" => classValue<span class="ref">1</span>
|
3004 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3005 |
-
<p class="label">Example</p>
|
3006 |
-
<p class="example">$class = $valarm->getProperty( "class" );</p>
|
3007 |
-
<h5>Set CLASS</h5>
|
3008 |
-
Insert property value.
|
3009 |
-
<p class="label">Format</p>
|
3010 |
-
<p class="format">setProperty( "class", string classvalue [, xparam ] )</p>
|
3011 |
-
<p class="comment">classvalue<span class="ref">1</span> = "PUBLIC"
|
3012 |
-
/ "PRIVATE"
|
3013 |
-
/ "CONFIDENTIAL"
|
3014 |
-
/ iana-token
|
3015 |
-
/ x-name
|
3016 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3017 |
-
<p class="label">Example</p>
|
3018 |
-
<p class="example">$vevent->setProperty( "class", "CONFIDENTIAL" );</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( "COMMENT" )</p>
|
3030 |
-
<p class="label">Example 1</p>
|
3031 |
-
<p class="example">$vevent->deleteProperty( "COMMENT" );</p>
|
3032 |
-
<p class="label">Example 2</p>
|
3033 |
-
Delete COMMENT property no 2.
|
3034 |
-
<p class="example">$vevent->deleteProperty( "COMMENT", 2 );</p>
|
3035 |
-
<p class="label">Example 3</p>
|
3036 |
-
Deleting all COMMENT properties.
|
3037 |
-
<p class="example">while( $vevent->deleteProperty( "COMMENT" ))
|
3038 |
-
continue;</p>
|
3039 |
-
<h5>Get COMMENT</h5>
|
3040 |
-
Fetch property value.
|
3041 |
-
<p class="label">Format 1</p>
|
3042 |
-
<p class="format">getProperty( "COMMENT" )</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( "COMMENT", propOrderNo/FALSE , TRUE )</p>
|
3046 |
-
<p class="comment">output = array( "value" => commentValue<span class="ref">1</span>
|
3047 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3048 |
-
<p class="label">Format 3</p>
|
3049 |
-
<p class="format">getProperty( "COMMENT", propOrderNo )</p>
|
3050 |
-
<p class="comment">Get propOrderNo COMMENT</p>
|
3051 |
-
<p class="label">Example</p>
|
3052 |
-
<p class="example">$comment = $vevent->getProperty( "comment" );</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( "comment", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
3061 |
-
[, ["LANGUAGE" => "<lang>"]
|
3062 |
-
[, xparam] )
|
3063 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3064 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3065 |
-
<p class="label">Example</p>
|
3066 |
-
<p class="example">$vevent->setProperty( "comment", "this is a comment" );</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( "COMPLETED" )</p>
|
3078 |
-
<p class="label">Example</p>
|
3079 |
-
<p class="example">$vtodo->deleteProperty( "COMPLETED" );</p>
|
3080 |
-
<h5>Get COMPLETED</h5>
|
3081 |
-
Fetch property value.
|
3082 |
-
<p class="label">Format 1</p>
|
3083 |
-
<p class="format">getProperty( "COMPLETED" )</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( "COMPLETED", FALSE , TRUE )</p>
|
3087 |
-
<p class="comment">output = array( "value" => completedDate<span class="ref">1</span>
|
3088 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3089 |
-
<p class="label">Example</p>
|
3090 |
-
<p class="example">$completed = $vtodo->getProperty( "completed" );</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 "offset" 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( "completed", completedDate [, xparam ] )</p>
|
3095 |
-
<p class="comment">completedDate<span class="ref">1</span> = array( "year" => int year
|
3096 |
-
, "month" => int month
|
3097 |
-
, "day" => int day
|
3098 |
-
[, "hour" => int hour
|
3099 |
-
, "min" => int min
|
3100 |
-
, "sec" => int sec
|
3101 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset])
|
3116 |
-
completedDate = string datestring // <span class="ref">string date,
|
3117 |
-
acceptable by strtotime-command,
|
3118 |
-
ex. "14 august 2006 16.00.00"
|
3119 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3120 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3121 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3122 |
-
<p class="label">Example 1</p>
|
3123 |
-
<p class="example">$config = array( "unique_id" => "domain.com");
|
3124 |
-
$vcalendar = new vcalendar( $config );
|
3125 |
-
$vtodo = & $vcalendar->newComponent( 'vtodo' );
|
3126 |
-
.. .
|
3127 |
-
$vtodo->setProperty( "completed", 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("year" => 2006, "month" => 10, "day" => 10,
|
3131 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3132 |
-
// <span class="ref">local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
3133 |
-
$vtodo->setProperty( "completed", $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( "CONTACT" )</p>
|
3145 |
-
<p class="label">Example 1</p>
|
3146 |
-
<p class="example">$vevent->deleteProperty( "CONTACT" );</p>
|
3147 |
-
<p class="label">Example 2</p>
|
3148 |
-
Delete CONTACT property no 2.
|
3149 |
-
<p class="example">$vevent->deleteProperty( "CONTACT", 2 );</p>
|
3150 |
-
<p class="label">Example 3</p>
|
3151 |
-
Deleting all CONTACT properties.
|
3152 |
-
<p class="example">while( $vevent->deleteProperty( "CONTACT" ))
|
3153 |
-
continue;</p>
|
3154 |
-
<h5>Get CONTACT</h5>
|
3155 |
-
Fetch property value.
|
3156 |
-
<p class="label">Format 1</p>
|
3157 |
-
<p class="format">getProperty( "CONTACT" )</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( "CONTACT", propOrderNo/FALSE , TRUE )</p>
|
3161 |
-
<p class="comment">output = array( "value" => contactValue<span class="ref">1</span>
|
3162 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3163 |
-
<p class="label">Format 3</p>
|
3164 |
-
<p class="format">getProperty( "CONTACT", propOrderNo )</p>
|
3165 |
-
<p class="comment">Get propOrderNo CONTACT</p>
|
3166 |
-
<p class="label">Example</p>
|
3167 |
-
<p class="example">$contact = $vevent->getProperty( "contact" );</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( "contact", 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 ( ["ALTREP" => "<an alternate text representation, URI>"]
|
3176 |
-
[, "LANGUAGE" => "<lang>"]
|
3177 |
-
[, xparam] )
|
3178 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3179 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3180 |
-
<p class="label">Example</p>
|
3181 |
-
<p class="example">$c->setProperty( "contact", "tel 012-34 56 789" )</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( "CREATED" )</p>
|
3193 |
-
<p class="label">Example</p>
|
3194 |
-
<p class="example">$vevent->deleteProperty( "CREATED" );</p>
|
3195 |
-
<h5>Get CREATED</h5>
|
3196 |
-
Fetch property value.
|
3197 |
-
<p class="label">Format 1</p>
|
3198 |
-
<p class="format">getProperty( "CREATED" )</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( "CREATED", FALSE , TRUE )</p>
|
3202 |
-
<p class="comment">output = array( "value" => createdDate<span class="ref">1</span>
|
3203 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3204 |
-
<p class="label">Example</p>
|
3205 |
-
<p class="example">$created = $vevent->getProperty( "CREATED" );</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 "offset" 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( "created", [ createdDate [, xparam ]] )</p>
|
3210 |
-
<p class="comment">createdDate<span class="ref">1</span> = array( "year" => int year
|
3211 |
-
, "month" => int month
|
3212 |
-
, "day" => int day
|
3213 |
-
[, "hour" => int hour
|
3214 |
-
, "min" => int min
|
3215 |
-
, "sec" => int sec
|
3216 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset ])
|
3231 |
-
createdDate = string datestring // <span class="ref">string date,
|
3232 |
-
acceptable by strtotime-command,
|
3233 |
-
ex. "14 august 2006 16.00.00"
|
3234 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3235 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3236 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3237 |
-
<p class="label">Example 1</p>
|
3238 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
3239 |
-
$vcalendar = new vcalendar( $config );
|
3240 |
-
$vtodo = & $vcalendar->newComponent( 'vtodo' );
|
3241 |
-
.. .
|
3242 |
-
$vtodo->setProperty( "created", 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("year" => 2006, "month" => 10, "day" => 10,
|
3246 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3247 |
-
// <span class="ref">local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
3248 |
-
$vtodo->setProperty( "created", $date );
|
3249 |
-
.. .</p>
|
3250 |
-
<p class="label">Example 3</p>
|
3251 |
-
<p class="example">$vevent->setProperty( "created" );
|
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( "DESCRIPTION" )</p>
|
3264 |
-
<p class="label">Example 1</p>
|
3265 |
-
<p class="example">$vevent->deleteProperty( "DESCRIPTION" );</p>
|
3266 |
-
<p class="label">Example 2</p>
|
3267 |
-
Delete DESCRIPTION property no 2.
|
3268 |
-
<p class="example">$vjournal->deleteProperty( "DESCRIPTION", 2 );</p>
|
3269 |
-
<p class="label">Example 3</p>
|
3270 |
-
Deleting all DESCRIPTION properties.
|
3271 |
-
<p class="example">while( $vjournal->deleteProperty( "DESCRIPTION" ))
|
3272 |
-
continue;</p>
|
3273 |
-
<h5>Get DESCRIPTION</h5>
|
3274 |
-
Fetch property value.
|
3275 |
-
<p class="label">Format 1</p>
|
3276 |
-
<p class="format">getProperty( "DESCRIPTION" )</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( "DESCRIPTION", FALSE , TRUE )</p>
|
3280 |
-
<p class="comment">output = array( "value" => descriptionValue<span class="ref">1</span>
|
3281 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3282 |
-
<p class="label">Example</p>
|
3283 |
-
<p class="example">$description = $vevent->getProperty( "description" );</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( "description", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
3292 |
-
[, "LANGUAGE" => "<lang>"]
|
3293 |
-
[, xparam] )
|
3294 |
-
xparam = *[ xparamkey => xparamvalue ]
|
3295 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3296 |
-
<p class="label">Example</p>
|
3297 |
-
<p class="example">$vevent->setProperty( "description", "This is a description" );</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 "all-day event" 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( "DTEND" )</p>
|
3314 |
-
<p class="label">Example</p>
|
3315 |
-
<p class="example">$vevent->deleteProperty( "DTEND" );</p>
|
3316 |
-
<h5>Get DTEND</h5>
|
3317 |
-
Fetch property value.
|
3318 |
-
<p class="label">Format 1</p>
|
3319 |
-
<p class="format">getProperty( "DTEND" )</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( "DTEND", FALSE , TRUE )</span>
|
3323 |
-
<p class="comment">output = array( "value" => dtendDate<span class="ref">1</span>
|
3324 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3325 |
-
<p class="label">Example</p>
|
3326 |
-
<p class="example">$dtend = $vevent->getProperty( "dtend" );</p>
|
3327 |
-
<h5>Set DTEND</h5>
|
3328 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "dtend", dtendDate [, params<span class="ref">2</span> ] )</span>
|
3338 |
-
<p class="comment">dtendDate<span class="ref">1</span> = array ( "year" => int year
|
3339 |
-
, "month" => int month
|
3340 |
-
, "day" => int day
|
3341 |
-
[, "hour" => int hour
|
3342 |
-
, "min" => int min
|
3343 |
-
, "sec" => int sec
|
3344 |
-
[, "tz" => 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( "timestamp" => int timestamp [,"tz" => mixed tz])
|
3360 |
-
dtendDate = string datestring // <span class="ref">string date,
|
3361 |
-
acceptable by strtotime-command,
|
3362 |
-
ex. "14 august 2006 16.00.00"
|
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 = <timezone identifier> / UTC offset
|
3367 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3368 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3369 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[,xparams])
|
3370 |
-
tzidparam = "TZID" => <timezone identifier>
|
3371 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3372 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3373 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, ex. all-day event</span>
|
3374 |
-
xparams = xparamkey => xparamvalue</p>
|
3375 |
-
<p class="label">Example 1</p>
|
3376 |
-
<p class="example">$vevent->setProperty( "dtend"
|
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( "dtend"
|
3381 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
3382 |
-
<span class="ref">// 11 august 2006 16.30.00 -040000 :
|
3383 |
-
local date + UTC offset => <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( "dtend"
|
3386 |
-
, array( 'year' =>, 2006, 'month' => 8, 'day'=> 11 )
|
3387 |
-
, array( 'VALUE' => '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( "DTSTAMP" )</p>
|
3405 |
-
<p class="label">Example</p>
|
3406 |
-
<p class="example">$vevent->deleteProperty( "DTSTAMP" );</p>
|
3407 |
-
<h5>Get DTSTAMP</h5>
|
3408 |
-
Fetch property value.
|
3409 |
-
<p class="label">Format 1</p>
|
3410 |
-
<p class="format">getProperty( "DTSTAMP" )</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( "DTSTAMP", FALSE , TRUE )</p>
|
3414 |
-
<p class="comment">output = array( "value" => dtstampDate<span class="ref">1</span>
|
3415 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3416 |
-
<p class="label">Example</p>
|
3417 |
-
<p class="example">$dtstamp = $vevent->getProperty( "dtstamp" );</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 "offset" 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( "dtstamp", dtstampDate [, xparam ] )</p>
|
3422 |
-
<p class="comment">dtstampDate<span class="ref">1</span> = array( "year" => int year
|
3423 |
-
, "month" => int month
|
3424 |
-
, "day" => int day
|
3425 |
-
[, "hour" => int hour
|
3426 |
-
, "min" => int min
|
3427 |
-
, "sec" => int sec
|
3428 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset ])
|
3443 |
-
dtstampDate = string datestring // <span class="ref">string date,
|
3444 |
-
acceptable by strtotime-command,
|
3445 |
-
ex. "14 august 2006 16.00.00"
|
3446 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3447 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3448 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3449 |
-
<p class="label">Example 1</p>
|
3450 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
3451 |
-
$vcalendar = new vcalendar( $config );
|
3452 |
-
$vtodo = & $vcalendar->newComponent( 'vtodo' );
|
3453 |
-
.. .
|
3454 |
-
$vtodo->setProperty( "dstamp"
|
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("year" => 2006, "month" => 10, "day" => 10,
|
3459 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
3460 |
-
// <span class="ref">local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
3461 |
-
$vtodo->setProperty( "dtstamp", $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 "all-day event" 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( "DTSTART" )</p>
|
3478 |
-
<p class="label">Example</p>
|
3479 |
-
<p class="example">$vevent->deleteProperty( "DTSTART" );</p>
|
3480 |
-
<h5>Get DTSTART</h5>
|
3481 |
-
Fetch property value.
|
3482 |
-
<p class="label">Format 1</p>
|
3483 |
-
<p class="format">getProperty( "DTSTART" )</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( "DTSTART", FALSE , TRUE )</p>
|
3487 |
-
<p class="comment">output = array( "value" => dtstartDate<span class="ref">1</span>
|
3488 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3489 |
-
<p class="label">Example</p>
|
3490 |
-
<p class="example">$dtstart = $vevent->getProperty( "dtstart" );</p>
|
3491 |
-
<h5>Set DTSTART</h5>
|
3492 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "dtstart", dtstartDate [, params ] )</p>
|
3501 |
-
<p class="comment">dtstartDate<span class="ref">1</span> = array( "year" => int year
|
3502 |
-
, "month" => int month
|
3503 |
-
, "day" => int day
|
3504 |
-
[, "hour" => int hour
|
3505 |
-
, "min" => int min
|
3506 |
-
, "sec" => int sec
|
3507 |
-
[, "tz" => 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("timestamp" => int timestamp [, "tz" => mixed tz])
|
3523 |
-
dtstartDate = string datestring // <span class="ref">string date,
|
3524 |
-
acceptable by strtotime-command,
|
3525 |
-
ex. "14 august 2006 16.00.00"
|
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 = <timezone identifier> / offset
|
3530 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3531 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3532 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
|
3533 |
-
tzidparam = "TZID" => <timezone identifier>
|
3534 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3535 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3536 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, ex. all-day event</span>
|
3537 |
-
xparams = xparamkey => xparamvalue</p>
|
3538 |
-
<p class="label">Example 1</p>
|
3539 |
-
<p class="example">$vevent->setProperty( "dstart"
|
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( "dstart"
|
3544 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
3545 |
-
<span class="comment">// 11 august 2006 16.30.00 -040000,
|
3546 |
-
// local date + UTC offset => <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( "dtstart"
|
3549 |
-
, array( 'year' =>, 2006, 'month' => 8, 'day'=> 11 )
|
3550 |
-
, array( 'VALUE' => '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( "DUE" )</p>
|
3564 |
-
<p class="label">Example</p>
|
3565 |
-
<p class="example">$vtodo->deleteProperty( "DUE" );</p>
|
3566 |
-
<h5>Get DUE</h5>
|
3567 |
-
Fetch property value.
|
3568 |
-
<p class="label">Format 1</p>
|
3569 |
-
<p class="format">getProperty( "DUE" )</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( "DUE", FALSE , TRUE )</p>
|
3573 |
-
<p class="comment">output = array( "value" => dueDate<span class="ref">1</span>
|
3574 |
-
, "params" => params<span class="ref">2</span> )</p>
|
3575 |
-
<p class="label">Example</p>
|
3576 |
-
<p class="example">$due = $vtodo->getProperty( "due" );</p>
|
3577 |
-
<h5>Set DUE</h5>
|
3578 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "due", dueDate [, params ] )</p>
|
3588 |
-
<p class="comment">dueDate<span class="ref">1</span> = array( "year" => int year
|
3589 |
-
, "month" => int month
|
3590 |
-
, "day" => int day
|
3591 |
-
[, "hour" => int hour
|
3592 |
-
, "min" => int min
|
3593 |
-
, "sec" => int sec
|
3594 |
-
[, "tz" => 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( "timestamp" => int timestamp [, "tz" => mixed tz])
|
3610 |
-
dueDate = string datestring // <span class="ref">string date,
|
3611 |
-
acceptable by strtotime-command,
|
3612 |
-
ex. "14 august 2006 16.00.00"
|
3613 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3614 |
-
tz = <timezone identifier> / offset
|
3615 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3616 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3617 |
-
params<span class="ref">2</span> = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
|
3618 |
-
tzidparam = "TZID" => <timezone identifier>
|
3619 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
3620 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3621 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE, "during the day"</span>
|
3622 |
-
xparams = xparamkey => xparamvalue<p/>
|
3623 |
-
<p class="label">Example 1</p>
|
3624 |
-
<p class="example">$vtodo->setProperty( "due"
|
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( "due"
|
3629 |
-
, 2006, 8, 11, 16, 30, 0, "-040000" );
|
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( "due"
|
3634 |
-
, array( 'year' =>, 2006, 'month' => 8, 'day'=> 11 )
|
3635 |
-
, array( 'VALUE' => 'DATE' ));
|
3636 |
-
<span class="comment">// due "during the day"</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( "DURATION" )</p>
|
3651 |
-
<p class="label">Example</p>
|
3652 |
-
<p class="example">$valarm->deleteProperty( "DURATION" );</p>
|
3653 |
-
<h5>Get DURATION</h5>
|
3654 |
-
Fetch property value.
|
3655 |
-
<p class="label">Format 1</p>
|
3656 |
-
<p class="format">getProperty( "DURATION" )</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( "DURATION", FALSE , TRUE )</p>
|
3660 |
-
<p class="comment">output = array( "value" => duration<span class="ref">1</span>
|
3661 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3662 |
-
<p class="label">Example</p>
|
3663 |
-
<p class="example">$duration = $vtodo->getProperty( "duration" );</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( "duration", duration [, xparam ] )</p>
|
3672 |
-
<p class="comment">
|
3673 |
-
duration<span class="ref">1</span> = array ( "week" => int week )
|
3674 |
-
duration<span class="ref">1</span> = array ( "day" => int day )
|
3675 |
-
[, "hour" => int hour
|
3676 |
-
, "min" => int min
|
3677 |
-
, "sec" => int sec ])
|
3678 |
-
duration = array ( "sec" => 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 = ["+"] "P" (dur-date/dur-time/dur-week)
|
3690 |
-
dur-date = dur-day [dur-time]
|
3691 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
3692 |
-
dur-week = 1*DIGIT "W"
|
3693 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
3694 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
3695 |
-
dur-second = 1*DIGIT "S"
|
3696 |
-
dur-day = 1*DIGIT "D"
|
3697 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
3698 |
-
<p class="label">Example 1</p>
|
3699 |
-
<p class="example">$vtodo->setProperty "duration"
|
3700 |
-
, array( "day" => 1 )); </p>
|
3701 |
-
<p class="ref">// one day</p>
|
3702 |
-
<p class="label">Example 2</p>
|
3703 |
-
<p class="example">$vtodo->setProperty( "duration"
|
3704 |
-
, "PT4H" );
|
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( "EXDATE" )</p>
|
3717 |
-
<p class="label">Example 1</p>
|
3718 |
-
<p class="example">$vtodo->deleteProperty( "EXDATE" );</p>
|
3719 |
-
<p class="label">Example 2</p>
|
3720 |
-
Delete EXDATE property no 2.
|
3721 |
-
<p class="example">$vjournal->deleteProperty( "EXDATE", 2 );</p>
|
3722 |
-
<p class="label">Example 3</p>
|
3723 |
-
Deleting all EXDATE properties.
|
3724 |
-
<p class="example">while( $vjournal->deleteProperty( "EXDATE" ))
|
3725 |
-
continue;</p>
|
3726 |
-
<h5>Get EXDATE</h5>
|
3727 |
-
Fetch property value.
|
3728 |
-
<p class="label">Format 1</p>
|
3729 |
-
<p class="format">getProperty( "EXDATE" )<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( "exdate", propOrderNo/FALSE, TRUE )</p>
|
3733 |
-
<p class="comment">output = array( "value" => exdates<span class="ref">1</span>
|
3734 |
-
, "params" => xparams<span class="ref">2</span> )</p>
|
3735 |
-
<p class="label">Format 3</p>
|
3736 |
-
<p class="format">getProperty( "EXDATE", propOrderNo )</p>
|
3737 |
-
<p class="comment">Get propOrderNo EXDATE</p>
|
3738 |
-
<p class="label">Example</p>
|
3739 |
-
<p class="example">$exdate = $vtodo->getProperty( "exdate" );</p>
|
3740 |
-
<h5>Set EXDATE</h5>
|
3741 |
-
Insert property value.<br />
|
3742 |
-
If "TZID" is set in params, ex. "TZID" = "CET",
|
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 ("VALUE" = "DATE"), all timezone or offset in dates are ignored.<br />
|
3745 |
-
If no "VALUE" 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 "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" 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( "exdate", 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( "year" => int year
|
3762 |
-
, "month" => int month
|
3763 |
-
, "day" => int day
|
3764 |
-
[, "hour" => int hour
|
3765 |
-
, "min" => int min
|
3766 |
-
, "sec" => int sec
|
3767 |
-
[, "tz" => mixed tz ]] )
|
3768 |
-
date = array( "timestamp" => int timestamp [, "tz" => mixed tz])
|
3769 |
-
date = string datestring // <span class="ref">string date,
|
3770 |
-
acceptable by strtotime-command,
|
3771 |
-
ex. "14 august 2006 16.00.00"
|
3772 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
3773 |
-
tz = <timezone identifier> / offset
|
3774 |
-
(timezone will be used as tzidparam (below), if tzidparam not set)
|
3775 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
3776 |
-
params<span class="ref">2</span> = array([(datetimeparam/dateparam) / tzidparam] [,xparam])
|
3777 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as date-time</span>
|
3778 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
3779 |
-
tzidparam = "TZID" => <timezone identifier>
|
3780 |
-
xparams = *[ xparamkey => xparamvalue ]
|
3781 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3782 |
-
<p class="label">Example 1</p>
|
3783 |
-
<p class="example">$vevent->setProperty( "exdate"
|
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( "exdate"
|
3788 |
-
, array( array('year' =>,2006,'month' => 8,'day'=> 11))
|
3789 |
-
, array( 'VALUE' => '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( "EXRULE" )</p>
|
3801 |
-
<p class="label">Example 1</p>
|
3802 |
-
<p class="example">$vtodo->deleteProperty( "EXRULE" );</p>
|
3803 |
-
<p class="label">Example 2</p>
|
3804 |
-
Delete EXRULE property no 2.
|
3805 |
-
<p class="example">$vjournal->deleteProperty( "EXRULE", 2 );</p>
|
3806 |
-
<p class="label">Example 3</p>
|
3807 |
-
Deleting all EXRULE properties.
|
3808 |
-
<p class="example">while( $vjournal->deleteProperty( "EXRULE" ))
|
3809 |
-
continue;</p>
|
3810 |
-
<h5>Get EXRULE</h5>
|
3811 |
-
Fetch property value.
|
3812 |
-
<p class="label">Format 1</p>
|
3813 |
-
<p class="format">getProperty( "EXRULE" )</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( "exrule", propOrderNo/FALSE, TRUE )</p>
|
3817 |
-
<p class="comment">output = array( "value" => recur<span class="ref">1</span>
|
3818 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
3819 |
-
<p class="label">Format 3</p>
|
3820 |
-
<p class="format">getProperty( "EXRULE", propOrderNo )</p>
|
3821 |
-
<p class="comment">Get propOrderNo EXRULE</p>
|
3822 |
-
<p class="label">Example</p>
|
3823 |
-
<p class="example">$exrule = $vtodo->getProperty( "exrule" );</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( "exrule", 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"=>freq
|
3833 |
-
// <span class="ref">either UNTIL or COUNT may appear in a "recur",
|
3834 |
-
but UNTIL and COUNT MUST NOT occur in the same "recur"</span>
|
3835 |
-
[, "UNTIL" "=>" >enddate ]
|
3836 |
-
[, "COUNT" "=>" 1*DIGIT ]
|
3837 |
-
// <span class="ref">the rest of these keywords are optional,
|
3838 |
-
but MUST NOT occur more than once</span>
|
3839 |
-
[, "INTERVAL" "=>" 1*DIGIT ]
|
3840 |
-
[, "BYSECOND" "=>" byseclist ]
|
3841 |
-
[, "BYMINUTE" "=>" byminlist ]
|
3842 |
-
[, "BYHOUR" "=>" byhrlist ]
|
3843 |
-
[, "BYDAY" "=>" bywdaylist ]
|
3844 |
-
[, "BYMONTHDAY" "=>" bymodaylist ]
|
3845 |
-
[, "BYYEARDAY" "=>" byyrdaylist ]
|
3846 |
-
[, "BYWEEKNO" "=>" bywknolist ]
|
3847 |
-
[, "BYMONTH" "=>" bymolist ]
|
3848 |
-
[, "BYSETPOS" "=>" bysplist ]
|
3849 |
-
[, "WKST" "=>" weekday ]
|
3850 |
-
[, x-name "=>" text ] )
|
3851 |
-
freq = "SECONDLY" /
|
3852 |
-
"MINUTELY" /
|
3853 |
-
"HOURLY" /
|
3854 |
-
"DAILY" /
|
3855 |
-
"WEEKLY" /
|
3856 |
-
"MONTHLY" /
|
3857 |
-
"YEARLY"
|
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)], "DAY" => weekday )
|
3872 |
-
plus = "+"
|
3873 |
-
minus = "-"
|
3874 |
-
ordwk = 1DIGIT / 2DIGIT ;1 to 53
|
3875 |
-
weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA"
|
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 => xparamvalue ] )
|
3898 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
3899 |
-
<p class="label">Example</p>
|
3900 |
-
<p class="example">$vevent->setProperty( "Exrule"
|
3901 |
-
, array( "FREQ" => "MONTHLY"
|
3902 |
-
, "UNTIL" => "20060831"
|
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 |
-
, "INTERVAL" => 2
|
3905 |
-
, "WKST" => "SU"
|
3906 |
-
, "BYSECOND" => 2
|
3907 |
-
, "BYMINUTE" => array( 2, -4, 6 ) // (*)
|
3908 |
-
, "BYHOUR" => array( 2, 4, -6 ) // (*)
|
3909 |
-
, "BYMONTHDAY" => -2 // (*)
|
3910 |
-
, "BYYEARDAY" => 2 // (*)
|
3911 |
-
, "BYWEEKNO" => array( 2, -4, 6 ) // (*)
|
3912 |
-
, "BYMONTH" => 2 // (*)
|
3913 |
-
, "BYSETPOS" => array( 2, -4, 6 ) // (*)
|
3914 |
-
, "BYday" => array( array(-2, "DAY" => "WE" )
|
3915 |
-
, array( 3, "DAY" => "TH")
|
3916 |
-
, array( 5, "DAY" => "FR")
|
3917 |
-
, array( "DAY" => "MO"))
|
3918 |
-
// (**)
|
3919 |
-
, "X-NAME" => "x-value" )
|
3920 |
-
, array( "xparamkey" => "xparamValue" ));
|
3921 |
-
|
3922 |
-
$vtodo->setProperty( >"exrule"
|
3923 |
-
, array( "FREQ" => "WEEKLY"
|
3924 |
-
, "COUNT" => 2
|
3925 |
-
, "INTERVAL" => 2
|
3926 |
-
, "WKST" => "SU"
|
3927 |
-
, "BYSECOND" => array( -2, 4, 6 ) // (*)
|
3928 |
-
, "BYMINUTE" => -2 // (*)
|
3929 |
-
, "BYHOUR" => 2 // (*)
|
3930 |
-
, "BYMONTHDAY" => array( 2, -4, 6 ) // (*)
|
3931 |
-
, "BYYEARDAY" => array( -2, 4, 6 ) // (*)
|
3932 |
-
, "BYWEEKNO" => -2 // (*)
|
3933 |
-
, "BYMONTH" => array( 2, 4, -6 ) // (*)
|
3934 |
-
, "BYSETPOS" => -2 // (*)
|
3935 |
-
, "BYday" => array( 5, "DAY" => "WE" )
|
3936 |
-
// (**)
|
3937 |
-
, "X-NAME" => "x-value" )
|
3938 |
-
, array( "xparamkey" => "xparamValue" ));
|
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( "FREEBUSY" )</p>
|
3953 |
-
<p class="label">Example 1</p>
|
3954 |
-
<p class="example">$vfreebusy->deleteProperty( "FREEBUSY" );</p>
|
3955 |
-
<p class="label">Example 2</p>
|
3956 |
-
Delete FREEBUSY property no 2.
|
3957 |
-
<p class="example">$vfreebusy->deleteProperty( "FREEBUSY", 2 );</p>
|
3958 |
-
<p class="label">Example 3</p>
|
3959 |
-
Deleting all FREEBUSY properties.
|
3960 |
-
<p class="example">while( $vfreebusy->deleteProperty( "FREEBUSY" ))
|
3961 |
-
continue;</p>
|
3962 |
-
<h5>Get FREEBUSY</h5>
|
3963 |
-
Fetch property value.
|
3964 |
-
<p class="label">Format 1</p>
|
3965 |
-
<p class="format">getProperty( "FREEBUSY" )</p>
|
3966 |
-
<p class="comment">output = array( "fbtyp" => 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( "FREEBUSY", propOrderNo/FALSE , TRUE )</p>
|
3969 |
-
<p class="comment">output = array( "value" => array("fbtype" => freebusytype<span class="ref">1</span> ,periods<span class="ref">2</span>)
|
3970 |
-
, "params" => xparams<span class="ref"> 3</span> )</p>
|
3971 |
-
<p class="label">Format 3</p>
|
3972 |
-
<p class="format">getProperty( "FREEBUSY", propOrderNo )</p>
|
3973 |
-
<p class="comment">Get propOrderNo FREEBUSY</p>
|
3974 |
-
<p class="label">Example</p>
|
3975 |
-
<p class="example">$freebusy = $vfreebusy->getProperty( "FREEBUSY" );</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( "freebusy",freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
|
3980 |
-
<p class="comment">freebusytype<span class="ref">1</span> = one of "FREE"
|
3981 |
-
/ "BUSY" <b>Default</b>
|
3982 |
-
/ "BUSY-UNAVAILABLE"
|
3983 |
-
/ "BUSY-TENTATIVE"
|
3984 |
-
/ x-name
|
3985 |
-
fbperiods = array( periods<span class="ref">2</span> )
|
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( "year" => int year
|
3995 |
-
, "month" => int month
|
3996 |
-
, "day" => int day
|
3997 |
-
, "hour" => int hour
|
3998 |
-
, "min" => int min
|
3999 |
-
, "sec" => int sec ) // <span class="ref">output format</span>
|
4000 |
-
startdate/enddate = array( "timestamp" => int timestamp )
|
4001 |
-
startdate/enddate = string datestring // <span class="ref">string date,
|
4002 |
-
acceptable by strtotime-command,
|
4003 |
-
ex. "14 august 2006 16.00.00"
|
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( "week" => int week/false
|
4012 |
-
[, "day" => int day/false
|
4013 |
-
[, "hour" => int hour
|
4014 |
-
, "min" => int min
|
4015 |
-
, "sec" => int sec ]] ); // <span class="ref">output format</span>
|
4016 |
-
duration = array( "sec" => int sec )
|
4017 |
-
duration = string dur-value
|
4018 |
-
= (["+"]/"-") "P" (dur-date/dur-time/dur-week)
|
4019 |
-
dur-date = dur-day [dur-time]
|
4020 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
4021 |
-
dur-week = 1*DIGIT "W"
|
4022 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
4023 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
4024 |
-
dur-second = 1*DIGIT "S"
|
4025 |
-
dur-day = 1*DIGIT "D"
|
4026 |
-
xparams<span class="ref">3</span> = array( *[ xparamkey => 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 ( "year" => 2001
|
4034 |
-
, "month" => 1
|
4035 |
-
, "day" => 1
|
4036 |
-
, "hour" => 1
|
4037 |
-
, "min" => 1
|
4038 |
-
, "sec" => 1 );
|
4039 |
-
$fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
|
4040 |
-
$fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
|
4041 |
-
$fdate4 = "4 April 2005 4:4:4";
|
4042 |
-
$fdate7 = array ( "year" => 2007
|
4043 |
-
, "month" => 7
|
4044 |
-
, "day" => 7 );
|
4045 |
-
$fdur6 = array ( "week" => 0
|
4046 |
-
, "day" => 5
|
4047 |
-
, "hour" => 5
|
4048 |
-
, "min" => 5
|
4049 |
-
, "sec" => 5 );
|
4050 |
-
$fdur7 = array ( 0, 0, 6 ); // <span class="ref">duration for 6 hours</span>
|
4051 |
-
$fdur8 = "P2D"; // <span class="ref">duration two days</span>
|
4052 |
-
$freebusy->setProperty "freebusy"
|
4053 |
-
, "FREE"
|
4054 |
-
, array( array( $fdate1, $fdate2 )
|
4055 |
-
, array( $fdate3, $fdur6 )
|
4056 |
-
, array( $fdate4, $fdate5 )));
|
4057 |
-
$freebusy->setProperty("freebusy"
|
4058 |
-
, "Busy"
|
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. "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."
|
4071 |
-
<h5>Delete GEO</h5>
|
4072 |
-
Remove GEO from component.
|
4073 |
-
<p class="label">Format</p>
|
4074 |
-
<p class="format">deleteProperty( "GEO" )</p>
|
4075 |
-
<p class="label">Example</p>
|
4076 |
-
<p class="example">$vevent->deleteProperty( "FREEBUSY" );</p>
|
4077 |
-
<h5>Get GEO</h5>
|
4078 |
-
Fetch property value.
|
4079 |
-
<p class="label">Format 1</p>
|
4080 |
-
<p class="format">getProperty( "GEO" )</p>
|
4081 |
-
<p class="comment">output = array( "latitude" => <latitude>
|
4082 |
-
, "longitude" => <longitude>))</p>
|
4083 |
-
<p class="label">Format 2</p>
|
4084 |
-
<p class="format">getProperty( "GEO", FALSE , TRUE )</p>
|
4085 |
-
<p class="comment">output = array( "value" => array ( "latitude" => <latitude>
|
4086 |
-
, "longitude" => <longitude>))
|
4087 |
-
, "params" => xparam <span class="ref">1</span> )</p>
|
4088 |
-
<p class="label">Example</p>
|
4089 |
-
<p class="example">$geo = $vevent->getProperty( "GEO" );</p>
|
4090 |
-
<h5>Set GEO</h5>
|
4091 |
-
Insert property value.
|
4092 |
-
<p class="label">Format</p>
|
4093 |
-
<p class="format">setProperty( "geo", float latitude, float longitude [, xparam ] )</p>
|
4094 |
-
<p class="comment">xparam <span class="ref">1</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4095 |
-
<p class="label">Example</p>
|
4096 |
-
<p class="example">$vevent->setProperty( "geo", 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( "LAST-MODIFIED" )</p>
|
4108 |
-
<p class="label">Example</p>
|
4109 |
-
<p class="example">$vevent->deleteProperty( "LAST-MODIFIED" );</p>
|
4110 |
-
<h5>Get LAST-MODIFIED</h5>
|
4111 |
-
Fetch property value.
|
4112 |
-
<p class="label">Format 1</p>
|
4113 |
-
<p class="format">getProperty( "LAST-MODIFIED" )</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( "LAST-MODIFIED", FALSE , TRUE )</p>
|
4117 |
-
<p class="comment">output = array( "value" => moddate<span class="ref">1</span>
|
4118 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4119 |
-
<p class="label">Example</p>
|
4120 |
-
<p class="example">$lastMod = $vevent->getProperty( "LAST-MODIFIED" );</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 "offset" 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( "Last-Modified" [, moddate [, xparam ]] )</p>
|
4125 |
-
<p class="comment">moddate<span class="ref">1</span> = array( "year" => int year
|
4126 |
-
, "month" => int month
|
4127 |
-
, "day" => int day
|
4128 |
-
[, "hour" => int hour
|
4129 |
-
, "min" => int min
|
4130 |
-
, "sec" => int sec
|
4131 |
-
, "tz" => 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 ( "timestamp" => int timestamp [, "tz" => offset])
|
4146 |
-
completedDate = string datestring // <span class="ref">string date,
|
4147 |
-
acceptable by strtotime-command,
|
4148 |
-
ex. "14 august 2006 16.00.00"
|
4149 |
-
(notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
|
4150 |
-
offset = (+/-)HHmm[ss], local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
|
4151 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4152 |
-
<p class="label">Example 1</p>
|
4153 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
4154 |
-
$vcalendar = new vcalendar( $config );
|
4155 |
-
$vtodo = & $vcalendar->newComponent( 'vtodo' );
|
4156 |
-
.. .
|
4157 |
-
$vtodo->setProperty("last-modified"
|
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("year" => 2006, "month" => 10, "day" => 10,
|
4162 |
-
"hour" => 10, "min" => 0, "sec" => 0, "tz" => "+0200");
|
4163 |
-
<span class="ref">// local date + UTC offset => <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
4164 |
-
$vtodo->setProperty( "last-modified", $date );
|
4165 |
-
.. .</p>
|
4166 |
-
<p class="label">Example 3</p>
|
4167 |
-
<p class="example">$vevent->setProperty( "last-modified" );
|
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( "LOCATION" )</p>
|
4180 |
-
<p class="label">Example</p>
|
4181 |
-
<p class="example">$vevent->deleteProperty( "LOCATION" );</p>
|
4182 |
-
<h5>Get LOCATION</h5>
|
4183 |
-
Fetch property value.
|
4184 |
-
<p class="label">Format 1</p>
|
4185 |
-
<p class="format">getProperty( "LOCATION" )</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( "LOCATION", FALSE , TRUE )</p>
|
4189 |
-
<p class="comment">output = array( "value" => location<span class="ref">1</span>
|
4190 |
-
, "params" => param<span class="ref">2</span> )</p>
|
4191 |
-
<p class="label">Example</p>
|
4192 |
-
<p class="example">$location = $vevent->getProperty( "LOCATION" );</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( "location", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
4201 |
-
[, "LANGUAGE" => "<lang>"]
|
4202 |
-
[, xparam ]
|
4203 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4204 |
-
<p class="label">Example</p>
|
4205 |
-
<p class="example">$vevent->setProperty( "location", "Buckingham Palace" );</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( "ORGANIZER" )</p>
|
4217 |
-
<p class="label">Example</p>
|
4218 |
-
<p class="example">$vevent->deleteProperty( "ORGANIZER" );</p>
|
4219 |
-
<h5>Get ORGANIZER</h5>
|
4220 |
-
Fetch property value.
|
4221 |
-
<p class="label">Format 1</p>
|
4222 |
-
<p class="format">getProperty( "ORGANIZER" )</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( "ORGANIZER", FALSE , TRUE )</p>
|
4226 |
-
<p class="comment">output = array( "value" => organizer<span class="ref">1</span>
|
4227 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4228 |
-
<p class="label">Example</p>
|
4229 |
-
<p class="example">$organizer = $vevent->getProperty( "ORGANIZER" );</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 "mailto:", 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( "organizer", 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( ["LANGUAGE" => "<lang>"
|
4242 |
-
(applies to the CN parameter value) ]
|
4243 |
-
[, "CN" => "common name to be associated
|
4244 |
-
with the calendar user
|
4245 |
-
specified by the property"]
|
4246 |
-
[, "DIR" => "reference to a directory
|
4247 |
-
entry associated with the calendar user
|
4248 |
-
specified by the property" ]
|
4249 |
-
[, "SENT-BY" => "single calendar user
|
4250 |
-
that is acting on behalf
|
4251 |
-
of the calendar user
|
4252 |
-
specified by the property" ]
|
4253 |
-
[, xparam ]
|
4254 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4255 |
-
<p class="label">Example</p>
|
4256 |
-
<p class="example">
|
4257 |
-
$dir = "ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)";
|
4258 |
-
$vevent->setProperty( "organizer"
|
4259 |
-
, "ical@domain.com"
|
4260 |
-
, array( "CN" => "John Doe"
|
4261 |
-
, "DIR" => $dir
|
4262 |
-
, "SENT-BY" => "secretary@domain.com"
|
4263 |
-
, "X-Key1" => "X-Value1"
|
4264 |
-
, "X-Key2" => "X-Value2" ));</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( "PERCENT-COMPLETE" )</p>
|
4276 |
-
<p class="label">Example</p>
|
4277 |
-
<p class="example">$vtodo->deleteProperty( "PERCENT-COMPLETE" );</p>
|
4278 |
-
<h5>Get PERCENT-COMPLETE</h5>
|
4279 |
-
Fetch property value.
|
4280 |
-
<p class="label">Format 1</p>
|
4281 |
-
<p class="format">getProperty( "PERCENT-COMPLETE" )</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( "PRIORITY", FALSE , TRUE )</p>
|
4285 |
-
<p class="comment">output = array( "value" => percent<span class="ref">1</span>
|
4286 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4287 |
-
<p class="label">Example</p>
|
4288 |
-
<p class="example">$percent = $vtodo->getProperty( "PERCENT-COMPLETE" );</p>
|
4289 |
-
<h5>Set PERCENT-COMPLETE</h5>
|
4290 |
-
Insert property value.
|
4291 |
-
<p class="label">Format</p>
|
4292 |
-
<p class="format">setProperty( "Percent-Complete", 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 => xparamvalue ] )</p>
|
4295 |
-
<p class="label">Example</p>
|
4296 |
-
<p class="example">$vtodo->setProperty( "percent-complete", 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( "PRIORITY" )</p>
|
4313 |
-
<p class="label">Example</p>
|
4314 |
-
<p class="example">$vevent->deleteProperty( "PRIORITY" );</p>
|
4315 |
-
<h5>Get PRIORITY</h5>
|
4316 |
-
Fetch property value.
|
4317 |
-
<p class="label">Format 1</p>
|
4318 |
-
<p class="format">getProperty( "PRIORITY" )</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( "PRIORITY", FALSE , TRUE )</p>
|
4322 |
-
<p class="comment">output = array( "value" => priority<span class="ref">1</span>
|
4323 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4324 |
-
<p class="label">Example</p>
|
4325 |
-
<p class="example">$priority = $vevent->getProperty( "priority" );</p>
|
4326 |
-
<h5>Set PRIORITY</h5>
|
4327 |
-
Insert property value.
|
4328 |
-
<p class="label">Format</p>
|
4329 |
-
<p class="format">setProperty( "priority", 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 => xparamvalue ] )</p>
|
4332 |
-
<p class="label">Example</p>
|
4333 |
-
<p class="example">$vevent->setProperty( "priority", 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( "RDATE" )</p>
|
4345 |
-
<p class="label">Example 1</p>
|
4346 |
-
<p class="example">$vtodo->deleteProperty( "RDATE" );</p>
|
4347 |
-
<p class="label">Example 2</p>
|
4348 |
-
Delete RDATE property no 2.
|
4349 |
-
<p class="example">$vjournal->deleteProperty( "RDATE", 2 );</p>
|
4350 |
-
<p class="label">Example 3</p>
|
4351 |
-
Deleting all RDATE properties.
|
4352 |
-
<p class="example">while( $vjournal->deleteProperty( "RDATE" ))
|
4353 |
-
continue;</p>
|
4354 |
-
<h5>Get RDATE</h5>
|
4355 |
-
Fetch property value.
|
4356 |
-
<p class="label">Format 1</p>
|
4357 |
-
<p class="format">getProperty( "RDATE" )</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( "RDATE", propOrderNo/FALSE , TRUE )</p>
|
4361 |
-
<p class="comment">output = array( "value" => dates<span class="ref">1</span>
|
4362 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4363 |
-
<p class="label">Format 3</p>
|
4364 |
-
<p class="format">getProperty( "RDATE", propOrderNo )</p>
|
4365 |
-
<p class="comment">Get propOrderNo RDATE</p>
|
4366 |
-
<p class="label">Example</p>
|
4367 |
-
<p class="example">$rdates = $vevent->getProperty( "RDATE" );</p>
|
4368 |
-
<h5>Set RDATE</h5>
|
4369 |
-
Insert property value.<br />
|
4370 |
-
If "TZID" is set in params, ex. "TZID" = "CET", 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 ("VALUE" = "DATE"), all timezone or offset in dates are ignored.<br />
|
4372 |
-
If "PERIOD" is set in params ("VALUE" = "PERIOD"), DATE-TIME value type is set.<br />
|
4373 |
-
If no "VALUE" 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 "TZID" is set in params and timezone in 1st date, all remaining dates are within this timezone and param "TZID" 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( "rdate", 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( "year" => int year
|
4394 |
-
, "month" => int month
|
4395 |
-
, "day" => int day
|
4396 |
-
[, "hour" => int hour
|
4397 |
-
, "min" => int min
|
4398 |
-
, "sec" => int sec
|
4399 |
-
[, "tz" => mixed tz ]] )
|
4400 |
-
// <span class="ref">output format</span>
|
4401 |
-
date = array( "timestamp" => int timestamp
|
4402 |
-
[, "tz" => mixed tz ] )
|
4403 |
-
date = string datestring // <span class="ref">string date,
|
4404 |
-
acceptable by strtotime-command,
|
4405 |
-
ex. "14 august 2006 16.00.00"
|
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 => <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([ "week" => int week/false ,] /
|
4416 |
-
[ "day" => int day/false
|
4417 |
-
[, "hour" => int hour
|
4418 |
-
, "min" => int min
|
4419 |
-
, "sec" => int sec ]] );
|
4420 |
-
// <span class="ref">output format, only used keys</span>
|
4421 |
-
duration = array( "sec" => int sec );
|
4422 |
-
duration = string format duration like "P15DT5H0M20S"
|
4423 |
-
params<span class="ref">2</span> = ([tzidparam ( / datetimeparam / dateparam / periodparam )]
|
4424 |
-
*[, xparams ] )
|
4425 |
-
tzidparam = "TZID" => <timezone identifier>
|
4426 |
-
// <span class="ref">output as local DATE-TIME with timezone identifier</span>
|
4427 |
-
datetimeparam = "VALUE" => "DATE-TIME" // <span class="ref">default, output as DATE-TIME</span>
|
4428 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
4429 |
-
periodparam = "VALUE" => "PERIOD" // <span class="ref">output as PERIOD (datetime)</span>
|
4430 |
-
xparams = xparamkey => 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( "year" => 2001
|
4438 |
-
, "month" => 1
|
4439 |
-
, "day" => 1
|
4440 |
-
, "hour" => 1
|
4441 |
-
, "min" => 1
|
4442 |
-
, "sec" => 1
|
4443 |
-
, "tz" => "GMT" );
|
4444 |
-
$rdate2 = array( 2002, 2, 2, 2, 2, 2, "GMT" );
|
4445 |
-
$rdate3 = "3 March 2003 03.03.03";
|
4446 |
-
$rdate4 = array( 2004, 4, 4, 4, 4, 4, "GMT" );
|
4447 |
-
$rdate5 = array( 2005, 10, 5, 5, 5, 5 );
|
4448 |
-
$rdate8 = array( "year" => 2007, "month" => 7, "day" => 7 );
|
4449 |
-
$rdur6 = array( "week" => 0
|
4450 |
-
, "day" => 0
|
4451 |
-
, "hour" => 5
|
4452 |
-
, "min" => 5
|
4453 |
-
, "sec" => 5 );
|
4454 |
-
$rdur7 = array( 0, 0, 6 );
|
4455 |
-
<span class="comment">// duration for 6 hours</span>
|
4456 |
-
$rdur8 = array( "week" => 8 );
|
4457 |
-
<span class="comment">// duration for 8 weeks</span>
|
4458 |
-
|
4459 |
-
$vevent = & $vcalendar->newComponent( 'vevent' );
|
4460 |
-
$vevent->setProperty( "rdate", array( $rdate1 ));
|
4461 |
-
<span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>
|
4462 |
-
|
4463 |
-
$vevent->setProperty( "rdate", array( $rdate1, $rdate2 ));
|
4464 |
-
<span class="comment">// two dates, date 7-params format (DATE-TIME)</span>
|
4465 |
-
|
4466 |
-
$vevent->setProperty( "rdate", 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( "rdate", array( array( $rdate2, $rdur6 ))
|
4472 |
-
, array( 'VALUE' => 'PERIOD' ));
|
4473 |
-
<span class="comment">// one duration (fromdate-duration)</span>
|
4474 |
-
|
4475 |
-
$vevent->setProperty( "rdate", 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( "rdate", 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( "RECURRENCE-ID" )</p>
|
4495 |
-
<p class="label">Example</p>
|
4496 |
-
<p class="example">$vevent->deleteProperty( "RECURRENCE-ID" );</p>
|
4497 |
-
<h5>Get RECURRENCE-ID</h5>
|
4498 |
-
Fetch property value.
|
4499 |
-
<p class="label">Format 1</p>
|
4500 |
-
<p class="format">getProperty( "RECURRENCE-ID" )</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( "RECURRENCE-ID", FALSE , TRUE )</p>
|
4504 |
-
<p class="comment">output = array( "value" => recurrIdDate<span class="ref">1</span>
|
4505 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4506 |
-
<p class="label">Example</p>
|
4507 |
-
<p class="example">$recurrDate = $vtodo->getProperty( "RECURRENCE-ID" );</p>
|
4508 |
-
<h5>Set RECURRENCE-ID</h5>
|
4509 |
-
Insert property value. If DATE value type is expected, "VALUE" = "DATE" <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( "recurrence-id", recurrIdDate [, params ] )</p>
|
4515 |
-
<p class="comment">recurrIdDate<span class="ref">1</span> = array( "year" => int year
|
4516 |
-
, "month" => int month
|
4517 |
-
, "day" => int day
|
4518 |
-
[, "hour" => int hour
|
4519 |
-
, "min" => int min
|
4520 |
-
, "sec" => int sec
|
4521 |
-
[, "tz" => 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( "timestamp" => int timestamp
|
4537 |
-
[, "tz" => mixed tz ] )
|
4538 |
-
recurrIdDate = string datestring // <span class="ref">string date,
|
4539 |
-
acceptable by strtotime-command,
|
4540 |
-
ex. "14 august 2006 16.00.00"
|
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 => <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 = "VALUE" => "DATE-TIME" // <span class="ref">default, output as DATE-TIME</span>
|
4549 |
-
dateparam = "VALUE" => "DATE" // <span class="ref">output as DATE</span>
|
4550 |
-
tzidparam = "TZID" => <timezone identifier>
|
4551 |
-
// <span class="ref">output as local date-time with timezone identifier</span>
|
4552 |
-
rangeparam = "RANGE" => ( "THISANDPRIOR" / "THISANDFUTURE" )
|
4553 |
-
// <span class="ref">range parameter</span>
|
4554 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4555 |
-
<p class="label">Example</p>
|
4556 |
-
<p class="example">$vtodo->setProperty( "recurrence-id", "3 March 2003 03.03.03" );
|
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( "RELATED-TO" )</p>
|
4570 |
-
<p class="label">Example 1</p>
|
4571 |
-
<p class="example">$vtodo->deleteProperty( "RELATED-TO" );</p>
|
4572 |
-
<p class="label">Example 2</p>
|
4573 |
-
Delete RELATED-TO property no 2.
|
4574 |
-
<p class="example">$vjournal->deleteProperty( "RELATED-TO", 2 );</p>
|
4575 |
-
<p class="label">Example 3</p>
|
4576 |
-
Deleting all RELATED-TO properties.
|
4577 |
-
<p class="example">while( $vjournal->deleteProperty( "RELATED-TO" ))
|
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( "RELATED-TO" )</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( "RELATED-TO", propOrderNo/FALSE , TRUE )</p>
|
4586 |
-
<p class="comment">output = array( "value" => relid<span class="ref">1</span>
|
4587 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4588 |
-
<p class="label">Format 3</p>
|
4589 |
-
<p class="format">getProperty( "RELATED-TO", propOrderNo )</p>
|
4590 |
-
<p class="comment">Get propOrderNo RELATED-TO</p>
|
4591 |
-
<p class="label">Example</p>
|
4592 |
-
<p class="example">$relatedId = $vtodo->getProperty( "RELATED-TO" );</p>
|
4593 |
-
<h5>Set RELATED-TO</h5>
|
4594 |
-
Insert property value.
|
4595 |
-
<p class="label">Format</p>
|
4596 |
-
<p class="format">setProperty( "Related-To", 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 = "RELTYPE" => ("PARENT" (Default)
|
4600 |
-
/ "CHILD"
|
4601 |
-
/ "SIBLING"
|
4602 |
-
/ iana-token
|
4603 |
-
/ x-name)
|
4604 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4605 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4606 |
-
<p class="label">Example</p>
|
4607 |
-
<p class="example">$vtodo->setProperty( "related-to", "19960401-080045-4000F192713@host.com");</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( "REPEAT" )</p>
|
4618 |
-
<p class="label">Example</p>
|
4619 |
-
<p class="example">$valarm->deleteProperty( "REPEAT" );</p>
|
4620 |
-
<h5>Get REPEAT</h5>
|
4621 |
-
Fetch property value.
|
4622 |
-
<p class="label">Format 1</p>
|
4623 |
-
<p class="format">getProperty( "REPEAT" )</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( "REPEAT", FALSE , TRUE )</p>
|
4627 |
-
<p class="comment">output = array( "value" => repeatTimes<span class="ref">1</span>
|
4628 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4629 |
-
<p class="label">Example</p>
|
4630 |
-
<p class="example">$repeat = $vtodo->getProperty( "REPEAT" );</p>
|
4631 |
-
<h5>Set REPEAT</h5>
|
4632 |
-
Insert property value.
|
4633 |
-
<p class="label">Format</p>
|
4634 |
-
<p class="format">setProperty( "repeat", 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 => xparamvalue ] )</p>
|
4637 |
-
<p class="label">Example</p>
|
4638 |
-
<p class="example">$valarm->setProperty( "repeat", 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( "REQUEST-STATUS" )</p>
|
4649 |
-
<p class="label">Example 1</p>
|
4650 |
-
<p class="example">$vtodo->deleteProperty( "REQUEST-STATUS" );</p>
|
4651 |
-
<p class="label">Example 2</p>
|
4652 |
-
Delete REQUEST-STATUS property no 2.
|
4653 |
-
<p class="example">$vjournal->deleteProperty( "REQUEST-STATUS", 2 );</p>
|
4654 |
-
<p class="label">Example 3</p>
|
4655 |
-
Deleting all REQUEST-STATUS properties.
|
4656 |
-
<p class="example">while( $vjournal->deleteProperty( "REQUEST-STATUS" ))
|
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( "REQUEST-STATUS" )</p>
|
4662 |
-
<p class="comment">output = array( "statcode" => statcode<span class="ref">1</span>
|
4663 |
-
, "text" => errtext<span class="ref">2</span>
|
4664 |
-
[ , "extdata" => extraData<span class="ref"> 3</span> ] )</p>
|
4665 |
-
<p class="label">Format 2</p>
|
4666 |
-
<p class="format">getProperty( "REQUEST-STATUS", propOrderNo/FALSE, TRUE )</p>
|
4667 |
-
<p class="comment">output = array( "value" => array( "statcode" => statcode<span class="ref">1</span>
|
4668 |
-
, "text" => errtext<span class="ref">2</span>
|
4669 |
-
[ , "extdata" => extraData<span class="ref">3</span> ] )
|
4670 |
-
, "params" => params<span class="ref">4</span> )</p>
|
4671 |
-
<p class="label">Format 3</p>
|
4672 |
-
<p class="format">getProperty( "REQUEST-STATUS", propOrderNo )</p>
|
4673 |
-
<p class="comment">Get propOrderNo REQUEST-STATUS</p>
|
4674 |
-
<p class="label">Example</p>
|
4675 |
-
<p class="example">$requestStatus = $vtodo->getProperty( "REQUEST-STATUS" );</p>
|
4676 |
-
<h5>Set REQUEST-STATUS</h5>
|
4677 |
-
Insert property value.
|
4678 |
-
<p class="label">Format</p>
|
4679 |
-
<p class="format">setProperty( "Request-Status"
|
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 *("." 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( ["LANGUAGE" => "<lang>"] [, xparam ] )
|
4688 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4689 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4690 |
-
<p class="label">Example</p>
|
4691 |
-
<p class="example">$vfreebusy->setProperty("request-status"
|
4692 |
-
, 2.0
|
4693 |
-
, "Invalid property value"
|
4694 |
-
, "DTSTART:96-Apr-31");</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( "RESOURCES" )</p>
|
4706 |
-
<p class="label">Example 1</p>
|
4707 |
-
<p class="example">$vevent->deleteProperty( "RESOURCES" );</p>
|
4708 |
-
<p class="label">Example 2</p>
|
4709 |
-
Delete RESOURCES property no 2.
|
4710 |
-
<p class="example">$vevent->deleteProperty( "RESOURCES", 2 );</p>
|
4711 |
-
<p class="label">Example 3</p>
|
4712 |
-
Deleting all RESOURCES properties.
|
4713 |
-
<p class="example">while( $vevent->deleteProperty( "RESOURCES" ))
|
4714 |
-
continue;</p>
|
4715 |
-
<h5>Get RESOURCES</h5>
|
4716 |
-
Fetch property value.
|
4717 |
-
<p class="label">Format 1</p>
|
4718 |
-
<p class="format">getProperty( "RESOURCES" )</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( "RESOURCES", propOrderNo/FALSE, TRUE )</p>
|
4722 |
-
<p class="comment">output = array( "value" => resources<span class="ref">1</span>
|
4723 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4724 |
-
<p class="label">Format 3</p>
|
4725 |
-
<p class="format">getProperty( "RESOURCES", propOrderNo )</p>
|
4726 |
-
<p class="comment">Get propOrderNo RESOURCES</p>
|
4727 |
-
<p class="label">Example</p>
|
4728 |
-
<p class="example">$resources = $vtodo->getProperty( "RESOURCES" );</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( "resources", 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([ "ALTREP" => "<an alternate text representation, URI>"]
|
4740 |
-
[, "LANGUAGE" => "<lang>"]
|
4741 |
-
[, xparam] )
|
4742 |
-
xparam = *[ xparamkey => xparamvalue ]
|
4743 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
4744 |
-
<p class="label">Example</p>
|
4745 |
-
<p class="example">$vevent->setProperty( "resources", "COMPUTER PROJECTOR" );</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( "RRULE" )</p>
|
4756 |
-
<p class="label">Example 1</p>
|
4757 |
-
<p class="example">$vevent->deleteProperty( "RRULE" );</p>
|
4758 |
-
<p class="label">Example 2</p>
|
4759 |
-
Delete RRULE property no 2.
|
4760 |
-
<p class="example">$vevent->deleteProperty( "RRULE", 2 );</p>
|
4761 |
-
<p class="label">Example 3</p>
|
4762 |
-
Deleting all RRULE properties.
|
4763 |
-
<p class="example">while( $vevent->deleteProperty( "RRULE" ))
|
4764 |
-
continue;</p>
|
4765 |
-
<h5>Get RRULE</h5>
|
4766 |
-
Fetch property value.
|
4767 |
-
<p class="label">Format 1</p>
|
4768 |
-
<p class="format">getProperty( "RRULE" )</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( "RRULE", propOrderNo/FALSE, TRUE )</p>
|
4772 |
-
<p class="comment">output = array( "value" => recur<span class="ref">1</span>
|
4773 |
-
, "params" => xparams<span class="ref">2</span> )</p>
|
4774 |
-
<p class="label">Format 3</p>
|
4775 |
-
<p class="format">getProperty( "RRULE", propOrderNo )</p>
|
4776 |
-
<p class="comment">Get propOrderNo RRULE</p>
|
4777 |
-
<p class="label">Example</p>
|
4778 |
-
<p class="example">$rrules = $vtodo->getProperty( "RRULE" );</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( "rrule", 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 => 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( "SEQUENCE" )</p>
|
4817 |
-
<p class="label">Example</p>
|
4818 |
-
<p class="example">$vtodo->deleteProperty( "SEQUENCE" );</p>
|
4819 |
-
<h5>Get SEQUENCE</h5>
|
4820 |
-
Fetch property value.
|
4821 |
-
<p class="label">Format 1</p>
|
4822 |
-
<p class="format">getProperty( "SEQUENCE" )</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( "SEQUENCE", FALSE , TRUE )</p>
|
4826 |
-
<p class="comment">output = array( "value" => sequence<span class="ref">1</span>
|
4827 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4828 |
-
<p class="label">Example</p>
|
4829 |
-
<p class="example">$sequence = $vtodo->getProperty( "SEQUENCE" );</p>
|
4830 |
-
<h5>Set SEQUENCE</h5>
|
4831 |
-
Insert property value.
|
4832 |
-
<p class="label">Format</p>
|
4833 |
-
<p class="format">setProperty( "sequence" [, 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 => xparamvalue ] )</p>
|
4836 |
-
<p class="label">Example 1</p>
|
4837 |
-
<p class="example">$vevent->setProperty( "sequence", 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( "sequence" );
|
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( "STATUS" )</p>
|
4853 |
-
<p class="label">Example</p>
|
4854 |
-
<p class="example">$vtodo->deleteProperty( "STATUS" );</p>
|
4855 |
-
<h5>Get STATUS</h5>
|
4856 |
-
Fetch property value.
|
4857 |
-
<p class="label">Format 1</p>
|
4858 |
-
<p class="format">getProperty( "STATUS" )</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( "STATUS", FALSE , TRUE )</p>
|
4862 |
-
<p class="comment">output = array( "value" => status<span class="ref">1</span>
|
4863 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4864 |
-
<p class="label">Example</p>
|
4865 |
-
<p class="example">$status = $vtodo->getProperty( "STATUS" );</p>
|
4866 |
-
<h5>Set STATUS</h5>
|
4867 |
-
Insert property value.
|
4868 |
-
<p class="label">Format</p>
|
4869 |
-
<p class="format">setProperty( "status", 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> = "TENTATIVE" // <span class="ref">Indicates event is tentative</span>
|
4872 |
-
/ "CONFIRMED" // <span class="ref">Indicates event is definite</span>
|
4873 |
-
/ "CANCELLED" // <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> = "NEEDS-ACTION" // <span class="ref">Indicates to-do needs action</span>
|
4876 |
-
/ "COMPLETED" // <span class="ref">Indicates to-do completed</span>
|
4877 |
-
/ "IN-PROCESS" // <span class="ref">Indicates to-do in process of</span>
|
4878 |
-
/ "CANCELLED" // <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> = "DRAFT" // <span class="ref">Indicates journal is draft</span>
|
4881 |
-
/ "FINAL" // <span class="ref">Indicates journal is final</span>
|
4882 |
-
/ "CANCELLED" // <span class="ref">Indicates journal is removed</span>
|
4883 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4884 |
-
<p class="label">Example</p>
|
4885 |
-
<p class="example">$vevent->setProperty( "Status", "COMPLETED" );</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 ("one line") summary or subject for the calendar component. (In "rfc2445, Recommended Practices", 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( "SUMMARY" )</p>
|
4897 |
-
<p class="label">Example</p>
|
4898 |
-
<p class="example">$vevent->deleteProperty( "SUMMARY" );</p>
|
4899 |
-
<h5>Get SUMMARY</h5>
|
4900 |
-
Fetch property value.
|
4901 |
-
<p class="label">Format 1</p>
|
4902 |
-
<p class="format">getProperty( "SUMMARY" )</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( "SUMMARY", FALSE , TRUE )</p>
|
4906 |
-
<p class="comment">output = array( "value" => summary<span class="ref">1</span>
|
4907 |
-
, "params" => params<span class="ref">2</span> )</p>
|
4908 |
-
<p class="label">Example</p>
|
4909 |
-
<p class="example">$summary = $vtodo->getProperty( "SUMMARY" );</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( "summary", 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( ["ALTREP" => "<an alternate text representation, URI>"]
|
4919 |
-
[, "LANGUAGE" => "<lang>"]
|
4920 |
-
[, xparam ] )
|
4921 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
4922 |
-
<p class="label">Example</p>
|
4923 |
-
<p class="example">$vevent->setProperty( "summary", "This is a summary" );</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( "TRANSP" )</p>
|
4934 |
-
<p class="label">Example</p>
|
4935 |
-
<p class="example">$vevent->deleteProperty( "TRANSP" );</p>
|
4936 |
-
<h5>Get TRANSP</h5>
|
4937 |
-
Fetch property value.
|
4938 |
-
<p class="label">Format 1</p>
|
4939 |
-
<p class="format">getProperty( "TRANSP" )</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( "TRANSP", FALSE , TRUE )</p>
|
4943 |
-
<p class="comment">output = array( "value" => transp<span class="ref">1</span>
|
4944 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
4945 |
-
<p class="label">Example</p>
|
4946 |
-
<p class="example">$transp = $vtodo->getProperty( "TRANSP" );</p>
|
4947 |
-
<h5>Set TRANSP</h5>
|
4948 |
-
Insert property value.
|
4949 |
-
<p class="label">Format</p>
|
4950 |
-
<p class="format">setProperty( "transp", transp [, xparam ] )</p>
|
4951 |
-
<p class="comment">transp<span class="ref">1</span> = "OPAQUE" / "TRANSPARENT"
|
4952 |
-
xparam<span class="ref">2</span> = array( *[ xparamkey => xparamvalue ] )</p>
|
4953 |
-
<p class="label">Example</p>
|
4954 |
-
<p class="example">$vevent->setProperty( "transp", "TRANSPARENT" );</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( "TRIGGER" )</p>
|
4966 |
-
<p class="label">Example</p>
|
4967 |
-
<p class="example">$valarm->deleteProperty( "TRIGGER" );</p>
|
4968 |
-
<h5>Get TRIGGER</h5>
|
4969 |
-
Fetch property value.
|
4970 |
-
<p class="label">Format 1</p>
|
4971 |
-
<p class="format">getProperty( "TRIGGER" )</p>
|
4972 |
-
<p class="comment">output = duration/date</p>
|
4973 |
-
<p class="label">Format 2</p>
|
4974 |
-
<p class="format">getProperty( "TRIGGER", FALSE , TRUE )</p>
|
4975 |
-
<p class="comment">output = array( "value" => duration<span class="ref">1</span>/date<span class="ref">3</span> )
|
4976 |
-
, "params" => params<span class="ref">4</span> )
|
4977 |
-
<p class="label">Example</p>
|
4978 |
-
<p class="example">$trigger = $vtodo->getProperty( "TRIGGER" );</p>
|
4979 |
-
<h5>Set TRIGGER</h5>
|
4980 |
-
Insert property value.
|
4981 |
-
<p class="label">Format 1</p>
|
4982 |
-
<p class="format">setProperty( "trigger", 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( "trigger", 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( "trigger", date<span class="ref">3</span> [, params<span class="ref">4</span> ] )</p>
|
4987 |
-
<p class="label">Format</p>
|
4988 |
-
<p class="format">setProperty( "trigger", 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( "week" => int week
|
4999 |
-
, "relatedStart" => bool relstart
|
5000 |
-
, "before" => bool before )
|
5001 |
-
duration<span class="ref">1</span> = array( "day" => int day
|
5002 |
-
, "hour" => int hour
|
5003 |
-
, "min" => int min
|
5004 |
-
, "sec" => int sec
|
5005 |
-
, "relatedStart" => bool relstart
|
5006 |
-
, "before" => 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 = (["+"]/"-")"P"(dur-date/dur-time/dur-week)
|
5012 |
-
dur-date = dur-day [dur-time]
|
5013 |
-
dur-time = "T" (dur-hour / dur-minute / dur-second)
|
5014 |
-
dur-week = 1*DIGIT "W"
|
5015 |
-
dur-day = 1*DIGIT "D"
|
5016 |
-
dur-hour = 1*DIGIT "H" [dur-minute]
|
5017 |
-
dur-minute = 1*DIGIT "M" [dur-second]
|
5018 |
-
dur-second = 1*DIGIT "S"
|
5019 |
-
date<span class="ref">3</span> = array( "year" => int year // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
|
5020 |
-
, "month" => int month
|
5021 |
-
, "day" => int day
|
5022 |
-
[, "hour" => int hour
|
5023 |
-
, "min" => int min
|
5024 |
-
, "sec" => int sec ])
|
5025 |
-
date<span class="ref">3</span> = array ( "timestamp" => 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. "14 august 2006 16.00.00"
|
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 = "RELATED" => "START" (default) / "END"
|
5034 |
-
trigRelparam = "VALUE" => "DURATION"
|
5035 |
-
datetimeparam= "VALUE" => "DATE-TIME"
|
5036 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
5037 |
-
<p class="label">Example 1</p>
|
5038 |
-
<p class="example">$valarm->setProperty( "trigger"
|
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( "trigger"
|
5043 |
-
, array ("hour"=>1,"min"=>2,"sec"=>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( "trigger"
|
5047 |
-
, "PT1H2M3S" );
|
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( "trigger"
|
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( "trigger"
|
5056 |
-
, array ( "week" => 1
|
5057 |
-
, "relatedStart" => FALSE
|
5058 |
-
, "before" => 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( "trigger"
|
5062 |
-
, "P1W"
|
5063 |
-
, array( "related" => "END" ));
|
5064 |
-
<span class="comment">// duration, 1 week after end</span></p>
|
5065 |
-
<p class="label">Example 7</p>
|
5066 |
-
<p class="example">$valarm->setProperty( "trigger"
|
5067 |
-
, array( "year" => 2007
|
5068 |
-
, "month" => 6
|
5069 |
-
, "day" => 5,
|
5070 |
-
, "hour" => 2
|
5071 |
-
, "min" => 2
|
5072 |
-
, "sec" => 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( "TZID" )</p>
|
5084 |
-
<p class="label">Example</p>
|
5085 |
-
<p class="example">$vtimezone->deleteProperty( "TZID" );</p>
|
5086 |
-
<h5>Get TZID</h5>
|
5087 |
-
Fetch property value.
|
5088 |
-
<p class="label">Format 1</p>
|
5089 |
-
<p class="format">getProperty( "TZID" )</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( "TZID", FALSE , TRUE )</p>
|
5093 |
-
<p class="comment">output = array( "value" => tzid<span class="ref">1</span>
|
5094 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5095 |
-
<p class="label">Example</p>
|
5096 |
-
<p class="example">$tzid = $vtimezone->getProperty( "TZID" );</p>
|
5097 |
-
<h5>Set TZID</h5>
|
5098 |
-
Insert property value.
|
5099 |
-
<p class="label">Format</p>
|
5100 |
-
<p class="format">setProperty( "tzid", 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 => xparamvalue ] )</p>
|
5103 |
-
<p class="label">Example</p>
|
5104 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
5105 |
-
$vcalendar = new vcalendar( $config );
|
5106 |
-
$vtimezone = & $vcalendar->newComponent( 'vtimezone' );
|
5107 |
-
$vtimezone->setProperty( "tzid", "US-Eastern" );
|
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( "TZNAME" )</p>
|
5120 |
-
<p class="label">Example 1</p>
|
5121 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZNAME" );</p>
|
5122 |
-
<p class="label">Example 2</p>
|
5123 |
-
Delete TZNAME property no 2.
|
5124 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZNAME", 2 );</p>
|
5125 |
-
<p class="label">Example 3</p>
|
5126 |
-
Deleting all TZNAME properties.
|
5127 |
-
<p class="example">while( $vtimezonestd->deleteProperty( "TZNAME" ))
|
5128 |
-
continue;</p>
|
5129 |
-
<h5>Get TZNAME</h5>
|
5130 |
-
Fetch property value.
|
5131 |
-
<p class="label">Format 1</p>
|
5132 |
-
<p class="format">getProperty( "TZNAME" )</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( "TZNAME", propOrderNo/FALSE, TRUE )</p>
|
5136 |
-
<p class="comment">output = array( "value" => tzname<span class="ref">1</span>
|
5137 |
-
, "params" => params<span class="ref">2</span> )</p>
|
5138 |
-
<p class="label">Format 3</p>
|
5139 |
-
<p class="format">getProperty( "TZNAME", propOrderNo )</p>
|
5140 |
-
<p class="comment">Get propOrderNo TZNAME</p>
|
5141 |
-
<p class="label">Example</p>
|
5142 |
-
<p class="example">$tzname = $timezonestandard->getProperty( "TZNAME" );</p>
|
5143 |
-
<h5>Set TZNAME</h5>
|
5144 |
-
Insert property value.
|
5145 |
-
<p class="label">Format</p>
|
5146 |
-
<p class="format">setProperty( "tzname", 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( [ "LANGUAGE" => "<lang>" ] [, xparam ] )
|
5149 |
-
xparam = *[ xparamkey => xparamvalue ]
|
5150 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
5151 |
-
<p class="label">Example</p>
|
5152 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
5153 |
-
$vcalendar = new vcalendar( $config );
|
5154 |
-
$vtimezone = & $vcalendar->newComponent( 'vtimezone' );
|
5155 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5156 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5157 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5158 |
-
$standard->setProperty( "tzname", "EST" );
|
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( "TZOFFSETFROM" )</p>
|
5171 |
-
<p class="label">Example</p>
|
5172 |
-
<p class="example">$vtimezonestd->deleteProperty( "TZOFFSETFROM" );</p>
|
5173 |
-
<h5>Get TZOFFSETFROM</h5>
|
5174 |
-
Fetch property value.
|
5175 |
-
<p class="label">Format 1</p>
|
5176 |
-
<p class="format">getProperty( "TZOFFSETFROM" )</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( "TZOFFSETFROM", FALSE , TRUE )</p>
|
5180 |
-
<p class="comment">output = array( "value" => tzoffsetfrom<span class="ref">1</span>
|
5181 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5182 |
-
<p class="label">Example</p>
|
5183 |
-
<p class="example">$tzoffsetfrom = $timezonestandard->getProperty( "TZOFFSETFROM" );</p>
|
5184 |
-
<h5>Set TZOFFSETFROM</h5>
|
5185 |
-
Insert property value.
|
5186 |
-
<p class="label">Format</p>
|
5187 |
-
<p class="format">setProperty( "tzoffsetfrom", 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 => xparamvalue ] )</p>
|
5190 |
-
<p class="label">Example</p>
|
5191 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
5192 |
-
$vcalendar = new vcalendar( $config );
|
5193 |
-
$vtimezone = & $vcalendar->newComponent( 'vtimezone' );
|
5194 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5195 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5196 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5197 |
-
$standard->setProperty( "tzname", "EST" );
|
5198 |
-
$standard->setProperty( "tzoffsetfrom", "-0500" );
|
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( "TZOFFSETTO" )</p>
|
5211 |
-
<p class="label">Example</p>
|
5212 |
-
<p class="example">$daylight->deleteProperty( "TZOFFSETTO" );</p>
|
5213 |
-
<h5>Get TZOFFSETTO</h5>
|
5214 |
-
Fetch property value.
|
5215 |
-
<p class="label">Format 1</p>
|
5216 |
-
<p class="format">getProperty( "TZOFFSETTO" )</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( "TZOFFSETTO", FALSE , TRUE )</p>
|
5220 |
-
<p class="comment">output = array( "value" => tzoffsetto<span class="ref">1</span>
|
5221 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5222 |
-
<p class="label">Example</p>
|
5223 |
-
<p class="example">$tzoffsetto = $timezonestandard->getProperty( "TZOFFSETTO" );</p>
|
5224 |
-
<h5>Set TZOFFSETTO</h5>
|
5225 |
-
Insert property value.
|
5226 |
-
<p class="label">Format</p>
|
5227 |
-
<p class="format">setproperty( "tzoffsetto", 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 => xparamvalue ] )</p>
|
5230 |
-
<p class="label">Example</p>
|
5231 |
-
<p class="example">$config = array( "unique_id" => "domain.com" );
|
5232 |
-
$vcalendar = new vcalendar( $config );
|
5233 |
-
$vtimezone = & $vcalendar->newComponent( 'vtimezone' );
|
5234 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5235 |
-
$vtimezone->setProperty( "Last-Modified", "19870101" );
|
5236 |
-
$standard = & $vtimezone->newComponent( "standard" );
|
5237 |
-
.. .
|
5238 |
-
$daylight = & $vtimezone->newComponent( "daylight" );
|
5239 |
-
$daylight->setProperty( "tzoffsetto", "1345" );
|
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( "TZURL" )</p>
|
5253 |
-
<p class="label">Example</p>
|
5254 |
-
<p class="example">$vtimezone->deleteProperty( "TZURL" );</p>
|
5255 |
-
<h5>Get TZURL</h5>
|
5256 |
-
Fetch property value.
|
5257 |
-
<p class="label">Format 1</p>
|
5258 |
-
<p class="format">getProperty( "TZURL" )</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( "TZURL", FALSE , TRUE )</p>
|
5262 |
-
<p class="comment">output = array( "value" => tzurl<span class="ref">1</span>
|
5263 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5264 |
-
<p class="label">Example</p>
|
5265 |
-
<p class="example">$tzurl = $timezonestandard->getProperty( "TZURL" );</p>
|
5266 |
-
<h5>Set TZURL</h5>
|
5267 |
-
Insert property value.
|
5268 |
-
<p class="label">Format</p>
|
5269 |
-
<p class="format">setProperty( "tzurl", 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 => xparamvalue ] )</p>
|
5272 |
-
<p class="label">Example</p>
|
5273 |
-
<p class="example">$tz = "http://zones.stds_r_us.net/tz/US-Eastern" );
|
5274 |
-
$config = array( "unique_id" => "domain.com" );
|
5275 |
-
$vcalendar = new vcalendar( $config );
|
5276 |
-
$vtimezone = & $vcalendar->newComponent( 'vtimezone' );
|
5277 |
-
$vtimezone->setProperty( "Tzid", "US-Eastern" );
|
5278 |
-
$vtimezone->setProperty( "Last-Modified", "19870101T000000" );
|
5279 |
-
$vtimezone->setProperty( "tzurl", $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("Ymd\THisT")."-".[microSec][random]."@".<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">"20070803T194810CEST-0123U3PXiX@domain.com"</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( "UID" )</p>
|
5308 |
-
<p class="label">Example</p>
|
5309 |
-
<p class="example">$vevent->deleteProperty( "UID" );</p>
|
5310 |
-
<h5>Get UID</h5>
|
5311 |
-
Fetch property value.
|
5312 |
-
<p class="label">Format 1</p>
|
5313 |
-
<p class="format">getProperty( "UID" )</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( "UID", FALSE , TRUE )</p>
|
5317 |
-
<p class="comment">output = array( "value" => uid<span class="ref">1</span>
|
5318 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5319 |
-
<p class="label">Example</p>
|
5320 |
-
<p class="example">$uid = $vevent->getProperty( "UID" );</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. "vevent"), 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( "uid", 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 => xparamvalue ] )</p>
|
5328 |
-
<p class="label">Example</p>
|
5329 |
-
<p class="example">$vevent->setProperty("uid","20070803T194810CEST-0123U3PXiX@domain.com");</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( "URL" )</p>
|
5341 |
-
<p class="label">Example</p>
|
5342 |
-
<p class="example">$vevent->deleteProperty( "URL" );</p>
|
5343 |
-
<h5>Get URL</h5>
|
5344 |
-
Fetch property value.
|
5345 |
-
<p class="label">Format 1</p>
|
5346 |
-
<p class="format">getProperty( "URL" )</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( "URL", FALSE , TRUE )</p>
|
5350 |
-
<p class="comment">output = array "value" => url<span class="ref">1</span>
|
5351 |
-
, "params" => xparam<span class="ref">2</span> )</p>
|
5352 |
-
<p class="label">Example</p>
|
5353 |
-
<p class="example">$url = $vevent->getProperty( "URL" );</p>
|
5354 |
-
<h5>Set URL</h5>
|
5355 |
-
Insert property value.<br/>
|
5356 |
-
<p class="label">Format</p>
|
5357 |
-
<p class="format">setProperty( "url", 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 => xparamvalue ] (</p>
|
5360 |
-
<p class="label">Example</p>
|
5361 |
-
<p class="example">$vtodo->setProperty( "url", "http://www.icaldomain.net" );</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 "X-" 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( "<X-PROPERTY>" )</p>
|
5374 |
-
<p class="label">Example 1</p>
|
5375 |
-
<p class="example">$vevent->deleteProperty( "<X-PROPERTY>" );</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( "<X-PROPERTY>" )</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 ( "value" => propertyData<span class="ref">2</span> )
|
5394 |
-
, "params" => params<span class="ref"> 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( "unique_id" => "domain.com",
|
5401 |
-
"filename", "file.ics" ); );
|
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( "unique_id" => "domain.com",
|
5411 |
-
"filename", "file.ics" ); );
|
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( "unique_id" => "domain.com",
|
5420 |
-
"filename", "file.ics" ); );
|
5421 |
-
$vcalendar = new vcalendar( $config );
|
5422 |
-
$vcalendar->parse();
|
5423 |
-
while( $xprop = $vcalendar->getProperty( "X-ABC-MMSUBJ" )) {
|
5424 |
-
.. .</p>
|
5425 |
-
<p class="comment"> // $xprop = array( "X-ABC-MMSUBJ", propertyData<span class="ref">2</span> )</p>
|
5426 |
-
<p class="label">Example 4</p>
|
5427 |
-
<p class="example">$config = array( "unique_id" => "domain.com",
|
5428 |
-
"filename", "file.ics" ); );
|
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( "value" => propertyData<span class="ref">2</span> )
|
5435 |
-
// , "params" => params<span class="ref"> 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 "X-" prefix
|
5441 |
-
propertyData<span class="ref">2</span> = Value type TEXT
|
5442 |
-
params<span class="ref">3</span> = array( ["LANGUAGE" => "<lang>"] [, xparam] )
|
5443 |
-
xparam = *[ xparamkey => xparamvalue ]</p>
|
5444 |
-
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
|
5445 |
-
<p class="label">Example</p>
|
5446 |
-
<p class="example">$component->setProperty("X-ABC-MMSUBJ","http://load.noise.org/mysubj.wav");</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 "setConfig" 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( "language" )</p>
|
5462 |
-
<p class="label">Example</p>
|
5463 |
-
<p class="example">$lang = $vevent->getConfig( "language" );</p>
|
5464 |
-
<h5>Set LANGUAGE</h5>
|
5465 |
-
<p class="label">Format</p>
|
5466 |
-
<p class="format">setConfig( "language", string <lang> )</p>
|
5467 |
-
<p class="label">Example</p>
|
5468 |
-
<p class="example">$vevent->setConfig( "language", "en" );</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. "vevent")
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|