New timezone management for importer (now working as expected ;) )

Dynamic timezone-change preview =)

TODO: 
 - complete timezone mapping list!
 - check exporter timezone management
This commit is contained in:
Christoph Haas 2012-12-29 18:49:24 +00:00
parent 7d42712f43
commit fb426098d6
8 changed files with 284 additions and 148 deletions

View File

@ -1,3 +1,12 @@
/**
* ResponseHandler
*
* This class handles all responses from the php backend
*
* @author Christoph Haas <mail@h44z.net>
* @modified 29.12.2012
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
Ext.namespace('Zarafa.plugins.calendarimporter.data'); Ext.namespace('Zarafa.plugins.calendarimporter.data');
/** /**

View File

@ -1,84 +1,164 @@
/**
* Timezone class
*
* This class can handle all our timezone operations and conversions.
*
* @author Christoph Haas <mail@h44z.net>
* @modified 29.12.2012
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
Ext.namespace("Zarafa.plugins.calendarimporter.data"); Ext.namespace("Zarafa.plugins.calendarimporter.data");
Zarafa.plugins.calendarimporter.data.Timezones = Ext.extend(Object, { Zarafa.plugins.calendarimporter.data.Timezones = Ext.extend(Object, {
store : [ store : [
['Pacific/Midway','(UTC -11:00) Midway, Niue, Pago Pago'], ['Pacific/Midway','(UTC -11:00) Midway, Niue, Pago Pago', -660],
['America/Adak','(UTC -10:00) Adak'], ['America/Adak','(UTC -10:00) Adak', -600],
['Pacific/Fakaofo','(UTC -10:00) Fakaofo, Honolulu, Johnston, Rarotonga, Tahiti'], ['Pacific/Fakaofo','(UTC -10:00) Fakaofo, Honolulu, Johnston, Rarotonga, Tahiti', -600],
['Pacific/Marquesas','(UTC -10:30) Marquesas'], ['Pacific/Marquesas','(UTC -10:30) Marquesas', -630],
['America/Anchorage','(UTC -09:00) Anchorage, Juneau, Nome, Sitka, Yakutat'], ['America/Anchorage','(UTC -09:00) Anchorage, Juneau, Nome, Sitka, Yakutat', -540],
['Pacific/Gambier','(UTC -09:00) Gambier'], ['Pacific/Gambier','(UTC -09:00) Gambier', -540],
['America/Dawson','(UTC -08:00) Dawson, Los Angeles, Tijuana, Vancouver, Whitehorse'], ['America/Dawson','(UTC -08:00) Dawson, Los Angeles, Tijuana, Vancouver, Whitehorse', -480],
['America/Santa_Isabel','(UTC -08:00) Santa Isabel'], ['America/Santa_Isabel','(UTC -08:00) Santa Isabel', -480],
['America/Metlakatla','(UTC -08:00) Metlakatla, Pitcairn'], ['America/Metlakatla','(UTC -08:00) Metlakatla, Pitcairn', -480],
['America/Dawson_Creek','(UTC -07:00) Dawson Creek, Hermosillo, Phoenix'], ['America/Dawson_Creek','(UTC -07:00) Dawson Creek, Hermosillo, Phoenix', -420],
['America/Chihuahua','(UTC -07:00) Chihuahua, Mazatlan'], ['America/Chihuahua','(UTC -07:00) Chihuahua, Mazatlan', -420],
['America/Boise','(UTC -07:00) Boise, Cambridge Bay, Denver, Edmonton, Inuvik, Ojinaga, Shiprock, Yellowknife'], ['America/Boise','(UTC -07:00) Boise, Cambridge Bay, Denver, Edmonton, Inuvik, Ojinaga, Shiprock, Yellowknife', -420],
['America/Chicago','(UTC -06:00) Beulah, Center, Chicago, Knox, Matamoros, Menominee, New Salem, Rainy River, Rankin Inlet, Resolute, Tell City, Winnipeg'], ['America/Chicago','(UTC -06:00) Beulah, Center, Chicago, Knox, Matamoros, Menominee, New Salem, Rainy River, Rankin Inlet, Resolute, Tell City, Winnipeg', -360],
['America/Belize','(UTC -06:00) Belize, Costa Rica, El Salvador, Galapagos, Guatemala, Managua, Regina, Swift Current, Tegucigalpa'], ['America/Belize','(UTC -06:00) Belize, Costa Rica, El Salvador, Galapagos, Guatemala, Managua, Regina, Swift Current, Tegucigalpa', -360],
['Pacific/Easter','(UTC -06:00) Easter'], ['Pacific/Easter','(UTC -06:00) Easter', -360],
['America/Bahia_Banderas','(UTC -06:00) Bahia Banderas, Cancun, Merida, Mexico City, Monterrey'], ['America/Bahia_Banderas','(UTC -06:00) Bahia Banderas, Cancun, Merida, Mexico City, Monterrey', -360],
['America/Detroit','(UTC -05:00) Detroit, Grand Turk, Indianapolis, Iqaluit, Louisville, Marengo, Monticello, Montreal, Nassau, New York, Nipigon, Pangnirtung, Petersburg, Thunder Bay, Toronto, Vevay, Vincennes, Winamac'], ['America/Detroit','(UTC -05:00) Detroit, Grand Turk, Indianapolis, Iqaluit, Louisville, Marengo, Monticello, Montreal, Nassau, New York, Nipigon, Pangnirtung, Petersburg, Thunder Bay, Toronto, Vevay, Vincennes, Winamac', -300],
['America/Atikokan','(UTC -05:00) Atikokan, Bogota, Cayman, Guayaquil, Jamaica, Lima, Panama, Port-au-Prince'], ['America/Atikokan','(UTC -05:00) Atikokan, Bogota, Cayman, Guayaquil, Jamaica, Lima, Panama, Port-au-Prince', -300],
['America/Havana','(UTC -05:00) Havana'], ['America/Havana','(UTC -05:00) Havana', -300],
['America/Caracas','(UTC -05:30) Caracas'], ['America/Caracas','(UTC -05:30) Caracas', -330],
['America/Glace_Bay','(UTC -04:00) Bermuda, Glace Bay, Goose Bay, Halifax, Moncton, Thule'], ['America/Glace_Bay','(UTC -04:00) Bermuda, Glace Bay, Goose Bay, Halifax, Moncton, Thule', -240],
['Atlantic/Stanley','(UTC -04:00) Stanley'], ['Atlantic/Stanley','(UTC -04:00) Stanley', -240],
['America/Santiago','(UTC -04:00) Palmer, Santiago'], ['America/Santiago','(UTC -04:00) Palmer, Santiago', -240],
['America/Anguilla','(UTC -04:00) Anguilla, Antigua, Aruba, Barbados, Blanc-Sablon, Boa Vista, Curacao, Dominica, Eirunepe, Grenada, Guadeloupe, Guyana, Kralendijk, La Paz, Lower Princes, Manaus, Marigot, Martinique, Montserrat, Port of Spain, Porto Velho, Puerto Rico, Rio Branco, Santo Domingo, St Barthelemy, St Kitts, St Lucia, St Thomas, St Vincent, Tortola'], ['America/Anguilla','(UTC -04:00) Anguilla, Antigua, Aruba, Barbados, Blanc-Sablon, Boa Vista, Curacao, Dominica, Eirunepe, Grenada, Guadeloupe, Guyana, Kralendijk, La Paz, Lower Princes, Manaus, Marigot, Martinique, Montserrat, Port of Spain, Porto Velho, Puerto Rico, Rio Branco, Santo Domingo, St Barthelemy, St Kitts, St Lucia, St Thomas, St Vincent, Tortola', -240],
['America/Campo_Grande','(UTC -04:00) Campo Grande, Cuiaba'], ['America/Campo_Grande','(UTC -04:00) Campo Grande, Cuiaba', -240],
['America/Asuncion','(UTC -04:00) Asuncion'], ['America/Asuncion','(UTC -04:00) Asuncion', -240],
['America/St_Johns','(UTC -04:30) St Johns'], ['America/St_Johns','(UTC -04:30) St Johns', -270],
['America/Sao_Paulo','(UTC -03:00) Sao Paulo'], ['America/Sao_Paulo','(UTC -03:00) Sao Paulo', -180],
['America/Araguaina','(UTC -03:00) Araguaina, Bahia, Belem, Buenos Aires, Catamarca, Cayenne, Cordoba, Fortaleza, Jujuy, La Rioja, Maceio, Mendoza, Paramaribo, Recife, Rio Gallegos, Rothera, Salta, San Juan, Santarem, Tucuman, Ushuaia'], ['America/Araguaina','(UTC -03:00) Araguaina, Bahia, Belem, Buenos Aires, Catamarca, Cayenne, Cordoba, Fortaleza, Jujuy, La Rioja, Maceio, Mendoza, Paramaribo, Recife, Rio Gallegos, Rothera, Salta, San Juan, Santarem, Tucuman, Ushuaia', -180],
['America/Montevideo','(UTC -03:00) Montevideo'], ['America/Montevideo','(UTC -03:00) Montevideo', -180],
['America/Godthab','(UTC -03:00) Godthab'], ['America/Godthab','(UTC -03:00) Godthab', -180],
['America/Argentina/San_Luis','(UTC -03:00) San Luis'], ['America/Argentina/San_Luis','(UTC -03:00) San Luis', -180],
['America/Miquelon','(UTC -03:00) Miquelon'], ['America/Miquelon','(UTC -03:00) Miquelon', -180],
['America/Noronha','(UTC -02:00) Noronha, South Georgia'], ['America/Noronha','(UTC -02:00) Noronha, South Georgia', -120],
['Atlantic/Cape_Verde','(UTC -01:00) Cape Verde'], ['Atlantic/Cape_Verde','(UTC -01:00) Cape Verde', -60],
['America/Scoresbysund','(UTC -01:00) Azores, Scoresbysund'], ['America/Scoresbysund','(UTC -01:00) Azores, Scoresbysund', -60],
['Atlantic/Canary','(UTC) Canary, Dublin, Faroe, Guernsey, Isle of Man, Jersey, Lisbon, London, Madeira'], ['Atlantic/Canary','(UTC) Canary, Dublin, Faroe, Guernsey, Isle of Man, Jersey, Lisbon, London, Madeira', 0],
['Africa/Abidjan','(UTC) Abidjan, Accra, Bamako, Banjul, Bissau, Casablanca, Conakry, Dakar, Danmarkshavn, El Aaiun, Freetown, Lome, Monrovia, Nouakchott, Ouagadougou, Reykjavik, Sao Tome, St Helena'], ['Africa/Abidjan','(UTC) Abidjan, Accra, Bamako, Banjul, Bissau, Casablanca, Conakry, Dakar, Danmarkshavn, El Aaiun, Freetown, Lome, Monrovia, Nouakchott, Ouagadougou, Reykjavik, Sao Tome, St Helena', 0],
['Africa/Algiers','(UTC +01:00) Algiers, Bangui, Brazzaville, Douala, Kinshasa, Lagos, Libreville, Luanda, Malabo, Ndjamena, Niamey, Porto-Novo, Tunis'], ['Africa/Algiers','(UTC +01:00) Algiers, Bangui, Brazzaville, Douala, Kinshasa, Lagos, Libreville, Luanda, Malabo, Ndjamena, Niamey, Porto-Novo, Tunis', 60],
['Africa/Ceuta','(UTC +01:00) Amsterdam, Andorra, Belgrade, Berlin, Bratislava, Brussels, Budapest, Ceuta, Copenhagen, Gibraltar, Ljubljana, Longyearbyen, Luxembourg, Madrid, Malta, Monaco, Oslo, Paris, Podgorica, Prague, Rome, San Marino, Sarajevo, Skopje, Stockholm, Tirane, Vaduz, Vatican, Vienna, Warsaw, Zagreb, Zurich'], ['Africa/Ceuta','(UTC +01:00) Amsterdam, Andorra, Belgrade, Berlin, Bratislava, Brussels, Budapest, Ceuta, Copenhagen, Gibraltar, Ljubljana, Longyearbyen, Luxembourg, Madrid, Malta, Monaco, Oslo, Paris, Podgorica, Prague, Rome, San Marino, Sarajevo, Skopje, Stockholm, Tirane, Vaduz, Vatican, Vienna, Warsaw, Zagreb, Zurich', 60],
['Africa/Windhoek','(UTC +01:00) Windhoek'], ['Africa/Windhoek','(UTC +01:00) Windhoek', 60],
['Asia/Damascus','(UTC +02:00) Damascus'], ['Asia/Damascus','(UTC +02:00) Damascus', 120],
['Asia/Beirut','(UTC +02:00) Beirut'], ['Asia/Beirut','(UTC +02:00) Beirut', 120],
['Asia/Jerusalem','(UTC +02:00) Jerusalem'], ['Asia/Jerusalem','(UTC +02:00) Jerusalem', 120],
['Asia/Nicosia','(UTC +02:00) Athens, Bucharest, Chisinau, Helsinki, Istanbul, Mariehamn, Nicosia, Riga, Sofia, Tallinn, Vilnius'], ['Asia/Nicosia','(UTC +02:00) Athens, Bucharest, Chisinau, Helsinki, Istanbul, Mariehamn, Nicosia, Riga, Sofia, Tallinn, Vilnius', 120],
['Africa/Blantyre','(UTC +02:00) Blantyre, Bujumbura, Cairo, Gaborone, Gaza, Harare, Hebron, Johannesburg, Kigali, Lubumbashi, Lusaka, Maputo, Maseru, Mbabane, Tripoli'], ['Africa/Blantyre','(UTC +02:00) Blantyre, Bujumbura, Cairo, Gaborone, Gaza, Harare, Hebron, Johannesburg, Kigali, Lubumbashi, Lusaka, Maputo, Maseru, Mbabane, Tripoli', 120],
['Asia/Amman','(UTC +02:00) Amman'], ['Asia/Amman','(UTC +02:00) Amman', 120],
['Africa/Addis_Ababa','(UTC +03:00) Addis Ababa, Aden, Antananarivo, Asmara, Baghdad, Bahrain, Comoro, Dar es Salaam, Djibouti, Juba, Kaliningrad, Kampala, Khartoum, Kiev, Kuwait, Mayotte, Minsk, Mogadishu, Nairobi, Qatar, Riyadh, Simferopol, Syowa, Uzhgorod, Zaporozhye'], ['Africa/Addis_Ababa','(UTC +03:00) Addis Ababa, Aden, Antananarivo, Asmara, Baghdad, Bahrain, Comoro, Dar es Salaam, Djibouti, Juba, Kaliningrad, Kampala, Khartoum, Kiev, Kuwait, Mayotte, Minsk, Mogadishu, Nairobi, Qatar, Riyadh, Simferopol, Syowa, Uzhgorod, Zaporozhye', 180],
['Asia/Tehran','(UTC +03:30) Tehran'], ['Asia/Tehran','(UTC +03:30) Tehran', 210],
['Asia/Yerevan','(UTC +04:00) Yerevan'], ['Asia/Yerevan','(UTC +04:00) Yerevan', 240],
['Asia/Dubai','(UTC +04:00) Dubai, Mahe, Mauritius, Moscow, Muscat, Reunion, Samara, Tbilisi, Volgograd'], ['Asia/Dubai','(UTC +04:00) Dubai, Mahe, Mauritius, Moscow, Muscat, Reunion, Samara, Tbilisi, Volgograd', 240],
['Asia/Baku','(UTC +04:00) Baku'], ['Asia/Baku','(UTC +04:00) Baku', 240],
['Asia/Kabul','(UTC +04:30) Kabul'], ['Asia/Kabul','(UTC +04:30) Kabul', 270],
['Antarctica/Mawson','(UTC +05:00) Aqtau, Aqtobe, Ashgabat, Dushanbe, Karachi, Kerguelen, Maldives, Mawson, Oral, Samarkand, Tashkent'], ['Antarctica/Mawson','(UTC +05:00) Aqtau, Aqtobe, Ashgabat, Dushanbe, Karachi, Kerguelen, Maldives, Mawson, Oral, Samarkand, Tashkent', 300],
['Asia/Colombo','(UTC +05:30) Colombo, Kolkata'], ['Asia/Colombo','(UTC +05:30) Colombo, Kolkata', 330],
['Asia/Kathmandu','(UTC +05:45) Kathmandu'], ['Asia/Kathmandu','(UTC +05:45) Kathmandu', 345],
['Antarctica/Vostok','(UTC +06:00) Almaty, Bishkek, Chagos, Dhaka, Qyzylorda, Thimphu, Vostok, Yekaterinburg'], ['Antarctica/Vostok','(UTC +06:00) Almaty, Bishkek, Chagos, Dhaka, Qyzylorda, Thimphu, Vostok, Yekaterinburg', 360],
['Asia/Rangoon','(UTC +06:30) Cocos, Rangoon'], ['Asia/Rangoon','(UTC +06:30) Cocos, Rangoon', 390],
['Antarctica/Davis','(UTC +07:00) Bangkok, Christmas, Davis, Ho Chi Minh, Hovd, Jakarta, Novokuznetsk, Novosibirsk, Omsk, Phnom Penh, Pontianak, Vientiane'], ['Antarctica/Davis','(UTC +07:00) Bangkok, Christmas, Davis, Ho Chi Minh, Hovd, Jakarta, Novokuznetsk, Novosibirsk, Omsk, Phnom Penh, Pontianak, Vientiane', 420],
['Antarctica/Casey','(UTC +08:00) Brunei, Casey, Choibalsan, Chongqing, Harbin, Hong Kong, Kashgar, Krasnoyarsk, Kuala Lumpur, Kuching, Macau, Makassar, Manila, Perth, Shanghai, Singapore, Taipei, Ulaanbaatar, Urumqi'], ['Antarctica/Casey','(UTC +08:00) Brunei, Casey, Choibalsan, Chongqing, Harbin, Hong Kong, Kashgar, Krasnoyarsk, Kuala Lumpur, Kuching, Macau, Makassar, Manila, Perth, Shanghai, Singapore, Taipei, Ulaanbaatar, Urumqi', 480],
['Australia/Eucla','(UTC +08:45) Eucla'], ['Australia/Eucla','(UTC +08:45) Eucla', 525],
['Asia/Dili','(UTC +09:00) Dili, Irkutsk, Jayapura, Palau, Pyongyang, Seoul, Tokyo'], ['Asia/Dili','(UTC +09:00) Dili, Irkutsk, Jayapura, Palau, Pyongyang, Seoul, Tokyo', 540],
['Australia/Adelaide','(UTC +09:30) Adelaide, Broken Hill'], ['Australia/Adelaide','(UTC +09:30) Adelaide, Broken Hill', 570],
['Australia/Darwin','(UTC +09:30) Darwin'], ['Australia/Darwin','(UTC +09:30) Darwin', 570],
['Antarctica/DumontDUrville','(UTC +10:00) Brisbane, Chuuk, DumontDUrville, Guam, Lindeman, Port Moresby, Saipan, Yakutsk'], ['Antarctica/DumontDUrville','(UTC +10:00) Brisbane, Chuuk, DumontDUrville, Guam, Lindeman, Port Moresby, Saipan, Yakutsk', 600],
['Australia/Currie','(UTC +10:00) Currie, Hobart, Melbourne, Sydney'], ['Australia/Currie','(UTC +10:00) Currie, Hobart, Melbourne, Sydney', 600],
['Australia/Lord_Howe','(UTC +10:30) Lord Howe'], ['Australia/Lord_Howe','(UTC +10:30) Lord Howe', 630],
['Antarctica/Macquarie','(UTC +11:00) Efate, Guadalcanal, Kosrae, Macquarie, Noumea, Pohnpei, Sakhalin, Vladivostok'], ['Antarctica/Macquarie','(UTC +11:00) Efate, Guadalcanal, Kosrae, Macquarie, Noumea, Pohnpei, Sakhalin, Vladivostok', 660],
['Pacific/Norfolk','(UTC +11:30) Norfolk'], ['Pacific/Norfolk','(UTC +11:30) Norfolk', 690],
['Antarctica/McMurdo','(UTC +12:00) Auckland, McMurdo, South Pole'], ['Antarctica/McMurdo','(UTC +12:00) Auckland, McMurdo, South Pole', 720],
['Asia/Anadyr','(UTC +12:00) Anadyr, Fiji, Funafuti, Kamchatka, Kwajalein, Magadan, Majuro, Nauru, Tarawa, Wake, Wallis'], ['Asia/Anadyr','(UTC +12:00) Anadyr, Fiji, Funafuti, Kamchatka, Kwajalein, Magadan, Majuro, Nauru, Tarawa, Wake, Wallis', 720],
['Pacific/Chatham','(UTC +12:45) Chatham'], ['Pacific/Chatham','(UTC +12:45) Chatham', 765],
['Pacific/Enderbury','(UTC +13:00) Enderbury, Tongatapu'], ['Pacific/Enderbury','(UTC +13:00) Enderbury, Tongatapu', 780],
['Pacific/Apia','(UTC +13:00) Apia'], ['Pacific/Apia','(UTC +13:00) Apia', 780],
['Pacific/Kiritimati','(UTC +14:00) Kiritimati'] ['Pacific/Kiritimati','(UTC +14:00) Kiritimati', 840]
] ],
/* map all citys to the above timezones */
map : {
/* Pacific */
'Pacific/Midway' : 'Pacific/Midway',
'Pacific/Niue' : 'Pacific/Midway',
'Pacific/Pago_Pago' : 'Pacific/Midway',
'Pacific/Fakaofo' : 'Pacific/Fakaofo',
'Pacific/Honolulu' : 'Pacific/Fakaofo',
'Pacific/Johnston' : 'Pacific/Fakaofo',
'Pacific/Rarotonga' : 'Pacific/Fakaofo',
'Pacific/Tahiti' : 'Pacific/Fakaofo',
'Pacific/Marquesas' : 'Pacific/Marquesas',
'Pacific/Gambier' : 'Pacific/Gambier',
'Pacific/Easter' : 'Pacific/Easter',
'Pacific/Norfolk' : 'Pacific/Norfolk',
'Pacific/Chatham' : 'Pacific/Chatham',
'Pacific/Enderbury' : 'Pacific/Enderbury',
'Pacific/Tongatapu' : 'Pacific/Enderbury',
'Pacific/Apia' : 'Pacific/Apia',
'Pacific/Kiritimati' : 'Pacific/Kiritimati',
/* America */
'America/Adak' : 'America/Adak',
'America/Anchorage' : 'America/Anchorage',
'America/Juneau' : 'America/Anchorage',
'America/Nome' : 'America/Anchorage',
'America/Sitka' : 'America/Anchorage',
'America/Yakutat' : 'America/Anchorage',
'America/Dawson' : 'America/Dawson',
'America/Los_Angeles' : 'America/Dawson',
'America/Tijuana' : 'America/Dawson',
'America/Vancouver' : 'America/Dawson',
'America/Whitehorse' : 'America/Dawson',
'America/Santa_Isabel' : 'America/Santa_Isabel',
'America/Metlakatla' : 'America/Metlakatla',
'America/Dawson_Creek' : 'America/Dawson_Creek',
'America/Hermosillo' : 'America/Dawson_Creek',
'America/Phoenix' : 'America/Dawson_Creek',
'America/Chihuahua' : 'America/Chihuahua',
'America/Mazatlan' : 'America/Chihuahua'
/* Europe */
/* Africa */
/* Australia */
/* Atlantic */
/* Antarctica */
/* Artic */
/*
/* Asia */
/* Indian */
/* Others */
},
/* return unmapped timezone... */
unMap: function(timezone) {
return this.map[timezone] !== undefined ? this.map[timezone] : timezone;
},
getOffset: function(timezone) {
/* find timezone, this needs to be optimized ;) */
timezone = this.unMap(timezone);
for(i = 0; i < this.store.length; i++) {
if(this.store[i][0] == timezone) {
return (this.store[i][2] * 60000);
}
}
return 0; // no offset found...
}
}); });
Zarafa.plugins.calendarimporter.data.Timezones = new Zarafa.plugins.calendarimporter.data.Timezones(); Zarafa.plugins.calendarimporter.data.Timezones = new Zarafa.plugins.calendarimporter.data.Timezones();

View File

@ -1,3 +1,12 @@
/**
* ImportContentPanel
*
* Container for the importpanel.
*
* @author Christoph Haas <mail@h44z.net>
* @modified 29.12.2012
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs"); Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
/** /**

View File

@ -1,3 +1,12 @@
/**
* ImportPanel
*
* The main Panel of the calendarimporter plugin.
*
* @author Christoph Haas <mail@h44z.net>
* @modified 29.12.2012
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs"); Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
/** /**
@ -79,13 +88,26 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
* @private * @private
*/ */
createGrid : function(eventdata) { createGrid : function(eventdata) {
/* remove the grid if it already exists because of an old calendar file */
this.remove("eventgrid");
var parsedData = []; var parsedData = [];
var local_tz_offset = new Date().getTimezoneOffset() * 60000; // getTimezoneOffset returns minutes... we need milliseconds
var tz_offset = local_tz_offset;
if(this.timezone != null) {
tz_offset = Zarafa.plugins.calendarimporter.data.Timezones.getOffset(this.timezone);
}
if(eventdata !== null) { if(eventdata !== null) {
var parsedData = new Array(eventdata.events.length); var parsedData = new Array(eventdata.events.length);
for(var i=0; i < eventdata.events.length; i++) { for(var i=0; i < eventdata.events.length; i++) {
parsedData[i] = new Array(eventdata.events[i]["SUMMARY"], new Date(parseInt(eventdata.events[i]["DTSTART"])), new Date(parseInt(eventdata.events[i]["DTEND"])), eventdata.events[i]["LOCATION"], eventdata.events[i]["DESCRIPTION"]); parsedData[i] = new Array(eventdata.events[i]["SUMMARY"], new Date(parseInt(eventdata.events[i]["DTSTART"]) + local_tz_offset - tz_offset), new Date(parseInt(eventdata.events[i]["DTEND"]) + local_tz_offset - tz_offset), eventdata.events[i]["LOCATION"], eventdata.events[i]["DESCRIPTION"]);
} }
} else {
return null;
} }
// create the data store // create the data store
@ -117,8 +139,8 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
}, },
columns: [ columns: [
{id: 'Summary', header: 'Title', width: 300, sortable: true, dataIndex: 'title'}, {id: 'Summary', header: 'Title', width: 300, sortable: true, dataIndex: 'title'},
{header: 'Start', width: 150, sortable: true, dataIndex: 'start'}, {header: 'Start', width: 150, sortable: true, dataIndex: 'start', renderer : Zarafa.common.ui.grid.Renderers.datetime},
{header: 'End', width: 150, sortable: true, dataIndex: 'end'}, {header: 'End', width: 150, sortable: true, dataIndex: 'end', renderer : Zarafa.common.ui.grid.Renderers.datetime},
{header: 'Location', width: 150, sortable: true, dataIndex: 'location'}, {header: 'Location', width: 150, sortable: true, dataIndex: 'location'},
{header: 'Description', width: 150, sortable: true, dataIndex: 'description'} {header: 'Description', width: 150, sortable: true, dataIndex: 'description'}
] ]
@ -292,10 +314,12 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
* @param {Number} index * @param {Number} index
*/ */
onTimezoneSelected : function(combo, record, index) { onTimezoneSelected : function(combo, record, index) {
// record.data.field1 == timezone
//this.remove("eventgrid");
this.timezone = record.data.field1; this.timezone = record.data.field1;
//this.insert(this.items.length,this.createGrid(this.parsedresult));
if(this.parsedresult != null) {
this.add(this.createGrid(this.parsedresult));
this.doLayout();
}
}, },
/** /**
@ -328,10 +352,11 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
if(this.timezone == null) {; if(this.timezone == null) {;
this.timezone = action.result.response.calendar["X-WR-TIMEZONE"]; this.timezone = action.result.response.calendar["X-WR-TIMEZONE"];
this.timezoneselector.setValue(Zarafa.plugins.calendarimporter.data.Timezones.unMap(this.timezone));
} else { } else {
this.timezone = this.timezoneselector.value; this.timezone = this.timezoneselector.value;
} }
this.insert(this.items.length,this.createGrid(action.result.response)); this.add(this.createGrid(action.result.response));
this.doLayout(); this.doLayout();
}, },
scope : this scope : this
@ -474,7 +499,7 @@ Zarafa.plugins.calendarimporter.dialogs.ImportPanel = Ext.extend(Ext.Panel, {
groupDir: "ASC", groupDir: "ASC",
restriction: { restriction: {
startdate: 0, startdate: 0,
duedate: 2145826800 // 2037... highest unix timestamp duedate: 2145826800 // 2037... nearly highest unix timestamp
}, },
sort: [{ sort: [{
"field": "startdate", "field": "startdate",

View File

@ -1,3 +1,13 @@
/**
* Calendarimporter
*
* Main entry point for the plugin
*
* @author Christoph Haas <mail@h44z.net>
* @modified 29.12.2012
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
Ext.namespace("Zarafa.plugins.calendarimporter"); // Assign the right namespace Ext.namespace("Zarafa.plugins.calendarimporter"); // Assign the right namespace
Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin

View File

@ -4,11 +4,11 @@ VERSION:2.0
CALSCALE:GREGORIAN CALSCALE:GREGORIAN
METHOD:PUBLISH METHOD:PUBLISH
X-WR-CALNAME:Testkalender X-WR-CALNAME:Testkalender
X-WR-TIMEZONE:Europe/Berlin X-WR-TIMEZONE:America/Detroit
X-WR-CALDESC:Nur zum testen vom Google Kalender X-WR-CALDESC:Nur zum testen vom Google Kalender
BEGIN:VEVENT BEGIN:VEVENT
DTSTART;TZID="W. Europe":20121227T100000 DTSTART;TZID="America/Detroit":20121227T100000
DTEND;TZID="W. Europe":20121227T110000Z DTEND;TZID="America/Detroit":20121227T110000
DTSTAMP:20110121T195741Z DTSTAMP:20110121T195741Z
UID:1koigufm110c5hnq6ln57murd4@google.com UID:1koigufm110c5hnq6ln57murd4@google.com
CREATED:20110119T142901Z CREATED:20110119T142901Z

View File

@ -61,47 +61,46 @@ class ICal {
foreach ($lines as $line) { foreach ($lines as $line) {
$line = trim($line); $line = trim($line);
$add = $this->keyValueFromString($line); $add = $this->keyValueFromString($line);
error_log("line: " . $line);
if ($add === false) { if ($add === false) {
$this->addCalendarComponentWithKeyAndValue($type, false, $line); $this->addCalendarComponentWithKeyAndValue($type, false, $line);
continue; continue;
} }
list($keyword, $value) = $add; list($keyword, $props, $value) = $add;
switch ($line) { switch ($line) {
// http://www.kanzaki.com/docs/ical/vtodo.html // http://www.kanzaki.com/docs/ical/vtodo.html
case "BEGIN:VTODO": case "BEGIN:VTODO":
$this->todo_count++; $this->todo_count++;
$type = "VTODO"; $type = "VTODO";
break; break;
// http://www.kanzaki.com/docs/ical/vevent.html // http://www.kanzaki.com/docs/ical/vevent.html
case "BEGIN:VEVENT": case "BEGIN:VEVENT":
//echo "vevent gematcht"; //echo "vevent gematcht";
$this->event_count++; $this->event_count++;
$type = "VEVENT"; $type = "VEVENT";
break; break;
//all other special strings //all other special strings
case "BEGIN:VCALENDAR": case "BEGIN:VCALENDAR":
case "BEGIN:DAYLIGHT": case "BEGIN:DAYLIGHT":
// http://www.kanzaki.com/docs/ical/vtimezone.html // http://www.kanzaki.com/docs/ical/vtimezone.html
case "BEGIN:VTIMEZONE": case "BEGIN:VTIMEZONE":
case "BEGIN:STANDARD": case "BEGIN:STANDARD":
$type = $value; $type = $value;
break; break;
case "END:VTODO": // end special text - goto VCALENDAR key case "END:VTODO": // end special text - goto VCALENDAR key
case "END:VEVENT": case "END:VEVENT":
case "END:VCALENDAR": case "END:VCALENDAR":
case "END:DAYLIGHT": case "END:DAYLIGHT":
case "END:VTIMEZONE": case "END:VTIMEZONE":
case "END:STANDARD": case "END:STANDARD":
$type = "VCALENDAR"; $type = "VCALENDAR";
break; break;
default: default:
$this->addCalendarComponentWithKeyAndValue($type, $keyword, $value); $this->addCalendarComponentWithKeyAndValue($type, $keyword, $value, $props);
break; break;
} }
} }
return $this->cal; return $this->cal;
@ -117,14 +116,14 @@ class ICal {
* *
* @return {None} * @return {None}
*/ */
public function addCalendarComponentWithKeyAndValue($component, $keyword, $value) { public function addCalendarComponentWithKeyAndValue($component, $keyword, $value, $props = false) {
if ($keyword == false) { if ($keyword == false) { // multiline value
$keyword = $this->last_keyword; $keyword = $this->last_keyword;
switch ($component) { switch ($component) {
case 'VEVENT': case 'VEVENT':
if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) { if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) {
$ts = $this->iCalDateToUnixTimestamp($value); $ts = $this->iCalDateToUnixTimestamp($value, $props);
$value = $ts * 1000; $value = $ts * 1000;
} }
$value = str_replace("\\n", "\n", $value); $value = str_replace("\\n", "\n", $value);
@ -138,10 +137,11 @@ class ICal {
} }
} }
/* This should not be neccesary anymore*/
//always strip additional content.... //always strip additional content....
//if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) { //if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) {
$keyword = explode(";", $keyword); //$keyword = explode(";", $keyword);
$keyword = $keyword[0]; // remove additional content like VALUE=DATE //$keyword = $keyword[0]; // remove additional content like VALUE=DATE
//} //}
if (stristr($keyword, "TIMEZONE")) { if (stristr($keyword, "TIMEZONE")) {
@ -155,7 +155,7 @@ class ICal {
break; break;
case "VEVENT": case "VEVENT":
if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) { if (stristr($keyword, "DTSTART") or stristr($keyword, "DTEND")) {
$ts = $this->iCalDateToUnixTimestamp($value); $ts = $this->iCalDateToUnixTimestamp($value, $props);
$value = $ts * 1000; $value = $ts * 1000;
} }
$value = str_replace("\\n", "\n", $value); $value = str_replace("\\n", "\n", $value);
@ -173,17 +173,16 @@ class ICal {
* *
* @param {string} $text which is like "VCALENDAR:Begin" or "LOCATION:" * @param {string} $text which is like "VCALENDAR:Begin" or "LOCATION:"
* *
* @return {array} array("VCALENDAR", "Begin") * @return {array} array("VCALENDAR", "Begin", "Optional Props")
*/ */
public function keyValueFromString($text) { public function keyValueFromString($text) {
preg_match("/(^[^a-z:]+[;a-zA-Z=\/\"\']*)[:]([\w\W]*)/", $text, $matches); preg_match("/(^[^a-z:;]+)[;a-zA-Z]*[=]*([a-zA-Z\/\"\'\.\s]*)[:]([\w\W]*)/", $text, $matches);
error_log("macthes: " . count($matches). " " . $text);
if (count($matches) == 0) { if (count($matches) == 0) {
return false; return false;
} }
$matches = array_splice($matches, 1, 2); $matches = array_splice($matches, 1, 3);
return $matches; return $matches;
} }
@ -195,7 +194,12 @@ class ICal {
* *
* @return {int} * @return {int}
*/ */
public function iCalDateToUnixTimestamp($icalDate) { public function iCalDateToUnixTimestamp($icalDate, $timezone) {
if($timezone) {
$timezone = str_replace('"', '', $timezone);
$timezone = str_replace('\'', '', $timezone);
}
/* timestring format */ /* timestring format */
$utc = strpos("zZ",substr($icalDate, -1)) === false ? false : true; $utc = strpos("zZ",substr($icalDate, -1)) === false ? false : true;
@ -228,16 +232,21 @@ class ICal {
(int)$date[1]); (int)$date[1]);
if($utc) { if(!$utc) {
$utcdate = new DateTime(); $tz = $this->default_timezone;
$utcdate->setTimestamp($timestamp); if($timezone) {
$utcdate->setTimezone(new DateTimeZone($this->default_timezone)); $tz = $timezone;
$utcoffset = $utcdate->getOffset(); }
$this_tz = new DateTimeZone($tz);
$tz_now = new DateTime("now", $this_tz);
$tz_offset = $this_tz->getOffset($tz_now);
$timestamp_utc = $timestamp + $tz_offset;
} else { } else {
$utcoffset = 0; $timestamp_utc = $timestamp;
} }
return ($timestamp + $utcoffset); return ($timestamp_utc);
} }
/** /**

View File

@ -21,18 +21,12 @@
* *
*/ */
/**
* This module integrates Owncloud into attachment part of emails
* @class OwncloudModule
* @extends Module
*/
include_once('mapi/class.recurrence.php'); include_once('mapi/class.recurrence.php');
include_once('plugins/calendarimporter/php/ical/class.icalcreator.php'); include_once('plugins/calendarimporter/php/ical/class.icalcreator.php');
class CalendarexporterModule extends Module { class CalendarexporterModule extends Module {
private $DEBUG = true; // enable error_log debugging private $DEBUG = false; // enable error_log debugging
/** /**
* @constructor * @constructor