From d9c14e70c84b49cfab22e7f764d6c6dabdea6b52 Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Sun, 10 Mar 2019 22:26:25 +0100 Subject: [PATCH] initial version --- CHANGELOG.md | 5 ++++ ClassicCounter.php | 26 ++++++++++++++++++++ Controller.php | 57 +++++++++++++++++++++++++++++++++++++++++++ README.md | 13 ++++++++++ Tasks.php | 36 +++++++++++++++++++++++++++ plugin.json | 27 ++++++++++++++++++++ screenshots/4909.png | Bin 0 -> 6369 bytes templates/svg.twig | 50 +++++++++++++++++++++++++++++++++++++ 8 files changed, 214 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 ClassicCounter.php create mode 100644 Controller.php create mode 100644 README.md create mode 100644 Tasks.php create mode 100644 plugin.json create mode 100644 screenshots/4909.png create mode 100644 templates/svg.twig diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1ad0e2b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +## Changelog + +### 0.1.0 + +first version \ No newline at end of file diff --git a/ClassicCounter.php b/ClassicCounter.php new file mode 100644 index 0000000..916a9ba --- /dev/null +++ b/ClassicCounter.php @@ -0,0 +1,26 @@ +doAsSuperUser(function () use ($idSite) { + return \Piwik\API\Request::processRequest('VisitsSummary.getVisits', array( + 'idSite' => $idSite, + 'period' => "range", + 'date' => "2000-01-01,2030-01-01", + ))->getFirstRow()["nb_visits"]; + }); + return (int)$visitsCount; + } + +} diff --git a/Controller.php b/Controller.php new file mode 100644 index 0000000..ea9ebb3 --- /dev/null +++ b/Controller.php @@ -0,0 +1,57 @@ + [true, true, true, true, true, true, false], + "1" => [false, true, true, false, false, false, false], + "2" => [true, true, false, true, true, false, true], + "3" => [true, true, true, true, false, false, true], + "4" => [false, true, true, false, false, true, true], + "5" => [true, false, true, true, false, true, true], + "6" => [true, false, true, true, true, true, true], + "7" => [true, true, true, false, false, false, false], + "8" => [true, true, true, true, true, true, true], + "9" => [true, true, true, true, false, true, true] + ]; + + + public function svg() { + $idSite = Common::getRequestVar('idSite', $this->idSite, 'int'); + + $cache = Cache::getLazyCache(); + $cacheKey = "ClassicCounter_Visits_" . $idSite; + if ($cache->contains($cacheKey)) { + $visitCount = $cache->fetch($cacheKey); + } else { + $visitCount = ClassicCounter::getVisitorCount($idSite); + $cache->save($cacheKey, $visitCount, 60); + } + + $view = new View("@ClassicCounter/svg"); + $view->setContentType("image/svg+xml"); + $view->number = $visitCount; + $chars = str_split($visitCount); + foreach ($chars as $char) { + if (empty($this->sevenSegment[$char])) { + throw new \Exception("character can't be shown on seven segment display"); + } + $view->digits[] = $this->sevenSegment[$char]; + } + $view->length = strlen($visitCount); + return $view->render(); + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..84e8ad1 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Matomo ClassicCounter Plugin + +## Description + +No website is complete without a nostalgic view counter at the bottom! + +This plugin allows you to add an image showing the total amount of visits per `idSite`. + +```html + +``` + + \ No newline at end of file diff --git a/Tasks.php b/Tasks.php new file mode 100644 index 0000000..4b922c8 --- /dev/null +++ b/Tasks.php @@ -0,0 +1,36 @@ +hourly('updateCache', null, self::LOW_PRIORITY); + } + + public function updateCache() { + $cache = Cache::getLazyCache(); + $bla=new Controller(); + + $siteIds = SitesManagerApi::getInstance()->getAllSitesId(); + foreach ($siteIds as $idSite) { + $cacheKey = "ClassicCounter_Visits_" . $idSite; + + $visitCount = ClassicCounter::getVisitorCount($idSite); + $cache->save($cacheKey, $visitCount, 60); + + } + } + +} diff --git a/plugin.json b/plugin.json new file mode 100644 index 0000000..a875b73 --- /dev/null +++ b/plugin.json @@ -0,0 +1,27 @@ +{ + "name": "ClassicCounter", + "description": "Embed a view counter in the style of classic CGI scripts into your website", + "version": "0.1.0", + "theme": false, + "require": { + "piwik": ">=3.8.0,<4.0.0-b1" + }, + "authors": [ + { + "name": "Lukas Winkler", + "email": "lukas@matomo.org", + "homepage": "https://lw1.at" + } + ], + "support": { + "email": "lukas@matomo.org", + "issues": "https://github.com/Findus23/plugin-ClassicCounter/issues", + "forum": "https://forum.matomo.org", + "source": "https://github.com/Findus23/plugin-ClassicCounter" + }, + "homepage": "https://lw1.at", + "license": "GPL v3+", + "keywords": [ + "nostalgia" + ] +} diff --git a/screenshots/4909.png b/screenshots/4909.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf35698cb21a03136f4dfc1e259bff4f272cbd9 GIT binary patch literal 6369 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 + {{ number }} + + + + + + + + + + + + {% for digit in digits %} + + + + + + + + + + {% endfor %} + \ No newline at end of file