add event action: duplicate events

This commit is contained in:
rabuzarus 2017-10-15 17:30:28 +02:00
parent dd0e75628a
commit 4584670af4
4 changed files with 37 additions and 23 deletions

View File

@ -591,6 +591,7 @@ function process_events($arr) {
// is a real event (no bithdays)
if (local_user() && local_user() == $rr['uid'] && $rr['type'] == 'event') {
$edit = ((! $rr['cid']) ? array(System::baseUrl() . '/events/event/' . $rr['id'], t('Edit event'), '', '') : null);
$copy = ((! $rr['cid']) ? array(System::baseUrl() . '/events/copy/' . $rr['id'], t('Duplicate event'), '', '') : null);
$drop = array(System::baseUrl() . '/events/drop/' . $rr['id'], t('Delete event'), '', '');
}
@ -614,6 +615,7 @@ function process_events($arr) {
'd' => $d,
'edit' => $edit,
'drop' => $drop,
'copy' => $copy,
'is_first' => $is_first,
'item' => $rr,
'html' => $html,

View File

@ -250,6 +250,10 @@ function events_content(App $a) {
$mode = 'drop';
$event_id = intval($a->argv[2]);
}
if ($a->argc > 2 && $a->argv[1] == 'copy') {
$mode = 'copy';
$event_id = intval($a->argv[2]);
}
if ($a->argv[1] === 'new') {
$mode = 'new';
$event_id = 0;
@ -399,7 +403,7 @@ function events_content(App $a) {
return $o;
}
if ($mode === 'edit' && $event_id) {
if (($mode === 'edit' || $mode === 'copy') && $event_id) {
$r = q("SELECT * FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($event_id),
intval(local_user())
@ -410,7 +414,7 @@ function events_content(App $a) {
}
// Passed parameters overrides anything found in the DB
if ($mode === 'edit' || $mode === 'new') {
if ($mode === 'edit' || $mode === 'new' || $mode === 'copy') {
if (!x($orig_event)) {$orig_event = array();}
// In case of an error the browser is redirected back here, with these parameters filled in with the previous values
if (x($_REQUEST, 'nofinish')) {$orig_event['nofinish'] = $_REQUEST['nofinish'];}
@ -470,10 +474,17 @@ function events_content(App $a) {
require_once 'include/acl_selectors.php' ;
if ($mode === 'new') {
if ($mode === 'new' || $mode === 'copy') {
$acl = (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user)));
}
// If we copy an old event, we need to remove the ID and URI
// from the orgiginal event.
if ($mode === 'copy') {
$eid = 0;
$uri = '';
}
$tpl = get_markup_template('event_form.tpl');
$o .= replace_macros($tpl,array(

View File

@ -1,6 +1,6 @@
$(document).ready(function() {
// go to the permissions tab if the checkbox is checked
$('body').on("change", "#id_share", function() {
$(document).ready(function() {
// Go to the permissions tab if the checkbox is checked.
$('body').on("click", "#id_share", function() {
if ($('#id_share').is(':checked') && !( $('#id_share').attr("disabled"))) {
$('#acl-wrapper').show();
$("a#event-perms-lnk").parent("li").show();
@ -13,12 +13,12 @@ $(document).ready(function() {
}
}).trigger('change');
// disable the finish time input if the user disable it
// Disable the finish time input if the user disable it.
$('body').on("change", "#id_nofinish", function() {
enableDisableFinishDate()
}).trigger('change');
// js for the permission sextion
// JS for the permission section.
$('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
var selstr;
$('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
@ -31,20 +31,20 @@ $(document).ready(function() {
}).trigger('change');
// Change the event nav menu.tabs on click
// Change the event nav menu.tabs on click.
$("body").on("click", "#event-nav > li > a", function(e){
e.preventDefault();
toggleEventNav(this);
});
// this is experimental. We maybe can make use of it to inject
// some js code while the event modal opens
// This is experimental. We maybe can make use of it to inject
// some js code while the event modal opens.
//$('body').on('show.bs.modal', function () {
// enableDisableFinishDate();
//});
// clear some elements (e.g. the event-preview container) when
// selecting a event nav link so it don't appear more than once
// Clear some elements (e.g. the event-preview container) when
// selecting a event nav link so it don't appear more than once.
$('body').on("click", "#event-nav a", function(e) {
$("#event-preview").empty();
e.preventDefault();
@ -53,7 +53,7 @@ $(document).ready(function() {
});
// Load the html of the actual event and incect the output to the
// event-edit section
// event-edit section.
function doEventPreview() {
$('#event-edit-preview').val(1);
$.post('events',$('#event-edit-form').serialize(), function(data) {
@ -63,7 +63,7 @@ function doEventPreview() {
}
// this function load the content of the edit url into a modal
// This function load the content of the edit url into a modal.
function eventEdit(url) {
var char = qOrAmp(url);
url = url + char + 'mode=none';
@ -76,8 +76,8 @@ function eventEdit(url) {
});
}
// the following functions show/hide the specific event-edit content
// in dependence of the selected nav
// The following functions show/hide the specific event-edit content
// in dependence of the selected nav.
function eventAclActive() {
$("#event-edit-wrapper, #event-preview, #event-desc-wrapper").hide();
$("#event-acl-wrapper").show();
@ -94,8 +94,8 @@ function eventEditActive() {
$("#event-acl-wrapper, #event-preview, #event-desc-wrapper").hide();
$("#event-edit-wrapper").show();
//make sure jot text does have really the active class (we do this because there are some
// other events which trigger jot text
// Make sure jot text does have really the active class (we do this because there are some
// other events which trigger jot text.
toggleEventNav($("#event-edit-lnk"));
}
@ -104,17 +104,17 @@ function eventDescActive() {
$("#event-desc-wrapper").show();
}
// Give the active "event-nav" list element the class "active"
// Give the active "event-nav" list element the class "active".
function toggleEventNav (elm) {
// select all li of #event-nav and remove the active class
// Select all li of #event-nav and remove the active class.
$(elm).closest("#event-nav").children("li").removeClass("active");
// add the active class to the parent of the link which was selected
// Add the active class to the parent of the link which was selected.
$(elm).parent("li").addClass("active");
}
// disable the input for the finish date if it is not available
// Disable the input for the finish date if it is not available.
function enableDisableFinishDate() {
if( $('#id_nofinish').is(':checked'))
$('#id_finish_text').prop("disabled", true);

View File

@ -18,6 +18,7 @@
<div class="event-buttons pull-right">
{{if $event.edit}}<button type="button" class="btn" onclick="eventEdit('{{$event.edit.0}}')" title="{{$event.edit.1}}"><i class="fa fa-pencil" aria-hidden="true"></i></button>{{/if}}
{{if $event.copy}}<button type="button" class="btn" onclick="eventEdit('{{$event.copy.0}}')" title="{{$event.copy.1}}"><i class="fa fa-files-o" aria-hidden="true"></i></button>{{/if}}
{{if $event.drop}}<a href="{{$event.drop.0}}" onclick="return confirmDelete();" title="{{$event.drop.1}}" class="drop-event-link btn"><i class="fa fa-trash-o" aria-hidden="true"></i></a>{{/if}}
{{if $event.item.plink}}<a href="{{$event.plink.0}}" title="{{$event.plink.1}}" class="plink-event-link btn "><i class="fa fa-external-link" aria-hidden="true"></i></a>{{/if}}
</div>