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,"$tag>",$pos2))===false)
return $result.'';
$pos2+=strlen($tag)+3;
$chunk=substr($str,$pos1,$pos2-$pos1);
if(substr_count($chunk,"<$tag")==substr_count($chunk,"$tag>"))
break;
}
$result.='';
}
return $result.substr($html,$pos2);
}
function 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;?>
... ";
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',"',$commentRrevView);
$commentView=$commentRrevView;
}else{
$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;?>
«
»
|
|
|
|
|
|
|
=$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 ' '.$dayString.' | '.CRLF;
}
}elseif($week==($lastWeek-1)){
if($day<=$lastDay){
echo ' '.$dayString.' | '.CRLF;
}else{
echo ' | '.CRLF;
}
}else{
echo ' '.$dayString.' | '.CRLF;
}
}
echo '
'.CRLF;
if($day>=$lastDay){
break;
}
}?>
".($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'.getAttachmentBinder($images[$i],'',$folderPath,$folderURL,1,$useAbsolutePath,$bRssMode).'';
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'.getAttachmentBinder($images[$i],'',$folderPath,$folderURL,1,$useAbsolutePath).'';
}
$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'.$attributes[count($attributes)-1].'
';
}else{
$caption='';
}
$buf.='
';
$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'.$attributes[count($attributes)-1].'';
}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',"',$entryView);
$tagLabelView=$skin->tagLabel;
$entryTags=getTags($entry['id']);
if(sizeof($entryTags)>0){
$tags=array();
foreach($entryTags as $entryTag)
array_push($tags,"'.htmlspecialchars($entryTag['name']).'');
$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;?>