diff --git a/extensions/authclient/widgets/AuthChoice.php b/extensions/authclient/widgets/AuthChoice.php index e380e7e..acf3687 100644 --- a/extensions/authclient/widgets/AuthChoice.php +++ b/extensions/authclient/widgets/AuthChoice.php @@ -7,6 +7,7 @@ namespace yii\authclient\widgets; +use yii\base\InvalidConfigException; use yii\base\Widget; use Yii; use yii\helpers\Url; @@ -170,6 +171,7 @@ class AuthChoice extends Widget * @param ClientInterface $client external auth client instance. * @param string $text link text, if not set - default value will be generated. * @param array $htmlOptions link HTML options. + * @throws InvalidConfigException on wrong configuration. */ public function clientLink($client, $text = null, array $htmlOptions = []) { @@ -180,16 +182,29 @@ class AuthChoice extends Widget if (!array_key_exists('class', $htmlOptions)) { $htmlOptions['class'] = 'auth-link ' . $client->getName(); } - if ($this->popupMode) { - $viewOptions = $client->getViewOptions(); - if (isset($viewOptions['popupWidth'])) { - $htmlOptions['data-popup-width'] = $viewOptions['popupWidth']; + + $viewOptions = $client->getViewOptions(); + if (empty($viewOptions['widget'])) { + if ($this->popupMode) { + if (isset($viewOptions['popupWidth'])) { + $htmlOptions['data-popup-width'] = $viewOptions['popupWidth']; + } + if (isset($viewOptions['popupHeight'])) { + $htmlOptions['data-popup-height'] = $viewOptions['popupHeight']; + } } - if (isset($viewOptions['popupHeight'])) { - $htmlOptions['data-popup-height'] = $viewOptions['popupHeight']; + echo Html::a($text, $this->createClientUrl($client), $htmlOptions); + } else { + $widgetConfig = $viewOptions['widget']; + if (!isset($widgetConfig['class'])) { + throw new InvalidConfigException('Widget config "class" parameter is missing'); } + /* @var $widgetClass Widget */ + $widgetClass = $widgetConfig['class']; + unset($widgetConfig['class']); + $widgetConfig['client'] = $client; + echo $widgetClass::widget($widgetConfig); } - echo Html::a($text, $this->createClientUrl($client), $htmlOptions); } /**