mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-28 09:40:41 +00:00
Normalize links in Special:Notifications formatter
Change-Id: I35354a3b27a59ee9740c6330bb3df22a8f7d6093
This commit is contained in:
parent
b813835907
commit
65638384fc
|
@ -57,6 +57,7 @@ $wgAutoloadClasses += array(
|
||||||
'EchoHTMLEmailFormatter' => __DIR__ . '/includes/EmailFormatter.php',
|
'EchoHTMLEmailFormatter' => __DIR__ . '/includes/EmailFormatter.php',
|
||||||
'EchoHooks' => __DIR__ . '/Hooks.php',
|
'EchoHooks' => __DIR__ . '/Hooks.php',
|
||||||
'EchoIteratorDecorator' => __DIR__ . '/includes/iterator/IteratorDecorator.php',
|
'EchoIteratorDecorator' => __DIR__ . '/includes/iterator/IteratorDecorator.php',
|
||||||
|
'EchoLinkNormalizer' => __DIR__ . '/includes/formatters/LinkNormalizer.php',
|
||||||
'EchoLocalCache' => __DIR__ . '/includes/cache/LocalCache.php',
|
'EchoLocalCache' => __DIR__ . '/includes/cache/LocalCache.php',
|
||||||
'EchoMentionFormatter' => __DIR__ . '/includes/formatters/MentionFormatter.php',
|
'EchoMentionFormatter' => __DIR__ . '/includes/formatters/MentionFormatter.php',
|
||||||
'EchoMentionPresentationModel' => __DIR__ . '/includes/formatters/MentionPresentationModel.php',
|
'EchoMentionPresentationModel' => __DIR__ . '/includes/formatters/MentionPresentationModel.php',
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<?php
|
<?php
|
||||||
|
use EchoLinkNormalizer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A formatter for the notification flyout popup
|
* A formatter for the notification flyout popup
|
||||||
|
@ -39,7 +40,7 @@ class EchoFlyoutFormatter extends EchoEventFormatter {
|
||||||
);
|
);
|
||||||
|
|
||||||
$footerItems = array( $ts );
|
$footerItems = array( $ts );
|
||||||
$secondaryLinks = $this->normalizeSecondaryLinks( $model->getSecondaryLinks() );
|
$secondaryLinks = EchoLinkNormalizer::normalizeSecondaryLinks( $model->getSecondaryLinks() );
|
||||||
foreach ( $secondaryLinks as $link ) {
|
foreach ( $secondaryLinks as $link ) {
|
||||||
$footerItems[] = Html::element( 'a', array( 'href' => $link['url'] ), $link['label'] );
|
$footerItems[] = Html::element( 'a', array( 'href' => $link['url'] ), $link['label'] );
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,7 @@ class EchoFlyoutFormatter extends EchoEventFormatter {
|
||||||
// Add the primary link afterwards, if it has one
|
// Add the primary link afterwards, if it has one
|
||||||
$primaryLink = $model->getPrimaryLink();
|
$primaryLink = $model->getPrimaryLink();
|
||||||
if ( $primaryLink !== false ) {
|
if ( $primaryLink !== false ) {
|
||||||
$primaryLink = $this->normalizePrimaryLink( $primaryLink );
|
$primaryLink = EchoLinkNormalizer::normalizePrimaryLink( $primaryLink );
|
||||||
$html .= Html::element(
|
$html .= Html::element(
|
||||||
'a',
|
'a',
|
||||||
array( 'class' => 'mw-echo-notification-primary-link', 'href' => $primaryLink['url'] ),
|
array( 'class' => 'mw-echo-notification-primary-link', 'href' => $primaryLink['url'] ),
|
||||||
|
@ -76,52 +77,4 @@ class EchoFlyoutFormatter extends EchoEventFormatter {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility method to ensure B/C compat with previous getPrimaryLink return
|
|
||||||
* types, until all of them have been fixed.
|
|
||||||
*
|
|
||||||
* @deprecated
|
|
||||||
* @param string|array|bool $link
|
|
||||||
* @return string|bool
|
|
||||||
*/
|
|
||||||
protected function normalizePrimaryLink( $link ) {
|
|
||||||
// B/C for old format: [url, label]
|
|
||||||
if ( !isset( $link['url'] ) ) {
|
|
||||||
return array(
|
|
||||||
'url' => $link[0],
|
|
||||||
'label' => $link[1],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// current primary link format: ['url' => ..., 'label' => ...]
|
|
||||||
return $link;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility method to ensure B/C compat with previous getSecondaryLinks
|
|
||||||
* return types, until all of them have been fixed.
|
|
||||||
*
|
|
||||||
* @deprecated
|
|
||||||
* @param array $link
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
protected function normalizeSecondaryLinks( array $link ) {
|
|
||||||
// B/C for old secondary links format: [url => label, ...]
|
|
||||||
if ( !isset( $link[0] ) || !isset( $link[0]['url'] ) ) {
|
|
||||||
$links = array();
|
|
||||||
foreach ( $link as $url => $text ) {
|
|
||||||
$links[] = array(
|
|
||||||
'url' => $url,
|
|
||||||
'label' => $text,
|
|
||||||
'description' => '',
|
|
||||||
'icon' => false,
|
|
||||||
'prioritized' => false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $links;
|
|
||||||
}
|
|
||||||
|
|
||||||
// current secondary links format: [['url' => ..., 'label' => ..., ...], ...]
|
|
||||||
return $link;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
56
includes/formatters/LinkNormalizer.php
Normal file
56
includes/formatters/LinkNormalizer.php
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class EchoLinkNormalizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method to ensure B/C compat with previous getPrimaryLink return
|
||||||
|
* types, until all of them have been fixed.
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
|
* @param string|array|bool $link
|
||||||
|
* @return string|bool
|
||||||
|
*/
|
||||||
|
public static function normalizePrimaryLink( $link ) {
|
||||||
|
// B/C for old format: [url, label]
|
||||||
|
if ( !isset( $link['url'] ) ) {
|
||||||
|
return array(
|
||||||
|
'url' => $link[0],
|
||||||
|
'label' => $link[1],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// current primary link format: ['url' => ..., 'label' => ...]
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility method to ensure B/C compat with previous getSecondaryLinks
|
||||||
|
* return types, until all of them have been fixed.
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
|
* @param array $link
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function normalizeSecondaryLinks( array $link ) {
|
||||||
|
// B/C for old secondary links format: [url => label, ...]
|
||||||
|
if ( !isset( $link[0] ) || !isset( $link[0]['url'] ) ) {
|
||||||
|
$links = array();
|
||||||
|
foreach ( $link as $url => $text ) {
|
||||||
|
$links[] = array(
|
||||||
|
'url' => $url,
|
||||||
|
'label' => $text,
|
||||||
|
'description' => '',
|
||||||
|
'icon' => false,
|
||||||
|
'prioritized' => true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $links;
|
||||||
|
}
|
||||||
|
|
||||||
|
// current secondary links format: [['url' => ..., 'label' => ..., ...], ...]
|
||||||
|
return $link;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -40,11 +40,11 @@ class SpecialNotificationsFormatter extends EchoEventFormatter {
|
||||||
$links = array();
|
$links = array();
|
||||||
$primaryLink = $model->getPrimaryLink();
|
$primaryLink = $model->getPrimaryLink();
|
||||||
if ( $primaryLink !== false ) {
|
if ( $primaryLink !== false ) {
|
||||||
$links[$primaryLink[0]] = $primaryLink[1];
|
$links[] = EchoLinkNormalizer::normalizePrimaryLink( $primaryLink );
|
||||||
}
|
}
|
||||||
$links += $model->getSecondaryLinks();
|
$links = array_merge( $links, EchoLinkNormalizer::normalizeSecondaryLinks( $model->getSecondaryLinks() ) );
|
||||||
foreach ( $links as $target => $text ) {
|
foreach ( $links as $link ) {
|
||||||
$footerItems[] = Html::element( 'a', array( 'href' => $target ), $text );
|
$footerItems[] = Html::element( 'a', array( 'href' => $link['url'] ), $link['label'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= Xml::tags(
|
$html .= Xml::tags(
|
||||||
|
|
Loading…
Reference in a new issue