* @license http://www.gnu.org/licenses/gpl.html GNU General Public License * part of the stuff derived from the PmWiki upload.php script **/ define('Minimage',1); global $iptc_special, $iptc_copyright, $iptc_caption, $icop, $icap, $ispe; // Linking SDV($LinkFunctions['Img:'],'LinkImg'); SDV($IMap['Img:'],'$1'); SDV($HandleActions['img'],'HandleImg'); SDV($HandleActions['postimg'],'HandlePostImg'); SDV($ActionTitleFmt['img'],'| $[Upload images]'); $PageImg1 = "

$[Image for] \$FullName

$[Image to upload:] $[Step 1]$[IMGreload]
$[Image wiki name:] \$affupname $[Step 2]

\$UploadResult

__________________________________
"; $PageImg2a = "
$[Image title]-
$[Image copyright]-

$[Image special instructions]
"; $PageImg2b = "
   
"; XLSDV('en',array( 'IMGbadtype' => ' - invalid file extension -', 'ULnotimage' => 'uploaded file is not an allowed format', 'IMGreload' => 'If wrong image, reload a new one then hit browser reload' )); function LinkImg($pagename,$imap,$path,$title,$txt,$fmt=NULL) { global $FmtV,$UploadFileFmt,$LinkUploadCreateFmt,$UploadUrlFmt,$UploadPrefixFmt; $path = str_replace(array('.JPG','.JPEG','.GIF','.PNG'),array('.jpg','.jpeg','.gif','.png'),$path); preg_match('/\\.([^.]+)$/',$path,$match); $ext=@$match[1]; if (!(($ext == 'jpg') OR ($ext == 'jpeg') OR ($ext == 'gif') OR ($ext == 'png'))) return FmtPageName("".$path.": $[IMGbadtype]",$pagename); $pathSmall = str_replace(array('.jpg','.jpeg','.gif','.png'),array('.s.jpg','.s.jpeg','.s.gif','.s.png'),$path); $upname = MakeUploadName($pagename,$path); $upnameSmall = MakeUploadName($pagename,$pathSmall); $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename); $filepathSmall = FmtPageName("$UploadFileFmt/$upnameSmall",$pagename); if (!file_exists($filepathSmall)) { if (!file_exists($filepath)) { $FmtV['$LinkUpload'] = FmtPageName("\$PageUrl?action=img&upname=zw_$upname", $pagename); $FmtV['$LinkText'] = $txt; return FmtPageName($LinkUploadCreateFmt,$pagename); } if (!function_exists('imagecopyresampled')) return ('$[Image resizing not possible on your server]'); store_images ($filepath); // to allow image upload via ftp } $smallimg = FmtPageName("$UploadUrlFmt$UploadPrefixFmt/$upnameSmall",$pagename); $smimg = preg_replace('/[\\x80-\\xff ]/e',"'%'.dechex(ord('$0'))", $smallimg); // for accented letters $plainimg = str_replace(array('.s.jpg','.s.jpeg','.s.gif','.s.png'),array('.p.jpg','.p.jpeg','.p.gif','.p.png'),$smimg); $out = ""; return $out; } function store_images ($filepath) { global $img_smallsize, $img_plainsize, $img_archsize; SDV($img_smallsize, 256); // displayed image size SDV($img_plainsize, 768); // linked image size SDV($img_archsize, 1280); // archived image size $filepathSmall = str_replace(array('.jpg','.jpeg','.gif','.png'), array('.s.jpg','.s.jpeg','.s.gif','.s.png'),$filepath); $filepathPlain = str_replace(array('.jpg','.jpeg','.gif','.png'), array('.p.jpg','.p.jpeg','.p.gif','.p.png'),$filepath); Get_IPTC ($filepath); $res = CreateSmallImage ($filepath, $filepathPlain, $img_plainsize); CreateSmallImage ($filepath, $filepathSmall, $img_smallsize); CreateSmallImage ($filepath, $filepath, $img_archsize); // to add iptc tags if ($res != 0) if (filesize($filepath) == filesize($filepathPlain)) unlink ($filepath); } function HandleImg($pagename) { global $FmtV,$UploadExtMax, $HandleImgFmt,$PageStartFmt,$PageImgFmt,$upresult,$affupname,$UploadDir, $iptc_caption, $iptc_copyright, $iptc_special,$UploadUrlFmt,$ThumbUrl, $PageImg1,$PageImg2a,$PageImg2b,$DispIPTC; $page = RetrieveAuthPage($pagename,'upload'); if (!$page) Abort("?cannot upload to $pagename"); PCache($pagename,$page); $upname = @$_REQUEST['upname']; $affupname = str_replace('zw_','', $upname); $FmtV['$UploadName'] = MakeUploadName($pagename,$upname); $ThumbUrl = $UploadUrlFmt.'/'; // to have default $thb = @$_REQUEST['thb']; $thbdir = $UploadDir.'/'.$thb; if (file_exists($thbdir) and is_file($thbdir)) $ThumbUrl .= $thb; $upresult = @$_REQUEST['upresult']; $FmtV['$upext'] = @$_REQUEST['upext']; $FmtV['$upmax'] = @$_REQUEST['upmax']; $FmtV['$UploadResult'] = ($upresult) ? FmtPageName("\$affupname: $[UL$upresult]",$pagename) : ''; $GLOBALS['PageHeaderFmt']=''; // Remove header $GLOBALS['PageLeftFmt']=''; $GLOBALS['PageTitleFmt']=''; $iptc_caption = @$_REQUEST['icap']; $iptc_copyright = @$_REQUEST['icop']; $iptc_special = @$_REQUEST['ispe']; $endname = substr($upname,-2); SDV($DispIPTC, TRUE); if ((($endname == 'pg') OR ($endname == 'eg')) AND $DispIPTC) $PageImgFmt = $PageImg1.$PageImg2a; else $PageImgFmt = $PageImg1.$PageImg2b; PrintFmt($pagename,array($PageStartFmt,$PageImgFmt)); // send page to browser } function HandlePostImg($pagename) { global $UploadVerifyFunction,$UploadFileFmt,$LastModFile,$ThumbUrl,$UploadDir, $iptc_caption, $iptc_copyright, $iptc_special; foreach (glob($UploadDir.'/zw_*') as $killfile) unlink ($killfile); // remove thumbnail $page = RetrieveAuthPage($pagename,'upload'); if (!$page) Abort("?cannot upload to $pagename"); $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname=='') $upname=$uploadfile['name']; $upname = MakeUploadName($pagename,$upname); $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename); $result = ImgVerifyBasic($uploadfile,$filepath); if ($result=='') { $filedir = preg_replace('#/[^/]*$#','',$filepath); mkdirp($filedir); if (!move_uploaded_file($uploadfile['tmp_name'],$filepath)) { Abort("?cannot move uploaded file to $filepath"); return; } fixperms($filepath); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; } if (isset($_POST["upl"])){ // After the upload $iptc_special = ''; Get_IPTC ($filepath); $thb = 'zw_'.time().'.jpg'; // Always changing thumb name if (CreateSmallImage ($filepath, $UploadDir.'/'.$thb, 224, 1) == 0) { $result = 'upresult=notimage'; $thb=''; } Redirect($pagename,"\$PageUrl?action=img&upname=$upname&$result&thb=$thb&icap=$iptc_caption&icop=$iptc_copyright&ispe=$iptc_special"); } if (isset($_POST["valid"])) { if ($_POST['upr']=="success") { $finalfile = str_replace('zw_','',$filepath); rename ($filepath, $finalfile); $iptc_caption = $_REQUEST['icap']; $iptc_copyright = $_REQUEST['icop']; $iptc_special = $_REQUEST['ispe']; Embed_IPTC ($finalfile); store_images ($finalfile); } } // remove files in uploaddir groups and pages foreach (glob($UploadDir.'/*/zw_*') as $killfile) unlink ($killfile); // files in Uploaddir root removed by thumbnail remover Redirect($pagename,"\$PageUrl"); } function ImgVerifyBasic($uploadfile,$filepath) { global $UploadExtSize,$UploadPrefixQuota,$UploadDirQuota,$UploadDir; if (!is_uploaded_file($uploadfile['tmp_name'])) return 'upresult=nofile'; switch ($uploadfile['error']) { case 1: return 'upresult=toobig'; case 2: return 'upresult=toobig'; case 3: return 'upresult=partial'; case 4: return 'upresult=nofile'; } $filedir = preg_replace('#/[^/]*$#','',$filepath); if ($UploadPrefixQuota && (dirsize($filedir)-@filesize($filepath)+$uploadfile['size']) > $UploadPrefixQuota) return 'upresult=pquota'; if ($UploadDirQuota && (dirsize($UploadDir)-@filesize($filepath)+$uploadfile['size']) > $UploadDirQuota) return 'upresult=tquota'; return ''; } function CreateSmallImage ($imgfile, $smallimgfile, $lsize, $thjpg = 0) { global $WriteGif,$OverSize; SDV($OverSize, 1.15); // Get infos of images $size = getimagesize($imgfile); $width = $size[0]; $height = $size[1]; $type = $size[2]; $imgsize = max ($height, $width); // Empty images creation if ($type == 1) $new = imagecreatefromgif($imgfile); elseif ($type == 2) $new = imagecreatefromjpeg($imgfile); elseif ($type == 3) $new = imagecreatefrompng($imgfile); else return (0); if (($lsize*$OverSize < $imgsize) OR ($thjpg == 1)) { // Do *not* resize images 15% larger if ($height > $width) { $newheight = $lsize; $newwidth = $width*($newheight/$height); } else { $newwidth = $lsize; $newheight = $height*($newwidth/$width); } $newimage = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($newimage, $new, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); $typeout=$type; if ($thjpg != 0) $typeout = 2; SDV($WriteGif,TRUE); if ($typeout == 1) { if (function_exists("imagegif") AND ($WriteGif == TRUE)) imagegif($newimage, $smallimgfile); else $typeout = 2; } if ($typeout == 2) imagejpeg($newimage, $smallimgfile); elseif ($typeout == 3) imagepng($newimage, $smallimgfile); } else { if ($imgfile != $smallimgfile) copy ($imgfile, $smallimgfile); // don't copy on itself } if ($thjpg == 0) Embed_IPTC ($smallimgfile); return ($type); } function Get_IPTC ($imgfile) { // Get IPTC informations or set defaults global $iptc_caption,$iptc_copyright,$iptc_special,$Author, $def_iptc_caption,$def_iptc_copyright,$def_iptc_special; // Default iptc values SDV($def_iptc_caption, 'Image collected on a PmWiki'); SDV($def_iptc_copyright, ''); SDV($def_iptc_special, ''); $size = getimagesize($imgfile, $info); if ($size[2] == 2) { // image is jpeg $cpr= (($Author == '') ? $def_iptc_copyright : $Author); if (isset($info["APP13"])) { // IPTC tags are present $iptc = iptcparse($info['APP13']); $iptc_caption = (isset($iptc['2#120'][0]) ? substr(htmlentities($iptc['2#120'][0]),0,64): ''); $iptc_copyright = (isset($iptc['2#116'][0]) ? substr(htmlentities($iptc['2#116'][0]),0,64): ''); $iptc_special = (isset($iptc['2#040'][0]) ? substr(htmlentities($iptc['2#040'][0]),0,128): ''); if ($iptc_caption == '') $iptc_caption = $def_iptc_caption; if ($iptc_copyright == '') $iptc_copyright = $cpr; $iptc_special .= $def_iptc_special; } else { // if IPTC not present, default values $iptc_caption = $def_iptc_caption; $iptc_copyright = $cpr; $iptc_special = $def_iptc_special; } } } function Embed_IPTC ($imgfile) { global $iptc_caption, $iptc_copyright, $iptc_special; $size = getimagesize($imgfile, $info); if ($size[2] == 2) { // image is jpeg if(!isset($info["APP13"])) { // Embed against existing IPTC dont work, so left 'as is' $iptc["2#120"][0] = $iptc_caption; $iptc["2#116"][0] = $iptc_copyright; $iptc["2#040"][0] = $iptc_special; $iptc_new = ''; foreach (array_keys($iptc) as $s){ $tag = str_replace("2#", "", $s); // Finds the IPTC numbers $c = count ($iptc[$s]); for ($i=0; $i <$c; $i++) { // Creating the string $iptc_new .= iptc_maketag(2, $tag, $iptc[$s][$i]); } } $content = iptcembed($iptc_new, $imgfile, 0); $fp = fopen($imgfile, "w+b"); fwrite($fp, $content); fclose($fp); } } } // Function to format the new IPTC text, (thanks to Thies C. Arntzen) function iptc_maketag($rec,$dat,$val){ $len = strlen($val); if ($len < 0x8000) return chr(0x1c).chr($rec).chr($dat). chr($len >> 8). chr($len & 0xff). $val; else return chr(0x1c).chr($rec).chr($dat). chr(0x80).chr(0x04). chr(($len >> 24) & 0xff). chr(($len >> 16) & 0xff). chr(($len >> 8 ) & 0xff). chr(($len ) & 0xff). $val; } // debug function function db($par) { $fp = fopen('errorimg.txt', "a+b"); fwrite($fp, "\n".$par); fclose($fp); }