Annotation of loncom/metadata_database/LONCAPA/lonmetadata.pm, revision 1.1
1.1 ! matthew 1: # The LearningOnline Network with CAPA
! 2: #
! 3: # $Id$
! 4: #
! 5: # Copyright Michigan State University Board of Trustees
! 6: #
! 7: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
! 8: #
! 9: # LON-CAPA is free software; you can redistribute it and/or modify
! 10: # it under the terms of the GNU General Public License as published by
! 11: # the Free Software Foundation; either version 2 of the License, or
! 12: # (at your option) any later version.
! 13: #
! 14: # LON-CAPA is distributed in the hope that it will be useful,
! 15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 17: # GNU General Public License for more details.
! 18: #
! 19: # You should have received a copy of the GNU General Public License
! 20: # along with LON-CAPA; if not, write to the Free Software
! 21: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! 22: #
! 23: # /home/httpd/html/adm/gpl.txt
! 24: #
! 25: # http://www.lon-capa.org/
! 26: #
! 27: ######################################################################
! 28:
! 29: package LONCAPA::lonmetadata;
! 30:
! 31: use strict;
! 32: use DBI;
! 33:
! 34: ######################################################################
! 35: ######################################################################
! 36:
! 37: =pod
! 38:
! 39: =head1 Name
! 40:
! 41: lonmetadata
! 42:
! 43: =head1 Synopsis
! 44:
! 45: lonmetadata holds a description of the metadata table and provides
! 46: wrappers for the storage and retrieval of metadata to/from the database.
! 47:
! 48: =head1 Description
! 49:
! 50: =head1 Methods
! 51:
! 52: =over 4
! 53:
! 54: =cut
! 55:
! 56: ######################################################################
! 57: ######################################################################
! 58:
! 59: =pod
! 60:
! 61: =item Old table creation command
! 62:
! 63: CREATE TABLE IF NOT EXISTS metadata
! 64: (title TEXT,
! 65: author TEXT,
! 66: subject TEXT,
! 67: url TEXT,
! 68: keywords TEXT,
! 69: version TEXT,
! 70: notes TEXT,
! 71: abstract TEXT,
! 72: mime TEXT,
! 73: language TEXT,
! 74: creationdate DATETIME,
! 75: lastrevisiondate DATETIME,
! 76: owner TEXT,
! 77: copyright TEXT,
! 78:
! 79: FULLTEXT idx_title (title),
! 80: FULLTEXT idx_author (author),
! 81: FULLTEXT idx_subject (subject),
! 82: FULLTEXT idx_url (url),
! 83: FULLTEXT idx_keywords (keywords),
! 84: FULLTEXT idx_version (version),
! 85: FULLTEXT idx_notes (notes),
! 86: FULLTEXT idx_abstract (abstract),
! 87: FULLTEXT idx_mime (mime),
! 88: FULLTEXT idx_language (language),
! 89: FULLTEXT idx_owner (owner),
! 90: FULLTEXT idx_copyright (copyright))
! 91:
! 92: TYPE=MYISAM;
! 93:
! 94: =cut
! 95:
! 96: ######################################################################
! 97: ######################################################################
! 98: my @Metadata_Table_Description =
! 99: (
! 100: { name => 'title', type=>'TEXT'},
! 101: { name => 'author', type=>'TEXT'},
! 102: { name => 'subject', type=>'TEXT'},
! 103: { name => 'url', type=>'TEXT', restrictions => 'NOT NULL' },
! 104: { name => 'keywords', type=>'TEXT'},
! 105: { name => 'version', type=>'TEXT'},
! 106: { name => 'notes', type=>'TEXT'},
! 107: { name => 'abstract', type=>'TEXT'},
! 108: { name => 'mime', type=>'TEXT'},
! 109: { name => 'language', type=>'TEXT'},
! 110: { name => 'creationdate', type=>'DATETIME'},
! 111: { name => 'lastrevisiondate', type=>'DATETIME'},
! 112: { name => 'owner', type=>'TEXT'},
! 113: { name => 'copyright', type=>'TEXT'},
! 114: #--------------------------------------------------
! 115: { name => 'dependencies', type=>'TEXT'},
! 116: { name => 'modifyinguser', type=>'TEXT'},
! 117: { name => 'authorspace', type=>'TEXT'},
! 118: { name => 'lowestgradelevel', type=>'INT'},
! 119: { name => 'highestgradelevel', type=>'INT'},
! 120: { name => 'standards', type=>'TEXT'},
! 121: { name => 'count', type=>'INT'},
! 122: { name => 'course', type=>'INT'},
! 123: { name => 'course_list', type=>'TEXT'},
! 124: { name => 'goto', type=>'INT'},
! 125: { name => 'goto_list', type=>'TEXT'},
! 126: { name => 'comefrom', type=>'INT'},
! 127: { name => 'comefrom_list', type=>'TEXT'},
! 128: { name => 'sequsage', type=>'INT'},
! 129: { name => 'sequsage_list', type=>'TEXT'},
! 130: { name => 'stdno', type=>'INT'},
! 131: { name => 'stdno_list', type=>'TEXT'},
! 132: { name => 'avetries', type=>'FLOAT'},
! 133: { name => 'avetries_list', type=>'TEXT'},
! 134: { name => 'difficulty', type=>'FLOAT'},
! 135: { name => 'difficulty_list',type=>'TEXT'},
! 136: { name => 'clear', type=>'FLOAT'},
! 137: { name => 'technical', type=>'FLOAT'},
! 138: { name => 'correct', type=>'FLOAT'},
! 139: { name => 'helpful', type=>'FLOAT'},
! 140: { name => 'depth', type=>'FLOAT'},
! 141: { name => 'hostname', type=> 'TEXT'},
! 142: #--------------------------------------------------
! 143: );
! 144:
! 145: my @Fulltext_indicies = qw/
! 146: title
! 147: author
! 148: subject
! 149: url
! 150: keywords
! 151: version
! 152: notes
! 153: abstract
! 154: mime
! 155: language
! 156: owner
! 157: copyright/;
! 158:
! 159: ######################################################################
! 160: ######################################################################
! 161:
! 162: =pod
! 163:
! 164: =item &describe_metadata_storage
! 165:
! 166: Input: None
! 167:
! 168: Returns: An array of hash references describing the columns and rows
! 169: of the metadata table.
! 170:
! 171: =cut
! 172:
! 173: ######################################################################
! 174: ######################################################################
! 175: sub describe_metadata_storage {
! 176: return (\@Metadata_Table_Description,\@Fulltext_indicies);
! 177: }
! 178:
! 179: ######################################################################
! 180: ######################################################################
! 181:
! 182: =pod
! 183:
! 184: =item create_metadata_storage()
! 185:
! 186: Inputs: None
! 187:
! 188: Returns: A perl string which, when executed by MySQL, will cause the
! 189: metadata storage to be initialized.
! 190:
! 191: =cut
! 192:
! 193: ######################################################################
! 194: ######################################################################
! 195: sub create_metadata_storage {
! 196: my $tablename = 'metadata';
! 197: my $request = "CREATE TABLE IF NOT EXISTS ".$tablename." ";
! 198: #
! 199: # Process the columns (this code is stolen from lonmysql.pm)
! 200: my @Columns;
! 201: my $col_des; # mysql column description
! 202: foreach my $coldata (@Metadata_Table_Description) {
! 203: my $column = $coldata->{'name'};
! 204: $col_des = '';
! 205: if (lc($coldata->{'type'}) =~ /(enum|set)/) { # 'enum' or 'set'
! 206: $col_des.=$column." ".$coldata->{'type'}."('".
! 207: join("', '",@{$coldata->{'values'}})."')";
! 208: } else {
! 209: $col_des.=$column." ".$coldata->{'type'};
! 210: if (exists($coldata->{'size'})) {
! 211: $col_des.="(".$coldata->{'size'}.")";
! 212: }
! 213: }
! 214: # Modifiers
! 215: if (exists($coldata->{'restrictions'})){
! 216: $col_des.=" ".$coldata->{'restrictions'};
! 217: }
! 218: if (exists($coldata->{'default'})) {
! 219: $col_des.=" DEFAULT '".$coldata->{'default'}."'";
! 220: }
! 221: $col_des.=' AUTO_INCREMENT' if (exists($coldata->{'auto_inc'}) &&
! 222: ($coldata->{'auto_inc'} eq 'yes'));
! 223: $col_des.=' PRIMARY KEY' if (exists($coldata->{'primary_key'}) &&
! 224: ($coldata->{'primary_key'} eq 'yes'));
! 225: } continue {
! 226: # skip blank items.
! 227: push (@Columns,$col_des) if ($col_des ne '');
! 228: }
! 229: foreach my $colname (@Fulltext_indicies) {
! 230: my $text = 'FULLTEXT idx_'.$colname.' ('.$colname.')';
! 231: push (@Columns,$text);
! 232: }
! 233: $request .= "(".join(", ",@Columns).") ";
! 234: return $request;
! 235: }
! 236:
! 237: ######################################################################
! 238: ######################################################################
! 239:
! 240: =pod
! 241:
! 242: =item store_metadata()
! 243:
! 244: Inputs: database handle ($dbh) and a hash or hash reference containing the
! 245: metadata for a single resource.
! 246:
! 247: Returns: 1 on success, 0 on failure to store.
! 248:
! 249: =cut
! 250:
! 251: ######################################################################
! 252: ######################################################################
! 253: sub store_metadata {
! 254:
! 255: }
! 256:
! 257: ######################################################################
! 258: ######################################################################
! 259:
! 260: =pod
! 261:
! 262: =item lookup_metadata()
! 263:
! 264: Inputs: database handle ($dbh) and a hash or hash reference containing
! 265: metadata which will be used for a search.
! 266:
! 267: Returns:
! 268:
! 269: =cut
! 270:
! 271: ######################################################################
! 272: ######################################################################
! 273: sub lookup_metadata {}
! 274:
! 275: ######################################################################
! 276: ######################################################################
! 277:
! 278: =pod
! 279:
! 280: =item delete_metadata()
! 281:
! 282:
! 283:
! 284: =cut
! 285:
! 286: ######################################################################
! 287: ######################################################################
! 288: sub delete_metadata {}
! 289:
! 290: ######################################################################
! 291: ######################################################################
! 292:
! 293: 1;
! 294:
! 295: __END__;
! 296:
! 297: =pod
! 298:
! 299: =back
! 300:
! 301: =cut
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>