Det kan vara riktigt jobbigt att skapa en importfil som en leverantör vill ha. Inläsningstjänst är bra då de har en bra specifikation som man får av dem, samt att de har sftp-servrar där man kan skicka upp filerna så eleverna automatiskt åker in.

Jag gjorde så här

1/ Installera Ubuntu 16.04 med en LAMP server. 

Jag valde att installera den i Vmware Fusion på min dator. Då blir det en lokal server. Den behöver komma åt LDAP-katalogen du vill läsa från.

2/ Kolla igenom scriptet nedan och bygg ett eget. Det är ganska logiskt och är inte så svårt. Du anropar scriptet med http://localhost/inlasningstjanst.php i webbläsaren.

Vad kan man göra mer? Någon form av felhantering kan vara bra att ha med. Jag har en metakatalog så alla konton är skapade med automatik så det är inte lika nödvändigt hos oss.

Hur ska vi kommuner slippa detta i framtiden?

Alingsås har två spår:

1/ En integration som klarar av att läsa LDAP och automatiskt skapa en .csv enligt styrfiler. Den håller Pulsen på att bygga åt oss och den kommer köras i Mule.

2/ SCIM och skolfederationsprojektet är så spännande . Det skulle lösa hela provisioneringsfrågan och standardisera om vi får snurr på det. Här kan du läsa mer om det: https://www.skolfederation.se/nyheter/2017/08/22/pocen-puttrar-pa/

Älmhults kommun är föredömliga och Max har gjort ett kanonjobb ni kan läsa mer om här: https://github.com/MaxWallstedt/SimpleSCIM

 

—> Scriptet <—

<?php

// Inställningar

$server = ‘192.168.1.200’; // IP-adress till LDAP server i mitt fall eDirectory
$dn = ‘cn=readonlyuser,ou=services,o=alingsas’; // Användare med rätt att läsa från LDAP
$pw = ‘ToyotaIsBest4Ever’; // Lösenord
$searchbase = ‘o=alingsas’; // Från vilken nivå ska vi söka. Här är översta nivån definerad

// Searchstring är ditt LDAP-filter där du ställer in vad du vill ha.
// Först tar jag med alla som är användare, sedan väljer jag ut elever och personal inom skolan
// Skolor kan byta namn så jag använder SCB’s skolkoder för att göra ett urval. Här får jag enbart med grundskolan i Alingsås

$searchstring=”(&(objectClass=user)(|(pidEduPersonScopedAffiliation=student@edu.alingsas.se)(pidEduPersonScopedAffiliation=faculty@edu.alingsas.se))
(|(pidschoolunitcode=74064638)
(pidschoolunitcode=74064638)
(pidschoolunitcode=63452058)
(pidschoolunitcode=49115714)
(pidschoolunitcode=78832157)
(pidschoolunitcode=34338735)
(pidschoolunitcode=32478204)
(pidschoolunitcode=28639614)
(pidschoolunitcode=78273632)
(pidschoolunitcode=87109819)
(pidschoolunitcode=46546067)
(pidschoolunitcode=84581048)
(pidschoolunitcode=92770341)
(pidschoolunitcode=76908037)
(pidschoolunitcode=38957274)
(pidschoolunitcode=90924483)
(pidschoolunitcode=98272016)
(pidschoolunitcode=71895385)
(pidschoolunitcode=57136802)
(pidschoolunitcode=70153094)
(pidschoolunitcode=63399058)
(pidschoolunitcode=87109819)
(pidschoolunitcode=75101306)
(pidschoolunitcode=70304200)
(pidschoolunitcode=70079232)
(pidschoolunitcode=63399058)
(pidschoolunitcode=87109819)
(pidschoolunitcode=75101306)
(pidschoolunitcode=70304200)
(pidschoolunitcode=70079232)
(pidschoolunitcode=63399058)
))”; //LDAP searchstring

//Skicka ut huvudrubrikerna. I Alingsås är alla fyllda utom Office365ID som vi inte har
echo “Name;Email;Username;Type;Class;Organization;SchoolfederationID;Office365ID;GSuiteEmail<br>”;

// Välj vilka attribut som ska returneras. Ni ser att Office365ID lämnas tomt
$attnames=array(“fullname”,”mail”,”cn”,”pidcategory”,”ou”,”pidschoolunitcode”,”pidedupersonprincipalname”,””,”mail”); //Returned attributes

// Koppla mot servern
$ds=ldap_connect($server);

//Koppla upp mot LDAP
if ($ds) {
$r=ldap_bind($ds, $dn, $pw);
if($r) //echo “LDAP_bind gick bra<br>”;

//ldap_search söker från $searchbase och alla underkataloger
$r=ldap_search($ds,$searchbase, $searchstring, $attnames);

if($r)

$entries = ldap_get_entries($ds, $r);

//Snurra igenom alla träffar och välj vad som ska visas
for ($i=0; $i<$entries[“count”]; $i++) {
foreach($attnames as $attname){
if(is_array($entries[$i][$attname])){
$lastcount = $entries[$i][$attname][“count”] – 1;
for($j=0;$j<$entries[$i][$attname][“count”];$j++){

//Om det är en skolkod så vidar jag inte det. Jag visar inte heller pidcategory som kommer senare
if (($attname == ‘pidschoolunitcode’) || ($attname == ‘pidcategory’)) {
// Här visar vi inte något
}else{
// Skicka ut värdet
echo str_replace(“,”,””,$entries[$i][$attname][$j]);
}

//Om det är ett attribut som är en kategori så vill Inläsningstjänst ha andra namn. Stu blir lika med Student. Emp blir lika med Teacher
if ($attname == ‘pidcategory’) {
if ($entries[$i][$attname][$j] == ‘Stu’) {
echo “Student”;
}
if ($entries[$i][$attname][$j] == ‘Emp’) {
echo “Teacher”;
}
}

//Här tar jag skolkoderna och skickar ut namnen istället
if ($attname == ‘pidschoolunitcode’) {
if ($entries[$i][$attname][$j] == ‘74064638’) {
echo “Gustav Adolfsskolan”;
}
if ($entries[$i][$attname][$j] == ‘63452058’) {
echo “Hemsjö Kyrkskola”;
}
if ($entries[$i][$attname][$j] == ‘49115714’) {
echo “Ingaredsskolan”;
}
if ($entries[$i][$attname][$j] == ‘78832157’) {
echo “Kullingsbergsskolan”;
}
if ($entries[$i][$attname][$j] == ‘34338735’) {
echo “Lendahlsskolan”;
}
if ($entries[$i][$attname][$j] == ‘28639614’) {
echo “Långareds skola”;
}
if ($entries[$i][$attname][$j] == ‘78273632’) {
echo “Magra skola”;
}
if ($entries[$i][$attname][$j] == ‘46546067’) {
echo “Nolbyskolan”;
}
if ($entries[$i][$attname][$j] == ‘84581048’) {
echo “Nolhagaskolan”;
}
if ($entries[$i][$attname][$j] == ‘92770341’) {
echo “Noltorpsskolan”;
}
if ($entries[$i][$attname][$j] == ‘76908037’) {
echo “Sollebrunns skola”;
}
if ($entries[$i][$attname][$j] == ‘38957274’) {
echo “Stadsskogenskolan”;
}
if ($entries[$i][$attname][$j] == ‘90924483’) {
echo “Stora Mellby skola”;
}
if ($entries[$i][$attname][$j] == ‘71895385’) {
echo “Västra Bodarna skola”;
}
if ($entries[$i][$attname][$j] == ‘57136802’) {
echo “Ängaboskolan”;
}
if ($entries[$i][$attname][$j] == ‘70153094’) {
echo “Ödenäs skola”;
}
if ($entries[$i][$attname][$j] == ‘63399058’) {
echo “Östlyckeskolan”;
}
if ($entries[$i][$attname][$j] == ‘75101306’) {
echo “Nolhagaskolan”;
}
if ($entries[$i][$attname][$j] == ‘70304200’) {
echo “Noltorpskolan”;
}
if ($entries[$i][$attname][$j] == ‘70079232’) {
echo “Ängaboskolan”;
}
if ($entries[$i][$attname][$j] == ‘63399058’) {
echo “Östlyckeskolan”;
}
if ($entries[$i][$attname][$j] == ‘75101306’) {
echo “Nolhagaskolan”;
}
if ($entries[$i][$attname][$j] == ‘70304200’) {
echo “Noltorpskolan”;
}
if ($entries[$i][$attname][$j] == ‘70079232’) {
echo “Ängaboskolan”;
}
if ($entries[$i][$attname][$j] == ‘63399058’) {
echo “Östlyckeskolan”;
}

}
}
} else {
echo str_replace(“,”,””,$entries[$i][$attname]).””;
}
// En avgränsare efter varje värde då filen ska vara semikoloseparerad
echo “;”;
}
// Ny rad efter en post
echo “</br>”;
}
ldap_close($ds);

} else {
echo “Kan inte koppla mot LDAP-servern”;
}
?>