diff options
Diffstat (limited to 'extensions/Gadgets/includes/GadgetRepo.php')
-rw-r--r-- | extensions/Gadgets/includes/GadgetRepo.php | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/extensions/Gadgets/includes/GadgetRepo.php b/extensions/Gadgets/includes/GadgetRepo.php new file mode 100644 index 00000000..18bf5b51 --- /dev/null +++ b/extensions/Gadgets/includes/GadgetRepo.php @@ -0,0 +1,63 @@ +<?php + +abstract class GadgetRepo { + + /** + * @var GadgetRepo|null + */ + private static $instance; + + /** + * Get the ids of the gadgets provided by this repository + * + * @return string[] + */ + abstract public function getGadgetIds(); + + /** + * Get the Gadget object for a given gadget id + * + * @param string $id + * @throws InvalidArgumentException + * @return Gadget + */ + abstract public function getGadget( $id ); + + /** + * Get a list of gadgets sorted by category + * + * @return array array( 'category' => array( 'name' => $gadget ) ) + */ + public function getStructuredList() { + $list = array(); + foreach ( $this->getGadgetIds() as $id ) { + $gadget = $this->getGadget( $id ); + $list[$gadget->getCategory()][$gadget->getName()] = $gadget; + } + + return $list; + } + + /** + * Get the configured default GadgetRepo. Currently + * this hardcodes MediaWikiGadgetsDefinitionRepo since + * that is the only implementation + * + * @return GadgetRepo + */ + public static function singleton() { + if ( self::$instance === null ) { + self::$instance = new MediaWikiGadgetsDefinitionRepo(); + } + return self::$instance; + } + + /** + * Should only be used by unit tests + * + * @param GadgetRepo|null $repo + */ + public static function setSingleton( $repo = null ) { + self::$instance = $repo; + } +} |