Mollywhite has uploaded a new change for review.
https://gerrit.wikimedia.org/r/75152
Change subject: Create contents page when JSON block is saved
......................................................................
Create contents page when JSON block is saved
When the Book: page for a book is saved, generate a table of contents
and save it to [book title]/Contents. This is updated every time
the JSON is edited.
Change-Id: Ie20d2ecefadc72e0b2f5d1fdae09e313e4117ced
---
M BookManagerv2.i18n.php
M includes/JsonHooks.php
2 files changed, 50 insertions(+), 70 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BookManagerv2
refs/changes/52/75152/1
diff --git a/BookManagerv2.i18n.php b/BookManagerv2.i18n.php
index d640065..c2fb768 100644
--- a/BookManagerv2.i18n.php
+++ b/BookManagerv2.i18n.php
@@ -16,6 +16,7 @@
'bookmanagerv2-desc' => 'Adds functionality to enter and store book
metadata and structure',
'bookmanagerv2-invalid-json' => 'Invalid JSON',
'bookmanagerv2-example-nav' => 'The navigation bar on this page is
appearing because $wgBookManagerv2ExampleNavigation is set to true in
LocalSettings.php.',
+ 'bookmanagerv2-toc-edit-summary' => 'Updating table of contents from
[[$1]]',
'bookmanagerv2-title' => 'Title: $1',
'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Alternate
title|Alternate titles}}: $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Author|Authors}}: $2',
@@ -49,6 +50,7 @@
'bookmanagerv2-invalid-json' => 'Error message shown when an editor
tries to save an invalid JSON block.
{{Identical|Invalid JSON}}',
'bookmanagerv2-example-nav' => 'Message shown in the subtitle to
explain why example navigation bars are appearing. The navigation bars appear
on every page when $wgBookManagerv2ExampleNavigation is set to true; if it\'s
disabled in LocalSettings.php, they will disappear.',
+ 'bookmanagerv2-toc-edit-summary' => 'Edit summary for automatic updates
saved when the book\'s JSON block is updated. $1 is a link to the JSON block.',
'bookmanagerv2-title' => 'Label in the navigation bar metadata
dropdown. See screenshot for an example of this dropdown.
[[File:BookManagerv2 navigation bar metadata dropdown.png]]
{{Identical|Title}}',
@@ -138,37 +140,12 @@
[[File:BookManagerv2 navigation bar metadata dropdown.png]]',
);
-/** Bengali (বাংলা)
- * @author Aftab1995
- */
-$messages['bn'] = array(
- 'bookmanagerv2-title' => 'শিরোনাম: $1',
- 'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|বিকল্প শিরোনাম|বিকল্প
শিরোনামগুলি}}: $2',
- 'bookmanagerv2-volume' => 'ভলিউম: $1',
- 'bookmanagerv2-edition' => 'সংস্করণ: $1',
- 'bookmanagerv2-publisher' => 'প্রকাশক: $1',
- 'bookmanagerv2-publication-date' => 'প্রকাশনার তারিখ: $1',
- 'bookmanagerv2-language' => 'ভাষা: $1',
- 'bookmanagerv2-description' => 'বিবরণ: $1',
- 'bookmanagerv2-source' => 'উত্স: $1',
- 'bookmanagerv2-permission' => 'অনুমতি: $1',
- 'bookmanagerv2-other-versions' => '{{PLURAL:$1|অন্যান্য সংস্করণ}}: $2',
-);
-
-/** Church Slavic (словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
- * @author ОйЛ
- */
-$messages['cu'] = array(
- 'bookmanagerv2-language' => 'ѩꙁꙑкъ : $1',
-);
-
/** German (Deutsch)
* @author Metalhead64
*/
$messages['de'] = array(
'bookmanagerv2-desc' => 'Ergänzt die Funktionalität zur Eingabe und
Speicherung von Buch-Metadaten und -Strukturen',
'bookmanagerv2-invalid-json' => 'Ungültiges JSON',
- 'bookmanagerv2-example-nav' => 'Die Navigationsleiste erscheint auf
dieser Seite, da $wgBookManagerv2ExampleNavigation in LocalSettings.php auf
„wahr“ gesetzt ist.',
'bookmanagerv2-title' => 'Titel: $1',
'bookmanagerv2-alternate-titles' =>
'{{PLURAL:$1|Alternativer|Alternative}} Titel: $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Autor|Autoren}}: $2',
@@ -193,12 +170,10 @@
/** Spanish (español)
* @author Larjona
* @author Luis Felipe Schenone
- * @author Miguel2706
*/
$messages['es'] = array(
'bookmanagerv2-desc' => 'Agrega funcionalidad para ingresar y guardar
metainformación sobre libros',
'bookmanagerv2-invalid-json' => 'JSON inválido',
- 'bookmanagerv2-example-nav' => 'La barra de navegación en esta página
se muestra porque $wgBookManagerv2ExampleNavigation se establece en verdadero
en LocalSettings.php.',
'bookmanagerv2-title' => 'Título: $1',
'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Título
alternativo|Títulos alternativos}}: $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Autor|Autores}}: $2',
@@ -253,7 +228,6 @@
$messages['fr'] = array(
'bookmanagerv2-desc' => 'Ajoute une fonctionnalité pour saisir et
stocker les métadonnées et la structure d’un livre',
'bookmanagerv2-invalid-json' => 'JSON non valide',
- 'bookmanagerv2-example-nav' => 'La barre de navigation apparaît sur
cette page parce que $wgBookManagerv2ExampleNavigation est à vrai dans
LocalSettings.php.',
'bookmanagerv2-title' => 'Titre : $1',
'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Titre
alternatif|Titres alternatifs}} : $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Auteur|Auteurs}} : $2',
@@ -281,7 +255,6 @@
$messages['gl'] = array(
'bookmanagerv2-desc' => 'Engade unha funcionalidade para inserir e
almacenar os metadatos e a estrutura dun libro',
'bookmanagerv2-invalid-json' => 'JSON non válido',
- 'bookmanagerv2-example-nav' => 'A barra de navegación desta páxina
aparece porque $wgBookManagerv2ExampleNavigation está definido como "true" en
LocalSettings.php.',
'bookmanagerv2-title' => 'Título: $1',
'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Título
alternativo|Títulos alternativos}}: $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Autor|Autores}}: $2',
@@ -360,35 +333,12 @@
'bookmanagerv2-other-versions' => 'Aner
{{PLURAL:$1|Versioun|Versiounen}}: $2',
);
-/** Lithuanian (lietuvių)
- * @author Eitvys200
- */
-$messages['lt'] = array(
- 'bookmanagerv2-invalid-json' => 'Neleistinas JSON',
- 'bookmanagerv2-title' => 'Pavadinimas: $1',
- 'bookmanagerv2-authors' => '{{PLURAL:$1|Autorius|Authoriai}}: $2',
- 'bookmanagerv2-translators' => '{{PLURAL:$1|Vertėjas|Vertėjai}}: $2',
- 'bookmanagerv2-editors' => '{{PLURAL:$1|Redaktorius|Redaktoriai}}: $2',
- 'bookmanagerv2-illustrators' =>
'{{PLURAL:$1|Iliustratorius|Iliusratoriai}}: $2',
- 'bookmanagerv2-volume' => 'Tomas: $1',
- 'bookmanagerv2-edition' => 'Leidimas: $1',
- 'bookmanagerv2-publisher' => 'Leidėjas: $1',
- 'bookmanagerv2-publication-date' => 'Leidimo data: $1',
- 'bookmanagerv2-publication-city' => 'Leidimo miestas: $1',
- 'bookmanagerv2-language' => 'Kalba: $1',
- 'bookmanagerv2-description' => 'Aprašymas: $1',
- 'bookmanagerv2-source' => 'Šaltinis: $1',
- 'bookmanagerv2-permission' => 'Leidimas: $1',
- 'bookmanagerv2-other-versions' => '{{PLURAL:$1|Kita versija|Kitos
versijos}}: $2',
-);
-
/** Macedonian (македонски)
* @author Bjankuloski06
*/
$messages['mk'] = array(
'bookmanagerv2-desc' => 'Дава можност за внесување и складирање на
метаподатоци и структура за книги',
'bookmanagerv2-invalid-json' => 'Неважечки JSON',
- 'bookmanagerv2-example-nav' => 'Навигационата лента на оваа страница се
појавува бидејќи $wgBookManagerv2ExampleNavigation е наместено на „true“ во
LocalSettings.php.',
'bookmanagerv2-title' => 'Наслов: $1',
'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Друг наслов|Други
наслови}}: $2',
'bookmanagerv2-authors' => '{{PLURAL:$1|Автор|Автори}}: $2',
@@ -494,30 +444,13 @@
/** Swedish (svenska)
* @author Jopparn
- * @author Liftarn
- * @author WikiPhoenix
*/
$messages['sv'] = array(
- 'bookmanagerv2-invalid-json' => 'Ogiltig JSON',
- 'bookmanagerv2-title' => 'Titel: $1',
- 'bookmanagerv2-alternate-titles' => '{{PLURAL:$1|Alternativ
titel|Alternativa titlar}}: $2',
- 'bookmanagerv2-authors' => '{{PLURAL:$1|Författare}}: $2',
- 'bookmanagerv2-translators' => '{{PLURAL:$2|Översättare}}: $1',
- 'bookmanagerv2-editors' => '{{PLURAL:$1|Redaktör|Redaktörer}}: $2',
- 'bookmanagerv2-illustrators' =>
'{{PLURAL:$1|Illustratör|Illustratörer}}: $2',
'bookmanagerv2-subtitle' => 'Undertext: $1',
- 'bookmanagerv2-series-title' => 'Seriens titel: $1',
- 'bookmanagerv2-volume' => 'Volym: $1',
- 'bookmanagerv2-edition' => 'Utgåva: $1',
- 'bookmanagerv2-publisher' => 'Utgivare: $1',
- 'bookmanagerv2-printer' => 'Tryckeri: $1',
- 'bookmanagerv2-publication-date' => 'Utgivningsdatum: $1',
- 'bookmanagerv2-publication-city' => 'Utgivningsort: $1',
'bookmanagerv2-language' => 'Språk: $1',
'bookmanagerv2-description' => 'Beskrivning: $1',
'bookmanagerv2-source' => 'Källa: $1',
'bookmanagerv2-permission' => 'Behörighet: $1',
- 'bookmanagerv2-other-versions' => '{{PLURAL:$1|Annan version|Andra
versioner}}: $2',
);
/** Ukrainian (українська)
diff --git a/includes/JsonHooks.php b/includes/JsonHooks.php
index 3322f88..934872d 100644
--- a/includes/JsonHooks.php
+++ b/includes/JsonHooks.php
@@ -60,6 +60,34 @@
}
/**
+ * Creates the page that will store the table of contents.
+ * @param Title $title Title of the contents page
+ * @param $json JSON block for this book
+ * @param $bookPageTitle Title of the page in the Book namespace storing
+ * the JSON
+ */
+ static function makeContentsPage( Title $title, $json, $bookPageTitle )
{
+ $contentsPage = WikiPage::factory( $title );
+ self::updateContentsPage( $contentsPage, $json, $bookPageTitle
);
+ }
+
+ /**
+ * Adds the contents to the contents page.
+ * @param WikiPage $page The WikiPage object to which the text is added
+ * @param $json JSON block for this book
+ * @param $bookPageTitle Title of the page in the Book namespace storing
+ * the JSON
+ */
+ static function updateContentsPage( WikiPage $page, $json,
$bookPageTitle ) {
+ $chapterList = array();
+ foreach ( $json->sections as $key => $section ) {
+ $chapterList[] =
"*[[{$section->link}|{$section->name}]]\n";
+ }
+ $page->doEdit( implode( $chapterList ), wfMessage(
+ 'bookmanagerv2-toc-edit-summary', $bookPageTitle
)->text() );
+ }
+
+ /**
* Validates that the revised contents are valid JSON.
* If not valid, rejects edit with error message.
* @param EditPage $editor
@@ -69,7 +97,8 @@
* @return True
*/
static function onEditFilterMerged( $editor, $text, &$error, $summary )
{
- if ( $editor->getTitle()->getNamespace() !== NS_BOOK ) {
+ $pageTitle = $editor->getTitle();
+ if ( $pageTitle->getNamespace() !== NS_BOOK ) {
return true;
}
@@ -77,8 +106,26 @@
try {
$content->validate();
+ $blockIsValid = true;
} catch ( JsonSchemaException $e ) {
$error = $e->getMessage();
+ $blockIsValid = false;
+ }
+
+ if ( $blockIsValid ) {
+ $contentsTitle = Title::newFromText(
$pageTitle->getText() .
+ "/Contents" );
+ if ( !$contentsTitle->exists() ) {
+ self::makeContentsPage( $contentsTitle,
+ FormatJson::decode(
$content->getNativeData(), false ),
+ $pageTitle );
+ } else {
+ $contentsPage = WikiPage::newFromID(
+ $contentsTitle->getArticleID() );
+ self::updateContentsPage( $contentsPage,
+ FormatJson::decode(
$content->getNativeData(), false ),
+ $pageTitle );
+ }
}
return true;
}
--
To view, visit https://gerrit.wikimedia.org/r/75152
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie20d2ecefadc72e0b2f5d1fdae09e313e4117ced
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BookManagerv2
Gerrit-Branch: master
Gerrit-Owner: Mollywhite <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits