Added Translation
This commit is contained in:
parent
e70894c048
commit
010bd521bc
@ -1,7 +1,33 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<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="calendarimporter.iws" />
|
||||||
<ignored path=".idea/workspace.xml" />
|
<ignored path=".idea/workspace.xml" />
|
||||||
<ignored path=".idea/dataSources.local.xml" />
|
<ignored path=".idea/dataSources.local.xml" />
|
||||||
@ -20,104 +46,70 @@
|
|||||||
<favorites_list name="calendarimporter" />
|
<favorites_list name="calendarimporter" />
|
||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf>
|
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||||
<file leaf-file-name="CalSyncEditPanel.js" pinned="false" current-in-tab="false">
|
<file leaf-file-name="ContextMenu.js" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditPanel.js">
|
<entry file="file://$PROJECT_DIR$/js/ui/ContextMenu.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">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="504">
|
<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 />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="SettingsCalSyncWidget.js" pinned="false" current-in-tab="false">
|
<file leaf-file-name="plugin.calendarimporter.js" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
<entry file="file://$PROJECT_DIR$/js/plugin.calendarimporter.js">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="729">
|
<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 />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="sync.php" pinned="false" current-in-tab="false">
|
<file leaf-file-name="module.calendar.php" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
<entry file="file://$PROJECT_DIR$/php/module.calendar.php">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="360">
|
<state relative-caret-position="301">
|
||||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
<caret line="329" column="17" selection-start-line="329" selection-start-column="17" selection-end-line="329" selection-end-column="17" />
|
||||||
<folding>
|
<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>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="changelog.txt" pinned="false" current-in-tab="true">
|
<file leaf-file-name="Makefile" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/changelog.txt">
|
<entry file="file://$PROJECT_DIR$/Makefile">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="75">
|
<state relative-caret-position="15">
|
||||||
<caret line="5" column="19" selection-start-line="5" selection-start-column="19" selection-end-line="5" selection-end-column="19" />
|
<caret line="1" column="92" selection-start-line="1" selection-start-column="92" selection-end-line="1" selection-end-column="92" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</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">
|
<entry file="file://$PROJECT_DIR$/manifest.xml">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="135">
|
||||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
<caret line="9" column="62" selection-start-line="9" selection-start-column="62" selection-end-line="9" selection-end-column="62" />
|
||||||
<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" />
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@ -138,21 +130,33 @@
|
|||||||
<component name="IdeDocumentHistory">
|
<component name="IdeDocumentHistory">
|
||||||
<option name="CHANGED_PATHS">
|
<option name="CHANGED_PATHS">
|
||||||
<list>
|
<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/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/sync.php" />
|
||||||
<option value="$PROJECT_DIR$/backend/functions.php" />
|
<option value="$PROJECT_DIR$/backend/functions.php" />
|
||||||
<option value="$PROJECT_DIR$/changelog.txt" />
|
<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>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
@ -162,6 +166,9 @@
|
|||||||
<detection-done>true</detection-done>
|
<detection-done>true</detection-done>
|
||||||
<sorting>DEFINITION_ORDER</sorting>
|
<sorting>DEFINITION_ORDER</sorting>
|
||||||
</component>
|
</component>
|
||||||
|
<component name="PhpServers">
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
|
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
|
||||||
<component name="ProjectFrameBounds">
|
<component name="ProjectFrameBounds">
|
||||||
<option name="x" value="65" />
|
<option name="x" value="65" />
|
||||||
@ -213,6 +220,20 @@
|
|||||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</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>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="calendarimporter" />
|
<option name="myItemId" value="calendarimporter" />
|
||||||
@ -245,86 +266,6 @@
|
|||||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</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>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="calendarimporter" />
|
<option name="myItemId" value="calendarimporter" />
|
||||||
@ -343,20 +284,6 @@
|
|||||||
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
<option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</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>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="Scope" />
|
<pane id="Scope" />
|
||||||
@ -386,6 +313,12 @@
|
|||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
|
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
|
||||||
|
<node-interpreter>project</node-interpreter>
|
||||||
|
<node-options />
|
||||||
|
<gulpfile />
|
||||||
|
<tasks />
|
||||||
|
<arguments />
|
||||||
|
<envs />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
|
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
|
||||||
@ -412,6 +345,9 @@
|
|||||||
<component name="ShelveChangesManager" show_recycled="false">
|
<component name="ShelveChangesManager" show_recycled="false">
|
||||||
<option name="remove_strategy" value="false" />
|
<option name="remove_strategy" value="false" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration />
|
||||||
|
</component>
|
||||||
<component name="TaskManager">
|
<component name="TaskManager">
|
||||||
<task active="true" id="Default" summary="Default task">
|
<task active="true" id="Default" summary="Default task">
|
||||||
<changelist id="e7c9c2bb-66f1-4e37-904c-d33d8c113bde" name="Default" comment="" />
|
<changelist id="e7c9c2bb-66f1-4e37-904c-d33d8c113bde" name="Default" comment="" />
|
||||||
@ -419,12 +355,13 @@
|
|||||||
<option name="number" value="Default" />
|
<option name="number" value="Default" />
|
||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1477949602474</updated>
|
<updated>1477949602474</updated>
|
||||||
<workItem from="1477949603566" duration="9042000" />
|
<workItem from="1477949603566" duration="9204000" />
|
||||||
|
<workItem from="1480441197414" duration="4152000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TimeTrackingManager">
|
<component name="TimeTrackingManager">
|
||||||
<option name="totallyTimeSpent" value="9042000" />
|
<option name="totallyTimeSpent" value="13356000" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="65" y="24" width="1792" height="999" extended-state="6" />
|
<frame x="65" y="24" width="1792" height="999" extended-state="6" />
|
||||||
@ -432,19 +369,19 @@
|
|||||||
<layout>
|
<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="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="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="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="-1" side_tool="false" 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="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="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="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="-1" side_tool="true" 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="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="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="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="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="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="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" />
|
<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>
|
</layout>
|
||||||
@ -467,131 +404,17 @@
|
|||||||
<watches-manager />
|
<watches-manager />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<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">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="1515">
|
||||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
<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$/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" />
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js">
|
<entry file="file://$PROJECT_DIR$/js/settings/ui/CalSyncGrid.js">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<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" />
|
<caret line="85" column="59" selection-start-line="85" selection-start-column="59" selection-end-line="85" selection-end-column="59" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
@ -599,12 +422,62 @@
|
|||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
<entry file="file://$PROJECT_DIR$/js/settings/SettingsCalSyncWidget.js">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<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" />
|
<caret line="104" column="16" selection-start-line="104" selection-start-column="16" selection-end-line="104" selection-end-column="142" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</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">
|
<entry file="file://$PROJECT_DIR$/js/settings/dialogs/CalSyncEditContentPanel.js">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="0">
|
||||||
@ -613,14 +486,14 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</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">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="1480">
|
<state relative-caret-position="0">
|
||||||
<caret line="101" column="30" selection-start-line="101" selection-start-column="30" selection-end-line="101" selection-end-column="30" />
|
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||||
<folding />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/js/data/CalendarHelper.js" />
|
||||||
<entry file="file://$PROJECT_DIR$/backend/functions.php">
|
<entry file="file://$PROJECT_DIR$/backend/functions.php">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="75">
|
<state relative-caret-position="75">
|
||||||
@ -637,6 +510,139 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</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">
|
<entry file="file://$PROJECT_DIR$/backend/README.txt">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="0">
|
||||||
@ -645,28 +651,111 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/backend/sync.php">
|
<entry file="file://$PROJECT_DIR$/backend/.htaccess">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="360">
|
<state relative-caret-position="0">
|
||||||
<caret line="24" column="47" selection-start-line="24" selection-start-column="47" selection-end-line="24" selection-end-column="47" />
|
<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>
|
<folding>
|
||||||
<element signature="e#21#926#0#PHP" expanded="true" />
|
<element signature="e#6#905#0#PHP" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</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">
|
<entry file="file://$PROJECT_DIR$/manifest.xml">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="135">
|
||||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
<caret line="9" column="62" selection-start-line="9" selection-start-column="62" selection-end-line="9" selection-end-column="62" />
|
||||||
<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" />
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
2
Makefile
2
Makefile
@ -1,2 +1,2 @@
|
|||||||
default:
|
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">
|
<project default="all">
|
||||||
<property environment="env"/>
|
<property environment="env"/>
|
||||||
<property name="root-folder" value="${basedir}/../../"/>
|
<property name="root-folder" value="${basedir}/../.."/>
|
||||||
<property name="tools-folder" value="${root-folder}/tools/"/>
|
<property name="tools-folder" value="${root-folder}/tools/"/>
|
||||||
<property name="target-folder" value="${root-folder}/deploy/plugins"/>
|
<property name="target-folder" value="${root-folder}/deploy/plugins"/>
|
||||||
<property name="server-folder" value="${root-folder}/server"/>
|
<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">
|
<typedef file="${tools-folder}/antlib.xml">
|
||||||
<classpath>
|
<classpath>
|
||||||
<pathelement location="${tools-folder}/tools.jar"/>
|
<pathelement location="${tools-folder}/tools.jar"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
</typedef>
|
</typedef>
|
||||||
|
|
||||||
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
|
<taskdef resource="net/sf/antcontrib/antlib.xml">
|
||||||
<classpath>
|
<classpath>
|
||||||
<pathelement location="${tools-folder}/lib/ant-contrib-1.0b3.jar"/>
|
<pathelement location="${tools-folder}/lib/ant-contrib-1.0b3.jar"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
</taskdef>
|
</taskdef>
|
||||||
|
|
||||||
<!-- Determine plugin name -->
|
<!-- Determine plugin name -->
|
||||||
<basename file="${basedir}" property="plugin"/>
|
<basename file="${basedir}" property="plugin"/>
|
||||||
|
|
||||||
<!-- The Plugin distribution files -->
|
<!-- The Plugin distribution files -->
|
||||||
<property name="plugin-folder" value="${plugin}"/>
|
<property name="plugin-folder" value="${plugin}"/>
|
||||||
<property name="plugin-debugfile" value="${plugin}-debug.js"/>
|
<property name="plugin-debugfile" value="${plugin}-debug.js"/>
|
||||||
<property name="plugin-file" value="${plugin}.js"/>
|
<property name="plugin-file" value="${plugin}.js"/>
|
||||||
|
|
||||||
<!-- The Plugin CSS files -->
|
<!-- The Plugin CSS files -->
|
||||||
<property name="plugin-css-folder" value="resources/css"/>
|
<property name="plugin-css-folder" value="resources/css"/>
|
||||||
<property name="plugin-css-file" value="${plugin}.css"/>
|
<property name="plugin-css-file" value="${plugin}.css"/>
|
||||||
|
|
||||||
<!-- Meta target -->
|
<!-- Meta target -->
|
||||||
<target name="all" depends="concat, compress"/>
|
<target name="all" depends="concat, compress"/>
|
||||||
|
|
||||||
<!-- Clean -->
|
<!-- Clean -->
|
||||||
<target name="clean">
|
<target name="clean">
|
||||||
<delete includeemptydirs="true" failonerror="false">
|
<delete includeemptydirs="true" failonerror="false">
|
||||||
<!-- Delete the Plugin files -->
|
<!-- Delete the Plugin files -->
|
||||||
<fileset dir="${target-folder}/${plugin-folder}/js">
|
<fileset dir="${target-folder}/${plugin-folder}/js">
|
||||||
<include name="${plugin-file}"/>
|
<include name="${plugin-file}"/>
|
||||||
<include name="${plugin-debugfile}"/>
|
<include name="${plugin-debugfile}"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</delete>
|
</delete>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Concatenates JavaScript files with automatic dependency generation -->
|
<!-- Concatenates JavaScript files with automatic dependency generation -->
|
||||||
<target name="concat">
|
<target name="concat">
|
||||||
<!-- Concatenate plugin JS file -->
|
<!-- Concatenate plugin JS file -->
|
||||||
<if>
|
<if>
|
||||||
<available file="js" type="dir" />
|
<available file="js" type="dir"/>
|
||||||
<then>
|
<then>
|
||||||
<mkdir dir="${target-folder}/${plugin-folder}/js"/>
|
<mkdir dir="${target-folder}/${plugin-folder}/js"/>
|
||||||
<echo message="Concatenating: ${plugin-debugfile}"/>
|
<echo message="Concatenating: ${plugin-debugfile}"/>
|
||||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}" prioritize="\w+">
|
<zConcat outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-debugfile}"
|
||||||
<concatfiles>
|
prioritize="\w+">
|
||||||
<fileset dir="js" includes="**/*.js" />
|
<concatfiles>
|
||||||
</concatfiles>
|
<fileset dir="js" includes="**/*.js"/>
|
||||||
</zConcat>
|
</concatfiles>
|
||||||
</then>
|
</zConcat>
|
||||||
</if>
|
</then>
|
||||||
|
</if>
|
||||||
|
|
||||||
<!-- Concatenate plugin CSS files -->
|
<!-- Concatenate plugin CSS files -->
|
||||||
<if>
|
<if>
|
||||||
<available file="${plugin-css-folder}" type="dir" />
|
<available file="${plugin-css-folder}" type="dir"/>
|
||||||
<then>
|
<then>
|
||||||
<mkdir dir="${target-folder}/${plugin-folder}/${plugin-css-folder}"/>
|
<mkdir dir="${target-folder}/${plugin-folder}/${plugin-css-folder}"/>
|
||||||
<echo message="Concatenating: ${plugin-css-file}"/>
|
<echo message="Concatenating: ${plugin-css-file}"/>
|
||||||
<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}" outputFile="${plugin-css-file}">
|
<zConcat outputFolder="${target-folder}/${plugin-folder}/${plugin-css-folder}"
|
||||||
<concatfiles>
|
outputFile="${plugin-css-file}">
|
||||||
<fileset dir="${plugin-css-folder}" includes="**/*.css" />
|
<concatfiles>
|
||||||
</concatfiles>
|
<fileset dir="${plugin-css-folder}" includes="**/*.css"/>
|
||||||
</zConcat>
|
</concatfiles>
|
||||||
</then>
|
</zConcat>
|
||||||
</if>
|
</then>
|
||||||
</target>
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
<!-- Preformat the Concatenated Javascript files to improve compilation -->
|
<!-- Preformat the Concatenated Javascript files to improve compilation -->
|
||||||
<target name="preformat" depends="concat">
|
<target name="preformat" depends="concat">
|
||||||
<if>
|
<if>
|
||||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file" />
|
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file"/>
|
||||||
<then>
|
<then>
|
||||||
<echo message="Preformatting: ${plugin-debugfile}"/>
|
<echo message="Preformatting: ${plugin-debugfile}"/>
|
||||||
<replaceregexp byline="true">
|
<replaceregexp byline="true">
|
||||||
<regexp pattern="(^[ ,\t]*\*[ ,\t]@.*)\{(.*)\[\]\}"/>
|
<regexp pattern="(^[ ,\t]*\*[ ,\t]@.*)\{(.*)\[\]\}"/>
|
||||||
<substitution expression="\1{\2\|Array}"/>
|
<substitution expression="\1{\2\|Array}"/>
|
||||||
<fileset dir="${target-folder}/${plugin-folder}/js" includes="${plugin-debugfile}"/>
|
<fileset dir="${target-folder}/${plugin-folder}/js" includes="${plugin-debugfile}"/>
|
||||||
</replaceregexp>
|
</replaceregexp>
|
||||||
</then>
|
</then>
|
||||||
</if>
|
</if>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Compress JavaScript -->
|
<!-- Compress JavaScript -->
|
||||||
<target name="compress" depends="preformat">
|
<target name="compress" depends="preformat">
|
||||||
<if>
|
<if>
|
||||||
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file" />
|
<available file="${target-folder}/${plugin-folder}/js/${plugin-debugfile}" type="file"/>
|
||||||
<then>
|
<then>
|
||||||
<echo message="Compiling: ${plugin-debugfile}" />
|
<echo message="Compiling: ${plugin-debugfile}"/>
|
||||||
<zCompile inputFolder="${target-folder}/${plugin-folder}/js" inputFile="${plugin-debugfile}" outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-file}">
|
<zCompile inputFolder="${target-folder}/${plugin-folder}/js" inputFile="${plugin-debugfile}"
|
||||||
<externs>
|
outputFolder="${target-folder}/${plugin-folder}/js" outputFile="${plugin-file}">
|
||||||
var Ext = {};
|
<externs>
|
||||||
var Zarafa = {};
|
var Ext = {};
|
||||||
var container = {};
|
var Zarafa = {};
|
||||||
var _ = function(key, domain) {};
|
var container = {};
|
||||||
var dgettext = function(domain, msgid) {};
|
var _ = function(key, domain) {};
|
||||||
var dngettext = function(domain, msgid, msgid_plural, count) {};
|
var dgettext = function(domain, msgid) {};
|
||||||
var dnpgettext = function(domain, msgctxt, msgid, msgid_plural, count) {};
|
var dngettext = function(domain, msgid, msgid_plural, count) {};
|
||||||
var dpgettext = function(domain, msgctxt, msgid) {};
|
var dnpgettext = function(domain, msgctxt, msgid, msgid_plural, count) {};
|
||||||
var ngettext = function(msgid, msgid_plural, count) {};
|
var dpgettext = function(domain, msgctxt, msgid) {};
|
||||||
var npgettext = function(msgctxt, msgid, msgid_plural, count) {};
|
var ngettext = function(msgid, msgid_plural, count) {};
|
||||||
var pgettext = function(msgctxt, msgid) {};
|
var npgettext = function(msgctxt, msgid, msgid_plural, count) {};
|
||||||
</externs>
|
var pgettext = function(msgctxt, msgid) {};
|
||||||
</zCompile>
|
</externs>
|
||||||
</then>
|
</zCompile>
|
||||||
</if>
|
</then>
|
||||||
</target>
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
<!-- syntax check all PHP files -->
|
<!-- syntax check all PHP files -->
|
||||||
<target name="validate">
|
<target name="validate">
|
||||||
<if>
|
<if>
|
||||||
<available file="php" filepath="${env.PATH}" />
|
<available file="php" filepath="${env.PATH}"/>
|
||||||
<then>
|
<then>
|
||||||
<if>
|
<if>
|
||||||
<available file="config.php" type="file" />
|
<available file="config.php" type="file"/>
|
||||||
<then>
|
<then>
|
||||||
<antcall target="syntax-check">
|
<antcall target="syntax-check">
|
||||||
<param name="file" value="config.php"/>
|
<param name="file" value="config.php"/>
|
||||||
</antcall>
|
</antcall>
|
||||||
</then>
|
</then>
|
||||||
</if>
|
</if>
|
||||||
<if>
|
<if>
|
||||||
<available file="php" type="dir" />
|
<available file="php" type="dir"/>
|
||||||
<then>
|
<then>
|
||||||
<foreach target="syntax-check" param="file">
|
<foreach target="syntax-check" param="file">
|
||||||
<path>
|
<path>
|
||||||
<fileset dir=".">
|
<fileset dir=".">
|
||||||
<exclude name="php/vendor/**" />
|
<exclude name="php/vendor/**"/>
|
||||||
<include name="**/*.php"/>
|
<include name="**/*.php"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</path>
|
</path>
|
||||||
</foreach>
|
</foreach>
|
||||||
</then>
|
</then>
|
||||||
</if>
|
</if>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<echo message="WARNING: PHP not available, not performing syntax-check on php files"/>
|
<echo message="WARNING: PHP not available, not performing syntax-check on php files"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="syntax-check">
|
<target name="syntax-check">
|
||||||
<echo message="validating ${file}"/>
|
<echo message="validating ${file}"/>
|
||||||
<exec executable="php" failonerror="true">
|
<exec executable="php" failonerror="true">
|
||||||
<arg value="-l"/>
|
<arg value="-l"/>
|
||||||
<arg value="${file}"/>
|
<arg value="${file}"/>
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Install all files into the target folder -->
|
<!-- Generate language files -->
|
||||||
<target name="deploy" depends="compress, validate">
|
<target name="language">
|
||||||
<mkdir dir="${target-folder}/${plugin-folder}"/>
|
<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 -->
|
<target name="msgfmt">
|
||||||
<if>
|
<propertyregex property="outfile" input="${file}" regexp=".*\/(languages\/.*)\.po"
|
||||||
<available file="xmllint" filepath="${env.PATH}" />
|
replace="${target-folder}/${plugin-folder}/\1\.mo"/>
|
||||||
<then>
|
<echo message="Converting ${file} to ${outfile}"/>
|
||||||
<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true">
|
<dirname property="outdir" file="${outfile}"/>
|
||||||
<arg value="--valid"/>
|
<mkdir dir="${outdir}"/>
|
||||||
<arg value="--path"/>
|
<exec executable="msgfmt" failonerror="true">
|
||||||
<arg value="${server-folder}"/>
|
<arg value="-v"/>
|
||||||
<arg value="manifest.xml"/>
|
<arg value="-o"/>
|
||||||
</exec>
|
<arg value="${outfile}"/>
|
||||||
</then>
|
<arg value="${file}"/>
|
||||||
<else>
|
</exec>
|
||||||
<echo message="WARNING: xmllint not available, not performing syntax-check on manifest.xml"/>
|
</target>
|
||||||
<!-- 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 -->
|
<!-- Install all files into the target folder -->
|
||||||
<copy todir="${target-folder}/${plugin-folder}">
|
<target name="deploy" depends="compress, validate, language">
|
||||||
<fileset dir=".">
|
<mkdir dir="${target-folder}/${plugin-folder}"/>
|
||||||
<include name="resources/**/*.*"/>
|
|
||||||
<include name="external/**/*.*"/>
|
<!-- Copy (and validate) manifest.xml -->
|
||||||
<include name="php/**/*.php"/>
|
<if>
|
||||||
<include name="config.php"/>
|
<available file="xmllint" filepath="${env.PATH}"/>
|
||||||
<!-- exclude the ant script -->
|
<then>
|
||||||
<exclude name="build.xml"/>
|
<exec executable="xmllint" output="${target-folder}/${plugin-folder}/manifest.xml" failonerror="true">
|
||||||
<!-- CSS is generated during build -->
|
<arg value="--valid"/>
|
||||||
<exclude name="resources/css/*.*"/>
|
<arg value="--path"/>
|
||||||
</fileset>
|
<arg value="${server-folder}"/>
|
||||||
</copy>
|
<arg value="manifest.xml"/>
|
||||||
</target>
|
</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>
|
</project>
|
@ -1,3 +1,7 @@
|
|||||||
|
calendarimporter 2.2.1:
|
||||||
|
- finally supporting Kopano Webapp 3.1.x
|
||||||
|
- translation to german added
|
||||||
|
|
||||||
calendarimporter 2.2.0:
|
calendarimporter 2.2.0:
|
||||||
- support for Kopano Webapp 3.1.1
|
- support for Kopano Webapp 3.1.1
|
||||||
- Code rework
|
- Code rework
|
||||||
|
23
config.php
23
config.php
@ -1,13 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
/** Disable the import plugin for all clients */
|
/** Disable the import plugin for all clients */
|
||||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE', true);
|
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE', false);
|
||||||
/** Disable the sync feature for all clients */
|
/** Disable the sync feature for all clients */
|
||||||
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC', true); // not yet implemented
|
define('PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC', true);
|
||||||
|
|
||||||
/** The default calendar to import to*/
|
/** The default calendar to import to*/
|
||||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT', "Kalender");
|
define('PLUGIN_CALENDARIMPORTER_DEFAULT', "Kalender");
|
||||||
define('PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE', "Europe/Vienna");
|
define('PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE', "Europe/Vienna");
|
||||||
|
|
||||||
/** Tempory path for uploaded files... */
|
/** Tempory path for uploaded files... */
|
||||||
define('PLUGIN_CALENDARIMPORTER_TMP_UPLOAD', "/var/lib/kopano-webapp/tmp/");
|
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>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* Copyright (C) 2012-2016 Christoph Haas
|
||||||
@ -19,7 +19,7 @@
|
|||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Ext.namespace('Zarafa.plugins.calendarimporter');
|
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.
|
* The copyright string holding the copyright notice for the Zarafa calendarimporter Plugin.
|
||||||
*/
|
*/
|
||||||
Zarafa.plugins.calendarimporter.ABOUT = ""
|
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 "
|
+ "<p>This program is free software; you can redistribute it and/or "
|
||||||
+ "modify it under the terms of the GNU Lesser General Public "
|
+ "modify it under the terms of the GNU Lesser General Public "
|
||||||
+ "License as published by the Free Software Foundation; either "
|
+ "License as published by the Free Software Foundation; either "
|
||||||
+ "version 2.1 of the License, or (at your option) any later version.</p>"
|
+ "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, "
|
+ "<p>This program is distributed in the hope that it will be useful, "
|
||||||
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
|
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
|
||||||
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU "
|
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU "
|
||||||
+ "Lesser General Public License for more details.</p>"
|
+ "Lesser General Public License for more details.</p>"
|
||||||
|
|
||||||
+ "<p>You should have received a copy of the GNU Lesser General Public "
|
+ "<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 "
|
+ "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>"
|
+ "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>"
|
+ "<p>The calendarimporter plugin contains the following third-party components:</p>"
|
||||||
|
|
||||||
+ "<h1>iCalcreator v2.16.12</h1>"
|
|
||||||
|
|
||||||
+ "<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>Copyright 2007-2013 Kjell-Inge Gustafsson kigkonsult</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>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>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>"
|
||||||
|
|
||||||
+ "<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>";
|
+ "<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
|
* @singleton
|
||||||
*/
|
*/
|
||||||
Zarafa.plugins.calendarimporter.data.Actions = {
|
Zarafa.plugins.calendarimporter.data.Actions = {
|
||||||
/**
|
/**
|
||||||
* Callback for the export request.
|
* Callback for the export request.
|
||||||
* @param {Object} response
|
* @param {Object} response
|
||||||
*/
|
*/
|
||||||
downloadICS: function (response) {
|
downloadICS: function (response) {
|
||||||
if (response.status == false) {
|
if (response.status == false) {
|
||||||
Zarafa.common.dialogs.MessageBox.show({
|
Zarafa.common.dialogs.MessageBox.show({
|
||||||
title : dgettext('plugin_files', 'Warning'),
|
title: dgettext('plugin_calendarimporter', 'Warning'),
|
||||||
msg : dgettext('plugin_files', response.message),
|
msg: response.message,
|
||||||
icon : Zarafa.common.dialogs.MessageBox.WARNING,
|
icon: Zarafa.common.dialogs.MessageBox.WARNING,
|
||||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
buttons: Zarafa.common.dialogs.MessageBox.OK
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var downloadFrame = Ext.getBody().createChild({
|
var downloadFrame = Ext.getBody().createChild({
|
||||||
tag: 'iframe',
|
tag: 'iframe',
|
||||||
cls: 'x-hidden'
|
cls: 'x-hidden'
|
||||||
});
|
});
|
||||||
|
|
||||||
var url = document.URL;
|
var url = document.URL;
|
||||||
var link = url.substring(0, url.lastIndexOf('/') + 1);
|
var link = url.substring(0, url.lastIndexOf('/') + 1);
|
||||||
|
|
||||||
link += "index.php?sessionid=" + container.getUser().getSessionId() + "&load=custom&name=download_ics";
|
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, "token=" + encodeURIComponent(response.download_token));
|
||||||
link = Ext.urlAppend(link, "filename=" + encodeURIComponent(response.filename));
|
link = Ext.urlAppend(link, "filename=" + encodeURIComponent(response.filename));
|
||||||
|
|
||||||
downloadFrame.dom.contentWindow.location = link;
|
downloadFrame.dom.contentWindow.location = link;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all calendar folders.
|
* Get all calendar folders.
|
||||||
* @param {boolean} asDropdownStore If true, a simple array store will be returned.
|
* @param {boolean} asDropdownStore If true, a simple array store will be returned.
|
||||||
* @returns {*}
|
* @returns {*}
|
||||||
*/
|
*/
|
||||||
getAllCalendarFolders: function (asDropdownStore) {
|
getAllCalendarFolders: function (asDropdownStore) {
|
||||||
asDropdownStore = Ext.isEmpty(asDropdownStore) ? false : asDropdownStore;
|
asDropdownStore = Ext.isEmpty(asDropdownStore) ? false : asDropdownStore;
|
||||||
|
|
||||||
var allFolders = [];
|
var allFolders = [];
|
||||||
|
|
||||||
var inbox = container.getHierarchyStore().getDefaultStore();
|
var inbox = container.getHierarchyStore().getDefaultStore();
|
||||||
var pub = container.getHierarchyStore().getPublicStore();
|
var pub = container.getHierarchyStore().getPublicStore();
|
||||||
|
|
||||||
if (!Ext.isEmpty(inbox.subStores) && inbox.subStores.folders.totalLength > 0) {
|
if (!Ext.isEmpty(inbox.subStores) && inbox.subStores.folders.totalLength > 0) {
|
||||||
for (var i = 0; i < inbox.subStores.folders.totalLength; i++) {
|
for (var i = 0; i < inbox.subStores.folders.totalLength; i++) {
|
||||||
var folder = inbox.subStores.folders.getAt(i);
|
var folder = inbox.subStores.folders.getAt(i);
|
||||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||||
if (asDropdownStore) {
|
if (asDropdownStore) {
|
||||||
allFolders.push([
|
allFolders.push([
|
||||||
folder.get("entryid"),
|
folder.get("entryid"),
|
||||||
folder.get("display_name")
|
folder.get("display_name")
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
allFolders.push({
|
allFolders.push({
|
||||||
display_name : folder.get("display_name"),
|
display_name: folder.get("display_name"),
|
||||||
entryid : folder.get("entryid"),
|
entryid: folder.get("entryid"),
|
||||||
store_entryid: folder.get("store_entryid"),
|
store_entryid: folder.get("store_entryid"),
|
||||||
is_public : false
|
is_public: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Ext.isEmpty(pub.subStores) && pub.subStores.folders.totalLength > 0) {
|
if (!Ext.isEmpty(pub.subStores) && pub.subStores.folders.totalLength > 0) {
|
||||||
for (var j = 0; j < pub.subStores.folders.totalLength; j++) {
|
for (var j = 0; j < pub.subStores.folders.totalLength; j++) {
|
||||||
var folder = pub.subStores.folders.getAt(j);
|
var folder = pub.subStores.folders.getAt(j);
|
||||||
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
if (!Ext.isEmpty(folder) && folder.get("container_class") == "IPF.Appointment") {
|
||||||
if (asDropdownStore) {
|
if (asDropdownStore) {
|
||||||
allFolders.push([
|
allFolders.push([
|
||||||
folder.get("entryid"),
|
folder.get("entryid"),
|
||||||
folder.get("display_name") + " (Public)"
|
folder.get("display_name") + " (Public)"
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
allFolders.push({
|
allFolders.push({
|
||||||
display_name : folder.get("display_name"),
|
display_name: folder.get("display_name"),
|
||||||
entryid : folder.get("entryid"),
|
entryid: folder.get("entryid"),
|
||||||
store_entryid: folder.get("store_entryid"),
|
store_entryid: folder.get("store_entryid"),
|
||||||
is_public : true
|
is_public: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (asDropdownStore) {
|
if (asDropdownStore) {
|
||||||
return allFolders.sort(Zarafa.plugins.calendarimporter.data.Actions.dynamicSort(1));
|
return allFolders.sort(Zarafa.plugins.calendarimporter.data.Actions.dynamicSort(1));
|
||||||
} else {
|
} else {
|
||||||
return allFolders;
|
return allFolders;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a calendar folder element by name.
|
* Return a calendar folder element by name.
|
||||||
@ -159,20 +159,20 @@ Zarafa.plugins.calendarimporter.data.Actions = {
|
|||||||
return container.getHierarchyStore().getDefaultFolder('calendar');
|
return container.getHierarchyStore().getDefaultFolder('calendar');
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dynamic sort function, sorts by property name.
|
* Dynamic sort function, sorts by property name.
|
||||||
* @param {string|int} property
|
* @param {string|int} property
|
||||||
* @returns {Function}
|
* @returns {Function}
|
||||||
*/
|
*/
|
||||||
dynamicSort: function (property) {
|
dynamicSort: function (property) {
|
||||||
var sortOrder = 1;
|
var sortOrder = 1;
|
||||||
if (property[0] === "-") {
|
if (property[0] === "-") {
|
||||||
sortOrder = -1;
|
sortOrder = -1;
|
||||||
property = property.substr(1);
|
property = property.substr(1);
|
||||||
}
|
}
|
||||||
return function (a, b) {
|
return function (a, b) {
|
||||||
var result = (a[property].toLowerCase() < b[property].toLowerCase()) ? -1 : (a[property].toLowerCase() > b[property].toLowerCase()) ? 1 : 0;
|
var result = (a[property].toLowerCase() < b[property].toLowerCase()) ? -1 : (a[property].toLowerCase() > b[property].toLowerCase()) ? 1 : 0;
|
||||||
return result * sortOrder;
|
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>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* Copyright (C) 2012-2016 Christoph Haas
|
||||||
@ -34,52 +34,52 @@ Ext.namespace('Zarafa.plugins.calendarimporter.data');
|
|||||||
* Calendar specific response handler.
|
* Calendar specific response handler.
|
||||||
*/
|
*/
|
||||||
Zarafa.plugins.calendarimporter.data.ResponseHandler = Ext.extend(Zarafa.core.data.AbstractResponseHandler, {
|
Zarafa.plugins.calendarimporter.data.ResponseHandler = Ext.extend(Zarafa.core.data.AbstractResponseHandler, {
|
||||||
/**
|
/**
|
||||||
* @cfg {Function} successCallback The function which
|
* @cfg {Function} successCallback The function which
|
||||||
* will be called after success request.
|
* will be called after success request.
|
||||||
*/
|
*/
|
||||||
successCallback: null,
|
successCallback: null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the successCallback callback function.
|
* Call the successCallback callback function.
|
||||||
* @param {Object} response Object contained the response data.
|
* @param {Object} response Object contained the response data.
|
||||||
*/
|
*/
|
||||||
doExport: function (response) {
|
doExport: function (response) {
|
||||||
this.successCallback(response);
|
this.successCallback(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the successCallback callback function.
|
* Call the successCallback callback function.
|
||||||
* @param {Object} response Object contained the response data.
|
* @param {Object} response Object contained the response data.
|
||||||
*/
|
*/
|
||||||
doLoad: function (response) {
|
doLoad: function (response) {
|
||||||
this.successCallback(response);
|
this.successCallback(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the successCallback callback function.
|
* Call the successCallback callback function.
|
||||||
* @param {Object} response Object contained the response data.
|
* @param {Object} response Object contained the response data.
|
||||||
*/
|
*/
|
||||||
doImport: function (response) {
|
doImport: function (response) {
|
||||||
this.successCallback(response);
|
this.successCallback(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call the successCallback callback function.
|
* Call the successCallback callback function.
|
||||||
* @param {Object} response Object contained the response data.
|
* @param {Object} response Object contained the response data.
|
||||||
*/
|
*/
|
||||||
doImportattachment: function (response) {
|
doImportattachment: function (response) {
|
||||||
this.successCallback(response);
|
this.successCallback(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In case exception happened on server, server will return
|
* In case exception happened on server, server will return
|
||||||
* exception response with the code of exception.
|
* exception response with the code of exception.
|
||||||
* @param {Object} response Object contained the response data.
|
* @param {Object} response Object contained the response data.
|
||||||
*/
|
*/
|
||||||
doError: function (response) {
|
doError: function (response) {
|
||||||
alert("error response code: " + response.error.info.code);
|
alert("error response code: " + response.error.info.code);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Ext.reg('calendarimporter.calendarresponsehandler', Zarafa.plugins.calendarimporter.data.ResponseHandler);
|
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>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* Copyright (C) 2012-2016 Christoph Haas
|
||||||
@ -19,13 +19,13 @@
|
|||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ImportContentPanel
|
* ImportContentPanel
|
||||||
*
|
*
|
||||||
* Container for the importpanel.
|
* Container for the importpanel.
|
||||||
*/
|
*/
|
||||||
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
|
Ext.namespace("Zarafa.plugins.calendarimporter.dialogs");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel
|
* @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, {
|
Zarafa.plugins.calendarimporter.dialogs.ImportContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param config Configuration structure
|
* @param config Configuration structure
|
||||||
*/
|
*/
|
||||||
constructor : function(config) {
|
constructor: function (config) {
|
||||||
config = config || {};
|
config = config || {};
|
||||||
Ext.applyIf(config, {
|
Ext.applyIf(config, {
|
||||||
layout : 'fit',
|
layout: 'fit',
|
||||||
title : _('Import Calendar File'),
|
title: dgettext('plugin_calendarimporter', 'Import Calendar File'),
|
||||||
closeOnSave : true,
|
closeOnSave: true,
|
||||||
width : 800,
|
width: 800,
|
||||||
height : 700,
|
height: 700,
|
||||||
//Add panel
|
//Add panel
|
||||||
items : [
|
items: [
|
||||||
{
|
{
|
||||||
xtype : 'calendarimporter.importpanel',
|
xtype: 'calendarimporter.importpanel',
|
||||||
filename : config.filename,
|
filename: config.filename,
|
||||||
folder : config.folder
|
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>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* 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
|
Zarafa.plugins.calendarimporter.ImportPlugin = Ext.extend(Zarafa.core.Plugin, { // create new import plugin
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} config Configuration object
|
* @param {Object} config Configuration object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
constructor: function (config) {
|
constructor: function (config) {
|
||||||
config = 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
|
* initialises insertion point for plugin
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
initPlugin: function () {
|
initPlugin: function () {
|
||||||
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.initPlugin.apply(this, arguments);
|
Zarafa.plugins.calendarimporter.ImportPlugin.superclass.initPlugin.apply(this, arguments);
|
||||||
|
|
||||||
/* our panel */
|
/* our panel */
|
||||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.dialogs.importevents');
|
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.dialogs.importevents');
|
||||||
|
|
||||||
/* directly import received icals */
|
/* directly import received icals */
|
||||||
this.registerInsertionPoint('common.contextmenu.attachment.actions', this.createAttachmentImportButton);
|
this.registerInsertionPoint('common.contextmenu.attachment.actions', this.createAttachmentImportButton);
|
||||||
|
|
||||||
/* add settings widget */
|
/* add settings widget */
|
||||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsWidget);
|
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsWidget);
|
||||||
|
|
||||||
/* export a calendar entry via rightclick */
|
/* export a calendar entry via rightclick */
|
||||||
this.registerInsertionPoint('context.calendar.contextmenu.actions', this.createItemExportInsertionPoint, this);
|
this.registerInsertionPoint('context.calendar.contextmenu.actions', this.createItemExportInsertionPoint, this);
|
||||||
|
|
||||||
/* ical sync stuff */
|
/* ical sync stuff */
|
||||||
if (container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/enable_sync") === true) {
|
if (container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/enable_sync") === true) {
|
||||||
/* edit panel */
|
/* edit panel */
|
||||||
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.settings.dialogs.calsyncedit');
|
Zarafa.core.data.SharedComponentType.addProperty('plugins.calendarimporter.settings.dialogs.calsyncedit');
|
||||||
|
|
||||||
/* enable the settings widget */
|
/* enable the settings widget */
|
||||||
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsCalSyncWidget);
|
this.registerInsertionPoint('context.settings.category.calendar', this.createSettingsCalSyncWidget);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method hooks to the contact context menu and allows users to export users to vcf.
|
* This method hooks to the contact context menu and allows users to export users to vcf.
|
||||||
*
|
*
|
||||||
* @param include
|
* @param include
|
||||||
* @param btn
|
* @param btn
|
||||||
* @returns {Object}
|
* @returns {Object}
|
||||||
*/
|
*/
|
||||||
createItemExportInsertionPoint: function (include, btn) {
|
createItemExportInsertionPoint: function (include, btn) {
|
||||||
return {
|
return {
|
||||||
text : dgettext('plugin_files', 'Export Event'),
|
text: dgettext('plugin_calendarimporter', 'Export Event'),
|
||||||
handler: this.exportToICS.createDelegate(this, [btn]),
|
handler: this.exportToICS.createDelegate(this, [btn]),
|
||||||
scope : this,
|
scope: this,
|
||||||
iconCls: 'icon_calendarimporter_export'
|
iconCls: 'icon_calendarimporter_export'
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a request to download the selected records as vCard.
|
* Generates a request to download the selected records as vCard.
|
||||||
* @param {Ext.Button} btn
|
* @param {Ext.Button} btn
|
||||||
*/
|
*/
|
||||||
exportToICS: function (btn) {
|
exportToICS: function (btn) {
|
||||||
if (btn.records.length == 0) {
|
if (btn.records.length == 0) {
|
||||||
return; // skip if no records where given!
|
return; // skip if no records where given!
|
||||||
}
|
}
|
||||||
|
|
||||||
var recordIds = [];
|
var recordIds = [];
|
||||||
|
|
||||||
for (var i = 0; i < btn.records.length; i++) {
|
for (var i = 0; i < btn.records.length; i++) {
|
||||||
recordIds.push(btn.records[i].get("entryid"));
|
recordIds.push(btn.records[i].get("entryid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||||
scope : this
|
scope: this
|
||||||
});
|
});
|
||||||
|
|
||||||
// request attachment preperation
|
// Notify user
|
||||||
container.getRequest().singleRequest(
|
// # TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||||
'calendarmodule',
|
container.getNotifier().notify('info', dgettext('plugin_contactimporter', 'Calendar Export'), String.format(dgettext('plugin_calendarimporter', 'Exporting {0} events. Please wait...'), recordIds.length));
|
||||||
'export',
|
|
||||||
{
|
|
||||||
storeid: btn.records[0].get("store_entryid"),
|
|
||||||
records: recordIds
|
|
||||||
},
|
|
||||||
responseHandler
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the button
|
|
||||||
*
|
|
||||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
createSettingsWidget: function () {
|
|
||||||
return [{
|
|
||||||
xtype: 'calendarimporter.settingswidget'
|
|
||||||
}];
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
// request attachment preperation
|
||||||
* Creates the button
|
container.getRequest().singleRequest(
|
||||||
*
|
'calendarmodule',
|
||||||
* @return {Object} Configuration object for a {@link Ext.Button button}
|
'export',
|
||||||
*
|
{
|
||||||
*/
|
storeid: btn.records[0].get("store_entryid"),
|
||||||
createSettingsCalSyncWidget: function () {
|
records: recordIds
|
||||||
return [{
|
},
|
||||||
xtype: 'calendarimporter.settingscalsyncwidget'
|
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}
|
/**
|
||||||
*/
|
* Creates the button
|
||||||
createAttachmentImportButton: function (include, btn) {
|
*
|
||||||
return {
|
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||||
text : _('Import to Calendar'),
|
*
|
||||||
handler : this.getAttachmentFileName.createDelegate(this, [btn]),
|
*/
|
||||||
scope : this,
|
createSettingsCalSyncWidget: function () {
|
||||||
iconCls : 'icon_calendarimporter_button',
|
return [{
|
||||||
beforeShow: function (item, record) {
|
xtype: 'calendarimporter.settingscalsyncwidget'
|
||||||
var extension = record.data.name.split('.').pop().toLowerCase();
|
}];
|
||||||
|
},
|
||||||
|
|
||||||
if (record.data.filetype == "text/calendar" || extension == "ics" || extension == "ifb" || extension == "ical" || extension == "ifbf") {
|
/**
|
||||||
item.setVisible(true);
|
* Insert import button in all attachment suggestions
|
||||||
} else {
|
|
||||||
item.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
* @return {Object} Configuration object for a {@link Ext.Button button}
|
||||||
* Callback for getAttachmentFileName
|
*/
|
||||||
*/
|
createAttachmentImportButton: function (include, btn) {
|
||||||
gotAttachmentFileName: function (response) {
|
return {
|
||||||
if (response.status == true) {
|
text: dgettext('plugin_calendarimporter', 'Import to Calendar'),
|
||||||
this.scope.openImportDialog(response.tmpname);
|
handler: this.getAttachmentFileName.createDelegate(this, [btn]),
|
||||||
} else {
|
scope: this,
|
||||||
Zarafa.common.dialogs.MessageBox.show({
|
iconCls: 'icon_calendarimporter_button',
|
||||||
title : _('Error'),
|
beforeShow: function (item, record) {
|
||||||
msg : _(response["message"]),
|
var extension = record.data.name.split('.').pop().toLowerCase();
|
||||||
icon : Zarafa.common.dialogs.MessageBox.ERROR,
|
|
||||||
buttons: Zarafa.common.dialogs.MessageBox.OK
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
if (record.data.filetype == "text/calendar" || extension == "ics" || extension == "ifb" || extension == "ical" || extension == "ifbf") {
|
||||||
* Clickhandler for the button
|
item.setVisible(true);
|
||||||
*/
|
} else {
|
||||||
getAttachmentFileName: function (btn, callback) {
|
item.setVisible(false);
|
||||||
Zarafa.common.dialogs.MessageBox.show({
|
}
|
||||||
title : 'Please wait',
|
}
|
||||||
msg : 'Loading attachment...',
|
};
|
||||||
progressText: 'Initializing...',
|
},
|
||||||
width : 300,
|
|
||||||
progress : true,
|
|
||||||
closable : false
|
|
||||||
});
|
|
||||||
|
|
||||||
// progress bar... ;)
|
/**
|
||||||
var f = function (v) {
|
* Callback for getAttachmentFileName
|
||||||
return function () {
|
*/
|
||||||
if (v == 100) {
|
gotAttachmentFileName: function (response) {
|
||||||
Zarafa.common.dialogs.MessageBox.hide();
|
if (response.status == true) {
|
||||||
} else {
|
this.scope.openImportDialog(response.tmpname);
|
||||||
Zarafa.common.dialogs.MessageBox.updateProgress(v / 100, Math.round(v) + '% loaded');
|
} 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 */
|
// progress bar... ;)
|
||||||
var attachmentRecord = btn.records;
|
var f = function (v) {
|
||||||
var attachmentStore = attachmentRecord.store;
|
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');
|
for (var i = 1; i < 101; i++) {
|
||||||
var entryid = attachmentStore.getAttachmentParentRecordEntryId();
|
setTimeout(f(i), 20 * i);
|
||||||
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;
|
|
||||||
|
|
||||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
/* store the attachment to a temporary folder and prepare it for uploading */
|
||||||
successCallback: this.gotAttachmentFileName,
|
var attachmentRecord = btn.records;
|
||||||
scope : this
|
var attachmentStore = attachmentRecord.store;
|
||||||
});
|
|
||||||
|
|
||||||
// request attachment preperation
|
var store = attachmentStore.getParentRecord().get('store_entryid');
|
||||||
container.getRequest().singleRequest(
|
var entryid = attachmentStore.getAttachmentParentRecordEntryId();
|
||||||
'calendarmodule',
|
var attachNum = new Array(1);
|
||||||
'importattachment',
|
if (attachmentRecord.get('attach_num') != -1) {
|
||||||
{
|
attachNum[0] = attachmentRecord.get('attach_num');
|
||||||
entryid : entryid,
|
} else {
|
||||||
store : store,
|
attachNum[0] = attachmentRecord.get('tmpname');
|
||||||
attachNum : attachNum,
|
}
|
||||||
dialog_attachments: dialog_attachments,
|
var dialog_attachments = attachmentStore.getId();
|
||||||
filename : filename
|
var filename = attachmentRecord.data.name;
|
||||||
},
|
|
||||||
responseHandler
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||||
* Open the import dialog.
|
successCallback: this.gotAttachmentFileName,
|
||||||
* @param {String} filename
|
scope: this
|
||||||
*/
|
});
|
||||||
openImportDialog: function (filename) {
|
|
||||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
|
||||||
var config = {
|
|
||||||
filename: filename,
|
|
||||||
modal : true
|
|
||||||
};
|
|
||||||
|
|
||||||
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
|
* Open the import dialog.
|
||||||
* and the given record.
|
* @param {String} filename
|
||||||
* This will bid on calendar.dialogs.importevents
|
*/
|
||||||
* @param {Zarafa.core.data.SharedComponentType} type Type of component a context can bid for.
|
openImportDialog: function (filename) {
|
||||||
* @param {Ext.data.Record} record Optionally passed record.
|
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
||||||
* @return {Number} The bid for the shared component
|
var config = {
|
||||||
*/
|
filename: filename,
|
||||||
bidSharedComponent: function (type, record) {
|
modal: true
|
||||||
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;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
Zarafa.core.data.UIFactory.openLayerComponent(componentType, undefined, config);
|
||||||
* 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;
|
/**
|
||||||
}
|
* 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
|
* STARTUP
|
||||||
*############################################################################################################################*/
|
*############################################################################################################################*/
|
||||||
Zarafa.onReady(function () {
|
Zarafa.onReady(function () {
|
||||||
container.registerPlugin(new Zarafa.core.PluginMetaData({
|
container.registerPlugin(new Zarafa.core.PluginMetaData({
|
||||||
name : 'calendarimporter',
|
name: 'calendarimporter',
|
||||||
displayName : _('Calendarimporter Plugin'),
|
displayName: dgettext('plugin_calendarimporter', 'Calendarimporter Plugin'),
|
||||||
about : Zarafa.plugins.calendarimporter.ABOUT,
|
about: Zarafa.plugins.calendarimporter.ABOUT,
|
||||||
pluginConstructor: Zarafa.plugins.calendarimporter.ImportPlugin
|
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');
|
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, {
|
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, {
|
||||||
/**
|
/**
|
||||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||||
*/
|
*/
|
||||||
settingsContext : undefined,
|
settingsContext: undefined,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} config Configuration object
|
* @param {Object} config Configuration object
|
||||||
*/
|
*/
|
||||||
constructor : function(config) {
|
constructor: function (config) {
|
||||||
config = 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
|
|
||||||
});
|
|
||||||
|
|
||||||
Ext.applyIf(config, {
|
var store = new Ext.data.JsonStore({
|
||||||
height : 400,
|
fields: [
|
||||||
title : _('Calendar Sync settings'),
|
{name: 'id', type: 'int'},
|
||||||
xtype : 'calendarimporter.settingscalsyncwidget',
|
{name: 'icsurl'},
|
||||||
layout : {
|
{name: 'user'},
|
||||||
// override from SettingsWidget
|
{name: 'pass'},
|
||||||
type : 'fit'
|
{name: 'intervall', type: 'int'},
|
||||||
},
|
{name: 'calendar'},
|
||||||
items : [{
|
{name: 'calendarname'},
|
||||||
xtype : 'calendarimporter.calsyncpanel',
|
{name: 'lastsync'}
|
||||||
store : store,
|
],
|
||||||
ref : 'calsyncPanel'
|
sortInfo: {
|
||||||
}]
|
field: 'id',
|
||||||
});
|
direction: 'ASC'
|
||||||
|
},
|
||||||
|
autoDestroy: true
|
||||||
|
});
|
||||||
|
|
||||||
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget.superclass.constructor.call(this, config);
|
Ext.applyIf(config, {
|
||||||
},
|
height: 400,
|
||||||
|
title: dgettext('plugin_calendarimporter', 'Calendar Sync settings'),
|
||||||
/**
|
xtype: 'calendarimporter.settingscalsyncwidget',
|
||||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
layout: {
|
||||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#update}.
|
// override from SettingsWidget
|
||||||
* This is used to load the latest version of the settings from the
|
type: 'fit'
|
||||||
* {@link Zarafa.settings.SettingsModel} into the UI of this category.
|
},
|
||||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to load
|
items: [{
|
||||||
*/
|
xtype: 'calendarimporter.calsyncpanel',
|
||||||
update : function(settingsModel) {
|
store: store,
|
||||||
this.model = settingsModel;
|
ref: 'calsyncPanel'
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
|
||||||
// Convert the signatures into Store data
|
Zarafa.plugins.calendarimporter.settings.SettingsCalSyncWidget.superclass.constructor.call(this, config);
|
||||||
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}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load all icslinks into the GridPanel
|
/**
|
||||||
var store = this.calsyncPanel.calsyncGrid.getStore();
|
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||||
store.loadData(syncArray);
|
* 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;
|
||||||
|
|
||||||
/**
|
// Convert the signatures into Store data
|
||||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
var icslinks = settingsModel.get('zarafa/v1/contexts/calendar/icssync', true);
|
||||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
var syncArray = [];
|
||||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
for (var key in icslinks) {
|
||||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
if (icslinks.hasOwnProperty(key)) { // skip inherited props
|
||||||
*/
|
syncArray.push(Ext.apply({}, icslinks[key], {id: key}));
|
||||||
updateSettings : function(settingsModel) {
|
}
|
||||||
settingsModel.beginEdit();
|
}
|
||||||
|
|
||||||
// Start reading the Grid store and convert the contents back into
|
// Load all icslinks into the GridPanel
|
||||||
// an object which can be pushed to the settings.
|
var store = this.calsyncPanel.calsyncGrid.getStore();
|
||||||
var icslinks = this.calsyncPanel.calsyncGrid.getStore().getRange();
|
store.loadData(syncArray);
|
||||||
var icslinkData = {};
|
},
|
||||||
for (var i = 0, len = icslinks.length; i < len; i++) {
|
|
||||||
var icslink = icslinks[i];
|
|
||||||
|
|
||||||
icslinkData[icslink.get('id')] = {
|
/**
|
||||||
'icsurl' : icslink.get('icsurl'),
|
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
||||||
'intervall' : icslink.get('intervall'),
|
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
||||||
'user' : icslink.get('user'),
|
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
||||||
'pass' : icslink.get('pass'),
|
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
||||||
'lastsync' : icslink.get('lastsync'),
|
*/
|
||||||
'calendar' : icslink.get('calendar'),
|
updateSettings: function (settingsModel) {
|
||||||
'calendarname' : Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(icslink.get('calendar')).display_name
|
settingsModel.beginEdit();
|
||||||
};
|
|
||||||
}
|
|
||||||
settingsModel.set('zarafa/v1/contexts/calendar/icssync', icslinkData);
|
|
||||||
|
|
||||||
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);
|
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');
|
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, {
|
Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.settings.ui.SettingsWidget, {
|
||||||
/**
|
/**
|
||||||
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
* @cfg {Zarafa.settings.SettingsContext} settingsContext
|
||||||
*/
|
*/
|
||||||
settingsContext : undefined,
|
settingsContext: undefined,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} config Configuration object
|
* @param {Object} config Configuration object
|
||||||
*/
|
*/
|
||||||
constructor : function(config)
|
constructor: function (config) {
|
||||||
{
|
config = config || {};
|
||||||
config = config || {};
|
|
||||||
|
|
||||||
Ext.applyIf(config, {
|
Ext.applyIf(config, {
|
||||||
title : _('Calendar Import/Export plugin settings'),
|
title: dgettext('plugin_calendarimporter', 'Calendar Import/Export plugin settings'),
|
||||||
xtype : 'calendarimporter.settingswidget',
|
xtype: 'calendarimporter.settingswidget',
|
||||||
items : [
|
items: [
|
||||||
{
|
{
|
||||||
xtype : 'checkbox',
|
xtype: 'checkbox',
|
||||||
name : 'zarafa/v1/plugins/calendarimporter/enable_sync',
|
name: 'zarafa/v1/plugins/calendarimporter/enable_sync',
|
||||||
ref : 'enableSync',
|
ref: 'enableSync',
|
||||||
fieldLabel : 'Enable ical sync',
|
fieldLabel: dgettext('plugin_calendarimporter', 'Enable ical sync'),
|
||||||
lazyInit : false
|
lazyInit: false
|
||||||
},
|
},
|
||||||
this.createSelectBox(),
|
this.createSelectBox(),
|
||||||
this.createTimezoneBox()
|
this.createTimezoneBox()
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
Zarafa.plugins.calendarimporter.settings.SettingsWidget.superclass.constructor.call(this, config);
|
Zarafa.plugins.calendarimporter.settings.SettingsWidget.superclass.constructor.call(this, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
createSelectBox: function() {
|
|
||||||
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
|
||||||
|
|
||||||
return {
|
createSelectBox: function () {
|
||||||
xtype: "selectbox",
|
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
||||||
ref : 'defaultCalendar',
|
|
||||||
editable: false,
|
return {
|
||||||
name: "zarafa/v1/plugins/calendarimporter/default_calendar",
|
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,
|
value: Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByName(container.getSettingsModel().get("zarafa/v1/plugins/calendarimporter/default_calendar")).entryid,
|
||||||
width: 100,
|
width: 100,
|
||||||
fieldLabel: "Default calender",
|
fieldLabel: dgettext('plugin_calendarimporter', 'Default calender'),
|
||||||
store: myStore,
|
store: myStore,
|
||||||
mode: 'local',
|
mode: 'local',
|
||||||
labelSeperator: ":",
|
labelSeperator: ":",
|
||||||
border: false,
|
border: false,
|
||||||
anchor: "100%",
|
anchor: "100%",
|
||||||
scope: this,
|
scope: this,
|
||||||
allowBlank: false
|
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));
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
createTimezoneBox: function () {
|
||||||
* Called by the {@link Zarafa.settings.ui.SettingsCategory Category} when
|
return {
|
||||||
* it has been called with {@link zarafa.settings.ui.SettingsCategory#updateSettings}.
|
xtype: "selectbox",
|
||||||
* This is used to update the settings from the UI into the {@link Zarafa.settings.SettingsModel settings model}.
|
ref: 'defaultTimezone',
|
||||||
* @param {Zarafa.settings.SettingsModel} settingsModel The settings to update
|
editable: false,
|
||||||
*/
|
name: "zarafa/v1/plugins/calendarimporter/default_timezone",
|
||||||
updateSettings : function(settingsModel) {
|
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
|
// check if the user changed a value
|
||||||
var changed = false;
|
var changed = false;
|
||||||
|
|
||||||
if(settingsModel.get(this.enableSync.name) != this.enableSync.getValue()) {
|
if (settingsModel.get(this.enableSync.name) != this.enableSync.getValue()) {
|
||||||
changed = true;
|
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;
|
changed = true;
|
||||||
} else if(settingsModel.get(this.defaultTimezone.name) != this.defaultTimezone.getValue()) {
|
} else if (settingsModel.get(this.defaultTimezone.name) != this.defaultTimezone.getValue()) {
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(changed) {
|
if (changed) {
|
||||||
// Really save changes
|
// Really save changes
|
||||||
settingsModel.set(this.enableSync.name, this.enableSync.getValue());
|
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
|
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();
|
this.onUpdateSettings();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called after the {@link Zarafa.settings.SettingsModel} fires the {@link Zarafa.settings.SettingsModel#save save}
|
* 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.
|
* settings which were saved to the server.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
onUpdateSettings : function()
|
onUpdateSettings: function () {
|
||||||
{
|
|
||||||
var message = _('Your WebApp needs to be reloaded to make the changes visible!');
|
var message = _('Your WebApp needs to be reloaded to make the changes visible!');
|
||||||
message += '<br/><br/>';
|
message += '<br/><br/>';
|
||||||
message += _('WebApp will automatically restart in order for these changes to take effect');
|
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({
|
Zarafa.common.dialogs.MessageBox.addCustomButtons({
|
||||||
title: _('Restart WebApp'),
|
title: _('Restart WebApp'),
|
||||||
msg : message,
|
msg: message,
|
||||||
icon: Ext.MessageBox.QUESTION,
|
icon: Ext.MessageBox.QUESTION,
|
||||||
fn : this.restartWebapp,
|
fn: this.restartWebapp,
|
||||||
customButton : [{
|
customButton: [{
|
||||||
text : _('Restart'),
|
text: _('Restart'),
|
||||||
name : 'restart'
|
name: 'restart'
|
||||||
}, {
|
}, {
|
||||||
text : _('Cancel'),
|
text: _('Cancel'),
|
||||||
name : '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.
|
* @param {String} button The button which user pressed.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
restartWebapp : function(button)
|
restartWebapp: function (button) {
|
||||||
{
|
|
||||||
if (button === 'restart') {
|
if (button === 'restart') {
|
||||||
var contextModel = this.ownerCt.settingsContext.getModel();
|
var contextModel = this.ownerCt.settingsContext.getModel();
|
||||||
var realModel = contextModel.getRealSettingsModel();
|
var realModel = contextModel.getRealSettingsModel();
|
||||||
@ -165,7 +184,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
|||||||
realModel.save();
|
realModel.save();
|
||||||
|
|
||||||
this.loadMask = new Zarafa.common.ui.LoadMask(Ext.getBody(), {
|
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();
|
this.loadMask.show();
|
||||||
|
|
||||||
@ -183,8 +202,7 @@ Zarafa.plugins.calendarimporter.settings.SettingsWidget = Ext.extend(Zarafa.sett
|
|||||||
* settings which were saved to the server.
|
* settings which were saved to the server.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
onSettingsSave : function(model, parameters)
|
onSettingsSave: function (model, parameters) {
|
||||||
{
|
|
||||||
this.mun(model, 'save', this.onSettingsSave, this);
|
this.mun(model, 'save', this.onSettingsSave, this);
|
||||||
Zarafa.core.Util.reloadWebapp();
|
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
|
* @param {Object} response The response object as received from the PHP-side
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
onSettingsException : function(model, type, action, options, response)
|
onSettingsException: function (model, type, action, options, response) {
|
||||||
{
|
|
||||||
this.loadMask.hide();
|
this.loadMask.hide();
|
||||||
|
|
||||||
// Remove event handlers
|
// 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');
|
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.
|
* {@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, {
|
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, {
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param config Configuration structure
|
* @param config Configuration structure
|
||||||
*/
|
*/
|
||||||
constructor : function(config) {
|
constructor: function (config) {
|
||||||
config = config || {};
|
config = config || {};
|
||||||
|
|
||||||
// Add in some standard configuration data.
|
// Add in some standard configuration data.
|
||||||
Ext.applyIf(config, {
|
Ext.applyIf(config, {
|
||||||
// Override from Ext.Component
|
// Override from Ext.Component
|
||||||
xtype : 'calendarimporter.calsynceditcontentpanel',
|
xtype: 'calendarimporter.calsynceditcontentpanel',
|
||||||
layout : 'fit',
|
layout: 'fit',
|
||||||
model : true,
|
model: true,
|
||||||
autoSave : false,
|
autoSave: false,
|
||||||
width : 400,
|
width: 400,
|
||||||
height : 400,
|
height: 400,
|
||||||
title : _('ICAL Sync'),
|
title: dgettext('plugin_calendarimporter', 'ICAL Sync'),
|
||||||
items : [{
|
items: [{
|
||||||
xtype : 'calendarimporter.calsynceditpanel',
|
xtype: 'calendarimporter.calsynceditpanel',
|
||||||
item : config.item
|
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);
|
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');
|
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}.
|
* Will generate UI for {@link Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel CalSyncEditPanel}.
|
||||||
*/
|
*/
|
||||||
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel = Ext.extend(Ext.form.FormPanel, {
|
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
|
* @constructor
|
||||||
xtype : 'calendarimporter.calsynceditpanel',
|
* @param config Configuration structure
|
||||||
labelAlign : 'top',
|
*/
|
||||||
defaultType: 'textfield',
|
constructor: function (config) {
|
||||||
items : this.createPanelItems(config),
|
config = 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);
|
if (config.item)
|
||||||
},
|
this.currentItem = config.item;
|
||||||
|
|
||||||
/**
|
|
||||||
* 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) {
|
Ext.applyIf(config, {
|
||||||
record = new store.recordType({
|
// Override from Ext.Component
|
||||||
id: this.hashCode(this.icsurl.getValue()),
|
xtype: 'calendarimporter.calsynceditpanel',
|
||||||
icsurl: this.icsurl.getValue(),
|
labelAlign: 'top',
|
||||||
intervall: this.intervall.getValue(),
|
defaultType: 'textfield',
|
||||||
user: this.user.getValue(),
|
items: this.createPanelItems(config),
|
||||||
pass: Ext.util.base64.encode(this.pass.getValue()),
|
buttons: [{
|
||||||
calendar: this.calendar.getValue(),
|
text: _('Save'),
|
||||||
calendarname : Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(this.calendar.getValue()).display_name,
|
handler: this.doSave,
|
||||||
lastsync: "never"
|
scope: this
|
||||||
});
|
},
|
||||||
}
|
{
|
||||||
|
text: _('Cancel'),
|
||||||
if(this.icsurl.isValid()) {
|
handler: this.doClose,
|
||||||
if(record) {
|
scope: this
|
||||||
store.add(record);
|
}]
|
||||||
} else {
|
});
|
||||||
this.currentItem.set('icsurl', this.icsurl.getValue());
|
|
||||||
this.currentItem.set('intervall', this.intervall.getValue());
|
Zarafa.plugins.calendarimporter.settings.dialogs.CalSyncEditPanel.superclass.constructor.call(this, config);
|
||||||
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());
|
/**
|
||||||
|
* 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.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}
|
* 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.
|
* @return {Array} array of items that should be added to panel.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
createPanelItems : function(config)
|
createPanelItems: function (config) {
|
||||||
{
|
var icsurl = "";
|
||||||
var icsurl = "";
|
var intervall = "15";
|
||||||
var intervall = "15";
|
var user = "";
|
||||||
var user = "";
|
var pass = "";
|
||||||
var pass = "";
|
|
||||||
var calendarname = "";
|
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);
|
var myStore = Zarafa.plugins.calendarimporter.data.Actions.getAllCalendarFolders(true);
|
||||||
|
|
||||||
if(config.item){
|
if (config.item) {
|
||||||
icsurl = config.item.get('icsurl');
|
icsurl = config.item.get('icsurl');
|
||||||
intervall = config.item.get('intervall');
|
intervall = config.item.get('intervall');
|
||||||
user = config.item.get('user');
|
user = config.item.get('user');
|
||||||
pass = Ext.util.base64.decode(config.item.get('pass'));
|
pass = Ext.util.base64.decode(config.item.get('pass'));
|
||||||
calendar = config.item.get('calendar');
|
calendar = config.item.get('calendar');
|
||||||
calendarname = config.item.get('calendarname');
|
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++) {
|
return [{
|
||||||
chr = str.charCodeAt(i);
|
xtype: 'fieldset',
|
||||||
hash = ((hash<<5)-hash)+chr;
|
title: dgettext('plugin_calendarimporter', 'ICAL Information'),
|
||||||
hash = hash & hash; // Convert to 32bit integer
|
defaultType: 'textfield',
|
||||||
}
|
layout: 'form',
|
||||||
return Math.abs(hash);
|
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);
|
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');
|
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, {
|
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid = Ext.extend(Ext.grid.GridPanel, {
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} config Configuration structure
|
* @param {Object} config Configuration structure
|
||||||
*/
|
*/
|
||||||
constructor : function(config)
|
constructor: function (config) {
|
||||||
{
|
config = 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
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
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
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.constructor.call(this, config);
|
||||||
* initialize events for the grid panel.
|
},
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
initEvents : function()
|
|
||||||
{
|
|
||||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.initEvents.call(this);
|
|
||||||
|
|
||||||
// select first icssync when store has finished loading
|
/**
|
||||||
this.mon(this.store, 'load', this.onViewReady, this, {single : true});
|
* initialize events for the grid panel.
|
||||||
},
|
* @private
|
||||||
|
*/
|
||||||
/**
|
initEvents: function () {
|
||||||
* Render function
|
Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid.superclass.initEvents.call(this);
|
||||||
* @return {String}
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
renderAuthColumn : function(value, p, record)
|
|
||||||
{
|
|
||||||
return value ? "true" : "false";
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
// select first icssync when store has finished loading
|
||||||
* Render function
|
this.mon(this.store, 'load', this.onViewReady, this, {single: true});
|
||||||
* @return {String}
|
},
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
renderCalendarColumn : function(value, p, record)
|
|
||||||
{
|
|
||||||
return Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(value).display_name;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a column model object, used in {@link #colModel} config
|
* Render function
|
||||||
* @return {Ext.grid.ColumnModel} column model object
|
* @return {String}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
initColumnModel : function()
|
renderAuthColumn: function (value, p, record) {
|
||||||
{
|
return value ? "true" : "false";
|
||||||
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
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a selection model object, used in {@link #selModel} config
|
* Render function
|
||||||
* @return {Ext.grid.RowSelectionModel} selection model object
|
* @return {String}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
initSelectionModel : function()
|
renderCalendarColumn: function (value, p, record) {
|
||||||
{
|
return Zarafa.plugins.calendarimporter.data.Actions.getCalendarFolderByEntryid(value).display_name;
|
||||||
return new Ext.grid.RowSelectionModel({
|
},
|
||||||
singleSelect : true
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the {@link Ext.grid.GridPanel.loadMask} field
|
* Creates a column model object, used in {@link #colModel} config
|
||||||
*
|
* @return {Ext.grid.ColumnModel} column model object
|
||||||
* @return {Ext.LoadMask} The configuration object for {@link Ext.LoadMask}
|
* @private
|
||||||
* @private
|
*/
|
||||||
*/
|
initColumnModel: function () {
|
||||||
initLoadMask : function()
|
return [{
|
||||||
{
|
dataIndex: 'icsurl',
|
||||||
return {
|
header: dgettext('plugin_calendarimporter', 'ICS File'),
|
||||||
msg : _('Loading ics sync entries') + '...'
|
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
|
* Creates a selection model object, used in {@link #selModel} config
|
||||||
* select the first row in the grid.
|
* @return {Ext.grid.RowSelectionModel} selection model object
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
onViewReady : function()
|
initSelectionModel: function () {
|
||||||
{
|
return new Ext.grid.RowSelectionModel({
|
||||||
this.getSelectionModel().selectFirstRow();
|
singleSelect: true
|
||||||
},
|
});
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function will be called to remove a ics sync entry.
|
* Initialize the {@link Ext.grid.GridPanel.loadMask} field
|
||||||
*/
|
*
|
||||||
removeIcsSyncAs : function()
|
* @return {Ext.LoadMask} The configuration object for {@link Ext.LoadMask}
|
||||||
{
|
* @private
|
||||||
var icsRecord = this.getSelectionModel().getSelected();
|
*/
|
||||||
if(!icsRecord) {
|
initLoadMask: function () {
|
||||||
Ext.Msg.alert(_('Alert'), _('Please select a ics sync entry.'));
|
return {
|
||||||
return;
|
msg: dgettext('plugin_calendarimporter', 'Loading ics sync entries...')
|
||||||
}
|
};
|
||||||
|
},
|
||||||
|
|
||||||
this.store.remove(icsRecord);
|
/**
|
||||||
},
|
* Event handler which is fired when the gridPanel is ready. This will automatically
|
||||||
|
* select the first row in the grid.
|
||||||
/**
|
* @private
|
||||||
* 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.
|
onViewReady: function () {
|
||||||
* @private
|
this.getSelectionModel().selectFirstRow();
|
||||||
*/
|
},
|
||||||
onRowDblClick : function(grid, rowIndex)
|
|
||||||
{
|
/**
|
||||||
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
* Function will be called to remove a ics sync entry.
|
||||||
store : grid.getStore(),
|
*/
|
||||||
item : grid.getStore().getAt(rowIndex),
|
removeIcsSyncAs: function () {
|
||||||
manager : Ext.WindowMgr
|
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);
|
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');
|
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, {
|
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel = Ext.extend(Ext.Panel, {
|
||||||
|
|
||||||
// store
|
// store
|
||||||
store : undefined,
|
store: undefined,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param config Configuration structure
|
* @param config Configuration structure
|
||||||
*/
|
*/
|
||||||
constructor : function(config)
|
constructor: function (config) {
|
||||||
{
|
config = config || {};
|
||||||
config = config || {};
|
if (config.store)
|
||||||
if(config.store)
|
this.store = config.store;
|
||||||
this.store = config.store;
|
|
||||||
|
|
||||||
Ext.applyIf(config, {
|
Ext.applyIf(config, {
|
||||||
// Override from Ext.Component
|
// Override from Ext.Component
|
||||||
xtype : 'calendarimporter.calsyncpanel',
|
xtype: 'calendarimporter.calsyncpanel',
|
||||||
border : false,
|
border: false,
|
||||||
layout : {
|
layout: {
|
||||||
type : 'vbox',
|
type: 'vbox',
|
||||||
align : 'stretch',
|
align: 'stretch',
|
||||||
pack : 'start'
|
pack: 'start'
|
||||||
},
|
},
|
||||||
items : this.createPanelItems(this.store)
|
items: this.createPanelItems(this.store)
|
||||||
});
|
});
|
||||||
|
|
||||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.constructor.call(this, config);
|
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
|
|
||||||
}]
|
|
||||||
}]
|
|
||||||
}];
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* initialize events for the panel.
|
* Function will create panel items for {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel CalSyncPanel}
|
||||||
* @private
|
* @return {Array} array of items that should be added to panel.
|
||||||
*/
|
* @private
|
||||||
initEvents : function()
|
*/
|
||||||
{
|
createPanelItems: function (store) {
|
||||||
Zarafa.plugins.calendarimporter.settings.ui.CalSyncPanel.superclass.initEvents.call(this);
|
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);
|
||||||
|
|
||||||
/**
|
// register event to enable/disable buttons
|
||||||
* Handler function will be called when user clicks on 'Add' button.
|
this.mon(this.calsyncGrid.getSelectionModel(), 'selectionchange', this.onGridSelectionChange, this);
|
||||||
* @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
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event handler will be called when selection in {@link Zarafa.plugins.calendarimporter.settings.ui.CalSyncGrid CalSyncGrid}
|
* Handler function will be called when user clicks on 'Add' button.
|
||||||
* has been changed
|
* @private
|
||||||
* @param {Ext.grid.RowSelectionModel} selectionModel selection model that fired the event
|
*/
|
||||||
*/
|
onCalSyncAdd: function () {
|
||||||
onGridSelectionChange : function(selectionModel)
|
Zarafa.core.data.UIFactory.openLayerComponent(Zarafa.core.data.SharedComponentType['plugins.calendarimporter.settings.dialogs.calsyncedit'], undefined, {
|
||||||
{
|
store: this.store,
|
||||||
var noSelection = (selectionModel.hasSelection() === false);
|
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);
|
||||||
|
|
||||||
/**
|
this.removeButton.setDisabled(noSelection);
|
||||||
* Handler function will be called when user clicks on 'Remove' button.
|
},
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
onCalSyncRemove : function()
|
|
||||||
{
|
|
||||||
this.calsyncGrid.removeIcsSyncAs();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function will be used to reload data in the store.
|
* Handler function will be called when user clicks on 'Remove' button.
|
||||||
*/
|
* @private
|
||||||
discardChanges : function()
|
*/
|
||||||
{
|
onCalSyncRemove: function () {
|
||||||
this.store.load();
|
this.calsyncGrid.removeIcsSyncAs();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function will be used to save changes in the store.
|
* Function will be used to reload data in the store.
|
||||||
*/
|
*/
|
||||||
saveChanges : function()
|
discardChanges: function () {
|
||||||
{
|
this.store.load();
|
||||||
this.store.save();
|
},
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 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);
|
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>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* 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, {
|
Zarafa.plugins.calendarimporter.ui.ContextMenu = Ext.extend(Zarafa.hierarchy.ui.ContextMenu, {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @param {Object} config Configuration object
|
* @param {Object} config Configuration object
|
||||||
*/
|
*/
|
||||||
constructor: function (config) {
|
constructor: function (config) {
|
||||||
config = config || {};
|
config = config || {};
|
||||||
|
|
||||||
if (config.contextNode) {
|
if (config.contextNode) {
|
||||||
config.contextTree = config.contextNode.getOwnerTree();
|
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
|
// add item to menu
|
||||||
var additionalItems = this.createAdditionalContextMenuItems(config);
|
var additionalItems = this.createAdditionalContextMenuItems(config);
|
||||||
for (var i = 0; i < additionalItems.length; i++) {
|
for (var i = 0; i < additionalItems.length; i++) {
|
||||||
config.items[0].push(additionalItems[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.
|
* Create the Action context menu items.
|
||||||
* @param {Object} config Configuration object for the {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
* @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
|
* @return {Zarafa.core.ui.menu.ConditionalItem[]} The list of Action context menu items
|
||||||
* @private
|
* @private
|
||||||
*
|
*
|
||||||
* Note: All handlers are called within the scope of {@link Zarafa.plugins.calendarimporter.ui.ContextMenu HierarchyContextMenu}
|
* Note: All handlers are called within the scope of {@link Zarafa.plugins.calendarimporter.ui.ContextMenu HierarchyContextMenu}
|
||||||
*/
|
*/
|
||||||
createAdditionalContextMenuItems: function (config) {
|
createAdditionalContextMenuItems: function (config) {
|
||||||
return [{
|
return [{
|
||||||
xtype: 'menuseparator'
|
xtype: 'menuseparator'
|
||||||
}, {
|
}, {
|
||||||
text : _('Import Calendar'),
|
text: dgettext('plugin_calendarimporter', 'Import Calendar'),
|
||||||
iconCls : 'icon_calendarimporter_import',
|
iconCls: 'icon_calendarimporter_import',
|
||||||
handler : this.onContextItemImport,
|
handler: this.onContextItemImport,
|
||||||
beforeShow: function (item, record) {
|
beforeShow: function (item, record) {
|
||||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_MODIFY;
|
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_MODIFY;
|
||||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||||
item.setDisabled(true);
|
item.setDisabled(true);
|
||||||
} else {
|
} else {
|
||||||
item.setDisabled(false);
|
item.setDisabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
text : _('Export Calendar'),
|
text: dgettext('plugin_calendarimporter', 'Export Calendar'),
|
||||||
iconCls : 'icon_calendarimporter_export',
|
iconCls: 'icon_calendarimporter_export',
|
||||||
handler : this.onContextItemExport,
|
handler: this.onContextItemExport,
|
||||||
beforeShow: function (item, record) {
|
beforeShow: function (item, record) {
|
||||||
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_READ;
|
var access = record.get('access') & Zarafa.core.mapi.Access.ACCESS_READ;
|
||||||
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
if (!access || (record.isIPMSubTree() && !record.getMAPIStore().isDefaultStore())) {
|
||||||
item.setDisabled(true);
|
item.setDisabled(true);
|
||||||
} else {
|
} else {
|
||||||
item.setDisabled(false);
|
item.setDisabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
onContextItemExport: function () {
|
onContextItemExport: function () {
|
||||||
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
var responseHandler = new Zarafa.plugins.calendarimporter.data.ResponseHandler({
|
||||||
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
successCallback: Zarafa.plugins.calendarimporter.data.Actions.downloadICS,
|
||||||
scope : this
|
scope: this
|
||||||
});
|
});
|
||||||
|
|
||||||
// request attachment preperation
|
// Notify user
|
||||||
container.getRequest().singleRequest(
|
// # TRANSLATORS: {0} will be replaced by the number of contacts that will be exported
|
||||||
'calendarmodule',
|
container.getNotifier().notify('info', dgettext('plugin_contactimporter', 'Calendar Export'), String.format(dgettext('plugin_calendarimporter', 'Exporting {0} events. Please wait...'), this.records.get('content_count')));
|
||||||
'export',
|
|
||||||
{
|
|
||||||
storeid: this.records.get("store_entryid"),
|
|
||||||
folder : this.records.get("entryid")
|
|
||||||
},
|
|
||||||
responseHandler
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
// request attachment preperation
|
||||||
* Fires on selecting 'Open' menu option from {@link Zarafa.plugins.calendarimporter.ui.ContextMenu ContextMenu}
|
container.getRequest().singleRequest(
|
||||||
* @private
|
'calendarmodule',
|
||||||
*/
|
'export',
|
||||||
onContextItemImport: function () {
|
{
|
||||||
var componentType = Zarafa.core.data.SharedComponentType['plugins.calendarimporter.dialogs.importevents'];
|
storeid: this.records.get("store_entryid"),
|
||||||
var config = {
|
folder: this.records.get("entryid")
|
||||||
modal : true,
|
},
|
||||||
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);
|
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"?>
|
<?xml version="1.0"?>
|
||||||
<!DOCTYPE plugin SYSTEM "manifest.dtd">
|
<!DOCTYPE plugin SYSTEM "manifest.dtd">
|
||||||
<plugin version="2">
|
<plugin version="2">
|
||||||
<info>
|
<info>
|
||||||
<version>2.2.0</version>
|
<version>2.2.1</version>
|
||||||
<name>calendarimporter</name>
|
<name>calendarimporter</name>
|
||||||
<title>ICS Calendar Importer/Exporter</title>
|
<title>ICS Calendar Importer/Exporter</title>
|
||||||
<author>Christoph Haas</author>
|
<author>Christoph Haas</author>
|
||||||
<authorURL>http://www.sprinternet.at</authorURL>
|
<authorURL>http://www.sprinternet.at</authorURL>
|
||||||
<description>Import or Export a ICS file to/from the zarafa calendar</description>
|
<description>Import or Export a ICS file to/from the Kopano calendar</description>
|
||||||
</info>
|
</info>
|
||||||
<config>
|
<translations>
|
||||||
<configfile>config.php</configfile>
|
<translationsdir>languages</translationsdir>
|
||||||
</config>
|
</translations>
|
||||||
<components>
|
<config>
|
||||||
<component>
|
<configfile>config.php</configfile>
|
||||||
<files>
|
</config>
|
||||||
<server>
|
<components>
|
||||||
<serverfile>php/plugin.calendarimporter.php</serverfile>
|
<component>
|
||||||
<serverfile type="module" module="calendarmodule">php/module.calendar.php</serverfile>
|
<files>
|
||||||
</server>
|
<server>
|
||||||
<client>
|
<serverfile>php/plugin.calendarimporter.php</serverfile>
|
||||||
<clientfile load="release">js/calendarimporter-debug.js</clientfile>
|
<serverfile type="module" module="calendarmodule">php/module.calendar.php</serverfile>
|
||||||
<clientfile load="debug">js/calendarimporter-debug.js</clientfile>
|
</server>
|
||||||
|
<client>
|
||||||
<clientfile load="source">js/data/timezones.js</clientfile>
|
<clientfile load="release">js/calendarimporter-debug.js</clientfile>
|
||||||
<clientfile load="source">js/data/Actions.js</clientfile>
|
<clientfile load="debug">js/calendarimporter-debug.js</clientfile>
|
||||||
<clientfile load="source">js/data/ResponseHandler.js</clientfile>
|
|
||||||
<clientfile load="source">js/external/Ext.util.base64.js</clientfile>
|
<clientfile load="source">js/data/timezones.js</clientfile>
|
||||||
<clientfile load="source">js/ui/ContextMenu.js</clientfile>
|
<clientfile load="source">js/data/Actions.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/ImportContentPanel.js</clientfile>
|
<clientfile load="source">js/data/ResponseHandler.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/ImportPanel.js</clientfile>
|
<clientfile load="source">js/external/Ext.util.base64.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/SettingsWidget.js</clientfile>
|
<clientfile load="source">js/ui/ContextMenu.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/SettingsCalSyncWidget.js</clientfile>
|
<clientfile load="source">js/dialogs/ImportContentPanel.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncGrid.js</clientfile>
|
<clientfile load="source">js/dialogs/ImportPanel.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/ui/CalSyncPanel.js</clientfile>
|
<clientfile load="source">js/dialogs/settings/SettingsWidget.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditContentPanel.js</clientfile>
|
<clientfile load="source">js/dialogs/settings/SettingsCalSyncWidget.js</clientfile>
|
||||||
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditPanel.js</clientfile>
|
<clientfile load="source">js/dialogs/settings/ui/CalSyncGrid.js</clientfile>
|
||||||
<clientfile load="source">js/plugin.calendarimporter.js</clientfile>
|
<clientfile load="source">js/dialogs/settings/ui/CalSyncPanel.js</clientfile>
|
||||||
</client>
|
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditContentPanel.js</clientfile>
|
||||||
<resources>
|
<clientfile load="source">js/dialogs/settings/dialogs/CalSyncEditPanel.js</clientfile>
|
||||||
<resourcefile load="release">resources/css/calendarimporter.css</resourcefile>
|
<clientfile load="source">js/plugin.calendarimporter.js</clientfile>
|
||||||
<resourcefile load="debug">resources/css/calendarimporter.css</resourcefile>
|
</client>
|
||||||
<resourcefile load="source">resources/css/calendarimporter-main.css</resourcefile>
|
<resources>
|
||||||
</resources>
|
<resourcefile load="release">resources/css/calendarimporter.css</resourcefile>
|
||||||
</files>
|
<resourcefile load="debug">resources/css/calendarimporter.css</resourcefile>
|
||||||
</component>
|
<resourcefile load="source">resources/css/calendarimporter-main.css</resourcefile>
|
||||||
</components>
|
</resources>
|
||||||
|
</files>
|
||||||
|
</component>
|
||||||
|
</components>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* download.php, zarafa calendar to ics im/exporter
|
* download.php, Kopano calendar to ics im/exporter
|
||||||
*
|
*
|
||||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
||||||
* Copyright (C) 2012-2016 Christoph Haas
|
* Copyright (C) 2012-2016 Christoph Haas
|
||||||
@ -25,50 +25,49 @@ namespace calendarimporter;
|
|||||||
|
|
||||||
class DownloadHandler
|
class DownloadHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Download the given vcf file.
|
* Download the given vcf file.
|
||||||
* @return bool
|
*/
|
||||||
*/
|
public static function doDownload()
|
||||||
public static function doDownload()
|
{
|
||||||
{
|
if (isset($_GET["token"])) {
|
||||||
if (isset($_GET["token"])) {
|
$token = $_GET["token"];
|
||||||
$token = $_GET["token"];
|
} else {
|
||||||
} else {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($_GET["filename"])) {
|
if (isset($_GET["filename"])) {
|
||||||
$filename = $_GET["filename"];
|
$filename = $_GET["filename"];
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate token
|
// validate token
|
||||||
if (!ctype_alnum($token)) { // token is a md5 hash
|
if (!ctype_alnum($token)) { // token is a md5 hash
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD . "ics_" . $token . ".ics";
|
$file = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD . "ics_" . $token . ".ics";
|
||||||
|
|
||||||
if (!file_exists($file)) { // invalid token
|
if (!file_exists($file)) { // invalid token
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set headers here
|
// set headers here
|
||||||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||||||
|
|
||||||
// no caching
|
// no caching
|
||||||
header('Expires: 0'); // set expiration time
|
header('Expires: 0'); // set expiration time
|
||||||
header('Content-Description: File Transfer');
|
header('Content-Description: File Transfer');
|
||||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||||
header('Content-Length: ' . filesize($file));
|
header('Content-Length: ' . filesize($file));
|
||||||
header('Content-Type: application/octet-stream');
|
header('Content-Type: application/octet-stream');
|
||||||
header('Pragma: public');
|
header('Pragma: public');
|
||||||
flush();
|
flush();
|
||||||
|
|
||||||
// print the downloaded file
|
// print the downloaded file
|
||||||
readfile($file);
|
readfile($file);
|
||||||
ignore_user_abort(true);
|
ignore_user_abort(true);
|
||||||
unlink($file);
|
unlink($file);
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?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>
|
* 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -30,65 +30,65 @@ require_once __DIR__ . "/download.php";
|
|||||||
*/
|
*/
|
||||||
class Plugincalendarimporter extends Plugin
|
class Plugincalendarimporter extends Plugin
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
function __construct() {}
|
function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function initializes the Plugin and registers all hooks
|
* Function initializes the Plugin and registers all hooks
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function init()
|
function init()
|
||||||
{
|
{
|
||||||
$this->registerHook('server.core.settings.init.before');
|
$this->registerHook('server.core.settings.init.before');
|
||||||
$this->registerHook('server.index.load.custom');
|
$this->registerHook('server.index.load.custom');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function is executed when a hook is triggered by the PluginManager
|
* Function is executed when a hook is triggered by the PluginManager
|
||||||
*
|
*
|
||||||
* @param string $eventID the id of the triggered hook
|
* @param string $eventID the id of the triggered hook
|
||||||
* @param mixed $data object(s) related to the hook
|
* @param mixed $data object(s) related to the hook
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function execute($eventID, &$data)
|
function execute($eventID, &$data)
|
||||||
{
|
{
|
||||||
switch ($eventID) {
|
switch ($eventID) {
|
||||||
case 'server.core.settings.init.before' :
|
case 'server.core.settings.init.before' :
|
||||||
$this->injectPluginSettings($data);
|
$this->injectPluginSettings($data);
|
||||||
break;
|
break;
|
||||||
case 'server.index.load.custom':
|
case 'server.index.load.custom':
|
||||||
if ($data['name'] == 'download_ics') {
|
if ($data['name'] == 'download_ics') {
|
||||||
calendarimporter\DownloadHandler::doDownload();
|
calendarimporter\DownloadHandler::doDownload();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the core Settings class is initialized and ready to accept sysadmin default
|
* Called when the core Settings class is initialized and ready to accept sysadmin default
|
||||||
* settings.
|
* settings.
|
||||||
* @param Array $data Reference to the data of the triggered hook
|
* @param Array $data Reference to the data of the triggered hook
|
||||||
*/
|
*/
|
||||||
function injectPluginSettings(&$data)
|
function injectPluginSettings(&$data)
|
||||||
{
|
{
|
||||||
$data['settingsObj']->addSysAdminDefaults(Array(
|
$data['settingsObj']->addSysAdminDefaults(Array(
|
||||||
'zarafa' => Array(
|
'zarafa' => Array(
|
||||||
'v1' => Array(
|
'v1' => Array(
|
||||||
'plugins' => Array(
|
'plugins' => Array(
|
||||||
'calendarimporter' => Array(
|
'calendarimporter' => Array(
|
||||||
'enable' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE,
|
'enable' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE,
|
||||||
'enable_sync' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC,
|
'enable_sync' => PLUGIN_CALENDARIMPORTER_USER_DEFAULT_ENABLE_SYNC,
|
||||||
'default_calendar' => PLUGIN_CALENDARIMPORTER_DEFAULT,
|
'default_calendar' => PLUGIN_CALENDARIMPORTER_DEFAULT,
|
||||||
'default_timezone' => PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE
|
'default_timezone' => PLUGIN_CALENDARIMPORTER_DEFAULT_TIMEZONE
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* upload.php, zarafa calender to ics exporter
|
* upload.php, Kopano calender to ics im/exporter
|
||||||
*
|
*
|
||||||
* Author: Christoph Haas <christoph.h@sprinternet.at>
|
* 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* 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
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once("../config.php");
|
require_once("../config.php");
|
||||||
|
|
||||||
/* disable error printing - otherwise json communication might break... */
|
/* disable error printing - otherwise json communication might break... */
|
||||||
ini_set('display_errors', '0');
|
ini_set('display_errors', '0');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* respond/echo JSON
|
* respond/echo JSON
|
||||||
* @param $arr
|
* @param $arr
|
||||||
*/
|
*/
|
||||||
function respondJSON($arr) {
|
function respondJSON($arr)
|
||||||
echo json_encode($arr);
|
{
|
||||||
|
echo json_encode($arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -39,34 +40,34 @@ function respondJSON($arr) {
|
|||||||
* @param $length the lenght of the generated string
|
* @param $length the lenght of the generated string
|
||||||
* @return string a random string
|
* @return string a random string
|
||||||
*/
|
*/
|
||||||
function randomstring($length = 6) {
|
function randomstring($length = 6)
|
||||||
// $chars - all allowed charakters
|
{
|
||||||
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
// $chars - all allowed charakters
|
||||||
|
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
|
||||||
|
|
||||||
srand((double)microtime()*1000000);
|
srand((double)microtime() * 1000000);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$pass = "";
|
$pass = "";
|
||||||
while ($i < $length) {
|
while ($i < $length) {
|
||||||
$num = rand() % strlen($chars);
|
$num = rand() % strlen($chars);
|
||||||
$tmp = substr($chars, $num, 1);
|
$tmp = substr($chars, $num, 1);
|
||||||
$pass = $pass . $tmp;
|
$pass = $pass . $tmp;
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
return $pass;
|
return $pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
$destpath = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD;
|
$destpath = PLUGIN_CALENDARIMPORTER_TMP_UPLOAD;
|
||||||
$destpath .= $_FILES['icsdata']['name'] . randomstring();
|
$destpath .= $_FILES['icsdata']['name'] . randomstring();
|
||||||
|
|
||||||
if(is_readable ($_FILES['icsdata']['tmp_name'])) {
|
if (is_readable($_FILES['icsdata']['tmp_name'])) {
|
||||||
$result = move_uploaded_file($_FILES['icsdata']['tmp_name'],$destpath);
|
$result = move_uploaded_file($_FILES['icsdata']['tmp_name'], $destpath);
|
||||||
|
|
||||||
if($result) {
|
if ($result) {
|
||||||
respondJSON(array ('success'=>true, 'ics_file'=>$destpath));
|
respondJSON(array('success' => true, 'ics_file' => $destpath));
|
||||||
} else {
|
} else {
|
||||||
respondJSON(array ('success'=>false,'error'=>"File could not be moved to TMP path! Check plugin config and folder permissions!"));
|
respondJSON(array('success' => false, 'error' => dgettext("plugin_calendarimporter", "File could not be moved to TMP path! Check plugin config and folder permissions!")));
|
||||||
}
|
}
|
||||||
} else {
|
} 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