Commit 511f54fa authored by Karl Hasselbring's avatar Karl Hasselbring
Browse files

Merge branch 'development' into 816-mobile-ansicht-optimieren

parents 96f0cdcc 0f607204
<?php
namespace App\Http\Controllers;
use File;
use Illuminate\Http\Request;
use PiwikTracker;
use Response;
class ImageController extends Controller
{
public function generateImage(Request $request)
{
/*
#Piwik Code
PiwikTracker::$URL = 'http://piwik.metager3.de';
$piwikTracker = new PiwikTracker($idSite = 1);
// Cookies ausschalten
$piwikTracker->disableCookieSupport();
$piwikTracker->deleteCookies();
$site = $request->input('site', '/');
// Sendet Tracker request per http
$piwikTracker->doTrackPageView($site);
*/
$path = public_path() . '/img/1px.png';
$fileType = File::type($path);
$response = Response::make(File::get($path), 200);
$response->header('Content-Type', $fileType);
return $response;
}
}
......@@ -256,7 +256,9 @@ class MetaGer
$this->results = $newResults;
#Adgoal Implementation
$this->results = $this->parseAdgoal($this->results);
if (!$this->apiAuthorized) {
$this->results = $this->parseAdgoal($this->results);
}
# Human Verification
$this->results = $this->humanVerification($this->results);
......@@ -1371,12 +1373,10 @@ class MetaGer
IP-Adress older than one day stored on our servers. (Except the ones who got banned in that short period of course) ;-)
*/
$logEntry .= " ip=" . $this->request->ip();
$logEntry .= " pid=" . getmypid();
$logEntry .= " ref=" . $this->request->header('Referer');
$logEntry .= " time=" . round((microtime(true) - $this->starttime), 2) . " serv=" . $this->fokus;
$logEntry .= " interface=" . LaravelLocalization::getCurrentLocale();
$logEntry .= " sprachfilter=" . $this->lang;
$logEntry .= " search=" . $this->eingabe;
# 2 Arten von Logs in einem wird die Anzahl der Abfragen an eine Suchmaschine gespeichert und in der anderen
# die Anzahl, wie häufig diese Ergebnisse geliefert hat.
......
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"require": {
......@@ -13,7 +16,6 @@
"laravelcollective/html": "^5.2.0",
"mcamara/laravel-localization": "^1.1",
"mews/captcha": "^2.2",
"piwik/piwik-php-tracker": "^1.0",
"predis/predis": "^1.1"
},
"require-dev": {
......@@ -40,8 +42,7 @@
},
"extra": {
"laravel": {
"dont-discover": [
]
"dont-discover": []
}
},
"scripts": {
......@@ -61,4 +62,4 @@
"sort-packages": true,
"optimize-autoloader": true
}
}
}
\ No newline at end of file
......@@ -4300,7 +4300,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.1.1",
......@@ -4375,6 +4376,7 @@
"version": "2.10.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"hoek": "2.x.x"
}
......@@ -4544,6 +4546,7 @@
"version": "1.0.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"graceful-fs": "^4.1.2",
"inherits": "~2.0.0",
......@@ -4611,7 +4614,8 @@
"graceful-fs": {
"version": "4.1.11",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"har-schema": {
"version": "1.0.5",
......@@ -4798,12 +4802,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -5093,6 +5099,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......
......@@ -16,7 +16,7 @@ $(document).ready(function () {
var search = getMetaTag('q') || '';
var locale = getMetaTag('l') || 'de';
// loadQuicktips(search, locale, sprueche) // load the quicktips
// loadQuicktips(search, locale, sprueche) // load the quicktips
});
/*
......@@ -25,11 +25,11 @@ function readLocaleFromUrl (defaultLocale) {
}
*/
function getURLParameter (name, defaultValue) {
function getURLParameter(name, defaultValue) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || defaultValue;
}
function getMetaTag (name) {
function getMetaTag(name) {
if (typeof $('meta[name="' + name + '"')[0] !== 'undefined') {
return $('meta[name="' + name + '"')[0].content || null;
} else {
......@@ -37,12 +37,12 @@ function getMetaTag (name) {
}
}
function activateJSOnlyContent () {
function activateJSOnlyContent() {
$('#searchplugin').removeClass('hide');
$('.js-only').removeClass('js-only');
}
function tabs () {
function tabs() {
$('#foki > li.tab-selector > a').each(function () {
if ($(this).attr('target') != '_blank') {
$(this).attr('href', '#' + $(this).attr('aria-controls'));
......@@ -68,10 +68,9 @@ function tabs () {
$('#search-delete-btn').removeClass('hidden');
}
function getDocumentReadyForUse (fokus, custom) {
function getDocumentReadyForUse(fokus, custom) {
if (typeof custom == 'undefined') custom = false;
activateJSOnlyContent();
clickLog();
popovers();
if (fokus === 'bilder') imageLoader();
if (custom) initialLoadContent(fokus);
......@@ -85,15 +84,15 @@ function getDocumentReadyForUse (fokus, custom) {
addListeners();
}
function addListeners () {
function addListeners() {
$('#search-delete-btn').click(resetSearchbar);
}
function resetSearchbar () {
function resetSearchbar() {
$('.search-input input').val('').focus();
}
function pluginInfo () {
function pluginInfo() {
if (localStorage) {
if (localStorage.getItem('pluginInfo') == 'off') $('#searchplugin').css('display', 'none');
$('#searchplugin').on('close.bs.alert', function () {
......@@ -106,7 +105,7 @@ function pluginInfo () {
}
}
function theme () {
function theme() {
if (localStorage) {
var theme = localStorage.getItem('theme');
if (theme != null) {
......@@ -120,20 +119,7 @@ function theme () {
}
}
function clickLog () {
$('.result a.title, .result div.link-link a').off();
$('.result a.title, .result div.link-link a').click(function () {
$.get('/clickstats', {
i: $('meta[name=p]').attr('content'),
s: $(this).attr('data-hoster'),
q: $('meta[name=q]').attr('content'),
p: $(this).attr('data-count'),
url: $(this).attr('href')
});
});
}
function botProtection () {
function botProtection() {
$('.result').find('a').click(function () {
var link = $(this).attr('href');
var newtab = false;
......@@ -143,7 +129,7 @@ function botProtection () {
$.ajax({
url: '/img/cat.jpg',
type: 'post',
data: { mm: $('meta[name=mm]').attr('content')},
data: { mm: $('meta[name=mm]').attr('content') },
timeout: 2000
})
.always(function () {
......@@ -157,7 +143,7 @@ function botProtection () {
});
}
function popovers () {
function popovers() {
$('[data-toggle=popover]').each(function (e) {
$(this).popover({
// html : true,
......@@ -167,14 +153,14 @@ function popovers () {
});
}
function pagination () {
function pagination() {
$('.pagination li:not(.active) > a').attr('href', '#');
$('.pagination li.disabled > a').removeAttr('href');
$('.pagination li:not(.active) > a').off();
$('.pagination li:not(.active) > a').click(paginationHandler);
}
function paginationHandler () {
function paginationHandler() {
var link = $(this).attr('data-href');
if (link.length == 0) {
return;
......@@ -191,7 +177,7 @@ function paginationHandler () {
});
}
function imageLoader () {
function imageLoader() {
if (typeof $('#container').masonry == 'undefined') {
return;
}
......@@ -206,7 +192,7 @@ function imageLoader () {
});
}
function eliminateHost (host) {
function eliminateHost(host) {
$('.result:not(.ad)').each(function (e) {
var host2 = $(this).find('.link-link > a').attr('data-host');
if (host2.indexOf(host) === 0) {
......@@ -215,7 +201,7 @@ function eliminateHost (host) {
});
}
function fokiChanger () {
function fokiChanger() {
$('#fokiChanger ul > li').click(function () {
document.location.href = $(this).attr('data-href');
});
......@@ -291,7 +277,7 @@ function fokiChanger () {
/**
* Loads the content for a given fokus
*/
function initialLoadContent (fokus) {
function initialLoadContent(fokus) {
var link = $('#' + fokus + 'TabSelector a').attr('data-href');
$.get(link, function (data) {
$('#' + fokus).html(data);
......
......@@ -246,11 +246,11 @@ summary {
.inlink {
&:after {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font: normal normal normal 14px/1 'Font Awesome 5 Free';
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
content: "\f08e";
content: "\f35d";
}
}
......@@ -258,11 +258,11 @@ summary {
.outlink {
&:after {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font: normal normal normal 14px/1 'Font Awesome 5 Free';
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
content: "\f08e";
content: "\f35d";
}
}
......
......@@ -114,7 +114,7 @@
p {
text-align: justify;
font-style: italic;
quotes: '„' '';
quotes: '„' '';
&:before {
content: open-quote;
}
......
......@@ -124,6 +124,9 @@ body {
.alert ul {
list-style-type: none;
padding-left: 49px;
@media (max-width: @screen-xs-max) {
padding-left: 0px;
}
}
.fa.fa-twitter {
......
......@@ -7,10 +7,13 @@
.result {
.card;
margin: @resultpage-leftbox-min-dist-top-bottom 0px @resultpage-leftbox-min-dist-top-bottom 0px;
padding: 15px;
padding: 8px 15px 5px 15px;
width: 100%;
.result-header {
display: flex;
flex-wrap: wrap;
.result-headline {
width: 100%;
display: flex;
justify-content: space-between;
.result-title {
......@@ -43,26 +46,42 @@
white-space: nowrap;
}
}
.result-link {
.overflow-ellipsis;
display: block;
font-size: @result-font-small;
width: fit-content;
max-width: 100%;
&,
&:active,
&:hover,
&:focus,
&:visited {
font-size: @result-font-url;
text-decoration: none;
.result-subheadline {
width: 100%;
display: flex;
.result-link {
.overflow-ellipsis;
display: block;
font-size: @result-font-small;
width: fit-content;
max-width: 100%;
&,
&:active,
&:hover,
&:focus,
&:visited {
font-size: @result-font-url;
text-decoration: none;
}
span.advertisement-mark {
background-color: #0d9c0d;
color: white;
padding: 3px;
border-radius: 4px;
font-weight: bold;
font-size: 10px;
margin-right: 10px;
}
}
span.advertisement-mark {
background-color: #0d9c0d;
color: white;
padding: 3px;
span.partnershop-info {
background-color: white;
color: #333;
text-shadow: none;
font-weight: inherit;
border: 1px solid #686868 ;
padding: 2px;
margin-left: 20px;
border-radius: 4px;
font-weight: bold;
font-size: 10px;
margin-right: 10px;
}
......@@ -112,7 +131,7 @@
}
}
.result-footer {
margin-top: 10px;
margin-top: 5px;
display: flex;
flex-wrap: wrap;
&>*:not(:first-child) {
......@@ -162,6 +181,11 @@
}
}
}
.result-footer * {
font-size: 10px !important;
}
&.ad .ad-label {
&,
& a,
......
......@@ -2,7 +2,7 @@
return [
'headline.1' => 'Kontakt',
'form.1' => 'Sicheres Kontakformular',
'form.1' => 'Sicheres Kontaktformular',
'form.2' => 'Über dieses Formular können Sie uns kontaktieren.
Alternativ können Sie uns natürlich auch per <a href="mailto:support@suma-ev.de">E-Mail</a> erreichen.',
'form.name' => 'Name (Vorname Nachname)',
......
<?php
return [
'heading1' => 'MetaGer-Partnershop',
'absatz1' => 'Wenn in der MetaGer-Ergebnisliste Links erscheinen, bei denen das Wort
"Partnershop" steht, dann sind das zunächst normale Ergebnisse einer
MetaGer-Suche. Sie werden im Ranking nicht bevorzugt oder höher eingestuft,
sondern wie alle anderen Suchergebnisse auch behandelt. Bei der Anzeige
dieser Links werden - ebenso wie bei ALLEN MetaGer-Ergebnissen - auch keine
Nutzerdaten weitergegeben.',
'absatz2' => 'Hinter diesem Link steht dann eine Firma, von der wir dann, wenn der Link
angeklickt wird, einen geringen Betrag zur Finanzierung von MetaGer
erhalten. Beim Ergebnis wird das zugehörige Firmenlogo angezeigt. Auch daran
erkennen Sie immer unsere Partnershops. Beim Anlicken (und nur dann) eines solchen Ergebnisses werden
auch die Nutzerdaten an die Klickadresse weitergegeben - wie bei allen Links
aller Suchmaschinen. Wenn Sie dieses vermeiden wollen, dann können Sie bei
MetaGer aber auf "anonym öffnen" klicken. Sie müssen also auch dabei Ihre
Daten nicht weitergeben. Allerdings erhalten wir dann auch keinen Beitrag
zur Finanzierung von MetaGer. Wir bitten Sie dann um eine Spende, damit wir
MetaGer als unabhängige Alternative in einem gemeinnützigen Verein weiter
entwickeln und betreiben können: <a href="/spende">https://metager.de/spende</a>',
'heading' => 'MetaGer-Partnershop',
'paragraph.1' => 'Wenn in der MetaGer-Ergebnisliste Links erscheinen, bei dennen das Wort "Partnershop" steht, dann sind das zunächst normale Ergebnisse einer MetaGer-Suche. Sie werden im Ranking nicht bevorzugt oder höher eingestuft, sondern wie alle anderen Suchergebnisse auch behandelt.',
'paragraph.2' => 'Hinter diesem Link steht dann eine Firma, von der wir dann, wenn der Link angeklickt wird, einen geringen Betrag zur Finanzierung von MetaGer erhalten. Beim Ergebnis wird das zugehörige Firmenlogo angezeigt. Auch daran erkennen Sie immer unsere Partnershops. Beim Anklicken (und nur dann) eines solchen Ergebnisses werden auch Nutzerdaten an die Klickadresse weitergegeben. Zu diesen Nutzerdaten gehören auch die Suchbegriffe, die Sie auf MetaGer eingegeben haben, in Verbindung mit Ihrer IP-Adresse. Wenn Sie dies vermeiden wollen, dann können Sie bei MetaGer aber auf "anonym&nbspöffnen" klicken. Sie müssen also auch dabei Ihre Daten nicht weitergeben. Allerdings erhalten wir dann auch keinen Beitrag zur Finanzierung von MetaGer. Wir bitten Sie dann um eine Spende, damit wir MetaGer als unabhängige Alternative in einem gemeinnützigen Verein weiter entwickeln und betreiben können: <a href="/spende">www.metager.de/spende</a>',
'paragraph.3' => 'Mitglieder des SUMA_EV können unsere werbefreie Suche nutzen. <a href="/beitritt">Werden Sie Mitglied!</a>',
];
......@@ -5,6 +5,6 @@ return [
'startseite' => 'MetaGer-Startseite',
'impressum' => 'Impressum',
'search-placeholder' => 'Suchbegriff(e) eingeben',
'metager3' => 'Sie befinden sich auf einer MetaGer Testversion. Hier werden Features vor der Veröffentlichung getestet. Unter Umständen funktioniert hier nicht alles wie gewohnt.
Unsere stabile Version finden Sie hier: <a href="https://metager.de" target="_self">metager.de</a>.',
'metager3' => 'Sie befinden sich auf einer MetaGer Testversion. <span class="hidden-xs">Hier werden Features vor der Veröffentlichung getestet. Unter Umständen funktioniert hier nicht alles wie gewohnt.
Unsere stabile Version finden Sie hier: <a href="https://metager.de" target="_self">metager.de</a>.</span>',
];
......@@ -41,8 +41,8 @@ return [
"about.3.1" => "Everyone might check our data protection & privacy features.",
'lang.tooltip' => 'Language',
'key.placeholder' => 'Insert member key',
'key.tooltip' => 'Insert member key',
'key.placeholder' => 'Enter member key',
'key.tooltip' => 'Enter member key',
"placeholder" => "MetaGer: Privacy Protected Search & Find",
......
<?php
return [
'heading1' => 'MetaGer-Partnershop',
'absatz1' => 'If the MetaGer result list shows links which have the word "Partnershop" in
that line, these are at first normal search results. They are not ranked
higher or differently treated than all other search results of MetaGer. By
showing these links we do not transfer any of your data to third parties -
in the same way we do not transfer such data for ANY search.',
'absatz2' => 'Behind such links are companies which will pay us with a small amount of
money if you click on that link. The result shows the company logo as well.
By that you additionally recognize our partnershops (except links to Amazon via the Boost-Project). If you click on such
link (and ONLY then) the user data will be given to the click address - in
the same way as done by clicking the result links of all search engines. If
you do not want that, then MetaGer optionally gives the possibility to click
on "anonym öffnen" (open anonymously). So you do not have to give your user
data to third parties. But in that case we do not receive a share to
finance MetaGer. We appeal for a donation in that case, so that we are able
to run and develope MetaGer as an independent alternative within a
non-commercial NGO: <a href="/en/spende">https://metager.de/en/spende</a>',
'heading' => 'MetaGer-Partnershop',
];
english
<div class="card-heavy">
<div>
<h1>Data protection at MetaGer/SUMA-EV</h1>
For maximum transparency, we list the information we collect from you and how we use it. The protection of your data is important to us and it should be you, too.
<br /><strong>Please read this statement thoroughly; it is in your interest.</strong>
</div>
<div>
<h1>Person responsible and contact person</h1>
MetaGer and related services are operated by <a href="https://suma-ev.de/impressum.html">SUMA-EV</a>, which is also the author of this statement. By "we" in this statement usually SUMA-EV is meant.
<br />Our contact details can be found in our <a href="https://suma-ev.de/impressum.html">imprint</a>. We can be reached by e-mail at <a href="mailto:office@suma-ev.de">office@suma-ev.de</a>.
</div>
<div>
<h1>Principles</h1>
As a non-profit organization, we have committed ourselves to free access to knowledge. Since we know that free research is not compatible with mass surveillance, we also take privacy very seriously. We always only process the data that is necessary for the operation of our services. Data protection is always the standard we aim for. We do not operate profiling – i.e. the automatic creation of user profiles.
</div>
<div>
<h1>Accumulating data by context</h1>
<ol>
<li class="kontext-list">
<article class="kontext">
<h1>Using the web search engine MetaGer</h1>
When using our web search engine MetaGer via their web form or through their OpenSearch interface, the following data is generated:
<ol class="datum-list">
<li>
<article class="datum">
<h1 id="ip-address">Internet protocol address</h1>
The Internet protocol address (hereafter referred to as IP) is necessary to use web services such as MetaGer. This IP, in combination with a date similar to a telephone number, uniquely identifies Internet access and its owner.
<br />In general, the first three (out of four) blocks of an IP are not personal. When rear blocks of the IP are truncated, the truncated address identifies the approximate geographic area around the Internet connection.
<h2>Examples (full IP address)</h2>
<samp>154.67.88.47</samp><br />
<samp>82.159.53.49</samp>
<h2>Examples (only the first two blocks)</h2>
<samp>154.67.0.0</samp><br />
<samp>82.159.0.0</samp>
<h2>What does MetaGer/SUMA-EV do with it?</h2>
<ol>
<li>To protect our service from congestion, we need to limit the number of search queries per Internet connection. For this purpose alone, we store the full IP address and a timestamp for a maximum of 96 hours. If a noticeable number of searches are performed by an IP, this IP is temporarily stored in a revocation list (maximum 96 hours after the last search). Then the IP is deleted.
</li>
<li>In addition to donations and membership fees, we must finance our operation through non-personalized advertising on the results page. To receive this advertising, we give the first two blocks of the IP in connection with parts of the so-called user agent to our advertising partners
</li>
</ol>
<h2>Which rights do I have as a user?</h2>
Since the full form of the Internet Protocol address is personal, you have the following rights in particular:
<a href="#ihrerechte">View rights</a>
</article>
</li>
<li>
<article class="datum">
<h1 id="search-request">Entered search query</h1>
Entered search terms are mandatory for a web search. As a rule, personal data cannot be obtained from them; partly because they have no fixed structure.
<h2>Beispiele</h2>
<samp>Water consumption when showering</samp><br />
<samp>Lyrics from the song There was a bird on a tree</samp><br />
<samp>Grakvaloth</samp><br />
<samp>WHO abbreviation</samp>
<h2>What does MetaGer/SUMA-EV do with it?</h2>
<ol>
<li>As an integral part of the Metasearch, the search query will be transmitted to our partners to get search results for display on the results page. The results, including the search term, are kept for display for a few hours.
</li>
</ol>
</article>
</li>
<li>
<article class="datum">
<h1 id="user-agent">User Agent Name</h1>
When a website is opened, your browser automatically sends an identifier, usually with data about the browser and operating system used. This browser identifier (the so-called user agent) can be used by web pages, for example, to recognize mobile devices and present them with a customized output.