array('string'),'REQUEST_URI'=>array('string'),'REDIRECT_URL'=>array('string','mandatory'=>false)); Validator::validateArray($_SERVER,$basicIV); include_once '../../config.php'; function checkPeriod($period){ if(is_numeric($period)){ $year=0; $month=1; $day=1; switch(strlen($period)){ case 8: $day=substr($period,6,2); case 6: $month=substr($period,4,2); case 4: $year=substr($period,0,4); return checkdate($month,$day,$year); } } return false; } function getTimeFromPeriod($period){ if(is_numeric($period)){ $year=0; $month=1; $day=1; switch(strlen($period)){ case 8: $day=substr($period,6,2); case 6: $month=substr($period,4,2); case 4: $year=substr($period,0,4); if(checkdate($month,$day,$year)) return mktime(0,0,0,$month,$day,$year); } } return false; } function addPeriod($period,$inc=1){ if(checkPeriod($period)!==false){ switch(strlen($period)){ case 4: return strftime('%Y',mktime(0,0,0,1,1,$period+$inc)); case 6: return strftime('%Y%m',mktime(0,0,0,substr($period,4)+$inc,1,substr($period,0,4))); case 8: return strftime('%Y%m%d',mktime(0,0,0,substr($period,4,2),substr($period,6,2)+$inc,substr($period,0,4))); } } return false; } function getPeriodLabel($period){ $name=strval($period); switch(strlen($name)){ case 4: return $name; case 6: return substr($name,0,4).'/'.substr($name,4); case 8: return substr($name,0,4).'/'.substr($name,4,2).'/'.substr($name,6).''; } } function escapeJSInAttribute($str){ return htmlspecialchars(str_replace(array('\\','\r','\n','\''),array('\\\\','\\r','\\n','\\\''),$str)); } function escapeJSInCData($str){ return preg_replace(array('//','/\r*\n|\r/'),array('\x3C','\x3E','\\\\$0'),addslashes($str)); } function fetchQueryAll($query,$type=MYSQL_BOTH){ $rows=array(); if($result=mysql_query($query)){ while($row=mysql_fetch_array($result,$type)) array_push($rows,$row); mysql_free_result($result); } return $rows; } function fetchQueryRow($query){ if($result=mysql_query($query)){ if($row=mysql_fetch_array($result)){ mysql_free_result($result); return $row; } mysql_free_result($result); } return ; } function fetchQueryColumn($query){ $column=array(); if($result=mysql_query($query)){ while($row=mysql_fetch_row($result)) array_push($column,$row[0]); mysql_free_result($result); } return $column; } function fetchQueryCell($query){ if($result=mysql_query($query)){ list($cell)=mysql_fetch_row($result); mysql_free_result($result); return $cell; } return ; } function doesExistTable($tablename){ $likeEscape=array('/_/','/%/'); $likeReplace=array('\\_','\\%'); $escapename=preg_replace($likeEscape,$likeReplace,$tablename); $result=mysql_query("SHOW TABLES LIKE '$escapename' "); if($result==false) return false; if(mysql_num_rows($result)>0) return true; return false; } function getWaterMarkPosition(){ $waterMarkPosition=getUserSetting("waterMarkPosition","left=10|bottom=10"); list($horizontalPos,$verticalPos)=explode("|",$waterMarkPosition); $horizontalPos=explode("=",$horizontalPos); $verticalPos=explode("=",$verticalPos); if($horizontalPos[0]=="left"){ if($horizontalPos[1]>0){ $horizontalValue=$horizontalPos[1]; }else{ $horizontalValue="left"; } }elseif($horizontalPos[0]=="center"){ $horizontalValue="center"; }elseif($horizontalPos[0]=="right"){ if($horizontalPos[1]>0){ $horizontalValue=$horizontalPos[1]-$horizontalPos[1]*2; }else{ $horizontalValue="right"; } } if($verticalPos[0]=="top"){ if($verticalPos[1]>0){ $verticalValue=$verticalPos[1]; }else{ $verticalValue="top"; } }elseif($verticalPos[0]=="middle"){ $verticalValue="middle"; }elseif($verticalPos[0]=="bottom"){ if($verticalPos[1]>0){ $verticalValue=$verticalPos[1]-$verticalPos[1]*2; }else{ $verticalValue="bottom"; } } return "$horizontalValue $verticalValue"; } function getWaterMarkGamma(){ return 100; } function getThumbnailPadding(){ $thumbnailPadding=getUserSetting("thumbnailPadding",false); if($thumbnailPadding==false){ return array("top"=>0,"right"=>0,"bottom"=>0,"left"=>0); }else{ $tempArray=explode("|",$thumbnailPadding); return array("top"=>intval($tempArray[0]),"right"=>intval($tempArray[1]),"bottom"=>intval($tempArray[2]),"left"=>intval($tempArray[3])); } } function getThumbnailPaddingColor(){ return getUserSetting("thumbnailPaddingColor","FFFFFF"); } mysql_connect($database['server'],$database['username'],$database['password']); mysql_select_db($database['database']); # MySQL 4.0->4.1 로 변경하면서 생긴 인코딩 문제 해결 # if(mysql_query('SET CHARACTER SET utf8')){ # $database['utf8']=true; # function mysql_lessen($str,$length=255,$tail='..'){ # return UTF8::lessen($str,$length,$tail); # } # }else{ # $database['utf8']=false; # function mysql_lessen($str,$length=255,$tail='..'){ # return UTF8::lessenAsByte($str,$length,$tail); # } # } @mysql_query('SET SESSION collation_connection = \'utf8_general_ci\''); if(function_exists('mysql_real_escape_string')&&(mysql_real_escape_string('ㅋ')=='ㅋ')){ function mysql_tt_escape_string($string,$link=null){ return is_null($link)?mysql_real_escape_string($string):mysql_real_escape_string($string,$link); } }else{ function mysql_tt_escape_string($string,$link=null){ return mysql_escape_string($string); } } function getOwner($name){ global $database; return fetchQueryCell("select owner from {$database['prefix']}BlogSettings where name = '$name'"); } function getOwnerBySecondaryDomain($domain){ global $database; return DBQuery::queryCell("SELECT owner FROM {$database['prefix']}BlogSettings WHERE secondaryDomain = '$domain' OR secondaryDomain = '".(substr($domain,0,4)=='www.'?substr($domain,4):'www.'.$domain)."'"); } function getBlogSetting($owner){ global $database; if($result=mysql_query("select * from {$database['prefix']}BlogSettings where owner = $owner")){ return mysql_fetch_array($result); } return false; } function getSkinSetting($owner){ global $database,$service; if($result=mysql_query("SELECT * FROM {$database['prefix']}SkinSettings WHERE owner = $owner")){ $retval=mysql_fetch_array($result); if($retval!=FALSE){ if(!Validator::directory($retval['skin'])&&($retval['skin']!="customize/$owner")){ $retval['skin']=$service['skin']; } return $retval; } } $retval=array('owner'=>$owner,'skin'=>$service['skin'],'entriesOnRecent'=>5,'commentsOnRecent'=>5,'commentsOnGuestbook'=>5,'tagsOnTagbox'=>30,'tagboxAlign'=>3,'trackbacksOnRecent'=>5,'expandComment'=>1,'expandTrackback'=>1,'recentNoticeLength'=>25,'recentEntryLength'=>30,'recentCommentLength'=>30,'recentTrackbackLength'=>30,'linkLength'=>30,'showListOnCategory'=>1,'showListOnArchive'=>1,'tree'=>'base','colorOnTree'=>'000000','bgColorOnTree'=>'','activeColorOnTree'=>'FFFFFF','activeBgColorOnTree'=>'00ADEF','labelLengthOnTree'=>27,'showValueOnTree'=>1); return $retval; } function getDefaultURL($uid){ global $database,$service; $blog=DBQuery::queryRow("SELECT name, secondaryDomain, defaultDomain FROM {$database['prefix']}BlogSettings WHERE owner = $uid"); switch($service['type']){ case 'domain': if($blog['defaultDomain']&&$blog['secondaryDomain']) return ('http://'.$blog['secondaryDomain'].(isset($service['port'])?':'.$service['port']:'').$service['path']); else return ('http://'.$blog['name'].'.'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$service['path']); case 'path': return ('http://'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$service['path'].'/'.$blog['name']); case 'single': default: return ('http://'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$service['path']); } } function getArchives($owner){ global $database; $archives=array(); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $query=mysql_query("SELECT archivesOnPage FROM {$database['prefix']}SkinSettings WHERE owner = $owner"); $row=mysql_fetch_row($query); $archivesOnPage=$row[0]; $result=mysql_query("SELECT EXTRACT(year_month FROM FROM_UNIXTIME(published)) period, COUNT(*) count FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 GROUP BY period ORDER BY period DESC LIMIT $archivesOnPage"); if($result){ while($archive=mysql_fetch_array($result)) array_push($archives,$archive); } return $archives; } function getCalendar($owner,$period){ global $database; $calendar=array('days'=>array()); if(($period===true)||!checkPeriod($period)) $period=Timestamp::getYearMonth(); $calendar['period']=$period; $calendar['year']=substr($period,0,4); $calendar['month']=substr($period,4,2); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $result=mysql_query("SELECT DISTINCT DAYOFMONTH(FROM_UNIXTIME(published)) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 AND YEAR(FROM_UNIXTIME(published)) = {$calendar['year']} AND MONTH(FROM_UNIXTIME(published)) = {$calendar['month']}"); if($result){ while(list($day)=mysql_fetch_array($result)) array_push($calendar['days'],$day); } $calendar['days']=array_flip($calendar['days']); return $calendar; } function getCategoryNameById($owner,$id){ global $database; $result=fetchQueryCell("SELECT name FROM {$database['prefix']}Categories WHERE owner = $owner AND id = $id"); if(is_null($result)) return _text('전체'); else return $result; } function getCategoryBodyIdById($owner,$id){ global $database; $result=fetchQueryCell("SELECT bodyId FROM {$database['prefix']}Categories WHERE owner = $owner AND id = $id"); if(($id===0)||($result=='')||($id===null)) return 'tt-body-category'; return $result; } function getCategories($owner){ global $database; $rows=fetchQueryAll("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner AND id > 0 ORDER BY parent, priority"); $categories=array(); foreach($rows as $category){ if($category['parent']==null){ $category['children']=array(); $categories[$category['id']]=$category; }elseif(isset($categories[$category['parent']])) array_push($categories[$category['parent']]['children'],$category); } return $categories; } function getCategoriesSkin(){ global $database; global $owner,$service; $sql="select * from {$database['prefix']}SkinSettings where owner = $owner"; $setting=fetchQueryRow($sql); $skin=array('name'=>"{$setting['skin']}",'url'=>$service['path']."/image/tree/{$setting['tree']}",'labelLength'=>$setting['labelLengthOnTree'],'showValue'=>$setting['showValueOnTree'],'itemColor'=>"{$setting['colorOnTree']}",'itemBgColor'=>"{$setting['bgColorOnTree']}",'activeItemColor'=>"{$setting['activeColorOnTree']}",'activeItemBgColor'=>"{$setting['activeBgColorOnTree']}",); return $skin; } function getRecentComments($owner){ global $skinSetting,$database; $comments=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND entry>0 AND isFiltered = 0 ORDER BY written DESC LIMIT {$skinSetting['commentsOnRecent']}":"SELECT r.* FROM {$database['prefix']}Comments r, {$database['prefix']}Entries e WHERE r.owner = $owner AND r.owner = e.owner AND r.entry = e.id AND e.draft = 0 AND e.visibility >= 2 AND entry > 0 AND isFiltered = 0 ORDER BY r.written DESC LIMIT {$skinSetting['commentsOnRecent']}"; if($result=mysql_query($sql)){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!doesHaveOwnership()){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_text('관리자만 볼 수 있는 댓글입니다.'); } array_push($comments,$comment); } } return $comments; } function getEntriesTotalCount($owner){ global $database; $visibility=doesHaveOwnership()?'':'AND visibility > 0'; return fetchQueryCell("SELECT COUNT(*) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0"); } function getEntries($owner,$attributes='*',$condition=false,$order='published DESC'){ global $database; if(!empty($condition)) $condition='AND '.$condition; $visibility=doesHaveOwnership()?'':'AND visibility > 0'; return fetchQueryAll("SELECT $attributes FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility $condition ORDER BY $order"); } function getRecentEntries($owner){ global $database,$skinSetting; $entries=array(); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $result=mysql_query("SELECT id, title, comments FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 ORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}"); while($entry=mysql_fetch_array($result)){ array_push($entries,$entry); } return $entries; } function getNotices($owner){ global $database; $visibility=doesHaveOwnership()?'':'AND visibility = 2'; return fetchQueryAll("SELECT id, title, published FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category = -2 ORDER BY published DESC"); } function getLinks($owner){ global $database; $links=array(); if($result=mysql_query("select * from {$database['prefix']}Links where owner = $owner ORDER BY name")){ while($link=mysql_fetch_array($result)) array_push($links,$link); } return $links; } function getLocatives($owner){ return getEntries($owner,'id, title, slogan, location','length(location) > 1','location'); } function getCurrentSetting($name){ global $database,$owner,$activePlugins; if(!in_array($name,$activePlugins)) return false; $name=mysql_tt_escape_string($name); $result=mysql_query("SELECT settings FROM {$database['prefix']}Plugins WHERE owner = $owner AND name = '$name'"); if(false===$result) return false; $out=mysql_fetch_array($result); return $out['settings']; } function treatPluginTable($plugin,$name,$fields,$keys,$version){ global $database; if(doesExistTable($database['prefix'].$name)){ $keyname='Database_'.$name; $value=$plugin; $query="SELECT value FROM {$database['prefix']}ServiceSettings WHERE name='{$keyname}'"; $result=DBQuery::queryCell($query); if(is_null($result)){ $keyname=mysql_tt_escape_string(mysql_lessen($keyname,32)); $value=mysql_tt_escape_string(mysql_lessen($plugin.'/'.$version,255)); DBQuery::execute("INSERT INTO {$database['prefix']}ServiceSettings SET name='$keyname', value ='$value'"); }else{ $keyname=mysql_tt_escape_string(mysql_lessen($keyname,32)); $value=mysql_tt_escape_string(mysql_lessen($plugin.'/'.$version,255)); $values=explode('/',$result,2); if(strcmp($plugin,$values[0])!=0){ return false; }elseif(strcmp($version,$values[1])!=0){ DBQuery::execute("UPDATE {$database['prefix']}ServiceSettings SET value ='$value' WHERE name='$keyname'"); $eventName='UpdateDB_'.$name; fireEvent($eventName,$values[1]); } } return true; }else{ $query="CREATE TABLE {$database['prefix']}{$name} (owner int(11) NOT NULL default '0',"; foreach($fields as $field){ $isNull=($field['isnull']==0)?' NOT NULL ':' NULL '; $defaultValue=is_null($field['default'])?'':" DEFAULT '".mysql_tt_escape_string($field['default'])."' "; $fieldLength=($field['length']>=0)?"(".$field['length'].")":''; $sentence=$field['name']." ".$field['attribute'].$fieldLength.$isNull.$defaultValue.","; $query.=$sentence; } array_unshift($keys,'owner'); $query.=" PRIMARY KEY (".implode(',',$keys).")"; $query.=") TYPE=MyISAM DEFAULT CHARSET=utf8"; if(DBQuery::execute($query)){ $keyname=mysql_tt_escape_string(mysql_lessen('Database_'.$name,32)); $value=mysql_tt_escape_string(mysql_lessen($plugin.'/'.$version,255)); DBQuery::execute("INSERT INTO {$database['prefix']}ServiceSettings SET name='$keyname', value ='$value'"); return true; }else return false; } return true; } function getSidebarModuleOrderData($sidebarCount){ if(!is_null($tempValue=getUserSetting("sidebarOrder",NULL))){ $emptyArray=unserialize($tempValue); }else{ $emptyArray=false; } if($emptyArray===false) return ; return $emptyArray; } function getUserSetting($name,$default=null){ global $database,$owner; $value=DBQuery::queryCell("SELECT value FROM {$database['prefix']}UserSettings WHERE user = $owner AND name = '".mysql_tt_escape_string($name)."'"); return ($value===null)?$default:$value; } function setUserSetting($name,$value){ global $database,$owner; $name=mysql_tt_escape_string($name); $value=mysql_tt_escape_string($value); return DBQuery::execute("REPLACE INTO {$database['prefix']}UserSettings VALUES($owner, '$name', '$value')"); } function getStatistics($owner){ global $database; $stats=array('total'=>0,'today'=>0,'yesterday'=>0); $result=mysql_query("select visits from {$database['prefix']}BlogStatistics where owner = $owner"); if(mysql_num_rows($result)==1) list($stats['total'])=mysql_fetch_array($result); $result=mysql_query("select visits from {$database['prefix']}DailyStatistics where owner = $owner and `date` = ".Timestamp::getDate()); if(mysql_num_rows($result)==1) list($stats['today'])=mysql_fetch_array($result); $result=mysql_query("select visits from {$database['prefix']}DailyStatistics where owner = $owner and `date` = ".Timestamp::getDate(time()-86400)); if(mysql_num_rows($result)==1) list($stats['yesterday'])=mysql_fetch_array($result); return $stats; } function updateVisitorStatistics($owner){ global $database,$blogURL; if(!fireEvent('UpdatingVisitorStatistics',true)) return ; if(doesHaveOwnership()) return ; $id=session_id(); $result=mysql_query("select blog from {$database['prefix']}SessionVisits where id = '$id' and address = '{$_SERVER['REMOTE_ADDR']}' and blog = $owner"); if($result&&(mysql_num_rows($result)>0)) return ; if(mysql_query("insert into {$database['prefix']}SessionVisits values('$id', '{$_SERVER['REMOTE_ADDR']}', $owner)")&&(mysql_affected_rows()>0)){ mysql_query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner"); if(mysql_affected_rows()==0){ if(mysql_query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner")||(mysql_affected_rows()==0)) mysql_query("insert into {$database['prefix']}BlogStatistics values($owner, 1)"); } $period=Timestamp::getDate(); mysql_query("update {$database['prefix']}DailyStatistics set visits = visits + 1 where owner = $owner and `date` = $period"); if(mysql_affected_rows()==0){ if(!mysql_query("insert into {$database['prefix']}DailyStatistics values($owner, $period, 1)")||(mysql_affected_rows()==0)) mysql_query("update {$database['prefix']}DailyStatistics set visits = visits + 1 where owner = $owner and `date` = $period"); } if(!empty($_SERVER['HTTP_REFERER'])){ $referer=parse_url($_SERVER['HTTP_REFERER']); if(!empty($referer['host'])&&(($referer['host']!=$_SERVER['HTTP_HOST'])||(strncmp($referer['path'],$blogURL,strlen($blogURL))!=0))){ requireComponent('Tattertools.Data.Filter'); if(Filter::isFiltered('ip',$_SERVER['REMOTE_ADDR'])||Filter::isFiltered('url',$_SERVER['HTTP_REFERER'])) return ; if(!fireEvent('AddingRefererLog',true,array('host'=>$referer['host'],'url'=>$_SERVER['HTTP_REFERER']))) return ; $host=mysql_tt_escape_string(mysql_lessen($referer['host'],64)); $url=mysql_tt_escape_string(mysql_lessen($_SERVER['HTTP_REFERER'],255)); mysql_query("insert into {$database['prefix']}RefererLogs values($owner, '$host', '$url', UNIX_TIMESTAMP())"); mysql_query("delete from {$database['prefix']}RefererLogs where referred < UNIX_TIMESTAMP() - 604800"); if(!mysql_query("update {$database['prefix']}RefererStatistics set count = count + 1 where owner = $owner and host = '$host'")||(mysql_affected_rows()==0)) mysql_query("insert into {$database['prefix']}RefererStatistics values($owner, '$host', 1)"); } } } } function getRecentTrackbacks($owner){ global $database; global $skinSetting; $trackbacks=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Trackbacks WHERE owner = $owner AND isFiltered = 0 ORDER BY written DESC LIMIT {$skinSetting['trackbacksOnRecent']}":"SELECT t.* FROM {$database['prefix']}Trackbacks t, {$database['prefix']}Entries e WHERE t.owner = $owner AND t.owner = e.owner AND t.entry = e.id AND e.draft = 0 AND e.visibility >= 2 AND isFiltered = 0 ORDER BY t.written DESC LIMIT {$skinSetting['trackbacksOnRecent']}"; if($result=mysql_query($sql)){ while($trackback=mysql_fetch_array($result)) array_push($trackbacks,$trackback); } return $trackbacks; } function getRandomTags($owner){ global $database,$skinSetting; $tags=array(); $aux=($skinSetting['tagsOnTagbox']==-1)?'':"limit {$skinSetting['tagsOnTagbox']}"; if($skinSetting['tagboxAlign']==1){ if(doesHaveOwnership()) $result=mysql_query("SELECT `name`, count(*) `cnt` FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r WHERE t.id = r.tag and r.owner = $owner GROUP BY r.tag ORDER BY cnt DESC $aux"); else $result=mysql_query("SELECT `name`, count(*) `cnt` FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = $owner GROUP BY r.tag ORDER BY `cnt` DESC $aux"); }elseif($skinSetting['tagboxAlign']==2){ if(doesHaveOwnership()) $result=mysql_query("SELECT DISTINCT name FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r WHERE t.id = r.tag AND r.owner = $owner GROUP BY r.tag ORDER BY t.name $aux"); else $result=mysql_query("SELECT DISTINCT name FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = $owner GROUP BY r.tag ORDER BY t.name $aux"); }else{ if(doesHaveOwnership()) $result=mysql_query("SELECT `name` FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r WHERE t.id = r.tag AND r.owner = $owner GROUP BY r.tag ORDER BY RAND() $aux"); else $result=mysql_query("SELECT `name` FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = $owner GROUP BY r.tag ORDER BY RAND() $aux"); } if($result){ while(list($tag)=mysql_fetch_row($result)) array_push($tags,$tag); } return $tags; } function getTagFrequencyRange(){ global $database,$owner; $max=$min=0; if(doesHaveOwnership()) $result=mysql_query("SELECT count(r.entry) `cnt` FROM `{$database['prefix']}TagRelations` r WHERE r.owner = $owner GROUP BY r.tag ORDER BY `cnt` DESC LIMIT 1"); else $result=mysql_query("SELECT count(r.entry) `cnt` FROM `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND r.owner = $owner GROUP BY r.tag ORDER BY `cnt` DESC LIMIT 1"); if($result){ if(list($count)=mysql_fetch_array($result)) $max=$count; } if(doesHaveOwnership()) $result=mysql_query("SELECT count(r.entry) `cnt` FROM `{$database['prefix']}TagRelations` r WHERE r.owner = $owner GROUP BY r.tag ORDER BY `cnt` LIMIT 1"); else $result=mysql_query("SELECT count(r.entry) `cnt` FROM `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND r.owner = $owner GROUP BY r.tag ORDER BY `cnt` LIMIT 1"); if($result){ if(list($count)=mysql_fetch_array($result)) $min=$count; } return array($max,$min); } function getTagFrequency($tag,$max,$min){ global $database,$owner; if(doesHaveOwnership()) $count=fetchQueryCell("SELECT count(*) FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r WHERE t.id = r.tag AND r.owner = $owner AND t.name = '".mysql_tt_escape_string($tag)."'"); else $count=fetchQueryCell("SELECT count(*) FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r, `{$database['prefix']}Entries` e WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.owner = $owner AND t.name = '".mysql_tt_escape_string($tag)."'"); $dist=$max/3; if($count==$min) return 5; elseif($count==$max) return 1; elseif($count>=$min+($dist*2)) return 2; elseif($count>=$min+$dist) return 3; else return 4; } $url=isset($_SERVER['REDIRECT_URL'])?$_SERVER['REDIRECT_URL']:$_SERVER['SCRIPT_NAME']; $suri=array('url'=>$url,'value'=>''); $owner=null; $depth=substr_count($service['path'],'/'); if($depth>0){ if(ereg("^((/+[^/]+){{$depth}})(.*)$",$url,$matches)) $url=$matches[3]; else respondNotFoundPage(); } if($service['type']=='single'){ $owner=1; }else{ if($service['type']=='domain'){ if($_SERVER['HTTP_HOST']==$service['domain']){ $owner=1; }else{ $domain=explode('.',$_SERVER['HTTP_HOST'],2); if($domain[1]==$service['domain']){ $owner=getOwner($domain[0]); if($owner===null) $owner=getOwnerBySecondaryDomain($_SERVER['HTTP_HOST']); }else{ $owner=getOwnerBySecondaryDomain($_SERVER['HTTP_HOST']); } } }else{ if($url=='/'){ $owner=1; }elseif(ereg('^/+([^/]+)(.*)$',$url,$matches)){ $owner=getOwner($matches[1]); if($owner===null) $owner=1; $url=$matches[2]; }else{ respondNotFoundPage(); } } if($owner===null) respondNotFoundPage(); } $blog=getBlogSetting($owner); $skinSetting=getSkinSetting($owner); $depth=substr_count(ROOT,'/'); if($depth>0){ if(ereg("^((/+[^/]+){{$depth}})/*(.*)$",$url,$matches)){ $suri['directive']=$matches[1]; if($matches[3]!==false) $suri['value']=$matches[3]; }else respondNotFoundPage(); }else{ $suri['directive']='/'; $suri['value']=ltrim($url,'/'); } if(is_numeric($suri['value'])) $suri['id']=$suri['value']; $suri['page']=empty($_POST['page'])?(empty($_GET['page'])?true:$_GET['page']):$_POST['page']; if(!isset($serviceURL)) $serviceURL='http://'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$service['path']; switch($service['type']){ case 'domain': $pathURL=$service['path']; if($blog['defaultDomain']&&$blog['secondaryDomain']){ $defaultURL='http://'.$blog['secondaryDomain'].(isset($service['port'])?':'.$service['port']:'').$pathURL; if($_SERVER['HTTP_HOST']==$blog['secondaryDomain']) $baseURL=$service['path']; else $baseURL=$defaultURL; }else{ $defaultURL='http://'.$blog['name'].'.'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$pathURL; if($_SERVER['HTTP_HOST']==($blog['name'].'.'.$service['domain'])) $baseURL=$service['path']; else $baseURL=$defaultURL; } break; case 'path': $pathURL=$service['path'].'/'.$blog['name']; $defaultURL='http://'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$pathURL; if($_SERVER['HTTP_HOST']==$service['domain']) $baseURL=$service['path'].'/'.$blog['name']; else $baseURL=$defaultURL; break; case 'single': default: $pathURL=$service['path']; $defaultURL='http://'.$service['domain'].(isset($service['port'])?':'.$service['port']:'').$pathURL; if($_SERVER['HTTP_HOST']==$service['domain']) $baseURL=$service['path']; else $baseURL=$defaultURL; break; } $hostURL='http://'.$_SERVER['HTTP_HOST'].(isset($service['port'])?':'.$service['port']:''); $blogURL=$pathURL; $folderURL=rtrim($blogURL.$suri['directive'],'/'); unset($url,$domain); $adminSkinSetting=array(); $adminSkinSetting['skin']="/style/admin/".getUserSetting("adminSkin","default"); if(file_exists("../../skin/{$skinSetting['skin']}/wysiwyg.css")) $adminSkinSetting['editorTemplate']="/skin/{$skinSetting['skin']}/wysiwyg.css"; else $adminSkinSetting['editorTemplate']="/style/default-wysiwyg.css"; if(file_exists("../../attach/$owner/watermark.gif")){ $waterMarkPath="../../attach/$owner/watermark.gif"; }else{ $waterMarkPath=NULL; } $waterMarkArray=array(); $waterMarkArray['path']=$waterMarkPath; $waterMarkArray['position']=getWaterMarkPosition(); $waterMarkArray['gamma']=getWaterMarkGamma(); $paddingArray=array(); $padding=getThumbnailPadding(); $paddingArray['top']=$padding['top']; $paddingArray['right']=$padding['right']; $paddingArray['bottom']=$padding['bottom']; $paddingArray['left']=$padding['left']; $paddingArray['bgColor']=getThumbnailPaddingColor(); unset($padding); unset($waterMarkPath); if(!file_exists('../../config.php')){ header('Location: '.'../../setup.php'); exit; } function respondNotFoundPage(){ header('HTTP/1.1 404 Not Found'); header("Connection: close"); exit; } function getMicrotimeAsFloat(){ list($usec,$sec)=explode(" ",microtime()); return ($usec+$sec); } $sessionMicrotime=getMicrotimeAsFloat(); function openSession($savePath,$sessionName){ return true; } function closeSession(){ return true; } function readSession($id){ global $database,$service; if($result=sessionQuery("SELECT data FROM {$database['prefix']}Sessions WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}' AND updated >= (UNIX_TIMESTAMP() - {$service['timeout']})")){ if($session=mysql_fetch_array($result)) return $session['data']; } return ''; } function writeSession($id,$data){ global $database; global $sessionMicrotime; if(strlen($id)<32) return false; $userid=isset($_SESSION['userid'])?$_SESSION['userid']:'null'; $data=mysql_tt_escape_string($data); $server=mysql_tt_escape_string($_SERVER['HTTP_HOST']); $request=mysql_tt_escape_string($_SERVER['REQUEST_URI']); $referer=isset($_SERVER['HTTP_REFERER'])?mysql_tt_escape_string($_SERVER['HTTP_REFERER']):''; $timer=getMicrotimeAsFloat()-$sessionMicrotime; $result=mysql_query("UPDATE {$database['prefix']}Sessions SET userid = $userid, data = '$data', server = '$server', request = '$request', referer = '$referer', timer = $timer, updated = UNIX_TIMESTAMP() WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); if($result&&(mysql_affected_rows()==1)) return true; return false; } function destroySession($id,$setCookie=false){ global $database; if(!isset($_SESSION['userid'])) return ; @mysql_query("DELETE FROM {$database['prefix']}Sessions WHERE id = '$id' AND address = '{$_SERVER['REMOTE_ADDR']}'"); gcSession(); } function gcSession($maxLifeTime=false){ global $database,$service; @mysql_query("DELETE FROM {$database['prefix']}Sessions WHERE updated < (UNIX_TIMESTAMP() - {$service['timeout']})"); $result=@sessionQuery("SELECT DISTINCT v.id, v.address FROM {$database['prefix']}SessionVisits v LEFT JOIN {$database['prefix']}Sessions s ON v.id = s.id AND v.address = s.address WHERE s.id IS NULL AND s.address IS NULL"); if($result){ $gc=array(); while($g=mysql_fetch_row($result)) array_push($gc,$g); foreach($gc as $g) @mysql_query("DELETE FROM {$database['prefix']}SessionVisits WHERE id = '{$g[0]}' AND address = '{$g[1]}'"); } return true; } function getAnonymousSession(){ global $database; $result=sessionQuery("SELECT id FROM {$database['prefix']}Sessions WHERE address = '{$_SERVER['REMOTE_ADDR']}' AND userid IS NULL AND preexistence IS NULL"); if($result&&(list($id)=mysql_fetch_array($result))) return $id; return false; } function newAnonymousSession(){ global $database; for($i=0;$i<100;$i++){ if(($id=getAnonymousSession())!==false) return $id; $id=dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)).dechex(rand(0x10000000,0x7FFFFFFF)); mysql_query("INSERT INTO {$database['prefix']}Sessions(id, address, created, updated) VALUES('$id', '{$_SERVER['REMOTE_ADDR']}', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"); if(mysql_affected_rows()>0) return $id; } return false; } function setSessionAnonymous($currentId){ $id=getAnonymousSession(); if($id!==false){ if($id!=$currentId) session_id($id); return true; } $id=newAnonymousSession(); if($id!==false){ session_id($id); return true; } return false; } function isSessionAuthorized($id){ global $database; $result=mysql_query("select id from {$database['prefix']}Sessions where id = '$id' and address = '{$_SERVER['REMOTE_ADDR']}' and (userid is not null or preexistence is not null)"); if($result&&(mysql_num_rows($result)==1)) return true; return false; } function setSession(){ $id=empty($_COOKIE[session_name()])?'':$_COOKIE[session_name()]; if((strlen($id)<32)||!isSessionAuthorized($id)) setSessionAnonymous($id); } function sessionQuery($sql){ global $database,$sessionDBRepair; $result=mysql_query($sql); if($result===false){ if(!isset($sessionDBRepair)){ mysql_query("REPAIR TABLE {$database['prefix']}Sessions"); $result=mysql_query($sql); $sessionDBRepair=true; } } return $result; } session_name('TSSESSION'); setSession(); session_set_save_handler('openSession','closeSession','readSession','writeSession','destroySession','gcSession'); session_cache_expire(1); session_set_cookie_params(0,'/',$service['domain']); if(session_start()!==true){ header('HTTP/1.1 503 Service Unavailable'); } function doesHaveMembership(){ return empty($_SESSION['userid'])?false:true; } function getUserId(){ return empty($_SESSION['userid'])?false:$_SESSION['userid']; } function doesHaveOwnership(){ global $owner; if(empty($_SESSION['userid'])||($_SESSION['userid']!=$owner)) return false; return true; } if(doesHaveMembership()){ $user=array('id'=>getUserId()); $user['name']=DBQuery::queryCell("SELECT name FROM {$database['prefix']}Users WHERE userid = {$user['id']}"); $user['homepage']=getDefaultURL($user['id']); }else{ $user=null; } Timezone::set(isset($blog['timezone'])?$blog['timezone']:$service['timezone']); mysql_query('SET time_zone = \''.Timezone::getCanonical().'\''); Locale::setDirectory('../../language'); Locale::set(isset($blog['language'])?$blog['language']:$service['language']); if(!isset($blog['blogLanguage'])){ $blog['blogLanguage']=$service['language']; } if(is_file($__locale['directory'].'/'.$blog['blogLanguage'].".php")){ $__outText=getOutLanguage($__locale['directory'].'/'.$blog['blogLanguage'].".php"); } function getOutLanguage($languageFile){ include ($languageFile); return $__text; } function _text($t){ global $__outText; if(isset($__outText)&&isset($__outText[$t])){ return $__outText[$t]; }else{ return $t; } } $activePlugins=array(); $eventMappings=array(); $tagMappings=array(); $sidebarMappings=array(); $centerMappings=array(); $storageMappings=array(); $storageKeymappings=array(); $adminMenuMappings=array(); $adminHandlerMappings=array(); $configMappings=array(); $baseConfigPost=$service['path'].'/owner/setting/plugins/currentSetting'; $configPost=''; $configVal=''; $typeSchema=null; if(!empty($owner)){ $activePlugins=fetchQueryColumn("SELECT name FROM {$database['prefix']}Plugins WHERE owner = $owner"); $xmls=new XMLStruct(); foreach($activePlugins as $plugin){ $manifest=@file_get_contents("../../plugins/$plugin/index.xml"); if($manifest&&$xmls->open($manifest)){ $version=''; if($xmls->doesExist('/plugin/version')){ $version=$xmls->getValue('/plugin/version'); } if($xmls->doesExist('/plugin/storage')){ foreach($xmls->selectNodes('/plugin/storage/table') as $table){ $storageMappings=array(); $storageKeymappings=array(); if(empty($table['name'][0]['.value'])) continue; $tableName=htmlspecialchars($table['name'][0]['.value']); if(!empty($table['fields'][0]['field'])){ foreach($table['fields'][0]['field'] as $field){ if(!isset($field['name'])) continue; $fieldName=$field['name'][0]['.value']; if(!isset($field['attribute'])) continue; $fieldAttribute=$field['attribute'][0]['.value']; $fieldLength=isset($field['length'])?$field['length'][0]['.value']:-1; $fieldIsNull=isset($field['isnull'])?$field['isnull'][0]['.value']:1; $fieldDefault=isset($field['default'])?$field['default'][0]['.value']:null; array_push($storageMappings,array('name'=>$fieldName,'attribute'=>$fieldAttribute,'length'=>$fieldLength,'isnull'=>$fieldIsNull,'default'=>$fieldDefault)); } } if(!empty($table['key'][0]['.value'])){ foreach($table['key'] as $key){ array_push($storageKeymappings,$key['.value']); } } treatPluginTable($plugin,$tableName,$storageMappings,$storageKeymappings,$version); unset($tableName); unset($storageMappings); unset($storageKeymappings); } } if($xmls->doesExist('/plugin/binding/listener')){ foreach($xmls->selectNodes('/plugin/binding/listener') as $listener){ if(!empty($listener['.attributes']['event'])&&!empty($listener['.value'])){ if(!isset($eventMappings[$listener['.attributes']['event']])) $eventMappings[$listener['.attributes']['event']]=array(); array_push($eventMappings[$listener['.attributes']['event']],array('plugin'=>$plugin,'listener'=>$listener['.value'])); } } unset($listener); } if($xmls->doesExist('/plugin/binding/tag')){ foreach($xmls->selectNodes('/plugin/binding/tag') as $tag){ if(!empty($tag['.attributes']['name'])&&!empty($tag['.attributes']['handler'])){ if(!isset($tagMappings[$tag['.attributes']['name']])) $tagMappings[$tag['.attributes']['name']]=array(); array_push($tagMappings[$tag['.attributes']['name']],array('plugin'=>$plugin,'handler'=>$tag['.attributes']['handler'])); } } unset($tag); } if($xmls->doesExist('/plugin/binding/center')){ $title=htmlspecialchars($xmls->getValue('/plugin/title[lang()]')); foreach($xmls->selectNodes('/plugin/binding/center') as $center){ if(!empty($center['.attributes']['handler'])){ array_push($centerMappings,array('plugin'=>$plugin,'handler'=>$center['.attributes']['handler'],'title'=>$title)); } } unset($title); unset($center); } if($xmls->doesExist('/plugin/binding/sidebar')){ $title=htmlspecialchars($xmls->getValue('/plugin/title[lang()]')); foreach($xmls->selectNodes('/plugin/binding/sidebar') as $sidebar){ if(!empty($sidebar['.attributes']['handler'])){ $parameters=array(); if(isset($sidebar['params'])&&isset($sidebar['params'][0])&&isset($sidebar['params'][0]['param'])){ foreach($sidebar['params'][0]['param'] as $param){ $parameter=array('name'=>$param['name'][0]['.value'],'type'=>$param['type'][0]['.value'],'title'=>XMLStruct::getValueByLocale($param['title'])); array_push($parameters,$parameter); } } array_push($sidebarMappings,array('plugin'=>$plugin,'title'=>$sidebar['.attributes']['title'],'display'=>$title,'handler'=>$sidebar['.attributes']['handler'],'parameters'=>$parameters)); } } unset($sidebar); } if($xmls->doesExist('/plugin/binding/config')){ $config=$xmls->selectNode('/plugin/binding/config'); if(!empty($config['.attributes']['dataValHandler'])) $configMappings[$plugin]=array('config'=>'ok','dataValHandler'=>$config['.attributes']['dataValHandler']); else $configMappings[$plugin]=array('config'=>'ok'); } if($xmls->doesExist('/plugin/binding/adminMenu')){ $title=htmlspecialchars($xmls->getValue('/plugin/title[lang()]')); if($xmls->doesExist('/plugin/binding/adminMenu/viewMethods')){ foreach($xmls->selectNodes('/plugin/binding/adminMenu/viewMethods/method') as $adminViewMenu){ $menutitle=htmlspecialchars(XMLStruct::getValueByLocale($adminViewMenu['title'])); if(empty($menutitle)) continue; $menuposition=empty($adminViewMenu['position'][0]['.value'])?'menu-plugin':$adminViewMenu['position'][0]['.value']; $menuhelpurl=empty($adminViewMenu['helpurl'][0]['.value'])?'':$adminViewMenu['helpurl'][0]['.value']; if(!isset($adminViewMenu['handler'][0]['.value'])) continue; $viewhandler=htmlspecialchars($adminViewMenu['handler'][0]['.value']); if(empty($viewhandler)) continue; $params=array(); if(isset($adminViewMenu['params'][0]['param'])){ foreach($adminViewMenu['params'][0]['param'] as $methodParam){ if(!isset($methodParam['name'][0]['.value'])||!isset($methodParam['type'][0]['.value'])) continue; array_push($params,array('name'=>$methodParam['name'][0]['.value'],'type'=>$methodParam['type'][0]['.value'],'mandatory'=>@$methodParam['mandatory'][0]['.value'],'default'=>@$methodParam['default'][0]['.value'])); } } $adminMenuMappings[$plugin.'/'.$viewhandler]=array('plugin'=>$plugin,'title'=>$menutitle,'position'=>$menuposition,'handler'=>$viewhandler,'params'=>$params,'helpurl'=>$menuhelpurl); } } unset($menutitle); unset($viewhandler); unset($adminViewMenu); unset($params); if($xmls->doesExist('/plugin/binding/adminMenu/methods')){ foreach($xmls->selectNodes('/plugin/binding/adminMenu/methods/method') as $adminMethods){ $method=array(); $method['plugin']=$plugin; if(!isset($adminMethods['handler'][0]['.value'])) continue; $method['handler']=$adminMethods['handler'][0]['.value']; $method['params']=array(); if(isset($adminMethods['params'][0]['param'])){ foreach($adminMethods['params'][0]['param'] as $methodParam){ if(!isset($methodParam['name'][0]['.value'])||!isset($methodParam['type'][0]['.value'])) continue; array_push($method['params'],array('name'=>$methodParam['name'][0]['.value'],'type'=>$methodParam['type'][0]['.value'],'mandatory'=>@$methodParam['mandatory'][0]['.value'],'default'=>@$methodParam['default'][0]['.value'])); } } $adminHandlerMappings[$plugin.'/'.$method['handler']]=$method; } } unset($method); unset($methodParam); unset($adminMethods); } }else{ $plugin=mysql_tt_escape_string($plugin); mysql_query("DELETE FROM {$database['prefix']}Plugins WHERE owner = $owner AND name = '$plugin'"); } } unset($xmls); unset($plugin); } function fireEvent($event,$target=null,$mother=null,$condition=true){ global $service,$eventMappings,$pluginURL,$pluginPath,$configMappings,$configVal; if(!$condition) return $target; if(!isset($eventMappings[$event])) return $target; foreach($eventMappings[$event] as $mapping){ include_once ("../../plugins/{$mapping['plugin']}/index.php"); if(function_exists($mapping['listener'])){ if(!empty($configMappings[$mapping['plugin']]['config'])) $configVal=getCurrentSetting($mapping['plugin']); else $configVal=null; $pluginURL="{$service['path']}/plugins/{$mapping['plugin']}"; $pluginPath="../../plugins/{$mapping['plugin']}"; $target=call_user_func($mapping['listener'],$target,$mother); } } return $target; } function handleTags(&$content){ global $service,$tagMappings,$pluginURL,$pluginPath,$configMappings,$configVal; if(preg_match_all('/\[##_(\w+)_##\]/',$content,$matches)){ foreach($matches[1] as $tag){ if(!isset($tagMappings[$tag])) continue; $target=''; foreach($tagMappings[$tag] as $mapping){ include_once ("../../plugins/{$mapping['plugin']}/index.php"); if(function_exists($mapping['handler'])){ if(!empty($configMappings[$mapping['plugin']]['config'])) $configVal=getCurrentSetting($mapping['plugin']); else $configVal=''; $pluginURL="{$service['path']}/plugins/{$mapping['plugin']}"; $pluginPath="../../plugins/{$mapping['plugin']}"; $target=call_user_func($mapping['handler'],$target); } } dress($tag,$target,$content); } } } function handleSidebars(&$sval,&$obj,$previewMode){ global $service,$pluginURL,$pluginPath,$configVal,$configMappings; $newSidebarAllOrders=array(); $sidebarCount=count($obj->sidebarBasicModules); $sidebarAllOrders=getSidebarModuleOrderData($sidebarCount); if($previewMode==true) $sidebarAllOrders=null; for($i=0;$i<$sidebarCount;$i++){ $str=""; if((!is_null($sidebarAllOrders))&&((array_key_exists($i,$sidebarAllOrders)))){ $currentSidebarOrder=$sidebarAllOrders[$i]; for($j=0;$jsidebarBasicModules[$skini])&&isset($obj->sidebarBasicModules[$skini][$skinj])){ $str.=$obj->sidebarBasicModules[$skini][$skinj]['body']; } }elseif($currentSidebarOrder[$j]['type']==2){ }elseif($currentSidebarOrder[$j]['type']==3){ $plugin=$currentSidebarOrder[$j]['id']['plugin']; $handler=$currentSidebarOrder[$j]['id']['handler']; include_once ("../../plugins/{$plugin}/index.php"); if(function_exists($handler)){ $str.="[##_temp_sidebar_element_{$i}_{$j}_##]"; $parameters=$currentSidebarOrder[$j]['parameters']; $pluginURL="{$service['path']}/plugins/{$plugin}"; $pluginPath="../../plugins/{$plugin}"; if(!empty($configMappings[$plugin]['config'])) $configVal=getCurrentSetting($plugin); else $configVal=''; if(function_exists($handler)){ $obj->sidebarStorage["temp_sidebar_element_{$i}_{$j}"]=call_user_func($handler,$parameters); }else{ $obj->sidebarStorage["temp_sidebar_element_{$i}_{$j}"]=""; } } }else{ } } }else{ $newSidebarAllOrders[$i]=array(); for($j=0;$jsidebarBasicModules[$i]);$j++){ $str.=$obj->sidebarBasicModules[$i][$j]['body']; array_push($newSidebarAllOrders[$i],array('type'=>'1','id'=>"$i",'parameters'=>"$j")); } } dress("sidebar_{$i}",$str,$sval); } if(count($newSidebarAllOrders)>0){ if($previewMode==false) setUserSetting("sidebarOrder",serialize($newSidebarAllOrders)); } } function fetchConfigVal($DATA){ $xmls=new XMLStruct(); $outVal=array(); if(!$xmls->open($DATA)){ unset($xmls); return ; } if(is_null($xmls->selectNodes('/config/field'))){ unset($xmls); return ; } foreach($xmls->selectNodes('/config/field') as $field){ if(empty($field['.attributes']['name'])||empty($field['.attributes']['type'])){ unset($xmls); return ; } $outVal[$field['.attributes']['name']]=$field['.value']; } unset($xmls); return ($outVal); } function respondErrorPage($message=NULL,$buttonValue=NULL,$buttonLink=NULL){ global $service;?> <?php echo TATTERTOOLS_NAME;?>

Download Mp3/Mp3 MusicTop Chartsdownload R.E.M. music lyricdownload Leona Lewis music lyricdownload Portishead music lyricdownload Iron Maiden music lyricdownload Led Zeppelin music lyricdownload Beth Rowley music lyricdownload Mariah Carey music lyricdownload Bruce Springsteen music lyricdownload AC/DC music lyricdownload Linkin Park music lyricdownload OneRepublic music lyricdownload Bob Dylan music lyricdownload Metallica music lyricdownload The Who music lyricdownload Rihanna music lyricdownload Al Green music lyricdownload The Kooks music lyricdownload U2 music lyricdownload David Bowie music lyricdownload Prince music lyricdownload Alanis Morissette music lyricdownload Putumayo music lyricdownload Elvis Presley music lyricdownload Willie Nelson music lyricdownload Jon Bon Jovi music lyricgay writers groups gay writers groups learn inguinal canal sex change inguinal canal sex change rose cumming diesel engines cumming diesel engines repeat male nude in shower male nude in shower pattern daughter spanking story daughter spanking story food harden s teen website florida harden s teen website florida market great sex fairuza balk great sex fairuza balk subject avatar gravity of love avatar gravity of love sugar titty nipple pumping titty nipple pumping band diane henry nude diane henry nude include gay ringen gay ringen show megan fox tits megan fox tits jump mens jucey butts mens jucey butts size gangbang black teens gangbang black teens this flashing tits for money flashing tits for money solution shabby blue erotic aet shabby blue erotic aet do cherries big boobs archive cherries big boobs archive pay cock in a pussy cock in a pussy heart luggage strips auto luggage strips auto part amateur milf anal cucumber amateur milf anal cucumber mark jamaician girls having sex jamaician girls having sex state gay hidden video gay hidden video flow oklahoma amateur radio repeaters oklahoma amateur radio repeaters where mature sexy bbw models mature sexy bbw models gas forced party sex forced party sex many escorts tonbridge kent escorts tonbridge kent planet uncut foreskin fetish uncut foreskin fetish bring cocoabeach gay own hotels cocoabeach gay own hotels to maledirectory xxx gay galleries maledirectory xxx gay galleries share koyote passion koyote passion character chicks stock chicks stock hope amateur latina hotties amateur latina hotties air nude shows nyc nude shows nyc push boobs rosemarie dewitt boobs rosemarie dewitt suggest amatuer free spanking pictures amatuer free spanking pictures crowd hilary duff nude paparazzi hilary duff nude paparazzi add love sex ecard love sex ecard port homemade ffm vidoes homemade ffm vidoes I romney mormon underwear romney mormon underwear require fish escorts fish escorts sat jeniffer aniston blowjobs jeniffer aniston blowjobs sail nylon fabbrica nylon fabbrica paint verses for relationships verses for relationships yellow email daily pictures xxx email daily pictures xxx right mistress slut training mistress slut training small extreme lesbian insertions extreme lesbian insertions job eptopic breast tissue eptopic breast tissue end excess sweat during sex excess sweat during sex use blonde removing bra blonde removing bra symbol love thermostat love thermostat wear courtney doll teen trends courtney doll teen trends student gang bang city gang bang city observe neighbors horney wife neighbors horney wife want utah singles utah singles noon the devil loves prada the devil loves prada idea naked shilpa naked shilpa simple clip hunter swollen vaginas clip hunter swollen vaginas corner cyber sex rooms cyber sex rooms ever hot straight guys naked hot straight guys naked room actress nude vidos actress nude vidos area sex stories cheerleaders sex stories cheerleaders carry fucking tranny trailers fucking tranny trailers line gay animalsex farmsex pictures gay animalsex farmsex pictures flower xxx animated mobile themes xxx animated mobile themes experiment lisa simpson nude jpg lisa simpson nude jpg salt cyber sex screen names cyber sex screen names solution american beauty cosmetics reviews american beauty cosmetics reviews state posterior tibialis tendon dysfunction posterior tibialis tendon dysfunction skin women crawling naked women crawling naked for love shack kareoke love shack kareoke clear amateur ladies wrestling amateur ladies wrestling block albino porn thora albino porn thora indicate bunny love song bunny love song feet pat dating pat dating town schoolgirl pin mixed videos schoolgirl pin mixed videos grew nude chris brown nude chris brown fly superfreak porn superfreak porn still non nude directories non nude directories molecule megan pussy megan pussy out latin sex dating sites latin sex dating sites settle sex sandwich slut sex sandwich slut moment lipstick lesbian bars miami lipstick lesbian bars miami man bbs post nude bbs post nude remember fisting video free fisting video free yard sex vido search engine sex vido search engine molecule serena sailor masturbate serena sailor masturbate boat what sperm banks what sperm banks cook adult stories teen runaways adult stories teen runaways rub sluts of east county sluts of east county clear chubby hot porn chubby hot porn imagine teens bbs archives teens bbs archives true . arthur rogers love lisa arthur rogers love lisa motion showering teen showering teen chord female nude movie stars female nude movie stars island deep throut sex deep throut sex black kinky gay male sex kinky gay male sex save kitana baker sex clips kitana baker sex clips why sex virtual pets sex virtual pets surface naked girls playing volleyball naked girls playing volleyball time two liter fetish two liter fetish grew girls fucking girls mpegs girls fucking girls mpegs still myspace videos nude myspace videos nude column pvc porch swing seat pvc porch swing seat river anular stress breast anular stress breast fly indian slut teens indian slut teens deep videos bondage sex extreme videos bondage sex extreme this nj transexual escorts nj transexual escorts way huge boobs galore huge boobs galore period sweet black sex sweet black sex wrote babes fishing nude babes fishing nude children naked mujra naked mujra high nickalodean porn nickalodean porn west darla morris webcam darla morris webcam told teen brothers dicks photo teen brothers dicks photo develop pussy licking trailers pussy licking trailers fast nude lesbien nude lesbien now monster boobs and cocks monster boobs and cocks world home video amateur group home video amateur group laugh genetic counseling pdf genetic counseling pdf trip busty car wash busty car wash full terri poch nude terri poch nude loud milfs desires milfs desires path adorable nude girl adorable nude girl share plumpers chubby plumpers chubby often amatuer wife porn videos amatuer wife porn videos chief young tight teen young tight teen mine party teens 18 ideas party teens 18 ideas mount headhunting sucked headhunting sucked period i love you hamster i love you hamster nature bbs blackcat nude bbs blackcat nude if heels legs thong heels legs thong told enema female fetish enema female fetish held pantyhose men stories pantyhose men stories try thick red beauty ohio thick red beauty ohio matter amateur teen camel toe amateur teen camel toe cost big tittie amateurs big tittie amateurs include diablo cody naked pics diablo cody naked pics self strapon post strapon post mine lesbian kids lesbian kids west porn tit core soft porn tit core soft cover latino love birs latino love birs few acorn acres nudist resort acorn acres nudist resort three hawaii women nude hawaii women nude door hard porn pic hard porn pic children hairy gay guys hairy gay guys solution evelyn teen evelyn teen twenty pantyhode orgasm pantyhode orgasm island monique alexander nude videos monique alexander nude videos form cream pie pussy cream pie pussy wild hentai movie preveiws hentai movie preveiws control sex dildos photos sex dildos photos two kelly cass nipples kelly cass nipples hunt beach sex voyuer beach sex voyuer metal miley cyrus boobs osborn miley cyrus boobs osborn quick positive affirmations romance positive affirmations romance baby women with 3 d breast women with 3 d breast fact butterfly love song butterfly love song number turquoise and black thong turquoise and black thong wear gaping peehole gaping peehole range signs of turning lesbian signs of turning lesbian create suck own chat woman suck own chat woman gave lesbian fendom lesbian fendom natural josiemodel naked josiemodel naked present hand in mom pussy hand in mom pussy silent tram param porn galleries tram param porn galleries said juggs movies juggs movies though sex after wedding sex after wedding blood slut hardcore slut hardcore sharp transsexuals twilight transsexuals twilight plant video of double penetration video of double penetration new preity naked preity naked stretch heather mill nude model heather mill nude model afraid victoria brown porn star victoria brown porn star sing teen punk girls teen punk girls still dyke personals dyke personals strong nude drawing poses nude drawing poses swim big dick sex galleries big dick sex galleries receive jaguars strip club website jaguars strip club website bright elizabethan love speech elizabethan love speech ring anal retentive chef clip anal retentive chef clip guess lesbian child tourism lesbian child tourism drive kiss like tasting strawberry kiss like tasting strawberry fresh sperm enhancement sperm enhancement boat gay boy porno gay boy porno race banned ilegal schoolboy porn banned ilegal schoolboy porn egg frontline porn frontline porn own texas twins lesbians texas twins lesbians reply definition of counseling therapy definition of counseling therapy feel family guy cartoons naked family guy cartoons naked took eva longeria porn videos eva longeria porn videos similar before anal sex before anal sex column virgin mobile cdma phone virgin mobile cdma phone than kylie wiseman porn kylie wiseman porn shine lesbian bar lesbian bar boat masturbate pillow masturbate pillow lift licking auditors licking auditors grow newly teen newly teen hold short skirt nude pics short skirt nude pics chief amatuer couples sex clips amatuer couples sex clips little love is the glue love is the glue rise ball licking gay ball licking gay often kim possible seks kim possible seks neck intimate females intimate females science hot ass blonde sexy hot ass blonde sexy once gay twinks free trailers gay twinks free trailers life next door nikkis boobs next door nikkis boobs matter group counseling theory group counseling theory put nude women stripping online nude women stripping online leave squirting wemon squirting wemon pitch wmv gay free password wmv gay free password eight anime tranny video anime tranny video flower plastic bending strip plastic bending strip chief sex reversal in mollies sex reversal in mollies weather jewish pre marital sex jewish pre marital sex meant amateur porn couples amateur porn couples paragraph extreme ecstasy and sex extreme ecstasy and sex scale hardcore housewife videos hardcore housewife videos run erotic massages sydney massage erotic massages sydney massage seat breast milk teenagers breast milk teenagers child escort services ogden utah escort services ogden utah money heterosexual tantric masturbation heterosexual tantric masturbation fruit adult country pa sex adult country pa sex lost teens for cash xxx teens for cash xxx fill east bay exotics east bay exotics than amature cumshot movies amature cumshot movies wrote white milfs black men white milfs black men search 100percent free hentai site 100percent free hentai site join teen video uncensored teen video uncensored game tattoo titties jessi tattoo titties jessi instrument girls butt fucked girls butt fucked fish high school sex porn high school sex porn question hot porn babes hot porn babes nor beautiful naked australian women beautiful naked australian women least online relationships longjevity online relationships longjevity me porn pimp porn pimp grow gorgeous brunette bombshell gorgeous brunette bombshell then gay husk gay husk she coed sucks cash coed sucks cash tiny german nude model jenni german nude model jenni help abby amateur australian models abby amateur australian models believe st patrick day pinups st patrick day pinups mount sphie marceau nudes sphie marceau nudes house velicity teen porn star velicity teen porn star story brazil women bikini thong brazil women bikini thong hour self control executive dysfunction self control executive dysfunction lady hardcore sex videos online hardcore sex videos online trade 40 plus wives 40 plus wives track amy sue cooper naked amy sue cooper naked push 1970 i m an asshole 1970 i m an asshole danger butts park arena coventry butts park arena coventry buy used facial equipment used facial equipment speed mature on bed mature on bed mind seattle breast cancer writer seattle breast cancer writer let burns anal sex burns anal sex paint big tits canadian big tits canadian fill youngest teen boy youngest teen boy natural cummings studio chocolates cummings studio chocolates prove oppotunities virgen alantic airways oppotunities virgen alantic airways stop men wearing pantyhose stories men wearing pantyhose stories salt initiative against sex trafficking initiative against sex trafficking separate pensacola passion party pensacola passion party ran mature milf ebony mature milf ebony port nadia hentai nadia hentai chart hentai guilty gear hentai guilty gear knew angle wife naked angle wife naked melody the love shack stores the love shack stores support teen movie sex teen movie sex why my sister s breasts my sister s breasts process female bodybuilder suck female bodybuilder suck pair ncb sex education forum ncb sex education forum after california consumer credit counseling california consumer credit counseling caught hairy young gay guys hairy young gay guys thin success pregnancy mature mother success pregnancy mature mother been pussy fingering images pussy fingering images east adolescence sex education adolescence sex education other mini skirt sex clips mini skirt sex clips flow kittens licking people kittens licking people from rosamund pike nude pictures rosamund pike nude pictures we spring swings inc spring swings inc chord bbq recipes boston butts bbq recipes boston butts pick sex outdoors beach sex outdoors beach road asian teen models tgp asian teen models tgp hear erotic photography oklahoma model erotic photography oklahoma model tone virgins hymens virgins hymens mouth feed the goat porn feed the goat porn hear automatic sex automatic sex fine gay dude gay dude down gay in riverside ca gay in riverside ca scale gay bars in malaysia gay bars in malaysia hill swing wedding songs swing wedding songs kept male anal masterbation pics male anal masterbation pics excite nikkies handjob reviews nikkies handjob reviews room hidden camera video mature hidden camera video mature wind mum got boobs mum got boobs is badland beauty models badland beauty models notice gay beauty pageants gay beauty pageants earth horse pillows for teens horse pillows for teens raise xnxx stoies xnxx stoies range trash talkers porn trash talkers porn saw army lesbians army lesbians busy shower gay anal young shower gay anal young short topless twister topless twister three cityvibe bdsm post cityvibe bdsm post rather illinois dating lines illinois dating lines need net channels and sex net channels and sex vary twinks in their underwear twinks in their underwear hard linux webcam setup suse linux webcam setup suse brother shaving your vagina shaving your vagina have human sexuality class activities human sexuality class activities hurry mini skirt sex clips mini skirt sex clips heavy strap on sex stories strap on sex stories cry candid escort blankes candid escort blankes follow ghetto teens nude ghetto teens nude object gya sex mpegs gya sex mpegs pitch celeb nude sample clips celeb nude sample clips bring christian parenting teens christian parenting teens wind monroe la escorts monroe la escorts exact smyrna breast surgery smyrna breast surgery oh dating dating jouwpagina nl dating dating jouwpagina nl mile lesbian lesbian sex stories lesbian lesbian sex stories meat opinions of nude art opinions of nude art wave peruvian porn women peruvian porn women bar mixed wrestling spanking mixed wrestling spanking duck amature naked videos amature naked videos double shannom tweed nude 1982 shannom tweed nude 1982 meant hairiest vagina hairiest vagina subtract black mature lesbian black mature lesbian fall orgy cum movies free orgy cum movies free work bare naked titties bare naked titties up pics 18 pussy pics 18 pussy talk linda hayden nude linda hayden nude market gay mexican men videos gay mexican men videos front alaria nude alaria nude ride wikipedia list of pornstars wikipedia list of pornstars week katherine butts warwick katherine butts warwick hundred dick francis dead cert dick francis dead cert give large dildo sex video large dildo sex video man gfs real tgp gfs real tgp when teen flirt websites teen flirt websites with jennifer aniston topless picks jennifer aniston topless picks power ebony hairy pussies ebony hairy pussies paint worlds greatest breasts worlds greatest breasts fell mma sex harlingen mma sex harlingen line breast enhancement clips breast enhancement clips two please bang my boyfriend please bang my boyfriend rise buying wetsuits in uk buying wetsuits in uk look rate naked russian brides rate naked russian brides position teoria del big bang teoria del big bang jump famous literature couples famous literature couples drop lesbian hindi movie lesbian hindi movie agree double penetration sensation double penetration sensation law yvonne s training teen yvonne s training teen quart william gay author william gay author her pussy ass licking video pussy ass licking video lead amateur tranny handjob amateur tranny handjob board cock slice cock slice friend girls licking pussy pics girls licking pussy pics modern menstrual sex movies menstrual sex movies mine lesbian groping breasts youtube lesbian groping breasts youtube together naughty but nice wisconsin naughty but nice wisconsin he sex offender registery nc sex offender registery nc did hottie doggystyle video hottie doggystyle video once sex elevator sex elevator sing dawn wells nude dawn wells nude blue virgin island s currancy virgin island s currancy support begging teen begging teen dear brendan frasier nude brendan frasier nude office condom size and fit condom size and fit number vintage nude swimming photos vintage nude swimming photos store condom over vibrator condom over vibrator can all free smut porn all free smut porn continent homemade 100 mpg carburetor homemade 100 mpg carburetor noun concert sex stories concert sex stories never hidden nudist website hidden nudist website window escorts greek escorts greek continue talia what s love talia what s love give upload erotic upload erotic climb anime pron girls anime pron girls clear grab her boobs grab her boobs have nude grandys nude grandys table brunette nipples smaller brunette nipples smaller step football sex tape football sex tape half married couples body language married couples body language appear jamaican root juice erection jamaican root juice erection meant jana bach nude 9live jana bach nude 9live company jenna jameson kiss dvd jenna jameson kiss dvd substance group girl sex anime group girl sex anime bought male teen sexuality forum male teen sexuality forum interest hollywood fashion tape strips hollywood fashion tape strips feet dinner dash pussy dinner dash pussy space beauty salon skills beauty salon skills bad mature panties clips mature panties clips dear online adult strip poker online adult strip poker came bib webcams bib webcams mix dripping breasts dripping breasts invent big tits clips free big tits clips free real padmasree warrior nude padmasree warrior nude bit bruce graves church gay bruce graves church gay else orgasm stories rub orgasm stories rub soft big massive cock big massive cock next escorts in marengo indiana escorts in marengo indiana lost escorts in iowa escorts in iowa continue circle suck images circle suck images locate soft breast soft breast found gfe escorts southern california gfe escorts southern california our beaver springs dragway pa beaver springs dragway pa parent
... "; dress('paging_rep_link_num','1',$itemView); dress('paging_rep_link',"href='$url$prefix{$paging['first']}$postfix'",$itemView); print ($itemView); }elseif($paging['page']>5){ $itemView="$itemTemplate ... "; dress('paging_rep_link_num','1',$itemView); dress('paging_rep_link',"href='$url{$prefix}1$postfix'",$itemView); print ($itemView); } if(isset($paging['before'])) $page=$paging['page']-count($paging['before']); else $page=$paging['page']<5?1:$paging['page']-4; if(isset($paging['before'])){ foreach($paging['before'] as $value){ $itemView=$itemTemplate; dress('paging_rep_link_num',"$page",$itemView); dress('paging_rep_link',"href='$url$prefix$value$postfix'",$itemView); print ($itemView); $page++; } }else{ for($i=0;($i<4)&&($page<$paging['page']);$i++){ $itemView=$itemTemplate; dress('paging_rep_link_num',"$page",$itemView); dress('paging_rep_link',"href='$url$prefix$page$postfix'",$itemView); print ($itemView); $page++; } } if(($page==$paging['page'])&&($page<=$paging['pages'])){ $itemView=$itemTemplate; dress('paging_rep_link_num',"$page",$itemView); dress('paging_rep_link','',$itemView); print ($itemView); $page++; } if(isset($paging['before'])){ foreach($paging['after'] as $value){ $itemView=$itemTemplate; dress('paging_rep_link_num',"$page",$itemView); dress('paging_rep_link',"href='$url$prefix$value$postfix'",$itemView); print ($itemView); $page++; } }else{ for($i=0;($i<4)&&($page<=$paging['pages']);$i++){ $itemView=$itemTemplate; dress('paging_rep_link_num',"$page",$itemView); dress('paging_rep_link',"href='$url$prefix$page$postfix'",$itemView); print ($itemView); $page++; } } if(isset($paging['last'])){ $itemView=" ... $itemTemplate"; dress('paging_rep_link_num',"{$paging['pages']}",$itemView); dress('paging_rep_link',"href='$url$prefix{$paging['last']}$postfix'",$itemView); print ($itemView); }elseif(($paging['pages']-$paging['page'])>4){ $itemView=" ... $itemTemplate"; dress('paging_rep_link_num',"{$paging['pages']}",$itemView); dress('paging_rep_link',"href='$url$prefix{$paging['pages']}$postfix'",$itemView); print ($itemView); } $itemsView=ob_get_contents(); ob_end_clean(); $view=$template; dress('prev_page',isset($paging['prev'])?"href='$url$prefix{$paging['prev']}$postfix'":'',$view); dress('paging_rep',$itemsView,$view); dress('next_page',isset($paging['next'])?"href='$url$prefix{$paging['next']}$postfix'":'',$view); dress('no_more_prev',isset($paging['prev'])?'':'no-more-prev',$view); dress('no_more_next',isset($paging['next'])?'':'no-more-next',$view); return $view; } function dress($tag,$value,&$contents){ if(eregi("\[##_{$tag}_##\]",$contents,$temp)){ $contents=str_replace("[##_{$tag}_##]",$value,$contents); return true; }else{ return false; } } function getUpperView($paging){ global $service,$blogURL; ob_start();?> _ _ _ _ 0,'label'=>getCategoryNameById($owner,0),'value'=>$totalPosts,'link'=>"$blogURL/category",'children'=>array()); foreach($categories as $category1){ $children=array(); foreach($category1['children'] as $category2){ array_push($children,array('id'=>$category2['id'],'label'=>$category2['name'],'value'=>(doesHaveOwnership()?$category2['entriesInLogin']:$category2['entries']),'link'=>"$blogURL/category/".encodeURL($category2['label']),'children'=>array())); } array_push($tree['children'],array('id'=>$category1['id'],'label'=>$category1['name'],'value'=>(doesHaveOwnership()?$category1['entriesInLogin']:$category1['entries']),'link'=>"$blogURL/category/".encodeURL($category1['label']),'children'=>$children)); } ob_start(); printTreeView($tree,$selected,false,$xhtml); $view=ob_get_contents(); ob_end_clean(); return $view; } function printTreeView($tree,$selected,$embedJava=false,$xhtml=false){ global $skinSetting; $skin=$skinSetting; if($embedJava==false){ $skin=getCategoriesSkin(); } if($xhtml){ echo ''; return ; } $action=0;?> cellpadding="0" cellspacing="0" style="width: 100%;">
cellpadding="0" cellspacing="0">
>
({$tree['value']})";?>
id="category_" cellpadding="0" cellspacing="0">
>
({$row['value']})";?>
=$week*7&&($today+$firstWeekday)<($week+1)*7){ echo ' '.CRLF; }else{ echo ' '.CRLF; } for($weekday=0;$weekday<7;$weekday++){ $day++; $dayString=isset($calendar['days'][$day])?''.$day.'':$day; switch($weekday){ case 0: $className=" cal_day cal_day_sunday"; break; case 1: case 2: case 3: case 4: case 5: case 6: $className=" cal_day"; break; } $className.=$day==$today?" cal_day4":" cal_day3"; if($week==0){ if($weekday<$firstWeekday){ $day--; echo ' '.CRLF; }else{ echo ' '.CRLF; } }elseif($week==($lastWeek-1)){ if($day<=$lastDay){ echo ' '.CRLF; }else{ echo ' '.CRLF; } }else{ echo ' '.CRLF; } } echo ' '.CRLF; if($day>=$lastDay){ break; } }?>
«     »
 '.$dayString.''.$dayString.' '.$dayString.'
".($entry['comments']>0?"({$entry['comments']})":'').'',$view); print $view; } $view=ob_get_contents(); ob_end_clean(); return $view; } function getRecentCommentsView($comments,&$template){ global $blogURL,$skinSetting; ob_start(); foreach($comments as $comment){ $view="$template"; dress('rctrp_rep_link',"$blogURL/{$comment['entry']}#comment{$comment['id']}",$view); dress('rctrp_rep_desc',htmlspecialchars(UTF8::lessenAsEm($comment['comment'],$skinSetting['recentCommentLength'])),$view); dress('rctrp_rep_time',fireEvent('ViewRecentCommentDate',Timestamp::format2($comment['written'])),$view); dress('rctrp_rep_name',htmlspecialchars($comment['name']),$view); print $view; } $view=ob_get_contents(); ob_end_clean(); return $view; } function getRecentTrackbacksView($trackbacks,&$template){ global $blogURL,$skinSetting; ob_start(); foreach($trackbacks as $trackback){ $view="$template"; dress('rcttb_rep_link',"$blogURL/{$trackback['entry']}#trackback{$trackback['id']}",$view); dress('rcttb_rep_desc',htmlspecialchars(UTF8::lessenAsEm($trackback['subject'],$skinSetting['recentTrackbackLength'])),$view); dress('rcttb_rep_time',fireEvent('ViewRecentTrackbackDate',Timestamp::format2($trackback['written'])),$view); dress('rcttb_rep_name',htmlspecialchars(UTF8::lessenAsEm($trackback['site'],$skinSetting['recentTrackbackLength'])),$view); print $view; } $view=ob_get_contents(); ob_end_clean(); return $view; } function getLinksView($links,&$template){ global $blogURL,$skinSetting; ob_start(); foreach($links as $link){ $view="$template"; dress('link_url',htmlspecialchars($link['url']),$view); dress('link_site',fireEvent('ViewLink',htmlspecialchars(UTF8::lessenAsEm($link['name'],$skinSetting['linkLength']))),$view); print $view; } $view=ob_get_contents(); ob_end_clean(); return $view; } function getRandomTagsView($tags,&$template){ global $blogURL; ob_start(); list($maxTagFreq,$minTagFreq)=getTagFrequencyRange(); foreach($tags as $tag){ $view=$template; dress('tag_link',"$blogURL/tag/".encodeURL($tag),$view); dress('tag_name',htmlspecialchars($tag),$view); dress('tag_class',"cloud".getTagFrequency($tag,$maxTagFreq,$minTagFreq),$view); print $view; } $view=ob_get_contents(); ob_end_clean(); return $view; } class Skin{ var $outter; var $skin; var $list; var $listItem; var $commentList; var $commentListItem; var $rss; var $rss_date; var $rss_rep; var $keywordItem; var $keywordGroup; var $keyword; var $noticeItem; var $recentNotice; var $recentNoticeItem; var $locative; var $locativeSpot; var $locativeEntry; var $guest; var $guestForm; var $guestGuest; var $guestMember; var $guestContainer; var $guestItem; var $guestSubContainer; var $guestSubItem; var $search; var $recentEntry; var $recentComments; var $recentTrackback; var $management; var $entryProtected; var $entry; var $paging; var $pagingItem; var $archive; var $s_ps; var $s_ps_rep; var $comment; var $commentCount; var $commentForm; var $commentGuest; var $commentMember; var $commentContainer; var $commentItem; var $commentSubContainer; var $commentSubItem; var $trackbacks; var $trackbackContainer; var $trackback; var $trackbackCount; var $tagLabel; var $siteTag; var $siteTagItem; var $randomTags; var $s_link_rep; var $aux; var $sidebarBasicModules=array(); var $sidebarStorage=array(); var $sidebarOriginalContent=array(); var $sidebarName=array(); var $noneCommentMessage; var $singleCommentMessage; var $noneTrackbackMessage; var $singleTrackbackMessage; function Skin($name,$previewMode=false){ global $service,$blogURL; global $owner; $this->noneCommentMessage=getUserSetting('noneCommentMessage'); $this->singleCommentMessage=getUserSetting('singleCommentMessage'); $this->noneTrackbackMessage=getUserSetting('noneTrackbackMessage'); $this->singleTrackbackMessage=getUserSetting('singleTrackbackMessage'); if(strncmp($name,'customize/',10)==0){ $name="customize/$owner"; }else{ $name=Path::getBaseName($name); } if(($name=='.')||($name=='..')){ respondErrorPage(_text('스킨 정보가 존재하지 않습니다.'),_text('로그인'),$blogURL."/owner"); } $filename="../../skin/$name/skin.html"; if(!is_file($filename)){ respondErrorPage(_text('스킨 정보가 존재하지 않습니다.'),_text('로그인'),$blogURL."/owner"); } if(!$sval=file_get_contents($filename)) respondErrorPage(_text('스킨 정보가 존재하지 않습니다.'),_text('로그인'),$blogURL."/owner"); $sval=replaceSkinTag($sval,'html'); $sval=replaceSkinTag($sval,'head'); $sval=replaceSkinTag($sval,'body'); handleTags($sval); $sidebarCount=0; $noNameCount=1; while(ereg("",$sval)){ if(!isset($this->sidebarBasicModules[$sidebarCount])) $this->sidebarBasicModules[$sidebarCount]=array(); list($sval,$this->sidebarOriginalContent[$sidebarCount])=$this->cutSkinTag($sval,"sidebar","[##_sidebar_{$sidebarCount}_##]"); $moduleCount=0; $matchcount=preg_match_all('@.*@isU',$this->sidebarOriginalContent[$sidebarCount],$matches); if($matchcount!==false){ $rgSidebarContent=$matches[0]; }else{ $rgSidebarContent=array(); } for($i=0;$i/",$rgSidebarContent[$i],$temp); if(isset($temp[1])){ $tempTitle=trim($temp[1]); }else{ $tempTitle=_f('(이름 없음 %1)',$noNameCount); $noNameCount++; } $this->sidebarBasicModules[$sidebarCount][$moduleCount]=array('title'=>$tempTitle,'body'=>$rgSidebarContent[$i]); $moduleCount++; } $matchcount=preg_match('@@',$this->sidebarOriginalContent[$sidebarCount],$matches,PREG_OFFSET_CAPTURE); if($matchcount===false){ $firstPos=strlen($this->sidebarOriginalContent[$sidebarCount]); }else{ $firstPos=$matches[0][1]; } preg_match("//",substr($this->sidebarOriginalContent[$sidebarCount],0,$firstPos-1),$temp); if(isset($temp[1])){ $tempTitle=trim($temp[1]); }else{ $tempTitle=_t('사이드바').' '.($sidebarCount+1); } $this->sidebarName[$sidebarCount]=$tempTitle; $sidebarCount++; } handleSidebars($sval,$this,$previewMode); $sval=str_replace('./',"{$service['path']}/skin/$name/",$sval); list($sval,$this->listItem)=$this->cutSkinTag($sval,'list_rep'); list($sval,$this->list)=$this->cutSkinTag($sval,'list'); list($sval,$this->commentListItem)=$this->cutSkinTag($sval,'rplist_rep'); list($sval,$this->commentList)=$this->cutSkinTag($sval,'rplist'); list($sval,$this->rss_rep)=$this->cutSkinTag($sval,'rss_rep'); list($sval,$this->rss_date)=$this->cutSkinTag($sval,'rss_date'); list($sval,$this->rss)=$this->cutSkinTag($sval,'rss'); list($sval,$this->keywordItem)=$this->cutSkinTag($sval,'keyword_rep'); list($sval,$this->keywordGroup)=$this->cutSkinTag($sval,'keyword_date_rep'); list($sval,$this->keyword)=$this->cutSkinTag($sval,'keyword'); list($sval,$this->noticeItem)=$this->cutSkinTag($sval,'notice_rep'); list($sval,$this->recentNoticeItem)=$this->cutSkinTag($sval,'rct_notice_rep'); list($sval,$this->recentNotice)=$this->cutSkinTag($sval,'rct_notice'); list($sval,$this->locativeEntry)=$this->cutSkinTag($sval,'local_info_rep'); list($sval,$this->locativeSpot)=$this->cutSkinTag($sval,'local_spot_rep'); list($sval,$this->locative)=$this->cutSkinTag($sval,'local'); list($sval,$this->guestSubContainer)=$this->cutSkinTag($sval,'guest_reply_container'); if($this->guestSubContainer==''){ $this->guestSubContainer='[##_guest_reply_rep_##]'; list($sval,$this->guestSubItem)=$this->cutSkinTag($sval,'guest_reply_rep','[##_guest_reply_container_##]'); }else{ list($this->guestSubContainer,$this->guestSubItem)=$this->cutSkinTag($this->guestSubContainer,'guest_reply_rep'); } list($sval,$this->guestContainer)=$this->cutSkinTag($sval,'guest_container'); if($this->guestContainer==''){ $this->guestContainer='[##_guest_rep_##]'; list($sval,$this->guestItem)=$this->cutSkinTag($sval,'guest_rep','[##_guest_container_##]'); }else{ list($this->guestContainer,$this->guestItem)=$this->cutSkinTag($this->guestContainer,'guest_rep'); } list($sval,$this->guestGuest)=$this->cutSkinTag($sval,'guest_form'); list($sval,$this->guestMember)=$this->cutSkinTag($sval,'guest_member'); list($sval,$this->guestForm)=$this->cutSkinTag($sval,'guest_input_form'); list($sval,$this->guest)=$this->cutSkinTag($sval,'guest'); list($sval,$this->entryProtected)=$this->cutSkinTag($sval,'article_protected'); list($sval,$this->management)=$this->cutSkinTag($sval,'ad_div'); list($sval,$this->trackbackCount)=$this->cutSkinTag($sval,'tb_count'); if($this->trackbackCount==''){ list($sval,$this->trackbackCount)=$this->cutSkinReplacer($sval,'article_rep_tb_cnt','[##_tb_count_##]'); $this->noneTrackbackMessage=''; $this->singleTrackbackMessage=''; } list($sval,$this->commentCount)=$this->cutSkinTag($sval,'rp_count'); if($this->commentCount==''){ list($sval,$this->commentCount)=$this->cutSkinReplacer($sval,'article_rep_rp_cnt','[##_rp_count_##]'); $this->noneCommentMessage=''; $this->singleCommentMessage=''; } list($sval,$this->trackbackContainer)=$this->cutSkinTag($sval,'tb_container'); if($this->trackbackContainer==''){ $this->trackbackContainer='[##_tb_rep_##]'; list($sval,$this->trackback)=$this->cutSkinTag($sval,'tb_rep','[##_tb_container_##]'); }else{ list($this->trackbackContainer,$this->trackback)=$this->cutSkinTag($this->trackbackContainer,'tb_rep'); } list($sval,$this->trackbacks)=$this->cutSkinTag($sval,'tb'); list($sval,$this->tagLabel)=$this->cutSkinTag($sval,'tag_label'); list($sval,$this->siteTagItem)=$this->cutSkinTag($sval,'tag_rep'); list($sval,$this->siteTag)=$this->cutSkinTag($sval,'tag'); list($sval,$this->randomTags)=$this->cutSkinTag($sval,'random_tags'); list($sval,$this->commentSubContainer)=$this->cutSkinTag($sval,'rp2_container'); if($this->commentSubContainer==''){ $this->commentSubContainer='[##_rp2_rep_##]'; list($sval,$this->commentSubItem)=$this->cutSkinTag($sval,'rp2_rep','[##_rp2_container_##]'); }else{ list($this->commentSubContainer,$this->commentSubItem)=$this->cutSkinTag($this->commentSubContainer,'rp2_rep'); } list($sval,$this->commentContainer)=$this->cutSkinTag($sval,'rp_container'); if($this->commentContainer==''){ $this->commentContainer='[##_rp_rep_##]'; list($sval,$this->commentItem)=$this->cutSkinTag($sval,'rp_rep','[##_rp_container_##]'); }else{ list($this->commentContainer,$this->commentItem)=$this->cutSkinTag($this->commentContainer,'rp_rep'); } list($sval,$this->commentGuest)=$this->cutSkinTag($sval,'rp_guest'); list($sval,$this->commentMember)=$this->cutSkinTag($sval,'rp_member'); list($sval,$this->commentForm)=$this->cutSkinTag($sval,'rp_input_form'); list($sval,$this->comment)=$this->cutSkinTag($sval,'rp'); list($sval,$this->entry)=$this->cutSkinTag($sval,'article_rep'); list($sval,$this->pagingItem)=$this->cutSkinTag($sval,'paging_rep'); list($sval,$this->paging)=$this->cutSkinTag($sval,'paging'); list($sval,$this->archive)=$this->cutSkinTag($sval,'archive_rep'); list($sval,$this->search)=$this->cutSkinTag($sval,'search'); list($sval,$this->recentEntry)=$this->cutSkinTag($sval,'rctps_rep'); list($sval,$this->recentComments)=$this->cutSkinTag($sval,'rctrp_rep'); list($sval,$this->recentTrackback)=$this->cutSkinTag($sval,'rcttb_rep'); list($sval,$this->s_link_rep)=$this->cutSkinTag($sval,'link_rep'); list($sval,$this->skin)=$this->cutSkinTag($sval,'t3'); $this->outter=$sval; } function cutSkinTag($contents,$tag,$replace=null){ if(is_null($replace)){ $replace="[##_{$tag}_##]"; } $tagSize=strlen($tag)+4; $begin=strpos($contents,""); if($begin===false) return array($contents,NULL); $end=strpos($contents,"",$begin+4); if($end===false) return array($contents,NULL); $inner=substr($contents,$begin+$tagSize,$end-$begin-$tagSize); $outter=substr($contents,0,$begin).$replace.substr($contents,$end+$tagSize+1); return array($outter,$inner); } function cutSkinReplacer($contents,$tag,$replace=null){ if(is_null($replace)){ $replace="[##_{$tag}_##]"; } $tagSize=strlen("[##_{$tag}_##]"); $pos=strpos($contents,"[##_{$tag}_##]"); if($pos===false){ return array($contents,''); } $inner="[##_{$tag}_##]"; $outter=substr($contents,0,$pos).$replace.substr($contents,$pos+$tagSize); return array($outter,$inner); } } function removeAllTags($contents){ $contents=preg_replace('/\[#M_[^|]*\|[^|]*\|/Us','',str_replace('_M#]','',preg_replace('/\[##_.+_##\]/Us','',$contents))); $contents=preg_replace('@(@','',$contents); return $contents; } function replaceSkinTag($contents,$tag){ $pattern[]='/(<'.$tag.'.*>)\r?\n/Ui'; $pattern[]='/<\/'.$tag.'>/Ui'; $replacement[]='$1'.CRLF.'[##_SKIN_'.$tag.'_start_##]'; $replacement[]='[##_SKIN_'.$tag.'_end_##]$0'; return preg_replace($pattern,$replacement,$contents); } header('Content-Type: text/html; charset=utf-8'); if(false){ fetchConfigVal(); } $locatives=getLocatives($owner); updateVisitorStatistics($owner); $stats=getStatistics($owner); if(!empty($entries)&&(count($entries)==1)) $pageTitle=$entries[0]['title']; else $pageTitle=''; if(!isset($skin)) $skin=new Skin($skinSetting['skin']); $view=str_replace('[##_t3_##]',getUpperView(isset($paging)?$paging:null).$skin->skin.getLowerView().getScriptsOnFoot(),$skin->outter); if($suri['directive']=='/'){ dress('body_id',"tt-body-page",$view); }elseif(!empty($category)){ dress('body_id',getCategoryBodyIdById($owner,$category)?getCategoryBodyIdById($owner,$category):'tt-body-category',$view); }elseif(!empty($search)){ dress('body_id',"tt-body-search",$view); }elseif(!empty($period)){ dress('body_id',"tt-body-archive",$view); }else{ dress('body_id',"tt-body-".ltrim($suri['directive'],'/'),$view); } $locativeView=''; $prevPath=array(); foreach($locatives as $locative){ $path=explode('/',$locative['location']); array_shift($path); for($depth=$i=0;$ilocativeSpot; dress('local_spot_depth',$depth,$spotView); dress('local_spot',htmlspecialchars($path[$i]),$spotView); if(empty($prevPath[$i])||($path[$i]!=$prevPath[$i])) $locativeView.=$spotView; } $entryView=$skin->locativeEntry; dress('local_info_depth',$depth+20,$entryView); dress('local_info_link',"$blogURL/".($blog['useSlogan']?'entry/'.encodeURL($locative['slogan']):$locative['id']),$entryView); dress('local_info_title',htmlspecialchars($locative['title']),$entryView); $locativeView.=$entryView; $prevPath=$path; } dress('local',str_replace('[##_local_spot_rep_##]',$locativeView,$skin->locative),$view); $writer=fetchQueryCell("SELECT name FROM {$database['prefix']}Users WHERE userid = $owner"); $pageTitle=trim($pageTitle); dress('page_title',htmlspecialchars($pageTitle),$view); dress('blogger',htmlspecialchars($writer),$view); dress('title',htmlspecialchars($blog['title']),$view); dress('desc',htmlspecialchars($blog['description']),$view); if(!empty($blog['logo'])) dress('image',"{$service['path']}/attach/$owner/{$blog['logo']}",$view); else dress('image',"{$service['path']}/image/spacer.gif",$view); dress('blog_link',"$blogURL/",$view); dress('keylog_link',"$blogURL/keylog",$view); dress('localog_link',"$blogURL/location",$view); dress('taglog_link',"$blogURL/tag",$view); dress('guestbook_link',"$blogURL/guestbook",$view); $searchView=$skin->search; dress('search_name','search',$searchView); dress('search_text',isset($search)?htmlspecialchars($search):'',$searchView); dress('search_onclick_submit',"try{window.location.href='$blogURL/search/' + document.getElementsByName('search')[0].value.replaceAll('%', '%25'); return false;}catch(e){}",$searchView); dress('search',$searchView,$view); $totalPosts=getEntriesTotalCount($owner); $categories=getCategories($owner); dress('category',getCategoriesView($totalPosts,$categories,isset($category)?$category:true),$view); dress('category_list',getCategoriesView($totalPosts,$categories,isset($category)?$category:true,true),$view); dress('count_total',$stats['total'],$view); dress('count_today',$stats['today'],$view); dress('count_yesterday',$stats['yesterday'],$view); dress('archive_rep',getArchivesView(getArchives($owner),$skin->archive),$view); dress('calendar',getCalendarView(getCalendar($owner,isset($period)?$period:true)),$view); dress('random_tags',getRandomTagsView(getRandomTags($owner),$skin->randomTags),$view); $noticeView=$skin->recentNotice; $notices=getNotices($owner); if(sizeof($notices)>0){ $itemsView=''; foreach($notices as $notice){ $itemView=$skin->recentNoticeItem; dress('notice_rep_title',htmlspecialchars(fireEvent('ViewNoticeTitle',UTF8::lessenAsEm($notice['title'],$skinSetting['recentNoticeLength']),$notice['id'])),$itemView); dress('notice_rep_link',"$blogURL/notice/{$notice['id']}",$itemView); $itemsView.=$itemView; } dress('rct_notice_rep',$itemsView,$noticeView); dress('rct_notice',$noticeView,$view); } dress('rctps_rep',getRecentEntriesView(getRecentEntries($owner),$skin->recentEntry),$view); dress('rctrp_rep',getRecentCommentsView(getRecentComments($owner),$skin->recentComments),$view); dress('rcttb_rep',getRecentTrackbacksView(getRecentTrackbacks($owner),$skin->recentTrackback),$view); dress('link_rep',getLinksView(getLinks($owner),$skin->s_link_rep),$view); dress('rss_url',"$blogURL/rss",$view); dress('owner_url',"$blogURL/owner",$view); dress('tattertools_name',TATTERTOOLS_NAME,$view); dress('tattertools_version',TATTERTOOLS_VERSION,$view); if(isset($paging)) dress('paging',getPagingView($paging,$skin->paging,$skin->pagingItem),$view); $sidebarElements=array_keys($skin->sidebarStorage); foreach($sidebarElements as $element){ dress($element,$skin->sidebarStorage[$element],$view); } $view=removeAllTags($view); print $view;?>