Lokal Profil has uploaded a new change for review.

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

Change subject: Rebuild BadgeView using TablePager
......................................................................

Rebuild BadgeView using TablePager

The table in Special:BadgeView rebuilt using TablePager instead of
using raw Html:: elements.

Four i18n strings added and two exisitng ones modified.

Task: T103844
Change-Id: I952e633421755df3c4fb73fd27f4734fb62aed8f
---
M SpecialBadgeView.php
M i18n/en.json
M i18n/qqq.json
3 files changed, 134 insertions(+), 77 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/OpenBadges 
refs/changes/19/226719/1

diff --git a/SpecialBadgeView.php b/SpecialBadgeView.php
index 72c539b..4721706 100644
--- a/SpecialBadgeView.php
+++ b/SpecialBadgeView.php
@@ -23,86 +23,135 @@
                $this->checkPermissions();
                $this->outputHeader();
 
+               $pager = new BadgesPager();
                $html = $this->getOutput();
-               $html->addHtml( $this->getBadgeHtml() );
-       }
-
-       public function getBadgeHtml() {
-               global $wgUser;
-               global $wgScriptPath;
-               $apiUrl = $wgCanonicalServer . $wgScriptPath . '/api.php?';
-
-               $userId = $wgUser->getId();
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $badgeRes = $dbr->select(
-                       array( 'openbadges_assertion', 'openbadges_class' ),
-                       array(
-                               'obl_name',
-                               'openbadges_class.obl_badge_image',
-                               'openbadges_assertion.obl_badge_id',
-                               'obl_badge_evidence' ),
-                       'obl_receiver = ' . $userId,
-                       __METHOD__,
-                       array(),
-                       array(
-                               'openbadges_class' => array(
-                                       'INNER JOIN', array (
-                                               
'openbadges_assertion.obl_badge_id=openbadges_class.obl_badge_id' ) ) )
+               $html->addHTML(
+                       $pager->getNavigationBar() . '<ol>' .
+                       $pager->getBody() . '</ol>' .
+                       $pager->getNavigationBar()
                );
-
-               $badgeTr = '';
-               foreach ( $badgeRes as $row ) {
-                       $badgeName = Html::element( 'td', array(), 
$row->obl_name );
-                       $file = wfFindFile( $row->obl_badge_image );
-                       $badgeImage = $file->transform( array( 'width' => 180, 
'height' => 360 ) );
-                       $thumb = $badgeImage->toHtml( array( 'desc-link' => 
true ) );
-                       $thumb = Html::rawElement( 'td', array(), $thumb );
-
-                       $assertCall = array(
-                               'action' => 'openbadges',
-                               'format' => 'json',
-                               'type' => 'assertion',
-                               'obl_badge_id' => $row->obl_badge_id,
-                               'obl_receiver' => $userId
-                       );
-                       $assertLink = Html::rawElement(
-                               'a',
-                               array( 'href' => $apiUrl . http_build_query( 
$assertCall ) ),
-                               wfMessage( 'ob-view-proof' )->text()
-                       );
-                       $assertLink =  Html::rawElement( 'td', array(), 
$assertLink );
-
-                       $evidenceLink = $row->obl_badge_evidence;
-                       if ( empty( $evidenceLink ) ) {
-                               $evidenceLink = wfMessage( 
'ob-view-no-evidence' )->text();
-                       }
-                       else {
-                               $evidenceLink = Html::rawElement(
-                                       'a',
-                                       array( 'href' => 
$row->obl_badge_evidence ),
-                                       wfMessage( 'ob-view-evidence' )->text()
-                               );
-                       }
-                       $evidenceLink =  Html::rawElement( 'td', array(), 
$evidenceLink );
-
-                       $badgeTr .= Html::rawElement(
-                               'tr',
-                               array(),
-                               $badgeName . $thumb . $assertLink . 
$evidenceLink
-                       );
-               }
-
-               $badgeTable = Html::rawElement(
-                       'table',
-                       array( 'style' => 'width:100%', 'border' => '1' ),
-                       $badgeTr
-               );
-
-               return $badgeTable;
        }
 
        protected function getGroupName() {
                return 'other';
        }
 }
+
+/**
+ * @ingroup SpecialPage Pager
+ */
+class BadgesPager extends TablePager {
+
+       /**
+        * @todo probably needs a different function to be able to do a similar 
intersect
+        *               possibly override the function calling getQueryInfo() 
instead.
+        * @return array
+        */
+       function getQueryInfo() {
+               global $wgUser;
+               $userId = $wgUser->getId();
+
+               return array(
+                       'tables' => array( 'openbadges_assertion', 
'openbadges_class' ),
+                       'fields' => array(
+                               'obl_name',
+                               'obl_badge_image',
+                               'openbadges_assertion.obl_badge_id AS badge_id',
+                               'obl_badge_evidence' ),
+                       'conds' => 'obl_receiver = ' . $userId,
+                       'join_conds' => array(
+                               'openbadges_class' => array(
+                                       'INNER JOIN',
+                                       'openbadges_assertion.obl_badge_id = 
openbadges_class.obl_badge_id' ) )
+               );
+       }
+
+       /**
+        * @return string
+        */
+       function getIndexField() {
+               return 'obl_name';
+       }
+
+       /**
+        * @param string $field
+        * @return bool
+        */
+       function isFieldSortable( $field ) {
+               $sortable = array( 'obl_name', 'obl_badge_evidence' );
+               return in_array( $field, $sortable );
+       }
+
+       /**
+        * @return string
+        */
+       function getDefaultSort() {
+               return 'obl_name';
+       }
+
+       /**
+        * @return array
+        */
+       function getFieldNames() {
+               if ( !$this->mFieldNames ) {
+                       $this->mFieldNames = array(
+                               'obl_name' => $this->msg( 'ob-view-name' 
)->text(),
+                               'obl_badge_image' => $this->msg( 
'ob-view-image' )->text(),
+                               'badge_id' => $this->msg( 
'ob-view-proof-header' )->text(),
+                               'obl_badge_evidence' => $this->msg( 
'ob-view-evidence-header' )->text(),
+                       );
+               }
+               return $this->mFieldNames;
+       }
+
+       /**
+        * @param string $field
+        * @param string|null $value
+        * @return string
+        * @throws MWException
+        */
+       function formatValue( $field, $value ) {
+               global $wgScriptPath;
+               global $wgUser;
+               $apiUrl = $wgCanonicalServer . $wgScriptPath . '/api.php?';
+               $userId = $wgUser->getId();
+
+               switch ( $field ) {
+                       case 'obl_name':
+                               return htmlspecialchars( $value );
+                       case 'obl_badge_image':
+                               $file = wfFindFile( $value );
+                               $badgeImage = $file->transform( array( 'width' 
=> 180, 'height' => 360 ) );
+                               $thumb = $badgeImage->toHtml( array( 
'desc-link' => true ) );
+                               return $thumb;
+                       case 'badge_id':
+                               $assertCall = array(
+                                       'action' => 'openbadges',
+                                       'format' => 'json',
+                                       'type' => 'assertion',
+                                       'obl_badge_id' => $value,
+                                       'obl_receiver' => $userId
+                               );
+                               $assertLink = Html::rawElement(
+                                       'a',
+                                       array( 'href' => $apiUrl . 
http_build_query( $assertCall ) ),
+                                       wfMessage( 'ob-view-proof' )->text()
+                               );
+                               return $assertLink;
+                       case 'obl_badge_evidence':
+                               if ( empty( $value ) ) {
+                                       return wfMessage( 'ob-view-no-evidence' 
)->text();
+                               }
+                               else {
+                                       $evidenceLink = Html::rawElement(
+                                               'a',
+                                               array( 'href' => $value ),
+                                               wfMessage( 'ob-view-evidence' 
)->text()
+                                       );
+                                       return $evidenceLink;
+                               }
+                       default:
+                               throw new MWException( "Unknown field '$field'" 
);
+               }
+       }
+}
diff --git a/i18n/en.json b/i18n/en.json
index 017830a..3f351c3 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -20,8 +20,12 @@
        "ob-create-wrong-mime": "The image has the wrong format, only png or 
svg is allowed.",
        "ob-create-name-exists": "Badge name already exists.",
        "badgeview": "My badges",
-       "ob-view-proof": "Proof",
-       "ob-view-evidence": "Evidence",
+       "ob-view-proof": "link to proof",
+       "ob-view-proof-header": "Proof",
+       "ob-view-name": "Badge name",
+       "ob-view-image": "Badge illustration",
+       "ob-view-evidence": "link to evidence",
+       "ob-view-evidence-header": "Evidence",
        "ob-view-no-evidence": "None",
        "badgeissue": "Issue a badge",
        "badge-issue-legend": "Issue a badge to a user",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 06ed35e..8ea8ee6 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -23,7 +23,11 @@
        "ob-create-name-exists": "Error message if badge name is already in 
use",
        "badgeview": "Title of special page for viewing badges awarded to the 
current user",
        "ob-view-proof": "Link handle to view assertion claim",
+       "ob-view-proof-header": "Table header for assertion claim links",
+       "ob-view-name": "Table header for badge name",
+       "ob-view-image": "Table header for badge image",
        "ob-view-evidence": "Link handle to view the evidence 
claim\n{{Identical|Evidence}}",
+       "ob-view-evidence-header": "Table header for evidence claim links",
        "ob-view-no-evidence": "Placeholder when there is no evidence 
claim\n{{Identical|None}}",
        "badgeissue": "Title of special page for issuing badges to users",
        "badge-issue-legend": "Legend field for SpecialBadgeIssue",

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I952e633421755df3c4fb73fd27f4734fb62aed8f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/OpenBadges
Gerrit-Branch: master
Gerrit-Owner: Lokal Profil <[email protected]>

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

Reply via email to