Gratis sexfilmpjes
###################### Template Class #################### # # Met de class Template is het mogelijk om in een template bestand bepaalde variable-waarden te plaatsen. # dit maakt het makkelijker voor disgners om een layout te veranderen zonder php te hoeven gebruiken. # De template file kan elk normaal ascii bestand zijn en kan bestaan uit HTML, gewone tekst etc etc. # Het model wat word vervangen heeft het volgende formaat: %[(a-z)]% # # Vereiste variabelen: # $vars -- Een array gevuld met sleutel waarden die in het template bestand moeten worden # vervangen en de daarbijbehordende nieuwe waarden. # # Het systeem is: # - Hoofdletter ongevoelig, # - Alfanumerieke tekens en _ worden geaccepteerd, # # Vb.: # $var = new Template("textfile.template.html"); # print $var->parse( // aanroep om "dailer.template.htm" te parsen # array( # "link" => $templateLink, // in het template bestand word "%[link]% vervangen door de waarde in $templateLink # ) # ); # ###### # Door: Willem de Vries # Voor: Virtual Pc Services # ###### # Changelog: # 1.0 (WdV 7-11-2003): statische functie ombouwen naar object # 1.1 (WdV 13-2-2004): parsen moet ook zonder parameters kunnen # 1.2 (JF 15-2-2004): Set functie toegevoegd om variablen aan template toe te voegen, aaroep: set(variablenaam, value) # 1.3 (JF 24-3-2004): Endless loop bug gefixed, bij openen van template kwam hij bij lege file of file zonder # regeleinde niet bij eof bij lezen van filesize. # 1.4 (WdV 04-3-2005): Nieuwe functie om default-waardes uit een HTML-comment veld te halen. # 2.0 (WdV 09-2-2005): grotendeels herschreven refresh() en parse() routine. Nu 50% sneller! # 2.1 (WdV 15-2-2005): Mogelijkheid om een template aan te maken vanuit een string ipv. een file uit te lezen # 2.2 (WdV 28-10-2005): On-the-fly compressie om geheugen te sparen, kleinere array properties # 2.3 (WdV 15-12-2005): Gebruik van de "TEMPLATE_SEARCH" superglobal om een (relatief) zoekpad op te geven waarin # templates gezocht moeten worden. # 2.4 (WdV: 3-5-2006): bugfix - gebruik geen som-tekens met arrays! ############################################################### function _slashjoin() { $out = array(); foreach(func_get_args() as $param) { if ($param) $out[] = $param; } return preg_replace('#([/]+)#', '/', join('/', $out)); } function _dirlist($str, $regex = '.*') { $out = array(); $dh = (is_dir($str)) ? @opendir($str) : null; while ($dh and $fil = readdir($dh)) { $out[] = _slashjoin($str, $fil); } if ( !$out) return; list($item) = array_values(preg_grep("|$regex|i", $out)); # error_log(__FUNCTION__ . " Matching items for |$regex|"); # error_log(__FUNCTION__ . " Subdirs in $str: " . join('|', $out)); # error_log(__FUNCTION__ . " Found dir '$item'"); return ($item) ? $item : $str; } class Template { var $fn = null; var $filename = null; var $ch = null; var $error = null; var $searchpath = null; var $searchdir = null; var $inf = null; var $def = null; var $me = 'object'; var $vars = array(); function Template($name) { # Compatibility $this->filename =& $this->fn; $this->me = strtoupper(get_class($this)); $this->searchpath = $GLOBALS[$this->me . "_SEARCH"]; if (defined($this->me . "_COMPRESS")) { foreach(array(array('gzcompress', 'gzuncompress'), array('gzdeflate', 'gzinflate')) as $grp) { if (function_exists($grp[0])) { $this->def = $grp[0]; $this->inf = $grp[1]; break; } } } $this->fn = $name; $this->refresh(); } function set($varname, $value = ''){ $this->vars[$varname] = $value; } function get($varname) { return $this->vars[$varname]; } function refresh() { if (!preg_match('/\.([^\.\/\s]+)$/', $this->fn, $found) ) { $this->cached($this->fn); $this->fn = null; $this->error = null; return; } # Implementatie zoekpad $subdirs = preg_split('/([\s]*;[\s]*)/', $this->searchpath); if (! $subdirs) $subdirs = array(''); list($a, $up, $b, $path) = preg_match('/^(([\.]+\/)*)(.+)/', $this->fn, $found) ? $found : array('', '', '', $found[0]); foreach($subdirs as $subdir) { $sub = _slashjoin($up, $subdir); # Wanneer de basis zoekdirectory niet bestaat, dan controleren we nog even # of deze naam niet partieel voorkomt ergens in de boom. Zie functie _dirlist(). if ($subdir and !is_dir($sub)) { $sub = _dirlist(dirname($sub), preg_replace('/([^0-9a-z]+)$/', '', $subdir) ); } $this->searchdir = _slashjoin($sub, $path); $exists = (file_exists($this->searchdir) and filesize($this->searchdir) > 0); if ($exists) { $this->searchpath = $sub; break; } } $readable = ($exists and is_readable($this->searchdir) ); $soort = ($readable) ? filetype($this->searchdir) : ""; if ($readable and $soort == "file") { $this->cached( join('', file($this->searchdir)) ); $this->error = null; } elseif (!$exists) { $this->error( sprintf("'%s' bestaat niet.", $this->searchdir) ); } elseif (!$readable) { $this->error( sprintf("'%s' kan niet worden gelezen.", $this->searchdir) ); } elseif ($exists && $soort != "file") { $this->error( sprintf("'%s' is geen geldig bestand; %s", $this->searchdir, $soort) ); } return; } function error($str) { $text = sprintf('%s %s [in %s]', $this->me, $str, $_SERVER['SCRIPT_NAME']); $this->error = $text; if ($_SERVER['IS_DEVEL'] and $this->error) error_log($this->error); } function parse($vars = array()) { $vars = array_merge($vars, $this->vars); if ($this->searchpath) # Voeg een slash toe aan het einde van het pad - templates verwachten dit! $vars['_searchpath'] = trim(_slashjoin($this->searchpath, ' ')); $match = array(); $repl = array(); foreach(array_keys($vars) as $key){ $match[] = sprintf("/(%%\[%s\]%%)/i", preg_quote($key)); $repl[] = $vars[$key]; } $match[] = '/%\[[^\[\]]+\]%/'; # Catch all $repl[] = ''; return preg_replace($match, $repl, $this->cached()); } function extractData() { $reg = '/<\!--(\s*([^=\s\<\>]+)[\s=]+[\'"]?([^\'"\s\<\>]+))+\s*-->/'; $comment = '/<\!--\s*(.+)\s*-->/'; $fields = '/([^=\s<>]+)[\s=]+([\'\"])?([^\s<>[jumi/homosex/10filmpjes.php]]+)/'; if (! preg_match_all($comment, $this->cached(), $found) ) return false; foreach($found[1] as $line) { preg_match_all($fields, $line, $res); for($i=0; $i < sizeof($res[0]); $i++) { $this->vars[$res[1][$i]] = $res[3][$i]; } } return $this->vars; } function cached($str = null) { if (is_null($str)) { #request $do = $this->inf; return ($this->compressed() and $this->ch) ? $do($this->ch) : $this->ch; } $do = $this->def; $this->ch = ($this->compressed()) ? $do($str, 9) : $str; } function compressed() { return ($this->inf || $this->def); } } # EOF ?> define('RANDOMCHARS', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'); function make_randomkey($length=32,$customkeys=false) { $keychars = ($customkeys) ? $customkeys : RANDOMCHARS; $randkey = ""; for ($i=0;$i<$length;$i++) $randkey .= substr($keychars, rand(1, strlen($keychars) ), 1); return $randkey; } function scan_dir($dir,$showfiles = true) { $files = glob("$dir/*", (!$showfiles) ? GLOB_ONLYDIR : null); $out = array(); while($files and $path = array_shift($files)) { $fil = array_pop(explode('/', $path)); $out[$fil] = $path; } return $out; } function read_specs($dir) { $specs = array(); if(!is_dir($dir)) return $files; $dh = opendir($dir) or error_log("Geen dir: '$dir'"); while ($dh and $fil = readdir($dh)) { if($fil{0} == '.' or !is_dir("$dir/$fil") ) continue; if(file_exists("$dir/$fil/disabled.txt")) { continue; } $specs[] = $fil; } if ($dh) closedir($dh); sort($specs); $out = array(); foreach($specs as $spec) { $sdir = sprintf('%s/%s',$dir,$spec); $tmp = read_dir($sdir,false); $my = array(); foreach(array_keys($tmp) as $item) { $my[] = $item; } $out[$spec] = $my; } return $out; } function read_dir($dir,$showfiles=true) { $files = array(); if(!is_dir($dir)) return $files; $dh = opendir($dir) or error_log("Geen dir: '$dir'"); while ($dh and $fil = readdir($dh)) { if($showfiles) { if($fil{0} == '.' or is_dir("$dir/$fil") ) continue; } else { if($fil{0} == '.' or !is_dir("$dir/$fil") ) continue; } if(file_exists("$dir/$fil/disabled.txt")) { #var_dump("$dir/$fil = disabled"); continue; } $files[] = $fil; } if ($dh) closedir($dh); sort($files); $out = array(); foreach($files as $fil) { $out[$fil] = sprintf('%s/%s',$dir,$fil); } return $out; } function ad_templates($dir='templates') { $files = read_dir($dir); $tpls = array(); if(count($files)>0) { foreach(array_keys($files) as $tpl) { $t = str_replace('.template.html','',$tpl); $tpls[$t] = new Template($files[$tpl]); } } return $tpls; } function readXML($XMLfile) { $tpl = new Template($XMLfile); return fromXML($tpl->parse()); $data = (file_exists($XMLfile)) ? array_map("trim", file($XMLfile)) : array(); if (! $data) $data = array(); $content = join("", $data); $content = preg_replace('/\<\?.+\?\>/', '', $content); $content = preg_replace('/&/', '&', $content); $struct = fromXML(str_replace('&', '&', $content)); return $struct; } function ad_data($dir) { $configfile = sprintf('%s/%s', $dir, DATA_FILE); if (! file_exists($configfile) ) { error_log("Geen configfile in $dir"); return; } $txt = join('', @file($configfile)); $config = fromXML($txt); if (is_null($config) ) return; $config['dir'] = ( preg_match('/docs(\/.+)$/', $dir, $found) ) ? $found[1] : $dir; # als xml geen 'name' tag heeft dan klopt onderstaande regel dus niet, moet ff fixen nog eens $config['episode'] = ($item = explode('/', $dir) ) ? $item[sizeof($item)-1] : $config['name']; return $config; } function custom_styles($css,$post) { if(!$css) return array(); $out = array(); foreach(array_keys($css) as $style) { $out[$style] = ($post[$style]) ? $post[$style] : $css[$style]; } return $out; } function fontsize($font='Verdana') { $sizes = array( 'Arial' => 11, 'Georgia' => 11, 'Tahoma' => 11, 'Times New Roman' => 11, 'Verdana' => 11, ); return ($sizes[$font]) ? $sizes[$font] : 11; } function fix_url($url,$CGI) { $chk = explode('?',$url); $params = sprintf('p=%s&pi=%s',$CGI['p'],$CGI['pi']); $chk[1] = ($chk[1]) ? sprintf('%s&%s',$chk[1],$params) : $params; return join('?',$chk); } function create_ad($css=array(),$files=array(),$data,$params,$tpl) { $trailer_url = ($data['trailer_url']) ? sprintf('http://%s/?trailer=%s&%s',$data['trailer_url'],$data['episode'],$params) : sprintf('http://%s/?%s',$data['site_url'],$params); $vars = array( 'key' => make_randomkey(10), 'params' => $params, 'site_url' => $data['site_url'], 'site_naam' => $data['site_naam'], 'trailer_url' => $trailer_url, 'trailer_txt' => ($data['trailer_url']) ? 'Trailer' : 'Website', 'episode' => $data['episode'], 'voice_url' => $data['voice_url'], 'datum' => strftime("%e %b %Y",strtotime($data['datum'])), 'tekst' => htmlentities($data['tekst']), 'textsize' => fontsize($css['textfont']), ); return $tpl->parse(array_merge($vars,$files,$css)); } ?>