1)); user_external_login($u); echo "Bootstrap sucessfull\n\n"; $return = menu_execute_active_handler(); copy_to_taxonomy_parents("dbo_DisciplineTree1", $system_vid, 'disciplinetree1id', 'parentdisciplinetree1id'); copy_to_taxonomy_parents("dbo_DisciplineTree2", $spatial_vid, 'disciplinetree2id', 'parentdisciplinetree2id'); copy_to_taxonomy("dbo_MediaType", $mediatype_vid); copy_to_taxonomy_parents("dbo_Material", $material_vid, 'materialid', 'parentmaterialid'); copy_to_taxonomy("dbo_Group", $group_vid); copy_to_taxonomy("dbo_StorageLocation", $storagelocation_vid); copy_to_taxonomy("dbo_LocationType", $locationtype_vid); // Creation location type vocabulary copy_to_taxonomy("dbo_ClimaticZone", $climaticzone_vid); // Creation climatic zone vocabulary copy_to_taxonomy("dbo_DevelopmentLevel", $developmentlevel_vid); // Creation development level vocabulary copy_to_taxonomy("dbo_Culture", $culture_vid); // Creation culture vocabulary copy_to_taxonomy("dbo_sysconstraints", $style_vid); copy_to_taxonomy("dbo_Discipline", $discipline_vid); copy_to_taxonomy("dbo_Role", $role_vid); copy_to_taxonomy_parents("dbo_WorkType", $worktype_vid, 'worktypeid', 'parentworktypeid'); print "imported basic taxonomies
"; $res = db_query("SELECT * FROM {dbo_RightsInformation}"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->name; $node->type = 'rights'; $node->field_rights_rightsinformationid[0]['value'] = $r->rightsinformationid; $node->field_rights_use1[0]['value'] = $r->use1; $node->field_rights_use2[0]['value'] = $r->use2; $node->field_rights_use3[0]['value'] = $r->use3; node_save($node); db_query("update {dbo_RightsInformation} set import_special = '%s' where rightsinformationid = '%s'", $node->nid, $r->rightsinformationid); } print "imported rights information
"; // Creation of courses $res = db_query("SELECT * FROM {dbo_Course}"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->name; $node->type = 'course'; $node->field_course_courseid[0]['value'] = $r->courseid; $tid = db_result(db_query("select import_special from {dbo_Discipline} where disciplineid = '%s'", $r->disciplineid)); $node->field_course_disciplineid[0]['value'] = $tid; $node->field_course_coursenumber[0]['value'] = $r->coursenumber; node_save($node); db_query("update {dbo_Course} set import_special = '%s' where courseid = '%s'", $node->nid, $r->courseid); } print "imported courses
"; // Creation of periods $res = db_query("SELECT * FROM {dbo_Period} where periodid>1"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->name; $node->type = 'period'; $node->field_period_periodid[0]['value'] = $r->periodid; $node->field_period_fromyear[0]['value'] = $r->fromyear; $node->field_period_toyear[0]['value'] = $r->toyear; node_save($node); db_query("update {dbo_Period} set import_special = '%s' where periodid = '%s'", $node->nid, $r->periodid); } set_taxonomy_node_parent( 'dbo_Period', "periodid", "parentperiodid" ); print "imported periods
"; // Creation of locations $res = db_query("SELECT * FROM {dbo_Location} where locationid>1"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->name; $node->type = 'location'; $node->field_location_locationid[0]['value'] = $r->locationid; $node->field_location_address1[0]['value'] = $r->address1; $node->field_location_address2[0]['value'] = $r->address2; $node->field_location_postalcode[0]['value'] = $r->postalcode; $node->field_location_longeast[0]['value'] = $r->longeast; $node->field_location_longwest[0]['value'] = $r->longwest; $node->field_location_latnorth[0]['value'] = $r->latnorth; $node->field_location_latsouth[0]['value'] = $r->latsouth; $tid = db_result(db_query("SELECT import_special FROM {dbo_ClimaticZone} WHERE climaticzoneid = '%s'", $r->climaticzoneid)); $node->field_location_climaticzone[0]['value'] = $tid; $tid = db_result(db_query("SELECT import_special FROM {dbo_DevelopmentLevel} WHERE developmentlevelid = '%s'", $r->developmentlevelid)); $node->field_location_developmentlevel[0]['value'] = $tid; $tid = db_result(db_query("SELECT import_special FROM {dbo_LocationType} WHERE locationtypeid = '%s'", $r->locationtypeid)); $node->field_location_locationtype[0]['value'] = $tid; node_save($node); db_query("update {dbo_Location} set import_special = '%s' where locationid = '%s'", $node->nid, $r->locationid); } set_taxonomy_node_parent( 'dbo_Location', "locationid", "parentlocationid" ); print "imported locations
"; // Creation of creators $res = db_query("SELECT * FROM {dbo_Creator}"); while($r = db_fetch_object($res)) { if ( $r->lastname . $r->firstname != '' ) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->lastname . ', ' . $r->firstname; $node->type = 'creator'; $node->field_creator_creatorid[0]['value'] = $r->creatorid; $node->field_creator_lastname[0]['value'] = $r->lastname; $node->field_creator_firstname[0]['value'] = $r->firstname; $node->field_creator_middlename[0]['value'] = $r->middlename; $node->field_creator_pseudonym[0]['value'] = $r->pseudonym; $node->field_creator_dateofbirth[0]['value'] = $r->dateofbirth; $node->field_creator_dateofdeath[0]['value'] = $r->dateofdeath; $node->field_creator_source[0]['value'] = $r->source; $node->field_creator_comment[0]['value'] = $r->comment; $nid = db_result(db_query("select import_special from {dbo_Location} where locationid = '%s'", $r->locationid)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_creator_locationid[0]['value'] = $tid; $nid = db_result(db_query("select import_special from {dbo_Period} where periodid = '%s'", $r->periodid)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_creator_periodid[0]['value'] = $tid; $tid = db_result(db_query("select import_special from {dbo_Culture} where cultureid = '%s'", $r->cultureid)); $node->field_creator_cultureid[0]['value'] = $tid; node_save($node); db_query("update {dbo_Creator} set import_special = '%s' where creatorid = '%s'", $node->nid, $r->creatorid); } } print "imported creators
"; // Creation of organizations $res = db_query("SELECT * FROM {dbo_Organization}"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->organizationname; $node->type = 'org'; $node->field_org_department[0]['value'] = $r->department; $node->field_org_address1[0]['value'] = $r->address1; $node->field_org_address2[0]['value'] = $r->address2; $node->field_org_city[0]['value'] = $r->city; $node->field_org_state[0]['value'] = $r->state; $node->field_org_country[0]['value'] = $r->country; $node->field_org_postalcode[0]['value'] = $r->postalcode; $node->field_org_userid[0]['value'] = $r->userid; $node->field_org_emailaddress[0]['value'] = $r->emailaddress; $node->field_org_phonenumber[0]['value'] = $r->phonenumber; $node->field_org_url[0]['value'] = $r->url; $node->field_org_source[0]['value'] = $r->source; $node->field_org_comment[0]['value'] = $r->comment; node_save($node); db_query("update {dbo_Organization} set import_special = '%s' where organizationid = '%s'", $node->nid, $r->organizationid); } print "imported organizations
"; // Creation of works $res = db_query("SELECT * FROM {dbo_Work}"); while($r = db_fetch_object($res)) { $node = new StdClass(); node_object_prepare($node); $node->is_new = true; $node->title = $r->title; $node->type = 'work'; $node->field_work_workid[0]['value'] = $r->workid; $node->field_work_url[0]['value'] = $r->url; $node->field_work_catalognumber[0]['value'] = $r->catalognumber; $node->field_work_subject[0]['value'] = $r->subject; $node->field_work_desc[0]['value'] = $r->objectdescriptionsummary; $node->field_work_crossreference[0]['value'] = $r->crossreference; $node->field_work_comment[0]['value'] = $r->comment; $node->field_work_height[0]['value'] = $r->height; $node->field_work_width[0]['value'] = $r->width; $node->field_work_length[0]['value'] = $r->length; $node->field_work_diameter[0]['value'] = $r->diameter; $node->field_work_dimensionunit[0]['value'] = $r->dimensionunit; $node->field_work_volume[0]['value'] = $r->volume; $node->field_work_volumeunit[0]['value'] = $r->volumeunit; $node->field_work_area[0]['value'] = $r->area; $node->field_work_areaunit[0]['value'] = $r->areaunit; $node->field_work_dimensionflags[0]['value'] = $r->dimensionflags; $node->field_work_scalesmall[0]['value'] = $r->scalesmall; $node->field_work_scalesmallunit[0]['value'] = $r->scalesmallunit; $node->field_work_scalelarge[0]['value'] = $r->scalelarge; $node->field_work_scalelargeunit[0]['value'] = $r->scalelargeunit; $node->field_work_dimensioncomment[0]['value'] = $r->dimensioncomment; $node->field_work_exactyear[0]['value'] = $r->exactyear; $node->field_work_datecomment[0]['value'] = $r->datecomment; $node->field_work_publicationcomment[0]['value'] = $r->publicationcomment; $nid = db_result(db_query("select import_special from {dbo_Location} where locationid = '%s'", $r->locationidwork)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_work_locationidwork[0]['value'] = $tid; $tid = db_result(db_query("select import_special from {dbo_Culture} where cultureid = '%s'", $r->cultureid)); $node->field_work_cultureid[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_DisciplineTree1} as dt1, {dbo_WorkDisciplineTree1} as wdt1 where wdt1.disciplinetree1id = dt1.disciplinetree1id and wdt1.workid = '%s'", $r->workid)); $node->field_work_system[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_DisciplineTree2} as dt1, {dbo_WorkDisciplineTree2} as wdt1 where wdt1.disciplinetree2id = dt1.disciplinetree2id and wdt1.workid = '%s'", $r->workid)); $node->field_work_spatial[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_Group} as dt1, {dbo_WorkGroup} as wdt1 where wdt1.groupid = dt1.groupid and wdt1.workid = '%s'", $r->workid)); $node->field_work_group[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_Material} as dt1, {dbo_WorkMaterial} as wdt1 where wdt1.materialid = dt1.materialid and wdt1.workid = '%s'", $r->workid)); $node->field_work_material[0]['value'] = $tid; $nid = db_result(db_query(" select dt1.import_special from {dbo_Period} as dt1, {dbo_WorkPeriod} as wdt1 where wdt1.periodid = dt1.periodid and wdt1.workid = '%s'", $r->workid)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_work_period[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_sysconstraints} as dt1, {dbo_WorkStyle} as wdt1 where wdt1.styleid = dt1.styleid and wdt1.workid = '%s'", $r->workid)); $node->field_work_style[0]['value'] = $tid; $wwts = db_query(" select dt1.import_special as tid from {dbo_WorkType} as dt1, {dbo_WorkWorkType} as wdt1 where wdt1.worktypeid = dt1.worktypeid and wdt1.workid = '%s'", $r->workid); while($wwt = db_fetch_object($wwts)) { $node->field_work_type[] = array( 'value' => $wwt->tid ); } // Add people by role $roles = db_query("SELECT * FROM {dbo_WorkRole} where workid = '%s'", $r->workid); while($role = db_fetch_object($roles)) { $role_tid = db_result(db_query("SELECT import_special FROM {dbo_Role} WHERE roleid = '%s'", $role->roleid)); $creator_nid = db_result(db_query("SELECT import_special FROM {dbo_Creator} WHERE creatorid = '%s'", $role->creatorid)); $creator_tid = _taxonomynode_get_tid_from_nid($creator_nid); $org_nid = db_result(db_query("SELECT import_special FROM {dbo_Organization} WHERE organizationid = '%s'", $role->organizationid)); $org_tid = _taxonomynode_get_tid_from_nid($org_nid); $node->field_work_people[] = array( 'type' => 'people', 'value' => array( 'field_people_creatorid' => array(array('value' => $creator_tid)), 'field_people_organizationid' => array(array('value' => $org_tid)), 'field_people_role' => array(array('value' => $role_tid)), ), ); } // Import data from related MediaAsset row $m = db_fetch_object(db_query("SELECT * FROM {dbo_MediaAsset} WHERE workid = '%s'", $r->workid)); $node->field_work_accessnumber[0]['value'] = $m->accessnumber; $node->field_work_originalmedianumber[0]['value'] = $m->originalmedianumber; $node->field_work_mediaassetyear[0]['value'] = $m->mediaassetyear; $node->field_work_mediadatecomment[0]['value'] = $m->datecomment; $node->field_work_mimetype[0]['value'] = $m->mimetype; $node->field_work_fileextension[0]['value'] = $m->fileextension; $node->field_work_pathhint[0]['value'] = $m->pathhint; $tid = db_result(db_query("select import_special from {dbo_MediaType} where mediatypeid = '%s'", $m->mediatypeid)); $node->field_work_mediatypeid[0]['value'] = $tid; $tid = db_result(db_query("select import_special from {dbo_StorageLocation} where storagelocationid = '%s'", $m->storagelocationid)); $node->field_work_storagelocationid[0]['value'] = $tid; $nid = db_result(db_query("select import_special from {dbo_RightsInformation} where rightsinformationid = '%s'", $m->rightsinformationid)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_work_rightsinformationid[0]['value'] = $tid; $nid = db_result(db_query("select import_special from {dbo_Course} where courseid = '%s'", $m->courseid)); $tid = _taxonomynode_get_tid_from_nid($nid); $node->field_work_courseid[0]['value'] = $tid; $tid = db_result(db_query(" select dt1.import_special from {dbo_Discipline} as dt1, {dbo_MediaAssetDiscipline} as wdt1 where wdt1.disciplineid = dt1.disciplineid and wdt1.workid = '%s'", $r->workid)); $node->field_work_disciplineid[0]['value'] = $tid; $url = 'http://localhost/files/'.$m->accessnumber.'.jpeg'; drupal_set_message( $url ); $file=remote_file_get_url( $url ); if (is_object($file)) { remote_file_cck_attach_file($node, $file->filepath, 'field_work_image', 0); } node_save($node); db_query("update {dbo_Work} set import_special = '%s' where workid = '%s'", $node->nid, $r->workid); } function set_taxonomy_node_parent ( $table, $field, $parent ) { // Set hierarchy for all terms $res = db_query("SELECT * FROM {%s} where %s>1", $table, $field); while($r = db_fetch_object($res)) { if ( $r->$parent > 1 ) { $tid = _taxonomynode_get_tid_from_nid($r->import_special); $term = taxonomy_get_term($tid); $sql = "select import_special from {%s} where %s = '%s' limit 1"; $pid = db_result(db_query($sql, $table, $field, $r->$parent)); if ($pid > 0) { $pid = _taxonomynode_get_tid_from_nid($pid); $term->parent = $pid; $term_array = (array) $term; taxonomy_save_term( $term_array ); } } } } function copy_to_taxonomy($table, $vid, $name = "name") { $res = db_query("SELECT * FROM {%s}", $table); while($r = db_fetch_object($res)) { if ( $r->$name != '' ) { db_query( "UPDATE {%s} set import_special = '%s' WHERE record_id = %d", $table, create_term( $r->$name, $vid ), $r->record_id ); } } } function copy_to_taxonomy_parents($table, $vid, $child, $parent, $name = "name") { copy_to_taxonomy($table, $vid, $name); $res = db_query("SELECT * FROM {%s}", $table); while($r = db_fetch_object($res)) { if ( $r->$parent > 1 ) { $tid = $r->import_special; $ptid = db_result(db_query("select import_special from {%s} where %s = '%s'", $table, $child, $r->$parent)); if ( $ptid > 0 ) { $term = taxonomy_get_term($tid); $term_array = (array) $term; $term_array['parent'] = $ptid; taxonomy_save_term($term_array); } } } } function create_term($name, $vid, $desc = '') { $edit = array( 'name' => $name, 'vid' => $vid, 'description' => $desc, ); taxonomy_save_term( $edit ); return $edit['tid']; } /** * Attach the given file object to the given CCK field * * @param $node * @param $filepath * Path to the file to attach * @param $fieldname * CCK fieldname to attach to * @param $index * Index to multiple values * * @see http://drupal.org/node/328232 for a drupal_execute example */ function remote_file_cck_attach_file($node, $filepath, $fieldname, $index=0) { $field = content_fields($fieldname, $node->type); //TODO: I'm not sure why we need the filefield validators too $validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field)); $files_path = filefield_widget_file_path($field); // This path does not have to exists already. _remote_file_recursive_file_create_path($files_path); $file = field_file_save_file($filepath, $validators, $files_path); if (!is_array($node->$fieldname)) { // Make CCK array structure $node->$fieldname=array(); } $node->{$fieldname}[$index]=$file; } /** * Create the path ourselves recursively */ function _remote_file_recursive_file_create_path($path) { if (!file_check_directory($path, FILE_CREATE_DIRECTORY)) { // Support DOS style $root=str_replace('\\','/',file_directory_path()); $path=str_replace('\\','/',$path); // We only do our work from the file system root $roots=explode('/',$root); $paths=explode('/',$path); while (count($roots)) { array_shift($roots); array_shift($paths); } foreach ($paths as $dir) { $root.= '/' . $dir; file_check_directory($root, FILE_CREATE_DIRECTORY); } } } /** * Gets the file given by the url * * @param $url * The given url * @return * FALSE or file object for further processing */ function remote_file_get_url($url, $temp=TRUE) { $md5_url=md5($url); $error = 'No error'; static $urls; if (!isset($urls)) { $urls=array(); } if (isset($urls[$md5_url])) { return $urls[$md5_url]; } // TODO: Check for appropriate providers like wikipedia.org //$result=parse_url($url); //=== //TODO: Only do the request if the file is not already on our server $result=drupal_http_request($url); if (isset($result->error)) { unset($result->data); $error=print_r($result, TRUE); return $error; } $info=array(); $info['filemime']=$result->headers['Content-Type']; $info['filesize']=$result->headers['Content-Length']; $info['data']=$result->data; list($dummy, $ext)=explode('/', $info['filemime']); $file_name = $md5_url . '.' . $ext; $info['filepath']=remote_file_basepath() . '/' . $file_name; $info['filename']=$file_name; $file=remote_file_write_file($info, $temp); if (!is_object($file)) { $error=print_r($info,TRUE); return $error; } $urls[$md5_url]=$file; return $urls[$md5_url]; } /** * Writes the given data to the file system and drupals files table * * Existing files are overriden. * * @param array $info * Info for the file to create * @param $temp * Indicated whether the file should be temporary saved of permanent * * @return * File object or FALSE * * @see remote_file_basepath() */ function remote_file_write_file( $info, $temp=FALSE) { $exists = is_file($info['filepath']); if (!$exists) { file_save_data( $info['data'], $info['filepath'], FILE_EXISTS_REPLACE); global $user; $file = (object) array(); $file->uid = $user->uid; $file->filename=$info['filename']; $file->filepath=$info['filepath']; $file->filemime=$info['filemime']; $file->filesize=$info['filesize']; if ($temp) { $file->status = FILE_STATUS_TEMPORARY; } else { $file->status = FILE_STATUS_PERMANENT; } $result=drupal_write_record('files', $file); if ($result!==FALSE) { return $file; } return FALSE; } else { $sql="SELECT * FROM {files} WHERE filepath='%s'"; return db_fetch_object(db_query($sql, $info['filepath'])); } } /** * base path for the file location * * @return * path to file location */ function remote_file_basepath() { $path='remote'; $path = file_create_path($path); file_check_directory($path, FILE_CREATE_DIRECTORY); return $path; }