--- get_image.module	2010-08-19 16:07:56.000000000 +0200
+++ get_image_mod.module	2010-08-21 13:39:09.000000000 +0200
@@ -25,28 +25,29 @@ function get_image_menu(){
  * Implementation of hook_nodeapi()
  */
 function get_image_nodeapi(&$node, $op) {
-	drupal_set_message('out @nid1, @nid2',array('@nid1' => $nid, '@nid2' => $node->nid ));
+  
   switch ($op) {
-    case 'presave':
-      /*
-				 if(variable_get('get_image_'.$node->type, 0) && $node->body){
-        $node->body = preg_replace_callback('/(<img.*?src=")(.*?)"/ms', '_get_image_save', $node->body);
-        $node->teaser = node_teaser($node->body, isset($node->format) ? $node->format : NULL);
-				*/
-				drupal_set_message('out @nid1, @nid2',array('@nid1' => $nid, '@nid2' => $node->nid ));
-			break;
-		case 'view':
-				drupal_set_message('out @nid1, @nid2',array('@nid1' => $nid, '@nid2' => $node->nid ));
-			break;
-		case 'update':
-				drupal_set_message('actualizando');
-				drupal_set_message('out @nid1, @nid2',array('@nid1' => $nid, '@nid2' => $node->nid ));
-				 if( $node->status == 1 && variable_get('get_image_'.$node->type, 0) && $node->body){
-					 drupal_set_message('in @nid1, @nid2',array('@nid1' => $nid, '@nid2' => $node->nid ));
-        $node->body = preg_replace_callback('/(<img.*?src=")(.*?)"/ms', '_get_image_save', $node->body);
+    case 'view':
+	//drupal_set_message(t('view'));
+	//drupal_set_message(t('view %nid',array('%nid' => $nodeId)));
+	break;
+    case 'update':
+	//drupal_set_message(t('update'));
+	//drupal_set_message(t('update @nid',array('@nid' => $node->nid)));
+    case 'presave':	
+	//drupal_set_message(t('presave'));
+      if( $node->status == '1' && variable_get('get_image_'.$node->type, 0) && $node->body){
+	variable_set('get_image_nid',$node->nid);
+	//drupal_set_message(t('presave @nid',array('@nid' => $node->nid)));
+        $node->body = preg_replace_callback('/(<[iI][mM][gG].*?[sS][rR][cC]=["])(.*?)["]/ms', '_get_image_save_double', $node->body);
+        $node->body = preg_replace_callback('/(<[iI][mM][gG].*?[sS][rR][cC]=[\'])(.*?)[\']/ms', '_get_image_save_simple', $node->body);
         $node->teaser = node_teaser($node->body, isset($node->format) ? $node->format : NULL);
-			break;
       }
+      break;
+    default:
+	//drupal_set_message(t('default'));
+	//drupal_set_message(t('default @nid',array('@nid' => $node->nid)));
+	break;
   }
 }
 
@@ -72,11 +73,51 @@ function get_image_form_alter(&$form, $f
  * save image
  * 分析内容中的 img 标签，将远程图片保存到本地服务器
  */
-function _get_image_save($mat){
-	//print_r($mat);
+function _get_image_save_simple($mat){
+	static $files;
+  //drupal_set_message(t('get_image_save ,@nid ,@nodeId ,@varGetImg',array('@nid'=>$node->nid,'@nodeId' => $nodeId, '@varGetImg' => variable_get('get_image_nid',0))));
+	if(!isset($files[$mat[2]])){
+	  if(!strstr($mat[2], $GLOBALS['base_url']) && strstr($mat[2], 'http://')){
+	    if($data = @file_get_contents($mat[2])){
+	      $filename = end(explode('/', $mat[2]));
+        
+	      if(variable_get('get_image_rename', 0)){
+	        $filename = md5($filename) .'.'. end(explode('.', $filename));
+        }
+        
+	      if($path = get_image_path()){
+		      $file = file_save_data($data, $path.'/'.$filename);
+		      
+		      drupal_set_message(t('Save "@name" success. @path', array('@name' => $mat[2], '@path' => $path)));
+		      
+		      if(variable_get('get_image_absolute', 0)){
+		      	$file = $GLOBALS['base_url'] . $GLOBALS['base_path'] . $file;
+		      }else{
+		      	$file = $GLOBALS['base_path'] . $file;
+		      }
+		      
+		      $files[$mat[2]] = $mat[1] . $file.'\'';
+	      }else{
+	      	drupal_set_message(t('Save "@name" failed', array('@name' => $mat[2])), 'error');
+	      	$files[$mat[2]] = $mat[0];
+	      }
+	    }else{
+	    	$files[$mat[2]] = $mat[0];
+	    }
+	  }else{
+	  	$files[$mat[2]] = $mat[0];
+	  }
+  }
+  return $files[$mat[2]];
+}
+
+/**
+ * save image
+ * 分析内容中的 img 标签，将远程图片保存到本地服务器
+ */
+function _get_image_save_double($mat){
 	static $files;
-	global $node;
-	$nodo = load_node($node->nid);
+  //drupal_set_message(t('get_image_save ,@nid ,@nodeId ,@varGetImg',array('@nid'=>$node->nid,'@nodeId' => $nodeId, '@varGetImg' => variable_get('get_image_nid',0))));
 	if(!isset($files[$mat[2]])){
 	  if(!strstr($mat[2], $GLOBALS['base_url']) && strstr($mat[2], 'http://')){
 	    if($data = @file_get_contents($mat[2])){
@@ -89,7 +130,7 @@ function _get_image_save($mat){
 	      if($path = get_image_path()){
 		      $file = file_save_data($data, $path.'/'.$filename);
 		      
-		      drupal_set_message(t('Save "@name" success. @mat1, @nid', array('@name' => $mat[2], '@mat1' => $mat[1],'@nid' => $nid)));
+		      drupal_set_message(t('Save "@name" success. @path', array('@name' => $mat[2], '@path' => $path)));
 		      
 		      if(variable_get('get_image_absolute', 0)){
 		      	$file = $GLOBALS['base_url'] . $GLOBALS['base_path'] . $file;
@@ -118,17 +159,16 @@ function _get_image_save($mat){
  */
 function get_image_path() {
 	global $user;
-	//drupal_set_message('nid:@nid',array('@nid' => $node->nid));
 	$path = array();
 	if(!variable_get('get_image_path', 0)){
 		$path[] = 'get_image';
 	}else{
 		$mm = format_date(time(), 'custom', "Y|m|d");
     $m = explode('|', $mm);
-#$a = array('%uid' => $user->uid, '%username' => $user->name, '%Y' => $m[0], '%m' => $m[1], '%d' => $m[2]);
-		$a = array('%uid' => $user->uid, '%username' => $user->name, '%Y' => $m[0], '%m' => $m[1], '%d' => $m[2], '%nid' => $node->nid );
+		$a = array('%uid' => $user->uid, '%username' => $user->name, '%Y' => $m[0], '%m' => $m[1], '%d' => $m[2], '%nid' => variable_get('get_image_nid',0));
 		$b = strtr(variable_get('get_image_path', 'get_image'), $a);
 		$path = explode('/',$b);
+		
 	}
 
 	$dirs = array();
@@ -151,8 +191,7 @@ function get_image_settings_form() {
 		'#type'=> 'textfield',
 		'#title' => t('Path of saving'),
 		'#default_value' => variable_get('get_image_path', 'get_image'),
-#'#description' => t('The path where the files should be saved, may save by user id or user name or time, e.g.: get_image/%uid or photos/%username or image/%Y/%m/%d. Available variables: %uid, %username, %Y, %m, %d.'),
-		'#description' => t('The path where the files should be saved, may save by user id or user name or time, e.g.: get_image/%uid or photos/%username or image/%Y/%m/%d. Available variables: %uid, %username, %Y, %m, %d, %nid.'),
+		'#description' => t('The path where the files should be saved, may save by user id or user name or time, e.g.: get_image/%uid or photos/%username or image/%Y/%m/%d. Available variables: %uid, %username, %Y, %m, %d, %nid ¿?.'),
 		'#size' => '40',
 		'#required' => TRUE,
 	);
