<?php
/**
* Carcutter Data Platform
* Configuration Manager
*/
namespace App\CarCutter;
use League\Flysystem\FilesystemAdapter;
use League\Flysystem\Ftp\FtpAdapter;
use Pimcore\Model\DataObject\CustomerConfig;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnAutoGestion;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnBee2Link;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnFTPSettings;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnKeplerVO;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnPlanetVO;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnHomeNet;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnMaxDigital;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnDAT;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnProMax;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnDealerSearch;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnCarbase;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnWayke;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnFastback;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnAutoTelex;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnOpenFlex;
use Pimcore\Model\DataObject\Fieldcollection\Data\ConnWebhook;
class ConfigManager
{
public static function loadConfigByName(string $name) : ?CustomerConfig
{
$list = new CustomerConfig\Listing();
$list->setCondition('name = :name and enabled = 1', [
'name' => $name
]);
if($results = $list->load()) {
return $results[0];
}
return null;
}
public static function loadConfigByToken(string $token) : ?CustomerConfig
{
$list = new CustomerConfig\Listing();
$list->setCondition('token = :token and enabled = 1', [
'token' => $token
]);
if($results = $list->load()) {
return $results[0];
}
return null;
}
public static function loadValidConfigs() : array
{
$list = new CustomerConfig\Listing();
$list->setCondition('enabled = 1');
return $list->load();
}
public static function getUploadAdapter(CustomerConfig $config, string $type = '', bool $raw = false) : mixed
{
return self::getAdapter($config, ['out', 'bi'], $type, $raw);
}
public static function getProMaxAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnProMax::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getDealerCarSearchAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnDealerSearch::class, []);
echo count($availableConnections)." DealerCarSearch Files found\n";
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getDownloadAdapter(CustomerConfig $config, string $type = '', bool $raw = false) : ?FilesystemAdapter
{
return self::getAdapter($config, ['in', 'bi'], $type, $raw);
}
public static function getBeelinkAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnBee2Link::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getOpenFlexAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnOpenFlex::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getCarBaseAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnCarbase::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getWebhookAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnWebhook::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getFastbackAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnFastback::class, []);
if(count($availableConnections) > 0) {
echo count($availableConnections)." Fastback connections found\n";
return $availableConnections;
}
return null;
}
public static function getWaykeAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnWayke::class, []);
if(count($availableConnections) > 0) {
return $availableConnections;
}
return null;
}
public static function getDATAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnDAT::class, []);
if(count($availableConnections) > 0) {
echo count($availableConnections)." DAT connections found\n";
return $availableConnections;
}
return null;
}
public static function getPlanetVoAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnPlanetVO::class, []);
if(count($availableConnections) > 0)
{
echo count($availableConnections)." PVO connections found\n";
return $availableConnections;
}
return null;
}
public static function getAutoTelexAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnAutoTelex::class, []);
if(count($availableConnections) > 0)
{
echo count($availableConnections)." AutoTelex connections found\n";
return $availableConnections;
}
return null;
}
public static function getKeplerVOAdapter(CustomerConfig $config) : ?ConnKeplerVO
{
$availableConnections = self::getConnections($config, ConnKeplerVO::class, []);
if(count($availableConnections) > 0)
{
return array_pop($availableConnections);
}
return null;
}
public static function getHomeNetAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnHomeNet::class, []);
if(count($availableConnections) > 0)
{
return $availableConnections;
}
//echo "no HomeNet connections found\n";
return null;
}
public static function getMaxDigitalAdapter(CustomerConfig $config) : mixed
{
$availableConnections = self::getConnections($config, ConnMaxDigital::class, []);
if(count($availableConnections) > 0)
{
return $availableConnections;
}
//echo "no HomeNet connections found\n";
return null;
}
private static function getAdapter(CustomerConfig $config, array $directions, string $type = '', bool $raw = false) : mixed
{
$availableConnections = self::getConnections($config, $type, $directions);
if(count($availableConnections) > 0) {
$probe = array_pop($availableConnections);
if(!$raw && $probe::class === ConnFTPSettings::class)
{
return self::getFtpAdapter($probe);
}
elseif ($raw && $probe::class === ConnFTPSettings::class)
{
return $probe;
}
}
return null;
}
private static function getFtpAdapter(ConnFTPSettings $config) : ?FtpAdapter
{
return new FtpAdapter(
// Connection options
\League\Flysystem\Ftp\FtpConnectionOptions::fromArray([
'host' => $config->getHostName(), // required
'root' => $config->getBaseFolder(), // required
'username' => $config->getUser(), // required
'password' => $config->getPassword(), // required
'port' => intval($config->getPort()),
'ssl' => $config->getSsl(),
'timeout' => 90,
'utf8' => $config->getUseUtf(),
'passive' => true,
'transferMode' => FTP_BINARY,
'systemType' => null, // 'windows' or 'unix'
'ignorePassiveAddress' => $config->getIgnorePassiveAddress(), // true or false
'timestampsOnUnixListingsEnabled' => false, // true or false
'recurseManually' => true // true
])
);
}
public static function getConnections(CustomerConfig $config, string $type = '', array $directions) : mixed
{
$connections = $config->getConnections();
if($connections->getCount() === 0) {
return [];
}
$connItems = $connections->getItems();
$availableConnections = array_filter($connItems, function($c) use ($type, $directions) {
if($type === '' || $c::class === $type) {
if(method_exists($c, 'getDirection')) {
if(in_array($c->getDirection(), $directions)) {
return true;
}
} else {
return true;
}
}
return false;
});
return $availableConnections;
}
}