Files
Chamilo/vendor/sonata-project/block-bundle/src/Block/Service/RssBlockService.php
T
Xes 73154ae174
Behat tests 1.11.x 🐞 / PHP 7.4 Test on ubuntu-latest (push) Canceled after 0s
PHP-CS-Fixer / composer_install (7.4) (push) Canceled after 0s
Chamilo 1.11.40 (ZIP oficial v1.11.40)
Fuente: https://github.com/chamilo/chamilo-lms/releases/download/v1.11.40/chamilo-1.11.40.zip
sha256: 1cf4bf2cc7bae1ef1a1eff643235db1d552f78ddf4b6dd1e2d2dac9868679439
Snapshot independiente (rama huerfana); diffable vs 1.11.38. vendor incluido.
2026-08-06 17:59:45 +02:00

131 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
/*
* This file is part of the Sonata Project package.
*
* (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Sonata\BlockBundle\Block\Service;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\BlockBundle\Block\BlockContextInterface;
use Sonata\BlockBundle\Meta\Metadata;
use Sonata\BlockBundle\Model\BlockInterface;
use Sonata\CoreBundle\Validator\ErrorElement;
use Sonata\Form\Type\ImmutableArrayType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @final since sonata-project/block-bundle 3.0
*
* @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
*/
class RssBlockService extends AbstractAdminBlockService
{
public function configureSettings(OptionsResolver $resolver)
{
$resolver->setDefaults([
'url' => false,
'title' => null,
'translation_domain' => null,
'icon' => 'fa fa-rss-square',
'class' => null,
'template' => '@SonataBlock/Block/block_core_rss.html.twig',
]);
}
public function buildEditForm(FormMapper $formMapper, BlockInterface $block)
{
$formMapper->add('settings', ImmutableArrayType::class, [
'keys' => [
['url', UrlType::class, [
'required' => false,
'label' => 'form.label_url',
]],
['title', TextType::class, [
'label' => 'form.label_title',
'required' => false,
]],
['translation_domain', TextType::class, [
'label' => 'form.label_translation_domain',
'required' => false,
]],
['icon', TextType::class, [
'label' => 'form.label_icon',
'required' => false,
]],
['class', TextType::class, [
'label' => 'form.label_class',
'required' => false,
]],
],
'translation_domain' => 'SonataBlockBundle',
]);
}
public function validateBlock(ErrorElement $errorElement, BlockInterface $block)
{
$errorElement
->with('settings[url]')
->assertNotNull([])
->assertNotBlank()
->end()
->with('settings[title]')
->assertNotNull([])
->assertNotBlank()
->assertLength(['max' => 50])
->end();
}
public function execute(BlockContextInterface $blockContext, Response $response = null)
{
// merge settings
$settings = $blockContext->getSettings();
$feeds = false;
if ($settings['url']) {
$options = [
'http' => [
'user_agent' => 'Sonata/RSS Reader',
'timeout' => 2,
],
];
// retrieve contents with a specific stream context to avoid php errors
$content = @file_get_contents($settings['url'], false, stream_context_create($options));
if ($content) {
// generate a simple xml element
try {
$feeds = new \SimpleXMLElement($content);
$feeds = $feeds->channel->item;
} catch (\Exception $e) {
// silently fail error
}
}
}
return $this->renderResponse($blockContext->getTemplate(), [
'feeds' => $feeds,
'block' => $blockContext->getBlock(),
'settings' => $settings,
], $response);
}
public function getBlockMetadata($code = null)
{
return new Metadata($this->getName(), (null !== $code ? $code : $this->getName()), false, 'SonataBlockBundle', [
'class' => 'fa fa-rss-square',
]);
}
}