Added Translation
This commit is contained in:
parent
e70894c048
commit
010bd521bc
@ -1,7 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="e7c9c2bb-66f1-4e37-904c-d33d8c113bde" name="Default" comment="" />
|
||||
<list default="true" id="e7c9c2bb-66f1-4e37-904c-d33d8c113bde" name="Default" comment="">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/backend/.htaccess" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Makefile" afterPath="$PROJECT_DIR$/Makefile" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.xml" afterPath="$PROJECT_DIR$/build.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/changelog.txt" afterPath="$PROJECT_DIR$/changelog.txt" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/config.php" afterPath="$PROJECT_DIR$/config.php" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/ABOUT.js" afterPath="$PROJECT_DIR$/js/ABOUT.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/data/Actions.js" afterPath="$PROJECT_DIR$/js/data/Actions.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/data/ResponseHandler.js" afterPath="$PROJECT_DIR$/js/data/ResponseHandler.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/data/timezones.js" afterPath="$PROJECT_DIR$/js/data/timezones.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/dialogs/ImportContentPanel.js" afterPath="$PROJECT_DIR$/js/dialogs/ImportContentPanel.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/dialogs/ImportPanel.js" afterPath="$PROJECT_DIR$/js/dialogs/ImportPanel.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/plugin.calendarimporter.js" afterPath="$PROJECT_DIR$/js/plugin.calendarimporter.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js" afterPath="$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/SettingsWidget.js" afterPath="$PROJECT_DIR$/js/settings/SettingsWidget.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js" afterPath="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js" afterPath="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js" afterPath="$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/settings/ui/CalSyncPanel.js" afterPath="$PROJECT_DIR$/js/settings/ui/CalSyncPanel.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/ui/ContextMenu.js" afterPath="$PROJECT_DIR$/js/ui/ContextMenu.js" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/manifest.xml" afterPath="$PROJECT_DIR$/manifest.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/php/download.php" afterPath="$PROJECT_DIR$/php/download.php" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/php/module.calendar.php" afterPath="$PROJECT_DIR$/php/module.calendar.php" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/php/plugin.calendarimporter.php" afterPath="$PROJECT_DIR$/php/plugin.calendarimporter.php" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/php/upload.php" afterPath="$PROJECT_DIR$/php/upload.php" />
|
||||
</list>
|
||||
<ignored path="calendarimporter.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
<ignored path=".idea/dataSources.local.xml" />
|
||||
@ -20,104 +46,70 @@
|
||||
<favorites_list name="calendarimporter" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file leaf-file-name="CalSyncEditPanel.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1480">
|
||||
<caret line="101" column="30" selection-start-line="101" selection-start-column="30" selection-end-line="101" selection-end-column="30" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="CalSyncGrid.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file leaf-file-name="ContextMenu.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/ui/ContextMenu.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="504">
|
||||
<caret line="85" column="59" selection-start-line="85" selection-start-column="59" selection-end-line="85" selection-end-column="59" />
|
||||
<caret line="101" column="8" selection-start-line="101" selection-start-column="8" selection-end-line="104" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="SettingsCalSyncWidget.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
||||
<file leaf-file-name="plugin.calendarimporter.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/plugin.calendarimporter.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="729">
|
||||
<caret line="104" column="16" selection-start-line="104" selection-start-column="16" selection-end-line="104" selection-end-column="142" />
|
||||
<caret line="320" column="54" selection-start-line="320" selection-start-column="31" selection-end-line="320" selection-end-column="54" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="sync.php" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
||||
<file leaf-file-name="module.calendar.php" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/php/module.calendar.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="360">
|
||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
||||
<state relative-caret-position="301">
|
||||
<caret line="329" column="17" selection-start-line="329" selection-start-column="17" selection-end-line="329" selection-end-column="17" />
|
||||
<folding>
|
||||
<element signature="e#21#926#0#PHP" expanded="true" />
|
||||
<element signature="e#6#914#0#PHP" expanded="true" />
|
||||
<element signature="n#__construct#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#execute#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#randomstring#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#getDurationStringFromMintues#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="changelog.txt" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/changelog.txt">
|
||||
<file leaf-file-name="Makefile" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
<caret line="5" column="19" selection-start-line="5" selection-start-column="19" selection-end-line="5" selection-end-column="19" />
|
||||
<state relative-caret-position="15">
|
||||
<caret line="1" column="92" selection-start-line="1" selection-start-column="92" selection-end-line="1" selection-end-column="92" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="manifest.xml" pinned="false" current-in-tab="false">
|
||||
<file leaf-file-name="download.php" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/php/download.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="144">
|
||||
<caret line="28" column="35" selection-start-line="28" selection-start-column="35" selection-end-line="28" selection-end-column="35" />
|
||||
<folding>
|
||||
<element signature="e#7#908#0#PHP" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="manifest.xml" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/manifest.xml">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="functions.php" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/backend/functions.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
<caret line="5" column="26" selection-start-line="5" selection-start-column="26" selection-end-line="5" selection-end-column="26" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="README.txt" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/backend/README.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="config.php" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/backend/config.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="CalSyncEditContentPanel.js" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="63" selection-start-line="0" selection-start-column="63" selection-end-line="0" selection-end-column="63" />
|
||||
<state relative-caret-position="135">
|
||||
<caret line="9" column="62" selection-start-line="9" selection-start-column="62" selection-end-line="9" selection-end-column="62" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@ -138,21 +130,33 @@
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/php/plugin.calendarimporter.php" />
|
||||
<option value="$PROJECT_DIR$/config.php" />
|
||||
<option value="$PROJECT_DIR$/js/plugin.calendarimporter.js" />
|
||||
<option value="$PROJECT_DIR$/php/module.calendar.php" />
|
||||
<option value="$PROJECT_DIR$/js/data/CalendarHelper.js" />
|
||||
<option value="$PROJECT_DIR$/js/data/Actions.js" />
|
||||
<option value="$PROJECT_DIR$/js/dialogs/ImportPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/SettingsWidget.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js" />
|
||||
<option value="$PROJECT_DIR$/backend/sync.php" />
|
||||
<option value="$PROJECT_DIR$/backend/functions.php" />
|
||||
<option value="$PROJECT_DIR$/changelog.txt" />
|
||||
<option value="$PROJECT_DIR$/Makefile" />
|
||||
<option value="$PROJECT_DIR$/manifest.xml" />
|
||||
<option value="$PROJECT_DIR$/php/upload.php" />
|
||||
<option value="$PROJECT_DIR$/php/download.php" />
|
||||
<option value="$PROJECT_DIR$/php/plugin.calendarimporter.php" />
|
||||
<option value="$PROJECT_DIR$/build.xml" />
|
||||
<option value="$PROJECT_DIR$/js/ABOUT.js" />
|
||||
<option value="$PROJECT_DIR$/js/ui/ContextMenu.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/SettingsWidget.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/ui/CalSyncPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/dialogs/ImportPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/dialogs/ImportContentPanel.js" />
|
||||
<option value="$PROJECT_DIR$/js/data/ResponseHandler.js" />
|
||||
<option value="$PROJECT_DIR$/js/data/Actions.js" />
|
||||
<option value="$PROJECT_DIR$/js/data/timezones.js" />
|
||||
<option value="$PROJECT_DIR$/backend/.htaccess" />
|
||||
<option value="$PROJECT_DIR$/config.php" />
|
||||
<option value="$PROJECT_DIR$/js/plugin.calendarimporter.js" />
|
||||
<option value="$PROJECT_DIR$/php/module.calendar.php" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
@ -162,6 +166,9 @@
|
||||
<detection-done>true</detection-done>
|
||||
<sorting>DEFINITION_ORDER</sorting>
|
||||
</component>
|
||||
<component name="PhpServers">
|
||||
<servers />
|
||||
</component>
|
||||
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="x" value="65" />
|
||||
@ -213,6 +220,20 @@
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="php" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
@ -245,86 +266,6 @@
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="js" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="settings" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="js" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="settings" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="ui" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="js" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="settings" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="dialogs" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="js" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="dialogs" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
@ -343,20 +284,6 @@
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="calendarimporter" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="backend" />
|
||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scope" />
|
||||
@ -386,6 +313,12 @@
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
|
||||
<node-interpreter>project</node-interpreter>
|
||||
<node-options />
|
||||
<gulpfile />
|
||||
<tasks />
|
||||
<arguments />
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
|
||||
@ -412,6 +345,9 @@
|
||||
<component name="ShelveChangesManager" show_recycled="false">
|
||||
<option name="remove_strategy" value="false" />
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="e7c9c2bb-66f1-4e37-904c-d33d8c113bde" name="Default" comment="" />
|
||||
@ -419,12 +355,13 @@
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1477949602474</updated>
|
||||
<workItem from="1477949603566" duration="9042000" />
|
||||
<workItem from="1477949603566" duration="9204000" />
|
||||
<workItem from="1480441197414" duration="4152000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="9042000" />
|
||||
<option name="totallyTimeSpent" value="13356000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="65" y="24" width="1792" height="999" extended-state="6" />
|
||||
@ -432,19 +369,19 @@
|
||||
<layout>
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
@ -467,131 +404,17 @@
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/Makefile">
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/composer.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/upload.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/ResponseHandler.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-456">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/module.calendar.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1057">
|
||||
<caret line="467" column="64" selection-start-line="467" selection-start-column="64" selection-end-line="467" selection-end-column="64" />
|
||||
<folding>
|
||||
<element signature="n#__construct#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#execute#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#randomstring#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#getDurationStringFromMintues#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#exportCalendar#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#importCalendar#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#getAttachmentPath#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#loadCalendar#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#parseCalendarToArray#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/config.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="4" column="60" selection-start-line="4" selection-start-column="12" selection-end-line="4" selection-end-column="60" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/plugin.calendarimporter.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="569">
|
||||
<caret line="82" column="40" selection-start-line="82" selection-start-column="29" selection-end-line="82" selection-end-column="40" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/dialogs/ImportContentPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-171">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/CalendarHelper.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/dialogs/ImportPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="332">
|
||||
<caret line="245" column="12" selection-start-line="245" selection-start-column="12" selection-end-line="245" selection-end-column="226" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/Actions.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="144">
|
||||
<caret line="133" column="67" selection-start-line="133" selection-start-column="22" selection-end-line="133" selection-end-column="67" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsWidget.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="340">
|
||||
<caret line="83" column="82" selection-start-line="83" selection-start-column="82" selection-end-line="83" selection-end-column="82" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/plugin.calendarimporter.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-51">
|
||||
<caret line="262" column="12" selection-start-line="262" selection-start-column="12" selection-end-line="262" selection-end-column="12" />
|
||||
<state relative-caret-position="1515">
|
||||
<caret line="101" column="30" selection-start-line="101" selection-start-column="30" selection-end-line="101" selection-end-column="30" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="504">
|
||||
<state relative-caret-position="1275">
|
||||
<caret line="85" column="59" selection-start-line="85" selection-start-column="59" selection-end-line="85" selection-end-column="59" />
|
||||
<folding />
|
||||
</state>
|
||||
@ -599,12 +422,62 @@
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="729">
|
||||
<state relative-caret-position="1560">
|
||||
<caret line="104" column="16" selection-start-line="104" selection-start-column="16" selection-end-line="104" selection-end-column="142" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
||||
<folding>
|
||||
<element signature="e#21#926#0#PHP" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/changelog.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/manifest.xml">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/functions.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
<caret line="5" column="26" selection-start-line="5" selection-start-column="26" selection-end-line="5" selection-end-column="26" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/README.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/config.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
@ -613,14 +486,14 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js">
|
||||
<entry file="file://$PROJECT_DIR$/php/composer.json">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1480">
|
||||
<caret line="101" column="30" selection-start-line="101" selection-start-column="30" selection-end-line="101" selection-end-column="30" />
|
||||
<folding />
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/CalendarHelper.js" />
|
||||
<entry file="file://$PROJECT_DIR$/backend/functions.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
@ -637,6 +510,139 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="60">
|
||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
||||
<folding>
|
||||
<element signature="e#21#926#0#PHP" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/changelog.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="30" selection-start-line="2" selection-start-column="30" selection-end-line="2" selection-end-column="30" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/build.xml">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="56" selection-start-line="2" selection-start-column="56" selection-end-line="2" selection-end-column="56" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/ABOUT.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="744">
|
||||
<caret line="61" column="71" selection-start-line="61" selection-start-column="71" selection-end-line="61" selection-end-column="71" />
|
||||
<folding>
|
||||
<marker date="1480442383471" expanded="true" signature="1214:1218" ph="<" />
|
||||
<marker date="1480442383471" expanded="true" signature="1244:1248" ph=">" />
|
||||
<marker date="1480442383471" expanded="true" signature="2881:2885" ph="<" />
|
||||
<marker date="1480442383471" expanded="true" signature="2905:2909" ph=">" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="945">
|
||||
<caret line="63" column="55" selection-start-line="63" selection-start-column="55" selection-end-line="63" selection-end-column="55" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="435">
|
||||
<caret line="44" column="93" selection-start-line="44" selection-start-column="57" selection-end-line="44" selection-end-column="93" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="744">
|
||||
<caret line="65" column="17" selection-start-line="65" selection-start-column="17" selection-end-line="65" selection-end-column="17" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsWidget.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="20" selection-end-column="3" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="624">
|
||||
<caret line="48" column="55" selection-start-line="48" selection-start-column="55" selection-end-line="48" selection-end-column="55" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/external/Ext.util.base64.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="585">
|
||||
<caret line="147" column="28" selection-start-line="147" selection-start-column="28" selection-end-line="147" selection-end-column="64" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/dialogs/ImportContentPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="774">
|
||||
<caret line="63" column="2" selection-start-line="63" selection-start-column="2" selection-end-line="63" selection-end-column="2" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/dialogs/ImportPanel.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/ResponseHandler.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="15">
|
||||
<caret line="1" column="29" selection-start-line="1" selection-start-column="29" selection-end-line="1" selection-end-column="29" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/timezones.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-9350">
|
||||
<caret line="90" column="87" selection-start-line="90" selection-start-column="87" selection-end-line="90" selection-end-column="87" />
|
||||
<folding>
|
||||
<element signature="n#!!doc" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/README.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
@ -645,28 +651,111 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
||||
<entry file="file://$PROJECT_DIR$/backend/.htaccess">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="360">
|
||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="13" selection-start-line="0" selection-start-column="13" selection-end-line="0" selection-end-column="13" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/README.md">
|
||||
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
|
||||
<state split_layout="SPLIT">
|
||||
<first_editor relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</first_editor>
|
||||
<second_editor />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/config.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30">
|
||||
<caret line="2" column="59" selection-start-line="2" selection-start-column="54" selection-end-line="2" selection-end-column="59" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/plugin.calendarimporter.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-90">
|
||||
<caret line="36" column="5" selection-start-line="36" selection-start-column="5" selection-end-line="36" selection-end-column="5" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/upload.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-314">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#21#926#0#PHP" expanded="true" />
|
||||
<element signature="e#6#905#0#PHP" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/ui/ContextMenu.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="504">
|
||||
<caret line="101" column="8" selection-start-line="101" selection-start-column="8" selection-end-line="104" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/download.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="144">
|
||||
<caret line="28" column="35" selection-start-line="28" selection-start-column="35" selection-end-line="28" selection-end-column="35" />
|
||||
<folding>
|
||||
<element signature="e#7#908#0#PHP" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/data/Actions.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1191">
|
||||
<caret line="45" column="63" selection-start-line="45" selection-start-column="63" selection-end-line="45" selection-end-column="63" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/js/plugin.calendarimporter.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="729">
|
||||
<caret line="320" column="54" selection-start-line="320" selection-start-column="31" selection-end-line="320" selection-end-column="54" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/php/module.calendar.php">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="301">
|
||||
<caret line="329" column="17" selection-start-line="329" selection-start-column="17" selection-end-line="329" selection-end-column="17" />
|
||||
<folding>
|
||||
<element signature="e#6#914#0#PHP" expanded="true" />
|
||||
<element signature="n#__construct#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#execute#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#randomstring#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
<element signature="n#getDurationStringFromMintues#0;n#CalendarModule#0;n#!!top" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Makefile">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="15">
|
||||
<caret line="1" column="92" selection-start-line="1" selection-start-column="92" selection-end-line="1" selection-end-column="92" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/manifest.xml">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/changelog.txt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="75">
|
||||
<caret line="5" column="19" selection-start-line="5" selection-start-column="19" selection-end-line="5" selection-end-column="19" />
|
||||
<state relative-caret-position="135">
|
||||
<caret line="9" column="62" selection-start-line="9" selection-start-column="62" selection-end-line="9" selection-end-column="62" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
2
Makefile
2
Makefile
@ -1,2 +1,2 @@
|
||||
default:
|
||||
ant deploy; cp -r /home/osboxes/Documents/kopano-webapp-3.2.0.285/deploy/plugins/calendarimporter /usr/share/kopano-webapp/plugins/
|
||||
rm -rf /home/osboxes/Documents/kopano-webapp-3.2.0.285/deploy/plugins/calendarimporter; ant deploy; cp -r /home/osboxes/Documents/kopano-webapp-3.2.0.285/deploy/plugins/calendarimporter /usr/share/kopano-webapp/plugins/
|
||||
|
1
backend/.htaccess
Normal file
1
backend/.htaccess
Normal file
@ -0,0 +1 @@
|
||||
deny from all
|
409
build.xml
409
build.xml
@ -1,200 +1,247 @@
|
||||
<project default="all">
|
||||
<property environment="env"/>
|
||||
<property name="root-folder" value="${basedir}/../../"/>
|
||||
<property name="tools-folder" value="${root-folder}/tools/"/>
|
||||
<property name="target-folder" value="${root-folder}/deploy/plugins"/>
|
||||
<property name="server-folder" value="${root-folder}/server"/>
|
||||
<property environment="env"/>
|
||||
<property name="root-folder" value="${basedir}/../.."/>
|
||||
<property name="tools-folder" value="${root-folder}/tools/"/>
|
||||
<property name="target-folder" value="${root-folder}/deploy/plugins"/>
|
||||
<property name="server-folder" value="${root-folder}/server"/>
|
||||
<property name="language-folder" value="${basedir}/languages"/>
|
||||
|
||||
<import file="${tools-folder}/antutil.xml"/>
|
||||
<import file="${tools-folder}/antutil.xml"/>
|
||||
|
||||
<typedef file="${tools-folder}/antlib.xml">
|
||||
<classpath>
|
||||
<pathelement location="${tools-folder}/tools.jar"/>
|
||||
</classpath>
|
||||
</typedef>
|
||||
<typedef file="${tools-folder}/antlib.xml">
|
||||
<classpath>
|
||||
<pathelement location="${tools-folder}/tools.jar"/>
|
||||
</classpath>
|
||||
</typedef>
|
||||
|
||||
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
|
||||
<classpath>
|
||||
<pathelement location="${tools-folder}/lib/ant-contrib-1.0b3.jar"/>
|
||||
</classpath>
|
||||
</taskdef>
|
||||
<taskdef resource="net/sf/antcontrib/antlib.xml">
|
||||
<classpath>
|
||||
<pathelement location="${tools-folder}/lib/ant-contrib-1.0b3.jar"/>
|
||||
</classpath>
|
||||
</taskdef>
|
||||
|
||||
<!-- Determine plugin name -->
|
||||
<basename file="${basedir}" property="plugin"/>
|
||||
<!-- Determine plugin name -->
|
||||
<basename file="${basedir}" property="plugin"/>
|
||||
|
||||
<!-- The Plugin distribution files -->
|
||||
<property name="plugin-folder" value="${plugin}"/>
|
||||
<property name="plugin-debugfile" value="${plugin}-debug.js"/>
|
||||
<property name="plugin-file" value="${plugin}.js"/>
|
||||
<!-- The Plugin distribution files -->
|
||||
<property name="plugin-folder" value="${plugin}"/>
|
||||
<property name="plugin-debugfile" value="${plugin}-debug.js"/>
|
||||
<property name="plugin-file" value="${plugin}.js"/>
|
||||
|
||||
<!-- The Plugin CSS files -->
|
||||
<property name="plugin-css-folder" value="resources/css"/>
|
||||
<property name="plugin-css-file" value="${plugin}.css"/>
|
||||
<!-- The Plugin CSS files -->
|
||||
<property name="plugin-css-folder" value="resources/css"/>
|
||||
<property name="plugin-css-file" value="${plugin}.css"/>
|
||||
|
||||
<!-- Meta target -->
|
||||
<target name="all" depends="concat, compress"/>
|
||||
<!-- Meta target -->
|
||||
<target name="all" depends="concat, compress"/>
|
||||
|
||||
<!-- Clean -->
|
||||
<target name="clean">
|
||||
<delete includeemptydirs="true" failonerror="false">
|
||||
<!-- Delete the Plugin files -->
|
||||
<fileset dir="${target-folder}/${plugin-folder}/js">
|
||||
<include name="${plugin-file}"/>
|
||||
<include name="${plugin-debugfile}"/>
|
||||
</fileset>
|
||||
</delete>
|
||||
</target>
|
||||
<!-- Clean -->
|
||||
<target name="clean">
|
||||
<delete includeemptydirs="true" failonerror="false">
|
||||
<!-- Delete the Plugin files -->
|
||||
<fileset dir="${target-folder}/${plugin-folder}/js">
|
||||
<include name="${plugin-file}"/>
|
||||
<include name="${plugin-debugfile}"/>
|
||||
</fileset>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<!-- Concatenates JavaScript files with automatic dependency generation -->
|
||||
<target name="concat">
|
||||
<!-- Concatenate plugin JS file -->
|
||||
<if>
|
||||
<available file="js" type="dir" />
|
||||
<then>
|
||||
<mkdir dir="${target-folder}/${plugin-folder}/js"/>
|
||||
<echo message="Concatenating: ${plugin-debugfile}"/>
|
||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}" prioritize="\w+">
|
||||
<concatfiles>
|
||||
<fileset dir="js" includes="**/*.js" />
|
||||
</concatfiles>
|
||||
</zConcat>
|
||||
</then>
|
||||
</if>
|
||||
<!-- Concatenates JavaScript files with automatic dependency generation -->
|
||||
<target name="concat">
|
||||
<!-- Concatenate plugin JS file -->
|
||||
<if>
|
||||
<available file="js" type="dir"/>
|
||||
<then>
|
||||
<mkdir dir="${target-folder}/${plugin-folder}/js"/>
|
||||
<echo message="Concatenating: ${plugin-debugfile}"/>
|
||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}"
|
||||
prioritize="\w+">
|
||||
<concatfiles>
|
||||
<fileset dir="js" includes="**/*.js"/>
|
||||
</concatfiles>
|
||||
</zConcat>
|
||||
</then>
|
||||
</if>
|
||||
|
||||
<!-- Concatenate plugin CSS files -->
|
||||
<if>
|
||||
<available file="${plugin-css-folder}" type="dir" />
|
||||
<then>
|
||||
<mkdir dir="${target-folder}/${plugin-folder}/${plugin-css-folder}"/>
|
||||
<echo message="Concatenating: ${plugin-css-file}"/>
|
||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}" outputFile="${plugin-css-file}">
|
||||
<concatfiles>
|
||||
<fileset dir="${plugin-css-folder}" includes="**/*.css" />
|
||||
</concatfiles>
|
||||
</zConcat>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
<!-- Concatenate plugin CSS files -->
|
||||
<if>
|
||||
<available file="${plugin-css-folder}" type="dir"/>
|
||||
<then>
|
||||
<mkdir dir="${target-folder}/${plugin-folder}/${plugin-css-folder}"/>
|
||||
<echo message="Concatenating: ${plugin-css-file}"/>
|
||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}"
|
||||
outputFile="${plugin-css-file}">
|
||||
<concatfiles>
|
||||
<fileset dir="${plugin-css-folder}" includes="**/*.css"/>
|
||||
</concatfiles>
|
||||
</zConcat>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<!-- Preformat the Concatenated Javascript files to improve compilation -->
|
||||
<target name="preformat" depends="concat">
|
||||
<if>
|
||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file" />
|
||||
<then>
|
||||
<echo message="Preformatting: ${plugin-debugfile}"/>
|
||||
<replaceregexp byline="true">
|
||||
<regexp pattern="(^[ ,\t]*\*[ ,\t]@.*)\{(.*)\[\]\}"/>
|
||||
<substitution expression="\1{\2\|Array}"/>
|
||||
<fileset dir="${target-folder}/${plugin-folder}/js" includes="${plugin-debugfile}"/>
|
||||
</replaceregexp>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
<!-- Preformat the Concatenated Javascript files to improve compilation -->
|
||||
<target name="preformat" depends="concat">
|
||||
<if>
|
||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file"/>
|
||||
<then>
|
||||
<echo message="Preformatting: ${plugin-debugfile}"/>
|
||||
<replaceregexp byline="true">
|
||||
<regexp pattern="(^[ ,\t]*\*[ ,\t]@.*)\{(.*)\[\]\}"/>
|
||||
<substitution expression="\1{\2\|Array}"/>
|
||||
<fileset dir="${target-folder}/${plugin-folder}/js" includes="${plugin-debugfile}"/>
|
||||
</replaceregexp>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<!-- Compress JavaScript -->
|
||||
<target name="compress" depends="preformat">
|
||||
<if>
|
||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file" />
|
||||
<then>
|
||||
<echo message="Compiling: ${plugin-debugfile}" />
|
||||
<zCompile inputFolder="${target-folder}/${plugin-folder}/js" inputFile="${plugin-debugfile}" outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-file}">
|
||||
<externs>
|
||||
var Ext = {};
|
||||
var Zarafa = {};
|
||||
var container = {};
|
||||
var _ = function(key, domain) {};
|
||||
var dgettext = function(domain, msgid) {};
|
||||
var dngettext = function(domain, msgid, msgid_plural, count) {};
|
||||
var dnpgettext = function(domain, msgctxt, msgid, msgid_plural, count) {};
|
||||
var dpgettext = function(domain, msgctxt, msgid) {};
|
||||
var ngettext = function(msgid, msgid_plural, count) {};
|
||||
var npgettext = function(msgctxt, msgid, msgid_plural, count) {};
|
||||
var pgettext = function(msgctxt, msgid) {};
|
||||
</externs>
|
||||
</zCompile>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
<!-- Compress JavaScript -->
|
||||
<target name="compress" depends="preformat">
|
||||
<if>
|
||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file"/>
|
||||
<then>
|
||||
<echo message="Compiling: ${plugin-debugfile}"/>
|
||||
<zCompile inputFolder="${target-folder}/${plugin-folder}/js" inputFile="${plugin-debugfile}"
|
||||
outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-file}">
|
||||
<externs>
|
||||
var Ext = {};
|
||||
var Zarafa = {};
|
||||
var container = {};
|
||||
var _ = function(key, domain) {};
|
||||
var dgettext = function(domain, msgid) {};
|
||||
var dngettext = function(domain, msgid, msgid_plural, count) {};
|
||||
var dnpgettext = function(domain, msgctxt, msgid, msgid_plural, count) {};
|
||||
var dpgettext = function(domain, msgctxt, msgid) {};
|
||||
var ngettext = function(msgid, msgid_plural, count) {};
|
||||
var npgettext = function(msgctxt, msgid, msgid_plural, count) {};
|
||||
var pgettext = function(msgctxt, msgid) {};
|
||||
</externs>
|
||||
</zCompile>
|
||||
</then>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<!-- syntax check all PHP files -->
|
||||
<target name="validate">
|
||||
<if>
|
||||
<available file="php" filepath="${env.PATH}" />
|
||||
<then>
|
||||
<if>
|
||||
<available file="config.php" type="file" />
|
||||
<then>
|
||||
<antcall target="syntax-check">
|
||||
<param name="file" value="config.php"/>
|
||||
</antcall>
|
||||
</then>
|
||||
</if>
|
||||
<if>
|
||||
<available file="php" type="dir" />
|
||||
<then>
|
||||
<foreach target="syntax-check" param="file">
|
||||
<path>
|
||||
<fileset dir=".">
|
||||
<exclude name="php/vendor/**" />
|
||||
<include name="**/*.php"/>
|
||||
</fileset>
|
||||
</path>
|
||||
</foreach>
|
||||
</then>
|
||||
</if>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="WARNING: PHP not available, not performing syntax-check on php files"/>
|
||||
</else>
|
||||
</if>
|
||||
</target>
|
||||
<!-- syntax check all PHP files -->
|
||||
<target name="validate">
|
||||
<if>
|
||||
<available file="php" filepath="${env.PATH}"/>
|
||||
<then>
|
||||
<if>
|
||||
<available file="config.php" type="file"/>
|
||||
<then>
|
||||
<antcall target="syntax-check">
|
||||
<param name="file" value="config.php"/>
|
||||
</antcall>
|
||||
</then>
|
||||
</if>
|
||||
<if>
|
||||
<available file="php" type="dir"/>
|
||||
<then>
|
||||
<foreach target="syntax-check" param="file">
|
||||
<path>
|
||||
<fileset dir=".">
|
||||
<exclude name="php/vendor/**"/>
|
||||
<include name="**/*.php"/>
|
||||
</fileset>
|
||||
</path>
|
||||
</foreach>
|
||||
</then>
|
||||
</if>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="WARNING: PHP not available, not performing syntax-check on php files"/>
|
||||
</else>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<target name="syntax-check">
|
||||
<echo message="validating ${file}"/>
|
||||
<exec executable="php" failonerror="true">
|
||||
<arg value="-l"/>
|
||||
<arg value="${file}"/>
|
||||
</exec>
|
||||
</target>
|
||||
<target name="syntax-check">
|
||||
<echo message="validating ${file}"/>
|
||||
<exec executable="php" failonerror="true">
|
||||
<arg value="-l"/>
|
||||
<arg value="${file}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<!-- Install all files into the target folder -->
|
||||
<target name="deploy" depends="compress, validate">
|
||||
<mkdir dir="${target-folder}/${plugin-folder}"/>
|
||||
<!-- Generate language files -->
|
||||
<target name="language">
|
||||
<if>
|
||||
<available file="msgfmt" filepath="${env.PATH}"/>
|
||||
<then>
|
||||
<for param="file" parallel="true">
|
||||
<fileset dir="${language-folder}">
|
||||
<include name="**/LC_MESSAGES/*.po"/>
|
||||
</fileset>
|
||||
<sequential>
|
||||
<antcall target="msgfmt">
|
||||
<param name="file" value="@{file}"/>
|
||||
</antcall>
|
||||
</sequential>
|
||||
</for>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="WARNING: msgfmt not available, not generating *.mo files for translations"/>
|
||||
<!-- just copy files -->
|
||||
<copy todir="${target-folder}/${plugin-folder}">
|
||||
<fileset dir=".">
|
||||
<include name="languages/**/*.mo"/>
|
||||
<include name="languages/**/*.txt"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</else>
|
||||
</if>
|
||||
</target>
|
||||
|
||||
<!-- Copy (and validate) manifest.xml -->
|
||||
<if>
|
||||
<available file="xmllint" filepath="${env.PATH}" />
|
||||
<then>
|
||||
<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true">
|
||||
<arg value="--valid"/>
|
||||
<arg value="--path"/>
|
||||
<arg value="${server-folder}"/>
|
||||
<arg value="manifest.xml"/>
|
||||
</exec>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="WARNING: xmllint not available, not performing syntax-check on manifest.xml"/>
|
||||
<!-- xmllint is not available, so we must copy the file manually -->
|
||||
<copy todir="${target-folder}/${plugin-folder}">
|
||||
<fileset dir=".">
|
||||
<include name="manifest.xml"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</else>
|
||||
</if>
|
||||
<target name="msgfmt">
|
||||
<propertyregex property="outfile" input="${file}" regexp=".*\/(languages\/.*)\.po"
|
||||
replace="${target-folder}/${plugin-folder}/\1\.mo"/>
|
||||
<echo message="Converting ${file} to ${outfile}"/>
|
||||
<dirname property="outdir" file="${outfile}"/>
|
||||
<mkdir dir="${outdir}"/>
|
||||
<exec executable="msgfmt" failonerror="true">
|
||||
<arg value="-v"/>
|
||||
<arg value="-o"/>
|
||||
<arg value="${outfile}"/>
|
||||
<arg value="${file}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<!-- copy files -->
|
||||
<copy todir="${target-folder}/${plugin-folder}">
|
||||
<fileset dir=".">
|
||||
<include name="resources/**/*.*"/>
|
||||
<include name="external/**/*.*"/>
|
||||
<include name="php/**/*.php"/>
|
||||
<include name="config.php"/>
|
||||
<!-- exclude the ant script -->
|
||||
<exclude name="build.xml"/>
|
||||
<!-- CSS is generated during build -->
|
||||
<exclude name="resources/css/*.*"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</target>
|
||||
<!-- Install all files into the target folder -->
|
||||
<target name="deploy" depends="compress, validate, language">
|
||||
<mkdir dir="${target-folder}/${plugin-folder}"/>
|
||||
|
||||
<!-- Copy (and validate) manifest.xml -->
|
||||
<if>
|
||||
<available file="xmllint" filepath="${env.PATH}"/>
|
||||
<then>
|
||||
<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true">
|
||||
<arg value="--valid"/>
|
||||
<arg value="--path"/>
|
||||
<arg value="${server-folder}"/>
|
||||
<arg value="manifest.xml"/>
|
||||
</exec>
|
||||
</then>
|
||||
<else>
|
||||
<echo message="WARNING: xmllint not available, not performing syntax-check on manifest.xml"/>
|
||||
<!-- xmllint is not available, so we must copy the file manually -->
|
||||
<copy todir="${target-folder}/${plugin-folder}">
|
||||
<fileset dir=".">
|
||||
<include name="manifest.xml"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</else>
|
||||
</if>
|
||||
|
||||
<!-- copy files -->
|
||||
<copy todir="${target-folder}/${plugin-folder}">
|
||||
<fileset dir=".">
|
||||
<include name="resources/**/*.*"/>
|
||||
<include name="external/**/*.*"/>
|
||||
<include name="php/**/*.php"/>
|
||||
<include name="config.php"/>
|
||||
<!-- exclude the ant script -->
|
||||
<exclude name="build.xml"/>
|
||||
<!-- CSS is generated during build -->
|
||||
<exclude name="resources/css/*.*"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</target>
|
||||
</project>
|
@ -1,3 +1,7 @@
|
||||
calendarimporter 2.2.1:
|
||||
- finally supporting Kopano Webapp 3.1.x
|
||||
- translation to german added
|
||||
|
||||
calendarimporter 2.2.0:
|
||||
- support for Kopano Webapp 3.1.1
|
||||
- Code rework
|
||||
|
23
config.php
23
config.php
@ -1,13 +1,12 @@
|
||||
<?php
|
||||
/** Disable the import plugin for all clients */
|
||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE', true);
|
||||
/** Disable the sync feature for all clients */
|
||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC', true); // not yet implemented
|
||||
|
||||
/** The default calendar to import to*/
|
||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT', "Kalender");
|
||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE', "Europe/Vienna");
|
||||
|
||||
/** Tempory path for uploaded files... */
|
||||
define('PLUGIN_CALENDARIMPORTER_TMP_UPLOAD', "/var/lib/kopano-webapp/tmp/");
|
||||
?>
|
||||
/** Disable the import plugin for all clients */
|
||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE', false);
|
||||
/** Disable the sync feature for all clients */
|
||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC', true);
|
||||
|
||||
/** The default calendar to import to*/
|
||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT', "Kalender");
|
||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE', "Europe/Vienna");
|
||||
|
||||
/** Tempory path for uploaded files... */
|
||||
define('PLUGIN_CALENDARIMPORTER_TMP_UPLOAD', "/var/lib/kopano-webapp/tmp/");
|
||||
|
56
js/ABOUT.js
56
js/ABOUT.js
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* ABOUT.js zarafa calender to ics im/exporter
|
||||
* ABOUT.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -19,7 +19,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter');
|
||||
|
||||
/**
|
||||
@ -29,38 +29,38 @@ Ext.namespace('Zarafa.plugins.calendarimporter');
|
||||
* The copyright string holding the copyright notice for the Zarafa calendarimporter Plugin.
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.ABOUT = ""
|
||||
+ "<p>Copyright (C) 2012-2016 Christoph Haas <christoph.h@sprinternet.at></p>"
|
||||
+ "<p>Copyright (C) 2012-2016 Christoph Haas <christoph.h@sprinternet.at></p>"
|
||||
|
||||
+ "<p>This program is free software; you can redistribute it and/or "
|
||||
+ "modify it under the terms of the GNU Lesser General Public "
|
||||
+ "License as published by the Free Software Foundation; either "
|
||||
+ "version 2.1 of the License, or (at your option) any later version.</p>"
|
||||
+ "<p>This program is free software; you can redistribute it and/or "
|
||||
+ "modify it under the terms of the GNU Lesser General Public "
|
||||
+ "License as published by the Free Software Foundation; either "
|
||||
+ "version 2.1 of the License, or (at your option) any later version.</p>"
|
||||
|
||||
+ "<p>This program is distributed in the hope that it will be useful, "
|
||||
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
|
||||
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU "
|
||||
+ "Lesser General Public License for more details.</p>"
|
||||
+ "<p>This program is distributed in the hope that it will be useful, "
|
||||
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
|
||||
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU "
|
||||
+ "Lesser General Public License for more details.</p>"
|
||||
|
||||
+ "<p>You should have received a copy of the GNU Lesser General Public "
|
||||
+ "License along with this program; if not, write to the Free Software "
|
||||
+ "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>"
|
||||
+ "<p>You should have received a copy of the GNU Lesser General Public "
|
||||
+ "License along with this program; if not, write to the Free Software "
|
||||
+ "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>"
|
||||
|
||||
+ "<hr />"
|
||||
+ "<hr />"
|
||||
|
||||
+ "<p>The calendarimporter plugin contains the following third-party components:</p>"
|
||||
|
||||
+ "<h1>iCalcreator v2.16.12</h1>"
|
||||
+ "<p>The calendarimporter plugin contains the following third-party components:</p>"
|
||||
|
||||
+ "<p>Copyright 2007-2013 Kjell-Inge Gustafsson kigkonsult</p>"
|
||||
+ "<h1>iCalcreator v2.16.12</h1>"
|
||||
|
||||
+ "<p>This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.</p>"
|
||||
|
||||
+ "<p>This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</p>"
|
||||
|
||||
+ "<h1>Ics-parser</h1>"
|
||||
+ "<p>Copyright 2007-2013 Kjell-Inge Gustafsson kigkonsult</p>"
|
||||
|
||||
+ "<p>Copyright 2002-2007 Martin Thoma <info@martin-thoma.de></p>"
|
||||
+ "<p>This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.</p>"
|
||||
|
||||
+ "<p>Licensed under the MIT License.</p>"
|
||||
|
||||
+ "<p>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</p>";
|
||||
+ "<p>This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.</p>"
|
||||
|
||||
+ "<h1>Ics-parser</h1>"
|
||||
|
||||
+ "<p>Copyright 2002-2007 Martin Thoma <info@martin-thoma.de></p>"
|
||||
|
||||
+ "<p>Licensed under the MIT License.</p>"
|
||||
|
||||
+ "<p>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</p>";
|
@ -34,96 +34,96 @@ Ext.namespace('Zarafa.plugins.calendarimporter.data');
|
||||
* @singleton
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.data.Actions = {
|
||||
/**
|
||||
* Callback for the export request.
|
||||
* @param {Object} response
|
||||
*/
|
||||
downloadICS: function (response) {
|
||||
if (response.status == false) {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title : dgettext('plugin_files', 'Warning'),
|
||||
msg : dgettext('plugin_files', response.message),
|
||||
icon : Zarafa.common.dialogs.MessageBox.WARNING,
|
||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
||||
});
|
||||
} else {
|
||||
var downloadFrame = Ext.getBody().createChild({
|
||||
tag: 'iframe',
|
||||
cls: 'x-hidden'
|
||||
});
|
||||
/**
|
||||
* Callback for the export request.
|
||||
* @param {Object} response
|
||||
*/
|
||||
downloadICS: function (response) {
|
||||
if (response.status == false) {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title: dgettext('plugin_calendarimporter', 'Warning'),
|
||||
msg: response.message,
|
||||
icon: Zarafa.common.dialogs.MessageBox.WARNING,
|
||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
||||
});
|
||||
} else {
|
||||
var downloadFrame = Ext.getBody().createChild({
|
||||
tag: 'iframe',
|
||||
cls: 'x-hidden'
|
||||
});
|
||||
|
||||
var url = document.URL;
|
||||
var link = url.substring(0, url.lastIndexOf('/') + 1);
|
||||
var url = document.URL;
|
||||
var link = url.substring(0, url.lastIndexOf('/') + 1);
|
||||
|
||||
link += "index.php?sessionid=" + container.getUser().getSessionId() + "&load=custom&name=download_ics";
|
||||
link = Ext.urlAppend(link, "token=" + encodeURIComponent(response.download_token));
|
||||
link = Ext.urlAppend(link, "filename=" + encodeURIComponent(response.filename));
|
||||
link += "index.php?sessionid=" + container.getUser().getSessionId() + "&load=custom&name=download_ics";
|
||||
link = Ext.urlAppend(link, "token=" + encodeURIComponent(response.download_token));
|
||||
link = Ext.urlAppend(link, "filename=" + encodeURIComponent(response.filename));
|
||||
|
||||
downloadFrame.dom.contentWindow.location = link;
|
||||
}
|
||||
},
|
||||
downloadFrame.dom.contentWindow.location = link;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Get all calendar folders.
|
||||
* @param {boolean} asDropdownStore If true, a simple array store will be returned.
|
||||
* @returns {*}
|
||||
*/
|
||||
getAllCalendarFolders: function (asDropdownStore) {
|
||||
asDropdownStore = Ext.isEmpty(asDropdownStore) ? false : asDropdownStore;
|
||||
/**
|
||||
* Get all calendar folders.
|
||||
* @param {boolean} asDropdownStore If true, a simple array store will be returned.
|
||||
* @returns {*}
|
||||
*/
|
||||
getAllCalendarFolders: function (asDropdownStore) {
|
||||
asDropdownStore = Ext.isEmpty(asDropdownStore) ? false : asDropdownStore;
|
||||
|
||||
var allFolders = [];
|
||||
var allFolders = [];
|
||||
|
||||
var inbox = container.getHierarchyStore().getDefaultStore();
|
||||
var pub = container.getHierarchyStore().getPublicStore();
|
||||
var inbox = container.getHierarchyStore().getDefaultStore();
|
||||
var pub = container.getHierarchyStore().getPublicStore();
|
||||
|
||||
if (!Ext.isEmpty(inbox.subStores) && inbox.subStores.folders.totalLength > 0) {
|
||||
for (var i = 0; i < inbox.subStores.folders.totalLength; i++) {
|
||||
var folder = inbox.subStores.folders.getAt(i);
|
||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||
if (asDropdownStore) {
|
||||
allFolders.push([
|
||||
folder.get("entryid"),
|
||||
folder.get("display_name")
|
||||
]);
|
||||
} else {
|
||||
allFolders.push({
|
||||
display_name : folder.get("display_name"),
|
||||
entryid : folder.get("entryid"),
|
||||
store_entryid: folder.get("store_entryid"),
|
||||
is_public : false
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!Ext.isEmpty(inbox.subStores) && inbox.subStores.folders.totalLength > 0) {
|
||||
for (var i = 0; i < inbox.subStores.folders.totalLength; i++) {
|
||||
var folder = inbox.subStores.folders.getAt(i);
|
||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||
if (asDropdownStore) {
|
||||
allFolders.push([
|
||||
folder.get("entryid"),
|
||||
folder.get("display_name")
|
||||
]);
|
||||
} else {
|
||||
allFolders.push({
|
||||
display_name: folder.get("display_name"),
|
||||
entryid: folder.get("entryid"),
|
||||
store_entryid: folder.get("store_entryid"),
|
||||
is_public: false
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!Ext.isEmpty(pub.subStores) && pub.subStores.folders.totalLength > 0) {
|
||||
for (var j = 0; j < pub.subStores.folders.totalLength; j++) {
|
||||
var folder = pub.subStores.folders.getAt(j);
|
||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||
if (asDropdownStore) {
|
||||
allFolders.push([
|
||||
folder.get("entryid"),
|
||||
folder.get("display_name") + " (Public)"
|
||||
]);
|
||||
} else {
|
||||
allFolders.push({
|
||||
display_name : folder.get("display_name"),
|
||||
entryid : folder.get("entryid"),
|
||||
store_entryid: folder.get("store_entryid"),
|
||||
is_public : true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!Ext.isEmpty(pub.subStores) && pub.subStores.folders.totalLength > 0) {
|
||||
for (var j = 0; j < pub.subStores.folders.totalLength; j++) {
|
||||
var folder = pub.subStores.folders.getAt(j);
|
||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||
if (asDropdownStore) {
|
||||
allFolders.push([
|
||||
folder.get("entryid"),
|
||||
folder.get("display_name") + " (Public)"
|
||||
]);
|
||||
} else {
|
||||
allFolders.push({
|
||||
display_name: folder.get("display_name"),
|
||||
entryid: folder.get("entryid"),
|
||||
store_entryid: folder.get("store_entryid"),
|
||||
is_public: true
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (asDropdownStore) {
|
||||
return allFolders.sort(Zarafa.plugins.calendarimporter.data.Actions.dynamicSort(1));
|
||||
} else {
|
||||
return allFolders;
|
||||
}
|
||||
},
|
||||
if (asDropdownStore) {
|
||||
return allFolders.sort(Zarafa.plugins.calendarimporter.data.Actions.dynamicSort(1));
|
||||
} else {
|
||||
return allFolders;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Return a calendar folder element by name.
|
||||
@ -159,20 +159,20 @@ Zarafa.plugins.calendarimporter.data.Actions = {
|
||||
return container.getHierarchyStore().getDefaultFolder('calendar');
|
||||
},
|
||||
|
||||
/**
|
||||
* Dynamic sort function, sorts by property name.
|
||||
* @param {string|int} property
|
||||
* @returns {Function}
|
||||
*/
|
||||
dynamicSort: function (property) {
|
||||
var sortOrder = 1;
|
||||
if (property[0] === "-") {
|
||||
sortOrder = -1;
|
||||
property = property.substr(1);
|
||||
}
|
||||
return function (a, b) {
|
||||
var result = (a[property].toLowerCase() < b[property].toLowerCase()) ? -1 : (a[property].toLowerCase() > b[property].toLowerCase()) ? 1 : 0;
|
||||
return result * sortOrder;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Dynamic sort function, sorts by property name.
|
||||
* @param {string|int} property
|
||||
* @returns {Function}
|
||||
*/
|
||||
dynamicSort: function (property) {
|
||||
var sortOrder = 1;
|
||||
if (property[0] === "-") {
|
||||
sortOrder = -1;
|
||||
property = property.substr(1);
|
||||
}
|
||||
return function (a, b) {
|
||||
var result = (a[property].toLowerCase() < b[property].toLowerCase()) ? -1 : (a[property].toLowerCase() > b[property].toLowerCase()) ? 1 : 0;
|
||||
return result * sortOrder;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* ResponseHandler.js zarafa calender to ics im/exporter
|
||||
* ResponseHandler.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -34,52 +34,52 @@ Ext.namespace('Zarafa.plugins.calendarimporter.data');
|
||||
* Calendar specific response handler.
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.data.ResponseHandler = Ext.extend(Zarafa.core.data.AbstractResponseHandler, {
|
||||
/**
|
||||
* @cfg {Function} successCallback The function which
|
||||
* will be called after success request.
|
||||
*/
|
||||
successCallback: null,
|
||||
/**
|
||||
* @cfg {Function} successCallback The function which
|
||||
* will be called after success request.
|
||||
*/
|
||||
successCallback: null,
|
||||
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doExport: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doExport: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doLoad: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doLoad: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doImport: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doImport: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doImportattachment: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
/**
|
||||
* Call the successCallback callback function.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doImportattachment: function (response) {
|
||||
this.successCallback(response);
|
||||
},
|
||||
|
||||
/**
|
||||
* In case exception happened on server, server will return
|
||||
* exception response with the code of exception.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doError: function (response) {
|
||||
alert("error response code: " + response.error.info.code);
|
||||
}
|
||||
/**
|
||||
* In case exception happened on server, server will return
|
||||
* exception response with the code of exception.
|
||||
* @param {Object} response Object contained the response data.
|
||||
*/
|
||||
doError: function (response) {
|
||||
alert("error response code: " + response.error.info.code);
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.calendarresponsehandler', Zarafa.plugins.calendarimporter.data.ResponseHandler);
|
1460
js/data/timezones.js
1460
js/data/timezones.js
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* ImportContentPanel.js zarafa calender to ics im/exporter
|
||||
* ImportContentPanel.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -19,13 +19,13 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* ImportContentPanel
|
||||
*
|
||||
* Container for the importpanel.
|
||||
*/
|
||||
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
|
||||
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
|
||||
|
||||
/**
|
||||
* @class Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel
|
||||
@ -36,31 +36,31 @@ Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, {
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor : function(config) {
|
||||
config = config || {};
|
||||
Ext.applyIf(config, {
|
||||
layout : 'fit',
|
||||
title : _('Import Calendar File'),
|
||||
closeOnSave : true,
|
||||
width : 800,
|
||||
height : 700,
|
||||
//Add panel
|
||||
items : [
|
||||
{
|
||||
xtype : 'calendarimporter.importpanel',
|
||||
filename : config.filename,
|
||||
folder : config.folder
|
||||
}
|
||||
]
|
||||
});
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
Ext.applyIf(config, {
|
||||
layout: 'fit',
|
||||
title: dgettext('plugin_calendarimporter', 'Import Calendar File'),
|
||||
closeOnSave: true,
|
||||
width: 800,
|
||||
height: 700,
|
||||
//Add panel
|
||||
items: [
|
||||
{
|
||||
xtype: 'calendarimporter.importpanel',
|
||||
filename: config.filename,
|
||||
folder: config.folder
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel.superclass.constructor.call(this, config);
|
||||
}
|
||||
Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel.superclass.constructor.call(this, config);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.contentpanel' ,Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel);
|
||||
Ext.reg('calendarimporter.contentpanel', Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel);
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* plugin.calendarimporter.js zarafa calender to ics im/exporter
|
||||
* plugin.calendarimporter.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -24,285 +24,291 @@ Ext.namespace("Zarafa.plugins.calendarimporter"); // Assign the right na
|
||||
|
||||
Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.constructor.call(this, config);
|
||||
},
|
||||
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* initialises insertion point for plugin
|
||||
* @protected
|
||||
*/
|
||||
initPlugin: function () {
|
||||
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.initPlugin.apply(this, arguments);
|
||||
/**
|
||||
* initialises insertion point for plugin
|
||||
* @protected
|
||||
*/
|
||||
initPlugin: function () {
|
||||
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.initPlugin.apply(this, arguments);
|
||||
|
||||
/* our panel */
|
||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.dialogs.importevents');
|
||||
/* our panel */
|
||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.dialogs.importevents');
|
||||
|
||||
/* directly import received icals */
|
||||
this.registerInsertionPoint('common.contextmenu.attachment.actions', this.createAttachmentImportButton);
|
||||
/* directly import received icals */
|
||||
this.registerInsertionPoint('common.contextmenu.attachment.actions', this.createAttachmentImportButton);
|
||||
|
||||
/* add settings widget */
|
||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsWidget);
|
||||
/* add settings widget */
|
||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsWidget);
|
||||
|
||||
/* export a calendar entry via rightclick */
|
||||
this.registerInsertionPoint('context.calendar.contextmenu.actions', this.createItemExportInsertionPoint, this);
|
||||
/* export a calendar entry via rightclick */
|
||||
this.registerInsertionPoint('context.calendar.contextmenu.actions', this.createItemExportInsertionPoint, this);
|
||||
|
||||
/* ical sync stuff */
|
||||
if (container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/enable_sync") === true) {
|
||||
/* edit panel */
|
||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.settings.dialogs.calsyncedit');
|
||||
/* ical sync stuff */
|
||||
if (container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/enable_sync") === true) {
|
||||
/* edit panel */
|
||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.settings.dialogs.calsyncedit');
|
||||
|
||||
/* enable the settings widget */
|
||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsCalSyncWidget);
|
||||
}
|
||||
},
|
||||
/* enable the settings widget */
|
||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsCalSyncWidget);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* This method hooks to the contact context menu and allows users to export users to vcf.
|
||||
*
|
||||
* @param include
|
||||
* @param btn
|
||||
* @returns {Object}
|
||||
*/
|
||||
createItemExportInsertionPoint: function (include, btn) {
|
||||
return {
|
||||
text : dgettext('plugin_files', 'Export Event'),
|
||||
handler: this.exportToICS.createDelegate(this, [btn]),
|
||||
scope : this,
|
||||
iconCls: 'icon_calendarimporter_export'
|
||||
};
|
||||
},
|
||||
/**
|
||||
* This method hooks to the contact context menu and allows users to export users to vcf.
|
||||
*
|
||||
* @param include
|
||||
* @param btn
|
||||
* @returns {Object}
|
||||
*/
|
||||
createItemExportInsertionPoint: function (include, btn) {
|
||||
return {
|
||||
text: dgettext('plugin_calendarimporter', 'Export Event'),
|
||||
handler: this.exportToICS.createDelegate(this, [btn]),
|
||||
scope: this,
|
||||
iconCls: 'icon_calendarimporter_export'
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Generates a request to download the selected records as vCard.
|
||||
* @param {Ext.Button} btn
|
||||
*/
|
||||
exportToICS: function (btn) {
|
||||
if (btn.records.length == 0) {
|
||||
return; // skip if no records where given!
|
||||
}
|
||||
/**
|
||||
* Generates a request to download the selected records as vCard.
|
||||
* @param {Ext.Button} btn
|
||||
*/
|
||||
exportToICS: function (btn) {
|
||||
if (btn.records.length == 0) {
|
||||
return; // skip if no records where given!
|
||||
}
|
||||
|
||||
var recordIds = [];
|
||||
var recordIds = [];
|
||||
|
||||
for (var i = 0; i < btn.records.length; i++) {
|
||||
recordIds.push(btn.records[i].get("entryid"));
|
||||
}
|
||||
for (var i = 0; i < btn.records.length; i++) {
|
||||
recordIds.push(btn.records[i].get("entryid"));
|
||||
}
|
||||
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||
scope : this
|
||||
});
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||
scope: this
|
||||
});
|
||||
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'export',
|
||||
{
|
||||
storeid: btn.records[0].get("store_entryid"),
|
||||
records: recordIds
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
// Notify user
|
||||
// # TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||
container.getNotifier().notify('info', dgettext('plugin_contactimporter', 'Calendar Export'), String.format(dgettext('plugin_calendarimporter', 'Exporting {0} events. Please wait...'), recordIds.length));
|
||||
|
||||
/**
|
||||
* Creates the button
|
||||
*
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*
|
||||
*/
|
||||
createSettingsWidget: function () {
|
||||
return [{
|
||||
xtype: 'calendarimporter.settingswidget'
|
||||
}];
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates the button
|
||||
*
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*
|
||||
*/
|
||||
createSettingsCalSyncWidget: function () {
|
||||
return [{
|
||||
xtype: 'calendarimporter.settingscalsyncwidget'
|
||||
}];
|
||||
},
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'export',
|
||||
{
|
||||
storeid: btn.records[0].get("store_entryid"),
|
||||
records: recordIds
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Insert import button in all attachment suggestions
|
||||
/**
|
||||
* Creates the button
|
||||
*
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*
|
||||
*/
|
||||
createSettingsWidget: function () {
|
||||
return [{
|
||||
xtype: 'calendarimporter.settingswidget'
|
||||
}];
|
||||
},
|
||||
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*/
|
||||
createAttachmentImportButton: function (include, btn) {
|
||||
return {
|
||||
text : _('Import to Calendar'),
|
||||
handler : this.getAttachmentFileName.createDelegate(this, [btn]),
|
||||
scope : this,
|
||||
iconCls : 'icon_calendarimporter_button',
|
||||
beforeShow: function (item, record) {
|
||||
var extension = record.data.name.split('.').pop().toLowerCase();
|
||||
/**
|
||||
* Creates the button
|
||||
*
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*
|
||||
*/
|
||||
createSettingsCalSyncWidget: function () {
|
||||
return [{
|
||||
xtype: 'calendarimporter.settingscalsyncwidget'
|
||||
}];
|
||||
},
|
||||
|
||||
if (record.data.filetype == "text/calendar" || extension == "ics" || extension == "ifb" || extension == "ical" || extension == "ifbf") {
|
||||
item.setVisible(true);
|
||||
} else {
|
||||
item.setVisible(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
/**
|
||||
* Insert import button in all attachment suggestions
|
||||
|
||||
/**
|
||||
* Callback for getAttachmentFileName
|
||||
*/
|
||||
gotAttachmentFileName: function (response) {
|
||||
if (response.status == true) {
|
||||
this.scope.openImportDialog(response.tmpname);
|
||||
} else {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title : _('Error'),
|
||||
msg : _(response["message"]),
|
||||
icon : Zarafa.common.dialogs.MessageBox.ERROR,
|
||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
||||
});
|
||||
}
|
||||
},
|
||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||
*/
|
||||
createAttachmentImportButton: function (include, btn) {
|
||||
return {
|
||||
text: dgettext('plugin_calendarimporter', 'Import to Calendar'),
|
||||
handler: this.getAttachmentFileName.createDelegate(this, [btn]),
|
||||
scope: this,
|
||||
iconCls: 'icon_calendarimporter_button',
|
||||
beforeShow: function (item, record) {
|
||||
var extension = record.data.name.split('.').pop().toLowerCase();
|
||||
|
||||
/**
|
||||
* Clickhandler for the button
|
||||
*/
|
||||
getAttachmentFileName: function (btn, callback) {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title : 'Please wait',
|
||||
msg : 'Loading attachment...',
|
||||
progressText: 'Initializing...',
|
||||
width : 300,
|
||||
progress : true,
|
||||
closable : false
|
||||
});
|
||||
if (record.data.filetype == "text/calendar" || extension == "ics" || extension == "ifb" || extension == "ical" || extension == "ifbf") {
|
||||
item.setVisible(true);
|
||||
} else {
|
||||
item.setVisible(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
|
||||
// progress bar... ;)
|
||||
var f = function (v) {
|
||||
return function () {
|
||||
if (v == 100) {
|
||||
Zarafa.common.dialogs.MessageBox.hide();
|
||||
} else {
|
||||
Zarafa.common.dialogs.MessageBox.updateProgress(v / 100, Math.round(v) + '% loaded');
|
||||
}
|
||||
};
|
||||
};
|
||||
/**
|
||||
* Callback for getAttachmentFileName
|
||||
*/
|
||||
gotAttachmentFileName: function (response) {
|
||||
if (response.status == true) {
|
||||
this.scope.openImportDialog(response.tmpname);
|
||||
} else {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title: dgettext('plugin_calendarimporter', 'Error'),
|
||||
msg: response["message"],
|
||||
icon: Zarafa.common.dialogs.MessageBox.ERROR,
|
||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
for (var i = 1; i < 101; i++) {
|
||||
setTimeout(f(i), 20 * i);
|
||||
}
|
||||
/**
|
||||
* Clickhandler for the button
|
||||
*/
|
||||
getAttachmentFileName: function (btn, callback) {
|
||||
Zarafa.common.dialogs.MessageBox.show({
|
||||
title: dgettext('plugin_calendarimporter', 'Please wait'),
|
||||
msg: dgettext('plugin_calendarimporter', 'Loading attachment...'),
|
||||
progressText: dgettext('plugin_calendarimporter', 'Initializing...'),
|
||||
width: 300,
|
||||
progress: true,
|
||||
closable: false
|
||||
});
|
||||
|
||||
/* store the attachment to a temporary folder and prepare it for uploading */
|
||||
var attachmentRecord = btn.records;
|
||||
var attachmentStore = attachmentRecord.store;
|
||||
// progress bar... ;)
|
||||
var f = function (v) {
|
||||
return function () {
|
||||
if (v == 100) {
|
||||
Zarafa.common.dialogs.MessageBox.hide();
|
||||
} else {
|
||||
// # TRANSLATORS: {0} will be replaced by the percentage value (0-100)
|
||||
Zarafa.common.dialogs.MessageBox.updateProgress(v / 100, String.format(dgettext('plugin_calendarimporter', '{0}% loaded'), Math.round(v)));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
var store = attachmentStore.getParentRecord().get('store_entryid');
|
||||
var entryid = attachmentStore.getAttachmentParentRecordEntryId();
|
||||
var attachNum = new Array(1);
|
||||
if (attachmentRecord.get('attach_num') != -1) {
|
||||
attachNum[0] = attachmentRecord.get('attach_num');
|
||||
} else {
|
||||
attachNum[0] = attachmentRecord.get('tmpname');
|
||||
}
|
||||
var dialog_attachments = attachmentStore.getId();
|
||||
var filename = attachmentRecord.data.name;
|
||||
for (var i = 1; i < 101; i++) {
|
||||
setTimeout(f(i), 20 * i);
|
||||
}
|
||||
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: this.gotAttachmentFileName,
|
||||
scope : this
|
||||
});
|
||||
/* store the attachment to a temporary folder and prepare it for uploading */
|
||||
var attachmentRecord = btn.records;
|
||||
var attachmentStore = attachmentRecord.store;
|
||||
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'importattachment',
|
||||
{
|
||||
entryid : entryid,
|
||||
store : store,
|
||||
attachNum : attachNum,
|
||||
dialog_attachments: dialog_attachments,
|
||||
filename : filename
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
var store = attachmentStore.getParentRecord().get('store_entryid');
|
||||
var entryid = attachmentStore.getAttachmentParentRecordEntryId();
|
||||
var attachNum = new Array(1);
|
||||
if (attachmentRecord.get('attach_num') != -1) {
|
||||
attachNum[0] = attachmentRecord.get('attach_num');
|
||||
} else {
|
||||
attachNum[0] = attachmentRecord.get('tmpname');
|
||||
}
|
||||
var dialog_attachments = attachmentStore.getId();
|
||||
var filename = attachmentRecord.data.name;
|
||||
|
||||
/**
|
||||
* Open the import dialog.
|
||||
* @param {String} filename
|
||||
*/
|
||||
openImportDialog: function (filename) {
|
||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
||||
var config = {
|
||||
filename: filename,
|
||||
modal : true
|
||||
};
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: this.gotAttachmentFileName,
|
||||
scope: this
|
||||
});
|
||||
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
|
||||
},
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'importattachment',
|
||||
{
|
||||
entryid: entryid,
|
||||
store: store,
|
||||
attachNum: attachNum,
|
||||
dialog_attachments: dialog_attachments,
|
||||
filename: filename
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Bid for the type of shared component
|
||||
* and the given record.
|
||||
* This will bid on calendar.dialogs.importevents
|
||||
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
|
||||
* @param {Ext.data.Record} record Optionally passed record.
|
||||
* @return {Number} The bid for the shared component
|
||||
*/
|
||||
bidSharedComponent: function (type, record) {
|
||||
var bid = -1;
|
||||
switch (type) {
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents']:
|
||||
bid = 2;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit']:
|
||||
bid = 2;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
|
||||
if (record instanceof Zarafa.core.data.MAPIRecord) {
|
||||
if (record.get('object_type') == Zarafa.core.mapi.ObjectType.MAPI_FOLDER && record.get('container_class') == "IPF.Appointment") {
|
||||
bid = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return bid;
|
||||
},
|
||||
/**
|
||||
* Open the import dialog.
|
||||
* @param {String} filename
|
||||
*/
|
||||
openImportDialog: function (filename) {
|
||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
||||
var config = {
|
||||
filename: filename,
|
||||
modal: true
|
||||
};
|
||||
|
||||
/**
|
||||
* Will return the reference to the shared component.
|
||||
* Based on the type of component requested a component is returned.
|
||||
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
|
||||
* @param {Ext.data.Record} record Optionally passed record.
|
||||
* @return {Ext.Component} Component
|
||||
*/
|
||||
getSharedComponent: function (type, record) {
|
||||
var component;
|
||||
switch (type) {
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents']:
|
||||
component = Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit']:
|
||||
component = Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
|
||||
component = Zarafa.plugins.calendarimporter.ui.ContextMenu;
|
||||
break;
|
||||
}
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
|
||||
},
|
||||
|
||||
return component;
|
||||
}
|
||||
/**
|
||||
* Bid for the type of shared component
|
||||
* and the given record.
|
||||
* This will bid on calendar.dialogs.importevents
|
||||
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
|
||||
* @param {Ext.data.Record} record Optionally passed record.
|
||||
* @return {Number} The bid for the shared component
|
||||
*/
|
||||
bidSharedComponent: function (type, record) {
|
||||
var bid = -1;
|
||||
switch (type) {
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents']:
|
||||
bid = 2;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit']:
|
||||
bid = 2;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
|
||||
if (record instanceof Zarafa.core.data.MAPIRecord) {
|
||||
if (record.get('object_type') == Zarafa.core.mapi.ObjectType.MAPI_FOLDER && record.get('container_class') == "IPF.Appointment") {
|
||||
bid = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return bid;
|
||||
},
|
||||
|
||||
/**
|
||||
* Will return the reference to the shared component.
|
||||
* Based on the type of component requested a component is returned.
|
||||
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
|
||||
* @param {Ext.data.Record} record Optionally passed record.
|
||||
* @return {Ext.Component} Component
|
||||
*/
|
||||
getSharedComponent: function (type, record) {
|
||||
var component;
|
||||
switch (type) {
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents']:
|
||||
component = Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit']:
|
||||
component = Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel;
|
||||
break;
|
||||
case Zarafa.core.data.SharedComponentType['common.contextmenu']:
|
||||
component = Zarafa.plugins.calendarimporter.ui.ContextMenu;
|
||||
break;
|
||||
}
|
||||
|
||||
return component;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -310,10 +316,10 @@ Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, {
|
||||
* STARTUP
|
||||
*############################################################################################################################*/
|
||||
Zarafa.onReady(function () {
|
||||
container.registerPlugin(new Zarafa.core.PluginMetaData({
|
||||
name : 'calendarimporter',
|
||||
displayName : _('Calendarimporter Plugin'),
|
||||
about : Zarafa.plugins.calendarimporter.ABOUT,
|
||||
pluginConstructor: Zarafa.plugins.calendarimporter.ImportPlugin
|
||||
}));
|
||||
container.registerPlugin(new Zarafa.core.PluginMetaData({
|
||||
name: 'calendarimporter',
|
||||
displayName: dgettext('plugin_calendarimporter', 'Calendarimporter Plugin'),
|
||||
about: Zarafa.plugins.calendarimporter.ABOUT,
|
||||
pluginConstructor: Zarafa.plugins.calendarimporter.ImportPlugin
|
||||
}));
|
||||
});
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* SettingsCalSyncWidget.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings');
|
||||
|
||||
/**
|
||||
@ -7,108 +29,108 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings');
|
||||
*
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, {
|
||||
/**
|
||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||
*/
|
||||
settingsContext : undefined,
|
||||
/**
|
||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||
*/
|
||||
settingsContext: undefined,
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor : function(config) {
|
||||
config = config || {};
|
||||
|
||||
var store = new Ext.data.JsonStore({
|
||||
fields : [
|
||||
{ name : 'id', type : 'int' },
|
||||
{ name : 'icsurl' },
|
||||
{ name : 'user' },
|
||||
{ name : 'pass' },
|
||||
{ name : 'intervall', type : 'int' },
|
||||
{ name : 'calendar' },
|
||||
{ name : 'calendarname' },
|
||||
{ name : 'lastsync' }
|
||||
],
|
||||
sortInfo : {
|
||||
field : 'id',
|
||||
direction : 'ASC'
|
||||
},
|
||||
autoDestroy : true
|
||||
});
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
Ext.applyIf(config, {
|
||||
height : 400,
|
||||
title : _('Calendar Sync settings'),
|
||||
xtype : 'calendarimporter.settingscalsyncwidget',
|
||||
layout : {
|
||||
// override from SettingsWidget
|
||||
type : 'fit'
|
||||
},
|
||||
items : [{
|
||||
xtype : 'calendarimporter.calsyncpanel',
|
||||
store : store,
|
||||
ref : 'calsyncPanel'
|
||||
}]
|
||||
});
|
||||
var store = new Ext.data.JsonStore({
|
||||
fields: [
|
||||
{name: 'id', type: 'int'},
|
||||
{name: 'icsurl'},
|
||||
{name: 'user'},
|
||||
{name: 'pass'},
|
||||
{name: 'intervall', type: 'int'},
|
||||
{name: 'calendar'},
|
||||
{name: 'calendarname'},
|
||||
{name: 'lastsync'}
|
||||
],
|
||||
sortInfo: {
|
||||
field: 'id',
|
||||
direction: 'ASC'
|
||||
},
|
||||
autoDestroy: true
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
|
||||
* This is used to load the latest version of the settings from the
|
||||
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
|
||||
*/
|
||||
update : function(settingsModel) {
|
||||
this.model = settingsModel;
|
||||
Ext.applyIf(config, {
|
||||
height: 400,
|
||||
title: dgettext('plugin_calendarimporter', 'Calendar Sync settings'),
|
||||
xtype: 'calendarimporter.settingscalsyncwidget',
|
||||
layout: {
|
||||
// override from SettingsWidget
|
||||
type: 'fit'
|
||||
},
|
||||
items: [{
|
||||
xtype: 'calendarimporter.calsyncpanel',
|
||||
store: store,
|
||||
ref: 'calsyncPanel'
|
||||
}]
|
||||
});
|
||||
|
||||
// Convert the signatures into Store data
|
||||
var icslinks = settingsModel.get('zarafa/v1/contexts/calendar/icssync', true);
|
||||
var syncArray = [];
|
||||
for (var key in icslinks) {
|
||||
if(icslinks.hasOwnProperty(key)) { // skip inherited props
|
||||
syncArray.push(Ext.apply({}, icslinks[key], {id: key}));
|
||||
}
|
||||
}
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
// Load all icslinks into the GridPanel
|
||||
var store = this.calsyncPanel.calsyncGrid.getStore();
|
||||
store.loadData(syncArray);
|
||||
},
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
|
||||
* This is used to load the latest version of the settings from the
|
||||
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
|
||||
*/
|
||||
update: function (settingsModel) {
|
||||
this.model = settingsModel;
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
||||
*/
|
||||
updateSettings : function(settingsModel) {
|
||||
settingsModel.beginEdit();
|
||||
// Convert the signatures into Store data
|
||||
var icslinks = settingsModel.get('zarafa/v1/contexts/calendar/icssync', true);
|
||||
var syncArray = [];
|
||||
for (var key in icslinks) {
|
||||
if (icslinks.hasOwnProperty(key)) { // skip inherited props
|
||||
syncArray.push(Ext.apply({}, icslinks[key], {id: key}));
|
||||
}
|
||||
}
|
||||
|
||||
// Start reading the Grid store and convert the contents back into
|
||||
// an object which can be pushed to the settings.
|
||||
var icslinks = this.calsyncPanel.calsyncGrid.getStore().getRange();
|
||||
var icslinkData = {};
|
||||
for (var i = 0, len = icslinks.length; i < len; i++) {
|
||||
var icslink = icslinks[i];
|
||||
// Load all icslinks into the GridPanel
|
||||
var store = this.calsyncPanel.calsyncGrid.getStore();
|
||||
store.loadData(syncArray);
|
||||
},
|
||||
|
||||
icslinkData[icslink.get('id')] = {
|
||||
'icsurl' : icslink.get('icsurl'),
|
||||
'intervall' : icslink.get('intervall'),
|
||||
'user' : icslink.get('user'),
|
||||
'pass' : icslink.get('pass'),
|
||||
'lastsync' : icslink.get('lastsync'),
|
||||
'calendar' : icslink.get('calendar'),
|
||||
'calendarname' : Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(icslink.get('calendar')).display_name
|
||||
};
|
||||
}
|
||||
settingsModel.set('zarafa/v1/contexts/calendar/icssync', icslinkData);
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
||||
*/
|
||||
updateSettings: function (settingsModel) {
|
||||
settingsModel.beginEdit();
|
||||
|
||||
settingsModel.endEdit();
|
||||
}
|
||||
// Start reading the Grid store and convert the contents back into
|
||||
// an object which can be pushed to the settings.
|
||||
var icslinks = this.calsyncPanel.calsyncGrid.getStore().getRange();
|
||||
var icslinkData = {};
|
||||
for (var i = 0, len = icslinks.length; i < len; i++) {
|
||||
var icslink = icslinks[i];
|
||||
|
||||
icslinkData[icslink.get('id')] = {
|
||||
'icsurl': icslink.get('icsurl'),
|
||||
'intervall': icslink.get('intervall'),
|
||||
'user': icslink.get('user'),
|
||||
'pass': icslink.get('pass'),
|
||||
'lastsync': icslink.get('lastsync'),
|
||||
'calendar': icslink.get('calendar'),
|
||||
'calendarname': Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(icslink.get('calendar')).display_name
|
||||
};
|
||||
}
|
||||
settingsModel.set('zarafa/v1/contexts/calendar/icssync', icslinkData);
|
||||
|
||||
settingsModel.endEdit();
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.settingscalsyncwidget', Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget);
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* SettingsWidget.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings');
|
||||
|
||||
/**
|
||||
@ -7,110 +29,109 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings');
|
||||
*
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, {
|
||||
/**
|
||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||
*/
|
||||
settingsContext : undefined,
|
||||
/**
|
||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||
*/
|
||||
settingsContext: undefined,
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor : function(config)
|
||||
{
|
||||
config = config || {};
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
Ext.applyIf(config, {
|
||||
title : _('Calendar Import/Export plugin settings'),
|
||||
xtype : 'calendarimporter.settingswidget',
|
||||
items : [
|
||||
{
|
||||
xtype : 'checkbox',
|
||||
name : 'zarafa/v1/plugins/calendarimporter/enable_sync',
|
||||
ref : 'enableSync',
|
||||
fieldLabel : 'Enable ical sync',
|
||||
lazyInit : false
|
||||
},
|
||||
this.createSelectBox(),
|
||||
this.createTimezoneBox()
|
||||
]
|
||||
});
|
||||
Ext.applyIf(config, {
|
||||
title: dgettext('plugin_calendarimporter', 'Calendar Import/Export plugin settings'),
|
||||
xtype: 'calendarimporter.settingswidget',
|
||||
items: [
|
||||
{
|
||||
xtype: 'checkbox',
|
||||
name: 'zarafa/v1/plugins/calendarimporter/enable_sync',
|
||||
ref: 'enableSync',
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Enable ical sync'),
|
||||
lazyInit: false
|
||||
},
|
||||
this.createSelectBox(),
|
||||
this.createTimezoneBox()
|
||||
]
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsWidget.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
createSelectBox: function() {
|
||||
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
||||
Zarafa.plugins.calendarimporter.settings.SettingsWidget.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
return {
|
||||
xtype: "selectbox",
|
||||
ref : 'defaultCalendar',
|
||||
editable: false,
|
||||
name: "zarafa/v1/plugins/calendarimporter/default_calendar",
|
||||
createSelectBox: function () {
|
||||
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
||||
|
||||
return {
|
||||
xtype: "selectbox",
|
||||
ref: 'defaultCalendar',
|
||||
editable: false,
|
||||
name: "zarafa/v1/plugins/calendarimporter/default_calendar",
|
||||
value: Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_calendar")).entryid,
|
||||
width: 100,
|
||||
fieldLabel: "Default calender",
|
||||
store: myStore,
|
||||
mode: 'local',
|
||||
labelSeperator: ":",
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
}
|
||||
},
|
||||
|
||||
createTimezoneBox: function() {
|
||||
return {
|
||||
xtype: "selectbox",
|
||||
ref : 'defaultTimezone',
|
||||
editable: false,
|
||||
name: "zarafa/v1/plugins/calendarimporter/default_timezone",
|
||||
value: Zarafa.plugins.calendarimporter.data.Timezones.unMap(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_timezone")),
|
||||
width: 100,
|
||||
fieldLabel: "Default timezone",
|
||||
store: Zarafa.plugins.calendarimporter.data.Timezones.store,
|
||||
labelSeperator: ":",
|
||||
mode: 'local',
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
|
||||
* This is used to load the latest version of the settings from the
|
||||
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
|
||||
*/
|
||||
update : function(settingsModel) {
|
||||
this.enableSync.setValue(settingsModel.get(this.enableSync.name));
|
||||
this.defaultCalendar.setValue(Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(settingsModel.get(this.defaultCalendar.name)).entryid);
|
||||
this.defaultTimezone.setValue(settingsModel.get(this.defaultTimezone.name));
|
||||
},
|
||||
width: 100,
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Default calender'),
|
||||
store: myStore,
|
||||
mode: 'local',
|
||||
labelSeperator: ":",
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
||||
*/
|
||||
updateSettings : function(settingsModel) {
|
||||
createTimezoneBox: function () {
|
||||
return {
|
||||
xtype: "selectbox",
|
||||
ref: 'defaultTimezone',
|
||||
editable: false,
|
||||
name: "zarafa/v1/plugins/calendarimporter/default_timezone",
|
||||
value: Zarafa.plugins.calendarimporter.data.Timezones.unMap(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_timezone")),
|
||||
width: 100,
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Default timezone'),
|
||||
store: Zarafa.plugins.calendarimporter.data.Timezones.store,
|
||||
labelSeperator: ":",
|
||||
mode: 'local',
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
|
||||
* This is used to load the latest version of the settings from the
|
||||
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
|
||||
*/
|
||||
update: function (settingsModel) {
|
||||
this.enableSync.setValue(settingsModel.get(this.enableSync.name));
|
||||
this.defaultCalendar.setValue(Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(settingsModel.get(this.defaultCalendar.name)).entryid);
|
||||
this.defaultTimezone.setValue(settingsModel.get(this.defaultTimezone.name));
|
||||
},
|
||||
|
||||
/**
|
||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
||||
*/
|
||||
updateSettings: function (settingsModel) {
|
||||
// check if the user changed a value
|
||||
var changed = false;
|
||||
|
||||
if(settingsModel.get(this.enableSync.name) != this.enableSync.getValue()) {
|
||||
if (settingsModel.get(this.enableSync.name) != this.enableSync.getValue()) {
|
||||
changed = true;
|
||||
} else if(settingsModel.get(this.defaultCalendar.name) != Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.defaultCalendar.getValue()).display_name) {
|
||||
} else if (settingsModel.get(this.defaultCalendar.name) != Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.defaultCalendar.getValue()).display_name) {
|
||||
changed = true;
|
||||
} else if(settingsModel.get(this.defaultTimezone.name) != this.defaultTimezone.getValue()) {
|
||||
} else if (settingsModel.get(this.defaultTimezone.name) != this.defaultTimezone.getValue()) {
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if(changed) {
|
||||
if (changed) {
|
||||
// Really save changes
|
||||
settingsModel.set(this.enableSync.name, this.enableSync.getValue());
|
||||
settingsModel.set(this.defaultCalendar.name, Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.defaultCalendar.getValue()).display_name); // store name
|
||||
@ -118,7 +139,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
|
||||
this.onUpdateSettings();
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* Called after the {@link Zarafa.settings.SettingsModel} fires the {@link Zarafa.settings.SettingsModel#save save}
|
||||
@ -126,8 +147,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
* settings which were saved to the server.
|
||||
* @private
|
||||
*/
|
||||
onUpdateSettings : function()
|
||||
{
|
||||
onUpdateSettings: function () {
|
||||
var message = _('Your WebApp needs to be reloaded to make the changes visible!');
|
||||
message += '<br/><br/>';
|
||||
message += _('WebApp will automatically restart in order for these changes to take effect');
|
||||
@ -135,17 +155,17 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
|
||||
Zarafa.common.dialogs.MessageBox.addCustomButtons({
|
||||
title: _('Restart WebApp'),
|
||||
msg : message,
|
||||
msg: message,
|
||||
icon: Ext.MessageBox.QUESTION,
|
||||
fn : this.restartWebapp,
|
||||
customButton : [{
|
||||
text : _('Restart'),
|
||||
name : 'restart'
|
||||
fn: this.restartWebapp,
|
||||
customButton: [{
|
||||
text: _('Restart'),
|
||||
name: 'restart'
|
||||
}, {
|
||||
text : _('Cancel'),
|
||||
name : 'cancel'
|
||||
text: _('Cancel'),
|
||||
name: 'cancel'
|
||||
}],
|
||||
scope : this
|
||||
scope: this
|
||||
});
|
||||
|
||||
},
|
||||
@ -156,8 +176,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
* @param {String} button The button which user pressed.
|
||||
* @private
|
||||
*/
|
||||
restartWebapp : function(button)
|
||||
{
|
||||
restartWebapp: function (button) {
|
||||
if (button === 'restart') {
|
||||
var contextModel = this.ownerCt.settingsContext.getModel();
|
||||
var realModel = contextModel.getRealSettingsModel();
|
||||
@ -165,7 +184,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
realModel.save();
|
||||
|
||||
this.loadMask = new Zarafa.common.ui.LoadMask(Ext.getBody(), {
|
||||
msg : '<b>' + _('Webapp is reloading, Please wait.') + '</b>'
|
||||
msg: '<b>' + _('Webapp is reloading, Please wait.') + '</b>'
|
||||
});
|
||||
this.loadMask.show();
|
||||
|
||||
@ -183,8 +202,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
* settings which were saved to the server.
|
||||
* @private
|
||||
*/
|
||||
onSettingsSave : function(model, parameters)
|
||||
{
|
||||
onSettingsSave: function (model, parameters) {
|
||||
this.mun(model, 'save', this.onSettingsSave, this);
|
||||
Zarafa.core.Util.reloadWebapp();
|
||||
},
|
||||
@ -200,8 +218,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
||||
* @param {Object} response The response object as received from the PHP-side
|
||||
* @private
|
||||
*/
|
||||
onSettingsException : function(model, type, action, options, response)
|
||||
{
|
||||
onSettingsException: function (model, type, action, options, response) {
|
||||
this.loadMask.hide();
|
||||
|
||||
// Remove event handlers
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* CalSyncEditContentPanel.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings.dialogs');
|
||||
|
||||
/**
|
||||
@ -8,31 +30,31 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings.dialogs');
|
||||
* {@link Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel CalSyncEditContentPanel} will be used to edit ics sync entries.
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, {
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor : function(config) {
|
||||
config = config || {};
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
// Add in some standard configuration data.
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype : 'calendarimporter.calsynceditcontentpanel',
|
||||
layout : 'fit',
|
||||
model : true,
|
||||
autoSave : false,
|
||||
width : 400,
|
||||
height : 400,
|
||||
title : _('ICAL Sync'),
|
||||
items : [{
|
||||
xtype : 'calendarimporter.calsynceditpanel',
|
||||
item : config.item
|
||||
}]
|
||||
});
|
||||
// Add in some standard configuration data.
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype: 'calendarimporter.calsynceditcontentpanel',
|
||||
layout: 'fit',
|
||||
model: true,
|
||||
autoSave: false,
|
||||
width: 400,
|
||||
height: 400,
|
||||
title: dgettext('plugin_calendarimporter', 'ICAL Sync'),
|
||||
items: [{
|
||||
xtype: 'calendarimporter.calsynceditpanel',
|
||||
item: config.item
|
||||
}]
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel.superclass.constructor.call(this, config);
|
||||
}
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel.superclass.constructor.call(this, config);
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.calsynceditcontentpanel', Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel);
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* CalSyncEditPanel.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings.dialogs');
|
||||
|
||||
/**
|
||||
@ -8,195 +30,194 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings.dialogs');
|
||||
* Will generate UI for {@link Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel CalSyncEditPanel}.
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel = Ext.extend(Ext.form.FormPanel, {
|
||||
|
||||
/**
|
||||
* the id of the currently edited item
|
||||
*/
|
||||
currentItem : undefined,
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor : function(config) {
|
||||
config = config || {};
|
||||
|
||||
if(config.item)
|
||||
this.currentItem = config.item;
|
||||
/**
|
||||
* the id of the currently edited item
|
||||
*/
|
||||
currentItem: undefined,
|
||||
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype : 'calendarimporter.calsynceditpanel',
|
||||
labelAlign : 'top',
|
||||
defaultType: 'textfield',
|
||||
items : this.createPanelItems(config),
|
||||
buttons: [{
|
||||
text: _('Save'),
|
||||
handler: this.doSave,
|
||||
scope: this
|
||||
},
|
||||
{
|
||||
text: _('Cancel'),
|
||||
handler: this.doClose,
|
||||
scope: this
|
||||
}]
|
||||
});
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* close the dialog
|
||||
*/
|
||||
doClose : function() {
|
||||
this.dialog.close();
|
||||
},
|
||||
|
||||
/**
|
||||
* save the data to the store
|
||||
*/
|
||||
doSave : function() {
|
||||
var store = this.dialog.store;
|
||||
var id = 0;
|
||||
var record = undefined;
|
||||
if (config.item)
|
||||
this.currentItem = config.item;
|
||||
|
||||
if(!this.currentItem) {
|
||||
record = new store.recordType({
|
||||
id: this.hashCode(this.icsurl.getValue()),
|
||||
icsurl: this.icsurl.getValue(),
|
||||
intervall: this.intervall.getValue(),
|
||||
user: this.user.getValue(),
|
||||
pass: Ext.util.base64.encode(this.pass.getValue()),
|
||||
calendar: this.calendar.getValue(),
|
||||
calendarname : Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.calendar.getValue()).display_name,
|
||||
lastsync: "never"
|
||||
});
|
||||
}
|
||||
|
||||
if(this.icsurl.isValid()) {
|
||||
if(record) {
|
||||
store.add(record);
|
||||
} else {
|
||||
this.currentItem.set('icsurl', this.icsurl.getValue());
|
||||
this.currentItem.set('intervall', this.intervall.getValue());
|
||||
this.currentItem.set('user', this.user.getValue());
|
||||
this.currentItem.set('pass', Ext.util.base64.encode(this.pass.getValue()));
|
||||
this.currentItem.set('calendar', this.calendar.getValue());
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype: 'calendarimporter.calsynceditpanel',
|
||||
labelAlign: 'top',
|
||||
defaultType: 'textfield',
|
||||
items: this.createPanelItems(config),
|
||||
buttons: [{
|
||||
text: _('Save'),
|
||||
handler: this.doSave,
|
||||
scope: this
|
||||
},
|
||||
{
|
||||
text: _('Cancel'),
|
||||
handler: this.doClose,
|
||||
scope: this
|
||||
}]
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* close the dialog
|
||||
*/
|
||||
doClose: function () {
|
||||
this.dialog.close();
|
||||
},
|
||||
|
||||
/**
|
||||
* save the data to the store
|
||||
*/
|
||||
doSave: function () {
|
||||
var store = this.dialog.store;
|
||||
var id = 0;
|
||||
var record = undefined;
|
||||
|
||||
if (!this.currentItem) {
|
||||
record = new store.recordType({
|
||||
id: this.hashCode(this.icsurl.getValue()),
|
||||
icsurl: this.icsurl.getValue(),
|
||||
intervall: this.intervall.getValue(),
|
||||
user: this.user.getValue(),
|
||||
pass: Ext.util.base64.encode(this.pass.getValue()),
|
||||
calendar: this.calendar.getValue(),
|
||||
calendarname: Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.calendar.getValue()).display_name,
|
||||
lastsync: "never"
|
||||
});
|
||||
}
|
||||
|
||||
if (this.icsurl.isValid()) {
|
||||
if (record) {
|
||||
store.add(record);
|
||||
} else {
|
||||
this.currentItem.set('icsurl', this.icsurl.getValue());
|
||||
this.currentItem.set('intervall', this.intervall.getValue());
|
||||
this.currentItem.set('user', this.user.getValue());
|
||||
this.currentItem.set('pass', Ext.util.base64.encode(this.pass.getValue()));
|
||||
this.currentItem.set('calendar', this.calendar.getValue());
|
||||
this.currentItem.set('calendarname', Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.calendar.getValue()).display_name);
|
||||
}
|
||||
this.dialog.close();
|
||||
}
|
||||
},
|
||||
}
|
||||
this.dialog.close();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will create panel items for {@link Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel CalSyncEditPanel}
|
||||
* @return {Array} array of items that should be added to panel.
|
||||
* @private
|
||||
*/
|
||||
createPanelItems : function(config)
|
||||
{
|
||||
var icsurl = "";
|
||||
var intervall = "15";
|
||||
var user = "";
|
||||
var pass = "";
|
||||
/**
|
||||
* Function will create panel items for {@link Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel CalSyncEditPanel}
|
||||
* @return {Array} array of items that should be added to panel.
|
||||
* @private
|
||||
*/
|
||||
createPanelItems: function (config) {
|
||||
var icsurl = "";
|
||||
var intervall = "15";
|
||||
var user = "";
|
||||
var pass = "";
|
||||
var calendarname = "";
|
||||
var calendar = Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_calendar")).entryid;
|
||||
var calendar = Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_calendar")).entryid;
|
||||
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
||||
|
||||
if(config.item){
|
||||
icsurl = config.item.get('icsurl');
|
||||
intervall = config.item.get('intervall');
|
||||
user = config.item.get('user');
|
||||
pass = Ext.util.base64.decode(config.item.get('pass'));
|
||||
calendar = config.item.get('calendar');
|
||||
if (config.item) {
|
||||
icsurl = config.item.get('icsurl');
|
||||
intervall = config.item.get('intervall');
|
||||
user = config.item.get('user');
|
||||
pass = Ext.util.base64.decode(config.item.get('pass'));
|
||||
calendar = config.item.get('calendar');
|
||||
calendarname = config.item.get('calendarname');
|
||||
}
|
||||
|
||||
|
||||
return [{
|
||||
xtype: 'fieldset',
|
||||
title: _('ICAL Information'),
|
||||
defaultType: 'textfield',
|
||||
layout: 'form',
|
||||
flex: 1,
|
||||
defaults: {
|
||||
anchor: '100%',
|
||||
flex: 1
|
||||
},
|
||||
items: [{
|
||||
fieldLabel: 'ICS Url',
|
||||
name: 'icsurl',
|
||||
ref: '../icsurl',
|
||||
value: icsurl,
|
||||
allowBlank: false
|
||||
},
|
||||
{
|
||||
xtype:'selectbox',
|
||||
fieldLabel: _('Destination Calendar'),
|
||||
name: 'calendar',
|
||||
ref: '../calendar',
|
||||
value: calendar,
|
||||
editable: false,
|
||||
store: myStore,
|
||||
mode: 'local',
|
||||
labelSeperator: ":",
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
},
|
||||
{
|
||||
xtype:'numberfield',
|
||||
fieldLabel: _('Sync Intervall (minutes)'),
|
||||
name: 'intervall',
|
||||
ref: '../intervall',
|
||||
value: intervall,
|
||||
allowBlank: false
|
||||
}]
|
||||
},
|
||||
{
|
||||
xtype: 'fieldset',
|
||||
title: _('Authentication (optional)'),
|
||||
defaultType: 'textfield',
|
||||
layout: 'form',
|
||||
defaults: {
|
||||
anchor: '100%'
|
||||
},
|
||||
items: [{
|
||||
fieldLabel: _('Username'),
|
||||
name: 'user',
|
||||
ref: '../user',
|
||||
value: user,
|
||||
allowBlank: true
|
||||
},
|
||||
{
|
||||
fieldLabel: _('Password'),
|
||||
name: 'pass',
|
||||
ref: '../pass',
|
||||
value: pass,
|
||||
inputType: 'password',
|
||||
allowBlank: true
|
||||
}]
|
||||
}];
|
||||
},
|
||||
|
||||
/**
|
||||
* Java String.hashCode() implementation
|
||||
* @private
|
||||
*/
|
||||
hashCode : function(str){
|
||||
var hash = 0;
|
||||
var chr = 0;
|
||||
var i = 0;
|
||||
}
|
||||
|
||||
if (str.length == 0) return hash;
|
||||
for (i = 0; i < str.length; i++) {
|
||||
chr = str.charCodeAt(i);
|
||||
hash = ((hash<<5)-hash)+chr;
|
||||
hash = hash & hash; // Convert to 32bit integer
|
||||
}
|
||||
return Math.abs(hash);
|
||||
}
|
||||
|
||||
return [{
|
||||
xtype: 'fieldset',
|
||||
title: dgettext('plugin_calendarimporter', 'ICAL Information'),
|
||||
defaultType: 'textfield',
|
||||
layout: 'form',
|
||||
flex: 1,
|
||||
defaults: {
|
||||
anchor: '100%',
|
||||
flex: 1
|
||||
},
|
||||
items: [{
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'ICS Url'),
|
||||
name: 'icsurl',
|
||||
ref: '../icsurl',
|
||||
value: icsurl,
|
||||
allowBlank: false
|
||||
},
|
||||
{
|
||||
xtype: 'selectbox',
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Destination Calendar'),
|
||||
name: 'calendar',
|
||||
ref: '../calendar',
|
||||
value: calendar,
|
||||
editable: false,
|
||||
store: myStore,
|
||||
mode: 'local',
|
||||
labelSeperator: ":",
|
||||
border: false,
|
||||
anchor: "100%",
|
||||
scope: this,
|
||||
allowBlank: false
|
||||
},
|
||||
{
|
||||
xtype: 'numberfield',
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Sync Intervall (minutes)'),
|
||||
name: 'intervall',
|
||||
ref: '../intervall',
|
||||
value: intervall,
|
||||
allowBlank: false
|
||||
}]
|
||||
},
|
||||
{
|
||||
xtype: 'fieldset',
|
||||
title: dgettext('plugin_calendarimporter', 'Authentication (optional)'),
|
||||
defaultType: 'textfield',
|
||||
layout: 'form',
|
||||
defaults: {
|
||||
anchor: '100%'
|
||||
},
|
||||
items: [{
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Username'),
|
||||
name: 'user',
|
||||
ref: '../user',
|
||||
value: user,
|
||||
allowBlank: true
|
||||
},
|
||||
{
|
||||
fieldLabel: dgettext('plugin_calendarimporter', 'Password'),
|
||||
name: 'pass',
|
||||
ref: '../pass',
|
||||
value: pass,
|
||||
inputType: 'password',
|
||||
allowBlank: true
|
||||
}]
|
||||
}];
|
||||
},
|
||||
|
||||
/**
|
||||
* Java String.hashCode() implementation
|
||||
* @private
|
||||
*/
|
||||
hashCode: function (str) {
|
||||
var hash = 0;
|
||||
var chr = 0;
|
||||
var i = 0;
|
||||
|
||||
if (str.length == 0) return hash;
|
||||
for (i = 0; i < str.length; i++) {
|
||||
chr = str.charCodeAt(i);
|
||||
hash = ((hash << 5) - hash) + chr;
|
||||
hash = hash & hash; // Convert to 32bit integer
|
||||
}
|
||||
return Math.abs(hash);
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.calsynceditpanel', Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel);
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* CalSyncGrid.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings.ui');
|
||||
|
||||
/**
|
||||
@ -7,162 +29,152 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings.ui');
|
||||
*
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid = Ext.extend(Ext.grid.GridPanel, {
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration structure
|
||||
*/
|
||||
constructor : function(config)
|
||||
{
|
||||
config = config || {};
|
||||
|
||||
Ext.applyIf(config, {
|
||||
xtype : 'calendarimporter.calsyncgrid',
|
||||
border : true,
|
||||
store : config.store,
|
||||
viewConfig : {
|
||||
forceFit : true,
|
||||
emptyText : '<div class=\'emptytext\'>' + _('No ICAL sync entry exists') + '</div>'
|
||||
},
|
||||
loadMask : this.initLoadMask(),
|
||||
columns : this.initColumnModel(),
|
||||
selModel : this.initSelectionModel(),
|
||||
listeners : {
|
||||
viewready : this.onViewReady,
|
||||
rowdblclick : this.onRowDblClick,
|
||||
scope : this
|
||||
}
|
||||
});
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration structure
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.constructor.call(this, config);
|
||||
},
|
||||
Ext.applyIf(config, {
|
||||
xtype: 'calendarimporter.calsyncgrid',
|
||||
border: true,
|
||||
store: config.store,
|
||||
viewConfig: {
|
||||
forceFit: true,
|
||||
emptyText: '<div class=\'emptytext\'>' + dgettext('plugin_calendarimporter', 'No ICAL sync entry exists') + '</div>'
|
||||
},
|
||||
loadMask: this.initLoadMask(),
|
||||
columns: this.initColumnModel(),
|
||||
selModel: this.initSelectionModel(),
|
||||
listeners: {
|
||||
viewready: this.onViewReady,
|
||||
rowdblclick: this.onRowDblClick,
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* initialize events for the grid panel.
|
||||
* @private
|
||||
*/
|
||||
initEvents : function()
|
||||
{
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.initEvents.call(this);
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
// select first icssync when store has finished loading
|
||||
this.mon(this.store, 'load', this.onViewReady, this, {single : true});
|
||||
},
|
||||
|
||||
/**
|
||||
* Render function
|
||||
* @return {String}
|
||||
* @private
|
||||
*/
|
||||
renderAuthColumn : function(value, p, record)
|
||||
{
|
||||
return value ? "true" : "false";
|
||||
},
|
||||
/**
|
||||
* initialize events for the grid panel.
|
||||
* @private
|
||||
*/
|
||||
initEvents: function () {
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.initEvents.call(this);
|
||||
|
||||
/**
|
||||
* Render function
|
||||
* @return {String}
|
||||
* @private
|
||||
*/
|
||||
renderCalendarColumn : function(value, p, record)
|
||||
{
|
||||
return Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(value).display_name;
|
||||
},
|
||||
// select first icssync when store has finished loading
|
||||
this.mon(this.store, 'load', this.onViewReady, this, {single: true});
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a column model object, used in {@link #colModel} config
|
||||
* @return {Ext.grid.ColumnModel} column model object
|
||||
* @private
|
||||
*/
|
||||
initColumnModel : function()
|
||||
{
|
||||
return [{
|
||||
dataIndex : 'icsurl',
|
||||
header : _('ICS File'),
|
||||
renderer : Zarafa.common.ui.grid.Renderers.text
|
||||
},
|
||||
{
|
||||
dataIndex : 'calendarname',
|
||||
header : _('Destination Calender'),
|
||||
renderer : Zarafa.common.ui.grid.Renderers.text
|
||||
},
|
||||
{
|
||||
dataIndex : 'user',
|
||||
header : _('Authentication'),
|
||||
renderer : this.renderAuthColumn
|
||||
},
|
||||
{
|
||||
dataIndex : 'intervall',
|
||||
header : _('Sync Intervall')
|
||||
},
|
||||
{
|
||||
dataIndex : 'lastsync',
|
||||
header : _('Last Synchronisation'),
|
||||
renderer : Zarafa.common.ui.grid.Renderers.text
|
||||
}]
|
||||
},
|
||||
/**
|
||||
* Render function
|
||||
* @return {String}
|
||||
* @private
|
||||
*/
|
||||
renderAuthColumn: function (value, p, record) {
|
||||
return value ? "true" : "false";
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a selection model object, used in {@link #selModel} config
|
||||
* @return {Ext.grid.RowSelectionModel} selection model object
|
||||
* @private
|
||||
*/
|
||||
initSelectionModel : function()
|
||||
{
|
||||
return new Ext.grid.RowSelectionModel({
|
||||
singleSelect : true
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Render function
|
||||
* @return {String}
|
||||
* @private
|
||||
*/
|
||||
renderCalendarColumn: function (value, p, record) {
|
||||
return Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(value).display_name;
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialize the {@link Ext.grid.GridPanel.loadMask} field
|
||||
*
|
||||
* @return {Ext.LoadMask} The configuration object for {@link Ext.LoadMask}
|
||||
* @private
|
||||
*/
|
||||
initLoadMask : function()
|
||||
{
|
||||
return {
|
||||
msg : _('Loading ics sync entries') + '...'
|
||||
};
|
||||
},
|
||||
/**
|
||||
* Creates a column model object, used in {@link #colModel} config
|
||||
* @return {Ext.grid.ColumnModel} column model object
|
||||
* @private
|
||||
*/
|
||||
initColumnModel: function () {
|
||||
return [{
|
||||
dataIndex: 'icsurl',
|
||||
header: dgettext('plugin_calendarimporter', 'ICS File'),
|
||||
renderer: Zarafa.common.ui.grid.Renderers.text
|
||||
},
|
||||
{
|
||||
dataIndex: 'calendarname',
|
||||
header: dgettext('plugin_calendarimporter', 'Destination Calender'),
|
||||
renderer: Zarafa.common.ui.grid.Renderers.text
|
||||
},
|
||||
{
|
||||
dataIndex: 'user',
|
||||
header: dgettext('plugin_calendarimporter', 'Authentication'),
|
||||
renderer: this.renderAuthColumn
|
||||
},
|
||||
{
|
||||
dataIndex: 'intervall',
|
||||
header: dgettext('plugin_calendarimporter', 'Sync Intervall')
|
||||
},
|
||||
{
|
||||
dataIndex: 'lastsync',
|
||||
header: dgettext('plugin_calendarimporter', 'Last Synchronisation'),
|
||||
renderer: Zarafa.common.ui.grid.Renderers.text
|
||||
}]
|
||||
},
|
||||
|
||||
/**
|
||||
* Event handler which is fired when the gridPanel is ready. This will automatically
|
||||
* select the first row in the grid.
|
||||
* @private
|
||||
*/
|
||||
onViewReady : function()
|
||||
{
|
||||
this.getSelectionModel().selectFirstRow();
|
||||
},
|
||||
/**
|
||||
* Creates a selection model object, used in {@link #selModel} config
|
||||
* @return {Ext.grid.RowSelectionModel} selection model object
|
||||
* @private
|
||||
*/
|
||||
initSelectionModel: function () {
|
||||
return new Ext.grid.RowSelectionModel({
|
||||
singleSelect: true
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will be called to remove a ics sync entry.
|
||||
*/
|
||||
removeIcsSyncAs : function()
|
||||
{
|
||||
var icsRecord = this.getSelectionModel().getSelected();
|
||||
if(!icsRecord) {
|
||||
Ext.Msg.alert(_('Alert'), _('Please select a ics sync entry.'));
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Initialize the {@link Ext.grid.GridPanel.loadMask} field
|
||||
*
|
||||
* @return {Ext.LoadMask} The configuration object for {@link Ext.LoadMask}
|
||||
* @private
|
||||
*/
|
||||
initLoadMask: function () {
|
||||
return {
|
||||
msg: dgettext('plugin_calendarimporter', 'Loading ics sync entries...')
|
||||
};
|
||||
},
|
||||
|
||||
this.store.remove(icsRecord);
|
||||
},
|
||||
|
||||
/**
|
||||
* Event handler which is fired when the {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid CalSyncGrid} is double clicked.
|
||||
* it will call generic function to handle the functionality.
|
||||
* @private
|
||||
*/
|
||||
onRowDblClick : function(grid, rowIndex)
|
||||
{
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
||||
store : grid.getStore(),
|
||||
item : grid.getStore().getAt(rowIndex),
|
||||
manager : Ext.WindowMgr
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Event handler which is fired when the gridPanel is ready. This will automatically
|
||||
* select the first row in the grid.
|
||||
* @private
|
||||
*/
|
||||
onViewReady: function () {
|
||||
this.getSelectionModel().selectFirstRow();
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will be called to remove a ics sync entry.
|
||||
*/
|
||||
removeIcsSyncAs: function () {
|
||||
var icsRecord = this.getSelectionModel().getSelected();
|
||||
if (!icsRecord) {
|
||||
Ext.Msg.alert(dgettext('plugin_calendarimporter', 'Alert'), dgettext('plugin_calendarimporter', 'Please select a ics sync entry.'));
|
||||
return;
|
||||
}
|
||||
|
||||
this.store.remove(icsRecord);
|
||||
},
|
||||
|
||||
/**
|
||||
* Event handler which is fired when the {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid CalSyncGrid} is double clicked.
|
||||
* it will call generic function to handle the functionality.
|
||||
* @private
|
||||
*/
|
||||
onRowDblClick: function (grid, rowIndex) {
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
||||
store: grid.getStore(),
|
||||
item: grid.getStore().getAt(rowIndex),
|
||||
manager: Ext.WindowMgr
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.calsyncgrid', Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid);
|
||||
|
@ -1,3 +1,25 @@
|
||||
/**
|
||||
* CalSyncPanel.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
Ext.namespace('Zarafa.plugins.calendarimporter.settings.ui');
|
||||
|
||||
/**
|
||||
@ -8,151 +30,143 @@ Ext.namespace('Zarafa.plugins.calendarimporter.settings.ui');
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel = Ext.extend(Ext.Panel, {
|
||||
|
||||
// store
|
||||
store : undefined,
|
||||
// store
|
||||
store: undefined,
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor : function(config)
|
||||
{
|
||||
config = config || {};
|
||||
if(config.store)
|
||||
this.store = config.store;
|
||||
/**
|
||||
* @constructor
|
||||
* @param config Configuration structure
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
if (config.store)
|
||||
this.store = config.store;
|
||||
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype : 'calendarimporter.calsyncpanel',
|
||||
border : false,
|
||||
layout : {
|
||||
type : 'vbox',
|
||||
align : 'stretch',
|
||||
pack : 'start'
|
||||
},
|
||||
items : this.createPanelItems(this.store)
|
||||
});
|
||||
Ext.applyIf(config, {
|
||||
// Override from Ext.Component
|
||||
xtype: 'calendarimporter.calsyncpanel',
|
||||
border: false,
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'stretch',
|
||||
pack: 'start'
|
||||
},
|
||||
items: this.createPanelItems(this.store)
|
||||
});
|
||||
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will create panel items for {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel CalSyncPanel}
|
||||
* @return {Array} array of items that should be added to panel.
|
||||
* @private
|
||||
*/
|
||||
createPanelItems : function(store)
|
||||
{
|
||||
return [{
|
||||
xtype : 'displayfield',
|
||||
value : _('Setup calendars you want to subscribe to.'),
|
||||
fieldClass : 'x-form-display-field'
|
||||
}, {
|
||||
xtype : 'container',
|
||||
flex : 1,
|
||||
layout : {
|
||||
type : 'hbox',
|
||||
align : 'stretch',
|
||||
pack : 'start'
|
||||
},
|
||||
items : [{
|
||||
xtype : 'calendarimporter.calsyncgrid',
|
||||
ref : '../calsyncGrid',
|
||||
store : store,
|
||||
flex : 1
|
||||
}, {
|
||||
xtype : 'container',
|
||||
width : 160,
|
||||
defaults : {
|
||||
width : 140
|
||||
},
|
||||
layout : {
|
||||
type : 'vbox',
|
||||
align : 'center',
|
||||
pack : 'start'
|
||||
},
|
||||
items : [{
|
||||
xtype : 'button',
|
||||
text : _('Add') + '...',
|
||||
handler : this.onCalSyncAdd,
|
||||
ref : '../../addButton',
|
||||
scope : this
|
||||
}, {
|
||||
xtype : 'spacer',
|
||||
height : 20
|
||||
}, {
|
||||
xtype : 'button',
|
||||
text : _('Remove') + '...',
|
||||
disabled : true,
|
||||
ref : '../../removeButton',
|
||||
handler : this.onCalSyncRemove,
|
||||
scope : this
|
||||
}]
|
||||
}]
|
||||
}];
|
||||
},
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.constructor.call(this, config);
|
||||
},
|
||||
|
||||
/**
|
||||
* initialize events for the panel.
|
||||
* @private
|
||||
*/
|
||||
initEvents : function()
|
||||
{
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.initEvents.call(this);
|
||||
/**
|
||||
* Function will create panel items for {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel CalSyncPanel}
|
||||
* @return {Array} array of items that should be added to panel.
|
||||
* @private
|
||||
*/
|
||||
createPanelItems: function (store) {
|
||||
return [{
|
||||
xtype: 'displayfield',
|
||||
value: dgettext('plugin_calendarimporter', 'Setup calendars you want to subscribe to.'),
|
||||
fieldClass: 'x-form-display-field'
|
||||
}, {
|
||||
xtype: 'container',
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch',
|
||||
pack: 'start'
|
||||
},
|
||||
items: [{
|
||||
xtype: 'calendarimporter.calsyncgrid',
|
||||
ref: '../calsyncGrid',
|
||||
store: store,
|
||||
flex: 1
|
||||
}, {
|
||||
xtype: 'container',
|
||||
width: 160,
|
||||
defaults: {
|
||||
width: 140
|
||||
},
|
||||
layout: {
|
||||
type: 'vbox',
|
||||
align: 'center',
|
||||
pack: 'start'
|
||||
},
|
||||
items: [{
|
||||
xtype: 'button',
|
||||
text: _('Add') + '...',
|
||||
handler: this.onCalSyncAdd,
|
||||
ref: '../../addButton',
|
||||
scope: this
|
||||
}, {
|
||||
xtype: 'spacer',
|
||||
height: 20
|
||||
}, {
|
||||
xtype: 'button',
|
||||
text: _('Remove') + '...',
|
||||
disabled: true,
|
||||
ref: '../../removeButton',
|
||||
handler: this.onCalSyncRemove,
|
||||
scope: this
|
||||
}]
|
||||
}]
|
||||
}];
|
||||
},
|
||||
|
||||
// register event to enable/disable buttons
|
||||
this.mon(this.calsyncGrid.getSelectionModel(), 'selectionchange', this.onGridSelectionChange, this);
|
||||
},
|
||||
/**
|
||||
* initialize events for the panel.
|
||||
* @private
|
||||
*/
|
||||
initEvents: function () {
|
||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.initEvents.call(this);
|
||||
|
||||
/**
|
||||
* Handler function will be called when user clicks on 'Add' button.
|
||||
* @private
|
||||
*/
|
||||
onCalSyncAdd : function()
|
||||
{
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
||||
store : this.store,
|
||||
item : undefined,
|
||||
manager : Ext.WindowMgr
|
||||
});
|
||||
},
|
||||
// register event to enable/disable buttons
|
||||
this.mon(this.calsyncGrid.getSelectionModel(), 'selectionchange', this.onGridSelectionChange, this);
|
||||
},
|
||||
|
||||
/**
|
||||
* Event handler will be called when selection in {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid CalSyncGrid}
|
||||
* has been changed
|
||||
* @param {Ext.grid.RowSelectionModel} selectionModel selection model that fired the event
|
||||
*/
|
||||
onGridSelectionChange : function(selectionModel)
|
||||
{
|
||||
var noSelection = (selectionModel.hasSelection() === false);
|
||||
/**
|
||||
* Handler function will be called when user clicks on 'Add' button.
|
||||
* @private
|
||||
*/
|
||||
onCalSyncAdd: function () {
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
||||
store: this.store,
|
||||
item: undefined,
|
||||
manager: Ext.WindowMgr
|
||||
});
|
||||
},
|
||||
|
||||
this.removeButton.setDisabled(noSelection);
|
||||
},
|
||||
/**
|
||||
* Event handler will be called when selection in {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid CalSyncGrid}
|
||||
* has been changed
|
||||
* @param {Ext.grid.RowSelectionModel} selectionModel selection model that fired the event
|
||||
*/
|
||||
onGridSelectionChange: function (selectionModel) {
|
||||
var noSelection = (selectionModel.hasSelection() === false);
|
||||
|
||||
/**
|
||||
* Handler function will be called when user clicks on 'Remove' button.
|
||||
* @private
|
||||
*/
|
||||
onCalSyncRemove : function()
|
||||
{
|
||||
this.calsyncGrid.removeIcsSyncAs();
|
||||
},
|
||||
this.removeButton.setDisabled(noSelection);
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will be used to reload data in the store.
|
||||
*/
|
||||
discardChanges : function()
|
||||
{
|
||||
this.store.load();
|
||||
},
|
||||
/**
|
||||
* Handler function will be called when user clicks on 'Remove' button.
|
||||
* @private
|
||||
*/
|
||||
onCalSyncRemove: function () {
|
||||
this.calsyncGrid.removeIcsSyncAs();
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will be used to save changes in the store.
|
||||
*/
|
||||
saveChanges : function()
|
||||
{
|
||||
this.store.save();
|
||||
}
|
||||
/**
|
||||
* Function will be used to reload data in the store.
|
||||
*/
|
||||
discardChanges: function () {
|
||||
this.store.load();
|
||||
},
|
||||
|
||||
/**
|
||||
* Function will be used to save changes in the store.
|
||||
*/
|
||||
saveChanges: function () {
|
||||
this.store.save();
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.calsyncpanel', Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* ContectMenu.js zarafa calender to ics im/exporter
|
||||
* ContectMenu.js, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -29,101 +29,105 @@ Ext.namespace('Zarafa.plugins.calendarimporter.ui');
|
||||
*/
|
||||
Zarafa.plugins.calendarimporter.ui.ContextMenu = Ext.extend(Zarafa.hierarchy.ui.ContextMenu, {
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
/**
|
||||
* @constructor
|
||||
* @param {Object} config Configuration object
|
||||
*/
|
||||
constructor: function (config) {
|
||||
config = config || {};
|
||||
|
||||
if (config.contextNode) {
|
||||
config.contextTree = config.contextNode.getOwnerTree();
|
||||
}
|
||||
if (config.contextNode) {
|
||||
config.contextTree = config.contextNode.getOwnerTree();
|
||||
}
|
||||
|
||||
Zarafa.plugins.calendarimporter.ui.ContextMenu.superclass.constructor.call(this, config);
|
||||
Zarafa.plugins.calendarimporter.ui.ContextMenu.superclass.constructor.call(this, config);
|
||||
|
||||
// add item to menu
|
||||
var additionalItems = this.createAdditionalContextMenuItems(config);
|
||||
for (var i = 0; i < additionalItems.length; i++) {
|
||||
config.items[0].push(additionalItems[i]);
|
||||
}
|
||||
// add item to menu
|
||||
var additionalItems = this.createAdditionalContextMenuItems(config);
|
||||
for (var i = 0; i < additionalItems.length; i++) {
|
||||
config.items[0].push(additionalItems[i]);
|
||||
}
|
||||
|
||||
Zarafa.plugins.calendarimporter.ui.ContextMenu.superclass.constructor.call(this, config); // redo ... otherwise menu does not get published
|
||||
},
|
||||
Zarafa.plugins.calendarimporter.ui.ContextMenu.superclass.constructor.call(this, config); // redo ... otherwise menu does not get published
|
||||
},
|
||||
|
||||
/**
|
||||
* Create the Action context menu items.
|
||||
* @param {Object} config Configuration object for the {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @return {Zarafa.core.ui.menu.ConditionalItem[]} The list of Action context menu items
|
||||
* @private
|
||||
*
|
||||
* Note: All handlers are called within the scope of {@link Zarafa.plugins.calendarimporter.ui.ContextMenu HierarchyContextMenu}
|
||||
*/
|
||||
createAdditionalContextMenuItems: function (config) {
|
||||
return [{
|
||||
xtype: 'menuseparator'
|
||||
}, {
|
||||
text : _('Import Calendar'),
|
||||
iconCls : 'icon_calendarimporter_import',
|
||||
handler : this.onContextItemImport,
|
||||
beforeShow: function (item, record) {
|
||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_MODIFY;
|
||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||
item.setDisabled(true);
|
||||
} else {
|
||||
item.setDisabled(false);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
text : _('Export Calendar'),
|
||||
iconCls : 'icon_calendarimporter_export',
|
||||
handler : this.onContextItemExport,
|
||||
beforeShow: function (item, record) {
|
||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_READ;
|
||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||
item.setDisabled(true);
|
||||
} else {
|
||||
item.setDisabled(false);
|
||||
}
|
||||
}
|
||||
}];
|
||||
},
|
||||
/**
|
||||
* Create the Action context menu items.
|
||||
* @param {Object} config Configuration object for the {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @return {Zarafa.core.ui.menu.ConditionalItem[]} The list of Action context menu items
|
||||
* @private
|
||||
*
|
||||
* Note: All handlers are called within the scope of {@link Zarafa.plugins.calendarimporter.ui.ContextMenu HierarchyContextMenu}
|
||||
*/
|
||||
createAdditionalContextMenuItems: function (config) {
|
||||
return [{
|
||||
xtype: 'menuseparator'
|
||||
}, {
|
||||
text: dgettext('plugin_calendarimporter', 'Import Calendar'),
|
||||
iconCls: 'icon_calendarimporter_import',
|
||||
handler: this.onContextItemImport,
|
||||
beforeShow: function (item, record) {
|
||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_MODIFY;
|
||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||
item.setDisabled(true);
|
||||
} else {
|
||||
item.setDisabled(false);
|
||||
}
|
||||
}
|
||||
}, {
|
||||
text: dgettext('plugin_calendarimporter', 'Export Calendar'),
|
||||
iconCls: 'icon_calendarimporter_export',
|
||||
handler: this.onContextItemExport,
|
||||
beforeShow: function (item, record) {
|
||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_READ;
|
||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||
item.setDisabled(true);
|
||||
} else {
|
||||
item.setDisabled(false);
|
||||
}
|
||||
}
|
||||
}];
|
||||
},
|
||||
|
||||
/**
|
||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @private
|
||||
*/
|
||||
onContextItemExport: function () {
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||
scope : this
|
||||
});
|
||||
/**
|
||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @private
|
||||
*/
|
||||
onContextItemExport: function () {
|
||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||
scope: this
|
||||
});
|
||||
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'export',
|
||||
{
|
||||
storeid: this.records.get("store_entryid"),
|
||||
folder : this.records.get("entryid")
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
// Notify user
|
||||
// # TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||
container.getNotifier().notify('info', dgettext('plugin_contactimporter', 'Calendar Export'), String.format(dgettext('plugin_calendarimporter', 'Exporting {0} events. Please wait...'), this.records.get('content_count')));
|
||||
|
||||
/**
|
||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @private
|
||||
*/
|
||||
onContextItemImport: function () {
|
||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
||||
var config = {
|
||||
modal : true,
|
||||
folder: this.records.get("entryid")
|
||||
};
|
||||
// request attachment preperation
|
||||
container.getRequest().singleRequest(
|
||||
'calendarmodule',
|
||||
'export',
|
||||
{
|
||||
storeid: this.records.get("store_entryid"),
|
||||
folder: this.records.get("entryid")
|
||||
},
|
||||
responseHandler
|
||||
);
|
||||
},
|
||||
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
|
||||
}
|
||||
/**
|
||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||
* @private
|
||||
*/
|
||||
onContextItemImport: function () {
|
||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
||||
var config = {
|
||||
modal: true,
|
||||
folder: this.records.get("entryid")
|
||||
};
|
||||
|
||||
Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
|
||||
}
|
||||
});
|
||||
|
||||
Ext.reg('calendarimporter.hierarchycontextmenu', Zarafa.plugins.calendarimporter.ui.ContextMenu);
|
BIN
languages/de_DE.UTF-8/LC_MESSAGES/plugin_calendarimporter.mo
Normal file
BIN
languages/de_DE.UTF-8/LC_MESSAGES/plugin_calendarimporter.mo
Normal file
Binary file not shown.
350
languages/de_DE.UTF-8/LC_MESSAGES/plugin_calendarimporter.po
Normal file
350
languages/de_DE.UTF-8/LC_MESSAGES/plugin_calendarimporter.po
Normal file
@ -0,0 +1,350 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Plugin Calendarimporter\n"
|
||||
"POT-Creation-Date: 2016-11-29 19:49+0100\n"
|
||||
"PO-Revision-Date: 2016-11-29 19:49+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Christoph Haas <christoph.h@sprinternet.at>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
"X-Poedit-Basepath: ../../..\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-SearchPath-0: php\n"
|
||||
"X-Poedit-SearchPath-1: js\n"
|
||||
|
||||
#: js/data/Actions.js:44
|
||||
msgid "Warning"
|
||||
msgstr "Warnung"
|
||||
|
||||
#: js/dialogs/ImportContentPanel.js:47
|
||||
msgid "Import Calendar File"
|
||||
msgstr "Kalender Datei importieren"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:124
|
||||
msgid "Loading..."
|
||||
msgstr "Lade..."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:209
|
||||
msgid "Select events to import"
|
||||
msgstr "Termine zum importieren auswählen"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:222
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:228
|
||||
msgid "Start"
|
||||
msgstr "Beginn"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:235
|
||||
msgid "End"
|
||||
msgstr "Ende"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:242
|
||||
msgid "Location"
|
||||
msgstr "Ort"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:247
|
||||
msgid "Description"
|
||||
msgstr "Beschreibung"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:248
|
||||
msgid "Priority"
|
||||
msgstr "Priorität"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:249
|
||||
msgid "Label"
|
||||
msgstr "Label"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:250
|
||||
msgid "Busystatus"
|
||||
msgstr "Beschäftigt"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:251
|
||||
msgid "Privacystatus"
|
||||
msgstr "Privat"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:252
|
||||
msgid "Organizer"
|
||||
msgstr "Ersteller"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:254
|
||||
msgid "Alarm"
|
||||
msgstr "Erinnerung"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:259 js/dialogs/ImportPanel.js:296
|
||||
msgid "Timezone"
|
||||
msgstr "Zeitzone"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:276
|
||||
msgid "Select folder"
|
||||
msgstr "Ordner auswählen"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:317
|
||||
msgid "Ignore DST"
|
||||
msgstr "DST ignorieren"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:318
|
||||
msgid "This will ignore \"Daylight saving time\" offsets."
|
||||
msgstr ""
|
||||
"Durch diese Einstellung wird die Sommer bzw. Winterzeit Abweichung ignoriert."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:338
|
||||
msgid "Select an .ics calendar"
|
||||
msgstr ".ics Kalender Datei wählen"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:358
|
||||
msgid "Import"
|
||||
msgstr "Importieren"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:372
|
||||
msgid "Import All"
|
||||
msgstr "Alle Importieren"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:384 js/settings/SettingsWidget.js:165
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:61
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:428
|
||||
msgid "Uploading and parsing calendar..."
|
||||
msgstr "Kalender wird hochgeladen und verarbeitet..."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:434 js/dialogs/ImportPanel.js:524
|
||||
#: js/dialogs/ImportPanel.js:532 js/dialogs/ImportPanel.js:581
|
||||
#: js/plugin.calendarimporter.js:175
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:489
|
||||
msgid "Parser Error"
|
||||
msgstr "Verarbeitungsfehler"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:525
|
||||
msgid "You have to choose a calendar!"
|
||||
msgstr "Es muss ein Kalender ausgewählt werden!"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:533
|
||||
msgid "You have to choose at least one event to import!"
|
||||
msgstr "Es muss mindestens ein Termin zum Importieren ausgewählt werden."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:582
|
||||
msgid "Import failed: {0}"
|
||||
msgstr "Importieren fehlgeschalgen: {0}"
|
||||
|
||||
#: js/plugin.calendarimporter.js:76
|
||||
msgid "Export Event"
|
||||
msgstr "Termin exportieren"
|
||||
|
||||
#. TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||
#. TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||
#: js/plugin.calendarimporter.js:105 js/ui/ContextMenu.js:104
|
||||
msgid "Calendar Export"
|
||||
msgstr "Kalenderexport"
|
||||
|
||||
#: js/plugin.calendarimporter.js:105 js/ui/ContextMenu.js:104
|
||||
msgid "Exporting {0} events. Please wait..."
|
||||
msgstr "Exportiere {0} Termine. Bitte warten..."
|
||||
|
||||
#: js/plugin.calendarimporter.js:151
|
||||
msgid "Import to Calendar"
|
||||
msgstr "Kalender importieren"
|
||||
|
||||
#: js/plugin.calendarimporter.js:188
|
||||
msgid "Please wait"
|
||||
msgstr "Bitte warten"
|
||||
|
||||
#: js/plugin.calendarimporter.js:189
|
||||
msgid "Loading attachment..."
|
||||
msgstr "Lade Anhang..."
|
||||
|
||||
#: js/plugin.calendarimporter.js:190
|
||||
msgid "Initializing..."
|
||||
msgstr "Initialisierung..."
|
||||
|
||||
#. TRANSLATORS: {0} will be replaced by the percentage value (0-100)
|
||||
#: js/plugin.calendarimporter.js:203
|
||||
msgid "{0}% loaded"
|
||||
msgstr "{0}% geladen"
|
||||
|
||||
#: js/plugin.calendarimporter.js:321
|
||||
msgid "Calendarimporter Plugin"
|
||||
msgstr "Kalender Plugin"
|
||||
|
||||
#: js/settings/SettingsCalSyncWidget.js:64
|
||||
msgid "Calendar Sync settings"
|
||||
msgstr "Kalender Synchronisierung - Einstellungen"
|
||||
|
||||
#: js/settings/SettingsWidget.js:45
|
||||
msgid "Calendar Import/Export plugin settings"
|
||||
msgstr "Kalender Import/Export Einstellungen"
|
||||
|
||||
#: js/settings/SettingsWidget.js:52
|
||||
msgid "Enable ical sync"
|
||||
msgstr "iCAL Synchronisierung aktivieren"
|
||||
|
||||
#: js/settings/SettingsWidget.js:73
|
||||
msgid "Default calender"
|
||||
msgstr "Standard Kalender"
|
||||
|
||||
#: js/settings/SettingsWidget.js:92
|
||||
msgid "Default timezone"
|
||||
msgstr "Standard Zeitzone"
|
||||
|
||||
#: js/settings/SettingsWidget.js:151
|
||||
msgid "Your WebApp needs to be reloaded to make the changes visible!"
|
||||
msgstr "Your WebApp needs to be reloaded to make the changes visible!"
|
||||
|
||||
#: js/settings/SettingsWidget.js:153
|
||||
msgid ""
|
||||
"WebApp will automatically restart in order for these changes to take effect"
|
||||
msgstr ""
|
||||
"WebApp will automatically restart in order for these changes to take effect"
|
||||
|
||||
#: js/settings/SettingsWidget.js:157
|
||||
msgid "Restart WebApp"
|
||||
msgstr "Restart WebApp"
|
||||
|
||||
#: js/settings/SettingsWidget.js:162
|
||||
msgid "Restart"
|
||||
msgstr "Restart"
|
||||
|
||||
#: js/settings/SettingsWidget.js:187
|
||||
msgid "Webapp is reloading, Please wait."
|
||||
msgstr "Webapp is reloading, Please wait."
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditContentPanel.js:49
|
||||
msgid "ICAL Sync"
|
||||
msgstr "iCAL Synchronisierung"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:56
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:139
|
||||
msgid "ICAL Information"
|
||||
msgstr "iCAL Informationen"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:148
|
||||
msgid "ICS Url"
|
||||
msgstr "ICS Url"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:156
|
||||
msgid "Destination Calendar"
|
||||
msgstr "Ziel-Kalender"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:171
|
||||
msgid "Sync Intervall (minutes)"
|
||||
msgstr "Synchronisationsintervall (Minuten)"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:180
|
||||
msgid "Authentication (optional)"
|
||||
msgstr "Anmelden (optional)"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:187
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:194
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:45
|
||||
msgid "No ICAL sync entry exists"
|
||||
msgstr "Es existiert kein Synchronisierungs Eintrag"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:97
|
||||
msgid "ICS File"
|
||||
msgstr "ICS Datei"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:102
|
||||
msgid "Destination Calender"
|
||||
msgstr "Ziel-Kalender"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:107
|
||||
msgid "Authentication"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:112
|
||||
msgid "Sync Intervall"
|
||||
msgstr "Synchronisierungs Intervall"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:116
|
||||
msgid "Last Synchronisation"
|
||||
msgstr "Letzte Synchronisation"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:140
|
||||
msgid "Loading ics sync entries..."
|
||||
msgstr "Lade Synchronisierungseinträge..."
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:159
|
||||
msgid "Alert"
|
||||
msgstr "Achtung"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:159
|
||||
msgid "Please select a ics sync entry."
|
||||
msgstr "Bitte einen Eintrag auswählen."
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:68
|
||||
msgid "Setup calendars you want to subscribe to."
|
||||
msgstr "Kalender zur Synchronisation verwalten."
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:96
|
||||
msgid "Add"
|
||||
msgstr "Add"
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:105
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
|
||||
#: js/ui/ContextMenu.js:66
|
||||
msgid "Import Calendar"
|
||||
msgstr "Kalender importieren"
|
||||
|
||||
#: js/ui/ContextMenu.js:78
|
||||
msgid "Export Calendar"
|
||||
msgstr "Kalender exportieren"
|
||||
|
||||
#. TRANSLATORS: Filename suffix for exported files
|
||||
#: php/module.calendar.php:341
|
||||
msgid "_events.ics"
|
||||
msgstr "_Termine.ics"
|
||||
|
||||
#: php/module.calendar.php:344
|
||||
msgid "No events found. Export skipped!"
|
||||
msgstr "Keine Termine gefunden. Export abgebrochen!"
|
||||
|
||||
#: php/module.calendar.php:456
|
||||
msgid "ICS file empty!"
|
||||
msgstr "ICS enthält keine Termine!"
|
||||
|
||||
#: php/module.calendar.php:594
|
||||
msgid "Store could not be opened!"
|
||||
msgstr "Datenbank kann nicht geöffnet werden!"
|
||||
|
||||
#: php/module.calendar.php:600
|
||||
msgid "Wrong call, store and entryid have to be set!"
|
||||
msgstr "Inkorrekter Aufruf!"
|
||||
|
||||
#: php/module.calendar.php:634
|
||||
msgid "No event in ics file"
|
||||
msgstr "ICS enthält keine Termine!"
|
||||
|
||||
#: php/module.calendar.php:647
|
||||
msgid "File could not be read by server"
|
||||
msgstr "Datei konnte vom Server nicht gelesen werden"
|
||||
|
||||
#: php/upload.php:69
|
||||
msgid ""
|
||||
"File could not be moved to TMP path! Check plugin config and folder "
|
||||
"permissions!"
|
||||
msgstr "Temporärer Pfad ist nicht beschreibbar!"
|
||||
|
||||
#: php/upload.php:72
|
||||
msgid "File could not be read by server, upload error!"
|
||||
msgstr ""
|
||||
"Datei konnte vom Server nicht gelesen werden. Hochladen fehlgeschlagen!"
|
2
languages/de_DE.UTF-8/language.txt
Normal file
2
languages/de_DE.UTF-8/language.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Deutsch
|
||||
deu_DEU
|
BIN
languages/en_US.UTF-8/LC_MESSAGES/plugin_calendarimporter.mo
Normal file
BIN
languages/en_US.UTF-8/LC_MESSAGES/plugin_calendarimporter.mo
Normal file
Binary file not shown.
349
languages/en_US.UTF-8/LC_MESSAGES/plugin_calendarimporter.po
Normal file
349
languages/en_US.UTF-8/LC_MESSAGES/plugin_calendarimporter.po
Normal file
@ -0,0 +1,349 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Plugin Calendarimporter\n"
|
||||
"POT-Creation-Date: 2016-11-29 19:21+0100\n"
|
||||
"PO-Revision-Date: 2016-11-29 19:39+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Christoph Haas <christoph.h@sprinternet.at>\n"
|
||||
"Language: en_US\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
"X-Poedit-Basepath: ../../..\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-SearchPath-0: php\n"
|
||||
"X-Poedit-SearchPath-1: js\n"
|
||||
|
||||
#: js/data/Actions.js:44
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
||||
#: js/dialogs/ImportContentPanel.js:47
|
||||
msgid "Import Calendar File"
|
||||
msgstr "Import Calendar File"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:124
|
||||
msgid "Loading..."
|
||||
msgstr "Loading..."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:209
|
||||
msgid "Select events to import"
|
||||
msgstr "Select events to import"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:222
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:228
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:235
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:242
|
||||
msgid "Location"
|
||||
msgstr "Location"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:247
|
||||
msgid "Description"
|
||||
msgstr "Description"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:248
|
||||
msgid "Priority"
|
||||
msgstr "Priority"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:249
|
||||
msgid "Label"
|
||||
msgstr "Label"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:250
|
||||
msgid "Busystatus"
|
||||
msgstr "Busystatus"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:251
|
||||
msgid "Privacystatus"
|
||||
msgstr "Privacystatus"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:252
|
||||
msgid "Organizer"
|
||||
msgstr "Organizer"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:254
|
||||
msgid "Alarm"
|
||||
msgstr "Alarm"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:259 js/dialogs/ImportPanel.js:296
|
||||
msgid "Timezone"
|
||||
msgstr "Timezone"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:276
|
||||
msgid "Select folder"
|
||||
msgstr "Select folder"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:317
|
||||
msgid "Ignore DST"
|
||||
msgstr "Ignore DST"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:318
|
||||
msgid "This will ignore \"Daylight saving time\" offsets."
|
||||
msgstr "This will ignore \"Daylight saving time\" offsets."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:338
|
||||
msgid "Select an .ics calendar"
|
||||
msgstr "Select an .ics calendar"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:358
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:372
|
||||
msgid "Import All"
|
||||
msgstr "Import All"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:384 js/settings/SettingsWidget.js:165
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:61
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:428
|
||||
msgid "Uploading and parsing calendar..."
|
||||
msgstr "Uploading and parsing calendar..."
|
||||
|
||||
#: js/dialogs/ImportPanel.js:434 js/dialogs/ImportPanel.js:524
|
||||
#: js/dialogs/ImportPanel.js:532 js/dialogs/ImportPanel.js:581
|
||||
#: js/plugin.calendarimporter.js:170
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:489
|
||||
msgid "Parser Error"
|
||||
msgstr "Parser Error"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:525
|
||||
msgid "You have to choose a calendar!"
|
||||
msgstr "You have to choose a calendar!"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:533
|
||||
msgid "You have to choose at least one event to import!"
|
||||
msgstr "You have to choose at least one event to import!"
|
||||
|
||||
#: js/dialogs/ImportPanel.js:582
|
||||
msgid "Import failed: {0}"
|
||||
msgstr "Import failed: {0}"
|
||||
|
||||
#: js/plugin.calendarimporter.js:76
|
||||
msgid "Export Event"
|
||||
msgstr "Export Event"
|
||||
|
||||
#: js/plugin.calendarimporter.js:146
|
||||
msgid "Import to Calendar"
|
||||
msgstr "Import to Calendar"
|
||||
|
||||
#: js/plugin.calendarimporter.js:183
|
||||
msgid "Please wait"
|
||||
msgstr "Please wait"
|
||||
|
||||
#: js/plugin.calendarimporter.js:184
|
||||
msgid "Loading attachment..."
|
||||
msgstr "Loading attachment..."
|
||||
|
||||
#: js/plugin.calendarimporter.js:185
|
||||
msgid "Initializing..."
|
||||
msgstr "Initializing..."
|
||||
|
||||
#. TRANSLATORS: {0} will be replaced by the percentage value (0-100)
|
||||
#: js/plugin.calendarimporter.js:198
|
||||
msgid "{0}% loaded"
|
||||
msgstr "{0}% loaded"
|
||||
|
||||
#: js/plugin.calendarimporter.js:316
|
||||
msgid "Calendarimporter Plugin"
|
||||
msgstr "Calendarimporter Plugin"
|
||||
|
||||
#: js/settings/SettingsCalSyncWidget.js:64
|
||||
msgid "Calendar Sync settings"
|
||||
msgstr "Calendar Sync settings"
|
||||
|
||||
#: js/settings/SettingsWidget.js:45
|
||||
msgid "Calendar Import/Export plugin settings"
|
||||
msgstr "Calendar Import/Export plugin settings"
|
||||
|
||||
#: js/settings/SettingsWidget.js:52
|
||||
msgid "Enable ical sync"
|
||||
msgstr "Enable ical sync"
|
||||
|
||||
#: js/settings/SettingsWidget.js:73
|
||||
msgid "Default calender"
|
||||
msgstr "Default calender"
|
||||
|
||||
#: js/settings/SettingsWidget.js:92
|
||||
msgid "Default timezone"
|
||||
msgstr "Default timezone"
|
||||
|
||||
#: js/settings/SettingsWidget.js:151
|
||||
msgid "Your WebApp needs to be reloaded to make the changes visible!"
|
||||
msgstr "Your WebApp needs to be reloaded to make the changes visible!"
|
||||
|
||||
#: js/settings/SettingsWidget.js:153
|
||||
msgid ""
|
||||
"WebApp will automatically restart in order for these changes to take effect"
|
||||
msgstr ""
|
||||
"WebApp will automatically restart in order for these changes to take effect"
|
||||
|
||||
#: js/settings/SettingsWidget.js:157
|
||||
msgid "Restart WebApp"
|
||||
msgstr "Restart WebApp"
|
||||
|
||||
#: js/settings/SettingsWidget.js:162
|
||||
msgid "Restart"
|
||||
msgstr "Restart"
|
||||
|
||||
#: js/settings/SettingsWidget.js:187
|
||||
msgid "Webapp is reloading, Please wait."
|
||||
msgstr "Webapp is reloading, Please wait."
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditContentPanel.js:49
|
||||
msgid "ICAL Sync"
|
||||
msgstr "ICAL Sync"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:56
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:139
|
||||
msgid "ICAL Information"
|
||||
msgstr "ICAL Information"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:148
|
||||
msgid "ICS Url"
|
||||
msgstr "ICS Url"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:156
|
||||
msgid "Destination Calendar"
|
||||
msgstr "Destination Calendar"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:171
|
||||
msgid "Sync Intervall (minutes)"
|
||||
msgstr "Sync Intervall (minutes)"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:180
|
||||
msgid "Authentication (optional)"
|
||||
msgstr "Authentication (optional)"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:187
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: js/settings/dialogs/CalSyncEditPanel.js:194
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:45
|
||||
msgid "No ICAL sync entry exists"
|
||||
msgstr "No ICAL sync entry exists"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:97
|
||||
msgid "ICS File"
|
||||
msgstr "ICS File"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:102
|
||||
msgid "Destination Calender"
|
||||
msgstr "Destination Calender"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:107
|
||||
msgid "Authentication"
|
||||
msgstr "Authentication"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:112
|
||||
msgid "Sync Intervall"
|
||||
msgstr "Sync Intervall"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:116
|
||||
msgid "Last Synchronisation"
|
||||
msgstr "Last Synchronisation"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:140
|
||||
msgid "Loading ics sync entries..."
|
||||
msgstr "Loading ics sync entries..."
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:159
|
||||
msgid "Alert"
|
||||
msgstr "Alert"
|
||||
|
||||
#: js/settings/ui/CalSyncGrid.js:159
|
||||
msgid "Please select a ics sync entry."
|
||||
msgstr "Please select a ics sync entry."
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:68
|
||||
msgid "Setup calendars you want to subscribe to."
|
||||
msgstr "Setup calendars you want to subscribe to."
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:96
|
||||
msgid "Add"
|
||||
msgstr "Add"
|
||||
|
||||
#: js/settings/ui/CalSyncPanel.js:105
|
||||
msgid "Remove"
|
||||
msgstr "Remove"
|
||||
|
||||
#: js/ui/ContextMenu.js:66
|
||||
msgid "Import Calendar"
|
||||
msgstr "Import Calendar"
|
||||
|
||||
#: js/ui/ContextMenu.js:78
|
||||
msgid "Export Calendar"
|
||||
msgstr "Export Calendar"
|
||||
|
||||
#. TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||
#: js/ui/ContextMenu.js:104
|
||||
msgid "Calendar Export"
|
||||
msgstr "Calendar Export"
|
||||
|
||||
#: js/ui/ContextMenu.js:104
|
||||
msgid "Exporting {0} events. Please wait..."
|
||||
msgstr "Exporting {0} events. Please wait..."
|
||||
|
||||
#. TRANSLATORS: Filename suffix for exported files
|
||||
#: php/module.calendar.php:341
|
||||
msgid "_events.ics"
|
||||
msgstr "_events.ics"
|
||||
|
||||
#: php/module.calendar.php:344
|
||||
msgid "No events found. Export skipped!"
|
||||
msgstr "No events found. Export skipped!"
|
||||
|
||||
#: php/module.calendar.php:456
|
||||
msgid "ICS file empty!"
|
||||
msgstr "ICS file empty!"
|
||||
|
||||
#: php/module.calendar.php:594
|
||||
msgid "Store could not be opened!"
|
||||
msgstr "Store could not be opened!"
|
||||
|
||||
#: php/module.calendar.php:600
|
||||
msgid "Wrong call, store and entryid have to be set!"
|
||||
msgstr "Wrong call, store and entryid have to be set!"
|
||||
|
||||
#: php/module.calendar.php:634
|
||||
msgid "No event in ics file"
|
||||
msgstr "No event in ics file"
|
||||
|
||||
#: php/module.calendar.php:647
|
||||
msgid "File could not be read by server"
|
||||
msgstr "File could not be read by server"
|
||||
|
||||
#: php/upload.php:69
|
||||
msgid ""
|
||||
"File could not be moved to TMP path! Check plugin config and folder "
|
||||
"permissions!"
|
||||
msgstr ""
|
||||
"File could not be moved to TMP path! Check plugin config and folder "
|
||||
"permissions!"
|
||||
|
||||
#: php/upload.php:72
|
||||
msgid "File could not be read by server, upload error!"
|
||||
msgstr "File could not be read by server, upload error!"
|
2
languages/en_US.UTF-8/language.txt
Normal file
2
languages/en_US.UTF-8/language.txt
Normal file
@ -0,0 +1,2 @@
|
||||
English (US)
|
||||
eng_USA
|
93
manifest.xml
93
manifest.xml
@ -1,49 +1,52 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE plugin SYSTEM "manifest.dtd">
|
||||
<plugin version="2">
|
||||
<info>
|
||||
<version>2.2.0</version>
|
||||
<name>calendarimporter</name>
|
||||
<title>ICS Calendar Importer/Exporter</title>
|
||||
<author>Christoph Haas</author>
|
||||
<authorURL>http://www.sprinternet.at</authorURL>
|
||||
<description>Import or Export a ICS file to/from the zarafa calendar</description>
|
||||
</info>
|
||||
<config>
|
||||
<configfile>config.php</configfile>
|
||||
</config>
|
||||
<components>
|
||||
<component>
|
||||
<files>
|
||||
<server>
|
||||
<serverfile>php/plugin.calendarimporter.php</serverfile>
|
||||
<serverfile type="module" module="calendarmodule">php/module.calendar.php</serverfile>
|
||||
</server>
|
||||
<client>
|
||||
<clientfile load="release">js/calendarimporter-debug.js</clientfile>
|
||||
<clientfile load="debug">js/calendarimporter-debug.js</clientfile>
|
||||
|
||||
<clientfile load="source">js/data/timezones.js</clientfile>
|
||||
<clientfile load="source">js/data/Actions.js</clientfile>
|
||||
<clientfile load="source">js/data/ResponseHandler.js</clientfile>
|
||||
<clientfile load="source">js/external/Ext.util.base64.js</clientfile>
|
||||
<clientfile load="source">js/ui/ContextMenu.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/ImportContentPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/ImportPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/SettingsWidget.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/SettingsCalSyncWidget.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncGrid.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditContentPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditPanel.js</clientfile>
|
||||
<clientfile load="source">js/plugin.calendarimporter.js</clientfile>
|
||||
</client>
|
||||
<resources>
|
||||
<resourcefile load="release">resources/css/calendarimporter.css</resourcefile>
|
||||
<resourcefile load="debug">resources/css/calendarimporter.css</resourcefile>
|
||||
<resourcefile load="source">resources/css/calendarimporter-main.css</resourcefile>
|
||||
</resources>
|
||||
</files>
|
||||
</component>
|
||||
</components>
|
||||
<info>
|
||||
<version>2.2.1</version>
|
||||
<name>calendarimporter</name>
|
||||
<title>ICS Calendar Importer/Exporter</title>
|
||||
<author>Christoph Haas</author>
|
||||
<authorURL>http://www.sprinternet.at</authorURL>
|
||||
<description>Import or Export a ICS file to/from the Kopano calendar</description>
|
||||
</info>
|
||||
<translations>
|
||||
<translationsdir>languages</translationsdir>
|
||||
</translations>
|
||||
<config>
|
||||
<configfile>config.php</configfile>
|
||||
</config>
|
||||
<components>
|
||||
<component>
|
||||
<files>
|
||||
<server>
|
||||
<serverfile>php/plugin.calendarimporter.php</serverfile>
|
||||
<serverfile type="module" module="calendarmodule">php/module.calendar.php</serverfile>
|
||||
</server>
|
||||
<client>
|
||||
<clientfile load="release">js/calendarimporter-debug.js</clientfile>
|
||||
<clientfile load="debug">js/calendarimporter-debug.js</clientfile>
|
||||
|
||||
<clientfile load="source">js/data/timezones.js</clientfile>
|
||||
<clientfile load="source">js/data/Actions.js</clientfile>
|
||||
<clientfile load="source">js/data/ResponseHandler.js</clientfile>
|
||||
<clientfile load="source">js/external/Ext.util.base64.js</clientfile>
|
||||
<clientfile load="source">js/ui/ContextMenu.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/ImportContentPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/ImportPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/SettingsWidget.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/SettingsCalSyncWidget.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncGrid.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditContentPanel.js</clientfile>
|
||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditPanel.js</clientfile>
|
||||
<clientfile load="source">js/plugin.calendarimporter.js</clientfile>
|
||||
</client>
|
||||
<resources>
|
||||
<resourcefile load="release">resources/css/calendarimporter.css</resourcefile>
|
||||
<resourcefile load="debug">resources/css/calendarimporter.css</resourcefile>
|
||||
<resourcefile load="source">resources/css/calendarimporter-main.css</resourcefile>
|
||||
</resources>
|
||||
</files>
|
||||
</component>
|
||||
</components>
|
||||
</plugin>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* download.php, zarafa calendar to ics im/exporter
|
||||
* download.php, Kopano calendar to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
@ -25,50 +25,49 @@ namespace calendarimporter;
|
||||
|
||||
class DownloadHandler
|
||||
{
|
||||
/**
|
||||
* Download the given vcf file.
|
||||
* @return bool
|
||||
*/
|
||||
public static function doDownload()
|
||||
{
|
||||
if (isset($_GET["token"])) {
|
||||
$token = $_GET["token"];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Download the given vcf file.
|
||||
*/
|
||||
public static function doDownload()
|
||||
{
|
||||
if (isset($_GET["token"])) {
|
||||
$token = $_GET["token"];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isset($_GET["filename"])) {
|
||||
$filename = $_GET["filename"];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if (isset($_GET["filename"])) {
|
||||
$filename = $_GET["filename"];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
// validate token
|
||||
if (!ctype_alnum($token)) { // token is a md5 hash
|
||||
return false;
|
||||
}
|
||||
// validate token
|
||||
if (!ctype_alnum($token)) { // token is a md5 hash
|
||||
return false;
|
||||
}
|
||||
|
||||
$file = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD . "ics_" . $token . ".ics";
|
||||
$file = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD . "ics_" . $token . ".ics";
|
||||
|
||||
if (!file_exists($file)) { // invalid token
|
||||
return false;
|
||||
}
|
||||
if (!file_exists($file)) { // invalid token
|
||||
return false;
|
||||
}
|
||||
|
||||
// set headers here
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||||
// set headers here
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||||
|
||||
// no caching
|
||||
header('Expires: 0'); // set expiration time
|
||||
header('Content-Description: File Transfer');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Content-Length: ' . filesize($file));
|
||||
header('Content-Type: application/octet-stream');
|
||||
header('Pragma: public');
|
||||
flush();
|
||||
// no caching
|
||||
header('Expires: 0'); // set expiration time
|
||||
header('Content-Description: File Transfer');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Content-Length: ' . filesize($file));
|
||||
header('Content-Type: application/octet-stream');
|
||||
header('Pragma: public');
|
||||
flush();
|
||||
|
||||
// print the downloaded file
|
||||
readfile($file);
|
||||
ignore_user_abort(true);
|
||||
unlink($file);
|
||||
}
|
||||
// print the downloaded file
|
||||
readfile($file);
|
||||
ignore_user_abort(true);
|
||||
unlink($file);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,9 @@
|
||||
<?php
|
||||
/**
|
||||
* plugin.calendarimporter.php, zarafa calender to ics im/exporter
|
||||
* plugin.calendarimporter.php, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2014 Christoph Haas
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -30,65 +30,65 @@ require_once __DIR__ . "/download.php";
|
||||
*/
|
||||
class Plugincalendarimporter extends Plugin
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
function __construct() {}
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Function initializes the Plugin and registers all hooks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
$this->registerHook('server.core.settings.init.before');
|
||||
$this->registerHook('server.index.load.custom');
|
||||
}
|
||||
/**
|
||||
* Function initializes the Plugin and registers all hooks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
$this->registerHook('server.core.settings.init.before');
|
||||
$this->registerHook('server.index.load.custom');
|
||||
}
|
||||
|
||||
/**
|
||||
* Function is executed when a hook is triggered by the PluginManager
|
||||
*
|
||||
* @param string $eventID the id of the triggered hook
|
||||
* @param mixed $data object(s) related to the hook
|
||||
* @return void
|
||||
*/
|
||||
function execute($eventID, &$data)
|
||||
{
|
||||
switch ($eventID) {
|
||||
case 'server.core.settings.init.before' :
|
||||
$this->injectPluginSettings($data);
|
||||
break;
|
||||
case 'server.index.load.custom':
|
||||
if ($data['name'] == 'download_ics') {
|
||||
calendarimporter\DownloadHandler::doDownload();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Function is executed when a hook is triggered by the PluginManager
|
||||
*
|
||||
* @param string $eventID the id of the triggered hook
|
||||
* @param mixed $data object(s) related to the hook
|
||||
* @return void
|
||||
*/
|
||||
function execute($eventID, &$data)
|
||||
{
|
||||
switch ($eventID) {
|
||||
case 'server.core.settings.init.before' :
|
||||
$this->injectPluginSettings($data);
|
||||
break;
|
||||
case 'server.index.load.custom':
|
||||
if ($data['name'] == 'download_ics') {
|
||||
calendarimporter\DownloadHandler::doDownload();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the core Settings class is initialized and ready to accept sysadmin default
|
||||
* settings.
|
||||
* @param Array $data Reference to the data of the triggered hook
|
||||
*/
|
||||
function injectPluginSettings(&$data)
|
||||
{
|
||||
$data['settingsObj']->addSysAdminDefaults(Array(
|
||||
'zarafa' => Array(
|
||||
'v1' => Array(
|
||||
'plugins' => Array(
|
||||
'calendarimporter' => Array(
|
||||
'enable' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE,
|
||||
'enable_sync' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC,
|
||||
'default_calendar' => PLUGIN_CALENDARIMPORTER_DEFAULT,
|
||||
'default_timezone' => PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
));
|
||||
}
|
||||
/**
|
||||
* Called when the core Settings class is initialized and ready to accept sysadmin default
|
||||
* settings.
|
||||
* @param Array $data Reference to the data of the triggered hook
|
||||
*/
|
||||
function injectPluginSettings(&$data)
|
||||
{
|
||||
$data['settingsObj']->addSysAdminDefaults(Array(
|
||||
'zarafa' => Array(
|
||||
'v1' => Array(
|
||||
'plugins' => Array(
|
||||
'calendarimporter' => Array(
|
||||
'enable' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE,
|
||||
'enable_sync' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC,
|
||||
'default_calendar' => PLUGIN_CALENDARIMPORTER_DEFAULT,
|
||||
'default_timezone' => PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php
|
||||
/**
|
||||
* upload.php, zarafa calender to ics exporter
|
||||
* upload.php, Kopano calender to ics im/exporter
|
||||
*
|
||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||
* Copyright (C) 2012-2014 Christoph Haas
|
||||
* Copyright (C) 2012-2016 Christoph Haas
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -20,18 +20,19 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
require_once("../config.php");
|
||||
|
||||
/* disable error printing - otherwise json communication might break... */
|
||||
ini_set('display_errors', '0');
|
||||
|
||||
/**
|
||||
* respond/echo JSON
|
||||
* @param $arr
|
||||
*/
|
||||
function respondJSON($arr) {
|
||||
echo json_encode($arr);
|
||||
/**
|
||||
* respond/echo JSON
|
||||
* @param $arr
|
||||
*/
|
||||
function respondJSON($arr)
|
||||
{
|
||||
echo json_encode($arr);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -39,34 +40,34 @@ function respondJSON($arr) {
|
||||
* @param $length the lenght of the generated string
|
||||
* @return string a random string
|
||||
*/
|
||||
function randomstring($length = 6) {
|
||||
// $chars - all allowed charakters
|
||||
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
||||
function randomstring($length = 6)
|
||||
{
|
||||
// $chars - all allowed charakters
|
||||
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
||||
|
||||
srand((double)microtime()*1000000);
|
||||
$i = 0;
|
||||
$pass = "";
|
||||
while ($i < $length) {
|
||||
$num = rand() % strlen($chars);
|
||||
$tmp = substr($chars, $num, 1);
|
||||
$pass = $pass . $tmp;
|
||||
$i++;
|
||||
}
|
||||
return $pass;
|
||||
srand((double)microtime() * 1000000);
|
||||
$i = 0;
|
||||
$pass = "";
|
||||
while ($i < $length) {
|
||||
$num = rand() % strlen($chars);
|
||||
$tmp = substr($chars, $num, 1);
|
||||
$pass = $pass . $tmp;
|
||||
$i++;
|
||||
}
|
||||
return $pass;
|
||||
}
|
||||
|
||||
$destpath = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD;
|
||||
$destpath .= $_FILES['icsdata']['name'] . randomstring();
|
||||
|
||||
if(is_readable ($_FILES['icsdata']['tmp_name'])) {
|
||||
$result = move_uploaded_file($_FILES['icsdata']['tmp_name'],$destpath);
|
||||
|
||||
if($result) {
|
||||
respondJSON(array ('success'=>true, 'ics_file'=>$destpath));
|
||||
} else {
|
||||
respondJSON(array ('success'=>false,'error'=>"File could not be moved to TMP path! Check plugin config and folder permissions!"));
|
||||
}
|
||||
if (is_readable($_FILES['icsdata']['tmp_name'])) {
|
||||
$result = move_uploaded_file($_FILES['icsdata']['tmp_name'], $destpath);
|
||||
|
||||
if ($result) {
|
||||
respondJSON(array('success' => true, 'ics_file' => $destpath));
|
||||
} else {
|
||||
respondJSON(array('success' => false, 'error' => dgettext("plugin_calendarimporter", "File could not be moved to TMP path! Check plugin config and folder permissions!")));
|
||||
}
|
||||
} else {
|
||||
respondJSON(array ('success'=>false,'error'=>"File could not be read by server, upload error!"));
|
||||
}
|
||||
?>
|
||||
respondJSON(array('success' => false, 'error' => dgettext("plugin_calendarimporter", "File could not be read by server, upload error!")));
|
||||
}
|
Loading…
Reference in New Issue
Block a user