File:  [LON-CAPA] / nsdl / harvestsmete / OAIcataloging_v2.pm
Revision 1.1: download - view: text, annotated - select for diffs
Thu May 8 16:37:31 2003 UTC (20 years, 11 months ago) by www
Branches: MAIN
CVS tags: HEAD
SMETE side harvest code for LON-CAPA

    1: #!/usr/local/bin/perl -w
    2: 
    3: use strict;
    4: 
    5: use Getopt::Std;
    6: 
    7: use DBI;
    8: use DBD::ODBC;
    9: 
   10: my $DBI_DSN='dbi:ODBC:needs2.odbc';
   11: my $DBI_USER='smete_user';
   12: my $DBI_PWD='needsmete';
   13: my $dbh;
   14: 
   15: sub SP_ct_key {
   16: 	my ($dbh,$name) = @_;
   17: 	# Fetch the ct_key number from the contrib_type table
   18: 	my @row_ary = $dbh->selectrow_array(q{SELECT c.ct_key FROM contrib_type c WHERE c.name = ?}, undef, $name);
   19: 	my $ct_key = $row_ary[0];
   20: 	#       print $ct_key . "\n";
   21: 	return $ct_key;
   22: }
   23: 
   24: # Find general_key given a title   
   25: # return undef if nothing found
   26: # Usage: OAIc_loexists($dbh,$title)
   27: sub OAIc_loexists {
   28: 	my ($dbh, $title) = @_;
   29: 	my @row_ary = $dbh->selectrow_array(q{SELECT lo.id FROM learning_object lo WHERE lo.title = ?}, undef, $title);
   30: 	if ($row_ary[0]) {
   31: 		return $row_ary[0];
   32: 	} else {
   33: 	return undef;
   34: 	}
   35: }
   36: 
   37: # Generate a key given a field name
   38: # e.g., my $key = &OAIc_key ($dbh,$field_name);
   39: sub OAIc_key {
   40: 	my ($dbh,$field_name) = @_;
   41: 	# Fetch the current key number from the KEYS table
   42: 	my @row_ary = $dbh->selectrow_array(q{SELECT k.key_value FROM keys k WHERE k.field_name = ?}, undef, $field_name);
   43: 	# Increment the value by 1
   44: 	my $key = $row_ary[0] + 1;
   45: 	#       print $key . "\n";
   46: 	# Now update the table with the new value
   47: 	my $rc = $dbh->do(q{UPDATE keys SET key_value = ?, mod_date=GetDate() FROM keys k WHERE k.field_name = ?}, undef, $key, $field_name) || warn "Unable to update key value in table keys: $dbh->errstr\n";
   48: 	$dbh->commit;
   49: 	return $key;
   50: }
   51: 
   52: # Generate a needs number "nn"
   53: # e.g., my $nn = &OAIc_nn ( '2000', '01', 1000 );
   54: sub OAIc_nn {
   55: 	my ( $pubYear, $pubMonth, $lo_key ) = @_;
   56: 	# Format lo_key to be 10 characters long
   57: 	$lo_key = sprintf("%10d",$lo_key);
   58: 	# Replace leading spaces with a 0
   59: 	$lo_key =~ tr/ /0/;
   60: 	my $nn = sprintf("%s_%s_%s", $pubYear, $pubMonth, $lo_key );
   61: 	#       print $nn . "\n";
   62:         return $nn;
   63: }
   64: 
   65: # Update MATTI (special to handle version.installation_note);
   66: sub OAIc_update_matti {
   67: 	my ($dbh, $id, $installation_note) = @_;
   68: 	my $rc;
   69: 	# UPDATE [needs_3_1]..version
   70: 	printf("Update installation note for id = %s\n", $id);
   71: 	$rc = $dbh->do(q{UPDATE version SET installation_note = ? WHERE resource_id = ?}, undef, substr($installation_note,0,1024), $id);
   72: 	if (!$rc) {
   73: 	$dbh->rollback;
   74: 	$dbh->disconnect;
   75: 	die "Unable to update record into lo_platform: $dbh->errstr\n";
   76: 	}
   77: }
   78: 
   79: # Update lo into tables
   80: sub OAIc_update_lo {
   81: 	my ($dbh, $general_key, $title, $language, $description, $image, $pub_month, $pub_year, $keywords, $submitter_key, $author, $publisher, $collection, $format, $platform, $os, $url, $ped_lcontext, $ped_enduserrole, $author_reg_key, $publisher_reg_key) = @_;
   82: 	my $rc;
   83: 	# UPDATE [needs_3_1]..version
   84: 	$rc = $dbh->do(q{UPDATE version SET media_format_id = ?, platform_type_id = ?, location_url = ?, operating_system = ?, modification_date = GetDate(), reporter_id = ? WHERE resource_id = ?}, undef, $format, $platform, $url, $os, $submitter_key, $general_key);
   85: 	if (!$rc) {
   86: 	$dbh->rollback;
   87: 	$dbh->disconnect;
   88: 	die "Unable to update record into lo_platform: $dbh->errstr\n";
   89: 	}
   90: 	# UPDATE [needs_3_1]..lo
   91: 	$rc = $dbh->do(q{UPDATE lo SET title = ?, primary_language = ?, description = ?, keywords = ?, modification_date = GetDate(), publish_month = ?, publish_year = ? WHERE id = ?}, undef, $title, $language, substr($description,0,4096), $keywords, $pub_month, $pub_year, $general_key);
   92: 	if (!$rc) {
   93: 		die "Unable to update record into lo: $dbh->errstr\n";
   94: 		$dbh->rollback;
   95: 		$dbh->disconnect;
   96: 	}
   97: 	# UPDATE [needs_3_1]..learning_object_pedagogy
   98: 	$rc = $dbh->do(q{UPDATE learning_object_pedagogy SET modification_date = GetDate() WHERE learning_object_id = ?}, undef, $general_key);
   99: 	if (!$rc) {
  100: 		die "Unable to update record into learning_object_pedagogy: $dbh->errstr\n";
  101: 		$dbh->rollback;
  102: 		$dbh->disconnect;
  103: 	}
  104: 	my @row_ary = $dbh->selectrow_array(q{SELECT lo.pedagogy_id FROM learning_object_pedagogy lo WHERE lo.learning_object_id = ?}, undef, $general_key);
  105: 	my $pedagogy_id = $row_ary[0];
  106: 	$rc = $dbh->do(q{UPDATE pedagogy SET learning_context = ?, end_user_type_id = ?, modification_date = GetDate() WHERE id = ?}, undef, $ped_lcontext, $ped_enduserrole, $general_key);
  107: 	if (!$rc) {
  108: 	$dbh->rollback;
  109: 	$dbh->disconnect;
  110: 	die "Unable to update record into pedagogy: $dbh->errstr\n";
  111: 	}
  112: 	# Upon success commit
  113: 	$dbh->commit;
  114: 	return $rc;
  115: }
  116: 
  117: # Insert lo into tables
  118: sub OAIc_insert_lo {
  119: 	my ($dbh, $title, $language, $description, $image, $pub_month, $pub_year, $keywords, $submitter_key, $author, $publisher, $collection, $format, $platform, $os, $url, $ped_lcontext, $ped_enduserrole, $author_reg_key, $publisher_reg_key, $collection_reg_key, $difficulty_id, $interactivity_level_id, $pedagogy_description, $resource_type_id,$rights_description,$cost) = @_;
  120: 	my $rc;
  121: 	# INSERT INTO [needs_3_1]..lo
  122: 	$rc = $dbh->do(q{INSERT INTO learning_object (title, primary_language, description, keywords, creation_date, modification_date, publish_month, publish_year, submitter) VALUES (?,?,?,?,GetDate(),GetDate(),?,?,?)}, undef, $title, $language, substr($description,0,4096), $keywords, $pub_month, $pub_year, $submitter_key);
  123: 	if (!$rc) {
  124: 		$dbh->rollback;
  125: 		$dbh->disconnect;
  126: 		die "Unable to insert new record into lo: $dbh->errstr\n";
  127: 	}
  128: 	my $id = OAIc_loexists($dbh,$title);
  129: 	printf("Learning Object ID:%s\n", $id);
  130: 	printf("Author ID:%s\n", $author_reg_key);
  131: 	# INSERT INTO [needs_3_1]..learning_object_contributor
  132: 	# Add author contribution (ct_key=8)
  133: 	$rc = $dbh->do(q{INSERT INTO learning_object_contributor (learning_object_id, entity_id, role_id, order_by) VALUES (?,?,8,1)}, undef, $id, $author_reg_key);
  134: 	# Add publisher contribution (ct_key=9)
  135: 	$rc = $dbh->do(q{INSERT INTO learning_object_contributor (learning_object_id, entity_id, role_id, order_by) VALUES (?,?,9,2)}, undef, $id, $publisher_reg_key);
  136: 	# Add collection contribution (ct_key=12)
  137: 	$rc = $dbh->do(q{INSERT INTO learning_object_contributor (learning_object_id, entity_id, role_id, order_by) VALUES (?,?,12,2)}, undef, $id, $collection_reg_key);
  138: 	if (!$rc) {
  139: 	$dbh->rollback;
  140: 	$dbh->disconnect;
  141: 	die "Unable to insert new record into learning_object_contributor: $dbh->errstr\n";
  142: 	}
  143: 	# INSERT INTO [needs_3_1]..pedagogy
  144:         my $pedagogy_id = $dbh->selectrow_array(q{SELECT NEWID()});
  145: 	printf("Pedagogy ID:%s\n", $pedagogy_id);
  146: 	if (!$pedagogy_id) {
  147: 		$dbh->rollback;
  148: 		$dbh->disconnect;
  149: 		die "Unable to insert new record into pedagogy: $dbh->errstr\n";
  150: 	}
  151: 	$rc = $dbh->do(q{INSERT INTO pedagogy (id,description,difficulty_id,interactivity_level_id,learning_context,end_user_type_id,resource_type_id,locale_id) VALUES (?,?,?,?,?,?,?,1)}, undef, $pedagogy_id, $pedagogy_description, $difficulty_id, $interactivity_level_id, $ped_lcontext, $ped_enduserrole, $resource_type_id);
  152: 	if (!$rc) {
  153: 	$dbh->rollback;
  154: 	$dbh->disconnect;
  155: 	die "Unable to insert new record into pedagogy: $dbh->errstr\n";
  156: 	}
  157: 	# INSERT INTO [needs_v2_1]..learning_object_pedagogy
  158: 	$rc = $dbh->do(q{INSERT INTO learning_object_pedagogy (learning_object_id,pedagogy_id,order_by,creation_date,modification_date,status) VALUES (?,?,?,GetDate(),GetDate(),?)}, undef, $id, $pedagogy_id, 1, 'complete');
  159: 	if (!$rc) {
  160: 	$dbh->rollback;
  161: 	$dbh->disconnect;
  162: 	die "Unable to insert new record into learning_object_pedagogy: $dbh->errstr\n";
  163: 	}
  164: 	# INSERT INTO [needs_v2_1]..version
  165: 	$rc = $dbh->do(q{INSERT INTO version (resource_id, media_format_id, platform_type_id, location_url, license, purchase_license_type_id, modification_date, creation_date, reporter_id) VALUES (?,?,?,?,?,?,GetDate(),GetDate(),?)}, undef, $id, $format, $platform, $url, $rights_description, $cost, $submitter_key);
  166: 	if (!$rc) {
  167: 	$dbh->rollback;
  168: 	$dbh->disconnect;
  169: 	die "Unable to insert new record into version: $dbh->errstr\n";
  170: 	}
  171: 	# Upon success commit
  172: 	$dbh->commit;
  173: 	return $rc;
  174: }
  175: 
  176: # Insert lo into tables (DLESE only)
  177: sub OAIc_insert_lo_dlese {
  178: 	my ($dbh, $title, $language, $description, $image, $pub_month, $pub_year, $keywords, $submitter_key, $publisher, $collection, $format, $platform, $location, $learning_context, $intendedenduserrole_id, $collection_reg_key, $rights_description, $cost) = @_;
  179: 	my $rc;
  180: 	# INSERT INTO [needs_3_1]..lo
  181: 	$rc = $dbh->do(q{INSERT INTO lo (title, primary_language, description, keywords, creation_date, modification_date, publish_month, publish_year, submitter) VALUES (?,?,?,?,GetDate(),GetDate(),?,?,?)}, undef, $title, $language, substr($description,0,4096), $keywords, $pub_month, $pub_year, $submitter_key);
  182: 	if (!$rc) {
  183: 		$dbh->rollback;
  184: 		$dbh->disconnect;
  185: 		die "Unable to insert new record into lo: $dbh->errstr\n";
  186: 	}
  187: 	my $id = OAIc_loexists($dbh,$title);
  188: 	printf("Learning Object ID:%s\n", $id);
  189: 
  190: 	# INSERT INTO [needs_3_1]..pedagogy
  191:         #my $pedagogy_id = $dbh->selectrow_array(q{SELECT NEWID()});
  192: 	#printf("Pedagogy ID:%s\n", $pedagogy_id);
  193: 	#if (!$pedagogy_id) {
  194: 	#	$dbh->rollback;
  195: 	#	$dbh->disconnect;
  196: 	#	die "Unable to insert new record into pedagogy: $dbh->errstr\n";
  197: 	#}
  198: 	#$rc = $dbh->do(q{INSERT INTO pedagogy (id,description,difficulty_id,interactivity_level_id,learning_context,end_user_type_id,resource_type_id,locale_id) VALUES (?,?,?,?,?,?,?,1)}, undef, $pedagogy_id, $pedagogy_description, $difficulty_id, $interactivity_level_id, $ped_lcontext, $ped_enduserrole, $resource_type_id);
  199: 	#if (!$rc) {
  200: 	#$dbh->rollback;
  201: 	#$dbh->disconnect;
  202: 	#die "Unable to insert new record into pedagogy: $dbh->errstr\n";
  203: 	#}
  204: 	# INSERT INTO [needs_v2_1]..learning_object_pedagogy
  205: 	#$rc = $dbh->do(q{INSERT INTO learning_object_pedagogy (learning_object_id,pedagogy_id,order_by,creation_date,modification_date,status) VALUES (?,?,?,GetDate(),GetDate(),?)}, undef, $id, $pedagogy_id, 1, 'complete');
  206: 	#if (!$rc) {
  207: 	#$dbh->rollback;
  208: 	#$dbh->disconnect;
  209: 	#die "Unable to insert new record into learning_object_pedagogy: $dbh->errstr\n";
  210: 	#}
  211: 	# INSERT INTO [needs_v2_1]..version
  212: 	$rc = $dbh->do(q{INSERT INTO version (resource_id, media_format_id, platform_type_id, location_url, license, purchase_license_type_id, modification_date, creation_date, reporter_id) VALUES (?,?,?,?,?,?,GetDate(),GetDate(),?)}, undef, $id, $format, $platform, $location, $rights_description, $cost, $submitter_key);
  213: 	if (!$rc) {
  214: 	$dbh->rollback;
  215: 	$dbh->disconnect;
  216: 	die "Unable to insert new record into version: $dbh->errstr\n";
  217: 	}
  218: 	# Upon success commit
  219: 	$dbh->commit;
  220: 	return $rc;
  221: }
  222: 
  223: # Update DLESE
  224: sub OAIc_update_lo_dlese {
  225: 	my ($dbh, $id, $learning_context, $intendedenduserrole_id, $rights_description, $cost) = @_;
  226: 	my $rc;
  227: 	# UPDATE [needs_3_1]..version
  228: 	$rc = $dbh->do(q{UPDATE version SET license = ?, purchase_license_type_id = ? WHERE resource_id = ?}, undef, substr($rights_description,0,4096), $cost, $id);
  229: 	if (!$rc) {
  230: 	$dbh->rollback;
  231: 	$dbh->disconnect;
  232: 	die "Unable to update record into lo_platform: $dbh->errstr\n";
  233: 	}
  234: 	# Upon success commit
  235: 	$dbh->commit;
  236: 	return $rc;
  237: }
  238: 
  239: sub OAIc_personexists {
  240: 	my ($dbh,$email) = @_;
  241: 	my @person_row_ary = $dbh->selectrow_array(q{SELECT entity.id FROM entity entity WHERE entity.email_address = ?}, undef, $email);
  242: 	if ($person_row_ary[0]) {
  243: 		return $person_row_ary[0];
  244: 		} else {
  245: 		return undef;
  246: 	}
  247: }
  248: 
  249: sub OAIc_personexists_name {
  250: 	my ($dbh,$name) = @_;
  251: 	my @person_row_ary = $dbh->selectrow_array(q{SELECT entity.id FROM entity entity WHERE entity.name = ?}, undef, $name);
  252: 	if ($person_row_ary[0]) {
  253: 		return $person_row_ary[0];
  254: 		} else {
  255: 		return undef;
  256: 	}
  257: }
  258: sub OAIc_orgexists {
  259: 	my ($dbh,$name) = @_;
  260: 	my @org_row_ary = $dbh->selectrow_array(q{SELECT entity.id FROM entity entity WHERE entity.name = ?}, undef, $name);
  261: 	if ($org_row_ary[0]) {
  262: 		return $org_row_ary[0];
  263: 		} else {
  264: 		return undef;
  265: 	}
  266: }
  267: 
  268: sub OAIc_insert_person {
  269: 	my ($dbh,$affiliate_key,$submitter_key,$personLastname,$personFirstname,$personEmail,$personCompany) = @_;
  270: 	my $rc = $dbh->do(q{INSERT INTO entity (entity_type,name,email_address,privacy_flags,object_type) VALUES (2,?,?,0,'person')}, undef, join(' ',$personFirstname,$personLastname), $personEmail);
  271: 	if (!$rc) {          
  272: 		$dbh->rollback;
  273: 		$dbh->disconnect;
  274: 		die "Unable to insert new person into entity: $dbh->errstr \n";
  275: 	}
  276: 	my $id = OAIc_personexists_name($dbh,join(' ',$personFirstname,$personLastname));
  277: 	$rc = $dbh->do(q{INSERT INTO person (id,type,first_name,last_name,company) VALUES (?,'person',?,?,?)}, undef, $id, $personFirstname, $personLastname, $personCompany);
  278: 	if (!$rc) {          
  279: 		$dbh->rollback;
  280: 		$dbh->disconnect;
  281: 		die "Unable to insert new person into person: $dbh->errstr \n";
  282: 	}
  283: 	return $rc;
  284: }
  285: 
  286: sub OAIc_insert_person_full {
  287: 	my ($dbh,$publisher_reg_key,$submitter_key,$person_last_name,$person_first_name,$entity_email_address,$person_company,$person_middle_name,$person_title,$entity_address,$entity_city,$entity_state,$entity_postal_code,$entity_home_page_url,$entity_phone,$entity_fax,$entity_country) = @_;
  288: 	my $rc = $dbh->do(q{INSERT INTO entity (entity_type,name,email_address,privacy_flags,object_type,address,city,state,postal_code,home_page_url,phone,fax,country) VALUES (2,?,?,0,'person',?,?,?,?,?,?,?,?)}, undef, join(' ',$person_first_name,$person_middle_name,$person_last_name),$entity_email_address,$entity_address,$entity_city,$entity_state,$entity_postal_code,$entity_home_page_url,$entity_phone,$entity_fax,$entity_country);
  289: 	if (!$rc) {          
  290: 		$dbh->rollback;
  291: 		$dbh->disconnect;
  292: 		die "Unable to insert new person into entity: $dbh->errstr \n";
  293: 	}
  294: 	my $id = OAIc_personexists($dbh,$entity_email_address);
  295: 	$rc = $dbh->do(q{INSERT INTO person (id,type,first_name,last_name,middle_name,title,company) VALUES (?,'person',?,?,?,?,?)}, undef, $id, $person_first_name, $person_last_name, $person_middle_name,$person_title,$person_company);
  296: 	if (!$rc) {          
  297: 		$dbh->rollback;
  298: 		$dbh->disconnect;
  299: 		die "Unable to insert new person into person: $dbh->errstr \n";
  300: 	}
  301: 	return $rc;
  302: }
  303: 
  304: sub OAIc_insert_org {
  305: 	my ($dbh,$publisher_reg_key,$submitter_key,$entity_email_address,$person_company,$entity_address,$entity_city,$entity_state,$entity_postal_code,$entity_home_page_url,$entity_phone,$entity_fax,$entity_country) = @_;
  306: 	my $rc = $dbh->do(q{INSERT INTO entity (entity_type,name,email_address,privacy_flags,object_type,address,city,state,postal_code,home_page_url,phone,fax,country) VALUES (1,?,?,0,'organization',?,?,?,?,?,?,?,?)}, undef, $person_company,$entity_email_address,$entity_address,$entity_city,$entity_state,$entity_postal_code,$entity_home_page_url,$entity_phone,$entity_fax,$entity_country);
  307: 	if (!$rc) {          
  308: 		$dbh->rollback;
  309: 		$dbh->disconnect;
  310: 		die "Unable to insert new organization into entity: $dbh->errstr \n";
  311: 	}
  312: 	return $rc;
  313: }
  314: return 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>