#!/usr/bin/perl
#
# $Id: moodle-add-user,v 1.8 2006/12/19 19:10:35 lrupp Exp $
# $Log: moodle-add-user,v $
# Revision 1.8  2006/12/19 19:10:35  lrupp
# - added row definitions so we know what we are doing ;-)
# - deleted oss dependency - not necessary if we get all what we need via commandline
# - prepared first statement for adding a course automatically (not finished yet)
#
# Revision 1.7  2006/12/07 17:55:08  pv
# now it works, it inserts into the table, but I do not know it works fine,
# becouse 2 field was missed :-(
#
# Revision 1.5  2006/12/06 22:58:48  lrupp
# some enhancements
#
# Revision 1.4  2006/11/28 15:52:23  lrupp
# use new directory structure
#
#
use strict;
use DBI;
use Config::IniFiles;

my ($uid, $uidnum, $dn, $role);
my $dbname = "moodle";
my $pwfile = "/root/.my.cnf";
my %attributes;

#Parameter von STDIN lesen
while(<STDIN>)
{
 my ( $key, $value ) = split / /,$_,2;
 chomp $value;


  if( !$value )
  {
        chomp $key;
        if( $key =~ /^uid=.*/i )
        {
          $dn = $key;
        }
  }
 if( $key =~ /^uid$/i )
 { 
   $uid = $value;
 }
 elsif ( $key =~ /^uidnumber$/i)
 {
   $uidnum = $value;
 }
 elsif ( $key =~ /^role$/i)
 {
   $role = $value;
 }
 elsif ( $key =~ /preferredlanguage$/i )
 {
   $attributes{'preferredlanguage'}=$value;
 }
 elsif ( $key =~ /gidnumber$/i)
 {
   $attributes{'gidnumber'}=$value;
 }
 elsif ( $key =~ /givenname$/)
 {
   $attributes{'givenname'} = $value;
 }
 elsif ( $key =~ /sn$/)
 {
   $attributes{'sn'} = $value;
 }
 elsif ( $key =~ /mail$/)
 {
   $attributes{'mail'} = $value;
 } elsif ( $key =~ /$/)
 {
   $attributes{'CITY'} = $value;
 }
}

if( $role ne 'teachers' )
{
    exit 1;
}

my $ini = new Config::IniFiles( -file => "$pwfile" );
my $dbpw   = $ini->val('client','password');
my $dbuser = $ini->val('client','user');
my $dbhost = $ini->val('client','host');

# Querys definieren
my $q_sel = "SELECT username FROM mdl_user WHERE username='$uid';";
my $q_mod = "UPDATE mdl_user SET username = '$uid', WHERE username='$uid';";
my $q_add = "INSERT INTO mdl_user ('id','auth','confirmed','policyagreed','deleted','username','firstname','lastname','email','emailstop','country','lang','timezone') VALUES ($uidnum,'ldap',1,0,0,'$uid','$attributes{givenname}','$attributes{sn}','$attributes{mail}',0,'$attributes{preferredlanguage}','".lc($attributes{preferredlanguage})."','99');";
my $q_add2= "INSERT INTO mdl_user_preferences ('userid','name','value') VALUES ($uidnum,'email_send_count','1');";
# using category 1 as default - TODO: create a new category named "teacher courses" ?
my $q_addcourse1="INSERT INTO mdl_course ('category','fullname','shortname','summary','format','modinfo') VALUES ('1','$attributes{sn} course','$attributes{sn} course','Teacher course of $attributes{sn}','site','a:1:{i:1;O:8:\"stdClass\":6:{s:2:\"cm\";i:1;s:3:\"mod\";s:5:\"forum\";s:7:\"section\";s:1:\"0\";s:4:\"name\";s:23:\"$attributes{sn}+Course\";s:7:\"visible\";s:1:\"1\";s:5:\"extra\";s:0:\"\";}}','' );";

open OUT, ">/tmp/mysql";
print OUT $q_add."\n".$q_add2;
close OUT;
# Datenbank-Verbindung aufbauen
my $dbh = DBI->connect( 'dbi:mysql:'.$dbname, $dbuser, $dbpw )
          || die "Kann keine Verbindung zum MySQL-Server aufbauen: $DBI::errstr\n";

# Ist der benutzer vorhanden?
my $sth = $dbh->prepare($q_sel); $sth->execute();


if ( $sth->fetchrow_array() ne '')
{
    # user do exist, we modify it only
       $sth->finish();
       $sth = $dbh->prepare($q_mod);
       $sth->execute();
} else {
    # this is a new user
       $sth->finish();
       $sth = $dbh->prepare($q_add);
       $sth->execute();
       $sth = $dbh->prepare($q_add2);
       $sth->execute();
}

$dbh->disconnect;

