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

Reply via email to