PHP script to show you what's in your results directory

Hi all!
If you are like me, over the years you have accumulated quite a few results pages. In our case, we upload them to the same folder on our web server, then link to them as needed.

We find it useful to be able to go back to those files for various reasons.

I have put together a PHP file that will search a directory of Sailwave files and print out a page with the event burgee, and the title of the event, linked to the file itself. Hopefully this will help somebody!

Copy the code below into a php file (ours is called “dir.php”) and save it in the same directory on your web server as your Sailwave files. Here is an example of ours: https://www.vallartayachtclub.org/race/dir.php

It might take a few seconds to display, as I have the script checking to see if the URLs to the burgees are valid. In some cases with our older files, the original location of the burgee image changed.

I hope this helps someone!

Andy

<?php

function getEventDetails($filePath) {
    // Load the HTML content
    $htmlContent = file_get_contents($filePath);

    // Use DOMDocument to parse the HTML
    $dom = new DOMDocument();
    @$dom->loadHTML($htmlContent);

    // Find the image with alt="event burgee"
    $xpath = new DOMXPath($dom);
    $imageNode = $xpath->query('//img[@alt="event burgee"]')->item(0);
    $imageUrl = $imageNode ? $imageNode->getAttribute('src') : '';

    // Test if the image URL is valid
    if ($imageUrl) {
        $headers = @get_headers($imageUrl);
        if (!$headers || strpos($headers[0], '200') === false) {
            $imageUrl = ''; // Blank the image URL if not found or not accessible
        }
    }

    // Find the event title (assuming it's in a <title> tag or similar)
    $titleNode = $xpath->query('//title')->item(0);
    $eventTitle = $titleNode ? $titleNode->textContent : 'Unknown Event';

    // Remove "Sailwave results for" if it exists
    $eventTitle = str_replace("Sailwave results for", "", $eventTitle);
    $eventTitle = trim($eventTitle); // Trim any leading or trailing whitespace

    return [$imageUrl, $eventTitle];
}

function generateEventTable($directory) {
    // Open the directory
    $files = scandir($directory);

    // Start the table with specific styles
    echo '<table border="1" cellpadding="5" cellspacing="0" width="1%">';
    echo '<tr style="background-color: lightblue;"><th style="width: 1%; ">Event Burgee</th><th>Event Title</th></tr>';

    // Loop through each file in the directory
    foreach ($files as $file) {
        if (strpos($file, '.htm') !== false) {
            // Get event details from the file
            [$imageUrl, $eventTitle] = getEventDetails($directory . '/' . $file);

            // Add the row to the table
            echo '<tr>';
            if ($imageUrl) {
                echo '<td style="text-align: center; white-space: nowrap;"><img src="' . $imageUrl . '" alt="event burgee" style="max-height: 50px; max-width: 80px; height: auto; width: auto;"></td>';
            } else {
                echo '<td></td>'; // Blank cell if no image is found or URL is invalid
            }
            echo '<td style="width: 1%; white-space: nowrap;"><a href="' . $file . '">' . $eventTitle . '</a></td>';
            echo '</tr>';
        }
    }

    // End the table
    echo '</table>';
}

// Call the function with the current directory
generateEventTable(__DIR__);

?>
1 Like

Very good! This will be of great help.
Have started some testing, and seems to work fine.

If anyone is still using Joomla, I’ve written a Joomla module that implements this PHP script to display a list of sailwave files in a directory.

Hi Andy,
Yes there is someone still using Jomla! :slight_smile:
I would be interested in knowing more and trying.

Kind regards,
Huw

I’m also interested in testing this.

Email the address below, and I’ll send it to you. It installs like a normal Joomla module.

I have tried the php scripts. I made a joomla menu item of type iframe wrapper and inserted the URL to the script.

I modified the burgee image. Example from my test site is here.

The Iframe is perhaps not the best solution, but at least it shows the sailwave files as if they are integrated on the site. You’ll have to scroll a lot, which may be hard on some devices.

Of course I also have to set up an ftp account to the results directory if I want the Sailwave users to publish with ftp and instruct them how to publish.

I also installed Andys joomla module, which he kindly sent to me. Then i inserted a new joomla module of type mod_vycfilelist and configured the modules directory path to the results directory.

You can see example (named Resultatbörs3 Test) at my test site here.

No iframe, which is probably better. Results are opened in a new window, but I think that can be modified.

Here I also have to configure ftp accounts and instruct the Sailwave users how to publish.

What I do is use "{loadmoduleid xxx} in an article.