Récupérer par programme la liste de toutes les méthodes d'expédition

Je suis en train d'écrire un quick-and-dirty module de restreindre les méthodes d'expédition sur la base de produits dans le panier. Par exemple, si le client ajoute de la nourriture, je ne veux expédition durant la nuit des méthodes pour être sélectionné. Certaines des extensions commerciales sont simplement surpuissant et ils ont bien plus de fonctionnalités dont j'ai besoin.

Chaque produit aura une liste déroulante attribut appelé "l'Expédition de la Classe". L'administrateur sera en mesure de créer l'Expédition de ces Classes dans le backend. Ils vont lui donner un nom et choisir les méthodes sont autorisés.

Quand vient le temps d'obtenir l'expédition de devis, nous allons seulement montrer a permis à des méthodes basées sur l'Expédition de Classe.

Ma principale question est: comment puis-je récupérer une liste de toutes les méthodes d'expédition pour l'administrateur de sélectionner lors de la création de ces classes d'expédition?

Et comme une question secondaire, est-il judicieux de faire le filtrage des méthodes autorisées à l'intérieur de Mage_Sales_Model_Quote_Address::requestShippingRates? (Je vais être substitution de cette méthode de cours)


EDIT:

Grâce à @BrianVPS, j'ai été en mesure de venir avec le code ci-dessous. Il affiche toutes les méthodes individuelles auprès des transporteurs à l'aide de optgroups. Fonctionne très bien avec multiselect! Je ne pense pas qu'il vérifie si les méthodes sont bien activé.

public function getAllShippingMethods()
{
    $methods = Mage::getSingleton('shipping/config')->getActiveCarriers();

    $options = array();

    foreach($methods as $_ccode => $_carrier)
    {
        $_methodOptions = array();
        if($_methods = $_carrier->getAllowedMethods())
        {
            foreach($_methods as $_mcode => $_method)
            {
                $_code = $_ccode . '_' . $_mcode;
                $_methodOptions[] = array('value' => $_code, 'label' => $_method);
            }

            if(!$_title = Mage::getStoreConfig("carriers/$_ccode/title"))
                $_title = $_ccode;

            $options[] = array('value' => $_methodOptions, 'label' => $_title);
        }
    }

    return $options;
}

source d'informationauteur Colin O'Dell