HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/subdomains/xibo/views/upgrade-page.twig
{#
/*
 * Spring Signage Ltd - http://www.springsignage.com
 * Copyright (C) 2015 Spring Signage Ltd
 * (${FILE_NAME})
 */

#}
{% extends "authed.twig" %}
{% import "inline.twig" as inline %}

{% block actionMenu %}
    <ul class="nav nav-pills pull-right">
        <li><a title="{% trans "Open the Filter Form" %}" href="{{ theme.getThemeConfig("cms_release_notes_url") }}">{% trans "Release Notes" %}</a></li>
    </ul>
{% endblock %}

{% block pageContent %}
    {% set appName = theme.getThemeConfig("app_name") %}
    <div class="widget">
        <div class="widget-title">{% trans %}Welcome to the {{ appName }} Upgrade{% endtrans %}</div>
        <div class="widget-body">
            <p>{% trans "The steps involved in this upgrade have been listed below, clicking the start button will run through the steps one by one." %}
                {% trans "Please read through the release notes before you begin as they contain important information about this new release." %}</p>
            <p>{% trans "If you encounter an error, please contact support providing a screenshot of this page, making sure you include the step that experienced the error." %}</p>
            <p><button id="startButton" class="btn btn-default">{% trans "Start" %}</button></p>
            <table class="table">
                <thead>
                    <tr>
                        <th>{% trans "Step #" %}</th>
                        <th>{% trans "Version" %}</th>
                        <th>{% trans "Step" %}</th>
                        <th>{% trans "Requested On" %}</th>
                        <th>{% trans "Complete?" %}</th>
                        <th>{% trans "Run On" %}</th>
                    </tr>
                </thead>
                <tbody>
                    {% set priorComplete = true %}
                    {% for item in steps %}
                        <tr data-step-id="{{ item.stepId }}" data-step-url="{{ urlFor("upgrade.doStep") }}">
                            <td>
                                {% if not priorComplete or item.complete %}
                                {{ item.stepId  }}
                                {% else %}
                                <button class="doStep btn btn-sm">{{ item.stepId }}</button>
                                {% endif %}
                            </td>
                            <td>{{ item.appVersion  }}</td>
                            <td class="stepDescription">{{ item.step  }}</td>
                            <td>{{ item.requestDate|date  }}</td>
                            <td><span class="stepResult fa {% if item.complete %}fa-check{% else %}fa-times{% endif %}"></span></td>
                            <td>{% if item.lastTryDate %}{{ item.lastTryDate|date  }}{% endif %}</td>
                        </tr>
                        {% set priorComplete = item.complete %}
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
{% endblock %}

{% block javaScript %}

    <script type="text/javascript">
        var finishedTemplate;
        var startButtonUsed = false;

        $(document).ready(function() {

            // Bind to the active do step button
            $("button.doStep").click(clickStep);

            // Bind the start button
            $("#startButton").click(function() {
                // Find and "click" the button on the next step
                startButtonUsed = true;
                $("button.doStep").click();
            });

            finishedTemplate = Handlebars.compile($("#upgrade-finished").html());
        });

        var row, stepId, url;

        function clickStep(e) {
            e.preventDefault();

            row = $(this).closest("tr");
            stepId = row.data().stepId;
            url = row.data().stepUrl;

            // Add a spinner
            row.find("span.stepResult").addClass("fa-cog fa-spin").removeClass("fa-times fa-check");

            // Fire off a POST to do this step.
            $.ajax({
                method: "POST",
                url: url.replace(":id", stepId),
                dataType: "json",
                success: stepResponse,
                error: function (response) {
                    SystemMessage(response.responseText);
                }
            });
        }

        function stepResponse(response) {

            row.find("span.stepResult").removeClass("fa-cog fa-spin");

            if (response.success) {

                // Update the status
                row.find("button.doStep").parent().html(stepId);
                row.find("span.stepResult").removeClass("fa-times").addClass("fa-check").parent().next().html(moment().format(jsDateFormat));
                row.find("td.stepDescription div.error").remove();

                // We want to move down (see if there is another step)
                var subsequentStep = row.next();

                if (subsequentStep.length == 0) {
                    // Replace the whole page with the "finished" template and bomb out
                    $(".widget-body").html(finishedTemplate());
                    return;
                }

                var button = $("<button/>").addClass("doStep").addClass("btn").addClass("btn-sm").click(clickStep).html(subsequentStep.data().stepId);

                subsequentStep.children().eq(0).html(button);

                // Do the next one
                if (startButtonUsed)
                    button.click();
            }
            else {
                startButtonUsed = false;

                row.find("span.stepResult").addClass("fa-times").removeClass("fa-check");

                toastr.error(response.message);

                // Append the error message under the step description
                var skipButton = $("<span class=\"badge\">{%  trans "Skip this step" %} <i class=\"fa fa-times\"></i></span>").on("click", function() {
                    $.ajax({
                        method: "DELETE",
                        url: url.replace(":id", stepId),
                        success: stepResponse,
                        error: function(response) {
                            SystemMessage(response.responseText);
                        }
                    })
                });

                var error = $("<div/>").addClass("error").html(response.message).append(skipButton);
                row.find("td.stepDescription").append(error);
            }
        }
    </script>

    <script type="text/x-handlebars-template" id="upgrade-finished">
        <h3>{% trans "Upgrade Finished" %}</h3>
        <p>{% trans "Thank you for upgrading" %}. <a href="{{ urlFor("home") }}">{% trans "Please click here to continue" %}</a>.</p>
    </script>

{% endblock %}