diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:32:59 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:32:59 -0400 |
commit | 6dc1997577fab2c366781fd7048144935afa0012 (patch) | |
tree | 8918d28c7ab4342f0738985e37af1dfc42d0e93a /extensions/Gadgets/includes/GadgetRepo.php | |
parent | 150f94f051128f367bc89f6b7e5f57eb2a69fc62 (diff) | |
parent | fa89acd685cb09cdbe1c64cbb721ec64975bbbc1 (diff) |
Merge commit 'fa89acd'
# Conflicts:
# .gitignore
# extensions/ArchInterWiki.sql
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; + } +} |