summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhorus2018-02-13 14:28:40 +0100
committerhorus2018-02-13 14:28:40 +0100
commitef460c65ab5e6e3bfdb27ef596d00fc93314eb72 (patch)
tree9d6f969d2d554af07568808f5977e346176b4f20
parent62f478feda37fb116ccede1481f80b1bea88fc04 (diff)
downloadalkobote-ef460c65ab5e6e3bfdb27ef596d00fc93314eb72.tar.gz
Adds RSS-Feeds.
-rw-r--r--site/app/Http/Controllers/FeedController.php89
-rw-r--r--site/app/Http/Controllers/PageFeedController.php34
-rw-r--r--site/composer.json3
-rw-r--r--site/composer.lock62
-rw-r--r--site/public/css/custom.css3
-rw-r--r--site/resources/views/feeds.blade.php107
-rw-r--r--site/resources/views/layouts/base.blade.php4
-rw-r--r--site/resources/views/offer.blade.php4
-rw-r--r--site/resources/views/snippets/footer.blade.php15
-rw-r--r--site/resources/views/snippets/navbar.blade.php9
-rw-r--r--site/routes/web.php10
11 files changed, 336 insertions, 4 deletions
diff --git a/site/app/Http/Controllers/FeedController.php b/site/app/Http/Controllers/FeedController.php
new file mode 100644
index 0000000..7ac39c1
--- /dev/null
+++ b/site/app/Http/Controllers/FeedController.php
@@ -0,0 +1,89 @@
+<?php
+namespace App\Http\Controllers;
+use Illuminate\Http\Request;
+use App\Helpers\CryptoHelper;
+
+use Illuminate\Support\Facades\DB;
+use App\Http\Controllers\Controller;
+
+use Cookie;
+use Carbon;
+use Illuminate\Support\Facades\Input;
+
+class FeedController extends Controller {
+ /**
+ * Shows the index page.
+ *
+ * @return Response
+ */
+ public function showPage(Request $request) {
+
+ /*
+ * Sorting
+ */
+ $sort_by = Input::get("sort");
+ switch ($sort_by) {
+ case("price"):
+ $sort_by = "discounted_price";
+ break;
+ case("discounted_price"):
+ $sort_by = "discounted_price";
+ break;
+ case("name"):
+ $sort_by = "name";
+ break;
+ case("shop"):
+ $sort_by = "shop";
+ break;
+ case("procent"):
+ $sort_by = "procent";
+ break;
+ case("time"):
+ $sort_by = "created_at";
+ break;
+ case("created_at"):
+ $sort_by = "created_at";
+ break;
+ default:
+ $sort_by = "created_at";
+ break;
+ }
+
+ $order_by = $request->input("order");
+ if ( "desc" != $order_by ) {
+ $order_by = "asc";
+ }
+
+ /*
+ * Database query
+ */
+ $view_name = str_replace("_feed", "", \Request::route()->getName());
+ #$data = DB::table($view_name . '_view')->orderBy('created_at', 'DESC')->limit(100)->get();
+ $data = DB::table($view_name . '_view')->orderBy($sort_by, $order_by)->limit(20)->get();
+
+ /*
+ * For strftime().
+ */
+ setlocale(LC_TIME, 'de_DE.utf8');
+
+ $feed = \App::make("feed");
+
+ $feed->title = "Sonderangebote";
+ $feed->description = 'Finde immer die günstigsten Angebote im Bereich Spirituosen. Täglich neue Schnäppchen.';
+ $feed->logo = 'https://fuselkoenig.de/favicon.ico';
+ $feed->link = url('feed');
+ $feed->setDateFormat('timestamp'); // 'datetime', 'timestamp' or 'carbon'
+ $feed->pubdate = $data[0]->created_at;
+ $feed->lang = 'de';
+ $feed->setShortening(true); // true or false
+ $feed->setTextLimit(5000); // maximum length of description text
+
+ foreach ( $data as $offer ) {
+ $desc = '<p><img src="'.$offer->image_url.'"></p><p><strong>'.$offer->spirit_type.'</strong><br>Statt ' . \TF::fF($offer->original_price) . '€ nur noch ' . \TF::fF($offer->discounted_price) . "€ (".$offer->procent."% Rabatt).";
+ $feed->add($offer->name, $offer->shop, $offer->url, $offer->created_at, $desc, $offer->name);
+ }
+
+ return $feed->render('atom');
+
+ }
+}
diff --git a/site/app/Http/Controllers/PageFeedController.php b/site/app/Http/Controllers/PageFeedController.php
new file mode 100644
index 0000000..e29c8ca
--- /dev/null
+++ b/site/app/Http/Controllers/PageFeedController.php
@@ -0,0 +1,34 @@
+<?php
+namespace App\Http\Controllers;
+use Illuminate\Http\Request;
+use App\Helpers\CryptoHelper;
+
+use Illuminate\Support\Facades\DB;
+use App\Http\Controllers\Controller;
+
+class PageFeedController extends Controller {
+ /**
+ * Shows the index page.
+ *
+ * @return Response
+ */
+ public function showPage(Request $request) {
+
+
+ $views = array("whisky", "wodka", "gin", "rum", "misc", "all");
+ $query = "";
+
+ foreach($views as $view) {
+ if ($query != "") {
+ $query .= " UNION ";
+ }
+ $query .= "(SELECT name, image_url, spirit_type, spirit_type AS url, spirit_type AS feedname, '' AS linktext, created_at FROM ". $view ."_view WHERE original_price > 19.98 ORDER BY created_at DESC LIMIT 1)";
+ }
+ # todo: schlägt manchmal fehl
+ $query .= " UNION (SELECT name, image_url, spirit_type, spirit_type AS url, spirit_type AS feedname, '' AS linktext, created_at FROM ". $view ."_view WHERE original_price > 19.98 AND (procent < (SELECT MAX(procent) FROM all_view)) ORDER BY procent LIMIT 1)";
+
+ $data = DB::select($query);
+
+ return view('feeds', ['data' => $data, 'views' => $views]);
+ }
+}
diff --git a/site/composer.json b/site/composer.json
index 27695dc..39587c4 100644
--- a/site/composer.json
+++ b/site/composer.json
@@ -8,7 +8,8 @@
"php": ">=7.1.3",
"fideloper/proxy": "~4.0",
"laravel/framework": "5.6.*",
- "laravel/tinker": "~1.0"
+ "laravel/tinker": "~1.0",
+ "roumen/feed": "^2.12"
},
"require-dev": {
"filp/whoops": "~2.0",
diff --git a/site/composer.lock b/site/composer.lock
index 6116aa7..c48b766 100644
--- a/site/composer.lock
+++ b/site/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "content-hash": "bf3c948f982e4ea5ec2fcaef27270719",
+ "content-hash": "1ff6dde5a4092d06ccfcce8fc2b7d989",
"packages": [
{
"name": "dnoegel/php-xdg-base-dir",
@@ -1264,6 +1264,66 @@
"time": "2018-01-20T00:28:24+00:00"
},
{
+ "name": "roumen/feed",
+ "version": "v2.12.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Laravelium/laravel-feed.git",
+ "reference": "1fd410a282b489c94ebc6b993f161a9447fda172"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Laravelium/laravel-feed/zipball/1fd410a282b489c94ebc6b993f161a9447fda172",
+ "reference": "1fd410a282b489c94ebc6b993f161a9447fda172",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "5.6.*",
+ "php": ">=7.1.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~7.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Roumen\\Feed\\FeedServiceProvider"
+ ],
+ "aliases": {
+ "Feed": "Roumen\\Feed\\Feed"
+ }
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Roumen\\Feed": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roumen Damianoff",
+ "email": "roumen@damianoff.com",
+ "homepage": "https://damianoff.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple feed generator for Laravel.",
+ "homepage": "https://laravelium.com",
+ "keywords": [
+ "atom",
+ "feed",
+ "generator",
+ "laravel",
+ "rss"
+ ],
+ "time": "2018-02-07T20:50:19+00:00"
+ },
+ {
"name": "swiftmailer/swiftmailer",
"version": "v6.0.2",
"source": {
diff --git a/site/public/css/custom.css b/site/public/css/custom.css
index 742b363..3fe47d0 100644
--- a/site/public/css/custom.css
+++ b/site/public/css/custom.css
@@ -107,3 +107,6 @@ footer {
padding-right: 5px;
opacity: 0.9;
}
+.footer-link {
+ padding-left: 0px !important;
+}
diff --git a/site/resources/views/feeds.blade.php b/site/resources/views/feeds.blade.php
new file mode 100644
index 0000000..8914967
--- /dev/null
+++ b/site/resources/views/feeds.blade.php
@@ -0,0 +1,107 @@
+@extends('layouts.base')
+
+@section('content')
+ <div class="container">
+ <div class="jumbotron p-3 p-md-5 text-white rounded bg-dark">
+ <div class="col-md-6 px-0">
+ <h1 class="display-4 font-italic">Angebote als RSS Feeds</h1>
+ <p class="lead my-3">Finde immer die günstigsten Angebote im Bereich Spirituosen, praktischerweise als RSS-Feed direkt aufs Handy.</p>
+ <p class="lead mb-0"><a href="/" class="text-white font-weight-bold">Zurück zur Übersicht...</a></p>
+ </div>
+ </div>
+
+
+<?php
+
+$count = 0;
+
+foreach( $data as $offer) {
+
+
+ if ( $count == 5 ) {
+ // last card
+ $offer->feedname = "Feed aller Angebote";
+ $offer->linktext = "Zum Feed aller Angebote.";
+ $offer->url = "all";
+ $offer->spirit_type = "Alle Angebote";
+ } else if ( !in_array(strtolower($offer->spirit_type), $views) ) {
+ // card of misc offers
+ $offer->url = "misc";
+ $offer->feedname = "Feed der weiteren Angebote";
+ $offer->linktext = "Zum Feed der weiteren Angebote.";
+ $offer->spirit_type = "Verschiedenes";
+ } else {
+ // main cards
+ $offer->url = lcfirst($offer->url) ;
+ $offer->feedname = $offer->feedname . "-Feed";
+ $offer->linktext = "Zum ". $offer->spirit_type ." Feed";
+ }
+ $offer->url = $offer->url . "/feed/";
+
+ if ( $count % 2 == 0) {
+?>
+ <div class="row mb-2">
+<?php
+ }
+
+?>
+
+<div class="col-md-6 col-sm-12" id="{{ $offer->name }}">
+ <div class="card flex-md-row mb-4 box-shadow h-md-250 h-sm-500">
+ <img class="card-img-top flex-auto d-xs-block d-sm-block img-thumbnail d-md-none" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{ $offer->name }}">
+ <div class="card-body d-flex flex-column align-items-start">
+ <div class="d-inline align-items-start text-left w-100 mb-2">
+ <strong class="text-dark">{{ $offer->spirit_type }}</strong>
+ </div>
+ <h3 class="mb-0 d-inline-block h-100">
+ <a class="text-dark" href="/{{ $offer->url }}">
+ Hier geht es zum {{ $offer->feedname }}
+ </a>
+ </h3>
+
+ <a class="w-100 u" href="/{{ $offer->url }}" style="word-wrap: none;">{{ $offer->linktext }}</a>
+ </div>
+ <img data-href="/{{ $offer->url }}" class="card-img-right border-left-0 img-thumbnail d-none d-xs-none d-md-block float-right js-link-replacement" src="{{ $offer->image_url }}" alt="{{ $offer->name }}" title="{{ $offer->name }}">
+ </div>
+</div>
+
+<?php
+
+
+ if ( $count % 2 == 1) {
+?>
+ </div>
+<?php
+ }
+
+ $count++;
+
+}
+
+// schließt den row div wieder bei ungerade anzahl
+if ( $count % 2 == 1) {
+?>
+ </div>
+<?php
+}
+?>
+
+ </div>
+
+@endsection
+
+
+@section('scripts')
+<script>
+$(".js-link-replacement").hover(function(){
+ $(this).css( 'cursor', 'pointer' );
+},
+function(){
+ $(this).css( 'cursor', 'inherit');
+});
+
+$(".js-link-replacement").click(function(){
+ window.location.href = $(this).data("href");
+});
+</script>
+@endsection
diff --git a/site/resources/views/layouts/base.blade.php b/site/resources/views/layouts/base.blade.php
index 13d35dc..4ebaff6 100644
--- a/site/resources/views/layouts/base.blade.php
+++ b/site/resources/views/layouts/base.blade.php
@@ -6,7 +6,7 @@
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="/favicon.ico">
- <title>Alkobote</title>
+ <title>Angebote | Fuselkoenig.de</title>
<!--
<link href="/css/bootstrap.css" rel="stylesheet">
@@ -18,6 +18,8 @@
<link href="/css/custom.css" rel="stylesheet">
<link href="/css/colors.css" rel="stylesheet">
+
+ @yield('feed')
@yield('css')
</head>
diff --git a/site/resources/views/offer.blade.php b/site/resources/views/offer.blade.php
index 82b109c..387949f 100644
--- a/site/resources/views/offer.blade.php
+++ b/site/resources/views/offer.blade.php
@@ -1,5 +1,9 @@
@extends('layouts.base')
+@section('feed')
+ {!! Feed::link(url($spirit_type . '/feed'), 'atom', 'Feed von ' . $spirit_type, 'de') !!}
+@endsection
+
@section('content')
<div class="container">
<div class="jumbotron p-3 p-md-5 text-white rounded bg-dark bbg-white ttext-dark box-shadow">
diff --git a/site/resources/views/snippets/footer.blade.php b/site/resources/views/snippets/footer.blade.php
index c0365a4..1d52914 100644
--- a/site/resources/views/snippets/footer.blade.php
+++ b/site/resources/views/snippets/footer.blade.php
@@ -5,7 +5,20 @@
<div class="card-body">
<h4>Links</h4>
- <a href="#/impressum">Impressum</a>
+
+ <ul class="list-group">
+ <li class="list-group-item footer-link">
+ <a href="/feeds/">Feeds</a>
+ </li>
+ <li class="list-group-item footer-link">
+ <a href="https://www.fuselkoenig.de//">Blog</a>
+ </li>
+ <li class="list-group-item footer-link">
+ <a href="https://www.fuselkoenig.de/impressum">Impressum</a>
+ </li>
+ <li class="list-group-item footer-link">
+ <a href="https://www.fuselkoenig.de/kontakt">Kontakt</a>
+ </li>
</div>
</div>
<div class="col ffooter-col">
diff --git a/site/resources/views/snippets/navbar.blade.php b/site/resources/views/snippets/navbar.blade.php
index 51387da..0bb2a9b 100644
--- a/site/resources/views/snippets/navbar.blade.php
+++ b/site/resources/views/snippets/navbar.blade.php
@@ -26,6 +26,15 @@
<a class="nav-link" href="/misc">Verschiedenes {!! Request::is('misc') ? ' <span class="sr-only">(current)</span>' : ''!!}</a>
</li>
</ul>
+<!--
+ <ul class="navbar-nav mr-2">
+ <li class="nav-item {{ Request::is('misc') ? 'active' : '' }}">
+ <a class="nav-link" href="/feeds">Feeds {!! Request::is('feeds') ? ' <span class="sr-only">(current)</span>' : ''!!}</a>
+ </li>
+ <li class="nav-item divider">
+ </li>
+ </ul>
+-->
<form class="form-inline mt-2 mt-md-0">
<input class="form-control mr-sm-2" type="text" placeholder="Suchen… zB Glenfiddich" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Suchen</button>
diff --git a/site/routes/web.php b/site/routes/web.php
index 65a1237..4c64112 100644
--- a/site/routes/web.php
+++ b/site/routes/web.php
@@ -18,6 +18,16 @@ Route::get('/wodka', 'OfferController@showPage')->name('wodka');
Route::get('/gin', 'OfferController@showPage')->name('gin');
Route::get('/rum', 'OfferController@showPage')->name('rum');
Route::get('/misc', 'OfferController@showPage')->name('misc');
+Route::get('/all', 'OfferController@showPage')->name('all');
+
+Route::get('/feeds', 'PageFeedController@showPage')->name('feed');
+
+Route::get('/whisky/feed', 'FeedController@showPage')->name('whisky_feed');
+Route::get('/wodka/feed', 'FeedController@showPage')->name('wodka_feed');
+Route::get('/gin/feed', 'FeedController@showPage')->name('gin_feed');
+Route::get('/rum/feed', 'FeedController@showPage')->name('rum_feed');
+Route::get('/misc/feed', 'FeedController@showPage')->name('misc_feed');
+Route::get('/all/feed', 'FeedController@showPage')->name('all_feed');
Route::get('/welcome', function () {
return view('welcome');