site-accueil-insa/matomo/plugins/Tour/Engagement/Levels.php

149 lines
No EOL
3.8 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Tour\Engagement;
use Piwik\API\Request;
use Piwik\Piwik;
class Levels
{
/**
* @var array
*/
private $challenges = array();
private function getChallenges()
{
if (empty($this->challenges)) {
$this->challenges = Request::processRequest('Tour.getChallenges', [], []);
}
return $this->challenges;
}
public function getNumChallengesCompleted()
{
$challenges = $this->getChallenges();
$completed = 0;
foreach ($challenges as $challenge) {
if ($challenge['isSkipped'] || $challenge['isCompleted']) {
$completed++;
}
}
return $completed;
}
public function getCurrentLevel()
{
$completed = $this->getNumChallengesCompleted();
$current = 0;
foreach ($this->getLevels() as $threshold => $level) {
if ($completed >= $threshold) {
$current++;
}
}
return $current;
}
public function getCurrentLevelName()
{
$completed = $this->getNumChallengesCompleted();
$current = '';
foreach ($this->getLevels() as $threshold => $level) {
if ($completed >= $threshold) {
$current = $level;
}
}
return $current;
}
public function getNextLevelName()
{
$completed = $this->getNumChallengesCompleted();
foreach ($this->getLevels() as $threshold => $level) {
if ($completed < $threshold) {
return $level;
}
}
}
public function getNumLevels()
{
$levels = $this->getLevels();
return count($levels);
}
public function getNumChallengesNeededToNextLevel()
{
$completed = $this->getNumChallengesCompleted();
foreach ($this->getLevels() as $threshold => $level) {
if ($completed < $threshold) {
return $threshold - $completed;
}
}
}
public function getCurrentDescription()
{
$login = Piwik::getCurrentUserLogin();
$numChallengesCompleted = $this->getNumChallengesCompleted();
$numChallengesTotal = $this->getNumChallengesTotal();
if ($numChallengesCompleted <= ($numChallengesTotal / 4)) {
return Piwik::translate('Tour_Part1Title', $login);
}
if ($numChallengesCompleted <= ($numChallengesTotal / 2)) {
return Piwik::translate('Tour_Part2Title', $login);
}
if ($numChallengesCompleted <= ($numChallengesTotal / 1.333)) {
return Piwik::translate('Tour_Part3Title', $login);
}
return Piwik::translate('Tour_Part4Title', $login);
}
private function getNumChallengesTotal()
{
$challenges = $this->getChallenges();
return count($challenges);
}
public function getLevels()
{
$numChallengesTotal = $this->getNumChallengesTotal();
$levels = array(
0 => Piwik::translate('Tour_MatomoBeginner'),
5 => Piwik::translate('Tour_MatomoIntermediate'),
);
if ($numChallengesTotal > 10) {
// the number of challenges varies from Matomo to Matomo depending on activated plugins and activated
// features. Therefore we may remove some levels if there aren't too many challenges available.
$levels[10] = Piwik::translate('Tour_MatomoTalent');
}
if ($numChallengesTotal > 15) {
$levels[15] = Piwik::translate('Tour_MatomoProfessional');
}
$levels[$numChallengesTotal] = Piwik::translate('Tour_MatomoExpert');
return $levels;
}
}