it-swarm.com.de

Globale Variablen XMLHttpRequest und Joomla

Ich habe ein System-Joomla 3.x-Plugin mit einer Option zum Wiederherstellen der Einstellungen. Dazu benutze ich XMLHttpRequest, um eine Sicherungsdatei zu laden. Kein Problem diese Seite. Das Problem liegt in der PHP-Datei, mit der die Datenbank aktualisiert wurde. Ich kann nicht auf die globalen Variablen von Joomla zugreifen. Ich weiß, dass es normal ist, weil die Datei nicht von Joomla selbst aufgerufen wird.

mein Drehbuch:

function uploadFile() {
var fd = new FormData();
fd.append("fileToUpload",  document.getElementById('fileToUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "restore.php");
xhr.send(fd);
}

restore.php Datei:

function import($_FILES)
{
if ($_FILES['fileToUpload']['error'] > 0) {
    echo "<p class='alert alert-error'>An error occurred while uploading!</p>";     
} else {
    $file_name = $_FILES['fileToUpload']['name'];
    $file_ext  = strtolower(end(explode(".", $file_name)));
    $file_size = $_FILES['fileToUpload']['size'];
    if (($file_ext == "json") && ($file_size < 500000)) {
        $options = file_get_contents($_FILES['fileToUpload']['tmp_name']);

        // Get a database object. 
        $db = JFactory::getDbo();

        // Create a new query object.
        $query = $db->getQuery(true);

        // Fields to update.
        $fields = array(
            $db->quoteName('field_to_update') . ' = ' . $db->quote($options)
        );

        // Conditions for which records should be updated.
        $conditions = array(
            $db->quoteName('element') . ' = ' . $db->quote('plugin_name'), 
            $db->quoteName('folder') . ' = ' . $db->quote('system')
        );

        // Set the query and execute it.
        $query->update($db->quoteName('#__extensions'))->set($fields)->where($conditions);
        $db->setQuery($query);
        $result = $db->execute();

        echo "<p class='alert alert-success'>Backup file successfully restored!</p>";
    } else {
        if ($file_ext <> "json") {
            echo "<p class='alert alert-error'>Invalid file type! Must be a JSON file.</p>";
        } elseif ($file_size > 500000) {
            echo "<p class='alert alert-error'>File too big!</p>";
        }
    }
}
return;
}

Kann ich in meiner aufgerufenen PHP-Datei auf die globalen Datenbankvariablen von Joomla zugreifen?

1
n.h.

Sie müssen bootstrap eine ganze Joomla-App, um den CMS-Stack zu erhalten. In Ihrer Datei sollte etwas auf der ganzen Linie funktionieren:

define('_JEXEC', 1);

error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', 1);

define('JPATH_BASE', dirname(dirname(dirname(__FILE__))));
require_once JPATH_BASE . DS . 'includes' . DS . 'defines.php';
require_once JPATH_BASE . DS . 'includes' . DS . 'framework.php';

JLoader::import('joomla.user.authentication');
JLoader::import('joomla.application.component.helper');

class MyJoomlaServer extends JApplicationWeb {

    public function doExecute() {
        // Get a database object. 
        $db = JFactory::getDbo();

        // Create a new query object.
        $query = $db->getQuery(true);

        // Fields to update.
        $fields = array(
            $db->quoteName('field_to_update') . ' = ' . $db->quote($options)
        );

        ...
    }

    public function isAdmin() {
        return false;
    }
}

$app = JApplicationWeb::getInstance('MyJoomlaServer');
JFactory::$application = $app;
$app->execute();
1
Laoneo

Eine PHP-Datei im Administrator-/Komponentenverzeichnis kann nicht ausgeführt werden. Eine PHP-Datei im Administrator-/Komponentenverzeichnis kann nicht ausgeführt werden.

Schwierigkeiten beim Aufrufen von Ajax aus dem Joomla 2.5-Modul Schwierigkeiten beim Aufrufen von Ajax aus dem Joomla 2.5-Modul

0
Anibal