define('ROOT','..'); define('TATTERTOOLS_NAME','Tattertools'); define('TATTERTOOLS_VERSION','1.0.6.1'); define('TATTERTOOLS_COPYRIGHT','Copyright © 2004-2006, Tatter & Company'); define('TATTERTOOLS_HOMEPAGE','http://www.tattertools.com/'); define('TATTERTOOLS_SYNC_URL','http://sync.eolin.com/'); define('CRLF',"\r\n"); $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']='Tattertools_skyline_ko'; if(@is_numeric($_SERVER['SERVER_PORT'])&&($_SERVER['SERVER_PORT']!=80)&&($_SERVER['SERVER_PORT']!=443)) $service['port']=$_SERVER['SERVER_PORT']; function requireComponent($name){ if(!ereg('^[[:alnum:]]+[[:alnum:].]+$',$name)) return ; include_once ("../components/$name.php"); } requireComponent('Eolin.PHP.UnifiedEnvironment'); requireComponent('Eolin.PHP.Core'); requireComponent('Tattertools.Core'); requireComponent('Tattertools.Core.BackwardCompatibility'); 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 nl2brWithHTML($str){ $str=str_replace('[CODE]','[CODE][HTML]',$str); $str=str_replace('[/CODE]','[/HTML][/CODE]',$str); $inHTML=false; $out=''; while(true){ if($inHTML){ $end=strpos($str,'[/HTML]'); if($end===false) break; else{ $out.=substr($str,0,$end); $str=substr($str,$end+7); $inHTML=false; } }else{ $offset=strpos($str,'[HTML]'); if($offset===false){ $out.=nl2br($str); break; }else{ $out.=nl2br(substr($str,0,$offset)); $str=substr($str,$offset+6); $inHTML=true; } } } return $out; } function addLinkSense($text,$attributes=''){ return ereg_replace("(^| |\t|\r|\n|\"|')(http://[^ \t\r\n\"']+)","\\1\\2",$text); } function addProtocolSense($url,$protocol='http://'){ return ereg('^[[:alnum:]]+:',$url)?$url:$protocol.$url; } function fetchQueryAll($query,$type=MYSQL_BOTH){ $rows=array(); if($result=mysql_query($query)){ while($row=mysql_fetch_array($result,$type)) array_push($rows,$row); mysql_free_result($result); } return $rows; } function fetchQueryRow($query){ if($result=mysql_query($query)){ if($row=mysql_fetch_array($result)){ mysql_free_result($result); return $row; } mysql_free_result($result); } return ; } function fetchQueryColumn($query){ $column=array(); if($result=mysql_query($query)){ while($row=mysql_fetch_row($result)) array_push($column,$row[0]); mysql_free_result($result); } return $column; } function fetchQueryCell($query){ if($result=mysql_query($query)){ list($cell)=mysql_fetch_row($result); mysql_free_result($result); return $cell; } return ; } function executeQuery($query){ return mysql_query($query)?true:false; } function getFileExtension($path){ for($i=strlen($path)-1;$i>=0;$i--){ if($path{$i}=='.') return strtolower(substr($path,$i+1)); if(($path{$i}=='/')||($path{$i}=='\\')) break; } return ''; } function getAttributesFromString($str){ $attributes=array(); foreach(explode(' ',$str) as $value){ $value=trim($value); if(preg_match('/([^= ]+)="([^"]*)/',$value,$matches)){ $attributes[$matches[1]]=$matches[2]; }elseif(preg_match("/([^= ]+)='([^']*)/",$value,$matches)){ $attributes[$matches[1]]=$matches[2]; }elseif(preg_match('/([^= ]+)=([^ ]*)/',$value,$matches)){ $attributes[$matches[1]]=$matches[2]; } } return $attributes; } function checkResponseXML($responseText){ global $service; $xmls=new XMLStruct(); if(!$xmls->open(trim($responseText),$service['encoding'])) return false; if(($error=$xmls->getValue('/response/error'))!==null) return intval($error); else return false; } mysql_connect($database['server'],$database['username'],$database['password']); mysql_select_db($database['database']); if(mysql_query('SET CHARACTER SET utf8')){ $database['utf8']=true; }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\''); function getOwner($name){ global $database; return fetchQueryCell("select owner from {$database['prefix']}BlogSettings where name = '$name'"); } function getOwnerBySecondaryDomain($domain){ global $database; return fetchQueryCell("select owner from {$database['prefix']}BlogSettings where secondaryDomain = '$domain'"); } function getBlogSetting($owner){ global $database; if($result=mysql_query("select * from {$database['prefix']}BlogSettings where owner = $owner")){ return mysql_fetch_array($result); } return false; } function getSkinSetting($owner){ global $database; if($result=mysql_query("select * from {$database['prefix']}SkinSettings where owner = $owner")) return mysql_fetch_array($result); return false; } function getBlogURL($name=null,$domain=null,$path=null,$type=null){ global $service,$blog; if($type===null) $type=$service['type']; if($path===null) $path=$service['path']; if($domain===null) $domain=$service['domain'].(isset($service['port'])?":{$service['port']}":''); if($name===null) $name=$blog['name']; switch($type){ case 'domain': return "http://$name.$domain$path"; case 'path': return "http://$domain$path/$name"; case 'single': default: return "http://$domain$path"; } } function getArchives($owner){ global $database; $archives=array(); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $result=mysql_query("SELECT EXTRACT(year_month FROM FROM_UNIXTIME(published)) period, COUNT(*) count FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 GROUP BY period ORDER BY period DESC LIMIT 5"); if($result){ while($archive=mysql_fetch_array($result)) array_push($archives,$archive); } return $archives; } function getCalendar($owner,$period){ global $database; $calendar=array('days'=>array()); if(($period===true)||!checkPeriod($period)) $period=Timestamp::getYearMonth(); $calendar['period']=$period; $calendar['year']=substr($period,0,4); $calendar['month']=substr($period,4,2); $visibility=doesHaveOwnership()?'':'AND visibility > 0'; $result=mysql_query("SELECT DISTINCT DAYOFMONTH(FROM_UNIXTIME(published)) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 AND YEAR(FROM_UNIXTIME(published)) = {$calendar['year']} AND MONTH(FROM_UNIXTIME(published)) = {$calendar['month']}"); if($result){ while(list($day)=mysql_fetch_array($result)) array_push($calendar['days'],$day); } $calendar['days']=array_flip($calendar['days']); return $calendar; } function getAttachmentByOnlyName($owner,$name){ global $database; $name=mysql_escape_string($name); return fetchQueryRow("select * from {$database['prefix']}Attachments where owner = $owner and name = '$name'"); } function getCategories($owner){ global $database; $rows=fetchQueryAll("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner ORDER BY parent, priority"); $categories=array(); foreach($rows as $category){ if($category['parent']==null){ $category['children']=array(); $categories[$category['id']]=$category; }elseif(isset($categories[$category['parent']])) array_push($categories[$category['parent']]['children'],$category); } return $categories; } function getCategoriesSkin(){ global $database; global $owner,$service; $sql="select * from {$database['prefix']}SkinSettings where owner = $owner"; $setting=fetchQueryRow($sql); $skin=array('name'=>"{$setting['skin']}",'url'=>$service['path']."/image/tree/{$setting['tree']}",'labelLength'=>$setting['labelLengthOnTree'],'showValue'=>$setting['showValueOnTree'],'bgColor'=>"{$setting['bgColorOnTree']}",'itemColor'=>"{$setting['colorOnTree']}",'itemBgColor'=>"{$setting['bgColorOnTree']}",'activeItemColor'=>"{$setting['activeColorOnTree']}",'activeItemBgColor'=>"{$setting['activeBgColorOnTree']}",); return $skin; } function updateEntriesOfCategory($owner,$id=-1){ global $database; $result=mysql_query("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner AND parent IS NULL"); while($row=mysql_fetch_array($result)){ $parent=$row['id']; $parentName=mysql_escape_string($row['name']); $countParent=fetchQueryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND visibility > 0 AND category = $parent"); $countInLoginParent=fetchQueryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND category = $parent"); $result2=mysql_query("SELECT * FROM {$database['prefix']}Categories WHERE owner = $owner AND parent = $parent"); while($rowChild=mysql_fetch_array($result2)){ $rowChild['name']=mysql_escape_string($rowChild['name']); $countChild=fetchQueryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND visibility > 0 AND category = {$rowChild['id']}"); $countInLogInChild=fetchQueryCell("SELECT COUNT(id) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 AND category = {$rowChild['id']}"); mysql_query("UPDATE {$database['prefix']}Categories SET entries = $countChild, entriesInLogin = $countInLogInChild, `label` = '$parentName/{$rowChild['name']}' WHERE owner = $owner AND id = {$rowChild['id']}"); $countParent+=$countChild; $countInLoginParent+=$countInLogInChild; } mysql_query("UPDATE {$database['prefix']}Categories SET entries = $countParent, entriesInLogin = $countInLoginParent, `label` = '$parentName' WHERE owner = $owner AND id = $parent"); } return true; } function getCommentsWithPagingForGuestbook($owner,$page,$count){ global $database; $sql="SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner"; $sql.=' AND entry = 0 AND parent is null'; $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 $aux"; if($result=mysql_query($sql)){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!$authorized){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_t('관리자만 볼 수 있는 댓글입니다'); } array_push($comments,$comment); } } return $comments; } function getCommentComments($parent){ global $database,$owner; $comments=array(); $authorized=doesHaveOwnership(); if($result=mysql_query("select * from {$database['prefix']}Comments where owner = $owner and parent = $parent order by id")){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!$authorized){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_t('관리자만 볼 수 있는 댓글입니다'); } array_push($comments,$comment); } } return $comments; } function getRecentComments($owner){ global $skinSetting,$database; $comments=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND entry>0 ORDER BY written DESC LIMIT {$skinSetting['commentsOnRecent']}":"SELECT r.* FROM {$database['prefix']}Comments r, {$database['prefix']}Entries e WHERE r.owner = $owner AND r.owner = e.owner AND r.entry = e.id AND e.draft = 0 AND e.visibility > 0 AND entry > 0 ORDER BY r.written DESC LIMIT {$skinSetting['commentsOnRecent']}"; if($result=mysql_query($sql)){ while($comment=mysql_fetch_array($result)){ if(($comment['secret']==1)&&!doesHaveOwnership()){ $comment['name']=''; $comment['homepage']=''; $comment['comment']=_t('관리자만 볼 수 있는 댓글입니다'); } array_push($comments,$comment); } } return $comments; } function notifyComment(){ global $database,$owner,$service,$blog,$hostURL; $blogURL=$hostURL.($service['type']=='path'?"{$service['path']}/{$blog['name']}":$service['path']); $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=fetchQueryRow($sql); if(empty($queue)&&empty($queue['queueId'])){ executeQuery("DELETE FROM `{$database['prefix']}CommentsNotifiedQueue` WHERE `id`={$queue['queueId']}"); return false; } $comments=(fetchQueryRow("SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND id = {$queue['commentId']}")); if(empty($comments['parent'])||$comments['secret']==1){ executeQuery("DELETE FROM `{$database['prefix']}CommentsNotifiedQueue` WHERE `id`={$queue['queueId']}"); return false; } $parentComments=(fetchQueryRow("SELECT * FROM {$database['prefix']}Comments WHERE owner = $owner AND id = {$comments['parent']}")); if(empty($parentComments['homepage'])){ executeQuery("DELETE FROM `{$database['prefix']}CommentsNotifiedQueue` WHERE `id`={$queue['queueId']}"); return false; } $entry=(fetchQueryRow("SELECT * FROM {$database['prefix']}Entries WHERE owner = $owner AND id={$comments['entry']}")); $data="url=".rawurlencode($blogURL)."&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("$blogURL/".($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=".rawurlencode("$blogURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id'])."#comment".$parentComments['id'])."&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=".rawurlencode("$blogURL/".($blog['useSlogan']?"entry/{$entry['slogan']}":$entry['id'])."#comment".$comments['id'])."&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{ } executeQuery("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_real_escape_string($post['s_home_title']); $name=mysql_real_escape_string($post['s_name']); $entryId=mysql_real_escape_string($post['s_no']); $homepage=mysql_real_escape_string($post['url']); $entryUrl=mysql_real_escape_string($post['s_url']); $entryTitle=mysql_real_escape_string($post['s_post_title']); $parent_id=$post['r1_no']; $parent_name=mysql_real_escape_string($post['r1_name']); $parent_parent=$post['r1_rno']; $parent_homepage=mysql_real_escape_string($post['r1_homepage']); $parent_written=$post['r1_regdate']; $parent_comment=mysql_real_escape_string($post['r1_body']); $parent_url=mysql_real_escape_string($post['r1_url']); $child_id=$post['r2_no']; $child_name=mysql_real_escape_string($post['r2_name']); $child_parent=$post['r2_rno']; $child_homepage=mysql_real_escape_string($post['r2_homepage']); $child_written=$post['r2_regdate']; $child_comment=mysql_real_escape_string($post['r2_body']); $child_url=mysql_real_escape_string($post['r2_url']); $sql="SELECT id FROM `{$database['prefix']}CommentsNotifiedSiteInfo` WHERE url = '$homepage'"; $siteId=fetchQueryCell($sql); if(empty($siteId)){ if(executeQuery("INSERT INTO `{$database['prefix']}CommentsNotifiedSiteInfo` VALUES ('', '$title', '$name', '$homepage', UNIX_TIMESTAMP());")) $siteId=mysql_insert_id(); else return 2; } $parentId=fetchQueryCell("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(!executeQuery($sql)) return 3; $parentId=mysql_insert_id(); } if(fetchQueryCell("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(!executeQuery($sql)) return 5; $sql="UPDATE {$database['prefix']}CommentsNotified SET modified = UNIX_TIMESTAMP() WHERE id=$parentId"; if(!executeQuery($sql)) return 6; return 0; } function getEntriesTotalCount($owner){ global $database; $visibility=doesHaveOwnership()?'':'AND visibility > 0'; return fetchQueryCell("SELECT COUNT(*) FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0"); } function getEntriesWithPaging($owner,$page,$count){ global $database; $visibility=doesHaveOwnership()?'':'AND e.visibility > 0'; $sql="SELECT e.*, c.label categoryLabel FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id 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 visibility > 0'; $result=mysql_query("SELECT id, title, comments FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category >= 0 ORDER BY published DESC LIMIT {$skinSetting['entriesOnRecent']}"); while($entry=mysql_fetch_array($result)){ array_push($entries,$entry); } return $entries; } function setEntryVisibility($id,$visibility){ global $database,$owner; if(($visibility<0)||($visibility>3)) return false; list($oldVisibility,$category)=fetchQueryRow("SELECT visibility, category FROM {$database['prefix']}Entries WHERE owner = $owner AND id = $id AND draft = 0"); if($oldVisibility===null) return false; if(($category==-1)&&(($visibility==1)||($visibility==3))) return false; if($visibility==$oldVisibility) return true; $result=mysql_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($oldVisibility==3) syndicateEntry($id,false); elseif($visibility==3){ if(!syndicateEntry($id)){ mysql_query("UPDATE {$database['prefix']}Entries SET visibility = $oldVisibility, modified = UNIX_TIMESTAMP() WHERE owner = $owner AND id = $id"); return false; } } if($category>=0){ if((($oldVisibility>=2)&&($visibility<2))||(($oldVisibility<2)&&($visibility>=2))) clearRSS(); if($category>0) updateEntriesOfCategory($owner,$category); } return true; } function syndicateEntry($id,$syndicate=true){ global $database,$owner; global $hostURL,$blogURL; $mode=($syndicate?1:0); requireComponent('Eolin.PHP.HTTPRequest'); $request=new HTTPRequest('POST',TATTERTOOLS_SYNC_URL); $request->contentType='application/x-www-form-urlencoded; charset=utf-8'; if($request->send("mode=$mode&path=".urlencode("$hostURL$blogURL/sync/$id"))&&(checkResponseXML($request->responseText)===0)) return true; return false; } function publishEntries(){ global $database,$owner; $entries=fetchQueryAll("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=mysql_query("UPDATE {$database['prefix']}Entries SET visibility = 0 WHERE owner = $owner AND id = {$entry['id']} AND draft = 0"); if($result&&(mysql_affected_rows()>0)) setEntryVisibility($entry['id'],abs($entry['visibility'])); } } function getEntryVisibilityName($visibility){ switch(abs($visibility)){ case 0: return _t('비공개'); case 1: return _t('보호'); case 2: return _t('공개'); case 3: default: return _t('발행'); } } function isFiltered($owner,$mode,$value){ global $database; $value=mysql_escape_string($value); switch($mode){ case 'sitename': $table='URLFilters'; $column='url'; $value=str_replace('http://','',$value); $lastSlashPos=lastIndexOf($value,'/'); if($lastSlashPos>-1){ $value=substr($value,0,$lastSlashPos); } break; case 'name': $table='GuestFilters'; $column='name'; break; case 'address': $table='HostFilters'; $column='address'; break; case 'contents': $table='ContentFilters'; $column='word'; break; default: return false; } if($mode=='contents'){ $result=mysql_query("select $column from {$database['prefix']}$table WHERE owner = $owner"); while($row=mysql_fetch_row($result)){ if(eregi($row[0],$value)){ return true; } } return false; }else{ return mysql_result(mysql_query("select count(*) from {$database['prefix']}$table WHERE owner = $owner AND $column = '$value'"),0,0); } } function getKeywordNames($owner){ return array(); } function getNotices($owner){ global $database; $visibility=doesHaveOwnership()?'':'AND visibility = 2'; return fetchQueryAll("SELECT id, title, published FROM {$database['prefix']}Entries WHERE owner = $owner AND draft = 0 $visibility AND category = -2 ORDER BY published DESC"); } function getLinks($owner){ global $database; $links=array(); if($result=mysql_query("select * from {$database['prefix']}Links where owner = $owner ORDER BY name")){ while($link=mysql_fetch_array($result)) array_push($links,$link); } return $links; } function fetchWithPaging($sql,$page,$count,$url=null,$prefix='?page='){ global $folderURL; if($url===null) $url=$folderURL; $paging=array('url'=>$url,'prefix'=>$prefix,'postfix'=>''); if(empty($sql)) return array(array(),$paging); if(eregi('[[:space:]]{1}(FROM.*)$',$sql,$matches)) $from=$matches[1]; else return array(array(),$paging); $paging['total']=fetchQueryCell("SELECT COUNT(*) $from"); if($paging['total']===null) return array(array(),$paging); $paging['pages']=intval(ceil($paging['total']/$count)); $paging['page']=is_numeric($page)?$page:1; if($paging['page']>$paging['pages']){ $paging['page']=$paging['pages']+1; if($paging['pages']>0) $paging['prev']=$paging['pages']; return array(array(),$paging); } if($paging['page']>1) $paging['prev']=$paging['page']-1; if($paging['page']<$paging['pages']) $paging['next']=$paging['page']+1; $offset=($paging['page']-1)*$count; return array(fetchQueryAll("$sql LIMIT $offset, $count"),$paging); } function clearRSS(){ global $owner; @unlink("../cache/rss/$owner.xml"); } function getStatistics($owner){ global $database; $stats=array('total'=>0,'today'=>0,'yesterday'=>0); $result=mysql_query("select visits from {$database['prefix']}BlogStatistics where owner = $owner"); if(mysql_num_rows($result)==1) list($stats['total'])=mysql_fetch_array($result); $result=mysql_query("select visits from {$database['prefix']}DailyStatistics where owner = $owner and `date` = ".Timestamp::getDate()); if(mysql_num_rows($result)==1) list($stats['today'])=mysql_fetch_array($result); $result=mysql_query("select visits from {$database['prefix']}DailyStatistics where owner = $owner and `date` = ".Timestamp::getDate(time()-86400)); if(mysql_num_rows($result)==1) list($stats['yesterday'])=mysql_fetch_array($result); return $stats; } function updateVisitorStatistics($owner){ global $database,$blogURL; if(!fireEvent('UpdatingVisitorStatistics',true)) return ; if(doesHaveOwnership()) return ; $id=session_id(); $result=mysql_query("select blog from {$database['prefix']}SessionVisits where id = '$id' and address = '{$_SERVER['REMOTE_ADDR']}' and blog = $owner"); if($result&&(mysql_num_rows($result)>0)) return ; if(mysql_query("insert into {$database['prefix']}SessionVisits values('$id', '{$_SERVER['REMOTE_ADDR']}', $owner)")&&(mysql_affected_rows()>0)){ mysql_query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner"); if(mysql_affected_rows()==0){ if(mysql_query("update {$database['prefix']}BlogStatistics set visits = visits + 1 where owner = $owner")||(mysql_affected_rows()==0)) mysql_query("insert into {$database['prefix']}BlogStatistics values($owner, 1)"); } $period=Timestamp::getDate(); mysql_query("update {$database['prefix']}DailyStatistics set visits = visits + 1 where owner = $owner and `date` = $period"); if(mysql_affected_rows()==0){ if(!mysql_query("insert into {$database['prefix']}DailyStatistics values($owner, $period, 1)")||(mysql_affected_rows()==0)) mysql_query("update {$database['prefix']}DailyStatistics set visits = visits + 1 where owner = $owner and `date` = $period"); } if(!empty($_SERVER['HTTP_REFERER'])){ $referer=parse_url($_SERVER['HTTP_REFERER']); if(!empty($referer['host'])&&(($referer['host']!=$_SERVER['HTTP_HOST'])||(strncmp($referer['path'],$blogURL,strlen($blogURL))!=0))){ requireComponent('Tattertools.Data.Filter'); if(Filter::isFiltered('ip',$_SERVER['REMOTE_ADDR'])||Filter::isFiltered('url',$_SERVER['HTTP_REFERER'])) return ; if(!fireEvent('AddingRefererLog',true,array('host'=>$referer['host'],'url'=>$_SERVER['HTTP_REFERER']))) return ; $host=mysql_escape_string($referer['host']); $url=mysql_escape_string($_SERVER['HTTP_REFERER']); mysql_query("insert into {$database['prefix']}RefererLogs values($owner, '$host', '$url', UNIX_TIMESTAMP())"); mysql_query("delete from {$database['prefix']}RefererLogs where referred < UNIX_TIMESTAMP() - 604800"); if(!mysql_query("update {$database['prefix']}RefererStatistics set count = count + 1 where owner = $owner and host = '$host'")||(mysql_affected_rows()==0)) mysql_query("insert into {$database['prefix']}RefererStatistics values($owner, '$host', 1)"); } } } } function getTrackbacks($entry){ global $database,$owner; $trackbacks=array(); $result=mysql_query("select * from {$database['prefix']}Trackbacks where owner = $owner AND entry = $entry order by written"); while($trackback=mysql_fetch_array($result)) array_push($trackbacks,$trackback); return $trackbacks; } function getRecentTrackbacks($owner){ global $database; global $skinSetting; $trackbacks=array(); $sql=doesHaveOwnership()?"SELECT * FROM {$database['prefix']}Trackbacks WHERE owner = $owner ORDER BY written DESC LIMIT {$skinSetting['trackbacksOnRecent']}":"SELECT t.* FROM {$database['prefix']}Trackbacks t, {$database['prefix']}Entries e WHERE t.owner = $owner AND t.owner = e.owner AND t.entry = e.id AND e.draft = 0 AND e.visibility >= 2 ORDER BY t.written DESC LIMIT {$skinSetting['trackbacksOnRecent']}"; if($result=mysql_query($sql)){ while($trackback=mysql_fetch_array($result)) array_push($trackbacks,$trackback); } return $trackbacks; } function lastIndexOf($string,$item){ $index=strpos(strrev($string),strrev($item)); if($index){ $index=strlen($string)-strlen($item)-$index; return $index; }else return -1; } function getTags($entry){ global $database,$owner; $tags=array(); $result=mysql_query("select * from {$database['prefix']}Tags, {$database['prefix']}TagRelations where id = tag and entry = $entry and owner = $owner group by name order by 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) $result=mysql_query("select name, count(*) cnt from {$database['prefix']}Tags, {$database['prefix']}TagRelations where id = tag and owner = $owner GROUP BY name ORDER BY cnt DESC $aux"); elseif($skinSetting['tagboxAlign']==2) $result=mysql_query("select distinct name from {$database['prefix']}Tags, {$database['prefix']}TagRelations where id = tag and owner = $owner ORDER BY name $aux"); else $result=mysql_query("select name from {$database['prefix']}Tags, {$database['prefix']}TagRelations where id = tag and owner = $owner GROUP BY name 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; $result=mysql_query("select count(entry) cnt from {$database['prefix']}TagRelations where owner = $owner group by tag order by cnt desc limit 1"); if($result){ if(list($count)=mysql_fetch_array($result)) $max=$count; } $result=mysql_query("select count(entry) cnt from {$database['prefix']}TagRelations where owner = $owner group by 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; $count=fetchQueryCell("select count(*) from {$database['prefix']}Tags t, {$database['prefix']}TagRelations r where t.id=r.tag and r.owner = $owner and t.name = '".mysql_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]); $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']; $hostURL="http://{$_SERVER['HTTP_HOST']}".(isset($service['port'])?":{$service['port']}":''); $blogURL=$service['type']=='path'?"{$service['path']}/{$blog['name']}":$service['path']; $folderURL=rtrim($blogURL.$suri['directive'],'/'); unset($url,$domain); if(!file_exists('../config.php')){ header("Location: $blogURL/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=mysql_query("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_escape_string($data); $server=mysql_escape_string($_SERVER['HTTP_HOST']); $request=mysql_escape_string($_SERVER['REQUEST_URI']); $referer=isset($_SERVER['HTTP_REFERER'])?mysql_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=@mysql_query("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=mysql_query("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); } 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()); list($user['loginid'],$user['name'])=fetchQueryRow("select loginid, name from {$database['prefix']}Users where userid = {$user['id']}"); list($user['blog'],$user['timezone'])=fetchQueryRow("select name, timezone from {$database['prefix']}BlogSettings where owner = {$user['id']}"); $user['homepage']=getBlogURL($user['blog']); }else $user=null; Timezone::set(isset($blog['timezone'])?$blog['timezone']:$service['timezone']); mysql_query('SET time_zone = \''.Timezone::getCanonical().'\''); Locale::setDirectory('../language'); Locale::set(isset($blog['language'])?$blog['language']:$service['language']); $activePlugins=array(); $eventMappings=array(); $tagMappings=array(); if(!empty($owner)){ $activePlugins=fetchQueryColumn("SELECT name FROM {$database['prefix']}Plugins WHERE owner = $owner"); $xmls=new XMLStruct(); foreach($activePlugins as $plugin){ $manifest=@file_get_contents("../plugins/$plugin/index.xml"); if($manifest&&$xmls->open($manifest)){ 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); } }else{ $plugin=mysql_escape_string($plugin); mysql_query("DELETE FROM {$database['prefix']}Plugins WHERE owner = $owner AND name = '$plugin'"); } } unset($xmls); unset($plugin); } function fireEvent($event,$target=null,$mother=null,$condition=true){ global $service,$eventMappings,$pluginURL; 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'])){ $pluginURL="{$service['path']}/plugins/{$mapping['plugin']}"; $target=call_user_func($mapping['listener'],$target,$mother); } } return $target; } function handleTags(&$content){ global $service,$tagMappings,$pluginURL; 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'])){ $pluginURL="{$service['path']}/plugins/{$mapping['plugin']}"; $target=call_user_func($mapping['handler'],$target); } } dress($tag,$target,$content); } } } function respondErrorPage($message=''){ global $service;?>
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| ',CRLF; for($day=1;$weekday<7;$weekday++,$day++){ if(isset($calendar['days'][$day])) echo ' | 9?$day:'0'.$day),"\">$day | ",CRLF; else echo '$day | ",CRLF; } echo '||||
| 9?$day:'0'.$day),"\">$day | ",CRLF; else echo '$day | ",CRLF; if($day>$lastDay){ for(;$weekday<7;$weekday++) echo '',CRLF; echo ' |
| '; $buf.=''; $buf.=' | '; $buf.='
{$attributes[3]}
"; } if($attributes[0]=='1L'){ $prefix='| '.getAttachmentBinder($attributes[1],$attributes[2],$folderPath,$folderURL,2,$useAbsolutePath)." {$attributes[3]} | ".getAttachmentBinder($attributes[4],$attributes[5],$folderPath,$folderURL,2,$useAbsolutePath)." {$attributes[6]} |
| '.getAttachmentBinder($attributes[1],$attributes[2],$folderPath,$folderURL,3,$useAbsolutePath)." {$attributes[3]} | ".getAttachmentBinder($attributes[4],$attributes[5],$folderPath,$folderURL,3,$useAbsolutePath)." {$attributes[6]} | ".getAttachmentBinder($attributes[7],$attributes[8],$folderPath,$folderURL,3,$useAbsolutePath)." {$attributes[9]} |
'.htmlspecialchars($fileInfo['label']).'';
}else{
return '
'.htmlspecialchars($fileInfo['label']).'';
}
break;
}
}
function printScript($filename,$obfuscate=true){
global $service,$hostURL,$blogURL;
if(!$file=@file_get_contents("../script/$filename"))
return '';
$file="";
}
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 $guestGuest;
var $guestMember;
var $guestItem;
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 $commentGuest;
var $commentMember;
var $commentItem;
var $commentSubItem;
var $trackbacks;
var $trackback;
var $tagLabel;
var $siteTag;
var $siteTagItem;
var $randomTags;
var $s_link_rep;
var $aux;
function Skin($name){
global $service;
$filename="../skin/$name/skin.html";
if(!$sval=file_get_contents($filename))
respondErrorPage('Skin');
$sval=replaceSkinTag($sval,'html');
$sval=replaceSkinTag($sval,'head');
$sval=replaceSkinTag($sval,'body');
handleTags($sval);
$sval=str_replace('./',"{$service['path']}/skin/$name/",$sval);
list($sval,$this->listItem)=cutSkinTag($sval,'list_rep');
list($sval,$this->list)=cutSkinTag($sval,'list');
list($sval,$this->commentListItem)=cutSkinTag($sval,'rplist_rep');
list($sval,$this->commentList)=cutSkinTag($sval,'rplist');
list($sval,$this->rss_rep)=cutSkinTag($sval,'rss_rep');
list($sval,$this->rss_date)=cutSkinTag($sval,'rss_date');
list($sval,$this->rss)=cutSkinTag($sval,'rss');
list($sval,$this->keywordItem)=cutSkinTag($sval,'keyword_rep');
list($sval,$this->keywordGroup)=cutSkinTag($sval,'keyword_date_rep');
list($sval,$this->keyword)=cutSkinTag($sval,'keyword');
list($sval,$this->noticeItem)=cutSkinTag($sval,'notice_rep');
list($sval,$this->recentNoticeItem)=cutSkinTag($sval,'rct_notice_rep');
list($sval,$this->recentNotice)=cutSkinTag($sval,'rct_notice');
list($sval,$this->locativeEntry)=cutSkinTag($sval,'local_info_rep');
list($sval,$this->locativeSpot)=cutSkinTag($sval,'local_spot_rep');
list($sval,$this->locative)=cutSkinTag($sval,'local');
list($sval,$this->guestSubItem)=cutSkinTag($sval,'guest_reply_rep');
list($sval,$this->guestItem)=cutSkinTag($sval,'guest_rep');
list($sval,$this->guestGuest)=cutSkinTag($sval,'guest_form');
list($sval,$this->guestMember)=cutSkinTag($sval,'guest_member');
list($sval,$this->guest)=cutSkinTag($sval,'guest');
list($sval,$this->entryProtected)=cutSkinTag($sval,'article_protected');
list($sval,$this->management)=cutSkinTag($sval,'ad_div');
list($sval,$this->trackback)=cutSkinTag($sval,'tb_rep');
list($sval,$this->trackbacks)=cutSkinTag($sval,'tb');
list($sval,$this->tagLabel)=cutSkinTag($sval,'tag_label');
list($sval,$this->siteTagItem)=cutSkinTag($sval,'tag_rep');
list($sval,$this->siteTag)=cutSkinTag($sval,'tag');
list($sval,$this->randomTags)=cutSkinTag($sval,'random_tags');
list($sval,$this->commentSubItem)=cutSkinTag($sval,'rp2_rep');
list($sval,$this->commentItem)=cutSkinTag($sval,'rp_rep');
list($sval,$this->commentGuest)=cutSkinTag($sval,'rp_guest');
list($sval,$this->commentMember)=cutSkinTag($sval,'rp_member');
list($sval,$this->comment)=cutSkinTag($sval,'rp');
list($sval,$this->entry)=cutSkinTag($sval,'article_rep');
list($sval,$this->pagingItem)=cutSkinTag($sval,'paging_rep');
list($sval,$this->paging)=cutSkinTag($sval,'paging');
list($sval,$this->archive)=cutSkinTag($sval,'archive_rep');
list($sval,$this->search)=cutSkinTag($sval,'search');
list($sval,$this->recentEntry)=cutSkinTag($sval,'rctps_rep');
list($sval,$this->recentComments)=cutSkinTag($sval,'rctrp_rep');
list($sval,$this->recentTrackback)=cutSkinTag($sval,'rcttb_rep');
list($sval,$this->s_link_rep)=cutSkinTag($sval,'link_rep');
list($sval,$this->skin)=cutSkinTag($sval,'t3');
$this->outter=$sval;
}
}
function cutSkinTag($contents,$tag){
$tagSize=strlen($tag)+4;
$begin=strpos($contents,"