web-dev-qa-db-fra.com

Variables globales XMLHttpRequest et Joomla

J'ai un plugin système Joomla 3.x avec une option de restauration de ses paramètres. Pour cela, j'utilise XMLHttpRequest pour charger un fichier de sauvegarde. Pas de problème de ce côté. Le problème est dans le fichier php utilisé pour mettre à jour la base de données. Je ne peux pas accéder aux variables globales de Joomla Je sais que c'est normal car le fichier n'est pas appelé depuis Joomla même.

mon script:

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);
}

fichier restore.php:

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;
}

Est-il possible d'accéder aux variables globales de la base de données de Joomla dans mon fichier php appelé?

1
n.h.

Vous devez bootstrap toute une application Joomla pour obtenir la pile du système de gestion de contenu. Quelque chose sur la ligne devrait fonctionner dans votre fichier:

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

Impossible d'exécuter un fichier php dans le répertoire de l'administrateur/composant Impossible d'exécuter un fichier php dans le répertoire de l'administrateur/composant

Difficultés à appeler ajax depuis le module joomla 2.5 Difficultés à appeler ajax depuis le module joomla 2.5

0
Anibal