--- imagefield.module-5.x-1.2-rc1 Fri Oct 19 16:03:02 2007 +++ imagefield.module Tue May 27 00:32:54 2008 @@ -172,7 +172,30 @@ 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 +// ){ + if(strpos($item['filemime'],'zip') <> 0 + || strpos($item['filemime'],'x-gzip') <> 0 + ){ + + $node_field_unzip = imagefield_unzip($item); + foreach ($node_field_unzip as $delta_unzip => $item_unzip) { +// $node_field[]=$item_unzip; + $node_field[] = imagefield_file_update($node, $item_unzip, $field); + } + + $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 +203,44 @@ 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 +// ){ + if(strpos($item['filemime'],'zip') <> 0 + || strpos($item['filemime'],'x-gzip') <> 0 + ){ + + $node_field_unzip = imagefield_unzip($item); + foreach ($node_field_unzip as $delta_unzip => $item_unzip) { +// $node_field[]=$item_unzip; + $node_field[] = imagefield_file_update($node, $item_unzip, $field); + } + + $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 +266,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 +281,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