From 356414846b473c217ed0abf2157623b307a59525 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 17 Oct 2016 19:17:11 +0000 Subject: [PATCH 1/8] Check for duplicated postings from connectors --- mod/item.php | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/mod/item.php b/mod/item.php index e9056d08cc..a28cc90d1b 100644 --- a/mod/item.php +++ b/mod/item.php @@ -175,6 +175,19 @@ function item_post(&$a) { $app = ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : ''); $extid = ((x($_REQUEST,'extid')) ? strip_tags($_REQUEST['extid']) : ''); + // Check for multiple posts with the same message id (when the post was created via API) + if (($message_id != "") AND ($profile_uid != 0)) { + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($message_id), + intval($profile_uid) + ); + + if(count($r)) { + logger("Message with URI ".$message_id." already exists for user ".$profile_uid, LOGGER_DEBUG); + return; + } + } + $allow_moderated = false; // here is where we are going to check for permission to post a moderated comment. @@ -992,16 +1005,35 @@ function item_post(&$a) { // Insert an item entry for UID=0 for global entries // We have to remove or change some data before that, // so that the post appear like a regular received post. - unset($datarray['self']); - unset($datarray['wall']); - unset($datarray['origin']); + // Additionally there is some data that isn't a database field. + $arr = $datarray; - if (in_array($datarray['type'], array("net-comment", "wall-comment"))) - $datarray['type'] = 'remote-comment'; - elseif ($datarray['type'] == 'wall') - $datarray['type'] = 'remote'; + $arr['app'] = $arr['source']; + unset($arr['source']); - add_shadow_entry($datarray); + unset($arr['self']); + unset($arr['wall']); + unset($arr['origin']); + unset($arr['api_source']); + unset($arr['message_id']); + unset($arr['profile_uid']); + unset($arr['post_id']); + unset($arr['dropitems']); + unset($arr['commenter']); + unset($arr['return']); + unset($arr['preview']); + unset($arr['post_id_random']); + unset($arr['emailcc']); + unset($arr['pubmail_enable']); + unset($arr['category']); + unset($arr['jsreload']); + + if (in_array($arr['type'], array("net-comment", "wall-comment"))) + $arr['type'] = 'remote-comment'; + elseif ($arr['type'] == 'wall') + $arr['type'] = 'remote'; + + add_shadow_entry($arr); } // This is a real juggling act on shared hosting services which kill your processes From 3358b5543378ec433039d991f834db69c5b61685 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 21 Oct 2016 11:29:23 -0400 Subject: [PATCH 2/8] [frio] Fix unescaped calendar Javascript strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In French, “today” is “aujourd’hui”, which breaks the current calendar Javascript strings quoted declaration. This PR adds quote escaping to the i18n strings. --- view/theme/frio/templates/event_head.tpl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/view/theme/frio/templates/event_head.tpl b/view/theme/frio/templates/event_head.tpl index 0bbc4bd72e..cb07f3de1d 100644 --- a/view/theme/frio/templates/event_head.tpl +++ b/view/theme/frio/templates/event_head.tpl @@ -15,18 +15,18 @@ aStr.dayNames = ['{{$i18n.Sunday}}','{{$i18n.Monday}}','{{$i18n.Tuesday}}','{{$i18n.Wednesday}}','{{$i18n.Thursday}}','{{$i18n.Friday}}','{{$i18n.Saturday}}']; aStr.dayNamesShort = ['{{$i18n.Sun}}','{{$i18n.Mon}}','{{$i18n.Tue}}','{{$i18n.Wed}}','{{$i18n.Thu}}','{{$i18n.Fri}}','{{$i18n.Sat}}']; - aStr.firstDay = '{{$i18n.firstDay}}'; - aStr.today = '{{$i18n.today}}'; - aStr.month = '{{$i18n.month}}'; - aStr.week = '{{$i18n.week}}'; - aStr.day = '{{$i18n.day}}'; + aStr.firstDay = '{{$i18n.firstDay|escape:'quotes'}}'; + aStr.today = '{{$i18n.today|escape:'quotes'}}'; + aStr.month = '{{$i18n.month|escape:'quotes'}}'; + aStr.week = '{{$i18n.week|escape:'quotes'}}'; + aStr.day = '{{$i18n.day|escape:'quotes'}}'; - aStr.allday = '{{$i18n.allday}}'; - aStr.noevent = '{{$i18n.noevent}}'; + aStr.allday = '{{$i18n.allday|escape:'quotes'}}'; + aStr.noevent = '{{$i18n.noevent|escape:'quotes'}}'; - aStr.dtstartLabel = '{{$i18n.dtstart_label}}'; - aStr.dtendLabel = '{{$i18n.dtend_label}}'; - aStr.locationLabel = '{{$i18n.location_label}}'; + aStr.dtstartLabel = '{{$i18n.dtstart_label|escape:'quotes'}}'; + aStr.dtendLabel = '{{$i18n.dtend_label|escape:'quotes'}}'; + aStr.locationLabel = '{{$i18n.location_label|escape:'quotes'}}'; var moduleUrl = '{{$module_url}}'; var modparams = {{$modparams}} @@ -68,7 +68,7 @@ }); - $(document).ready(function() { + $(document).ready(function() { $('.comment-edit-bb').hide(); }); {{else}} @@ -76,7 +76,7 @@ {{/if}} - $(document).ready(function() { + $(document).ready(function() { {{if $editselect = 'none'}} $("#comment-edit-text-desc").bbco_autocomplete('bbcode'); {{/if}} From c340d590f7a9344353aaf57a9d6da00c872cde94 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 21 Oct 2016 14:14:20 -0400 Subject: [PATCH 3/8] Fix calendar strings escape - Fix base event_head.tpl file - Fix the rest of frio strings --- view/templates/event_head.tpl | 86 ++++++++++++++++++------ view/theme/frio/templates/event_head.tpl | 51 ++++++++++++-- 2 files changed, 110 insertions(+), 27 deletions(-) diff --git a/view/templates/event_head.tpl b/view/templates/event_head.tpl index 88147e840d..5fd4cd1330 100644 --- a/view/templates/event_head.tpl +++ b/view/templates/event_head.tpl @@ -11,7 +11,7 @@ function(data){ $.colorbox({html:data}); } - ); + ); } function doEventPreview() { @@ -33,25 +33,67 @@ $(document).ready(function() { $('#events-calendar').fullCalendar({ - firstDay: {{$i18n.firstDay}}, - monthNames: ['{{$i18n.January}}','{{$i18n.February}}','{{$i18n.March}}','{{$i18n.April}}','{{$i18n.May}}','{{$i18n.June}}','{{$i18n.July}}','{{$i18n.August}}','{{$i18n.September}}','{{$i18n.October}}','{{$i18n.November}}','{{$i18n.December}}'], - monthNamesShort: ['{{$i18n.Jan}}','{{$i18n.Feb}}','{{$i18n.Mar}}','{{$i18n.Apr}}','{{$i18n.May}}','{{$i18n.Jun}}','{{$i18n.Jul}}','{{$i18n.Aug}}','{{$i18n.Sep}}','{{$i18n.Oct}}','{{$i18n.Nov}}','{{$i18n.Dec}}'], - dayNames: ['{{$i18n.Sunday}}','{{$i18n.Monday}}','{{$i18n.Tuesday}}','{{$i18n.Wednesday}}','{{$i18n.Thursday}}','{{$i18n.Friday}}','{{$i18n.Saturday}}'], - dayNamesShort: ['{{$i18n.Sun}}','{{$i18n.Mon}}','{{$i18n.Tue}}','{{$i18n.Wed}}','{{$i18n.Thu}}','{{$i18n.Fri}}','{{$i18n.Sat}}'], - allDayText: '{{$i18n.allday}}', - noEventsMessage: '{{$i18n.noevent}}', + firstDay: '{{$i18n.firstDay|escape:'quotes'}}', + monthNames: [ + '{{$i18n.January|escape:'quotes'}}', + '{{$i18n.February|escape:'quotes'}}', + '{{$i18n.March|escape:'quotes'}}', + '{{$i18n.April|escape:'quotes'}}', + '{{$i18n.May|escape:'quotes'}}', + '{{$i18n.June|escape:'quotes'}}', + '{{$i18n.July|escape:'quotes'}}', + '{{$i18n.August|escape:'quotes'}}', + '{{$i18n.September|escape:'quotes'}}', + '{{$i18n.October|escape:'quotes'}}', + '{{$i18n.November|escape:'quotes'}}', + '{{$i18n.December|escape:'quotes'}}' + ], + monthNamesShort: [ + '{{$i18n.Jan|escape:'quotes'}}', + '{{$i18n.Feb|escape:'quotes'}}', + '{{$i18n.Mar|escape:'quotes'}}', + '{{$i18n.Apr|escape:'quotes'}}', + '{{$i18n.May|escape:'quotes'}}', + '{{$i18n.Jun|escape:'quotes'}}', + '{{$i18n.Jul|escape:'quotes'}}', + '{{$i18n.Aug|escape:'quotes'}}', + '{{$i18n.Sep|escape:'quotes'}}', + '{{$i18n.Oct|escape:'quotes'}}', + '{{$i18n.Nov|escape:'quotes'}}', + '{{$i18n.Dec|escape:'quotes'}}' + ], + dayNames: [ + '{{$i18n.Sunday|escape:'quotes'}}', + '{{$i18n.Monday|escape:'quotes'}}', + '{{$i18n.Tuesday|escape:'quotes'}}', + '{{$i18n.Wednesday|escape:'quotes'}}', + '{{$i18n.Thursday|escape:'quotes'}}', + '{{$i18n.Friday|escape:'quotes'}}', + '{{$i18n.Saturday|escape:'quotes'}}' + ], + dayNamesShort: [ + '{{$i18n.Sun|escape:'quotes'}}', + '{{$i18n.Mon|escape:'quotes'}}', + '{{$i18n.Tue|escape:'quotes'}}', + '{{$i18n.Wed|escape:'quotes'}}', + '{{$i18n.Thu|escape:'quotes'}}', + '{{$i18n.Fri|escape:'quotes'}}', + '{{$i18n.Sat|escape:'quotes'}}' + ], + allDayText: '{{$i18n.allday|escape:'quotes'}}', + noEventsMessage: '{{$i18n.noevent|escape:'quotes'}}', buttonText: { - today: '{{$i18n.today}}', - month: '{{$i18n.month}}', - week: '{{$i18n.week}}', - day: '{{$i18n.day}}' + today: '{{$i18n.today|escape:'quotes'}}', + month: '{{$i18n.month|escape:'quotes'}}', + week: '{{$i18n.week|escape:'quotes'}}', + day: '{{$i18n.day|escape:'quotes'}}' }, events: '{{$baseurl}}{{$module_url}}/json/', header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay' - }, + }, timeFormat: 'H(:mm)', eventClick: function(calEvent, jsEvent, view) { showEvent(calEvent.id); @@ -61,7 +103,7 @@ $('td.fc-day').dblclick(function() { window.location.href='/events/new?start='+$(this).data('date'); }); } }, - + eventRender: function(event, element, view) { //console.log(view.name); if (event.item['author-name']==null) return; @@ -94,9 +136,9 @@ break; } } - + }) - + // center on date var args=location.href.replace(baseurl,"").split("/"); {{if $modparams == 2}} @@ -107,12 +149,12 @@ if (args.length>=4) { $("#events-calendar").fullCalendar('gotoDate',args[2] , args[3]-1); } - {{/if}} - + {{/if}} + // show event popup var hash = location.hash.split("-") if (hash.length==2 && hash[0]=="#link") showEvent(hash[1]); - + }); @@ -152,7 +194,7 @@ }); - $(document).ready(function() { + $(document).ready(function() { $('.comment-edit-bb').hide(); }); {{else}} @@ -160,14 +202,14 @@ {{/if}} - $(document).ready(function() { + $(document).ready(function() { {{if $editselect = 'none'}} $("#comment-edit-text-desc").bbco_autocomplete('bbcode'); {{/if}} $('#id_share').change(function() { - if ($('#id_share').is(':checked')) { + if ($('#id_share').is(':checked')) { $('#acl-wrapper').show(); } else { diff --git a/view/theme/frio/templates/event_head.tpl b/view/theme/frio/templates/event_head.tpl index cb07f3de1d..b7a531355e 100644 --- a/view/theme/frio/templates/event_head.tpl +++ b/view/theme/frio/templates/event_head.tpl @@ -9,11 +9,52 @@ - {{if $editselect != 'none'}} -