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 :
// 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 ?
// 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 :
// 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 :
// 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
) :
// Op le SQL ! // $setup->run($sql);
Pour récupérer une connection et une ressource :
// 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 :)