=50){//avoid too much recursion // return $buffer; //} if (($pos = strpos($chunk, '')) !== FALSE){ //var_dump(($pos = strpos($finetag, ''))); $buffer .= substr($chunk, 0, $pos + 12); //echo "found"; break; } else if ($found_start){ $buffer .= $chunk; } // end elseif // ($found_start) // } // end while // (($chunk = fread($file_pointer, $chunk_size) !== FALSE) // fclose($file_pointer); return $buffer; } } function _xmp_import_readXmpFromImage($filename){ $buffer = _xmp_import_getXmpData($filename); $xmlDoc = new DOMDocument(); $xmlDoc->loadXML($buffer); $children = $xmlDoc->childNodes; //print $xmlDoc->saveXML(); foreach ($children as $child){ $root = $child; } $bags = $root->getElementsByTagName("Bag"); foreach($bags as $bag){ $bagger = $bag; } $tags = $bagger->childNodes; foreach($tags as $tag){ if(trim($tag->textContent)!=""){ $gotTags[]=trim($tag->textContent); } } return $gotTags; } /** * From a given node we are going to get the imagepath of the image. if it's an image node * it's just going to be images[IMAGE_ORIGINAL]. If it's an imagefield node, we have to go * through the fields and look if there is an imagefield and then return the path * * @param $fields * @param $node * @return unknown_type */ function _xmp_import_get_image_path($fields, &$node) { if ($node->type == 'image') { return $node->images[IMAGE_ORIGINAL]; } foreach ($fields as $field) { if ($field['type'] == 'filefield') { $tmp = $node->$field['field_name']; return $tmp[0]['filepath']; } } return NULL; } /*getting the image field in order to set alt and title*/ function _xmp_import_get_image_field_data($fields, &$node){ if ($node->type == 'image') { //return $node->images[IMAGE_ORIGINAL]; //dunno what to return return; } foreach ($fields as $field) { if ($field['type'] == 'filefield') { $tmp = $node->$field['field_name']; return $field['field_name']; } } return NULL; } /*hook_nodeapi*/ function xmp_import_nodeapi(&$node, $op, $teaser = NULL, $page = NULL){ if ($teaser) { return; } switch ($op) { case 'update': //we just create nodes. break; case 'presave': $info = content_types($node->type); $fields = $info['fields']; $image_path = _xmp_import_get_image_path($fields, $node); $fid = db_result(db_query("SELECT fid FROM {files} WHERE filepath = '%s'", $image_path)); $file = file_create_path($image_path); $tags = _xmp_import_readXmpFromImage($file); foreach($tags as $tag){ $taxonomy[] = $tag; } if(strlen($node->taxonomy['tags'][2])>0){ $taxterms = ", ".implode(", ", $taxonomy); } else $taxterms = implode(", ", $taxonomy); $node->taxonomy['tags'][2] .= $taxterms; //setting up field data $data = _xmp_import_get_image_field_data($fields, $node); $field = $data; //var_dump($data); $fielder = $node->$field; $fielder[0]['data']['alt'] = implode(", ", $taxonomy); $fielder[0]['data']['title'] = implode(", ", $taxonomy); $node->$field = $fielder; break; } //break; } ?>