Jforrester has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/349368 )

Change subject: API: Identify missing and no-TemplateData pages in the response
......................................................................

API: Identify missing and no-TemplateData pages in the response

Change-Id: I7905502d0c419a04e4487095214634f1513b461c
---
M api/ApiTemplateData.php
1 file changed, 50 insertions(+), 45 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/TemplateData 
refs/changes/68/349368/1

diff --git a/api/ApiTemplateData.php b/api/ApiTemplateData.php
index d66ae1f..ce04bc9 100644
--- a/api/ApiTemplateData.php
+++ b/api/ApiTemplateData.php
@@ -52,56 +52,61 @@
                $pageSet = $this->getPageSet();
                $pageSet->execute();
                $titles = $pageSet->getGoodTitles(); // page_id => Title object
-
-               if ( !count( $titles ) ) {
-                       $result->addValue( null, 'pages', (object) [] );
-                       return;
-               }
-
-               $db = $this->getDB();
-               $res = $db->select( 'page_props',
-                       [ 'pp_page', 'pp_value' ], [
-                               'pp_page' => array_keys( $titles ),
-                               'pp_propname' => 'templatedata'
-                       ],
-                       __METHOD__,
-                       [ 'ORDER BY', 'pp_page' ]
-               );
+               $missingTitles = $pageSet->getMissingTitles(); // page_id => 
Title object
 
                $resp = [];
 
-               foreach ( $res as $row ) {
-                       $rawData = $row->pp_value;
-                       $tdb = TemplateDataBlob::newFromDatabase( $rawData );
-                       $status = $tdb->getStatus();
+               foreach ( $missingTitles as $missingTitleId => $missingTitle) {
+                       $resp[ $missingTitleId ] = [ 'title' => $missingTitle, 
'missing' => true ];
+               }
 
-                       if ( !$status->isOK() ) {
-                               $this->dieWithError(
-                                       [ 'apierror-templatedata-corrupt', 
intval( $row->pp_page ), $status->getMessage() ]
-                               );
+               foreach ( $titles as $titleId => $title) {
+                       $resp[ $titleId ] = [ 'title' => $title, 
'notemplatedata' => true ];
+               }
+
+               if ( count( $titles ) ) {
+                       $db = $this->getDB();
+                       $res = $db->select( 'page_props',
+                               [ 'pp_page', 'pp_value' ], [
+                                       'pp_page' => array_keys( $titles ),
+                                       'pp_propname' => 'templatedata'
+                               ],
+                               __METHOD__,
+                               [ 'ORDER BY', 'pp_page' ]
+                       );
+
+                       foreach ( $res as $row ) {
+                               $rawData = $row->pp_value;
+                               $tdb = TemplateDataBlob::newFromDatabase( 
$rawData );
+                               $status = $tdb->getStatus();
+
+                               if ( !$status->isOK() ) {
+                                       $this->dieWithError(
+                                               [ 
'apierror-templatedata-corrupt', intval( $row->pp_page ), $status->getMessage() 
]
+                                       );
+                               }
+
+                               if ( $langCode ) {
+                                       $data = $tdb->getDataInLanguage( 
$langCode );
+                               } else {
+                                       $data = $tdb->getData();
+                               }
+
+                               // HACK: don't let ApiResult's formatversion=1 
compatibility layer mangle our booleans
+                               // to empty strings / absent properties
+                               foreach ( $data->params as &$param ) {
+                                       $param->{ApiResult::META_BC_BOOLS} = [ 
'required', 'suggested', 'deprecated' ];
+                               }
+                               unset( $param );
+
+                               $data->params->{ApiResult::META_TYPE} = 'kvp';
+                               $data->params->{ApiResult::META_KVP_KEY_NAME} = 
'key';
+                               
$data->params->{ApiResult::META_INDEXED_TAG_NAME} = 'param';
+                               ApiResult::setIndexedTagName( 
$data->paramOrder, 'p' );
+
+                               unset ( $resp[$row->pp_page]['notemplatedata'] 
);
+                               $resp[$row->pp_page] += (array) $data;
                        }
-
-                       if ( $langCode ) {
-                               $data = $tdb->getDataInLanguage( $langCode );
-                       } else {
-                               $data = $tdb->getData();
-                       }
-
-                       // HACK: don't let ApiResult's formatversion=1 
compatibility layer mangle our booleans
-                       // to empty strings / absent properties
-                       foreach ( $data->params as &$param ) {
-                               $param->{ApiResult::META_BC_BOOLS} = [ 
'required', 'suggested', 'deprecated' ];
-                       }
-                       unset( $param );
-
-                       $data->params->{ApiResult::META_TYPE} = 'kvp';
-                       $data->params->{ApiResult::META_KVP_KEY_NAME} = 'key';
-                       $data->params->{ApiResult::META_INDEXED_TAG_NAME} = 
'param';
-                       ApiResult::setIndexedTagName( $data->paramOrder, 'p' );
-
-                       $resp[$row->pp_page] = [
-                               'title' => strval( $titles[$row->pp_page] ),
-                       ] + (array) $data;
                }
 
                ApiResult::setArrayType( $resp, 'kvp', 'id' );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7905502d0c419a04e4487095214634f1513b461c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/TemplateData
Gerrit-Branch: master
Gerrit-Owner: Jforrester <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to