Skip to content

Commit

Permalink
wip #31 refactor indexer services
Browse files Browse the repository at this point in the history
  • Loading branch information
digedag committed Jul 23, 2023
1 parent 7c71332 commit 2fb528f
Show file tree
Hide file tree
Showing 24 changed files with 434 additions and 80 deletions.
2 changes: 1 addition & 1 deletion Classes/Action/PlayerStats.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ private function findData(RequestInterface $request, $viewData, $type)
*
* @param string $confid
* Die Confid des PageBrowsers. z.B. myview.org.pagebrowser ohne Punkt!
* @param \tx_rnbase_configurations $configurations
* @param ConfigurationInterface $configurations
* @param \ArrayObject $viewdata
* @param array $fields
* @param array $options
Expand Down
29 changes: 29 additions & 0 deletions Classes/DependencyInjection/StatsIndexerPass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

namespace System25\T3sports\DependencyInjection;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use System25\T3sports\Service\StatsIndexerProvider;

class StatsIndexerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
// always first check if the primary service is defined
if (!$container->has(StatsIndexerProvider::class)) {
return;
}

$definition = $container->findDefinition(StatsIndexerProvider::class);

// find all service IDs with the t3sports.stats.player tag
$taggedServices = $container->findTaggedServiceIds('t3sports.stats.indexer');

foreach ($taggedServices as $id => $tags) {
// add the indexer to the IndexerProvider service
$definition->addMethodCall('addStatsIndexer', [new Reference($id)]);
}
}
}
14 changes: 10 additions & 4 deletions Classes/Hooks/ClearStats.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
namespace System25\T3sports\Hooks;

use System25\T3sports\Model\Competition;
use System25\T3sports\Service\StatsServiceRegistry;
use System25\T3sports\Service\Statistics;
use tx_rnbase;

/***************************************************************
* Copyright notice
*
* (c) 2010-2022 Rene Nitzsche
* (c) 2010-2023 Rene Nitzsche
* Contact: [email protected]
* All rights reserved
*
Expand All @@ -33,13 +33,19 @@
*/
class ClearStats
{
private $statsSrv;

public function __construct(Statistics $statisticsService = null)
{
$this->statsSrv = $statisticsService ?: new Statistics();
}

public function clearStats4Comp($params, $parent)
{
$srv = (new StatsServiceRegistry())->getStatisticService();
/* @var $comp Competition */
$comp = tx_rnbase::makeInstance(Competition::class, $params['compUid']);
if ($comp && $comp->isValid()) {
$srv->indexPlayerStatsByCompetition($comp);
$this->statsSrv->indexPlayerStatsByCompetition($comp);
}
}
}
24 changes: 15 additions & 9 deletions Classes/Hooks/Marker.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
use System25\T3sports\Frontend\Marker\ProfileMarker;
use System25\T3sports\Marker\PlayerStatsMarker;
use System25\T3sports\Model\Profile;
use System25\T3sports\Service\StatsServiceRegistry;
use System25\T3sports\Service\Statistics;
use tx_rnbase;

/***************************************************************
* Copyright notice
*
* (c) 2008-2022 Rene Nitzsche
* (c) 2008-2023 Rene Nitzsche
* Contact: [email protected]
* All rights reserved
*
Expand Down Expand Up @@ -59,6 +59,13 @@ class Marker
],
];

private $statsSrv;

public function __construct(Statistics $statisticsService = null)
{
$this->statsSrv = $statisticsService ?: new Statistics();
}

/**
* Extend profileMarker for statistical data about profile.
*
Expand Down Expand Up @@ -93,25 +100,24 @@ public function parseProfile($params, $parent)
$markerClass = $markerClass ? $markerClass : PlayerStatsMarker::class;
$marker = tx_rnbase::makeInstance($markerClass);
// Wir sollten nur einen Datensatz haben und können diesen jetzt ausgeben
$subpartArray['###'.$subpartMarker.'###'] = $marker->parseTemplate($subpart, $items[0], $config->getFormatter(), $confId.$statKey.'.data.', $subpartMarker);
$subpartArray['###'.$subpartMarker.'###'] = $marker->parseTemplate($subpart, $items[0] ?? null, $config->getFormatter(), $confId.$statKey.'.data.', $subpartMarker);
}

$params['template'] = Templates::substituteMarkerArrayCached($template, [], $subpartArray);
}

/**
* @param Profile $profile
* @param unknown $configurations
* @param unknown $confId
* @param unknown $type
* @param ConfigurationInterface $configurations
* @param string $confId
* @param string $type
*
* @throws \Exception
*
* @return unknown
* @return array
*/
private function findData(Profile $profile, ConfigurationInterface $configurations, $confId, $type)
{
$srv = (new StatsServiceRegistry())->getStatisticService();
$request = new Request($configurations->getParameters(), $configurations, $confId);
$confId = $confId.$type.'.';
$filter = BaseFilter::createFilter(
Expand All @@ -136,7 +142,7 @@ private function findData(Profile $profile, ConfigurationInterface $configuratio
$filter->init($fields, $options);

$searchMethod = self::$filterData[$filterType]['search'];
$items = $srv->$searchMethod($fields, $options);
$items = $this->statsSrv->$searchMethod($fields, $options);

return $items;
}
Expand Down
70 changes: 35 additions & 35 deletions Classes/Service/Statistics.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@

use Sys25\RnBase\Database\Connection;
use Sys25\RnBase\Search\SearchBase;
use Sys25\RnBase\Typo3Wrapper\Service\AbstractService;
use Sys25\RnBase\Utility\Dates;
use Sys25\RnBase\Utility\Logger;
use Sys25\RnBase\Utility\Misc;
use Sys25\RnBase\Utility\Strings;
use System25\T3sports\Model\Competition;
use System25\T3sports\Model\Fixture;
use System25\T3sports\Model\Team;
use System25\T3sports\Search\SearchCoachStats;
use System25\T3sports\Search\SearchPlayerStats;
use System25\T3sports\Search\SearchRefereeStats;
use System25\T3sports\StatsIndexer\PlayerStatsInterface;
use System25\T3sports\Utility\ServiceRegistry;
use System25\T3sports\Utility\StatsDataBag;
use System25\T3sports\Utility\StatsMatchNoteProvider;
Expand Down Expand Up @@ -47,29 +47,35 @@
*
* @author Rene Nitzsche
*/
class Statistics extends AbstractService
class Statistics
{
private $statsSrvArr = [];
private $matchService;
private $indexerProvider;

public function __construct(MatchService $matchService = null, StatsIndexerProvider $indexerProvider = null)
{
$this->matchService = $matchService ?: ServiceRegistry::getMatchService();
$this->indexerProvider = $indexerProvider ?: StatsIndexerProvider::getInstance();
}

/**
* Update statistics for a competition.
*
* @param Competition $competition
*/
public function indexPlayerStatsByCompetition($competition)
public function indexPlayerStatsByCompetition(Competition $competition)
{
// Der Service lädt alle DatenServices für Spielerdaten
// Danach lädt er die Spiele eines Wettbewerbs
// Für jedes Spiel werden die Events geladen
// Anschließend bekommt jeder Service das Spiel, den Spieler und die Events übergeben
// In ein Datenarray legt er die relevanten Daten für den Spieler
$mSrv = ServiceRegistry::getMatchService();
$builder = $mSrv->getMatchTableBuilder();
$builder = $this->matchService->getMatchTableBuilder();
$builder->setCompetitions($competition->getUid());
$builder->setStatus(2);
$fields = $options = [];
$builder->getFields($fields, $options);
$matches = $mSrv->search($fields, $options);
$matches = $this->matchService->search($fields, $options);
$this->indexStatsByMatches($matches);
}

Expand Down Expand Up @@ -111,7 +117,7 @@ public function indexStatsByMatches($matches)
* @param StatsMatchNoteProvider $mnProv
* @param bool $homeTeam
*/
private function indexPlayerData($match, $mnProv, $homeTeam)
private function indexPlayerData(Fixture $match, $mnProv, $homeTeam)
{
// Services laden
$servicesArr = $this->lookupPlayerServices();
Expand All @@ -138,7 +144,7 @@ private function indexPlayerData($match, $mnProv, $homeTeam)
* @param StatsMatchNoteProvider $mnProv
* @param bool $homeTeam
*/
private function indexCoachData($match, $mnProv, $homeTeam)
private function indexCoachData(Fixture $match, $mnProv, $homeTeam)
{
// Services laden
$servicesArr = $this->lookupCoachServices();
Expand All @@ -165,7 +171,7 @@ private function indexCoachData($match, $mnProv, $homeTeam)
* @param StatsMatchNoteProvider $mnProv
* @param bool $homeTeam
*/
private function indexRefereeData($match, $mnProv, $homeTeam)
private function indexRefereeData(Fixture $match, $mnProv, $homeTeam)
{
// Services laden
$servicesArr = $this->lookupRefereeServices();
Expand All @@ -189,7 +195,7 @@ private function indexRefereeData($match, $mnProv, $homeTeam)
*
* @param Fixture $match
*/
private function clearPlayerData($match, $isHome)
private function clearPlayerData(Fixture $match, $isHome)
{
$where = 't3match = '.$match->getUid().' AND ishome='.($isHome ? 1 : 0);

Expand All @@ -201,7 +207,7 @@ private function clearPlayerData($match, $isHome)
*
* @param Fixture $match
*/
private function clearCoachData($match, $isHome)
private function clearCoachData(Fixture $match, $isHome)
{
$where = 't3match = '.$match->getUid().' AND ishome='.($isHome ? 1 : 0);

Expand All @@ -213,7 +219,7 @@ private function clearCoachData($match, $isHome)
*
* @param Fixture $match
*/
private function clearRefereeData($match, $isHome)
private function clearRefereeData(Fixture $match, $isHome)
{
$where = 't3match = '.$match->getUid().' AND ishome='.($isHome ? 1 : 0);

Expand Down Expand Up @@ -254,10 +260,9 @@ private function saveRefereeData($dataBags)
* Liefert die DataBags für die Spieler eines beteiligten Teams.
*
* @param Fixture $match
* @param bool $home
* true, wenn das Heimteam geholt werden soll
* @param bool $home true, wenn das Heimteam geholt werden soll
*
* @return array[StatsDataBag]
* @return StatsDataBag[]
*/
public function getPlayerBags($match, $home)
{
Expand Down Expand Up @@ -288,10 +293,9 @@ public function getPlayerBags($match, $home)
* Liefert die DataBags für die Trainer eines beteiligten Teams.
*
* @param Fixture $match
* @param bool $home
* true, wenn das Heimteam geholt werden soll
* @param bool $home true, wenn das Heimteam geholt werden soll
*
* @return array[StatsDataBag]
* @return StatsDataBag[]
*/
public function getCoachBags($match, $home)
{
Expand All @@ -311,12 +315,11 @@ public function getCoachBags($match, $home)
* Liefert die DataBags für den Schiedsrichter eines Spiels.
*
* @param Fixture $match
* @param bool $home
* true, wenn das Heimteam geholt werden soll
* @param bool $home true, wenn das Heimteam geholt werden soll
*
* @return array[StatsDataBag]
* @return StatsDataBag[]]
*/
public function getRefereeBags($match, $home)
public function getRefereeBags(Fixture $match, $home)
{
$refereeUid = $match->getProperty('referee');
$ids = $match->getProperty('referee');
Expand Down Expand Up @@ -350,10 +353,13 @@ public function getRefereeBags($match, $home)
* @param bool $home
* @param string $profileField
*
* @return object|\Exception
* @return StatsDataBag
*
* @throws \Exception
*/
private function createProfileBag($uid, $match, $home, $profileField)
{
/** @var StatsDataBag $bag */
$bag = tx_rnbase::makeInstance(StatsDataBag::class);
$bag->setParentUid($uid);
// Hier noch die allgemeinen Daten rein!
Expand All @@ -378,7 +384,7 @@ private function createProfileBag($uid, $match, $home, $profileField)
return $bag;
}

private function getGroupUid($team, $competition)
private function getGroupUid(Team $team, Competition $competition)
{
$groupUid = $team->getGroupUid();
if (!$groupUid) {
Expand Down Expand Up @@ -440,7 +446,7 @@ public function searchRefereeStats($fields, $options)
*/
public function lookupPlayerServices()
{
return $this->lookupStatsServices('t3sportsPlayerStats');
return $this->lookupStatsServices(PlayerStatsInterface::INDEXER_TYPE);
}

/**
Expand Down Expand Up @@ -470,14 +476,8 @@ public function lookupRefereeServices()
*/
private function lookupStatsServices($key)
{
if (!array_key_exists($key, $this->statsSrvArr)) {
$srvArr = Misc::lookupServices($key);
$this->statsSrvArr[$key] = [];
foreach ($srvArr as $subType => $srvData) {
$this->statsSrvArr[$key][] = Misc::getService($key, $subType);
}
}
$indexer = $this->indexerProvider->getStatsIndexerByType($key);

return $this->statsSrvArr[$key];
return $indexer;
}
}
Loading

0 comments on commit 2fb528f

Please sign in to comment.