středa 15. dubna 2015

Jak spojit WordPress a Moodle



Aneb ověřování uživatelů WP v Moodle

V Moodle  zapnout podporu přihlašování z externí databáze a zadat: Název DB, uživatele, heslo
Tabulka: wp_users
Pole uživatel: user_login
Pole hesla: user_pass
Formát hesla: wordpress (není v nabídce, nutno donastavit níže)

Mapování dat
Křestní jméno: firstname
Příjmení: lastname
E-mailová adresa: email

Nastavení formát hesla: wordpress
V souboru /auth/db/config.html  upravit toto

$passtype = array();
$passtype["plaintext"] = get_string("plaintext", "auth");
$passtype["md5"] = get_string("md5", "auth");
$passtype["sha1"] = get_string("sha1", "auth");
$passtype["internal"] = get_string("internal", "auth");
echo html_writer::select($passtype, "passtype", $config->passtype, false);


na toto

$passtype = array();
$passtype["plaintext"] = get_string("plaintext", "auth");
$passtype["md5"] = get_string("md5", "auth");
$passtype["sha1"] = get_string("sha1", "auth");
$passtype["internal"] = get_string("internal", "auth");
$passtype["wordpress"] = "wordpress";
echo html_writer::select($passtype, "passtype", $config->passtype, false);


Soubor /auth/db/auth.php

Najít toto


if ($this->config->;passtype === 'md5') {   // Re-format password accordingly

$extpassword = md5($extpassword);

} else if ($this->config->;passtype === 'sha1') {
$extpassword = sha1($extpassword);
}


A za tento text přidat:

else if ($this->config->passtype === 'wordpress') {
require_once( '/var/www/nejaka-ta-cesta/wp-includes/class-phpass.php');
$hash = new PasswordHash(8, true);
$rs = $authdb->Execute("SELECT * FROM {$this->config->table} WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'");

$check = $hash->CheckPassword( $extpassword, $rs->fields["user_pass"]);
return $check;
}


dál najít select co se stará o donastavení jména, příjmení a emailu, text:

            $select = implode(', ', $select);
            $sql = "SELECT $select
                      FROM {$this->config->table}
                     WHERE {$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'";


změnit na:

            $sql = "SELECT u1.user_email email, m1.meta_value firstname, m2.meta_value lastname FROM {$this->config->table} u1
JOIN wp_usermeta m1 ON (m1.user_id = u1.id AND m1.meta_key = 'first_name')
JOIN wp_usermeta m2 ON (m2.user_id = u1.id AND m2.meta_key = 'last_name')
WHERE u1.{$this->config->fielduser} = '".$this->ext_addslashes($extusername)."'"; 


Další info

http://blog.giuseppeurso.net/moodle-and-wordpress-single-sign-on-in-20-minutes-part-1/

Žádné komentáře:

Okomentovat