getContainer(); $container['notFoundHandler'] = function($c) { return function(Request $req, Response $res) use ($c) { return $c['view']->render($res->withStatus(404), "/views/404.twig", [ "isIt" => $c['lang']->getLang() == 'it_IT' ]); }; }; $dominiMap = [ 101 => 'OldLuxury24', 201 => 'Auto', 301 => 'Nautica', 401 => 'Orologi', 501 => 'Casa', 601 => 'Moto', 701 => 'Arte', ]; $slugToId = []; foreach ($dominiMap as $id => $nome) { $slugToId[strtolower($nome)] = $id; } /* *************************************************************************** * * PAGINE NEWS (originali) * *************************************************************************** */ $app->map(['GET','POST'],'[/]', function(Request $req, Response $res) use($dominiMap) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $this["view"]["pagetitle"] = "Notizie ed Eventi"; $this["view"]["pagedescription"] = "Notizie ed Eventi dal mondo del lusso, auto d'epoca, nautica e collezionismo su OldLuxury24."; // pagination $page = $req->getParam("p", 1); $limit = 27; $offset = $limit * ($page-1); // conto totale dei record $count = Notizia::connection()->query_and_fetch_one( sprintf("SELECT CEIL(COUNT(id) / %d) AS tot FROM notizie WHERE visibile = '%s'", $limit, Notizia::ST_VISIBILE) ); $notizie = Notizia::all([ 'conditions' => ["visibile = ?", Notizia::ST_VISIBILE], 'order' => 'data_articolo DESC', 'limit' => $limit, 'offset' => $offset ]); $breaking = Notizia::first([ 'conditions' => ["visibile = ?", Notizia::ST_VISIBILE], 'order' => 'data_articolo DESC' ]); $stmt = Notizia::connection()->query("SELECT id, id_dominio, nome FROM notizie_categorie WHERE nome != 'Notizia' ORDER BY id_dominio, nome"); $categorieRubriche = $stmt->fetchAll(\PDO::FETCH_OBJ); return $this["view"]->render($res, "/views/index.twig",[ "notizie" => $notizie, "paginaCorrente"=> $page , "totalePagine" => $count, "dominiAttivi" => $domini, "breaking" => $breaking, "dominiMap" => $dominiMap, "categorieRubriche" => $categorieRubriche, "paginateRoute" => "home.elenco" ]); })->setName("home.elenco"); /* *************************************************************************** */ $app->map(['GET','POST'],'/staff[/]', function(Request $req, Response $res) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $this["view"]["pagetitle"] = "Editorial Board"; $this["view"]["pagedescription"] = "Editorial Board of OldLuxury24"; $lang = $this['lang']->getLang() == 'it_IT' ? 'it_IT' : 'en_EN'; return $this["view"]->render($res, "/views/staff/staff_".$lang.".twig",[ "dominiAttivi" => $domini ]); })->setName("staff"); /* *************************************************************************** */ $app->map(['GET','POST'],'/tag/{id}/{nome}', function(Request $req, Response $res) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $id = $req->getAttribute("id"); $this["view"]["pagetitle"] = "Notizie ed Eventi"; $this["view"]["pagedescription"] = ""; $notizie = Notizia::all([ 'conditions' => ["visibile = ? AND id_dominio = ?", Notizia::ST_VISIBILE, $id], 'order' => 'data_articolo DESC' ]); return $this["view"]->render($res, "/views/index.twig",[ "notizie" => $notizie, "dominiAttivi" => $domini ]); })->setName("tag.elenco"); /* *************************************************************************** */ $app->map(['GET','POST'],'/notizie/categoria/{id}', function(Request $req, Response $res) use($dominiMap) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $catId = intval($req->getAttribute("id")); $catRow = Notizia::connection()->query_and_fetch_one( "SELECT nome FROM notizie_categorie WHERE id = ".$catId ); if (!$catRow) { return $res->withRedirect($this->router->pathFor('notizie.elenco')); } $this["view"]["pagetitle"] = "Notizie · $catRow"; $page = $req->getParam("p", 1); $limit = 27; $offset = $limit * ($page-1); $count = Notizia::connection()->query_and_fetch_one( sprintf("SELECT CEIL(COUNT(id) / %d) AS tot FROM notizie WHERE visibile = '%s' AND id_categoria = %d", $limit, Notizia::ST_VISIBILE, $catId) ); $notizie = Notizia::all([ 'conditions' => ["visibile = ? AND id_categoria = ?", Notizia::ST_VISIBILE, $catId], 'order' => 'data_articolo DESC', 'limit' => $limit, 'offset' => $offset ]); $stmt = Notizia::connection()->query("SELECT id, id_dominio, nome FROM notizie_categorie WHERE nome != 'Notizia' ORDER BY id_dominio, nome"); $categorieRubriche = $stmt->fetchAll(\PDO::FETCH_OBJ); return $this["view"]->render($res, "/views/index.twig",[ "notizie" => $notizie, "dominiAttivi" => $domini, "paginaCorrente"=> $page, "totalePagine" => $count, "showBreadcrumb"=> true, "dominiMap" => $dominiMap, "categorieRubriche" => $categorieRubriche, "catNome" => $catRow, "catId" => $catId, "paginateRoute" => "notizie.categoria" ]); })->setName("notizie.categoria"); $app->map(['GET','POST'],'/notizie[/{slug}]', function(Request $req, Response $res) use($dominiMap, $slugToId) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $slug = $req->getAttribute("slug", null); $dominioId = $slug && isset($slugToId[$slug]) ? $slugToId[$slug] : null; $dominioNome = $dominioId && isset($dominiMap[$dominioId]) ? $dominiMap[$dominioId] : null; $catId = null; $catNome = null; if (!$dominioId && $slug) { $stmt = Notizia::connection()->query("SELECT id, nome FROM notizie_categorie"); foreach ($stmt->fetchAll(\PDO::FETCH_OBJ) as $cat) { $catSlug = strtolower(str_replace([' ', '\'', '.', ','], ['-', '', '', ''], $cat->nome)); if ($catSlug === $slug) { $catId = $cat->id; $catNome = $cat->nome; break; } } } if ($dominioId && $dominioNome) { $this["view"]["pagetitle"] = "Notizie · $dominioNome"; } elseif ($catId && $catNome) { $this["view"]["pagetitle"] = "Notizie · $catNome"; } else { $this["view"]["pagetitle"] = "Notizie ed Eventi"; } $page = $req->getParam("p", 1); $limit = 27; $offset = $limit * ($page-1); $whereExtra = $dominioId ? " AND id_dominio = ".intval($dominioId) : ($catId ? " AND id_categoria = ".intval($catId) : ""); $count = Notizia::connection()->query_and_fetch_one( sprintf("SELECT CEIL(COUNT(id) / %d) AS tot FROM notizie WHERE visibile = '%s'%s", $limit, Notizia::ST_VISIBILE, $whereExtra) ); $conditions = ["visibile = ?", Notizia::ST_VISIBILE]; if ($dominioId) { $conditions[0] .= " AND id_dominio = ?"; $conditions[] = $dominioId; } elseif ($catId) { $conditions[0] .= " AND id_categoria = ?"; $conditions[] = $catId; } $notizie = Notizia::all([ 'conditions' => $conditions, 'order' => 'data_articolo DESC', 'limit' => $limit, 'offset' => $offset ]); $stmt = Notizia::connection()->query("SELECT id, id_dominio, nome FROM notizie_categorie WHERE nome != 'Notizia' ORDER BY id_dominio, nome"); $categorieRubriche = $stmt->fetchAll(\PDO::FETCH_OBJ); return $this["view"]->render($res, "/views/index.twig",[ "notizie" => $notizie, "dominiAttivi" => $domini, "paginaCorrente"=> $page, "totalePagine" => $count, "showBreadcrumb"=> true, "dominiMap" => $dominiMap, "dominioNome" => $dominioNome, "dominioId" => $dominioId, "catNome" => $catNome, "catId" => $catId, "slug" => $slug, "categorieRubriche" => $categorieRubriche, "paginateRoute" => "notizie.elenco" ]); })->setName("notizie.elenco"); /* *************************************************************************** */ $app->get('/{id:[\d]{1,11}}[/{titolo}]', function(Request $req, Response $res) use($dominiMap) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $authorBio = [ "Francesco Maria Di Bitetto" => "Creatività artistica, formazione economica all'Università Cattolica del Sacro Cuore di Milano, dinamicità comunicativa ed interessi a 360° nel mondo dell'epoca e del lusso uniti a un'esperienza maturata nelle realtà editoriali e nel settore automobilistico.", "Maria Carla Prette" => "Dopo una collaborazione trentennale con la prestigiosa Casa Editrice Giunti di Firenze nel settore delle Arti visive, ha trovato stimolante dare il contributo della sua esperienza al progetto OldLuxury24.", "Vittorio Falzoni Gallerani" => "Collaboratore di riviste quali Automobilismo d'Epoca, Epocauto, La Manovella e del Sole 24 Ore con una rubrica fissa bimensile nella sezione Motori d'Epoca. Commissario Tecnico nazionale Auto dell'A.S.I. dal 2000. Perito del Tribunale e della CCiAA di Ferrara in auto da collezione.", "Ernesto Meloscia" => "Grande appassionato di auto e moto d'epoca, dal 2013 ricopre la carica di Direttore Regionale per la Lombardia di MG Car Club d'Italia. Collabora come giornalista per Slowdrive Magazine e per i portali oldcar24.com e oldbike24.com.", "Jolanda Croesi" => "Giornalista. Curatrice di opere a dispense sulla storia della moto per DeAgostini. Ha fondato e diretto Legend Bike (1992–1996). Già direttore responsabile di Army Motors Italia. Coordinatrice editoriale di Motor Collection e Gentleman Collector.", ]; $this["view"]["authorBio"] = $authorBio; try { // elendo notizie $notizia = Notizia::find($req->getAttribute("id")); $notizie = Notizia::all([ 'conditions' => ["visibile = ? AND id != ? AND data_articolo < ?", Notizia::ST_VISIBILE, $notizia->id, $notizia->data_articolo->format('Y-m-d')], 'order' => 'data_articolo DESC', 'limit' => 4 ]); $this["view"]["pagetitle"] = sprintf("Notizie ed Eventi / %s", $notizia->titolo_it); // Generazione automatica meta description per l'articolo $descRaw = $this['lang']->getDBField($notizia, 'sottotitolo') ?: $this['lang']->getDBField($notizia, 'testo'); $descClean = trim(preg_replace('/\s+/', ' ', strip_tags($descRaw))); $this["view"]["pagedescription"] = mb_strimwidth($descClean, 0, 155, "..."); } catch (RecordNotFound $e) { return $this["view"]->render($res->withStatus(404), "/views/404.twig", [ "isIt" => $this['lang']->getLang() == 'it_IT' ]); } return $this["view"]->render($res, "/views/dettaglio.twig", [ "notizia" => $notizia, "notizie" => $notizie, "dominiAttivi" => $domini, "dominiMap" => $dominiMap ]); })->setName("home.dettaglio"); /* *************************************************************************** */ $app->map(['GET','POST'],'/_set_lang/{lang}', function(Request $req, Response $res) { $lang = $req->getAttribute("lang"); $this["lang"]->setLang($lang); return $res->withRedirect('/'); })->setName("set_lang"); $app->get('/sitemap.xml', function(Request $req, Response $res) { $notizie = Notizia::all([ 'conditions' => ['visibile = ?', Notizia::ST_VISIBILE], 'order' => 'data_articolo DESC' ]); $dominio = $req->getAttribute("dominio"); return $this["view"]->render($res->withHeader('Content-Type', 'application/xml'), "/views/sitemap.xml.twig", [ "notizie" => $notizie, "dominio" => $dominio ]); })->setName("sitemap"); $app->get('/sitemap-news.xml', function(Request $req, Response $res) { $notizie = Notizia::all([ 'conditions' => [ 'visibile = ? AND data_articolo >= ?', Notizia::ST_VISIBILE, date('Y-m-d H:i:s', strtotime('-2 days')) ], 'order' => 'data_articolo DESC', 'limit' => 1000 ]); $dominio = $req->getAttribute("dominio"); return $this["view"]->render($res->withHeader('Content-Type', 'application/xml'), "/views/sitemap-news.xml.twig", [ "notizie" => $notizie, "dominio" => $dominio ]); })->setName("sitemap.news"); /* *************************************************************************** * * RICERCA ARTICOLI * *************************************************************************** */ $app->map(['GET','POST'],'/search[/{params:.*}]', function(Request $req, Response $res) use($dominiMap) { $dominio = $req->getAttribute("dominio"); $domini = Dominio::all([ 'conditions' => 'posizione > 0 AND id != '.$dominio->id, 'order' => 'posizione ASC' ]); $q = $req->getQueryParam("q", ""); $this["view"]["pagetitle"] = $q ? "Ricerca: $q" : "Ricerca"; $page = $req->getParam("p", 1); $limit = 27; $offset = $limit * ($page-1); $count = 0; $notizie = []; if ($q) { $like = "%$q%"; $count = Notizia::connection()->query_and_fetch_one( sprintf("SELECT CEIL(COUNT(id) / %d) AS tot FROM notizie WHERE visibile = '%s' AND (titolo_it LIKE '%s' OR titolo_en LIKE '%s')", $limit, Notizia::ST_VISIBILE, $like, $like) ); $notizie = Notizia::all([ 'conditions' => ["visibile = ? AND (titolo_it LIKE ? OR titolo_en LIKE ?)", Notizia::ST_VISIBILE, $like, $like], 'order' => 'data_articolo DESC', 'limit' => $limit, 'offset' => $offset ]); } return $this["view"]->render($res, "/views/search.twig",[ "notizie" => $notizie, "dominiAttivi" => $domini, "paginaCorrente"=> $page, "totalePagine" => $count, "dominiMap" => $dominiMap, "pagetitle" => $q ? "Ricerca: $q" : "Ricerca", "query" => $q ]); })->setName("search"); /* *************************************************************************** * * PRIVACY POLICY * *************************************************************************** */ $app->group('/privacy-policy', function() use($app) { $app->map(['GET','POST'],'', function(Request $req, Response $res) { $locale = $this["translator"]->getLocale(); $page = $locale == 'it_IT' ? 'privacy-it.twig' : 'privacy-en.twig'; return $this["view"]->render($res, "/views/".$page); })->setName("privacy-policy"); }); /* *************************************************************************** * * NEWSLETTER * *************************************************************************** */ $app->map(['GET','POST'], '/subscribe2newsletter', function(Request $req, Response $res) { if ($req->isPost()) { $dominio = $req->getAttribute("dominio"); $email = $req->getParam("email"); $mailgun = $this["mailgun"]; $mailgun->setFromDominio($dominio); try { $mail_dest = ($dominio->dominio === 'oldcar24.com' || $dominio->dominio === 'oldtime24.com') ? "info@".$dominio->dominio : "info@oldcar24.com"; $mailgun->sendPlain( ["email" => $mail_dest], $dominio->dominio.": richiesta di iscrizione newsletter", $email." ha richiesto l'iscrizione alla newsletter", [ "cc" => "francescodibi@gmail.com", "bcc" => "l.zanotto63@gmail.com" ] ); } catch (Exception $e) { $this["messages"]->add("e", $e->getMessage()); } } return $res->withRedirect('/'); })->setName("subscribe2newsletter"); };