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