Расширение MediaWiki: GoogleAppsAuthenification Несколько доменов

Я использую расширенное расширение GoogleAppsAuthentification для mediawiki, чтобы позволить моим пользователям входить в систему со своей учетной записью Google Apps. Недавно мы добавили еще один домен в наши Google Apps, и я хотел бы предложить этим пользователям возможность войти в нашу вики с их доменом Google Apps.

Из коробки это невозможно с расширением, однако, кажется, довольно тривиально добавить поддержку нескольких доменов.

Идея состоит в том, чтобы предложить пользователю выпадающий список доступных доменов до выполнения перенаправления на экран входа в Google.

Мои знания API-интерфейса mediawiki довольно ограничены, и я мог бы использовать некоторые указатели.

расширение перехватывает крючок UserLoadFromSession, который вызывается перед загрузкой UserLoginForm. Мне пришлось бы добавить код к этой функции, чтобы запросить пользователя для домена и вернуться к этой функции, передав выбранный домен getGoogleAccount()

// in LocalSettings.py
$wgDefaultUserOptions['GoogleAppsDomainList'] = array("domain.com", "otherdomain.com");

// in GoogleAppsAuthentication.php
function fnGoogleAppsAuthenticateHook($user, &$result){
    global $IP, $wgLanguageCode, $wgRequest, $wgOut, $wgDefaultUserOptions;
    if (isset($_REQUEST["title"])){
            $lg = Language::factory($wgLanguageCode);

            if ($_REQUEST["title"] == $lg->specialPage("Userlogin")){
                    // this is where we need to add the prompt 
                    // that asks the user which domain to chose
                    $domain = getDomainFromUser($wgDefaultUserOptions['GoogleAppsDomainList'])

                    // Setup for a web request
                    require_once("$IP/includes/WebStart.php");

                    // Here we do our stuff
                    $googleAccount = getGoogleAccount('title=' . $_REQUEST["title"], $domain);

                    // whole bunch of code here that won't be affected by our change
                    ...
                    // end whole bunch of code that won't be affected by our change
            } else if ($_REQUEST["title"] == $lg->specialPage("Userlogout")) {
                    session_unset();
                    // Logout
                    $user->logout();
            }
    }

    // Back to MediaWiki home after login
    return true;
}


function getDomainFromUser($domainList) {
    // render page with dropdown containing domains in $domainList
    // get selected dropdown on page submit
    // return selected domain
}

Мне нужна помощь с функцией getDomainFromUser(). Я не знаю, как перенаправить на новую страницу с раскрывающимся меню, заполненным массивом, определенным в LocalSettings.py, и вернуть выбранное значение обратно в функцию fnGoogleAppsAuthenticateHook.

Любая помощь будет искренне оценена. Я считаю, что гораздо больше людей могут воспользоваться этой дополнительной функциональностью, добавленной к этому расширению.

Ответы

Ответ 1

Если я не понял вашу потребность:

Если вы включили $_SESSION:

в "//в LocalSettings.py"

Строка 1 кода: механизм запуска сеанса

<?php session_start(); ?>

Код в определении точки массива: возьмите массив и скопируйте его в переменную сеанса, чтобы к нему можно было обращаться другими страницами, функциями и т.д.

<?php
$wgDefaultUserOptions['GoogleAppsDomainList'] = array("domain.com", "otherdomain.com");
$_SESSION['a']=$wgDefaultUserOptions['GoogleAppsDomainList'];
?>

На странице, где вы хотите выбрать выпадающий список:

Строка 1 кода: запуск механизма сеанса

<?php session_start(); ?>

@point, где вам нужен раскрывающийся список

<Form action="**processing page**" method="post">
<select name="Domain-Choice" >
 <?php
 foreach ($_SESSION['a'] as $key)
 {echo "<option value=\"".$key."\">".$key."</option>";}
 ?> 
 </select>
 </Form>

Установите действие формы на любую страницу обработки PHP, которую вы хотите, $_POST ['Domain-Choice'] будет иметь значение, выбранное пользователем из раскрывающегося списка, которое было заполнено из массива, хранящегося в переменной сеанса, скопированного из массива, установленного в LocalSettings.py($ wgDefaultUserOptions ['GoogleAppsDomainList'])

Если я неправильно понял, что вам нужно, извините заранее.