diff --git a/bridges/PanneauPocketBridge.php b/bridges/PanneauPocketBridge.php
index e6980359..f4478224 100644
--- a/bridges/PanneauPocketBridge.php
+++ b/bridges/PanneauPocketBridge.php
@@ -4,24 +4,31 @@ class PanneauPocketBridge extends BridgeAbstract
{
const NAME = 'Panneau Pocket';
const URI = 'https://app.panneaupocket.com';
- const DESCRIPTION = 'Fetches the latest infos from Panneau Pocket';
+ const DESCRIPTION = 'Fetches the latest infos from Panneau Pocket.
+
To have completion on cities, you must click on the button "Request temporary access to the demo server" here
+
Or use your own proxy and change the proxy value in RSS-Bridge config.ini.php';
const MAINTAINER = 'floviolleau';
- const CACHE_TIMEOUT = 7200; // 2h
-
- private static ?array $CITIES = null;
-
- public function __construct($cache, $logger)
- {
- parent::__construct($cache, $logger);
-
- // Assign the dynamic value to the constant in the constructor
- self::$CITIES = self::getCities();
- }
+ const CACHE_TIMEOUT = 0;//7200; // 2h
+ const PARAMETERS = [[
+ 'city' => [
+ 'name' => 'Choisir une ville',
+ 'type' => 'dynamic_list',
+ 'ajax_route' => 'https://app.panneaupocket.com/public-api/city',
+ 'fields_name_used_as_value' => [
+ 'id',
+ 'name',
+ 'postCode'
+ ],
+ 'fields_name_used_for_display' => [
+ 'name',
+ 'postCode'
+ ],
+ ]
+ ]];
public function collectData()
{
- $matchedCity = array_search($this->getInput('city'), self::$CITIES);
- $city = strtolower($this->getInput('city') . '-' . $matchedCity);
+ $city = $this->getInput('city');
$url = sprintf('https://app.panneaupocket.com/ville/%s', urlencode($city));
$html = getSimpleHTMLDOM($url);
@@ -42,157 +49,4 @@ class PanneauPocketBridge extends BridgeAbstract
$this->items[] = $item;
}
}
-
- /**
- * /!\ Warning
- * Display all cities in a select on the front-end can be time-consuming to render
- *
- * @return array
- * @throws CloudFlareException
- * @throws HttpException
- * @throws JsonException
- */
- private static function getCities(): array
- {
- $cities = json_decode(getContents(self::URI . '/public-api/city'), true, 512, JSON_THROW_ON_ERROR);
-
- $formattedCities = null;
- $maxTextSize = 50;
- foreach ($cities as $city) {
- $value = $city['name'] . ' - ' . $city['postCode'];
-
- // reduce length for very long cities' name else style page is broken
- // because of a too long value in select option.
- if (strlen($city['name']) > $maxTextSize) {
- // remove 11 char:
- // '...' + ' - ' + postcode (5)
- $lastPos = ($maxTextSize - 11) - strlen($value);
- $value = substr($value, 0, strrpos($value, ' ', $lastPos)) . '... - ' . $city['postCode'];
- }
- $formattedCities[$value] = $city['id'];
- }
-
- return $formattedCities;
- }
-
- /**
- * override base method
- * @return array[]
- */
- public function getParameters(): array
- {
- return [
- [
- 'city' => [
- 'name' => 'Choisir une ville',
- 'type' => 'list',
- 'values' => self::$CITIES,
- ]
- ]
- ];
- }
-
- /**
- * Override base method because they use static::PARAMETERS instead of getParameters
- * in function setInputWithContext
- *
- * else $this->getInput do not return any value
- *
- * @param array $input
- * @return void
- * @throws Exception
- */
- public function setInput(array $input)
- {
- parent::setInput($input);
- $this->setInputWithContext($input, $this->queriedContext);
- }
-
- /**
- * Override base method because they use static::PARAMETERS instead of getParameters
- *
- * else $this->getInput do not return any value
- *
- * @param array $input
- * @param $queriedContext
- * @return void
- */
- public function setInputWithContext(array $input, $queriedContext)
- {
- // Import and assign all inputs to their context
- foreach ($input as $name => $value) {
- foreach ($this->getParameters() as $context => $set) {
- if (array_key_exists($name, $this->getParameters()[$context])) {
- $this->inputs[$context][$name]['value'] = $value;
- }
- }
- }
-
- // Apply default values to missing data
- $contexts = [$queriedContext];
- if (array_key_exists('global', $this->getParameters())) {
- $contexts[] = 'global';
- }
-
- foreach ($contexts as $context) {
- if (!isset($this->getParameters()[$context])) {
- // unknown context provided by client, throw exception here? or continue?
- }
-
- foreach ($this->getParameters()[$context] as $name => $properties) {
- if (isset($this->inputs[$context][$name]['value'])) {
- continue;
- }
-
- $type = $properties['type'] ?? 'text';
-
- switch ($type) {
- case 'checkbox':
- $this->inputs[$context][$name]['value'] = $input[$context][$name]['value'] ?? false;
- break;
- case 'list':
- if (!isset($properties['defaultValue'])) {
- $firstItem = reset($properties['values']);
- if (is_array($firstItem)) {
- $firstItem = reset($firstItem);
- }
- $this->inputs[$context][$name]['value'] = $firstItem;
- } else {
- $this->inputs[$context][$name]['value'] = $properties['defaultValue'];
- }
- break;
- default:
- if (isset($properties['defaultValue'])) {
- $this->inputs[$context][$name]['value'] = $properties['defaultValue'];
- }
- break;
- }
- }
- }
-
- // Copy global parameter values to the guessed context
- if (array_key_exists('global', $this->getParameters())) {
- foreach ($this->getParameters()['global'] as $name => $properties) {
- if (isset($input[$name])) {
- $value = $input[$name];
- } else {
- if ($properties['type'] ?? null === 'checkbox') {
- $value = false;
- } elseif (isset($properties['defaultValue'])) {
- $value = $properties['defaultValue'];
- } else {
- continue;
- }
- }
- $this->inputs[$queriedContext][$name]['value'] = $value;
- }
- }
-
- // Only keep guessed context parameters values
- if (isset($this->inputs[$queriedContext])) {
- $this->inputs = [$queriedContext => $this->inputs[$queriedContext]];
- } else {
- $this->inputs = [];
- }
- }
}