--- imagefield.module-5.x-1.2-rc1	Fri Oct 19 16:03:02 2007
+++ imagefield.module	Fri Apr 25 16:16:17 2008
@@ -172,7 +172,26 @@ function imagefield_field($op, $node, $f
 	  
     // called before content.module defaults.
     case 'insert':
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+      $unzipdir_to_remove=array();
+// Dimm end ///////////////////////////////////////////////////////////////////////////
       foreach ($node_field as  $delta => $item) {
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+        if(strpos($item['filemime'],'zip') !== FALSE
+         || strpos($item['filemime'],'x-gzip') !== FALSE
+         ){
+
+        $node_field_unzip = imagefield_unzip($item);
+        foreach ($node_field_unzip as $delta_unzip => $item_unzip) {
+          $node_field[]=$item_unzip;
+        }
+
+        $unzipdir_to_remove[]=imagefield_get_unzipdir($item); // to del unzipdir
+        unlink($item['filepath']); //del *.tmp file
+        $item=array();
+
+        }
+// Dimm end ///////////////////////////////////////////////////////////////////////////
         $node_field[$delta] = imagefield_file_insert($node, $item, $field); 
 		// Remove non-existant images from items
         if (empty($node_field[$delta])) {
@@ -180,12 +199,40 @@ function imagefield_field($op, $node, $f
 		}
       }
       imagefield_clear_field_session($fieldname);
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+      foreach ($unzipdir_to_remove as $unzipdir) {
+        delete_unzipdir($unzipdir);
+      }
+// Dimm end ///////////////////////////////////////////////////////////////////////////
       break;
 
     // called before content.module defaults.
     case 'update':
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+      $unzipdir_to_remove=array();
+// Dimm end ///////////////////////////////////////////////////////////////////////////
       foreach ($node_field as $delta => $item) {
 
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+        if(strpos($item['filemime'],'zip') !== FALSE
+//         || strpos($item['filemime'],'bzip') !== FALSE
+//         || strpos($item['filemime'],'bzip2') !== FALSE
+//         || strpos($item['filemime'],'x-tar') !== FALSE
+//         || strpos($item['filemime'],'gzip') !== FALSE
+         || strpos($item['filemime'],'x-gzip') !== FALSE
+         ){
+
+         $node_field_unzip = imagefield_unzip($item);
+         foreach ($node_field_unzip as $delta_unzip => $item_unzip) {
+           $node_field[]=$item_unzip;
+         }
+
+         $unzipdir_to_remove[]=imagefield_get_unzipdir($item); // to del unzipdir
+         unlink($item['filepath']); //del *.tmp file
+         $item=array();
+         }
+// Dimm end ///////////////////////////////////////////////////////////////////////////
+
         // If we're dealing with a single value field, and we just received
         // a new file item, we need to mark the existing (old) one for
         // deletion.  Otherwise, it will become orphaned.
@@ -211,6 +258,11 @@ function imagefield_field($op, $node, $f
       // Compact deltas.
       $node_field = array_values($node_field);
       imagefield_clear_field_session($fieldname);
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+      foreach ($unzipdir_to_remove as $unzipdir) {
+        delete_unzipdir($unzipdir);
+      }
+// Dimm end ///////////////////////////////////////////////////////////////////////////
       break;
 
     case 'delete':
@@ -221,6 +273,119 @@ function imagefield_field($op, $node, $f
   }
 }
 
+
+
+
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+
+function imagefield_get_unzipdir($file) {
+$tmpdir =  realpath(file_directory_path() . '/' . 'tmp');
+if  (!is_dir($tmpdir)){
+mkdir($tmpdir,0777);
+}
+
+$slashpos=0;
+if(strrpos($file['filepath'], "/")){
+$slashpos=strrpos($file['filepath'], "/");
+}elseif(strrpos($file['filepath'], "\\")){
+$slashpos=strrpos($file['filepath'], "\\");
+}
+$tmpfilename = substr($file['filepath'],$slashpos+1);
+//$tmpfilename = substr($tmpfilename,0,strrpos($tmpfilename,'.'));
+$tmpfilename = $tmpfilename.'_dir';
+$uzipdir= $tmpdir. '/' .$tmpfilename;
+return $uzipdir;
+}
+
+function delete_unzipdir($dirname)  {
+        if  (is_dir($dirname))
+                $dir_handle  =  opendir($dirname);
+        if  (!$dir_handle)
+                return  false;
+        while($file  =  readdir($dir_handle))  {
+                if  ($file  !=  "."  &&  $file  !=  "..")  {
+                        if  (!is_dir($dirname."/".$file))
+                                unlink($dirname."/".$file);
+                        else
+                                delete_directory($dirname.'/'.$file);                       
+                }
+        }
+        closedir($dir_handle);
+        rmdir($dirname);
+        return  true;
+}
+
+function imagefield_mime_content_type($filename) 
+{ 
+if ( function_exists ( 'mime_content_type ' ) ){
+  return mime_content_type ($filename);
+}else{ 
+  $mime = array( 
+       '.jpg' => 'image/jpg', 
+       '.jpeg' => 'image/jpeg', 
+       '.gif' => 'image/gif', 
+       '.png' => 'image/png'); 
+   return $mime[strrchr($filename, '.')]; 
+}
+} 
+
+function imagefield_unzip($file) {
+$uzipdir = imagefield_get_unzipdir($file);
+  if(substr($file['filename'],-4) == '.zip') {
+//    $e = "z:\\usr\\bin\\unzip.exe -qq -j {$file['filepath']} -d $uzipdir";
+    $e = "unzip -qq -j {$file['filepath']} -d $uzipdir";
+//    print $e;
+  } else if(substr($file['filename'],-7) == '.tar.gz') {
+//    $e = "z:\\usr\\bin\\tar -C $uzipdir -xzf {$file['filepath']}";
+    $e = "tar -C $uzipdir -xzf {$file['filepath']}";
+//    print $e;
+  } else {
+    drupal_set_message("Filename must end with .zip or .tar.gz");
+  }
+  
+  if($e) {
+    mkdir($uzipdir,0777);
+    $message = system($e);
+    if($message){
+      drupal_set_message('Extracting of the images failed: '.$message);
+    }else{
+$i = 0;
+$handle = opendir ($uzipdir);
+while($file = readdir($handle))
+{
+  if ($file != '.' && $file != '..')
+  {
+    $func[$i] = $file;    //формируем массив названий файлов с функциями
+    $i++;
+  }
+}
+sort ($func);
+for ($q = 0; $q<sizeof($func); $q++)
+{
+  $filename=$func[$q];
+
+$item['flags']['delete'] = 0;
+$item['alt'] = $filename;
+$item['title'] = $filename;
+$item['filename'] = $filename;
+$item['filepath'] = $uzipdir . '/'. $filename;
+$item['filemime'] = imagefield_mime_content_type($item['filepath']);
+$item['filesize'] = filesize($item['filepath']);
+$item['fid'] = 'upload';
+$item['alt'] = $filename;
+$node_field_unzip[] = $item;
+}
+    }
+  }
+
+        
+return $node_field_unzip;
+}
+// Dimm end ///////////////////////////////////////////////////////////////////////////
+
+
+
+
 /**
  * Implementation of hook_widget_info().
  */
@@ -394,7 +559,13 @@ function _imagefield_widget_prepare_form
   // Attach new files 
   if ($file = file_check_upload($fieldname . '_upload')) {
     $file = (array)$file;
-    if (strpos($file['filemime'],'image') !== FALSE) { 
+// Dimm        if (strpos($file['filemime'],'image') !== FALSE) { 
+// Dimm begin ///////////////////////////////////////////////////////////////////////////
+        if (strpos($file['filemime'],'image') !== FALSE
+         || strpos($file['filemime'],'zip') !== FALSE
+         || strpos($file['filemime'],'x-gzip') !== FALSE
+          ) { 
+// Dimm end ///////////////////////////////////////////////////////////////////////////
       $file = _imagefield_scale_image($file, $field['widget']['max_resolution']);
       
       // Create the filepath for the image preview
