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 addLinkSense($text,$attributes=''){ return ereg_replace("(^| |\t|\r|\n|\"|')(http://[^ \t\r\n\"']+)","\\1\\2",$text); } function addProtocolSense($url,$protocol='http://'){ return ereg('^[[:alnum:]]+:',$url)?$url:$protocol.$url; } function decorateSrcInObejct($html){ $count=preg_match_all('@src="(.+)"@iU',$html,$matches,PREG_PATTERN_ORDER); while($count>0){ $orig=$matches[0][$count-1]; $filename=$matches[1][$count-1]; if(strncasecmp($filename,'http://',7)!=0){ $html=str_replace($orig,substr($orig,0,4).'"http://'.$_SERVER['HTTP_HOST'].$filename.'"',$html); } $count--; } return $html; } function avoidFlashBorder($html,$tag='object'){ $pos1=$pos2=0; $str=strtolower($html); $result=''; while(($pos1=strpos($str,"<$tag",$pos2))!==false){ $result.=substr($html,$pos2,$pos1-$pos2); $pos2=$pos1; while(true){ if(($pos2=strpos($str,"$tag>",$pos2))===false) return $result.'_'; $pos2+=strlen($tag)+3; $chunk=substr($str,$pos1,$pos2-$pos1); if(substr_count($chunk,"<$tag")==substr_count($chunk,"$tag>")) break; } $result.='_'; } return $result.substr($html,$pos2); } 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 getFileExtension($path){ for($i=strlen($path)-1;$i>=0;$i--){ if($path{$i}=='.') return strtolower(substr($path,$i+1)); if(($path{$i}=='/')||($path{$i}=='\\')) break; } return ''; } function getAttributesFromString($str){ $attributes=array(); preg_match_all('/([^=\s]+)\s*=\s*"([^"]*)/',$str,$matches); for($i=0;$iopen($xml,$service['encoding']); if($xmls->getValue('/skin/default/contentWidth')){ $contentWidth=$xmls->getValue('/skin/default/contentWidth'); } } return $contentWidth; } 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"); } function makeThumbnail($imgString,$originSrc,$paddingArray,$waterMarkArray,$useAbsolutePath){ global $database,$owner,$blogURL,$serviceURL,$pathURL; if(is_null(getUserSetting("resamplingDefault"))){ return $imgString; }else{ $waterMarkOn=getUserSetting("waterMarkDefault","no"); } requireComponent('Tattertools.Function.Image'); if(!is_dir("../../cache/thumbnail")){ @mkdir("../../cache/thumbnail"); @chmod("../../cache/thumbnail",0777); } if(!is_dir("../../cache/thumbnail/$owner")){ @mkdir("../../cache/thumbnail/$owner"); @chmod("../../cache/thumbnail/$owner",0777); } $contentWidth=getContentWidth(); if(preg_match('/class="(tt-resampling|tt-watermark)"/i',$imgString,$temp)){ $originFileName=basename($originSrc); switch($temp[1]){ case "tt-resampling": $resampleType="resampled"; break; case "tt-watermark": if($waterMarkOn=='no') $resampleType="resampled"; else $resampleType="watermarked"; break; } if(preg_match('/width="([1-9][0-9]*)"/i',$imgString,$temp)){ $tempWidth=$temp[1]; } if(preg_match('/height="([1-9][0-9]*)"/i',$imgString,$temp)){ $tempHeight=$temp[1]; } $newTempFileName=preg_replace("/\.([[:alnum:]]+)$/i",".w{$tempWidth}-h{$tempHeight}.{$resampleType}.\\1",$originFileName); $tempSrc=ROOT."/cache/thumbnail/$owner/".$newTempFileName; $tempURL=$pathURL."/thumbnail/$owner/".$newTempFileName; if($useAbsolutePath==true){ $tempURL="$serviceURL/cache/thumbnail/$owner/$newTempFileName"; } $checkResult=Image::checkExistingThumbnail($originSrc,$tempSrc,$tempWidth,$tempHeight,$paddingArray,$waterMarkArray); switch($checkResult){ case 1: deleteFilesByRegExp("../../cache/thumbnail/$owner/","^".preg_replace("/\.([[:alnum:]]+)$/i","\.",$originFileName)); case 2: $isSuccessful=true; $AttachedImage=new Image(); $AttachedImage->imageFile=$originSrc; if($AttachedImage->resample($tempWidth,$tempHeight,$paddingArray)){ if($resampleType=="watermarked"&&$waterMarkOn=="yes"){ $waterMarkType=$AttachedImage->getImageType($waterMarkArray['path']); $AttachedImage->impressWaterMark($waterMarkArray['path'],$waterMarkArray['position'],$waterMarkArray['gamma']); } if($AttachedImage->createThumbnailIntoFile($tempSrc)){ $imgString=preg_replace('/src="([^"]+)"/i','src="'.$tempURL.'"',$imgString); $imgString=preg_replace('/width="([^"]+)"/i','width="'.$tempWidth.'"',$imgString); $imgString=preg_replace('/height="([^"]+)"/i','height="'.$tempHeight.'"',$imgString); switch($resampleType){ case "resampled": @unlink(str_replace(".resampled.",".watermarked.",$tempSrc)); break; case "watermarked": if($waterMarkOn=="yes") @unlink(str_replace(".watermarked.",".resampled.",$tempSrc)); break; } $originImageInfo=getimagesize($originSrc); $tempFileName=preg_replace("/\.([[:alnum:]]+)$/i",".w{$originImageInfo[0]}-h{$originImageInfo[1]}.{$resampleType}.\\1",$originFileName); if($resampleType=="watermarked"&&$waterMarkOn=="yes"){ if($AttachedImage->resample($originImageInfo[0],$originImageInfo[1],NULL)){ $AttachedImage->impressWaterMark($waterMarkArray['path'],$waterMarkArray['position'],$waterMarkArray['gamma']); if($AttachedImage->createThumbnailIntoFile("../../cache/thumbnail/$owner/$tempFileName")){ @unlink(ROOT."/cache/thumbnail/$owner/".str_replace(".watermarked.",".resampled.",$tempFileName)); $imgString=preg_replace('/onclick="open_img\(\'([^\']+)\'\)"/',"onclick=\"open_img('$blogURL/thumbnail/$owner/$tempFileName')\"",$imgString); } } }else{ @unlink(ROOT."/cache/thumbnail/$owner/".str_replace(".resampled.",".watermarked.",$tempFileName)); } }else{ $isSuccessful=false; } }else{ $isSuccessful=false; } if($isSuccessful==false){ $imgString=preg_replace('/width="([^"]+)"/i','width="'.$tempWidth.'"',$imgString); $imgString=preg_replace('/height="([^"]+)"/i','height="'.$tempHeight.'"',$imgString); } unset($AttachedImage); break; default: $imgString=preg_replace('/src="([^"]+)"/i','src="'.$tempURL.'"',$imgString); $imgString=preg_replace('/width="([^"]+)"/i','width="'.$tempWidth.'"',$imgString); $imgString=preg_replace('/height="([^"]+)"/i','height="'.$tempHeight.'"',$imgString); $originImageInfo=getimagesize($originSrc); $tempFileName=preg_replace("/\.([[:alnum:]]+)$/i",".w{$originImageInfo[0]}-h{$originImageInfo[1]}.{$resampleType}.\\1",$originFileName); if($resampleType=="watermarked"){ if(file_exists("../../cache/thumbnail/$owner/$tempFileName")){ $imgString=preg_replace('/onclick="open_img\(\'([^\']+)\'\)"/',"onclick=\"open_img('$blogURL/thumbnail/$owner/$tempFileName')\"",$imgString); }elseif(file_exists(ROOT."/cache/thumbnail/$owner/".str_replace(".watermarked.",".resampled.",$tempFileName))){ $imgString=preg_replace('/onclick="open_img\(\'([^\']+)\'\)"/',"onclick=\"open_img('$blogURL/thumbnail/$owner/".str_replace(".watermarked.",".resampled.",$tempFileName)."')\"",$imgString); } }elseif($resampleType=="resampled"&&file_exists("../../cache/thumbnail/$owner/$tempFileName")){ $imgString=preg_replace('/onclick="open_img\(\'([^\']+)\'\)"/',"onclick=\"open_img('$blogURL/thumbnail/$owner/$tempFileName')\"",$imgString); } break; } } return $imgString; } function deleteFilesByRegExp($path,$regexp){ $path=eregi("/$",$path,$temp)?$path:$path."/"; if(!file_exists($path)) return false; $handle=opendir($path); while($tempFile=readdir($handle)){ if(($regexp=="*"||eregi("$regexp",$tempFile,$temp))&&($tempFile!="."&&$tempFile!="..")){ @unlink($path.$tempFile); } } return true; } 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 getAttachmentByOnlyName($owner,$name){ global $database; $name=mysql_tt_escape_string($name); return fetchQueryRow("select * from {$database['prefix']}Attachments where owner = $owner and name = '$name'"); } 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 getCommentsWithPagingForGuestbook($owner,$page,$count){ global $database; $sql="SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner"; $sql.=' AND entry = 0 AND parent is null AND isFiltered = 0'; $sql.=' ORDER BY written DESC'; return fetchWithPaging($sql,$page,$count); } function getComments($entry){ global $database,$owner; $comments=array(); $authorized=doesHaveOwnership(); $aux=($entry==0?'ORDER BY written DESC':'order by id ASC'); $sql="select * from {$database['prefix']}Comments where owner = $owner and entry = $entry and parent is null and isFiltered = 0 $aux"; if($result=mysql_query($sql)){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!$authorized){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_text('관리자만 볼 수 있는 댓글입니다.'); } array_push($comments,$comment); } } return $comments; } function getCommentComments($parent){ global $database,$owner; $comments=array(); $authorized=doesHaveOwnership(); if($result=mysql_query("select * from {$database['prefix']}Comments where owner = $owner and parent = $parent and isFiltered = 0 order by id")){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!$authorized){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_text('관리자만 볼 수 있는 댓글입니다.'); } array_push($comments,$comment); } } return $comments; } 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 getCommentCountPart($commentCount,&$skin){ $noneCommentMessage=$skin->noneCommentMessage; $singleCommentMessage=$skin->singleCommentMessage; if($commentCount==0&&!empty($noneCommentMessage)){ dress('article_rep_rp_cnt',0,$noneCommentMessage); $commentView=$noneCommentMessage; }elseif($commentCount==1&&!empty($singleCommentMessage)){ dress('article_rep_rp_cnt',1,$singleCommentMessage); $commentView=$singleCommentMessage; }else{ $commentPart=$skin->commentCount; dress('article_rep_rp_cnt',$commentCount,$commentPart); $commentView=$commentPart; } return array("rp_count",$commentView); } 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 getEntryListWithPagingByTag($owner,$tag,$page,$count){ global $database,$suri,$folderURL; if($tag===null) return array(); $tag=mysql_tt_escape_string($tag); $visibility=doesHaveOwnership()?'':'AND e.visibility > 0'; $sql="SELECT e.* FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}TagRelations t ON e.id = t.entry AND e.owner = t.owner WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0 AND t.tag = '$tag' ORDER BY published DESC"; return fetchWithPaging($sql,$page,$count,"$folderURL/{$suri['value']}"); } function getEntriesWithPagingByTag($owner,$tag,$page,$count){ global $database,$folderURL,$suri; if($tag===null) return fetchWithPaging(null,$page,$count,"$folderURL/{$suri['value']}"); $tag=mysql_tt_escape_string($tag); $visibility=doesHaveOwnership()?'':'AND e.visibility > 0'; $sql="SELECT e.*, c.label categoryLabel FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id LEFT JOIN {$database['prefix']}TagRelations t ON e.id = t.entry AND e.owner = t.owner WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0 AND t.tag = '$tag' ORDER BY e.published DESC"; return fetchWithPaging($sql,$page,$count,"$folderURL/{$suri['value']}"); } 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 getEntryVisibilityName($visibility){ switch(abs($visibility)){ case 0: return _text('비공개'); case 1: return _text('보호'); case 2: return _text('공개'); case 3: default: return _text('발행'); } } function getKeywordNames($owner){ global $database; $names=array(); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $result=mysql_query("SELECT title FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category = -1"); while(list($name)=mysql_fetch_array($result)) array_push($names,$name); return $names; } 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 fetchWithPaging($sql,$page,$count,$url=null,$prefix='?page='){ global $folderURL; if($url===null) $url=$folderURL; $paging=array('url'=>$url,'prefix'=>$prefix,'postfix'=>''); if(empty($sql)) return array(array(),$paging); if(eregi('[[:space:]]{1}(FROM.*)$',$sql,$matches)) $from=$matches[1]; else return array(array(),$paging); $paging['total']=fetchQueryCell("SELECT COUNT(*) $from"); if($paging['total']===null) return array(array(),$paging); $paging['pages']=intval(ceil($paging['total']/$count)); $paging['page']=is_numeric($page)?$page:1; if($paging['page']>$paging['pages']){ $paging['page']=$paging['pages']; if($paging['pages']>0) $paging['prev']=$paging['pages']-1; } if($paging['page']>1) $paging['prev']=$paging['page']-1; if($paging['page']<$paging['pages']) $paging['next']=$paging['page']+1; $offset=($paging['page']-1)*$count; if($offset<0) $offset=0; return array(fetchQueryAll("$sql LIMIT $offset, $count"),$paging); } 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 getTrackbacks($entry){ global $database,$owner; $trackbacks=array(); $result=mysql_query("select * from {$database['prefix']}Trackbacks where owner = $owner AND entry = $entry AND isFiltered = 0 order by written"); while($trackback=mysql_fetch_array($result)) array_push($trackbacks,$trackback); return $trackbacks; } 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 getTrackbackCountPart($trackbackCount,&$skin){ $noneTrackbackMessage=$skin->noneTrackbackMessage; $singleTrackbackMessage=$skin->singleTrackbackMessage; if($trackbackCount==0&&!empty($noneTrackbackMessage)){ dress('article_rep_tb_cnt',0,$noneTrackbackMessage); $trackbackView=$noneTrackbackMessage; }elseif($trackbackCount==1&&!empty($singleTrackbackMessage)){ dress('article_rep_tb_cnt',1,$singleTrackbackMessage); $trackbackView=$singleTrackbackMessage; }else{ $trackbackPart=$skin->trackbackCount; dress('article_rep_tb_cnt',$trackbackCount,$trackbackPart); $trackbackView=$trackbackPart; } return array("tb_count",$trackbackView); } function getTagId($owner,$name){ global $database; $name=mysql_tt_escape_string($name); return fetchQueryCell("SELECT id FROM {$database['prefix']}Tags WHERE name = '$name'"); } function getTags($entry){ global $database,$owner; $tags=array(); if(doesHaveOwnership()) $result=mysql_query("SELECT * FROM `{$database['prefix']}Tags` t, `{$database['prefix']}TagRelations` r WHERE t.id = r.tag AND r.entry = $entry AND r.owner = $owner GROUP BY r.tag ORDER BY t.name"); else $result=mysql_query("SELECT * 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.entry = $entry AND r.owner = $owner GROUP BY r.tag ORDER BY t.name"); if($result){ while($tag=mysql_fetch_array($result)) array_push($tags,$tag); } return $tags; } 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 getSiteTags($owner){ global $database; $names=array(); 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 t.name LIMIT 2000"); 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 t.name LIMIT 2000"); if($result){ while(list($name)=mysql_fetch_array($result)) array_push($names,$name); } return $names; } 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;?> 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 lyricah brother bottle masturbation ah brother bottle masturbation pay pregnant and lesbian pregnant and lesbian wall erotic art displays erotic art displays land european gay men naked european gay men naked thought soft fluffy bbw soft fluffy bbw read dixie chicks sales dixie chicks sales tail middle east nude models middle east nude models strong love and god s blessing love and god s blessing dog moms hairy pussy moms hairy pussy figure bdsm orgasm denile bdsm orgasm denile bad teenie pantie fuck teenie pantie fuck through spanking paddling tawse spanking paddling tawse separate all blonde really dumb all blonde really dumb gray masha teen masha teen sheet nude resorts in idaho nude resorts in idaho common ejaculation strattera ejaculation strattera depend amanda carter nude amanda carter nude lady southern teen sex southern teen sex pound sperm shape sperm shape are halle berre sex video halle berre sex video teeth fuck the teacher games fuck the teacher games event julie bells exposed boobs julie bells exposed boobs swim spongebob underwear spongebob underwear major dating sties katie dating sties katie property booty injections atlanta booty injections atlanta rest naked men huge cocks naked men huge cocks history white trash xxx mpeg white trash xxx mpeg raise kern porn star xtube kern porn star xtube once swollen cock gay swollen cock gay type real nerd porn pics real nerd porn pics danger voyeur beach videos voyeur beach videos new omid love omid love exercise cute tween boys cute tween boys break asian shemale websites asian shemale websites trouble lesbian san diego lesbian san diego was horny afternoon alkthrough horny afternoon alkthrough some confessions of slut confessions of slut store nightclub voyeur nightclub voyeur leave kiss simulate kiss simulate thus pelvic and vaginal ultrasound pelvic and vaginal ultrasound window sausage used for dildo sausage used for dildo gas bad girls suck cock bad girls suck cock flow work place harassment dc work place harassment dc evening teen legal pron teen legal pron written pussy pornooo pussy pornooo head korean nude women korean nude women own snowglobe dick snowglobe dick land who owns gaza strip who owns gaza strip before nia long nude pictures nia long nude pictures mile xxx karrine steffans xxx karrine steffans wall liz carlysle romance liz carlysle romance person plain love tvb plain love tvb heard teens boobs skinny teens boobs skinny air trained teen trained teen open sperm vagina sperm vagina pose lacey duvalle blowjobs lacey duvalle blowjobs wife immature teens immature teens finger fiction forced crossdress fiction forced crossdress guide sex while singing sex while singing stretch creative webcam live vista creative webcam live vista left aisha outlaw nude aisha outlaw nude open sex arbaic sex arbaic supply submitted asian nude pics submitted asian nude pics soon sex macines sex macines board amateur adult web cam amateur adult web cam common internet dating maxim internet dating maxim beauty cichlid gender sex cichlid gender sex wash cunt games cunt games four mistress spanking sissy maids mistress spanking sissy maids current teen laptop messenger bags teen laptop messenger bags show escort winston salem nc escort winston salem nc study miss french nude miss french nude board superhero lesbian xxx superhero lesbian xxx pitch new york sluts new york sluts cool nina roberts porn movies nina roberts porn movies smile gay bath victoria bc gay bath victoria bc row dl thug passion dl thug passion method blonde grandma blonde grandma drink daughters s m fetish daughters s m fetish coast nude camp child section nude camp child section feed sex par webcam gratuit sex par webcam gratuit feet exhibitionist nipples clit exhibitionist nipples clit surprise chick hill chick hill wall amateur nude auditions amateur nude auditions stick catholic teachings masturbation catholic teachings masturbation blow xxx rpg games xxx rpg games near gay men hemorrhoids gay men hemorrhoids watch pamela anderson boobs pics pamela anderson boobs pics single millbrook housewives millbrook housewives music bondage gang bang bondage gang bang master bg chicks bg chicks yes balck cocks white girlfriend balck cocks white girlfriend settle pleasure and pain lyrics pleasure and pain lyrics dollar orange breasted grosbeak orange breasted grosbeak system vagina art plates vagina art plates capital lesbians makeout lesbians makeout dark sexy women naked moives sexy women naked moives necessary nose strap dildo nose strap dildo symbol anal sex butter anal sex butter lost mature women vagina mature women vagina wide drug and affects relationships drug and affects relationships except dana naked dana naked electric a womans love lyrics a womans love lyrics care teen lesbians sluts teen lesbians sluts next cameltow nude cameltow nude sentence guba amateur goodbye my guba amateur goodbye my particular dr vibrator dr vibrator drop vagina stinging after sex vagina stinging after sex word crash illinois teen carroll crash illinois teen carroll same venessa hudgen sex tape venessa hudgen sex tape last flickr photos tagged gay flickr photos tagged gay fraction burkhardt amateur center burkhardt amateur center wish lesbian thought lesbian thought watch gorgeous teen model gorgeous teen model correct naked oats naked oats felt private club singles montreal private club singles montreal list tripod thongs tripod thongs bell take off thong take off thong for independent escorts illinois independent escorts illinois take nylon braided twine nylon braided twine while funky clothing teen girls funky clothing teen girls cook mpg honda trail 90 mpg honda trail 90 captain college downtime xxx college downtime xxx line asian gay free clips asian gay free clips full sex and romance sex and romance solution ripped abs gay sex ripped abs gay sex tone smoking tgp smoking tgp true . shane seymore butts shane seymore butts mass submitted amature porn submitted amature porn tiny big nippels pussy big nippels pussy village classy sex talk classy sex talk rock whie sluts black whie sluts black hundred smiley jerk off smiley jerk off enemy taboo oriental photos sex taboo oriental photos sex brown stories of wives stories of wives group pantyhose fashionable pantyhose fashionable flower asian porn oriental asian porn oriental dictionary macedonia sex escorts macedonia sex escorts the pussy hair colors pussy hair colors evening naked mardi gra pictures naked mardi gra pictures stick portugal nude beaches portugal nude beaches rich 12 inch gay cock 12 inch gay cock circle love slave gospel quartet love slave gospel quartet huge peyton maning nude pics peyton maning nude pics minute teen poetry slam examples teen poetry slam examples basic hq teens babes free hq teens babes free paragraph shakespeare s love shakespeare s love us hentai lolicon hentai lolicon early tire swing bar tire swing bar side nike breast cancer nike breast cancer shoe gay male sex resorts gay male sex resorts system patterson township beaver county patterson township beaver county hard exotic erotic stories exotic erotic stories strong breast oragasm breast oragasm enough ejaculation fluid pics ejaculation fluid pics tube nude short women nude short women snow winnie dun sensory winnie dun sensory suggest song valerie loves me song valerie loves me music hannah porn uk hannah porn uk the xxxl striped sailor t xxxl striped sailor t who black men posing nude black men posing nude indicate farmer daughter fucked farmer daughter fucked book jizzed ass porn jizzed ass porn ear chick rip chick rip bread fear mood swings fear mood swings dead swiss fetish couple swiss fetish couple happen anal cunt banf anal cunt banf baby mistress abi mk mistress abi mk field canterbury counseling greenville sc canterbury counseling greenville sc fig artifical pussy artifical pussy correct cadillac de ville mpg cadillac de ville mpg three internal piss porn internal piss porn crowd spanking law spanking law out nude widescreen wallpapers nude widescreen wallpapers student counseling racism counseling racism electric cause of orgasms cause of orgasms men bugs bunny innocent bugs bunny innocent add painted naked painted naked we akron ohio escorts akron ohio escorts true . jacksonville nude jacksonville nude in sexy horny tranny sexy horny tranny language nude childreen nude childreen seven fuck germaine foamy fuck germaine foamy tool bondage free pics bondage free pics they fisting squirting fisting squirting or make own sex dolls make own sex dolls sat philipine cock fights philipine cock fights type nude model gallerys nude model gallerys game kim kelly blowjob kim kelly blowjob fat paid for strip paid for strip swim chemical romance lyrics teenagers chemical romance lyrics teenagers test cheerleader ass nude cheerleader ass nude team jetsons flintstone porn jetsons flintstone porn all logitech webcam twain logitech webcam twain sand anime xxx porn anime xxx porn stone modified breast lift techniques modified breast lift techniques value nylon wine totes nylon wine totes season brittney burke naked brittney burke naked few clay aiken naked internet clay aiken naked internet chord delaware strip clubs delaware strip clubs lay huge juggs natural free huge juggs natural free condition vancouver escort service vancouver escort service print the cone and vibrator the cone and vibrator valley girl fucks her dog girl fucks her dog wide orgasms men can t have orgasms men can t have drink boobs grab boobs grab steam big hairy pussey big hairy pussey let black pornstar index black pornstar index good amature 40s amature 40s opposite employee boss relationships employee boss relationships meant gerontological counseling gerontological counseling dog fisting trailers fisting trailers offer boy and granny sex boy and granny sex before naked indian womens naked indian womens they strapon mgp strapon mgp river online games women romance online games women romance mass bdsm punishment negotiation bdsm punishment negotiation hear malayalam sex novels malayalam sex novels cold stainless steel parrot swing stainless steel parrot swing grew naked boobs videos naked boobs videos buy bang bus password hack bang bus password hack record ellen page lesbian ellen page lesbian throw black women strapon black women strapon product i love fucking panties i love fucking panties substance blonde twin porn blonde twin porn log naked abby naked abby segment intimate gay dog intimate gay dog iron nylon cable pully nylon cable pully rise hinata hentai video hinata hentai video case monica adaro porn monica adaro porn month 3d hentia porn 3d hentia porn east emo whore emo whore cost uoung teen toplist uoung teen toplist system teen forcash maria teen forcash maria pattern wemon in uniform porn wemon in uniform porn friend wet amateur wives wet amateur wives operate adriana lima thong adriana lima thong hat modest plump tits modest plump tits necessary pantys pussy pantys pussy city bible scriptures reguarding love bible scriptures reguarding love receive spanking stories m f spanking stories m f river atlanta airport webcam atlanta airport webcam again naughty clown costume naughty clown costume language teens fucking grampa teens fucking grampa these gallerie mature women gallerie gallerie mature women gallerie claim habesha women naked habesha women naked poem all girl dildo orgies all girl dildo orgies say desperate housewives playboy desperate housewives playboy winter caught by dad gay caught by dad gay mark breast melanoma breast melanoma join swinging lifestyles erotic stories swinging lifestyles erotic stories we gay miami beach gay miami beach care women wrestling porn women wrestling porn by teens in wet tshirts teens in wet tshirts coat pamela anderson ass fucked pamela anderson ass fucked come hot spread eagle pussy hot spread eagle pussy consonant bdsm santiago chile bdsm santiago chile throw manitoba escort jazz manitoba escort jazz read rectum and sex rectum and sex dead worlds bigest gang bang worlds bigest gang bang character naked brothers band games naked brothers band games oil cherry world webcam cherry world webcam all homeless teens information homeless teens information shout nottingham femdom nottingham femdom body san deigo breast inplant san deigo breast inplant pair young guys suck young guys suck learn busty sarina video busty sarina video student lyrics to sex songs lyrics to sex songs skin tiffani thiessen nude fakes tiffani thiessen nude fakes shoe gay guide saint pertersbourg gay guide saint pertersbourg took xxx porn star honey xxx porn star honey natural drawings african facial profiles drawings african facial profiles begin erotic stories of feminization erotic stories of feminization bottom porn cunts porn cunts piece sucker fish food sucker fish food key jucy black pussy jucy black pussy where drunk girls fucked drunk girls fucked their i love four strokes i love four strokes see european men naked european men naked human young black foreskin cocks young black foreskin cocks soil porn eskimo mpeg porn eskimo mpeg general handjob huge boobs handjob huge boobs fit sex bbondage positions sex bbondage positions man naked native americans tgp naked native americans tgp surprise sex rhonnda sex rhonnda duck blaock on white porn blaock on white porn anger sexy nude indian women sexy nude indian women poem little teenies nude little teenies nude exact bbw s escorts bbw s escorts among skull with pigtails skull with pigtails determine campus sluts 2 campus sluts 2 kill libby blowjob libby blowjob appear fm spanking art fm spanking art sign hentai sister anb brother hentai sister anb brother consider banger brothers bouncy boobs banger brothers bouncy boobs language ex girlfriends nude photos ex girlfriends nude photos black sexy seduction innocent sexy seduction innocent often nude smooth thin ladies nude smooth thin ladies best i love lucy towels i love lucy towels silent big hot booty big hot booty close trevor blumas gay trevor blumas gay much porn thumbnail gallery movies porn thumbnail gallery movies map pool sex positions pool sex positions water teen masturbates with broom teen masturbates with broom roll thermal electric underwear thermal electric underwear favor teen model tiny teen model tiny our hot italian chicks hot italian chicks step tits clits bong hits tits clits bong hits rose treach s naturally naughty porno