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

View file

@ -250,6 +250,10 @@ function events_content(App $a) {
$mode = 'drop'; $mode = 'drop';
$event_id = intval($a->argv[2]); $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') { if ($a->argv[1] === 'new') {
$mode = 'new'; $mode = 'new';
$event_id = 0; $event_id = 0;
@ -399,7 +403,7 @@ function events_content(App $a) {
return $o; 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", $r = q("SELECT * FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($event_id), intval($event_id),
intval(local_user()) intval(local_user())
@ -410,7 +414,7 @@ function events_content(App $a) {
} }
// Passed parameters overrides anything found in the DB // 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();} 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 // 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'];} if (x($_REQUEST, 'nofinish')) {$orig_event['nofinish'] = $_REQUEST['nofinish'];}
@ -470,10 +474,17 @@ function events_content(App $a) {
require_once 'include/acl_selectors.php' ; 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))); $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'); $tpl = get_markup_template('event_form.tpl');
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(

View file

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

View file

@ -18,6 +18,7 @@
<div class="event-buttons pull-right"> <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.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.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}} {{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> </div>