Jacques Bodin-Hullin Développeur d'applications Web

La perfection est atteinte non quand il ne reste rien à ajouter, mais quand il ne reste rien à enlever.

Antoine de Saint Exupéry

Les scripts Magento

Nous sommes tous confrontés à un moment ou à un autre à devoir palier un problème rapidement sur un site en production.

Le problème le plus souvent doit se régler avec un script shell. Un script shell ok... mais en PHP ! Hors de question de se taper le script bash/python ou autre alors qu'on a besoin de charger Magento, d'accéder à la base etc.

Et surtout... il faut bien l'avouer, pouvoir accéder à la config, aux modèles et autres collections... bah c'est quand même bien pratique !


Tout d'abord il faut déterminer un endroit où nous pouvons stocker nos scripts...

J'ai pour habitude de faire un répertoire /misc. Alors je vais la garder et c'est dans ce répertoire que nous allons créer nos fichiers.

$ mkdir misc
$ vim misc/change_admin_password.php

Tant qu'à faire... autant réaliser un script pratique :)

On commence donc par charger Magento :

<?php

// Mage ! require_once DIR . '/../app/Mage.php';

// Init Magento Mage::app('admin');

// Init store (needed for save products for example) Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

Peut-être qu'avant ça il serait préférable de tester la validiter de notre ligne de commande ?

<?php

// Usage function :) function usage() { echo "Usage: php -f " . basename(FILE) . " <username>\n"; exit(65); }

// Check command line if ($argc != 2) { usage(); }

Une fois qu'on a notre utilisateur, on le charge et on vérifie qu'il existe bien :

<?php

// We get the user $user = Mage::getModel('admin/user')->load($argv[1], 'username');

// User exists? if (!$user->getId()) { echo "Bad username.\n\n"; usage(); }

Ensuite on demande le mot de passe et on met à jour l'utilisateur :

<?php

// We ask for the password do { echo "Which password? "; $password = trim(fgets(STDIN)); } while (!$password);

// We change the user password :) $user->setNewPassword($password)->save();

echo "User updated\n";

exit(0);

On exécute :

$ php misc/change_admin_password.php jacques
Which password? monSuperPassword      
User updated
$

Voilà ce que ça donne :


Sauf qu'on a un problème... Là le script est super simple.

Et pour régler votre urgence vous avez besoin de vous mettre dans un environnement de "setup". En gros vous voulez être comme dans le fameux mysql4-install-0.1.0.php ;)

Pour récupérer un setup de l'EAV par exemple (pour pouvoir faire des getAttributeId) :

<?php
$setup = Mage::getModel('eav/entity_setup', 'eav');

// Op le SQL ! // $setup->run($sql);

Pour récupérer une connection et une ressource :

<?php
$res = Mage::getSingleton('core/resource');
$cn = $res->getConnection('core_write');

// Nom d'une table ? // $res->getTableName('foo'); // Un select ? (Zend_Db_Select) // $select = $cn->select();

Voilà, à vous de jouer ! Et n'hésitez pas à partager vos scripts dans les commentaires, c'est toujours bon à prendre :)


Commentaires

blog comments powered by Disqus

Quelques infos

Contact

Mon QRcode

le QRcode