diff --git a/assets/app.js b/assets/app.js index 44623cf..5c8e97e 100644 --- a/assets/app.js +++ b/assets/app.js @@ -16,6 +16,7 @@ import './styles/form.css'; import './styles/notice.css'; import './styles/spinner.css'; import './styles/a2hs.css'; +import './styles/analytics.css'; console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉'); diff --git a/assets/styles/analytics.css b/assets/styles/analytics.css new file mode 100644 index 0000000..cd5586f --- /dev/null +++ b/assets/styles/analytics.css @@ -0,0 +1,37 @@ +.analytics-container { + max-width: 800px; + margin: 0 auto; + padding: 20px; +} + +.analytics-card { + background: lightgray; + border-radius: 8px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); +} + +.analytics-table { + width: 100%; + border-collapse: collapse; +} + +.analytics-table th, .analytics-table td { + padding: 10px; + border-bottom: 1px solid var(--color-border); +} + +.analytics-table th { + text-align: left; + font-weight: 600; +} + +.text-right { + text-align: right; +} + +.analytics-info { + font-size: 0.9rem; + color: var(--color-border); +} diff --git a/migrations/Version20250826151824.php b/migrations/Version20250826151824.php new file mode 100644 index 0000000..de8f6d2 --- /dev/null +++ b/migrations/Version20250826151824.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + CREATE TABLE visit (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, route VARCHAR(255) NOT NULL, visited_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id)) + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + DROP TABLE visit + SQL); + } +} diff --git a/src/Controller/Administration/VisitorAnalyticsController.php b/src/Controller/Administration/VisitorAnalyticsController.php new file mode 100644 index 0000000..f8d1afb --- /dev/null +++ b/src/Controller/Administration/VisitorAnalyticsController.php @@ -0,0 +1,23 @@ +getVisitCountByRoute(); + + return $this->render('admin/analytics.html.twig', [ + 'visitStats' => $visitStats, + ]); + } +} diff --git a/src/Controller/ArticleController.php b/src/Controller/ArticleController.php index fe9527d..b2f6cd8 100644 --- a/src/Controller/ArticleController.php +++ b/src/Controller/ArticleController.php @@ -77,7 +77,10 @@ class ArticleController extends AbstractController $article = null; // check if an item with same eventId already exists in the db $repository = $entityManager->getRepository(Article::class); + // slug might be url encoded, decode it + $slug = urldecode($slug); $articles = $repository->findBy(['slug' => $slug]); + $revisions = count($articles); if ($revisions === 0) { diff --git a/templates/admin/analytics.html.twig b/templates/admin/analytics.html.twig index 862f96f..ee99d15 100644 --- a/templates/admin/analytics.html.twig +++ b/templates/admin/analytics.html.twig @@ -37,45 +37,3 @@ {% endblock %} -{% block stylesheets %} -{{ parent() }} - -{% endblock %} diff --git a/templates/admin/articles.html.twig b/templates/admin/articles.html.twig index ce2bfec..387474f 100644 --- a/templates/admin/articles.html.twig +++ b/templates/admin/articles.html.twig @@ -7,13 +7,12 @@ Title Summary - Coordinate - Add to Index + Actions {% for article in articles %} - + {{ article.title }} {{ article.summary|slice(0, 100) }}{% if article.summary|length > 100 %}...{% endif %} @@ -24,8 +23,7 @@ data-action="click->copy-to-clipboard#copyToClipboard" style="margin-left: 0.5em;">Copy to Clipboard - - +