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:[email protected]
[email protected]]>",
- '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.' – '.$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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits