/**
* Add a formatter and create a chain in the Gdn factory.
*
* This is a conveinience method for chaining formatters without having to deal with the object creation logic.
*
* @param string $Type The type of formatter.
* @param object $Formatter The formatter to install.
* @param int $Priority The priority of the formatter in the chain. High priorities come first.
* @return Gdn_FormatterChain The chain object that was created.
*/
public static function chain($Type, $Formatter, $Priority = Gdn_FormatterChain::PRIORITY_DEFAULT)
{
// Grab the existing formatter from the factory.
$Formatter = Gdn::factory($Type . 'Formatter');
if ($Formatter === null) {
$Chain = new Gdn_FormatterChain();
Gdn::factoryInstall($Type . 'Formatter', 'Gdn_FormatterChain', __FILE__, Gdn::FactorySingleton, $Chain);
} elseif (is_a($Formatter, 'Gdn_FormatterChain')) {
$Chain = $Formatter;
} else {
Gdn::factoryUninstall($Type . 'Formatter');
// Look for a priority on the existing object.
if (property_exists($Formatter, 'Priority')) {
$Priority = $Formatter->Priority;
} else {
$Priority = self::PRIORITY_DEFAULT;
}
$Chain = new Gdn_FormatterChain();
$Chain->add($Formatter, $Priority);
Gdn::factoryInstall($Type . 'Formatter', 'Gdn_FormatterChain', __FILE__, Gdn::FactorySingleton, $Chain);
}
$Chain->add($Formatter, $Priority);
return $Chain;
}