[LON-CAPA-cvs] cvs: loncom /build make_domain_coordinator.pl

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Mon, 31 Dec 2007 16:52:28 -0000


raeburn		Mon Dec 31 11:52:28 2007 EDT

  Modified files:              
    /loncom/build	make_domain_coordinator.pl 
  Log:
  Bug 5544
  - add user to MySQL allusers table
  - add information about role to nohist_domainroles.db
  - include start time in role
  
  
Index: loncom/build/make_domain_coordinator.pl
diff -u loncom/build/make_domain_coordinator.pl:1.12 loncom/build/make_domain_coordinator.pl:1.13
--- loncom/build/make_domain_coordinator.pl:1.12	Fri Jun  1 01:17:58 2007
+++ loncom/build/make_domain_coordinator.pl	Mon Dec 31 11:52:26 2007
@@ -11,7 +11,7 @@
 # The LearningOnline Network
 # make_domain_coordinator.pl - Make a domain coordinator on a system
 #
-# $Id: make_domain_coordinator.pl,v 1.12 2007/06/01 05:17:58 albertel Exp $
+# $Id: make_domain_coordinator.pl,v 1.13 2007/12/31 16:52:26 raeburn Exp $
 #
 # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
 #
@@ -91,6 +91,8 @@
 
 use lib '/home/httpd/lib/perl/';
 use LONCAPA;
+use LONCAPA::lonmetadata;
+use DBI;
 
 =pod
 
@@ -372,7 +374,8 @@
 if (!$rolesref) {
     die('unable to tie roles db: '."$udpath/roles.db");
 }
-$rolesref->{'/'.$domain.'/_dc'}='dc'; # Set the domain coordinator role.
+my $now = time;
+$rolesref->{'/'.$domain.'/_dc'}='dc_0_'.$now; # Set the domain coordinator role.
 open(OUT, ">$udpath/roles.hist"); # roles.hist is the synchronous plain text.
 foreach my $key (keys(%{$rolesref})) {
     print(OUT $key.' : '.$rolesref->{$key}."\n");
@@ -384,6 +387,24 @@
 `chown www:www $udpath/roles.hist`; # Must be writeable by httpd process.
 `chown www:www $udpath/roles.db`; # Must be writeable by httpd process.
 
+my %perlvar = %{&LONCAPA::Configuration::read_conf('loncapa.conf')};
+my $dompath = $perlvar{'lonUsersDir'}.'/'.$domain;
+my $domrolesref = &LONCAPA::locking_hash_tie("$dompath/nohist_domainroles.db",&GDBM_WRCREAT());
+
+if (!$domrolesref) {
+    die('unable to tie nohist_domainroles db: '."$dompath/nohist_domainroles.db");
+}
+
+# Store in nohist_domainroles.db
+my $domkey=&LONCAPA::escape('dc:'.$username.':'.$domain.'::'.$domain.':');
+$domrolesref->{$domkey}= &LONCAPA::escape('0:'.$now);
+&LONCAPA::locking_hash_untie($domrolesref);
+
+#Update allusers MySQL table
+
+print "Adding new user to allusers table\n";
+&allusers_update($username,$domain,\%perlvar);
+
 =pod
 
 =item 10.
@@ -394,10 +415,67 @@
 =cut
 
 # Output success message, and inform sysadmin about how to further proceed.
-print("$username is now a domain coordinator\n"); # Output success message.
+print("\n$username is now a domain coordinator\n"); # Output success message.
 my $hostname=`hostname`; chomp($hostname); # Read in hostname.
-print("http://$hostname/adm/createuser will allow you to further define".
-      " this user.\n"); # Output a suggested URL.
+print("\n".'Once LON-CAPA is running, you should log-in and use: '."\n".
+      'http://'.$hostname.'/adm/createuser to further define this user.'."\n\n".
+      'From the user management menu, click the link: "Add/Modify a Single User" '."\n".
+      'to search for the user and to provide additional information (last name, first name etc.).'."\n");
+# Output a suggested URL.
+
+sub allusers_update {
+    my ($username,$domain,$perlvar) = @_;
+    my %tablenames = (
+                       'allusers'   => 'allusers',
+                     );
+    my $dbh;
+    unless ($dbh = DBI->connect("DBI:mysql:loncapa","www",
+                            $perlvar->{'lonSqlAccess'},
+                            { RaiseError =>0,PrintError=>0})) {
+        print "Cannot connect to database!\n";
+        return;
+    }
+    my $tablechk = &allusers_table_exists($dbh);
+    if ($tablechk == 0) {
+        my $request =
+   &LONCAPA::lonmetadata::create_metadata_storage('allusers','allusers');
+        $dbh->do($request);
+        if ($dbh->err) {
+             print "Failed to crate allusers table\n";
+             return;
+        }
+    }
+    my %userdata =  (
+                username => $username,
+                domain   => $domain,
+    );
+    my %loghash =
+        &LONCAPA::lonmetadata::process_allusers_data($dbh,undef,
+            \%tablenames,$username,$domain,\%userdata,'update');
+    foreach my $key (keys(%loghash)) {
+        print $loghash{$key}."\n";
+    }
+    return;
+}
+
+sub allusers_table_exists {
+    my ($dbh) = @_;
+    my $sth=$dbh->prepare('SHOW TABLES');
+    $sth->execute();
+    my $aref = $sth->fetchall_arrayref;
+    $sth->finish();
+    if ($sth->err()) {
+        return undef;
+    }
+    my $result = 0;
+    foreach my $table (@{$aref}) {
+        if ($table->[0] eq 'allusers') {
+            $result = 1;
+            last;
+        }
+    }
+    return $result;
+}
 
 =pod
 
@@ -406,3 +484,4 @@
 Written to help the LON-CAPA project.
 
 =cut
+