Samwilson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/321210

Change subject: New extension registration system
......................................................................

New extension registration system

Change-Id: I65cc461886956d3549dfdb09200509baa05b0285
---
A .gitignore
D Genealogy.php
M README.md
M composer.json
A extension.json
R src/Person.php
A src/Special.php
R src/Traverser.php
R src/Tree.php
R src/Util.php
10 files changed, 99 insertions(+), 87 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Genealogy 
refs/changes/10/321210/1

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fcac4a7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/vendor
+
diff --git a/Genealogy.php b/Genealogy.php
deleted file mode 100644
index 9ca5711..0000000
--- a/Genealogy.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * Prevent direct execution of this script.
- */
-if (!defined('MEDIAWIKI')) die(1);
-
-/**
- * Explicit global declarations, for when this is autoloaded by Composer
- */
-global $wgExtensionCredits,
-               $wgExtensionMessagesFiles,
-               $wgAutoloadClasses,
-               $wgSpecialPages,
-               $wgHooks;
-
-/**
- * Extension metadata
- */
-$wgExtensionCredits['parserhook'][] = array(
-       'path' => __FILE__,
-       'name' => 'Genealogy',
-       'author' => "Sam Wilson <[mailto:s...@samwilson.id.au 
s...@samwilson.id.au]>",
-       'url' => "http://www.mediawiki.org/wiki/Extension:Genealogy";,
-       'descriptionmsg' => 'genealogy-desc',
-       'license-name' => 'GPL-3.0+',
-       'version' => '0.2.0',
-);
-
-/**
- * Messages
- */
-$wgExtensionMessagesFiles['Genealogy'] = __DIR__ . '/Genealogy.i18n.php';
-$wgExtensionMessagesFiles['GenealogyMagic'] = __DIR__ . 
'/Genealogy.i18n.magic.php';
-
-/**
- * Class loading
- */
-$wgAutoloadClasses['GenealogyPerson']    = __DIR__ . '/Person.php';
-$wgAutoloadClasses['GenealogySpecial']   = __DIR__ . '/Special.php';
-$wgAutoloadClasses['GenealogyCore']      = __DIR__ . '/Core.php';
-$wgAutoloadClasses['GenealogyTree']      = __DIR__ . '/Tree.php';
-$wgAutoloadClasses['GenealogyTraverser'] = __DIR__ . '/Traverser.php';
-
-/**
- * Hooks
- */
-$wgHooks['ParserFirstCallInit'][] = 'GenealogyCore::onParserFirstCallInit';
-$wgHooks['UnitTestsList'][] = 'GenealogyCore::onUnitTestsList';
diff --git a/README.md b/README.md
index e3d98e1..0f982f2 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,8 @@
 ## Usage
 
 There is only one parser function, `{{#genealogy:}}`.
-Its first two parameters are unnamed (i.e. don't have equals signs), but all
-others must be (dates, etc.).
+Its first two parameters are unnamed (i.e. don't have equals signs),
+but all others must be (dates, etc.).
 
 The following functions are supported, three for defining data and four for
 reporting data:
diff --git a/composer.json b/composer.json
index 8eab5b5..16b7334 100644
--- a/composer.json
+++ b/composer.json
@@ -16,11 +16,9 @@
                "irc": "irc://irc.freenode.net/mediawiki",
                "source": "https://github.com/samwilson/Genealogy";
        },
-       "require": {
-       },
        "autoload": {
-               "files" : [
-                       "Genealogy.php"
-               ]
+               "psr-4": {
+                       "Samwilson\\Genealogy\\": "src/"
+               }
        }
 }
diff --git a/extension.json b/extension.json
new file mode 100644
index 0000000..4ee70c5
--- /dev/null
+++ b/extension.json
@@ -0,0 +1,23 @@
+{
+       "name": "Genealogy",
+       "namemsg": "desc-genealogy",
+       "author": [
+               "Sam Wilson"
+       ],
+       "url": "https://www.mediawiki.org/wiki/Extension:Genealogy";,
+       "descriptionmsg": "genealogy-extension-desc",
+       "license-name": "GPL-3.0+",
+       "type": "extension",
+       "ExtensionMessagesFiles": {
+               "Genealogy": "Genealogy.i18n.php",
+               "GenealogyMagic": "Genealogy.i18n.magic.php"
+       },
+       "AutoloadClasses": {
+               "\\Samwilson\\Genealogy\\Genealogy": "Genealogy.php"
+       },
+       "Hooks": {
+               "ParserFirstCallInit": 
"\\Samwilson\\Genealogy\\Util::onParserFirstCallInit",
+               "UnitTestsList": "Samwilson\\Genealogy\\Util::onUnitTestsList"
+       },
+       "manifest_version": 2
+}
diff --git a/Person.php b/src/Person.php
similarity index 87%
rename from Person.php
rename to src/Person.php
index 3f21c80..34e338a 100644
--- a/Person.php
+++ b/src/Person.php
@@ -1,6 +1,11 @@
 <?php
 
-class GenealogyPerson {
+namespace Samwilson\Genealogy;
+
+use MagicWord;
+use Title;
+
+class Person {
 
        /** @var Title */
        private $title;
@@ -102,7 +107,7 @@
        /**
         * Get all parents.
         *
-        * @return array|GenealogyPerson An array of parents, possibly empty.
+        * @return Person[] An array of parents, possibly empty.
         */
        public function getParents() {
                if (is_array($this->parents)) {
@@ -115,7 +120,7 @@
        /**
         * Get all siblings.
         *
-        * @return array|GenealogyPerson An array of siblings, possibly empty.
+        * @return Person[] An array of siblings, possibly empty.
         */
        public function getSiblings() {
                if (is_array($this->siblings)) {
@@ -133,7 +138,7 @@
        /**
         * Get all partners.
         *
-        * @return array|GenealogyPerson An array of partners, possibly empty.
+        * @return Person[] An array of partners, possibly empty.
         */
        public function getPartners() {
                if (is_array($this->partners)) {
@@ -150,7 +155,7 @@
        /**
         * Get all children.
         *
-        * @return array|GenealogyPerson An array of children, possibly empty.
+        * @return Person[] An array of children, possibly empty.
         */
        public function getChildren() {
                if (is_array($this->children)) {
@@ -177,7 +182,7 @@
                );
                foreach ($results as $res) {
                        $title = Title::newFromText($res->page_title);
-                       $out[$title->getPrefixedDBkey()] = new 
GenealogyPerson($title);
+                       $out[$title->getPrefixedDBkey()] = new Person($title);
                }
                return $out;
        }
@@ -195,6 +200,11 @@
                );
        }
 
+       /**
+        * Get a multi-valued relationship property of this Person.
+        * @param string $type The property name ('genealogy ' will be 
prepended).
+        * @return Person[] The related people.
+        */
        private function getPropMulti($type) {
                $out = array();
                $dbr = wfGetDB(DB_SLAVE);
@@ -209,7 +219,7 @@
                );
                foreach ($results as $result) {
                        $title = Title::newFromText($result->pp_value);
-                       $out[$title->getPrefixedDBkey()] = new 
GenealogyPerson($title);
+                       $out[$title->getPrefixedDBkey()] = new Person($title);
                }
                return $out;
        }
diff --git a/src/Special.php b/src/Special.php
new file mode 100755
index 0000000..1068693
--- /dev/null
+++ b/src/Special.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace Samwilson\Genealogy;
+
+class Special extends SpecialPage {
+
+       function __construct() {
+               parent::__construct('Genealogy');
+       }
+
+}
diff --git a/Traverser.php b/src/Traverser.php
similarity index 82%
rename from Traverser.php
rename to src/Traverser.php
index 7d06ff4..e4f2ad6 100644
--- a/Traverser.php
+++ b/src/Traverser.php
@@ -1,6 +1,8 @@
 <?php
 
-class GenealogyTraverser {
+namespace Samwilson\Genealogy;
+
+class Traverser {
 
        private $callbacks;
 
@@ -17,7 +19,7 @@
                $this->callbacks[] = $callback;
        }
 
-       public function ancestors(GenealogyPerson $person, $depth = null) {
+       public function ancestors(Person $person, $depth = null) {
                $this->visit($person);
                if ($this->ancestor_depth > $depth) {
                        return;
@@ -28,7 +30,7 @@
                $this->ancestor_depth++;
        }
 
-       public function descendants(GenealogyPerson $person, $depth = null) {
+       public function descendants(Person $person, $depth = null) {
                $this->visit($person);
                if ($this->descendant_depth > $depth) {
                        return;
diff --git a/Tree.php b/src/Tree.php
similarity index 86%
rename from Tree.php
rename to src/Tree.php
index 3b0dadd..b670071 100644
--- a/Tree.php
+++ b/src/Tree.php
@@ -1,7 +1,15 @@
 <?php
 
-class GenealogyTree {
+namespace Samwilson\Genealogy;
 
+use Title;
+
+class Tree {
+
+       /**
+        * The 'Dot source' is built up, line by line,
+        * @var string[]
+        */
        private $dot_source;
 
        private $ancestors = array();
@@ -31,8 +39,8 @@
        private function addAncestorsOrDescendants($type, $list) {
                foreach ($list as $a) {
                        $title = Title::newFromText($a);
-                       if ($title and $title->exists()) {
-                               $person = new GenealogyPerson($title);
+                       if ($title) {
+                               $person = new Person($title);
                                $this->{$type}[] = $person;
                        }
                }
@@ -43,7 +51,7 @@
                $this->out('top', 'graph [rankdir=LR, splines=ortho]');
                $this->out('top', 'edge [arrowhead=none]');
 
-               $traverser = new GenealogyTraverser();
+               $traverser = new Traverser();
                $traverser->register(array($this, 'visit'));
 
                foreach ($this->ancestors as $ancestor) {
@@ -56,7 +64,7 @@
 
                // Do nothing if there are no people listed.
                if (!isset($this->dot_source['person'])) {
-                       return 'No people found';
+                       return '<span class="error">No people found</span>';
                }
 
                // Combine all parts of the graph output.
@@ -66,9 +74,9 @@
                        .join("\n", $this->dot_source['child']) . "\n}";
        }
 
-       public function visit(GenealogyPerson $person) {
-               $birthYear = $person->getBirthDate('Y');
-               $deathYear = $person->getDeathDate('Y');
+       public function visit(Person $person) {
+               $birthYear = $person->getBirthDate();
+               $deathYear = $person->getDeathDate();
                if (!empty($birthYear) && !empty($deathYear)) {
                        $date = '\n'.$birthYear.' &ndash; '.$deathYear;
                } elseif (!empty($birthYear)) {
@@ -104,7 +112,7 @@
        }
 
        private function esc($title) {
-               return strtr($title, '( )', '___');
+               return strtr($title, '( )-', '____');
        }
 
 }
diff --git a/Core.php b/src/Util.php
similarity index 82%
rename from Core.php
rename to src/Util.php
index cdb039b..c730851 100644
--- a/Core.php
+++ b/src/Util.php
@@ -1,20 +1,25 @@
 <?php
 
-class GenealogyCore {
+namespace Samwilson\Genealogy;
+
+use Parser;
+use Title;
+
+class Util {
 
        /**
         * Hooked to ParserFirstCallInit.
         * @param Parser $parser
         * @return boolean
         */
-       static function onParserFirstCallInit(Parser &$parser) {
-               $parser->setFunctionHook('genealogy', 
'GenealogyCore::RenderParserFunction');
+       public static function onParserFirstCallInit(Parser &$parser) {
+               $parser->setFunctionHook('genealogy', 
self::class.'::RenderParserFunction');
                return true;
        }
 
        /**
         * Hooked to UnitTestsList.
-        * @param array|String $files
+        * @param String[] $files
         * @return boolean
         */
        static function onUnitTestsList(&$files) {
@@ -63,7 +68,7 @@
                        case 'parent':
                                $parentTitle = Title::newFromText($params[0]);
                                if ($parentTitle and $parentTitle->exists()) {
-                                       $person = new 
GenealogyPerson($parentTitle);
+                                       $person = new Person($parentTitle);
                                        $out .= $person->getWikiLink();
                                } else {
                                        $out .= "[[" . $params[0] . "]]";
@@ -71,7 +76,7 @@
                                self::SaveProp($parser, 'parent', $params[0]);
                                break;
                        case 'siblings':
-                               $person = new 
GenealogyPerson($parser->getTitle());
+                               $person = new Person($parser->getTitle());
                                $out .= 
self::PeopleList($person->getSiblings());
                                break;
                        case 'partner':
@@ -79,15 +84,15 @@
                                self::SaveProp($parser, 'partner', $params[0]);
                                break;
                        case 'partners':
-                               $person = new 
GenealogyPerson($parser->getTitle());
+                               $person = new Person($parser->getTitle());
                                $out .= 
self::PeopleList($person->getPartners());
                                break;
                        case 'children':
-                               $person = new 
GenealogyPerson($parser->getTitle());
+                               $person = new Person($parser->getTitle());
                                $out .= 
self::PeopleList($person->getChildren());
                                break;
                        case 'tree':
-                               $tree = new GenealogyTree();
+                               $tree = new Tree();
                                if (isset($params['ancestors'])) {
                                        $tree->addAncestors(explode("\n", 
$params['ancestors']));
                                }
@@ -97,7 +102,9 @@
                                }
                                //$tree->setDescendantDepth($params['descendant 
depth']);
                                $graphviz = $tree->getGraphviz();
-                               $out .= 
$parser->recursiveTagParse("<graphviz>\n$graphviz\n</graphviz>");
+                               $parser->getOutput()->updateCacheExpiry(30);
+                               $out .= $parser->recursiveTagParse( 
"<graphviz>\n$graphviz\n</graphviz>" );
+                               $out .= '<pre>'.$graphviz.'</pre>';
                                break;
                        default:
                                $out .= '<span class="error">'
@@ -124,8 +131,8 @@
        /**
         * Get a wikitext list of people.
         * @todo Replace with a proper templating system.
-        * @param array|GenealogyPerson $people
-        * @return string
+        * @param Person[] $people
+        * @return string Wikitext list of people.
         */
        static function PeopleList($people) {
                $out = '';

-- 
To view, visit https://gerrit.wikimedia.org/r/321210
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I65cc461886956d3549dfdb09200509baa05b0285
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Genealogy
Gerrit-Branch: master
Gerrit-Owner: Samwilson <s...@samwilson.id.au>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to