Annotation of nsdl/harvestsmete/OAIcataloging_v2.pm, revision 1.1
1.1 ! www 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>