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