array('page'=>array('int',1,'default'=>1)),'POST'=>array('mode'=>array(array('fb')),'s_home_title'=>array('string','default'=>''),'s_name'=>array('string','default'=>''),'s_no'=>array('int'),'url'=>array('string','default'=>''),'s_url'=>array('string','default'=>''),'s_post_title'=>array('string','default'=>''),'r1_no'=>array('int'),'r1_name'=>array('string','default'=>''),'r1_rno'=>array('int'),'r1_homepage'=>array('string','default'=>''),'r1_regdate'=>array('timestamp'),'r1_body'=>array('string'),'r1_url'=>array('string','default'=>''),'r2_no'=>array('int'),'r2_name'=>array('string','default'=>''),'r2_rno'=>array('int'),'r2_homepage'=>array('string','default'=>''),'r2_regdate'=>array('timestamp'),'r2_body'=>array('string'),'r2_url'=>array('string','default'=>''))); }else{ $IV=array('GET'=>array('page'=>array('int',1,'default'=>1))); } define('TATTERTOOLS_NAME','Tattertools'); define('TATTERTOOLS_VERSION','1.1.2.1 : Animato'); define('TATTERTOOLS_COPYRIGHT','Copyright © 2004-2007. Tatter & Company / Tatter & Friends. All rights reserved. Licensed under the GPL.'); define('TATTERTOOLS_HOMEPAGE','http://www.tattertools.com/'); define('TATTERTOOLS_SYNC_URL','http://ping.eolin.com/'); define('CRLF',"\r\n"); define('TAB'," "); $database['server']='localhost'; $database['database']=''; $database['username']=''; $database['password']=''; $database['prefix']=''; $service['timeout']=3600; $service['type']='single'; $service['domain']=''; $service['path']=''; $service['language']='ko'; $service['timezone']='Asia/Seoul'; $service['encoding']='EUC-KR'; $service['umask']=0; $service['skin']='tistory'; if(@is_numeric($_SERVER['SERVER_PORT'])&&($_SERVER['SERVER_PORT']!=80)&&($_SERVER['SERVER_PORT']!=443)) $service['port']=$_SERVER['SERVER_PORT']; function requireComponent($name){ include_once ("../components/$name.php"); } requireComponent('Eolin.PHP.UnifiedEnvironment'); requireComponent('Eolin.PHP.Core'); requireComponent('Tattertools.Core'); requireComponent('Tattertools.Core.BackwardCompatibility'); if(isset($IV)){ if(!Validator::validate($IV)){ header('HTTP/1.1 404 Not Found'); exit; } } $basicIV=array('SCRIPT_NAME'=>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 stripHTML($text,$allowTags=array()){ $text=preg_replace('/<(script|style)[^>]*>.*?<\/\1>/si','',$text); if(count($allowTags)==0) $text=preg_replace('/<[\w\/!]+[^>]*>/','',$text); else{ preg_match_all('/<\/?([\w!]+)[^>]*?>/s',$text,$matches); for($i=0;$i\\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,"",$pos2))===false) return $result.''; $pos2+=strlen($tag)+3; $chunk=substr($str,$pos1,$pos2-$pos1); if(substr_count($chunk,"<$tag")==substr_count($chunk,"")) break; } $result.=''; } return $result.substr($html,$pos2); } 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,$caseSensitive=true){ $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(!extension_loaded('gd')||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="$blogURL/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']); 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 DBQuery::queryCell("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=DBQuery::query("select * from {$database['prefix']}BlogSettings where owner = $owner")){ return mysql_fetch_array($result); } return false; } function getSkinSetting($owner){ global $database,$service; if($result=DBQuery::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 e.visibility > 0 AND (c.visibility > 1 OR e.category = 0)'; $archivesOnPage=DBQuery::queryCell("SELECT archivesOnPage FROM {$database['prefix']}SkinSettings WHERE owner = $owner"); $result=DBQuery::query("SELECT EXTRACT(year_month FROM FROM_UNIXTIME(e.published)) period, COUNT(*) count FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.category = c.id AND e.owner = c.owner WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.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 e.visibility > 0 AND (c.visibility > 1 OR e.category = 0)'; $result=DBQuery::query("SELECT DISTINCT DAYOFMONTH(FROM_UNIXTIME(e.published)) FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.category = c.id AND e.owner = c.owner WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0 AND YEAR(FROM_UNIXTIME(e.published)) = {$calendar['year']} AND MONTH(FROM_UNIXTIME(e.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 getAttachments($owner,$parent,$orderBy=null,$sort='ASC'){ global $database; $attachments=array(); if($result=DBQuery::query("select * from {$database['prefix']}Attachments where owner = $owner and parent = $parent ".(is_null($orderBy)?'':"ORDER BY $orderBy $sort"))){ while($attachment=mysql_fetch_array($result)) array_push($attachments,$attachment); } return $attachments; } function getAttachmentByOnlyName($owner,$name){ global $database; $name=mysql_tt_escape_string($name); return DBQuery::queryRow("select * from {$database['prefix']}Attachments where owner = $owner and name = '$name'"); } function deleteAttachment($owner,$parent,$name){ global $database; if(!Validator::filename($name)) return false; $origname=$name; $name=mysql_tt_escape_string($name); if(DBQuery::execute("delete from {$database['prefix']}Attachments where owner = $owner and name = '$name'")&&(mysql_affected_rows()==1)){ @unlink("../attach/$owner/$origname"); clearRSS(); return true; } return false; } function deleteAttachments($owner,$parent){ $attachments=getAttachments($owner,$parent); foreach($attachments as $attachment) deleteAttachment($owner,$parent,$attachment['name']); } function getCategoryNameById($owner,$id){ global $database; $result=DBQuery::queryCell("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=DBQuery::queryCell("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=DBQuery::queryAll("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=DBQuery::queryRow($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 updateEntriesOfCategory($owner,$id=-1){ global $database; $result=DBQuery::query("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner AND parent IS NULL"); while($row=mysql_fetch_array($result)){ $parent=$row['id']; $parentName=mysql_lessen($row['name'],127); $row['name']=mysql_tt_escape_string($parentName); $countParent=DBQuery::queryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND visibility > 0 AND category = $parent"); $countInLoginParent=DBQuery::queryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND category = $parent"); $result2=DBQuery::query("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner AND parent = $parent"); while($rowChild=mysql_fetch_array($result2)){ $label=mysql_tt_escape_string(mysql_lessen($parentName.'/'.$rowChild['name'],255)); $rowChild['name']=mysql_tt_escape_string(mysql_lessen($rowChild['name'],127)); $countChild=DBQuery::queryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND visibility > 0 AND category = {$rowChild['id']}"); $countInLogInChild=DBQuery::queryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND category = {$rowChild['id']}"); DBQuery::query("UPDATE {$database['prefix']}Categories SET entries = $countChild, entriesInLogin = $countInLogInChild, `label` = '$label' WHERE owner = $owner AND id = {$rowChild['id']}"); $countParent+=$countChild; $countInLoginParent+=$countInLogInChild; } DBQuery::query("UPDATE {$database['prefix']}Categories SET entries = $countParent, entriesInLogin = $countInLoginParent, `label` = '{$row['name']}' WHERE owner = $owner AND id = $parent"); } return true; } function getCategoryVisibility($owner,$id){ global $database; $result=DBQuery::queryCell("SELECT visibility FROM {$database['prefix']}Categories WHERE owner = $owner AND id = $id"); if($result==false) return 2; else return $result; } 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=DBQuery::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=DBQuery::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,$count=false,$isGuestbook=false){ global $skinSetting,$database; $comments=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner".($isGuestbook!=false?" AND entry=0":" AND entry>0")." AND isFiltered = 0 ORDER BY written DESC LIMIT ".($count!=false?$count:$skinSetting['commentsOnRecent']):"SELECT r.* FROM {$database['prefix']}Comments r LEFT JOIN {$database['prefix']}Entries e ON r.owner = e.owner AND r.entry = e.id LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id WHERE r.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND (c.visibility > 1 OR e.category = 0) ".($isGuestbook!=false?" AND r.entry = 0":" AND r.entry > 0")." AND isFiltered = 0 ORDER BY r.written DESC LIMIT ".($count!=false?$count:$skinSetting['commentsOnRecent']); if($result=DBQuery::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 notifyComment(){ global $database,$owner,$service,$blog,$defaultURL; $sql=" select CN.*, CNQ.id AS queueId, CNQ.commentId AS commentId, CNQ.sendStatus AS sendStatus, CNQ.checkDate AS checkDate, CNQ.written AS queueWritten from {$database['prefix']}CommentsNotifiedQueue AS CNQ LEFT JOIN {$database['prefix']}Comments AS CN ON CNQ.commentId = CN.id where CNQ.sendStatus = '0' and CN.parent is not null ORDER BY CNQ.id ASC limit 0, 1 "; $queue=DBQuery::queryRow($sql); if(empty($queue)&&empty($queue['queueId'])){ return false; } $comments=(DBQuery::queryRow("SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND id = {$queue['commentId']}")); if(empty($comments['parent'])||$comments['secret']==1){ DBQuery::execute("DELETE FROM {$database['prefix']}CommentsNotifiedQueue WHERE id={$queue['queueId']}"); return false; } $parentComments=(DBQuery::queryRow("SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND id = {$comments['parent']}")); if(empty($parentComments['homepage'])){ DBQuery::execute("DELETE FROM {$database['prefix']}CommentsNotifiedQueue WHERE id={$queue['queueId']}"); return false; } $entry=(DBQuery::queryRow("SELECT * FROM {$database['prefix']}Entries WHERE owner = $owner AND id={$comments['entry']}")); if($entry['id']==0){ $r1_comment_check_url=rawurlencode("$defaultURL/guestbook#comment".$parentComments['id']); $r2_comment_check_url=rawurlencode("$defaultURL/guestbook#comment".$comments['id']); }else{ $r1_comment_check_url=rawurlencode("$defaultURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id'])."#comment".$parentComments['id']); $r2_comment_check_url=rawurlencode("$defaultURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id'])."#comment".$comments['id']); } $data="url=".rawurlencode($defaultURL)."&mode=fb"."&s_home_title=".rawurlencode($blog['title'])."&s_post_title=".rawurlencode($entry['title'])."&s_name=".rawurlencode($comments['name'])."&s_no=".rawurlencode($comments['entry'])."&s_url=".rawurlencode("$defaultURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id']))."&r1_name=".rawurlencode($parentComments['name'])."&r1_no=".rawurlencode($parentComments['id'])."&r1_pno=".rawurlencode($comments['entry'])."&r1_rno=0"."&r1_homepage=".rawurlencode($parentComments['homepage'])."&r1_regdate=".rawurlencode($parentComments['written'])."&r1_url=".$r1_comment_check_url."&r2_name=".rawurlencode($comments['name'])."&r2_no=".rawurlencode($comments['id'])."&r2_pno=".rawurlencode($comments['entry'])."&r2_rno=".rawurlencode($comments['parent'])."&r2_homepage=".rawurlencode($comments['homepage'])."&r2_regdate=".rawurlencode($comments['written'])."&r2_url=".$r2_comment_check_url."&r1_body=".rawurlencode($parentComments['comment'])."&r2_body=".rawurlencode($comments['comment']); requireComponent('Eolin.PHP.HTTPRequest'); if(strpos($parentComments['homepage'],"http://")===false){ $homepage='http://'.$parentComments['homepage']; }else{ $homepage=$parentComments['homepage']; } $request=new HTTPRequest('POST',$homepage); $request->contentType='application/x-www-form-urlencoded; charset=utf-8'; $request->content=$data; if($request->send()){ $xmls=new XMLStruct(); if($xmls->open($request->responseText)){ $result=$xmls->selectNode('/response/error/'); if($result['.value']!='1'&&$result['.value']!='0'){ $homepage=rtrim($homepage,'/').'/index.php'; $request=new HTTPRequest('POST',$homepage); $request->contentType='application/x-www-form-urlencoded; charset=utf-8'; $request->content=$data; if($request->send()){ } } } }else{ } DBQuery::execute("DELETE FROM {$database['prefix']}CommentsNotifiedQueue WHERE id={$queue['queueId']}"); } function receiveNotifiedComment($post){ if(empty($post['mode'])||$post['mode']!='fb') return 1; global $database,$owner; $title=mysql_tt_escape_string(mysql_lessen($post['s_home_title'],255)); $name=mysql_tt_escape_string(mysql_lessen($post['s_name'],255)); $entryId=mysql_tt_escape_string($post['s_no']); $homepage=mysql_tt_escape_string(mysql_lessen($post['url'],255)); $entryUrl=mysql_tt_escape_string($post['s_url']); $entryTitle=mysql_tt_escape_string($post['s_post_title']); $parent_id=$post['r1_no']; $parent_name=mysql_tt_escape_string(mysql_lessen($post['r1_name'],80)); $parent_parent=$post['r1_rno']; $parent_homepage=mysql_tt_escape_string(mysql_lessen($post['r1_homepage'],80)); $parent_written=$post['r1_regdate']; $parent_comment=mysql_tt_escape_string(mysql_lessen($post['r1_body'],255)); $parent_url=mysql_tt_escape_string(mysql_lessen($post['r1_url'],255)); $child_id=$post['r2_no']; $child_name=mysql_tt_escape_string(mysql_lessen($post['r2_name'],80)); $child_parent=$post['r2_rno']; $child_homepage=mysql_tt_escape_string(mysql_lessen($post['r2_homepage'],80)); $child_written=$post['r2_regdate']; $child_comment=mysql_tt_escape_string(mysql_lessen($post['r2_body'],255)); $child_url=mysql_tt_escape_string(mysql_lessen($post['r2_url'],255)); $sql="SELECT id FROM {$database['prefix']}CommentsNotifiedSiteInfo WHERE url = '$homepage'"; $siteId=DBQuery::queryCell($sql); if(empty($siteId)){ if(DBQuery::execute("INSERT INTO {$database['prefix']}CommentsNotifiedSiteInfo VALUES ('', '$title', '$name', '$homepage', UNIX_TIMESTAMP());")) $siteId=mysql_insert_id(); else return 2; } $parentId=DBQuery::queryCell("SELECT id FROM {$database['prefix']}CommentsNotified WHERE entry = $entryId AND siteId = $siteId AND owner = $owner AND remoteId = $parent_id"); if(empty($parentId)){ $sql="INSERT INTO {$database['prefix']}CommentsNotified ( owner , replier , id , entry , parent , name , password , homepage , secret , comment , ip , written, modified , siteId , isNew , url , remoteId ,entryTitle , entryUrl ) VALUES ( $owner, NULL , '', ".$entryId.", ".(empty($parent_parent)?'null':$parent_parent).", '".$parent_name."', '', '".$parent_homepage."', '', '".$parent_comment."', '', ".$parent_written.",UNIX_TIMESTAMP(), ".$siteId.", 1, '".$parent_url."',".$parent_id.", '".$entryTitle."', '".$entryUrl."' );"; if(!DBQuery::execute($sql)) return 3; $parentId=mysql_insert_id(); } if(DBQuery::queryCell("SELECT count(*) FROM {$database['prefix']}CommentsNotified WHERE siteId=$siteId AND remoteId=$child_id")>0) return 4; $sql="INSERT INTO {$database['prefix']}CommentsNotified ( owner , replier , id , entry , parent , name , password , homepage , secret , comment , ip , written, modified , siteId , isNew , url , remoteId ,entryTitle , entryUrl ) VALUES ( $owner, NULL , '', ".$entryId.", $parentId, '$child_name', '', '$child_homepage', '', '$child_comment', '', $child_written, UNIX_TIMESTAMP(), $siteId, 1, '$child_url',$child_id, '$entryTitle', '$entryUrl');"; if(!DBQuery::execute($sql)) return 5; $sql="UPDATE {$database['prefix']}CommentsNotified SET modified = UNIX_TIMESTAMP() WHERE id=$parentId"; if(!DBQuery::execute($sql)) return 6; return 0; } 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 e.visibility > 0 AND (c.visibility > 1 OR e.category = 0)'; return DBQuery::queryCell("SELECT COUNT(*) FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.category = c.id AND e.owner = c.owner WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0"); } function getEntry($owner,$id,$draft=false){ global $database; if($id==0){ if($draft){ if(!$id=getDraftEntryId()) return ; }else{ if(!doesHaveOwnership()) return ; deleteAttachments($owner,0); return array('id'=>0,'draft'=>0,'visibility'=>0,'category'=>0,'location'=>'','title'=>'','content'=>'','acceptComment'=>1,'acceptTrackback'=>1,'published'=>time(),'slogan'=>''); } } if($draft){ $entry=DBQuery::queryRow("SELECT * FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 1"); if(!$entry) return ; if($entry['published']==1) $entry['republish']=true; elseif($entry['published']!=0) $entry['appointed']=$entry['published']; if($id!=0) $entry['published']=DBQuery::queryCell("SELECT published FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 0"); return $entry; }else{ $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $entry=DBQuery::queryRow("SELECT * FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 0 $visibility"); if(!$entry) return ; if($entry['visibility']<0) $entry['appointed']=$entry['published']; return $entry; } } function getEntriesWithPaging($owner,$page,$count){ global $database; $visibility=doesHaveOwnership()?'':'AND e.visibility > 0 AND (c.visibility > 1 OR e.category = 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 WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0 ORDER BY e.published DESC"; return fetchWithPaging($sql,$page,$count); } function getRecentEntries($owner){ global $database,$skinSetting; $entries=array(); $visibility=doesHaveOwnership()?'':'AND e.visibility > 0 AND (c.visibility > 1 OR e.category = 0)'; $result=DBQuery::query("SELECT e.id, e.title, e.comments FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id WHERE e.owner = $owner AND e.draft = 0 $visibility AND e.category >= 0 ORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}"); while($entry=mysql_fetch_array($result)){ array_push($entries,$entry); } return $entries; } function getDraftEntryId($id=0){ global $database,$owner; if($id) return DBQuery::queryCell("SELECT id FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 1"); else return DBQuery::queryCell("SELECT d.id FROM {$database['prefix']}Entries d LEFT JOIN {$database['prefix']}Entries e ON d.owner = e.owner AND d.id = e.id AND e.draft = 0 WHERE d.owner = $owner AND d.draft = 1 AND e.id IS NULL ORDER BY d.id LIMIT 1"); } function setEntryVisibility($id,$visibility){ global $database,$owner; if(($visibility<0)||($visibility>3)) return false; list($oldVisibility,$category)=DBQuery::queryRow("SELECT visibility, category FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 0"); if($category<0){ if($visibility==1) $visibility=0; if($visibility==3) $visibility=2; } if($oldVisibility===null) return false; if($visibility==$oldVisibility) return true; if($oldVisibility==3) syndicateEntry($id,'delete'); elseif($visibility==3){ if(!syndicateEntry($id,'create')){ DBQuery::query("UPDATE {$database['prefix']}Entries SET visibility = $oldVisibility, modified = UNIX_TIMESTAMP() WHERE owner = $owner AND id = $id"); return false; } } $result=DBQuery::query("UPDATE {$database['prefix']}Entries SET visibility = $visibility, modified = UNIX_TIMESTAMP() WHERE owner = $owner AND id = $id"); if(!$result) return false; if(mysql_affected_rows()==0) return true; if($category>=0){ if((($oldVisibility>=2)&&($visibility<2))||(($oldVisibility<2)&&($visibility>=2))) clearRSS(); if((($oldVisibility==3)&&($visibility<=2))||(($oldVisibility<=2)&&($visibility==3))) clearRSS(); if($category>0) updateEntriesOfCategory($owner,$category); } return true; } function syndicateEntry($id,$mode){ global $database,$blog,$owner,$defaultURL; requireComponent('Eolin.PHP.Core'); requireComponent('Eolin.PHP.XMLRPC'); $rpc=new XMLRPC(); $rpc->url=TATTERTOOLS_SYNC_URL; $summary=array('blogURL'=>$defaultURL,'syncURL'=>"$defaultURL/sync/$id"); if($mode=='create'){ $entry=getEntry($owner,$id); $summary['blogTitle']=$blog['title']; $summary['language']=$blog['language']; $summary['permalink']="$defaultURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id']); $summary['title']=$entry['title']; $summary['content']=UTF8::lessenAsByte(stripHTML(getEntryContentView($owner,$entry['id'],$entry['content'])),1023,''); $summary['author']=DBQuery::queryCell("SELECT name FROM {$database['prefix']}Users WHERE userid = $owner"); $summary['tags']=array(); foreach(DBQuery::queryAll("SELECT DISTINCT name FROM {$database['prefix']}Tags, {$database['prefix']}TagRelations WHERE id = tag AND owner = $owner AND entry = $id ORDER BY name") as $tag) array_push($summary['tags'],$tag['name']); $summary['location']=$entry['location']; $summary['written']=Timestamp::getRFC1123($entry['published']); } if(!$rpc->call("sync.$mode",$summary)) return false; if($rpc->fault) return false; return true; } function publishEntries(){ global $database,$owner; $entries=DBQuery::queryAll("SELECT id, visibility FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND visibility < 0 AND published < UNIX_TIMESTAMP()"); if(count($entries)==0) return ; foreach($entries as $i=>$entry){ $result=DBQuery::query("UPDATE {$database['prefix']}Entries SET visibility = 0 WHERE owner = $owner AND id = {$entry['id']} AND draft = 0"); if($entry['visibility']==-3){ if($result&&(mysql_affected_rows()>0)&&setEntryVisibility($entry['id'],2)) setEntryVisibility($entry['id'],3); }else{ if($result&&(mysql_affected_rows()>0)) setEntryVisibility($entry['id'],abs($entry['visibility'])); } } } 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=DBQuery::query("SELECT title FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category = -1 ORDER BY char_length(title) DESC"); while(list($name)=mysql_fetch_array($result)) array_push($names,$name); return $names; } function getNotices($owner){ global $database; $visibility=doesHaveOwnership()?'':'AND visibility = 2'; return DBQuery::queryAll("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=DBQuery::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=',$countItem=null){ 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']=DBQuery::queryCell("SELECT COUNT(*) $from"); if($paging['total']===null) return array(array(),$paging); if(empty($count)) $count=1; $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; if($countItem!=null) $count=$countItem; return array(DBQuery::queryAll("$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=DBQuery::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',"; $isaiExists=false; foreach($fields as $field){ $ai=''; if(strtolower($field['attribute'])=='int'||strtolower($field['attribute'])=='mediumint'){ if(true==$field['autoincrement']&&!$isaiExists){ $ai=' AUTO_INCREMENT '; $isaiExists=true; } } $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.$ai.","; $query.=$sentence; } array_unshift($keys,'owner'); $query.=" PRIMARY KEY (".implode(',',$keys).")"; $query.=") TYPE=MyISAM "; $query.=($database['utf8']==true)?'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 clearRSS(){ global $owner; @unlink("../cache/rss/$owner.xml"); } 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=DBQuery::query("select visits from {$database['prefix']}BlogStatistics where owner = $owner"); if(mysql_num_rows($result)==1) list($stats['total'])=mysql_fetch_array($result); $result=DBQuery::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=DBQuery::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=DBQuery::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(DBQuery::query("insert into {$database['prefix']}SessionVisits values('$id', '{$_SERVER['REMOTE_ADDR']}', $owner)")&&(mysql_affected_rows()>0)){ DBQuery::query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner"); if(mysql_affected_rows()==0){ if(DBQuery::query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner")||(mysql_affected_rows()==0)) DBQuery::query("insert into {$database['prefix']}BlogStatistics values($owner, 1)"); } $period=Timestamp::getDate(); DBQuery::query("update {$database['prefix']}DailyStatistics set visits = visits + 1 where owner = $owner and `date` = $period"); if(mysql_affected_rows()==0){ if(!DBQuery::query("insert into {$database['prefix']}DailyStatistics values($owner, $period, 1)")||(mysql_affected_rows()==0)) DBQuery::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)); DBQuery::query("insert into {$database['prefix']}RefererLogs values($owner, '$host', '$url', UNIX_TIMESTAMP())"); DBQuery::query("delete from {$database['prefix']}RefererLogs where referred < UNIX_TIMESTAMP() - 604800"); if(!DBQuery::query("update {$database['prefix']}RefererStatistics set count = count + 1 where owner = $owner and host = '$host'")||(mysql_affected_rows()==0)) DBQuery::query("insert into {$database['prefix']}RefererStatistics values($owner, '$host', 1)"); } } } } function getTrackbacks($entry){ global $database,$owner; $trackbacks=array(); $result=DBQuery::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,$count=false){ global $database; global $skinSetting; $trackbacks=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Trackbacks WHERE owner = $owner AND isFiltered = 0 ORDER BY written DESC LIMIT ".($count!=false?$count:$skinSetting['trackbacksOnRecent']):"SELECT t.* FROM {$database['prefix']}Trackbacks t LEFT JOIN {$database['prefix']}Entries e ON t.owner = e.owner AND t.entry = e.id LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id WHERE t.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND (c.visibility > 1 OR e.category = 0) AND t.isFiltered = 0 ORDER BY t.written DESC LIMIT ".($count=false?$count:$skinSetting['trackbacksOnRecent']); if($result=DBQuery::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 getTags($entry){ global $database,$owner; $tags=array(); if(doesHaveOwnership()) $result=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::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=DBQuery::queryCell("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=DBQuery::queryCell("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 = e.owner 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']); DBQuery::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=DBQuery::queryColumn("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); DBQuery::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;?>

... "; 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(preg_match("@\\[##_{$tag}_##\\]@iU",$contents)){ $contents=str_replace("[##_{$tag}_##]",$value,$contents); return true; }else{ return false; } } function getUpperView($paging){ global $service,$blogURL; ob_start();?> trackbackContainer; $trackbacksView=''; $trackbacks=getTrackbacks($entryId); foreach($trackbacks as $trackback){ $trackbackView=$skin->trackback; dress('tb_rep_title',htmlspecialchars($trackback['subject']),$trackbackView); dress('tb_rep_site',htmlspecialchars($trackback['site']),$trackbackView); dress('tb_rep_url',htmlspecialchars($trackback['url']),$trackbackView); dress('tb_rep_desc',htmlspecialchars($trackback['excerpt']),$trackbackView); dress('tb_rep_onclick_delete',"deleteTrackback({$trackback['id']}, $entryId)",$trackbackView); dress('tb_rep_date',fireEvent('ViewTrackbackDate',Timestamp::format5($trackback['written'])),$trackbackView); if(dress('tb_rep_id','trackback'.$trackback['id'],$trackbackView)==false){ $trackbackView="".$trackbackView; } $trackbacksView.=$trackbackView; } if(count($trackbacks)>0){ dress('tb_rep',$trackbacksView,$trackbacksContainer); }else{ $trackbacksContainer=''; } if($skinSetting['expandTrackback']==1||(($suri['url']!=$blogURL.'/index.php'&&$suri['url']!=$service['path'].'/index.php')&&($suri['directive']=='/'||$suri['directive']=='/entry')&&$suri['value']!='')){ $style='block'; }else{ $style='none'; } $trackbacksView="
".str_replace('[##_tb_container_##]',$trackbacksContainer,$skin->trackbacks).'
'; dress('tb_address',"$defaultURL/trackback/$entryId",$trackbacksView); return $trackbacksView; } function getCommentView($entryId,$skin){ global $database,$blogURL,$service,$owner,$suri,$paging; $authorized=doesHaveOwnership(); $skinValue=getSkinSetting($owner); $blogSetting=getBlogSetting($owner); if($entryId>0){ $prefix1='rp'; $isComment=true; }else{ $prefix1='guest'; $isComment=false; } $commentView=($isComment?$skin->comment:$skin->guest); $commentItemsView=''; if($isComment==false){ list($comments,$paging)=getCommentsWithPagingForGuestbook($owner,$suri['page'],$skinValue['commentsOnGuestbook']); foreach($comments as $key=>$value){ if($value['secret']==1&&!$authorized){ $comments[$key]['name']=''; $comments[$key]['homepage']=''; $comments[$key]['comment']=_text('관리자만 볼 수 있는 댓글입니다.'); } } }else{ $comments=getComments($entryId); } foreach($comments as $commentItem){ $commentItemView=($isComment?$skin->commentItem:$skin->guestItem); $commentSubItemsView=''; $subComments=getCommentComments($commentItem['id']); foreach($subComments as $commentSubItem){ $commentSubItemView=($isComment?$skin->commentSubItem:$skin->guestSubItem); if(empty($commentSubItem['homepage'])){ dress($prefix1.'_rep_name',fireEvent(($isComment?'ViewCommenter':'ViewGuestCommenter'),htmlspecialchars($commentSubItem['name']),$commentSubItem),$commentSubItemView); }else{ dress($prefix1.'_rep_name',fireEvent(($isComment?'ViewCommenter':'ViewGuestCommenter'),''.htmlspecialchars($commentSubItem['name']).'',$commentSubItem),$commentSubItemView); } dress($prefix1.'_rep_desc',fireEvent(($isComment?'ViewCommentContent':'ViewGuestCommentContent'),nl2br(addLinkSense(htmlspecialchars($commentSubItem['comment']),' onclick="return openLinkInNewWindow(this)"')),$commentSubItem),$commentSubItemView); dress($prefix1.'_rep_date',fireEvent(($isComment?'ViewCommentDate':'ViewGuestCommentDate'),Timestamp::format5($commentSubItem['written'])),$commentSubItemView); dress($prefix1.'_rep_link',"$blogURL/".($entryId==0?"guestbook":"{$entryId}")."#comment{$commentSubItem['id']}",$commentSubItemView); dress($prefix1.'_rep_onclick_delete',"deleteComment({$commentSubItem['id']}); return false;",$commentSubItemView); $rp_class=$prefix1.'_general'; if($owner==$commentSubItem['replier']) $rp_class=$prefix1.'_admin'; elseif($commentSubItem['secret']==1){ $rp_class=$prefix1.'_secret'; if(!$authorized) $rp_class.=' hiddenComment'; } dress($prefix1.'_rep_class',$rp_class,$commentSubItemView); if(dress($prefix1.'_rep_id','comment'.$commentSubItem['id'],$commentSubItemView)==false){ $commentSubItemView="".$commentSubItemView; } $commentSubItemsView.=$commentSubItemView; } $commentSubContainer=($isComment?$skin->commentSubContainer:$skin->guestSubContainer); dress(($isComment?'rp2_rep':'guest_reply_rep'),$commentSubItemsView,$commentSubContainer); if(count($subComments)>0){ dress(($isComment?'rp2_container':'guest_reply_container'),$commentSubContainer,$commentItemView); } if(empty($commentItem['homepage'])){ dress($prefix1.'_rep_name',fireEvent(($isComment?'ViewCommenter':'ViewGuestCommenter'),htmlspecialchars($commentItem['name']),$commentItem),$commentItemView); }else{ dress($prefix1.'_rep_name',fireEvent(($isComment?'ViewCommenter':'ViewGuestCommenter'),''.htmlspecialchars($commentItem['name']).'',$commentItem),$commentItemView); } dress($prefix1.'_rep_desc',fireEvent(($isComment?'ViewCommentContent':'ViewGuestCommentContent'),nl2br(addLinkSense(htmlspecialchars($commentItem['comment']),' onclick="return openLinkInNewWindow(this)"')),$commentItem),$commentItemView); dress($prefix1.'_rep_date',fireEvent(($isComment?'ViewCommentDate':'ViewGuestCommentDate'),Timestamp::format5($commentItem['written'])),$commentItemView); if($prefix1=='guest'&&$authorized!=true&&$blogSetting['allowWriteDoubleCommentOnGuestbook']==0){ $doubleCommentPermissionScript='alert(\''._text('댓글을 사용할 수 없습니다.').'\'); return false;'; }else{ $doubleCommentPermissionScript=''; } dress($prefix1.'_rep_onclick_reply',$doubleCommentPermissionScript."commentComment({$commentItem['id']}); return false",$commentItemView); dress($prefix1.'_rep_onclick_delete',"deleteComment({$commentItem['id']});return false",$commentItemView); dress($prefix1.'_rep_link',"$blogURL/".($entryId==0?"guestbook":"{$entryId}")."#comment{$commentItem['id']}",$commentItemView); $rp_class=$prefix1.'_general'; if($owner==$commentItem['replier']) $rp_class=$prefix1.'_admin'; elseif($commentItem['secret']==1){ $rp_class=$prefix1.'_secret'; if(!$authorized) $rp_class.=' hiddenComment'; } dress($prefix1.'_rep_class',$rp_class,$commentItemView); if(dress($prefix1.'_rep_id','comment'.$commentItem['id'],$commentItemView)==false){ $commentItemView="".$commentItemView; } $commentItemsView.=$commentItemView; } $commentContainer=($isComment?$skin->commentContainer:$skin->guestContainer); dress(($isComment?'rp_rep':'guest_rep'),$commentItemsView,$commentContainer); if(count($comments)>0){ dress($prefix1.'_container',$commentContainer,$commentView); } $acceptComment=DBQuery::queryCell("SELECT `acceptComment` FROM `{$database['prefix']}Entries` WHERE `id` = $entryId"); $useForm=false; if($isComment){ if(!($skin->commentForm=='')){ $commentRrevView=$commentView; $commentView=$skin->commentForm; $useForm=true; } }else{ if(!($skin->guestForm=='')){ $commentRrevView=$commentView; $commentView=$skin->guestForm; $useForm=true; } } if(doesHaveOwnership()||($isComment&&$acceptComment==1)||($isComment==false)||($useForm==false)){ if(!doesHaveOwnership()){ $commentMemberView=($isComment?$skin->commentMember:$skin->guestMember); if(!doesHaveMembership()){ $commentGuestView=($isComment?$skin->commentGuest:$skin->guestGuest); dress($prefix1.'_input_name','name',$commentGuestView); dress($prefix1.'_input_password','password',$commentGuestView); dress($prefix1.'_input_homepage','homepage',$commentGuestView); if(!empty($_POST["name_$entryId"])) $guestName=htmlspecialchars($_POST["name_$entryId"]); elseif(!empty($_COOKIE['guestName'])) $guestName=htmlspecialchars($_COOKIE['guestName']); else $guestName=''; dress('guest_name',$guestName,$commentGuestView); if(!empty($_POST["homepage_$entryId"])&&$_POST["homepage_$entryId"]!='http://'){ if(strpos($_POST["homepage_$entryId"],'http://')===0) $guestHomepage=htmlspecialchars($_POST["homepage_$entryId"]); else $guestHomepage='http://'.htmlspecialchars($_POST["homepage_$entryId"]); }elseif(!empty($_COOKIE['guestHomepage'])) $guestHomepage=htmlspecialchars($_COOKIE['guestHomepage']); else $guestHomepage='http://'; dress('guest_homepage',$guestHomepage,$commentGuestView); dress($prefix1.($isComment?'_guest':'_form'),$commentGuestView,$commentMemberView); } dress($prefix1.'_input_is_secret','secret',$commentMemberView); dress($prefix1.'_member',$commentMemberView,$commentView); } dress($prefix1.'_input_comment','comment',$commentView); dress($prefix1.'_onclick_submit',"addComment(this, $entryId); return false;",$commentView); dress($prefix1.'_textarea_body','comment',$commentView); dress($prefix1.'_textarea_body_value','',$commentView); }elseif($useForm==true){ $commentView=''; } if($useForm==true){ dress($prefix1.'_input_form',"
".$commentView.'
',$commentRrevView); $commentView=$commentRrevView; }else{ $commentView="
".$commentView.'
'; } return $commentView; } function getCategoriesView($totalPosts,$categories,$selected,$xhtml=false){ global $blogURL,$owner; $categoryCount=0; $categoryCountAll=0; $parentCategoryCount=0; $tree=array('id'=>0,'label'=>getCategoryNameById($owner,0),'value'=>$totalPosts,'link'=>"$blogURL/category",'children'=>array()); foreach($categories as $category1){ $children=array(); if(doesHaveOwnership()||getCategoryVisibility($owner,$category1['id'])>1){ foreach($category1['children'] as $category2){ if(doesHaveOwnership()||getCategoryVisibility($owner,$category2['id'])>1){ array_push($children,array('id'=>$category2['id'],'label'=>$category2['name'],'value'=>(doesHaveOwnership()?$category2['entriesInLogin']:$category2['entries']),'link'=>"$blogURL/category/".encodeURL($category2['label']),'children'=>array())); $categoryCount=$categoryCount+(doesHaveOwnership()?$category2['entriesInLogin']:$category2['entries']); } $categoryCountAll=$categoryCountAll+(doesHaveOwnership()?$category2['entriesInLogin']:$category2['entries']); } $parentCategoryCount=(doesHaveOwnership()?$category1['entriesInLogin']-$categoryCountAll:$category1['entries']-$categoryCountAll); array_push($tree['children'],array('id'=>$category1['id'],'label'=>$category1['name'],'value'=>$categoryCount+$parentCategoryCount,'link'=>"$blogURL/category/".encodeURL($category1['label']),'children'=>$children)); $categoryCount=0; $categoryCountAll=0; $parentCategoryCount=0; } } 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; } function getEntryContentView($owner,$id,$content,$keywords=array(),$type='Post',$useAbsolutePath=false,$bRssMode=false){ global $service; $path="../attach/$owner"; $url="{$service['path']}/attach/$owner"; $view=bindAttachments($id,$path,$url,$content,$useAbsolutePath,$bRssMode); $view=is_array($keywords)?bindKeywords($keywords,$view):$view; $view=bindTags($id,$view); if(!$useAbsolutePath) $view=avoidFlashBorder($view); return fireEvent('View'.$type.'Content',$view,$id); } function bindTags($id,$content){ for($no=0;(($start=strpos($content,'[#M_'))!==false)&&(($end=strpos($content,'_M#]',$start+4))!==false);$no++){ $prefix=substr($content,0,$start); list($more,$less,$full)=explode('|',substr($content,$start+4,$end-$start-4),3); if(strlen($more)==0) $more='more..'; if(strlen($less)==0) $less='less..'; $more2=htmlspecialchars(str_replace("\"",""",str_replace("'","'",$more))); $less2=htmlspecialchars(str_replace("\"",""",str_replace("'","'",$less))); $postfix=substr($content,$end+4); $content=$prefix; { $content.="

$more

$full
"; } $content.=$postfix; } return $content; } function bindKeywords($keywords,$content){ if(empty($keywords)) return $content; $result=preg_split('@( # ]+ )* )? # end of element > # redundant closure need to keep num of capturing patterns to 4 () | # TT special pattern \[\#\#_.*?_\#\#] )@x',$content,-1,PREG_SPLIT_DELIM_CAPTURE); $stack=array(); $buf=''; $i=0; $pattern=array(); foreach($keywords as $keyword) $pattern[]=preg_quote($keyword,'/'); $pattern='/(?=count($result)) break; if($result[$i]{0}=='<'){ if($result[$i]{1}=='/'){ $index=array_search(strtolower($result[$i+1]),$stack); if($index===false){ }else{ array_splice($stack,0,$index+1); $inUnableContexts=checkKeyWordUnBindableContext($inUnableContexts,$stack); } }else{ $t=strlen($result[$i])-2; if($result[$i]{$t>=0?$t:0}!='/'&&!in_array(strtolower($result[$i+1]),array('br','hr','img','input'))){ array_unshift($stack,strtolower($result[$i+1])); $inUnableContexts=checkKeyWordUnBindableContext($inUnableContexts,$stack); } } $buf.=$result[$i]; $i+=4; }else{ $buf.=$result[$i++]; } } return $buf; } function checkKeyWordUnBindableContext($curAblale,$currentContext){ $inUnableContexts=false; $inUnableContexts|=array_search('a',$currentContext)!==false; $inUnableContexts|=array_search('object',$currentContext)!==false; $inUnableContexts|=array_search('applet',$currentContext)!==false; $inUnableContexts|=array_search('select',$currentContext)!==false; $inUnableContexts|=array_search('option',$currentContext)!==false; $inUnableContexts|=array_search('optgroup',$currentContext)!==false; $inUnableContexts|=array_search('textarea',$currentContext)!==false; $inUnableContexts|=array_search('button',$currentContext)!==false; $inUnableContexts|=array_search('isindex',$currentContext)!==false; $inUnableContexts|=array_search('title',$currentContext)!==false; $inUnableContexts|=array_search('meta',$currentContext)!==false; $inUnableContexts|=array_search('base',$currentContext)!==false; $inUnableContexts|=array_search('link',$currentContext)!==false; $inUnableContexts|=array_search('style',$currentContext)!==false; $inUnableContexts|=array_search('head',$currentContext)!==false; $inUnableContexts|=array_search('script',$currentContext)!==false; $inUnableContexts|=array_search('embed',$currentContext)!==false; $inUnableContexts|=array_search('address',$currentContext)!==false; $inUnableContexts|=array_search('pre',$currentContext)!==false; $inUnableContexts|=array_search('param',$currentContext)!==false; return $inUnableContexts; } function bindAttachments($entryId,$folderPath,$folderURL,$content,$useAbsolutePath=false,$bRssMode=false){ global $service,$owner,$hostURL,$blogURL; $view=str_replace('[##_ATTACH_PATH_##]',($useAbsolutePath?"$hostURL{$service['path']}/attach/$owner":$folderURL),$content); $view=str_replace('http://tt_attach_path/',($useAbsolutePath?"$hostURL{$service['path']}/attach/$owner/":($folderURL.'/')),$view); $count=0; $bWritedGalleryJS=false; while((($start=strpos($view,'[##_'))!==false)&&(($end=strpos($view,'_##]',$start+4))!==false)){ $count++; $attributes=explode('|',substr($view,$start+4,$end-$start-4)); $prefix=''; $buf=''; if($attributes[0]=='Gallery'){ if(count($attributes)%2==1) array_pop($attributes); if(defined('__TATTERTOOLS_MOBILE__')||($bRssMode==true)){ $images=array_slice($attributes,1,count($attributes)-2); for($i=0;$i'; elseif(strlen($images[$i])>0) $buf.="
$images[$i]
"; } } }else{ $id="gallery$entryId$count"; $cssId="tt-gallery-$entryId-$count"; $items=array(); for($i=1;$i'.CRLF; $buf.=' '.CRLF; $buf.=' '.CRLF; $buf.=''.CRLF; } }elseif($attributes[0]=='iMazing'){ if(defined('__TATTERTOOLS_MOBILE__')||($bRssMode==true)){ $images=array_slice($attributes,1,count($attributes)-3); for($i=0;$i'; } $buf.=$attributes[count($attributes)-1]; }else{ $params=getAttributesFromString($attributes[sizeof($attributes)-2]); $id=$entryId.$count; $imgs=array_slice($attributes,1,count($attributes)-3); $imgStr=''; for($i=0;$i'; }else{ $caption=''; } $buf.='
'._text('확대').''; $buf.=''; $buf.=''; $buf.=''; $buf.=''; $buf.='
'; $buf.='
'; $buf.='
'.$caption.'
'; } }elseif($attributes[0]=='Jukebox'){ { $params=getAttributesFromString($attributes[sizeof($attributes)-2]); foreach($params as $key=>$value){ if($key=='autoPlay'){ unset($params['autoplay']); $params['autoplay']=$value; } } if($params['visible']==1){ $width='250px'; $height='27px'; }else{ $width='0px'; $height='0px'; } $id=$entryId.$count; $imgs=array_slice($attributes,1,count($attributes)-3); $imgStr=''; for($i=0;$i'; }else{ $caption=''; } $buf='
'; $buf.='
'; $buf.=''; $buf.='
'.$caption.'
'; } }else{ $contentWidth=getContentWidth(); switch(count($attributes)){ case 4: list($newProperty,$onclickFlag)=createNewProperty($attributes[1],$contentWidth,$attributes[2]); { if(trim($attributes[3])==''){ $caption=''; }else{ $caption='

'.$attributes[3].'

'; } switch($attributes[0]){ case '1L': $prefix='
'; break; case '1R': $prefix='
'; break; case '1C': default: $prefix='
'; break; } $buf=$prefix.getAttachmentBinder($attributes[1],$newProperty,$folderPath,$folderURL,1,$useAbsolutePath,$bRssMode,$onclickFlag).$caption.'
'; } break; case 7: $eachImageWidth=floor(($contentWidth-5*3)/2); list($newProperty1,$onclickFlag1)=createNewProperty($attributes[1],$eachImageWidth,$attributes[2]); list($newProperty2,$onclickFlag2)=createNewProperty($attributes[4],$eachImageWidth,$attributes[5]); { $cap1=strlen(trim($attributes[3]))>0?'

'.$attributes[3].'

':''; $cap2=strlen(trim($attributes[6]))>0?'

'.$attributes[6].'

':''; $buf='
'.getAttachmentBinder($attributes[1],$newProperty1,$folderPath,$folderURL,2,$useAbsolutePath,$bRssMode,$onclickFlag1).$cap1.''.getAttachmentBinder($attributes[4],$newProperty2,$folderPath,$folderURL,2,$useAbsolutePath,$bRssMode,$onclickFlag2).$cap2.'
'; } break; case 10: $eachImageWidth=floor(($contentWidth-5*4)/3); list($newProperty1,$onclickFlag1)=createNewProperty($attributes[1],$eachImageWidth,$attributes[2]); list($newProperty2,$onclickFlag2)=createNewProperty($attributes[4],$eachImageWidth,$attributes[5]); list($newProperty3,$onclickFlag3)=createNewProperty($attributes[7],$eachImageWidth,$attributes[8]); { $cap1=strlen(trim($attributes[3]))>0?'

'.$attributes[3].'

':''; $cap2=strlen(trim($attributes[6]))>0?'

'.$attributes[6].'

':''; $cap3=strlen(trim($attributes[9]))>0?'

'.$attributes[9].'

':''; $buf='
'.getAttachmentBinder($attributes[1],$newProperty1,$folderPath,$folderURL,3,$useAbsolutePath,$bRssMode,$onclickFlag1).$cap1.''.getAttachmentBinder($attributes[4],$newProperty2,$folderPath,$folderURL,3,$useAbsolutePath,$bRssMode,$onclickFlag2).$cap2.''.getAttachmentBinder($attributes[7],$newProperty3,$folderPath,$folderURL,3,$useAbsolutePath,$bRssMode,$onclickFlag3).$cap3.'
'; } break; } } $view=substr($view,0,$start).$buf.substr($view,$end+4); } return $view; } function getAttachmentBinder($filename,$property,$folderPath,$folderURL,$imageBlocks=1,$useAbsolutePath=false,$bRssMode=false,$onclickFlag=false){ global $database,$skinSetting,$service,$owner,$blogURL,$hostURL,$waterMarkArray,$paddingArray,$serviceURL; $path="$folderPath/$filename"; if($useAbsolutePath) $url="$serviceURL/attach/$owner/$filename"; else $url="$folderURL/$filename"; $fileInfo=getAttachmentByOnlyName($owner,$filename); switch(getFileExtension($filename)){ case 'jpg': case 'jpeg': case 'gif': case 'png': case 'bmp': $bPassing=false; { if(($onclickFlag==true)&&($bRssMode==false)&&($bPassing==false)){ $imageStr=''; }else{ $imageStr=''; } return makeThumbnail(fireEvent('ViewAttachedImage',$imageStr,$path),$path,$paddingArray,$waterMarkArray,$useAbsolutePath); } break; case 'swf': $id=md5($url).rand(1,10000); if(($useAbsolutePath)&&(strncasecmp($url,'http://',7)==0)) $url=substr($url,7); return ""; break; case 'wmv': case 'avi': case 'asf': case 'mpg': case 'mpeg': $id=md5($url).rand(1,10000); if(($useAbsolutePath)&&(strncasecmp($url,'http://',7)==0)) $url=substr($url,7); return ""; break; case 'mp3': case 'mp2': case 'wma': case 'wav': case 'mid': case 'midi': $id=md5($url).rand(1,10000); if(($useAbsolutePath)&&(strncasecmp($url,'http://',7)==0)) $url=substr($url,7); return ""; break; case 'mov': $id=md5($url).rand(1,10000); return ""; break; default: if(file_exists(ROOT.'/image/extension/'.getFileExtension($filename).'.gif')){ return ''.fireEvent('ViewAttachedFileExtension','').' '.htmlspecialchars($fileInfo['label']).''; }else{ return ''.fireEvent('ViewAttachedFileExtension','').' '.htmlspecialchars($fileInfo['label']).''; } break; } } function printScript($filename,$obfuscate=true){ global $service,$hostURL,$blogURL; if(!$file=@file_get_contents("../script/$filename")) return ''; $file=""; } function createNewProperty($filename,$imageWidth,$property){ global $owner; if(!file_exists("../attach/$owner/$filename")) return array($property,false); if($tempInfo=getimagesize("../attach/$owner/$filename")){ list($originWidth,$originHeight,$type,$attr)=$tempInfo; if($originWidth<=0||$originHeight<=0) return array($property,false); }else{ return array($property,false); } $attributes=getAttributesFromString($property,false); if(array_key_exists('width',$attributes)){ if(preg_match('/([\d.]+)(%?)/',$attributes['width'],$matches)){ if($matches[2]=='%') $attributes['width']=round($originWidth*$matches[1]/100); else $attributes['width']=intval($matches[1]); } } if(array_key_exists('height',$attributes)){ if(preg_match('/([\d.]+)(%?)/',$attributes['height'],$matches)){ if($matches[2]=='%') $attributes['height']=round($originHeight*$matches[1]/100); else $attributes['height']=intval($matches[1]); } } if($attributes['width']===0||$attributes['height']===0){ return array($property,false); } if(isset($attributes['width'])&&!isset($attributes['height'])){ $attributes['height']=floor($originHeight*$attributes['width']/$originWidth); }elseif(!isset($attributes['width'])&&isset($attributes['height'])){ $attributes['width']=floor($originWidth*$attributes['height']/$originHeight); }elseif(!isset($attributes['width'])&&!isset($attributes['height'])){ $attributes['width']=$originWidth; $attributes['height']=$originHeight; } if($attributes['width']>$imageWidth){ $tempWidth=$imageWidth; $tempHeight=floor($attributes['height']*$imageWidth/$attributes['width']); }else{ $tempWidth=$attributes['width']; $tempHeight=$attributes['height']; } $properties=array(); ksort($attributes); foreach($attributes as $key=>$value) array_push($properties,"$key=\"$value\""); $property=implode(' ',$properties); $onclickFlag=($originWidth>$tempWidth||$originHeight>$tempHeight); return array($property,$onclickFlag); } 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); $this->noneCommentMessage=str_replace('./',"{$service['path']}/skin/$name/",$this->noneCommentMessage); $this->singleCommentMessage=str_replace('./',"{$service['path']}/skin/$name/",$this->singleCommentMessage); $this->noneTrackbackMessage=str_replace('./',"{$service['path']}/skin/$name/",$this->noneTrackbackMessage); $this->singleTrackbackMessage=str_replace('./',"{$service['path']}/skin/$name/",$this->singleTrackbackMessage); 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(); } if(!empty($_POST['mode'])&&$_POST['mode']=='fb'){ $result=receiveNotifiedComment($_POST); if($result>0) echo "1error($result)"; else echo "0"; exit; }else{ $IV=array('POST'=>array()); if(!Validator::validate($IV)) respondNotFoundPage(); notifyComment(); } publishEntries(); list($entries,$paging)=getEntriesWithPaging($owner,$suri['page'],$blog['entriesOnPage']); 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(!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); }elseif($suri['directive']=='/'&&is_numeric($suri['value'])){ dress('body_id',"tt-body-entry",$view); }elseif($suri['directive']=='/'){ dress('body_id',"tt-body-page",$view); }else{ dress('body_id',"tt-body-".ltrim($suri['directive'],'/'),$view); } $entriesView=''; foreach($entries as $entry){ if($suri['directive']=='/notice') $permalink="$blogURL/notice/{$entry['id']}"; elseif($suri['directive']=='/page') $permalink="$blogURL/page/{$entry['id']}"; else $permalink="$blogURL/".($blog['useSlogan']?"entry/".encodeURL($entry['slogan']):$entry['id']); if($entry['category']==-2){ $entryView=$skin->noticeItem; dress('notice_rep_date',fireEvent('ViewNoticeDate',Timestamp::format5($entry['published'])),$entryView); dress('notice_rep_title',htmlspecialchars(fireEvent('ViewNoticeTitle',$entry['title'],$entry['id'])),$entryView); if($suri['directive']=='/notice') dress('notice_rep_link',"$blogURL/notice/{$entry['id']}",$entryView); else dress('notice_rep_link',"$blogURL/page/{$entry['id']}",$entryView); dress('notice_rep_desc',getEntryContentView($owner,$entry['id'],$entry['content'],getKeywordNames($owner),'Notice'),$entryView); $entriesView.=$entryView; }elseif(doesHaveOwnership()||($entry['visibility']>=2)||(isset($_COOKIE['GUEST_PASSWORD'])&&(trim($_COOKIE['GUEST_PASSWORD'])==trim($entry['password'])))){ $entryView=$skin->entry; dress('tb',getTrackbacksView($entry['id'],$skin),$entryView); if($skinSetting['expandComment']==1||(($suri['url']!=$blogURL.'/index.php'&&$suri['url']!=$service['path'].'/index.php')&&($suri['directive']=='/'||$suri['directive']=='/entry')&&$suri['value']!='')){ $style='block'; }else{ $style='none'; } dress('rp',"
".getCommentView($entry['id'],$skin).'
',$entryView); $tagLabelView=$skin->tagLabel; $entryTags=getTags($entry['id']); if(sizeof($entryTags)>0){ $tags=array(); foreach($entryTags as $entryTag) array_push($tags,"'); $tags=fireEvent('ViewTagLists',$tags,$entry['id']); dress('tag_label_rep',implode(",\r\n",$tags),$tagLabelView); dress('tag_label',$tagLabelView,$entryView); } if(doesHaveOwnership()){ $managementView=$skin->management; dress('s_ad_m_link',"$blogURL/owner/entry/edit/{$entry['id']}?returnURL=".(@$service['useEncodedURL']?$permalink:str_replace('%2F','/',rawurlencode($permalink))),$managementView); dress('s_ad_m_onclick',"editEntry({$entry['id']},'".(@$service['useEncodedURL']?$permalink:str_replace('%2F','/',rawurlencode($permalink)))."'); return false;",$managementView); dress('s_ad_s1_label',getEntryVisibilityName($entry['visibility']),$managementView); if($entry['visibility']<2){ dress('s_ad_s2_label',_text('공개로 변경합니다'),$managementView); dress('s_ad_s2_onclick',"changeVisibility({$entry['id']}, 2); return false;",$managementView); }else{ dress('s_ad_s2_label',_text('비공개로 변경합니다'),$managementView); dress('s_ad_s2_onclick',"changeVisibility({$entry['id']}, 0); return false;",$managementView); } dress('s_ad_t_onclick',"sendTrackback({$entry['id']}); return false;",$managementView); dress('s_ad_d_onclick',"deleteEntry({$entry['id']}); return false;",$managementView); dress('ad_div',$managementView,$entryView); } dress('article_rep_id',$entry['id'],$entryView); dress('article_rep_link',$permalink,$entryView); dress('article_rep_title',htmlspecialchars(fireEvent('ViewPostTitle',$entry['title'],$entry['id'])),$entryView); dress('article_rep_desc',getEntryContentView($owner,$entry['id'],$entry['content'],getKeywordNames($owner)),$entryView); dress('article_rep_category',htmlspecialchars(empty($entry['category'])?_text('분류없음'):$entry['categoryLabel'],$entry['id']),$entryView); dress('article_rep_category_link',empty($entry['category'])?"$blogURL/category/":"$blogURL/category/".encodeURL($entry['categoryLabel']),$entryView); dress('article_rep_date',fireEvent('ViewPostDate',Timestamp::format5($entry['published'])),$entryView); dress('entry_archive_link',"$blogURL/archive/".Timestamp::getDate($entry['published']),$entryView); if($entry['acceptComment']||($entry['comments']>0)) dress('article_rep_rp_link',"toggleLayer('entry{$entry['id']}Comment'); return false",$entryView); else dress('article_rep_rp_link',"alert('"._text('이 글에는 댓글을 달 수 없습니다.')."'); return false",$entryView); dress('article_rep_rp_cnt_id',"commentCount{$entry['id']}",$entryView); list($tempTag,$commentView)=getCommentCountPart($entry['comments'],$skin); dress($tempTag,$commentView,$entryView); if($entry['acceptTrackback']||($entry['trackbacks']>0)) dress('article_rep_tb_link',"toggleLayer('entry{$entry['id']}Trackback'); return false",$entryView); else dress('article_rep_tb_link',"alert('"._text('이 글에는 글을 걸 수 없습니다.')."'); return false",$entryView); dress('article_rep_tb_cnt_id',"trackbackCount{$entry['id']}",$entryView); list($tempTag,$trackbackView)=getTrackbackCountPart($entry['trackbacks'],$skin); dress($tempTag,$trackbackView,$entryView); $entriesView.=$entryView; }else{ $protectedEntryView=$skin->entryProtected; dress('article_rep_id',$entry['id'],$protectedEntryView); dress('article_rep_link',$permalink,$protectedEntryView); dress('article_rep_title',htmlspecialchars(fireEvent('ViewPostTitle',$entry['title'],$entry['id'])),$protectedEntryView); dress('article_rep_date',fireEvent('ViewPostDate',Timestamp::format5($entry['published'])),$protectedEntryView); dress('article_password',"entry{$entry['id']}password",$protectedEntryView); dress('article_dissolve',"reloadEntry({$entry['id']});",$protectedEntryView); if(isset($_POST['partial'])) $entriesView.=$protectedEntryView; else $entriesView.="
$protectedEntryView
"; } } dress('article_rep',$entriesView,$view); $writer=DBQuery::queryCell("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;?>