'HandleImageTemplate', 'purgethumbs'=>"HandlePurgeThumbnails",'createthumb'=>"HandleCreateThumb")); SDVA($HandleAuth, array('purgethumbs' => 'edit')); SDV($ThumbThread, 0); SDV($ThumbShowErrors, 1); SDV($ThumbCaptionFormat, ''); SDV($ThumbEnableExif, 0); Markup('thumblist', '>{$var}', '/\\(:thumb(list)?\\s*(.*?):\\)/ei', "FmtThumbList(\$pagename,PSS('$2'),'$1')"); Markup('thumbgallery', ' 0 ) $Px = intval($opt['px']); elseif(@intval(@$opt['width']))$Px = $Width = intval($opt['width']); else $Px = $ThumbPx; $atarget = (@$opt['target'])? ' target="'.htmlspecialchars($opt['target']).'"' : ''; $usetpl = isset($opt['usetemplate'])?$opt['usetemplate'] : $ThumbListUseTmpl; $thumbcols = isset($opt['cols'])? intval($opt['cols']) : $ThumbTableCols; if(!$thumbcols)$captionfmt=''; $caption = @$opt['caption']; if (@floatval(@$opt['maxarea'])) $maxarea = floatval($opt['maxarea']); else $maxarea = $ThumbMaxArea; $maxarea *= 1000000; $start = intval(@$opt['start']); if(!$start)$start = 1; $limit = isset($opt['limit'])? intval(@$opt['limit']) : $ThumbLimit; $enableexif = isset($opt['exif'])? intval(@$opt['exif']) : $ThumbEnableExif; $tableattributes = array("border", "cellpadding", "cellspacing", "rules", "style", "bgcolor", "align"); $mytabattr = ""; foreach($tableattributes as $k){if(isset($opt[$k])) $mytabattr.=" $k=\"".htmlspecialchars($opt[$k])."\"";} $mybgcolor = preg_match("/^#[0-9a-f]{6}$/i", @$opt['bgcolor'])? $opt['bgcolor'] : $ThumbBgColor; $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename); $uploadurl = FmtPageName(IsEnabled($EnableDirectDownload, 1) ? "$UploadUrlFmt$UploadPrefixFmt/" : "\$PageUrl?action=download&upname=", $pagename); $filelist = array(); if(!$suffix && file_exists("$uploaddir/{$opt['name']}"))$filelist[$opt['name']] = $opt['name']; elseif($suffix=='gallery') { preg_match_all("/^\s*(.+?\\.(?:jpe?g|png|gif|jpe))\\s*(?:\\|\\s*([^\\|]+?)\\s*(?:\\|\\s*(.*)\s*)?)?$/m", $list, $m, PREG_SET_ORDER); for($i=0; $i$arr) { if(!is_array($arr))$arr=''; $filepath = "$uploaddir/$file"; $info = @getimagesize($filepath); if(! $info) continue; if($maxarea > $info[0]*$info[1]) continue; if($start>1 && $i<$start) { $i++; continue; } if($limit>0 && $i>=$limit+$start) { break; } $stat = stat($filepath); $name = PUE("$uploadurl$file"); if($thumbcols && $td%$thumbcols == 0)$output .= "\n"; if(($thumbcols && $info[0]>$info[1]) || @$Width) // w > h { $imgh = round($Px * $info[1] / $info[0]); $imgw = $Px; } else { $imgh = $Px; $imgw = round($Px * $info[0] / $info[1]);} if($imgh>=$info[1] || $AlwaysRedoThumbs==-1)// the picture is not bigger than the thumb, display it { if($imgh>=$info[1])list($imgw, $imgh)= $info; $thumbname = $name; } else { $colorprefix = ($info[2] == 2)? '' : substr($mybgcolor, 1). "--"; $thumbprefix = "th$imgh---$colorprefix"; $thumbpath = "$uploaddir/$thumbprefix$file.jpg"; $thumbname = PUE("$uploadurl$thumbprefix$file.jpg"); if($AlwaysRedoThumbs || !file_exists($thumbpath) || filemtime($thumbpath)<$stat['mtime'] ) { if($ThumbThread) { $thumbname = PUE( FmtPageName("\$PageUrl?action=createthumb&upname=", $pagename) ."$thumbprefix$file.jpg"); $opt['supercache'] = 0; } else CreateThumb($filepath, $thumbpath, $imgh, $info, $mybgcolor); } } if($usetpl)$name = FmtPageName("\$PageUrl?action=imgtpl&updir=$pagename&upname=$file", $currentpage); if($AlwaysLinkOriginal || $thumbname != $name || $AlwaysRedoThumbs==-1) { $a2 = ""; $a1 = ""; } else {$a1=$a2="";} $replArr = array( "%%" => "%", "%G" => $ThumbGalNum, "%f" => $file, "%w" => $info[0], "%h" => $info[1], "%b" => $stat['size'], "%k" => round($stat['size']/1024), "%t" => strftime($TimeFmt, $stat['mtime']), "%U" => $name, "%u" => $thumbname ); $replArr+=ThumbExif($filepath, $enableexif); $title= htmlspecialchars(strtr( ($arr[1])?$arr[1]: $titlefmt, $replArr)); $replArr+=array('%n'=>"\n", '%N'=>"
"); $text = strtr( htmlspecialchars(($arr[0])?$arr[0]:$captionfmt), $replArr); $thumbadd = strtr($ThumbAdd, $replArr); $thumblinkadd = strtr($ThumbLinkAdd, $replArr); $mytd1 = sprintf($td1, round(($Px-$imgh)/2)+2, round(($Px-$imgw)/2)+2); $output .= "$mytd1$a1\"$title\"$a2$td2$text$td3"; $i++;$td++; if($thumbcols && $td%$thumbcols==0) $output .= "\n"; } if(!$output) return ThumbReturn("Only ".($i-1)." files found but you set start=$start.", 1); if($thumbcols && $td%$thumbcols) $output .= "\n"; if($thumbcols && $output) $output = "$outputstart$output\n\n"; if(!$_POST['preview'] && !$AlwaysRedoThumbs && intval(@$opt['supercache'])) ThumbSetCache($currentpage, $pagename, $ThumbGalNum, $output); return ThumbReturn($output); } function ThumbReturn($x,$err=0) { global $ThumbShowErrors; if($ThumbShowErrors==0 && $err==1) return; $a=$b=''; if($err){$a='
ThumbList warning: ';$b='
';} return '<:block>'. Keep("$a$x$b"); } function CreateThumb($filepath, $thumbpath, $nh, $info, $bgc) { global $ThumbQuality; $rr = hexdec(substr($bgc, 1, 2) ); $gg = hexdec(substr($bgc, 3, 2) ); $bb = hexdec(substr($bgc, 5, 2) ); $gd2 = function_exists('imagecreatetruecolor'); $imcopy = ($gd2)?'imagecopyresampled':'imagecopyresized'; $imcreate=($gd2)?'imagecreatetruecolor':'imagecreate'; $imtypes = array(1=>"gif",2=>"jpeg",3=>"png",15=>"wbmp",16=>"xbm"); list($imgw, $imgh, $t) = $info; if(!isset($imtypes[$t])) return; $fcreate = "imagecreatefrom".$imtypes[$t]; $img = $fcreate($filepath); if (!@$img){return;} $nw = round($imgw * $nh / $imgh); $nimg = $imcreate($nw,$nh); if($t != 2)imagefill($nimg, 0, 0, imagecolorallocate($nimg, $rr, $gg, $bb)); $imcopy($nimg,$img,0,0,0,0,$nw,$nh,$imgw,$imgh); imagedestroy($img); imagejpeg($nimg,$thumbpath,$ThumbQuality); imagedestroy($nimg); } function HandlePurgeThumbnails($pagename) { global $UploadDir, $UploadPrefixFmt; $page = RetrieveAuthPage($pagename,"edit"); if (!$page) { Abort("?Not enough permissions to purge all thumbs for $UploadPrefixFmt"); return; } $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename); if ($dirp = @opendir($uploaddir)) { while (($file=readdir($dirp)) !== false) { if (!preg_match("/^(th\\d+---|\\.thumblist\\.)/", $file)) continue; unlink("$uploaddir/$file"); } closedir($dirp); } Redirect($pagename,"{\$PageUrl}?action=upload"); } function ThumbGetCache($currentpage, $uploadpage, $n) { global $UploadDir, $UploadPrefixFmt, $PCache, $MessagesFmt; $ptime = $PCache[$currentpage]['time']; $cachefile = FmtPageName("$UploadDir$UploadPrefixFmt/.thumblist.$currentpage.$n.cache", $uploadpage); if(file_exists($cachefile) && filemtime($cachefile) >= $ptime) { if($handle = @fopen($cachefile, "r")) { $contents = @fread($handle, filesize($cachefile)); fclose($handle); } $MessagesFmt[] = "Got cache for $currentpage, gallery $n
\n"; return @$contents; } else return ""; } function ThumbSetCache($currentpage, $uploadpage, $n, $html) { global $UploadDir, $UploadPrefixFmt, $MessagesFmt; $MessagesFmt[] = "Caching gallery $n for $currentpage
\n"; $cachefile = FmtPageName("$UploadDir$UploadPrefixFmt/.thumblist.$currentpage.$n.cache", $uploadpage); if ($handle = fopen($cachefile, 'w+')) { @fwrite($handle, $html); fclose($handle); } } function HandleCreateThumb($pagename) { global $UploadDir, $UploadPrefixFmt; $page = RetrieveAuthPage($pagename,"read");//will ask for pw if needed $uploaddir = FmtPageName("$UploadDir$UploadPrefixFmt", $pagename); $t = $_REQUEST['upname']; $pt = "$uploaddir/$t"; if(preg_match( "/^th(\\d+)---(?:([0-9a-f]{6})--)?(.+)\\.jpg$/i", $t, $m ) ) { $f = "$uploaddir/{$m[3]}"; if(!file_exists($f) ) { Abort("?Source file $f not found."); return; } $info = @getimagesize($f); if(! file_exists($pt) || filemtime($f)< filemtime($pt)) CreateThumb($f, $pt, $m[1], $info, "#{$m[2]}"); HandleDownload($pagename); exit(); } Abort("?Unrecognized format."); } function ThumbFilePattern($x){return '/^'.str_replace(array("\\*","\\?","\\|"),array(".*",".","|"),preg_quote($x)).'$/i';} function ThumbExif($filepath, $x=0) { global $TimeFmt; $e = array(); if($x)$exif = @exif_read_data($filepath, 'EXIF', 1); $e['%M'] = @$exif['IFD0']['Make']; $e['%m'] = @$exif['IFD0']['Model']; $e['%W'] = @$exif['COMPUTED']['Width']?$exif['COMPUTED']['Width']:@$exif['EXIF']['ExifImageWidth']; $e['%H'] = @$exif['COMPUTED']['Height']?$exif['COMPUTED']['Height']:@$exif['EXIF']['ExifImageHeight']; $t = preg_replace('/^(\\d{4}):(\\d\\d):(\\d\\d.*)$/', '$1-$2-$3', @$exif['EXIF']['DateTimeOriginal']); $e['%T'] = @$t? strftime($TimeFmt,strtotime($t)):''; $e['%E'] = @$exif['EXIF']['ExposureTime']; $e['%F'] = @$exif['EXIF']['FocalLength']; $e['%A'] = @$exif['COMPUTED']['ApertureFNumber']; $e['%I'] = @$exif['EXIF']['ISOSpeedRatings']; $e['%C'] = trim(@$exif['COMMENT']['0'].' '.@$exif['COMPUTED']['UserComment']); return $e; } ## partly based on Hagan Fox's "HandleImageLink" from thumblink.php function HandleImageTemplate($pagename) { global $FmtV, $FmtPV, $ImageTemplateFmt, $PageStartFmt, $PageEndFmt, $HandleImageTplFmt; SDV($HandleImageTplFmt,array(&$PageStartFmt, '$PageText', &$PageEndFmt)); PCache($pagename, RetrieveAuthPage($pagename, 'read')); $uname=htmlspecialchars(@$_REQUEST['upname'], ENT_QUOTES); $pname=preg_replace("/^.*[\\.\\/]/", '', MakePageName($pagename, str_replace(".", "", $uname))); $udir =htmlspecialchars(@$_REQUEST['updir'], ENT_QUOTES); $FmtPV['$UpFile'] = "'$uname'"; $FmtPV['$UpFilePage'] = "'$pname'"; $FmtPV['$UpDir'] = "'$udir'"; $FmtPV['$UpDirUpFile'] = "'$udir/$uname'"; $FmtV['$PageText'] = MarkupToHTML($pagename,$ImageTemplateFmt); if(!trim($FmtV['$PageText'])) $FmtV['$PageText'] = MarkupToHTML($pagename,"[[$pagename?action=browse|$[Back to gallery] ]]\\\\\nAttach:{\$UpDirUpFile}"); PrintFmt($pagename, $HandleImageTplFmt); }