summaryrefslogtreecommitdiff
path: root/extensions/Gadgets/includes/GadgetRepo.php
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:32:59 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:32:59 -0400
commit6dc1997577fab2c366781fd7048144935afa0012 (patch)
tree8918d28c7ab4342f0738985e37af1dfc42d0e93a /extensions/Gadgets/includes/GadgetRepo.php
parent150f94f051128f367bc89f6b7e5f57eb2a69fc62 (diff)
parentfa89acd685cb09cdbe1c64cbb721ec64975bbbc1 (diff)
Merge commit 'fa89acd'
# Conflicts: # .gitignore # extensions/ArchInterWiki.sql
Diffstat (limited to 'extensions/Gadgets/includes/GadgetRepo.php')
-rw-r--r--extensions/Gadgets/includes/GadgetRepo.php63
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;
+ }
+}