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