Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1821748
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
46 KB
Subscribers
None
View Options
diff --git a/action/jsinfo.php b/action/jsinfo.php
--- a/action/jsinfo.php
+++ b/action/jsinfo.php
@@ -1,54 +1,57 @@
<?php
/**
* DokuWiki DAVCal PlugIn - JSINFO component
*/
if(!defined('DOKU_INC')) die();
class action_plugin_davcal_jsinfo extends DokuWiki_Action_Plugin {
function register(Doku_Event_Handler $controller) {
$controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'add_jsinfo_information');
}
/**
* Add the language variable to the JSINFO variable
*/
function add_jsinfo_information(&$event, $param) {
global $conf;
global $JSINFO;
$lang = $conf['lang'];
switch($lang)
{
case 'de':
case 'de-informal':
$lc = 'de';
break;
case 'nl':
$lc = 'nl';
break;
case 'fr':
$lc = 'fr';
break;
+ case 'ru':
+ $lc = 'ru';
+ break;
default:
$lc = 'en';
}
$JSINFO['plugin']['davcal']['sectok'] = getSecurityToken();
$JSINFO['plugin']['davcal']['language'] = $lc;
if(isset($_SERVER['REMOTE_USER']) && !is_null($_SERVER['REMOTE_USER']))
{
$JSINFO['plugin']['davcal']['disable_sync'] = $this->getConf('disable_sync');
$JSINFO['plugin']['davcal']['disable_settings'] = $this->getConf('hide_settings');
}
else
{
$JSINFO['plugin']['davcal']['disable_settings'] = 1;
$JSINFO['plugin']['davcal']['disable_sync'] = 1;
}
$JSINFO['plugin']['davcal']['disable_ics'] = $this->getConf('disable_ics');
}
}
diff --git a/lang/ru/lang.php b/lang/ru/lang.php
new file mode 100644
--- /dev/null
+++ b/lang/ru/lang.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Russian language file for DAVCal
+ *
+ * @author Ljosxa Kuznetsov <ka2pink@gmail.com>
+ */
+$lang['created_by_davcal'] = 'Создано DAVCal для DokuWiki';
+$lang['unknown_error'] = 'Неизвестная ошибка';
+$lang['event_added'] = 'Событие добавлено';
+$lang['event_edited'] = 'Событие исправлено';
+$lang['event_deleted'] = 'Событие удалено';
+$lang['no_permission'] = 'У Вас нет прав изменять этот календарь';
+$lang['settings'] = 'Настройки/Синхронизация';
+$lang['settings_saved'] = 'Настройки сохранены';
+$lang['error_saving'] = 'Ошибка при сохранении настроек.';
+$lang['local_time'] = 'Местное время (по информации браузера)';
+$lang['from'] = 'Начало';
+$lang['to'] = 'Окончание';
+$lang['at'] = 'At';
+$lang['description'] = 'Описание';
+$lang['title'] = 'Заголовок';
+$lang['error_timezone_not_in_list'] = 'Выбранная временная зона не поддерживается PHP!';
+$lang['error_option_error'] = 'Ошибка в списке параметров';
+$lang['this_calendar_uses_timezone'] = 'Этот календарь показан во временной зоне %s.';
+$lang['location'] = 'Расположение';
+$lang['js']['create_new_event'] = 'Создать новое событие';
+$lang['js']['cancel'] = 'Отмена';
+$lang['js']['create'] = 'Создать';
+$lang['js']['save'] = 'Сохранить';
+$lang['js']['settings'] = 'Настройки';
+$lang['js']['edit'] = 'Редактировать';
+$lang['js']['delete'] = 'Удалить';
+$lang['js']['edit_event'] = 'Редактировать событие';
+$lang['js']['allday'] = 'Весь день';
+$lang['js']['title'] = 'Заголовок';
+$lang['js']['location'] = 'Расположение';
+$lang['js']['from'] = 'Начало';
+$lang['js']['to'] = 'Окончание';
+$lang['js']['yes'] = 'Да';
+$lang['js']['confirmation'] = 'Подтверждение';
+$lang['js']['ok'] = 'OK';
+$lang['js']['info'] = 'Информация';
+$lang['js']['really_delete_this_event'] = 'Удалить это событие?';
+$lang['js']['timezone'] = 'Временная зона';
+$lang['js']['weeknumbers'] = 'Номера недель';
+$lang['js']['use_lang_tz'] = 'Использовать временную зону из настроек языка';
+$lang['js']['only_workweek'] = 'Показывать только рабочую неделю';
+$lang['js']['sync_url'] = 'CalDAV URL';
+$lang['js']['error_retrieving_data'] = 'Ошибка при получении данных от сервера календаря.';
+$lang['js']['start_date_invalid'] = 'Дата/время начала неправильное.';
+$lang['js']['end_date_invalid'] = 'Дата/время окончания неправильное.';
+$lang['js']['end_date_before_start_date'] = 'Дата/время окончания раньше даты/врмени начала.';
+$lang['js']['end_date_is_same_as_start_date'] = 'Дата/время окончания совпадает с датой/временем начала.';
+$lang['js']['description'] = 'Описание';
+$lang['js']['private_url'] = 'Private URL';
+$lang['js']['recurring_cant_edit'] = 'Редактирование повторяющихся событий в настоящее время не поддерживается';
+$lang['js']['no_permission'] = 'У Вас нет прав изменять этот календарь';
+$lang['js']['calendar'] = 'Календарь';
+$lang['js']['start_monday'] = 'Начало недели в Пн';
+$lang['js']['nothing_to_show'] = 'Ничего нет для отображения';
+$lang['js']['add_attachment'] = 'Добавить ссылку';
+$lang['js']['attachments'] = 'Ссылки';
+$lang['js']['language_specific'] = 'По настройкам языка';
+$lang['js']['sync_ical'] = 'iCal Sync URL';
+$lang['js']['timeformat'] = 'Формат времени';
diff --git a/lang/ru/settings.php b/lang/ru/settings.php
new file mode 100644
--- /dev/null
+++ b/lang/ru/settings.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Russian language file for DAVCal
+ *
+ * @author Ljosxa Kuznetsov <ka2pink@gmail.com>
+ */
+$lang['hide_settings'] = 'Скрыть кнопку настроек у календаря';
+$lang['disable_sync'] = 'Отключить синхронизацию CalDAV (но оставить частные ICS URL)';
+$lang['disable_ics'] = 'Отключить синхронизацию частных ICS URL (но оставить CalDAV)';
+$lang['monday'] = 'Начинать неделю с Пн вместо Вс';
+$lang['timezone'] = 'Установить временную зону для календаря (например "Europe/Vienna" или "local" для использования данных браузера)';
+$lang['workweek'] = 'Показывать только рабочую неделю';
+$lang['weeknumbers'] = 'Показывать номера недель';
+$lang['timeformat'] = 'Формат времени, язык берётся по настройке языка';
+$lang['default_client_id'] = 'ID по умолчанию для указания в качестве davcal-клиента, например webdav://8';
diff --git a/plugin.info.txt b/plugin.info.txt
--- a/plugin.info.txt
+++ b/plugin.info.txt
@@ -1,7 +1,7 @@
base davcal
author Andreas Boehler
email dev@aboehler.at
-date 2019-01-22
+date 2019-04-30
name Calendar PlugIn with CalDAV sharing support
desc Create one calendar per page and share/subscribe via CalDAV
url http://www.dokuwiki.org/plugin:davcal
diff --git a/script.js b/script.js
--- a/script.js
+++ b/script.js
@@ -1,866 +1,867 @@
/* DOKUWIKI:include_once fullcalendar-3.7.0/moment.js */
/* DOKUWIKI:include_once fullcalendar-3.7.0/fullcalendar.js */
/* DOKUWIKI:include_once fullcalendar-3.7.0/locale/de.js */
/* DOKUWIKI:include_once fullcalendar-3.7.0/locale/en.js */
/* DOKUWIKI:include_once fullcalendar-3.7.0/locale/fr.js */
/* DOKUWIKI:include_once fullcalendar-3.7.0/locale/nl.js */
+/* DOKUWIKI:include_once fullcalendar-3.7.0/locale/ru.js */
/* DOKUWIKI:include_once datetimepicker-2.4.5/jquery.datetimepicker.js */
/* DOKUWIKI:include_once jstz.js */
/**
* Initialize the DAVCal script, attaching some event handlers and triggering
* the initial load of the fullcalendar JS
*/
jQuery(function() {
// Redefine functions for using moment.js with datetimepicker
Date.parseDate = function( input, format ){
return moment(input,format).toDate();
};
Date.prototype.dateFormat = function( format ){
return moment(this).format(format);
};
// Attach to event links
var calendarpage = jQuery('#fullCalendar').data('calendarpage');
if(!calendarpage) return;
dw_davcal__modals.page = calendarpage;
jQuery('div.fullCalendarSettings a').each(function() {
var $link = jQuery(this);
var href = $link.attr('href');
if (!href) return;
$link.click(
function(e) {
dw_davcal__modals.showSettingsDialog();
e.preventDefault();
return '';
}
);
}
);
// First, retrieve the current settings.
// Upon success, initialize fullcalendar.
var postArray = { };
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_davcal',
id: dw_davcal__modals.page,
page: dw_davcal__modals.page,
action: 'getSettings',
params: postArray,
sectok: JSINFO.plugin.davcal['sectok']
},
function(data)
{
var result = data['result'];
if(result === true)
{
dw_davcal__modals.settings = data['settings'];
var tz = false;
if(data['settings']['timezone'] !== '')
tz = data['settings']['timezone'];
// Force-overwrite thhe timezone setting if requested
if(data['settings']['meta']['forcetimezone'] !== 'no')
tz = data['settings']['meta']['forcetimezone'];
var fcOptions = {
dayClick: function(date, jsEvent, view) {
dw_davcal__modals.showEditEventDialog(date, false);
},
eventClick: function(calEvent, jsEvent, view) {
dw_davcal__modals.showEditEventDialog(calEvent, true);
},
events: {
url: DOKU_BASE + 'lib/exe/ajax.php',
type: 'POST',
data: {
call: 'plugin_davcal',
action: 'getEvents',
id: dw_davcal__modals.page,
page: dw_davcal__modals.page,
sectok: JSINFO.plugin.davcal['sectok']
},
error: function() {
dw_davcal__modals.msg = LANG.plugins.davcal['error_retrieving_data'];
dw_davcal__modals.showDialog(false);
}
},
header: {
left: 'title',
center: 'today prev,next',
right: 'month,agendaWeek,agendaDay,listWeek'
},
locale: JSINFO.plugin.davcal['language'],
weekNumbers: (data['settings']['weeknumbers'] == 1) ? true : false,
timezone: tz,
weekends: (data['settings']['workweek'] == 1) ? false : true,
firstDay: (data['settings']['monday'] == 1) ? 1 : 0,
defaultView: data['settings']['meta']['view'],
};
var timeformat = data['settings']['timeformat'];
// Force-overwrite the user's timezone setting if requested by the calendar
if(data['settings']['meta']['forcetimeformat'] !== 'no')
timeformat = data['settings']['meta']['forcetimeformat'];
if(timeformat !== 'lang')
{
// If the time format is language-based, we don't need to pass
// the timeFormat option to fullCalendar
if(timeformat == '24h')
{
fcOptions.timeFormat = 'H:mm';
}
if(timeformat == '12h')
{
fcOptions.timeFormat = 'h:mmt';
}
}
for (var key in data['settings']['meta']['fcoptions'])
{
if(!data['settings']['meta']['fcoptions'].hasOwnProperty(key)) continue;
var val = data['settings']['meta']['fcoptions'][key];
fcOptions[key] = val;
}
var detectedTz = jstz.determine().name();
dw_davcal__modals.detectedTz = detectedTz;
// The current TZ value holds either the uers's selection or
// the force timezone value
dw_davcal__modals.currentTz = (tz === false) ? '' : tz;
// Initialize the davcal popup
var res = jQuery('#fullCalendar').fullCalendar(fcOptions);
}
}
);
});
/**
* This holds all modal windows that DAVCal uses.
*/
var dw_davcal__modals = {
$editEventDialog: null,
$dialog: null,
$settingsDialog: null,
$inputDialog: null,
msg: null,
completeCb: null,
action: null,
uid: null,
settings: null,
page: null,
detectedTz: null,
currentTz: null,
/**
* Show the settings dialog
*/
// FIXME: Hide URLs for multi-calendar
showSettingsDialog : function() {
if(dw_davcal__modals.$settingsDialog)
return;
// Dialog buttons are language-dependent and defined here.
// Attach event handlers for save and cancel.
var dialogButtons = {};
if(!JSINFO.plugin.davcal['disable_settings'])
{
dialogButtons[LANG.plugins.davcal['save']] = function() {
var postArray = { };
jQuery("input[class=dw_davcal__settings], select[class=dw_davcal__settings]").each(function() {
if(jQuery(this).attr('type') == 'checkbox')
{
postArray[jQuery(this).prop('name')] = jQuery(this).prop('checked') ? 1 : 0;
}
else
{
postArray[jQuery(this).prop('name')] = jQuery(this).val();
}
});
jQuery('#dw_davcal__ajaxsettings').html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />');
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_davcal',
id: dw_davcal__modals.page,
page: dw_davcal__modals.page,
action: 'saveSettings',
params: postArray,
sectok: JSINFO.plugin.davcal['sectok']
},
function(data)
{
var result = data['result'];
var html = data['html'];
jQuery('#dw_davcal__ajaxsettings').html(html);
if(result === true)
{
location.reload();
}
}
);
};
}
dialogButtons[LANG.plugins.davcal['cancel']] = function () {
dw_davcal__modals.hideSettingsDialog();
};
var settingsHtml = '<div><table>';
if(JSINFO.plugin.davcal['disable_settings'] && JSINFO.plugin.davcal['disable_sync'] && JSINFO.plugin.davcal['disable_ics'])
{
settingsHtml += LANG.plugins.davcal['nothing_to_show'];
}
if(!JSINFO.plugin.davcal['disable_settings'])
{
settingsHtml += '<tr><td>' + LANG.plugins.davcal['timezone'] + '</td><td><select name="timezone" id="dw_davcal__settings_timezone" class="dw_davcal__settings"></select></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['timeformat'] + '</td><td><select name="timeformat" id="dw_davcal__settings_timeformat" class="dw_davcal__settings"></select></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['weeknumbers'] + '</td><td><input type="checkbox" name="weeknumbers" id="dw_davcal__settings_weeknumbers" class="dw_davcal__settings"></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['only_workweek'] + '</td><td><input type="checkbox" name="workweek" id="dw_davcal__settings_workweek" class="dw_davcal__settings"></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['start_monday'] + '</td><td><input type="checkbox" name="monday" id="dw_davcal__settings_monday" class="dw_davcal__settings"></td></tr>';
}
if(!JSINFO.plugin.davcal['disable_sync'])
{
settingsHtml += '<tr id="dw_davcal__settings_syncurl"><td>' + LANG.plugins.davcal['sync_url'] + '</td><td><input type="text" name="syncurl" readonly="readonly" id="dw_davcal__settings_syncurl_edit" class="dw_davcal__text" value="' + dw_davcal__modals.settings['syncurl'] + '"></td></tr>';
settingsHtml += '<tr id="dw_davcal__settings_principalurl"><td>' + LANG.plugins.davcal['sync_ical'] + '</td><td><input type="text" name="principalurl" readonly="readonly" id="dw_davcal__settings_principalurl_edit" class="dw_davcal__text" value="' + dw_davcal__modals.settings['principalurl'] + '"></td></tr>';
}
if(!JSINFO.plugin.davcal['disable_ics'])
{
settingsHtml += '<tr id="dw_davcal__settings_privateurl"><td>' + LANG.plugins.davcal['private_url'] + '</td><td><input type="text" name="privateurl" readonly="readonly" id="dw_davcal__settings_privateurl_edit" class="dw_davcal__text" value="' + dw_davcal__modals.settings['privateurl'] + '"></td></tr>';
}
settingsHtml += '</table>' +
'</div>' +
'<div id="dw_davcal__ajaxsettings"></div>';
dw_davcal__modals.$settingsDialog = jQuery(document.createElement('div'))
.dialog({
autoOpen: false,
draggable: true,
// fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues
drag: function(event, ui) {
var fixPix = jQuery(document).scrollTop();
iObj = ui.position;
iObj.top = iObj.top - fixPix;
jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px");
},
title: LANG.plugins.davcal['settings'],
resizable: true,
buttons: dialogButtons,
})
.html(
settingsHtml
)
.parent()
.attr('id','dw_davcal__settings')
.show()
.appendTo('.dokuwiki:first');
jQuery('#dw_davcal__settings').position({
my: "center",
at: "center",
of: window
});
// Initialize current settings
if(!JSINFO.plugin.davcal['disable_settings'])
{
var $tzdropdown = jQuery('#dw_davcal__settings_timezone');
jQuery('#fullCalendarTimezoneList option').each(function() {
jQuery('<option />', {value: jQuery(this).val(),
text: jQuery(this).text()}).appendTo($tzdropdown);
});
var $tfdropdown = jQuery('#dw_davcal__settings_timeformat');
jQuery('<option />', {value: 'lang', text: LANG.plugins.davcal['language_specific']}).appendTo($tfdropdown);
jQuery('<option />', {value: '24h', text: '24h'}).appendTo($tfdropdown);
jQuery('<option />', {value: '12h', text: '12h'}).appendTo($tfdropdown);
if(!JSINFO.plugin.davcal['disable_sync'])
{
jQuery('#dw_davcal__settings_syncurl_edit').on('click', function() {
jQuery(this).select();
});
jQuery('#dw_davcal__settings_principalurl_edit').on('click', function() {
jQuery(this).select();
});
}
if(!JSINFO.plugin.davcal['disable_ics'])
{
jQuery('#dw_davcal__settings_privateurl_edit').on('click', function() {
jQuery(this).select();
});
}
if(dw_davcal__modals.settings)
{
if(dw_davcal__modals.settings['timeformat'] !== '')
jQuery('#dw_davcal__settings_timeformat').val(dw_davcal__modals.settings['timeformat']);
if(dw_davcal__modals.settings['timezone'] !== '')
jQuery('#dw_davcal__settings_timezone').val(dw_davcal__modals.settings['timezone']);
if(dw_davcal__modals.settings['weeknumbers'] == 1)
jQuery('#dw_davcal__settings_weeknumbers').prop('checked', true);
else
jQuery('#dw_davcal__settings_weeknumbers').prop('checked', false);
if(dw_davcal__modals.settings['workweek'] == 1)
jQuery('#dw_davcal__settings_workweek').prop('checked', true);
else
jQuery('#dw_davcal__settings_workweek').prop('checked', false);
if(dw_davcal__modals.settings['monday'] == 1)
jQuery('#dw_davcal__settings_monday').prop('checked', true);
else
jQuery('#dw_davcal__settings_monday').prop('checked', false);
if(dw_davcal__modals.settings['meta']['forcetimezone'] !== 'no')
jQuery('#dw_davcal__settings_timezone').prop('disabled', true);
if(dw_davcal__modals.settings['meta']['forcetimeformat'] !== 'no')
jQuery('#dw_davcal__settings_timeformat').prop('disabled', true);
}
}
// attach event handlers
jQuery('#dw_davcal__settings .ui-dialog-titlebar-close').click(function(){
dw_davcal__modals.hideSettingsDialog();
});
},
/**
* Sanity-check our events.
*
* @return boolean false on failure, otherwise true
*/
checkEvents : function() {
// Retrieve dates
var allDay = jQuery('#dw_davcal__allday_edit').prop('checked');
var startDate = moment(jQuery('#dw_davcal__eventfrom_edit').val(), 'YYYY-MM-DD');
var endDate = moment(jQuery('#dw_davcal__eventto_edit').val(), 'YYYY-MM-DD');
// Do the checking
if(!allDay)
{
var startTime = moment.duration(jQuery('#dw_davcal__eventfromtime_edit').val());
var endTime = moment.duration(jQuery('#dw_davcal__eventtotime_edit').val());
startDate.add(startTime);
endDate.add(endTime);
}
if(!startDate.isValid())
{
dw_davcal__modals.msg = LANG.plugins.davcal['start_date_invalid'];
dw_davcal__modals.showDialog(false);
return false;
}
if(!endDate.isValid())
{
dw_davcal__modals.msg = LANG.plugins.davcal['end_date_invalid'];
dw_davcal__modals.showDialog(false);
return false;
}
if(endDate.isBefore(startDate))
{
dw_davcal__modals.msg = LANG.plugins.davcal['end_date_before_start_date'];
dw_davcal__modals.showDialog(false);
return false;
}
if(!allDay && endDate.isSame(startDate))
{
dw_davcal__modals.msg = LANG.plugins.davcal['end_date_is_same_as_start_date'];
dw_davcal__modals.showDialog(false);
return false;
}
return true;
},
/**
* Show the edit event dialog, which is also used to create new events
* @param {Object} event The event to create, that is the date or the calEvent
* @param {Object} edit Whether we edit (true) or create a new event (false)
*/
showEditEventDialog : function(event, edit) {
if(dw_davcal__modals.$editEventDialog)
return;
var readonly = true;
for(var i=0; i<dw_davcal__modals.settings['calids'].length; i++)
{
if(edit)
{
// Use the specific calendar setting if we edit an event
if(event.page == dw_davcal__modals.settings['calids'][i]['page'])
readonly = !dw_davcal__modals.settings['calids'][i]['write'];
}
else
{
// If there is at least one writable calendar,
// we set readonly to false
if(dw_davcal__modals.settings['calids'][i]['write'])
readonly = false;
}
}
var title = '';
var dialogButtons = {};
var calEvent = [];
var recurringWarning = '';
// Buttons are dependent on edit or create
// Several possibilities:
//
// 1) Somebody tries to edit, it is not recurring and not readonly -> show
// 2) Somebody tries to edit, it is recurring and not readonly -> message
// 3) Somebody tries to edit, it is readonly -> message
// 4) Somebody tries to create and it is readonly -> message
// 5) Somebody tries to create -> show
if(edit && (event.recurring != true) && (readonly === false))
{
calEvent = event;
title = LANG.plugins.davcal['edit_event'];
dialogButtons[LANG.plugins.davcal['edit']] = function() {
if(!dw_davcal__modals.checkEvents())
return;
var postArray = { };
var attachArr = new Array();
var pageid = calEvent.page;
jQuery('.dw_davcal__editevent_attachment_link').each(function() {
var attachment = jQuery(this).attr('href');
if(attachment != undefined)
{
attachArr.push(attachment);
}
});
postArray['attachments'] = attachArr;
jQuery("input.dw_davcal__editevent, textarea.dw_davcal__editevent").each(function() {
if(jQuery(this).attr('type') == 'checkbox')
{
postArray[jQuery(this).prop('name')] = jQuery(this).prop('checked') ? 1 : 0;
}
else
{
postArray[jQuery(this).prop('name')] = jQuery(this).val();
}
});
jQuery('#dw_davcal__ajaxedit').html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />');
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_davcal',
id: pageid,
page: dw_davcal__modals.page,
action: 'editEvent',
params: postArray,
sectok: JSINFO.plugin.davcal['sectok']
},
function(data)
{
var result = data['result'];
var html = data['html'];
jQuery('#dw_davcal__ajaxedit').html(html);
if(result === true)
{
jQuery('#fullCalendar').fullCalendar('refetchEvents');
dw_davcal__modals.hideEditEventDialog();
}
}
);
};
dialogButtons[LANG.plugins.davcal['delete']] = function() {
dw_davcal__modals.action = 'deleteEvent';
dw_davcal__modals.msg = LANG.plugins.davcal['really_delete_this_event'];
dw_davcal__modals.completeCb = function(data) {
var result = data['result'];
var html = data['html'];
jQuery('#dw_davcal__ajaxedit').html(html);
if(result === true)
{
jQuery('#fullCalendar').fullCalendar('refetchEvents');
dw_davcal__modals.hideEditEventDialog();
}
};
dw_davcal__modals.showDialog(true);
};
}
else if(edit && (event.recurring == true) && (readonly === false))
{
calEvent = event;
title = LANG.plugins.davcal['edit_event'];
recurringWarning = LANG.plugins.davcal['recurring_cant_edit'];
}
else if(edit && (readonly === true))
{
calEvent = event;
title = LANG.plugins.davcal['edit_event'];
recurringWarning = LANG.plugins.davcal['no_permission'];
}
else if(readonly === true)
{
calEvent.start = event;
calEvent.end = moment(event);
calEvent.start.hour(12);
calEvent.start.minute(0);
calEvent.end.hour(13);
calEvent.end.minute(0);
calEvent.allDay = false;
calEvent.recurring = false;
calEvent.title = '';
calEvent.description = '';
calEvent.id = '0';
calEvent.location = '';
calEvent.page = dw_davcal__modals.page;
title = LANG.plugins.davcal['create_new_event'];
recurringWarning = LANG.plugins.davcal['no_permission'];
}
else
{
calEvent.start = event;
calEvent.end = moment(event);
calEvent.start.hour(12);
calEvent.start.minute(0);
calEvent.end.hour(13);
calEvent.end.minute(0);
calEvent.allDay = false;
calEvent.recurring = false;
calEvent.title = '';
calEvent.description = '';
calEvent.location = '';
calEvent.id = '0';
calEvent.page = dw_davcal__modals.settings['calids'][0]['page'];
title = LANG.plugins.davcal['create_new_event'];
dialogButtons[LANG.plugins.davcal['create']] = function() {
if(!dw_davcal__modals.checkEvents())
return;
var postArray = { };
var attachArr = new Array();
var pageid = jQuery("#dw_davcal__editevent_calendar option:selected").val();
jQuery("input.dw_davcal__editevent, textarea.dw_davcal__editevent").each(function() {
if(jQuery(this).attr('type') == 'checkbox')
{
postArray[jQuery(this).prop('name')] = jQuery(this).prop('checked') ? 1 : 0;
}
else
{
postArray[jQuery(this).prop('name')] = jQuery(this).val();
}
});
jQuery('.dw_davcal__editevent_attachment_link').each(function() {
var attachment = jQuery(this).attr('href');
if(attachment != undefined)
{
attachArr.push(attachment);
}
});
postArray['attachments'] = attachArr;
jQuery('#dw_davcal__ajaxedit').html('<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />');
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_davcal',
id: pageid,
page: dw_davcal__modals.page,
action: 'newEvent',
params: postArray,
sectok: JSINFO.plugin.davcal['sectok']
},
function(data)
{
var result = data['result'];
var html = data['html'];
jQuery('#dw_davcal__ajaxedit').html(html);
if(result === true)
{
jQuery('#fullCalendar').fullCalendar('refetchEvents');
dw_davcal__modals.hideEditEventDialog();
}
}
);
};
}
dialogButtons[LANG.plugins.davcal['cancel']] = function() {
dw_davcal__modals.hideEditEventDialog();
};
dw_davcal__modals.uid = calEvent.id;
dw_davcal__modals.$editEventDialog = jQuery(document.createElement('div'))
.dialog({
autoOpen: false,
draggable: true,
// fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues
drag: function(event, ui) {
var fixPix = jQuery(document).scrollTop();
iObj = ui.position;
iObj.top = iObj.top - fixPix;
jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px");
},
title: title,
resizable: true,
buttons: dialogButtons,
})
.html(
'<div><table>' +
'<tr><td>' + LANG.plugins.davcal['calendar'] + '</td><td><select id="dw_davcal__editevent_calendar"></select></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['title'] + '</td><td><input type="text" id="dw_davcal__eventname_edit" name="eventname" class="dw_davcal__editevent"></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['description'] + '</td><td><textarea name="eventdescription" id="dw_davcal__eventdescription_edit" class="dw_davcal__editevent dw_davcal__text"></textarea></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['location'] + '</td><td><input type="text" id="dw_davcal__eventlocation_edit" name="eventlocation" class="dw_davcal__editevent"></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['from'] + '</td><td><input type="text" name="eventfrom" id="dw_davcal__eventfrom_edit" class="dw_davcal__editevent dw_davcal__date"><input type="text" name="eventfromtime" id="dw_davcal__eventfromtime_edit" class="dw_davcal__editevent dw_davcal__time"></td></tr>' +
'<tr><td>' + LANG.plugins.davcal['to'] + '</td><td><input type="text" name="eventto" id="dw_davcal__eventto_edit" class="dw_davcal__editevent dw_davcal__date"><input type="text" name="eventtotime" id="dw_davcal__eventtotime_edit" class="dw_davcal__editevent dw_davcal__time"></td></tr>' +
'<tr><td colspan="2"><input type="checkbox" name="allday" id="dw_davcal__allday_edit" class="dw_davcal__editevent">' + LANG.plugins.davcal['allday'] + '</td></tr>' +
'<tr><td>' + LANG.plugins.davcal['attachments'] + '</td><td><table id="dw_davcal__editevent_attachments"><tbody><tr><td><input type="text" id="dw_davcal__editevent_attachment" value="http://"></td><td><a href="#" id="dw_davcal__editevent_attach">' + LANG.plugins.davcal['add_attachment'] + '</a></td></tr></tbody></table></td></tr>' +
'</table>' +
recurringWarning +
'<input type="hidden" name="uid" id="dw_davcal__uid_edit" class="dw_davcal__editevent">' +
'<input type="hidden" name="detectedtz" id="dw_davcal__tz_edit" class="dw_davcal__editevent">' +
'<input type="hidden" name="currenttz" id="dw_davcal__currenttz_edit" class="dw_davcal__editevent">' +
'</div>' +
'<div id="dw_davcal__ajaxedit"></div>'
)
.parent()
.attr('id','dw_davcal__edit')
.show()
.appendTo('.dokuwiki:first');
jQuery('#dw_davcal__edit').position({
my: "center",
at: "center",
of: window
});
// Populate calendar dropdown
var $dropdown = jQuery("#dw_davcal__editevent_calendar");
for(var i=0; i<dw_davcal__modals.settings['calids'].length; i++)
{
var sel = '';
// When creating an event, do not show read-only calendars
if(!edit && (dw_davcal__modals.settings['calids'][i]['write'] === false))
continue;
if(calEvent.page == dw_davcal__modals.settings['calids'][i]['page'])
sel = ' selected="selected"';
$dropdown.append('<option value="' + dw_davcal__modals.settings['calids'][i]['page'] + '"' + sel + '>' + dw_davcal__modals.settings['calids'][i]['name'] + '</option>');
}
if(edit || (dw_davcal__modals.settings['calids'].length < 1))
{
$dropdown.prop('disabled', true);
}
// Set up existing/predefined values
jQuery('#dw_davcal__tz_edit').val(dw_davcal__modals.detectedTz);
jQuery('#dw_davcal__currenttz_edit').val(dw_davcal__modals.currentTz);
jQuery('#dw_davcal__uid_edit').val(calEvent.id);
jQuery('#dw_davcal__eventname_edit').val(calEvent.title);
jQuery('#dw_davcal__eventlocation_edit').val(calEvent.location);
jQuery('#dw_davcal__eventfrom_edit').val(calEvent.start.format('YYYY-MM-DD'));
jQuery('#dw_davcal__eventfromtime_edit').val(calEvent.start.format('HH:mm'));
jQuery('#dw_davcal__eventdescription_edit').val(calEvent.description);
if(calEvent.attachments && (calEvent.attachments !== null))
{
for(var i=0; i<calEvent.attachments.length; i++)
{
var url = calEvent.attachments[i];
var row = '<tr><td><a href="' + url + '" class="dw_davcal__editevent_attachment_link">' + url + '</a></td><td><a class="deleteLink" href="#">' + LANG.plugins.davcal['delete'] + '</a></td></tr>';
jQuery('#dw_davcal__editevent_attachments > tbody:last').append(row);
}
}
dw_davcal__modals.attachAttachmentDeleteHandlers();
jQuery('#dw_davcal__editevent_attach').on("click", function(e)
{
e.preventDefault();
var url = jQuery('#dw_davcal__editevent_attachment').val();
if(url == '')
return false;
jQuery('#dw_davcal__editevent_attachment').val('http://');
var row = '<tr><td><a href="' + url + '" class="dw_davcal__editevent_attachment_link">' + url + '</a></td><td><a class="deleteLink" href="#">' + LANG.plugins.davcal['delete'] + '</a></td></tr>';
jQuery('#dw_davcal__editevent_attachments > tbody:last').append(row);
dw_davcal__modals.attachAttachmentDeleteHandlers();
return false;
});
if(calEvent.allDay && (calEvent.end === null))
{
jQuery('#dw_davcal__eventto_edit').val(calEvent.start.format('YYYY-MM-DD'));
jQuery('#dw_davcal__eventtotime_edit').val(calEvent.start.format('HH:mm'));
}
else if(calEvent.allDay)
{
endEvent = moment(calEvent.end);
endEvent.subtract(1, 'days');
jQuery('#dw_davcal__eventto_edit').val(endEvent.format('YYYY-MM-DD'));
jQuery('#dw_davcal__eventotime_edit').val(endEvent.format('HH:mm'));
}
else
{
jQuery('#dw_davcal__eventto_edit').val(calEvent.end.format('YYYY-MM-DD'));
jQuery('#dw_davcal__eventtotime_edit').val(calEvent.end.format('HH:mm'));
}
jQuery('#dw_davcal__allday_edit').prop('checked', calEvent.allDay);
// attach event handlers
jQuery('#dw_davcal__edit .ui-dialog-titlebar-close').click(function(){
dw_davcal__modals.hideEditEventDialog();
});
jQuery('#dw_davcal__eventfrom_edit').datetimepicker({format:'YYYY-MM-DD',
formatDate:'YYYY-MM-DD',
datepicker: true,
timepicker: false,
lang: JSINFO.plugin.davcal['language'],
});
jQuery('#dw_davcal__eventfromtime_edit').datetimepicker({format:'HH:mm',
formatTime:'HH:mm',
datepicker: false,
timepicker: true,
lang: JSINFO.plugin.davcal['language'],
step: 15});
jQuery('#dw_davcal__eventto_edit').datetimepicker({format:'YYYY-MM-DD',
formatDate:'YYYY-MM-DD',
datepicker: true,
timepicker: false,
lang: JSINFO.plugin.davcal['language'],
});
jQuery('#dw_davcal__eventtotime_edit').datetimepicker({format:'HH:mm',
formatTime:'HH:mm',
datepicker: false,
timepicker: true,
lang: JSINFO.plugin.davcal['language'],
step:15});
jQuery('#dw_davcal__allday_edit').change(function() {
if(jQuery(this).is(":checked"))
{
jQuery('#dw_davcal__eventfromtime_edit').prop('readonly', true);
jQuery('#dw_davcal__eventtotime_edit').prop('readonly', true);
}
else
{
jQuery('#dw_davcal__eventfromtime_edit').prop('readonly', false);
jQuery('#dw_davcal__eventtotime_edit').prop('readonly', false);
}
});
jQuery('#dw_davcal__allday_edit').change();
},
/**
* Attach handles to delete the attachments to all 'delete' links
*/
attachAttachmentDeleteHandlers: function()
{
jQuery("#dw_davcal__editevent_attachments .deleteLink").on("click", function(e)
{
e.preventDefault();
var tr = jQuery(this).closest('tr');
tr.css("background-color", "#FF3700");
tr.fadeOut(400, function()
{
tr.remove();
});
return false;
});
},
/**
* Show an info/confirmation dialog
* @param {Object} confirm Whether a confirmation dialog (true) or an info dialog (false) is requested
*/
showDialog : function(confirm)
{
if(dw_davcal__modals.$confirmDialog)
return;
var dialogButtons = {};
var title = '';
if(confirm)
{
title = LANG.plugins.davcal['confirmation'];
var pageid = jQuery("#dw_davcal__editevent_calendar option:selected").val();
dialogButtons[LANG.plugins.davcal['yes']] = function() {
jQuery.post(
DOKU_BASE + 'lib/exe/ajax.php',
{
call: 'plugin_davcal',
id: pageid,
page: dw_davcal__modals.page,
action: dw_davcal__modals.action,
params: {
uid: dw_davcal__modals.uid
},
sectok: JSINFO.plugin.davcal['sectok']
},
function(data)
{
dw_davcal__modals.completeCb(data);
}
);
dw_davcal__modals.hideDialog();
};
dialogButtons[LANG.plugins.davcal['cancel']] = function() {
dw_davcal__modals.hideDialog();
};
}
else
{
title = LANG.plugins.davcal['info'];
dialogButtons[LANG.plugins.davcal['ok']] = function() {
dw_davcal__modals.hideDialog();
};
}
dw_davcal__modals.$dialog = jQuery(document.createElement('div'))
.dialog({
autoOpen: false,
draggable: true,
//fix for dragging: http://stackoverflow.com/questions/17247486/jquery-ui-dialog-dragging-issues
drag: function(event, ui) {
var fixPix = jQuery(document).scrollTop();
iObj = ui.position;
iObj.top = iObj.top - fixPix;
jQuery(this).closest(".ui-dialog").css("top", iObj.top + "px");
},
title: title,
resizable: true,
buttons: dialogButtons,
})
.html(
'<div>' + dw_davcal__modals.msg + '</div>'
)
.parent()
.attr('id','dw_davcal__confirm')
.show()
.appendTo('.dokuwiki:first');
jQuery('#dw_davcal__confirm').position({
my: "center",
at: "center",
of: window
});
// attach event handlers
jQuery('#dw_davcal__confirm .ui-dialog-titlebar-close').click(function(){
dw_davcal__modals.hideDialog();
});
},
/**
* Hide the edit event dialog
*/
hideEditEventDialog : function() {
dw_davcal__modals.$editEventDialog.empty();
dw_davcal__modals.$editEventDialog.remove();
dw_davcal__modals.$editEventDialog = null;
},
/**
* Hide the confirm/info dialog
*/
hideDialog: function() {
dw_davcal__modals.$dialog.empty();
dw_davcal__modals.$dialog.remove();
dw_davcal__modals.$dialog = null;
},
/**
* Hide the settings dialog
*/
hideSettingsDialog: function() {
dw_davcal__modals.$settingsDialog.empty();
dw_davcal__modals.$settingsDialog.remove();
dw_davcal__modals.$settingsDialog = null;
}
};
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Dec 24, 9:16 AM (1 d, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
531492
Default Alt Text
(46 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment