fossar / selfoss

multipurpose rss reader, live stream, mashup, aggregation web application
https://selfoss.aditu.de
GNU General Public License v3.0
2.35k stars 343 forks source link

Custom spout not displayed in drop down menu #1450

Open noiret opened 11 months ago

noiret commented 11 months ago

Hello,

I have copied src/spouts/rss/feed.php to create a new spout inside src/spouts/rss/ directory but this spout is not available in the spout menu.

Am I missing something?

ls -al src/spouts/rss
drwxr-xr-x  2 www-data www-data 4096 Jul 24 09:58 .
drwxr-xr-x 10 www-data www-data 4096 Oct 16  2022 ..
-rwxr-xr-x  1 www-data www-data 1215 Oct 16  2022 enclosures.php
-rwxr-xr-x  1 www-data www-data 8096 Oct 16  2022 feed.php
-rwxr-xr-x  1 www-data www-data 3475 Oct 16  2022 fulltextrss.php
-rwxr-xr-x  1 www-data www-data 5853 Oct 16  2022 golem.php
-rwxr-xr-x  1 www-data www-data 6848 Oct 16  2022 heise.php
-rwxr-xr-x  1 www-data www-data 2538 Oct 16  2022 images.php
-rwxr-xr-x  1 www-data www-data 3369 Oct 16  2022 instapaper.php
-rwxr-xr-x  1 www-data www-data 4228 Oct 16  2022 lightreading.php
-rwxr-xr-x  1 www-data www-data 1951 Oct 16  2022 mmospy.php
-rwxr-xr-x  1 www-data www-data 3028 Oct 16  2022 prolinux.php
-rwxr-xr-x  1 www-data www-data 8157 Jul 24 10:14 customspout.php
-rwxr-xr-x  1 www-data www-data 2066 Oct 16  2022 teltarif.php
<?php

namespace spouts\rss;

class customspout extends \spouts\spout {
    /** @var string name of source */
    public $name = 'My custom spout';

    /** @var string description of this source type */
    public $description = 'test';

    <...>

image

Selfoss: 2.19 PHP: 8.1.2

jtojnar commented 11 months ago

Weird. I do not see why that would not work.

I tried just copying feed.php into customspout.php, replacing the class name. (The file name needs to match the class name – but that is already the case in your example, unless the file name ends with a space that was not copied or something.)

Maybe try opening http://localhost/selfoss/sources/spouts (replace http://localhost/selfoss with your selfoss address) and pressing Ctrl-F5 to clear out browser cache (though web server will usually send headers to prevent caching for PHP scripts so I do not think it would be cached).

You can also try to apply the following patch and then opening the aforementioned URL just to verify selfoss sees the file:

--- a/src/helpers/SpoutLoader.php
+++ b/src/helpers/SpoutLoader.php
@@ -95,6 +95,7 @@ class SpoutLoader {
             if (is_dir($location . '/' . $dir) && substr($dir, 0, 1) !== '.') {
                 // search for spouts
                 foreach (scandir($location . '/' . $dir) as $file) {
+                    var_dump($file);
                     // only scan visible .php files
                     if (is_file($location . '/' . $dir . '/' . $file) && substr($file, 0, 1) !== '.' && strpos($file, '.php') !== false) {
                         // create reflection class
noiret commented 11 months ago

Hello,

I have added this code in the SpoutLoader with the var_dump call :

foreach (scandir($location . '/' . $dir) as $file) {
  // only scan visible .php files
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL);
  $fp = fopen('/var/www/html/selfoss/vardump.txt', 'a+');
  fwrite($fp, serialize($file))
  fclose($fp);
  var_dump($file);
<...>

But nothing appears on the screen & the dump file is not created.

I've disabled OpCache, forced a client-side refresh, restarted the Apache server and PHP-FPM without improvement. I've also disabled caching by commenting out the mod_header directive and adding the following block to the .htcaccess file:

# DISABLE CACHING
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

For testing, i removed the Golem spout (src/spouts/rss/golem.php), and it's still visible on the /selfoss/sources/spouts page. 🤯

It's probably a problem with my environment, not with Selfoss.