Расширение 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'])
Если я неправильно понял, что вам нужно, извините заранее.