mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-11-24 18:36:59 +03:00
4f75591060
Reformat code base to PSR12 Co-authored-by: rssbridge <noreply@github.com>
156 lines
4.6 KiB
PHP
156 lines
4.6 KiB
PHP
<?php
|
|
|
|
class KununuBridge extends BridgeAbstract
|
|
{
|
|
const MAINTAINER = 'logmanoriginal';
|
|
const NAME = 'Kununu Bridge';
|
|
const URI = 'https://www.kununu.com/';
|
|
const CACHE_TIMEOUT = 86400; // 24h
|
|
const DESCRIPTION = 'Returns the latest reviews for a company and site of your choice.';
|
|
|
|
const PARAMETERS = [
|
|
'global' => [
|
|
'site' => [
|
|
'name' => 'Site',
|
|
'type' => 'list',
|
|
'title' => 'Select your site',
|
|
'values' => [
|
|
'Austria' => 'at',
|
|
'Germany' => 'de',
|
|
'Switzerland' => 'ch'
|
|
],
|
|
'exampleValue' => 'de',
|
|
],
|
|
'include_ratings' => [
|
|
'name' => 'Include ratings',
|
|
'type' => 'checkbox',
|
|
'title' => 'Activate to include ratings in the feed'
|
|
],
|
|
'limit' => [
|
|
'name' => 'Limit',
|
|
'type' => 'number',
|
|
'defaultValue' => 3,
|
|
'title' => "Maximum number of items to return in the feed.\n0 = unlimited"
|
|
]
|
|
],
|
|
[
|
|
'company' => [
|
|
'name' => 'Company',
|
|
'required' => true,
|
|
'exampleValue' => 'kununu',
|
|
'title' => 'Insert company name (i.e. Kununu) or URI path (i.e. kununu)'
|
|
]
|
|
]
|
|
];
|
|
|
|
private $companyName = '';
|
|
|
|
public function getURI()
|
|
{
|
|
if (!is_null($this->getInput('company')) && !is_null($this->getInput('site'))) {
|
|
$company = $this->fixCompanyName($this->getInput('company'));
|
|
$site = $this->getInput('site');
|
|
|
|
return sprintf('%s%s/%s', self::URI, $site, $company);
|
|
}
|
|
|
|
return parent::getURI();
|
|
}
|
|
|
|
public function getName()
|
|
{
|
|
if (!is_null($this->getInput('company'))) {
|
|
$company = $this->fixCompanyName($this->getInput('company'));
|
|
return ($this->companyName ?: $company) . ' - ' . self::NAME;
|
|
}
|
|
|
|
return parent::getName();
|
|
}
|
|
|
|
public function getIcon()
|
|
{
|
|
return 'https://www.kununu.com/favicon-196x196.png';
|
|
}
|
|
|
|
public function collectData()
|
|
{
|
|
$full = $this->getInput('full');
|
|
|
|
// Load page
|
|
$json = json_decode(getContents($this->getAPI()), true);
|
|
$this->companyName = $json['common']['name'];
|
|
$baseURI = $this->getURI() . '/bewertung/';
|
|
|
|
$limit = $this->getInput('limit') ?: 0;
|
|
|
|
// Go through all articles
|
|
foreach ($json['reviews'] as $review) {
|
|
$item = [];
|
|
$item['author'] = $review['position'] . ' / ' . $review['department'];
|
|
$item['timestamp'] = $review['createdAt'];
|
|
$item['title'] = $review['roundedScore'] . ' : ' . $review['title'];
|
|
$item['uri'] = $baseURI . $review['uuid'];
|
|
$item['content'] = $this->extractArticleDescription($review);
|
|
$this->items[] = $item;
|
|
|
|
if ($limit > 0 && count($this->items) >= $limit) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns JSON API url
|
|
*/
|
|
private function getAPI()
|
|
{
|
|
$company = $this->fixCompanyName($this->getInput('company'));
|
|
$site = $this->getInput('site');
|
|
|
|
return self::URI . 'middlewares/profiles/' .
|
|
$site . '/' . $company .
|
|
'/reviews?reviewType=employees&urlParams=sort=newest&sort=newest&page=1';
|
|
}
|
|
|
|
/*
|
|
* Returns a fixed version of the provided company name
|
|
*/
|
|
private function fixCompanyName($company)
|
|
{
|
|
$company = trim($company);
|
|
$company = str_replace(' ', '-', $company);
|
|
$company = strtolower($company);
|
|
|
|
$umlauts = ['/ä/','/ö/','/ü/','/Ä/','/Ö/','/Ü/','/ß/'];
|
|
$replace = ['ae','oe','ue','Ae','Oe','Ue','ss'];
|
|
|
|
return preg_replace($umlauts, $replace, $company);
|
|
}
|
|
|
|
/**
|
|
* Returns the description from a given article
|
|
*/
|
|
private function extractArticleDescription($json)
|
|
{
|
|
$retVal = '';
|
|
foreach ($json['texts'] as $text) {
|
|
$retVal .= '<h4>' . $text['id'] . '</h4><p>' . $text['text'] . '</p>';
|
|
}
|
|
|
|
if ($this->getInput('include_ratings') && !empty($json['ratings'])) {
|
|
$retVal .= (empty($retVal) ? '' : '<hr>') . '<table>';
|
|
foreach ($json['ratings'] as $rating) {
|
|
$retVal .= <<<EOD
|
|
<tr>
|
|
<td>{$rating['id']}
|
|
<td>{$rating['roundedScore']}
|
|
<td>{$rating['text']}
|
|
</tr>
|
|
EOD;
|
|
}
|
|
$retVal .= '</table>';
|
|
}
|
|
|
|
return $retVal;
|
|
}
|
|
}
|