merge from 1.7.3.5(r13153:r13167)
git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
|
|
@ -26,9 +26,6 @@ RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?mid=$1&documen
|
||||||
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L]
|
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L]
|
||||||
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&mid=$2&document_srl=$3&key=$4&act=trackback [L]
|
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&mid=$2&document_srl=$3&key=$4&act=trackback [L]
|
||||||
|
|
||||||
# administrator page
|
|
||||||
RewriteRule ^admin/?$ ./index.php?module=admin [L]
|
|
||||||
|
|
||||||
# document permanent link
|
# document permanent link
|
||||||
RewriteRule ^([0-9]+)$ ./index.php?document_srl=$1 [L,QSA]
|
RewriteRule ^([0-9]+)$ ./index.php?document_srl=$1 [L,QSA]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,21 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file adminlogging.addon.php
|
* @file adminlogging.addon.php
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
* @brief Automatic link add-on
|
* @brief Automatic link add-on
|
||||||
**/
|
*/
|
||||||
$logged_info = Context::get('logged_info');
|
$logged_info = Context::get('logged_info');
|
||||||
$act = Context::get('act');
|
$act = Context::get('act');
|
||||||
$kind = strpos(strtolower($act),'admin')!==false?'admin':'';
|
$kind = strpos(strtolower($act), 'admin') !== false ? 'admin' : '';
|
||||||
|
|
||||||
if($called_position == 'before_module_proc' && $kind == 'admin' && $logged_info->is_admin == 'Y') {
|
if($called_position == 'before_module_proc' && $kind == 'admin' && $logged_info->is_admin == 'Y')
|
||||||
$oAdminloggingController = &getController('adminlogging');
|
{
|
||||||
|
$oAdminloggingController = getController('adminlogging');
|
||||||
$oAdminloggingController->insertLog($this->module, $this->act);
|
$oAdminloggingController->insertLog($this->module, $this->act);
|
||||||
}
|
}
|
||||||
?>
|
/* End of file adminlogging.php */
|
||||||
|
/* Location: ./addons/adminlogging */
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,21 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file autolink.addon.php
|
* @file autolink.addon.php
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
* @brief Automatic link add-on
|
* @brief Automatic link add-on
|
||||||
**/
|
*/
|
||||||
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC") {
|
if($called_position == 'after_module_proc' && Context::getResponseMethod() != "XMLRPC")
|
||||||
|
{
|
||||||
|
if(Mobile::isFromMobilePhone())
|
||||||
|
{
|
||||||
|
Context::addJsFile('./common/js/jquery.min.js', false, '', -1000000);
|
||||||
|
Context::addJsFile('./common/js/xe.min.js', false, '', -1000000);
|
||||||
|
}
|
||||||
Context::loadFile(array('./addons/autolink/autolink.js', 'body', '', null), true);
|
Context::loadFile(array('./addons/autolink/autolink.js', 'body', '', null), true);
|
||||||
}
|
}
|
||||||
?>
|
/* End of file autolink.addon.php */
|
||||||
|
/* Location: ./addons/autolink/autolink.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
<!DOCTYPE html>
|
||||||
<html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
|
<html lang="ko">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
|
<meta charset="utf-8" />
|
||||||
<title>Autolink Addon Unit Test</title>
|
<title>Autolink Addon Unit Test</title>
|
||||||
<link rel="stylesheet" type="text/css" href="../../common/js/unittest/css/JSSpec.css" />
|
<link rel="stylesheet" href="../../common/js/unittest/css/JSSpec.css" />
|
||||||
<script type="text/javascript" src="../../common/js/jquery.js"></script>
|
<script src="../../common/js/jquery.js"></script>
|
||||||
<script type="text/javascript" src="../../common/js/common.js"></script>
|
<script src="../../common/js/common.js"></script>
|
||||||
<script type="text/javascript" src="../../common/js/js_app.js"></script>
|
<script src="../../common/js/js_app.js"></script>
|
||||||
<script type="text/javascript" src="autolink.js"></script>
|
<script src="autolink.js"></script>
|
||||||
<script type="text/javascript" src="../../common/js/unittest/JSSpec/diff_match_patch.js"></script>
|
<script src="../../common/js/unittest/JSSpec/diff_match_patch.js"></script>
|
||||||
<script type="text/javascript" src="../../common/js/unittest/JSSpec/JSSpec.js"></script>
|
<script src="../../common/js/unittest/JSSpec/JSSpec.js"></script>
|
||||||
<script type="text/javascript">// <![CDATA[
|
<script>// <![CDATA[
|
||||||
|
|
||||||
var testParam = null;
|
var testParam = null;
|
||||||
var TestSuite = xe.createPlugin("TestSuite", {
|
var TestSuite = xe.createPlugin("TestSuite", {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file blogapicounter.addon.php
|
* @file blogapicounter.addon.php
|
||||||
|
|
@ -8,417 +10,506 @@ if(!defined('__XE__')) exit();
|
||||||
*
|
*
|
||||||
* It enables to write a post by using an external tool such as ms live writer, firefox performancing, zoundry and so on.
|
* It enables to write a post by using an external tool such as ms live writer, firefox performancing, zoundry and so on.
|
||||||
* It should be called before executing the module(before_module_proc). If not, it is forced to shut down.
|
* It should be called before executing the module(before_module_proc). If not, it is forced to shut down.
|
||||||
**/
|
* */
|
||||||
// Insert a rsd tag when called_position is after_module_proc
|
// Insert a rsd tag when called_position is after_module_proc
|
||||||
if($called_position == 'after_module_proc') {
|
if($called_position == 'after_module_proc')
|
||||||
|
{
|
||||||
// Create rsd address of the current module
|
// Create rsd address of the current module
|
||||||
$site_module_info = Context::get('site_module_info');
|
$site_module_info = Context::get('site_module_info');
|
||||||
$rsd_url = getFullSiteUrl($site_module_info->domain, '', 'mid',$site_module_info->mid, 'act','api');
|
$rsd_url = getFullSiteUrl($site_module_info->domain, '', 'mid', $this->module_info->mid, 'act', 'api');
|
||||||
// Insert rsd tag into the header
|
// Insert rsd tag into the header
|
||||||
Context::addHtmlHeader(" ".'<link rel="EditURI" type="application/rsd+xml" title="RSD" href="'.$rsd_url.'" />');
|
Context::addHtmlHeader(" " . '<link rel="EditURI" type="application/rsd+xml" title="RSD" href="' . $rsd_url . '" />');
|
||||||
}
|
}
|
||||||
// If act isnot api, just return
|
// If act isnot api, just return
|
||||||
if($_REQUEST['act']!='api') return;
|
if($_REQUEST['act'] != 'api')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Read func file
|
// Read func file
|
||||||
require_once('./addons/blogapi/blogapi.func.php');
|
require_once('./addons/blogapi/blogapi.func.php');
|
||||||
|
|
||||||
// xmlprc parsing
|
// xmlprc parsing
|
||||||
// Parse the requested xmlrpc
|
// Parse the requested xmlrpc
|
||||||
$oXmlParser = new XmlParser();
|
$xml = new SimpleXMLElement($GLOBALS['HTTP_RAW_POST_DATA']);
|
||||||
$xmlDoc = $oXmlParser->parse();
|
|
||||||
|
$method_name = (string)$xml->methodName;
|
||||||
|
$params = $xml->params->param;
|
||||||
|
|
||||||
$method_name = $xmlDoc->methodcall->methodname->body;
|
|
||||||
$params = $xmlDoc->methodcall->params->param;
|
|
||||||
if($params && !is_array($params)) $params = array($params);
|
|
||||||
// Compatible with some of methodname
|
// Compatible with some of methodname
|
||||||
if(in_array($method_name, array('metaWeblog.deletePost', 'metaWeblog.getUsersBlogs', 'metaWeblog.getUserInfo'))) {
|
if(in_array($method_name, array('metaWeblog.deletePost', 'metaWeblog.getUsersBlogs', 'metaWeblog.getUserInfo')))
|
||||||
|
{
|
||||||
$method_name = str_replace('metaWeblog.', 'blogger.', $method_name);
|
$method_name = str_replace('metaWeblog.', 'blogger.', $method_name);
|
||||||
}
|
}
|
||||||
// Delete the first argument if it is blogger.deletePost
|
|
||||||
if($method_name == 'blogger.deletePost') array_shift($params);
|
|
||||||
// Get user_id, password and attempt log-in
|
// Get user_id, password and attempt log-in
|
||||||
$user_id = trim($params[1]->value->string->body);
|
$user_id = trim((string)$params[1]->value->string);
|
||||||
$password = trim($params[2]->value->string->body);
|
$password = trim((string)$params[2]->value->string);
|
||||||
|
|
||||||
// Before executing the module, authentication is processed.
|
// Before executing the module, authentication is processed.
|
||||||
if($called_position == 'before_module_init') {
|
if($called_position == 'before_module_init')
|
||||||
|
{
|
||||||
// Attempt log-in by using member controller
|
// Attempt log-in by using member controller
|
||||||
if($user_id && $password) {
|
if($user_id && $password)
|
||||||
$oMemberController = &getController('member');
|
{
|
||||||
|
$oMemberController = getController('member');
|
||||||
$output = $oMemberController->doLogin($user_id, $password);
|
$output = $oMemberController->doLogin($user_id, $password);
|
||||||
// If login fails, an error message appears
|
// If login fails, an error message appears
|
||||||
if(!$output->toBool()) {
|
if(!$output->toBool())
|
||||||
|
{
|
||||||
$content = getXmlRpcFailure(1, $output->getMessage());
|
$content = getXmlRpcFailure(1, $output->getMessage());
|
||||||
printContent($content);
|
printContent($content);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$content = getXmlRpcFailure(1, 'not logged');
|
$content = getXmlRpcFailure(1, 'not logged');
|
||||||
printContent($content);
|
printContent($content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Before module processing, handle requests from blogapi tool and then terminate.
|
// Before module processing, handle requests from blogapi tool and then terminate.
|
||||||
if($called_position == 'before_module_proc') {
|
if($called_position == 'before_module_proc')
|
||||||
|
{
|
||||||
// Check writing permission
|
// Check writing permission
|
||||||
if(!$this->grant->write_document) {
|
if(!$this->grant->write_document)
|
||||||
printContent( getXmlRpcFailure(1, 'no permission') );
|
{
|
||||||
|
printContent(getXmlRpcFailure(1, 'no permission'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get information of the categories
|
// Get information of the categories
|
||||||
$oDocumentModel = &getModel('document');
|
$oDocumentModel = getModel('document');
|
||||||
$category_list = $oDocumentModel->getCategoryList($this->module_srl);
|
$category_list = $oDocumentModel->getCategoryList($this->module_srl);
|
||||||
|
|
||||||
// Specifies a temporary file storage
|
// Specifies a temporary file storage
|
||||||
$tmp_uploaded_path = sprintf('./files/cache/blogapi/%s/%s/', $this->mid, $user_id);
|
$tmp_uploaded_path = sprintf('./files/cache/blogapi/%s/%s/', $this->mid, $user_id);
|
||||||
$uploaded_target_path = sprintf('/files/cache/blogapi/%s/%s/', $this->mid, $user_id);
|
$uploaded_target_path = sprintf('/files/cache/blogapi/%s/%s/', $this->mid, $user_id);
|
||||||
|
|
||||||
switch($method_name) {
|
switch($method_name)
|
||||||
|
{
|
||||||
// Blog information
|
// Blog information
|
||||||
case 'blogger.getUsersBlogs' :
|
case 'blogger.getUsersBlogs' :
|
||||||
$obj->url = getFullSiteUrl('');
|
$obj = new stdClass();
|
||||||
$obj->blogid = $this->mid;
|
$obj->url = getFullSiteUrl('');
|
||||||
$obj->blogName = $this->module_info->browser_title;
|
$obj->blogid = $this->mid;
|
||||||
$blog_list = array($obj);
|
$obj->blogName = $this->module_info->browser_title;
|
||||||
|
$blog_list = array($obj);
|
||||||
|
|
||||||
$content = getXmlRpcResponse($blog_list);
|
$content = getXmlRpcResponse($blog_list);
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Return a list of categories
|
// Return a list of categories
|
||||||
case 'metaWeblog.getCategories' :
|
case 'metaWeblog.getCategories' :
|
||||||
$category_obj_list = array();
|
$category_obj_list = array();
|
||||||
if($category_list) {
|
if($category_list)
|
||||||
foreach($category_list as $category_srl => $category_info) {
|
{
|
||||||
unset($obj);
|
foreach($category_list as $category_srl => $category_info)
|
||||||
$obj->description = $category_info->title;
|
{
|
||||||
//$obj->htmlUrl = Context::getRequestUri().$this->mid.'/1';
|
$obj = new stdClass();
|
||||||
//$obj->rssUrl= Context::getRequestUri().'rss/'.$this->mid.'/1';
|
$obj->description = $category_info->title;
|
||||||
$obj->title = $category_info->title;
|
//$obj->htmlUrl = Context::getRequestUri().$this->mid.'/1';
|
||||||
$obj->categoryid = $category_srl;
|
//$obj->rssUrl= Context::getRequestUri().'rss/'.$this->mid.'/1';
|
||||||
$category_obj_list[] = $obj;
|
$obj->title = $category_info->title;
|
||||||
}
|
$obj->categoryid = $category_srl;
|
||||||
|
$category_obj_list[] = $obj;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$content = getXmlRpcResponse($category_obj_list);
|
$content = getXmlRpcResponse($category_obj_list);
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Upload file
|
// Upload file
|
||||||
case 'metaWeblog.newMediaObject' :
|
case 'metaWeblog.newMediaObject' :
|
||||||
// Check a file upload permission
|
// Check a file upload permission
|
||||||
$oFileModel = &getModel('file');
|
$oFileModel = getModel('file');
|
||||||
$file_module_config = $oFileModel->getFileModuleConfig($this->module_srl);
|
$file_module_config = $oFileModel->getFileModuleConfig($this->module_srl);
|
||||||
if(is_array($file_module_config->download_grant) && count($file_module_config->download_grant)>0) {
|
if(is_array($file_module_config->download_grant) && count($file_module_config->download_grant) > 0)
|
||||||
$logged_info = Context::get('logged_info');
|
{
|
||||||
if($logged_info->is_admin != 'Y') {
|
$logged_info = Context::get('logged_info');
|
||||||
$is_permitted = false;
|
if($logged_info->is_admin != 'Y')
|
||||||
for($i=0;$i<count($file_module_config->download_grant);$i++) {
|
{
|
||||||
$group_srl = $file_module_config->download_grant[$i];
|
$is_permitted = false;
|
||||||
if($logged_info->group_list[$group_srl]) {
|
for($i = 0; $i < count($file_module_config->download_grant); $i++)
|
||||||
$is_permitted = true;
|
{
|
||||||
break;
|
$group_srl = $file_module_config->download_grant[$i];
|
||||||
}
|
if($logged_info->group_list[$group_srl])
|
||||||
|
{
|
||||||
|
$is_permitted = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(!$is_permitted) printContent( getXmlRpcFailure(1, 'no permission') );
|
}
|
||||||
|
if(!$is_permitted){
|
||||||
|
printContent(getXmlRpcFailure(1, 'no permission'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$fileinfo = $params[3]->value->struct->member;
|
$fileinfo = $params[3]->value->struct->member;
|
||||||
foreach($fileinfo as $key => $val) {
|
foreach($fileinfo as $key => $val)
|
||||||
$nodename = $val->name->body;
|
{
|
||||||
if($nodename == 'bits') $filedata = base64_decode($val->value->base64->body);
|
$nodename = (string)$val->name;
|
||||||
elseif($nodename == 'name') $filename = $val->value->string->body;
|
if($nodename == 'bits')
|
||||||
}
|
$filedata = base64_decode((string)$val->value->base64);
|
||||||
|
elseif($nodename == 'name')
|
||||||
|
$filename = (string)$val->value->string;
|
||||||
|
}
|
||||||
|
|
||||||
$tmp_arr = explode('/',$filename);
|
$tmp_arr = explode('/', $filename);
|
||||||
$filename = array_pop($tmp_arr);
|
$filename = array_pop($tmp_arr);
|
||||||
|
|
||||||
if(!is_dir($tmp_uploaded_path)) FileHandler::makeDir($tmp_uploaded_path);
|
if(!is_dir($tmp_uploaded_path))
|
||||||
|
{
|
||||||
|
FileHandler::makeDir($tmp_uploaded_path);
|
||||||
|
}
|
||||||
|
|
||||||
$target_filename = sprintf('%s%s', $tmp_uploaded_path, $filename);
|
$target_filename = sprintf('%s%s', $tmp_uploaded_path, $filename);
|
||||||
FileHandler::writeFile($target_filename, $filedata);
|
FileHandler::writeFile($target_filename, $filedata);
|
||||||
$obj->url = Context::getRequestUri().$target_filename;
|
$obj = new stdClass();
|
||||||
|
$obj->url = Context::getRequestUri() . $target_filename;
|
||||||
|
|
||||||
$content = getXmlRpcResponse($obj);
|
$content = getXmlRpcResponse($obj);
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
// Get posts
|
// Get posts
|
||||||
case 'metaWeblog.getPost' :
|
case 'metaWeblog.getPost' :
|
||||||
$document_srl = $params[0]->value->string->body;
|
$document_srl = (string)$params[0]->value->string;
|
||||||
if(!$document_srl) {
|
if(!$document_srl)
|
||||||
printContent( getXmlRpcFailure(1, 'no permission') );
|
{
|
||||||
} else {
|
printContent(getXmlRpcFailure(1, 'no permission'));
|
||||||
$oDocumentModel = &getModel('document');
|
}
|
||||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
else
|
||||||
if(!$oDocument->isExists() || !$oDocument->isGranted()) {
|
{
|
||||||
printContent( getXmlRpcFailure(1, 'no permission') );
|
$oDocumentModel = getModel('document');
|
||||||
} else {
|
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||||
// Get a list of categories and set Context
|
if(!$oDocument->isExists() || !$oDocument->isGranted())
|
||||||
$category = "";
|
{
|
||||||
if($oDocument->get('category_srl')) {
|
printContent(getXmlRpcFailure(1, 'no permission'));
|
||||||
$oDocumentModel = &getModel('document');
|
|
||||||
$category_list = $oDocumentModel->getCategoryList($oDocument->get('module_srl'));
|
|
||||||
if($category_list[$oDocument->get('category_srl')]) {
|
|
||||||
$category = $category_list[$oDocument->get('category_srl')]->title;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$content = sprintf(
|
|
||||||
'<?xml version="1.0" encoding="utf-8"?>'.
|
|
||||||
'<methodResponse>'.
|
|
||||||
'<params>'.
|
|
||||||
'<param>'.
|
|
||||||
'<value>'.
|
|
||||||
'<struct>'.
|
|
||||||
'<member><name>categories</name><value><array><data><value><![CDATA[%s]]></value></data></array></value></member>'.
|
|
||||||
'<member><name>dateCreated</name><value><dateTime.iso8601>%s</dateTime.iso8601></value></member>'.
|
|
||||||
'<member><name>description</name><value><![CDATA[%s]]></value></member>'.
|
|
||||||
'<member><name>link</name><value>%s</value></member>'.
|
|
||||||
'<member><name>postid</name><value><string>%s</string></value></member>'.
|
|
||||||
'<member><name>title</name><value><![CDATA[%s]]></value></member>'.
|
|
||||||
'<member><name>publish</name><value><boolean>1</boolean></value></member>'.
|
|
||||||
'</struct>'.
|
|
||||||
'</value>'.
|
|
||||||
'</param>'.
|
|
||||||
'</params>'.
|
|
||||||
'</methodResponse>',
|
|
||||||
$category,
|
|
||||||
date("Ymd", $oDocument->getRegdateTime()).'T'.date("H:i:s", $oDocument->getRegdateTime()),
|
|
||||||
$oDocument->getContent(false, false, true,false),
|
|
||||||
getFullUrl('','document_srl', $oDocument->document_srl),
|
|
||||||
$oDocument->document_srl,
|
|
||||||
$oDocument->getTitleText()
|
|
||||||
);
|
|
||||||
printContent($content);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get a list of categories and set Context
|
||||||
|
$category = "";
|
||||||
|
if($oDocument->get('category_srl'))
|
||||||
|
{
|
||||||
|
$oDocumentModel = &getModel('document');
|
||||||
|
$category_list = $oDocumentModel->getCategoryList($oDocument->get('module_srl'));
|
||||||
|
if($category_list[$oDocument->get('category_srl')])
|
||||||
|
{
|
||||||
|
$category = $category_list[$oDocument->get('category_srl')]->title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = sprintf(
|
||||||
|
'<?xml version="1.0" encoding="utf-8"?>' .
|
||||||
|
'<methodResponse>' .
|
||||||
|
'<params>' .
|
||||||
|
'<param>' .
|
||||||
|
'<value>' .
|
||||||
|
'<struct>' .
|
||||||
|
'<member><name>categories</name><value><array><data><value><![CDATA[%s]]></value></data></array></value></member>' .
|
||||||
|
'<member><name>dateCreated</name><value><dateTime.iso8601>%s</dateTime.iso8601></value></member>' .
|
||||||
|
'<member><name>description</name><value><![CDATA[%s]]></value></member>' .
|
||||||
|
'<member><name>link</name><value>%s</value></member>' .
|
||||||
|
'<member><name>postid</name><value><string>%s</string></value></member>' .
|
||||||
|
'<member><name>title</name><value><![CDATA[%s]]></value></member>' .
|
||||||
|
'<member><name>publish</name><value><boolean>1</boolean></value></member>' .
|
||||||
|
'</struct>' .
|
||||||
|
'</value>' .
|
||||||
|
'</param>' .
|
||||||
|
'</params>' .
|
||||||
|
'</methodResponse>',
|
||||||
|
$category,
|
||||||
|
date("Ymd", $oDocument->getRegdateTime()) . 'T' . date("H:i:s", $oDocument->getRegdateTime()),
|
||||||
|
$oDocument->getContent(false, false, true, false),
|
||||||
|
getFullUrl('', 'document_srl', $oDocument->document_srl),
|
||||||
|
$oDocument->document_srl,
|
||||||
|
$oDocument->getTitleText()
|
||||||
|
);
|
||||||
|
printContent($content);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Write a new post
|
// Write a new post
|
||||||
case 'metaWeblog.newPost' :
|
case 'metaWeblog.newPost' :
|
||||||
unset($obj);
|
$obj = new stdClass();
|
||||||
$info = $params[3];
|
$info = $params[3];
|
||||||
// Get information of post, title, and category
|
// Get information of post, title, and category
|
||||||
for($i=0;$i<count($info->value->struct->member);$i++) {
|
foreach($info->value->struct->member as $val)
|
||||||
$val = $info->value->struct->member[$i];
|
{
|
||||||
switch($val->name->body) {
|
switch((string)$val->name)
|
||||||
case 'title' :
|
{
|
||||||
$obj->title = $val->value->string->body;
|
case 'title' :
|
||||||
break;
|
$obj->title = (string)$val->value->string;
|
||||||
case 'description' :
|
break;
|
||||||
$obj->content = $val->value->string->body;
|
case 'description' :
|
||||||
break;
|
$obj->content = (string)$val->value->string;
|
||||||
case 'categories' :
|
break;
|
||||||
$categories = $val->value->array->data->value;
|
case 'categories' :
|
||||||
if(!is_array($categories)) $categories = array($categories);
|
$categories = $val->value->array->data->value;
|
||||||
$category = $categories[0]->string->body;
|
$category = (string)$categories[0]->string;
|
||||||
if($category && $category_list) {
|
if($category && $category_list)
|
||||||
foreach($category_list as $category_srl => $category_info) {
|
{
|
||||||
if($category_info->title == $category) $obj->category_srl = $category_srl;
|
foreach($category_list as $category_srl => $category_info)
|
||||||
}
|
{
|
||||||
}
|
if($category_info->title == $category)
|
||||||
break;
|
$obj->category_srl = $category_srl;
|
||||||
case 'tagwords' :
|
}
|
||||||
$tags = $val->value->array->data->value;
|
|
||||||
if(!is_array($tags)) $tags = array($tags);
|
|
||||||
for($j=0;$j<count($tags);$j++) {
|
|
||||||
$tag_list[] = $tags[$j]->string->body;
|
|
||||||
}
|
|
||||||
if(count($tag_list)) $obj->tags = implode(',',$tag_list);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Set document srl
|
|
||||||
$document_srl = getNextSequence();
|
|
||||||
$obj->document_srl = $document_srl;
|
|
||||||
$obj->module_srl = $this->module_srl;
|
|
||||||
// Attachment
|
|
||||||
if(is_dir($tmp_uploaded_path)) {
|
|
||||||
$file_list = FileHandler::readDir($tmp_uploaded_path);
|
|
||||||
$file_count = count($file_list);
|
|
||||||
if($file_count) {
|
|
||||||
$oFileController = &getController('file');
|
|
||||||
for($i=0;$i<$file_count;$i++) {
|
|
||||||
$file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]);
|
|
||||||
$file_info['name'] = $file_list[$i];
|
|
||||||
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
|
|
||||||
$uploaded_filename = $fileOutput->get('uploaded_filename');
|
|
||||||
$source_filename = $fileOutput->get('source_filename');
|
|
||||||
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $uploaded_filename), $obj->content);
|
|
||||||
}
|
}
|
||||||
$obj->uploaded_count = $file_count;
|
break;
|
||||||
|
case 'tagwords' :
|
||||||
|
$tags = $val->value->array->data->value;
|
||||||
|
foreach($tags as $tag)
|
||||||
|
{
|
||||||
|
$tag_list[] = (string)$tag->string;
|
||||||
|
}
|
||||||
|
if(count($tag_list))
|
||||||
|
$obj->tags = implode(',', $tag_list);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set document srl
|
||||||
|
$document_srl = getNextSequence();
|
||||||
|
$obj->document_srl = $document_srl;
|
||||||
|
$obj->module_srl = $this->module_srl;
|
||||||
|
|
||||||
|
// Attachment
|
||||||
|
if(is_dir($tmp_uploaded_path))
|
||||||
|
{
|
||||||
|
$file_list = FileHandler::readDir($tmp_uploaded_path);
|
||||||
|
$file_count = count($file_list);
|
||||||
|
if($file_count)
|
||||||
|
{
|
||||||
|
$oFileController = &getController('file');
|
||||||
|
for($i = 0; $i < $file_count; $i++)
|
||||||
|
{
|
||||||
|
$file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]);
|
||||||
|
$file_info['name'] = $file_list[$i];
|
||||||
|
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
|
||||||
|
$uploaded_filename = $fileOutput->get('uploaded_filename');
|
||||||
|
$source_filename = $fileOutput->get('source_filename');
|
||||||
|
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl, 3), $uploaded_filename), $obj->content);
|
||||||
}
|
}
|
||||||
|
$obj->uploaded_count = $file_count;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$oDocumentController = getController('document');
|
||||||
|
$obj->commentStatus = 'ALLOW';
|
||||||
|
$obj->allow_trackback = 'Y';
|
||||||
|
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
$obj->member_srl = $logged_info->member_srl;
|
||||||
|
$obj->user_id = $logged_info->user_id;
|
||||||
|
$obj->user_name = $logged_info->user_name;
|
||||||
|
$obj->nick_name = $logged_info->nick_name;
|
||||||
|
$obj->email_address = $logged_info->email_address;
|
||||||
|
$obj->homepage = $logged_info->homepage;
|
||||||
|
$output = $oDocumentController->insertDocument($obj, TRUE);
|
||||||
|
|
||||||
$oDocumentController = &getController('document');
|
if(!$output->toBool())
|
||||||
$obj->commentStatus = 'ALLOW';
|
{
|
||||||
$obj->allow_trackback = 'Y';
|
$content = getXmlRpcFailure(1, $output->getMessage());
|
||||||
$output = $oDocumentController->insertDocument($obj);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$content = getXmlRpcResponse(strval($document_srl));
|
||||||
|
}
|
||||||
|
FileHandler::removeDir($tmp_uploaded_path);
|
||||||
|
|
||||||
if(!$output->toBool()) {
|
printContent($content);
|
||||||
$content = getXmlRpcFailure(1, $output->getMessage());
|
|
||||||
} else {
|
|
||||||
$content = getXmlRpcResponse(strval($document_srl));
|
|
||||||
}
|
|
||||||
FileHandler::removeDir($tmp_uploaded_path);
|
|
||||||
|
|
||||||
printContent($content);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Edit post
|
// Edit post
|
||||||
case 'metaWeblog.editPost' :
|
case 'metaWeblog.editPost' :
|
||||||
$tmp_val = $params[0]->value->string->body;
|
$tmp_val = (string)$params[0]->value->string;
|
||||||
if(!$tmp_val) $tmp_val = $params[0]->value->i4->body;
|
if(!$tmp_val)
|
||||||
if(!$tmp_val) {
|
$tmp_val = (string)$params[0]->value->i4;
|
||||||
$content = getXmlRpcFailure(1, 'no permission');
|
if(!$tmp_val)
|
||||||
break;
|
{
|
||||||
}
|
$content = getXmlRpcFailure(1, 'no permission');
|
||||||
$tmp_arr = explode('/', $tmp_val);
|
break;
|
||||||
$document_srl = array_pop($tmp_arr);
|
}
|
||||||
if(!$document_srl) {
|
$tmp_arr = explode('/', $tmp_val);
|
||||||
$content = getXmlRpcFailure(1, 'no permission');
|
$document_srl = array_pop($tmp_arr);
|
||||||
break;
|
if(!$document_srl)
|
||||||
}
|
{
|
||||||
|
$content = getXmlRpcFailure(1, 'no permission');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$oDocumentModel = &getModel('document');
|
$oDocumentModel = getModel('document');
|
||||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||||
// Check if a permission to modify a document is granted
|
// Check if a permission to modify a document is granted
|
||||||
if(!$oDocument->isGranted()) {
|
if(!$oDocument->isGranted())
|
||||||
$content = getXmlRpcFailure(1, 'no permission');
|
{
|
||||||
break;
|
$content = getXmlRpcFailure(1, 'no permission');
|
||||||
}
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$obj = $oDocument->getObjectVars();
|
$obj = $oDocument->getObjectVars();
|
||||||
|
|
||||||
$info = $params[3];
|
$info = $params[3];
|
||||||
// Get information of post, title, and category
|
// Get information of post, title, and category
|
||||||
for($i=0;$i<count($info->value->struct->member);$i++) {
|
foreach($info->value->struct->member as $val)
|
||||||
$val = $info->value->struct->member[$i];
|
{
|
||||||
switch($val->name->body) {
|
switch((string)$val->name)
|
||||||
case 'title' :
|
{
|
||||||
$obj->title = $val->value->string->body;
|
case 'title' :
|
||||||
break;
|
$obj->title = (string)$val->value->string;
|
||||||
case 'description' :
|
break;
|
||||||
$obj->content = $val->value->string->body;
|
case 'description' :
|
||||||
break;
|
$obj->content = (string)$val->value->string;
|
||||||
case 'categories' :
|
break;
|
||||||
$categories = $val->value->array->data->value;
|
case 'categories' :
|
||||||
if(!is_array($categories)) $categories = array($categories);
|
$categories = $val->value->array->data->value;
|
||||||
$category = $categories[0]->string->body;
|
$category = (string)$categories[0]->string;
|
||||||
if($category && $category_list) {
|
if($category && $category_list)
|
||||||
foreach($category_list as $category_srl => $category_info) {
|
{
|
||||||
if($category_info->title == $category) $obj->category_srl = $category_srl;
|
foreach($category_list as $category_srl => $category_info)
|
||||||
}
|
{
|
||||||
}
|
if($category_info->title == $category)
|
||||||
break;
|
$obj->category_srl = $category_srl;
|
||||||
case 'tagwords' :
|
}
|
||||||
$tags = $val->value->array->data->value;
|
|
||||||
if(!is_array($tags)) $tags = array($tags);
|
|
||||||
for($j=0;$j<count($tags);$j++) {
|
|
||||||
$tag_list[] = $tags[$j]->string->body;
|
|
||||||
}
|
|
||||||
if(count($tag_list)) $obj->tags = implode(',',$tag_list);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// Document srl
|
|
||||||
$obj->document_srl = $document_srl;
|
|
||||||
$obj->module_srl = $this->module_srl;
|
|
||||||
// Attachment
|
|
||||||
if(is_dir($tmp_uploaded_path)) {
|
|
||||||
$file_list = FileHandler::readDir($tmp_uploaded_path);
|
|
||||||
$file_count = count($file_list);
|
|
||||||
if($file_count) {
|
|
||||||
$oFileController = &getController('file');
|
|
||||||
for($i=0;$i<$file_count;$i++) {
|
|
||||||
$file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]);
|
|
||||||
$file_info['name'] = $file_list[$i];
|
|
||||||
|
|
||||||
$moved_filename = sprintf('./files/attach/images/%s/%s/%s', $this->module_srl, $document_srl, $file_info['name']);
|
|
||||||
if(file_exists($moved_filename)) continue;
|
|
||||||
|
|
||||||
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
|
|
||||||
$uploaded_filename = $fileOutput->get('uploaded_filename');
|
|
||||||
$source_filename = $fileOutput->get('source_filename');
|
|
||||||
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl,3), $uploaded_filename), $obj->content);
|
|
||||||
}
|
}
|
||||||
$obj->uploaded_count += $file_count;
|
break;
|
||||||
|
case 'tagwords' :
|
||||||
|
$tags = $val->value->array->data->value;
|
||||||
|
foreach($tags as $tag)
|
||||||
|
{
|
||||||
|
$tag_list[] = (string)$tag->string;
|
||||||
|
}
|
||||||
|
if(count($tag_list))
|
||||||
|
$obj->tags = implode(',', $tag_list);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Document srl
|
||||||
|
$obj->document_srl = $document_srl;
|
||||||
|
$obj->module_srl = $this->module_srl;
|
||||||
|
// Attachment
|
||||||
|
if(is_dir($tmp_uploaded_path))
|
||||||
|
{
|
||||||
|
$file_list = FileHandler::readDir($tmp_uploaded_path);
|
||||||
|
$file_count = count($file_list);
|
||||||
|
if($file_count)
|
||||||
|
{
|
||||||
|
$oFileController = &getController('file');
|
||||||
|
for($i = 0; $i < $file_count; $i++)
|
||||||
|
{
|
||||||
|
$file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]);
|
||||||
|
$file_info['name'] = $file_list[$i];
|
||||||
|
|
||||||
|
$moved_filename = sprintf('./files/attach/images/%s/%s/%s', $this->module_srl, $document_srl, $file_info['name']);
|
||||||
|
if(file_exists($moved_filename))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$fileOutput = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true);
|
||||||
|
$uploaded_filename = $fileOutput->get('uploaded_filename');
|
||||||
|
$source_filename = $fileOutput->get('source_filename');
|
||||||
|
$obj->content = str_replace($uploaded_target_path . $source_filename, sprintf('/files/attach/images/%s/%s%s', $this->module_srl, getNumberingPath($document_srl, 3), $uploaded_filename), $obj->content);
|
||||||
}
|
}
|
||||||
|
$obj->uploaded_count += $file_count;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$oDocumentController = &getController('document');
|
$oDocumentController = &getController('document');
|
||||||
$output = $oDocumentController->updateDocument($oDocument,$obj);
|
$output = $oDocumentController->updateDocument($oDocument, $obj, TRUE);
|
||||||
|
|
||||||
if(!$output->toBool()) {
|
if(!$output->toBool())
|
||||||
$content = getXmlRpcFailure(1, $output->getMessage());
|
{
|
||||||
} else {
|
$content = getXmlRpcFailure(1, $output->getMessage());
|
||||||
$content = getXmlRpcResponse(true);
|
}
|
||||||
FileHandler::removeDir($tmp_uploaded_path);
|
else
|
||||||
}
|
{
|
||||||
|
$content = getXmlRpcResponse(true);
|
||||||
|
FileHandler::removeDir($tmp_uploaded_path);
|
||||||
|
}
|
||||||
|
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
// Delete the post
|
// Delete the post
|
||||||
case 'blogger.deletePost' :
|
case 'blogger.deletePost' :
|
||||||
$tmp_val = $params[0]->value->string->body;
|
$tmp_val = (string)$params[1]->value->string;
|
||||||
$tmp_arr = explode('/', $tmp_val);
|
$tmp_arr = explode('/', $tmp_val);
|
||||||
$document_srl = array_pop($tmp_arr);
|
$document_srl = array_pop($tmp_arr);
|
||||||
// Get a document
|
// Get a document
|
||||||
$oDocumentModel = &getModel('document');
|
$oDocumentModel = getModel('document');
|
||||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||||
// If the document exists
|
// If the document exists
|
||||||
if(!$oDocument->isExists()) {
|
if(!$oDocument->isExists())
|
||||||
$content = getXmlRpcFailure(1, 'not exists');
|
{
|
||||||
|
$content = getXmlRpcFailure(1, 'not exists');
|
||||||
// Check if a permission to delete a document is granted
|
// Check if a permission to delete a document is granted
|
||||||
} elseif(!$oDocument->isGranted()) {
|
}
|
||||||
$content = getXmlRpcFailure(1, 'no permission');
|
elseif(!$oDocument->isGranted())
|
||||||
break;
|
{
|
||||||
|
$content = getXmlRpcFailure(1, 'no permission');
|
||||||
|
break;
|
||||||
// Delete
|
// Delete
|
||||||
} else {
|
}
|
||||||
$oDocumentController = &getController('document');
|
else
|
||||||
$output = $oDocumentController->deleteDocument($document_srl);
|
{
|
||||||
if(!$output->toBool()) $content = getXmlRpcFailure(1, $output->getMessage());
|
$oDocumentController = getController('document');
|
||||||
else $content = getXmlRpcResponse(true);
|
$output = $oDocumentController->deleteDocument($document_srl);
|
||||||
}
|
if(!$output->toBool())
|
||||||
|
$content = getXmlRpcFailure(1, $output->getMessage());
|
||||||
|
else
|
||||||
|
$content = getXmlRpcResponse(true);
|
||||||
|
}
|
||||||
|
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
// Get recent posts
|
// Get recent posts
|
||||||
case 'metaWeblog.getRecentPosts' :
|
case 'metaWeblog.getRecentPosts' :
|
||||||
// Options to get a list
|
// Options to get a list
|
||||||
$args->module_srl = $this->module_srl; // /< module_srl of the current module
|
$args = new stdClass();
|
||||||
$args->page = 1;
|
$args->module_srl = $this->module_srl; // /< module_srl of the current module
|
||||||
$args->list_count = 20;
|
$args->page = 1;
|
||||||
$args->sort_index = 'list_order'; // /< Sorting values
|
$args->list_count = 20;
|
||||||
$logged_info = Context::get('logged_info');
|
$args->sort_index = 'list_order'; // /< Sorting values
|
||||||
$args->search_target = 'member_srl';
|
$logged_info = Context::get('logged_info');
|
||||||
$args->search_keyword = $logged_info->member_srl;
|
$args->search_target = 'member_srl';
|
||||||
$output = $oDocumentModel->getDocumentList($args);
|
$args->search_keyword = $logged_info->member_srl;
|
||||||
if(!$output->toBool() || !$output->data) {
|
$output = $oDocumentModel->getDocumentList($args);
|
||||||
$content = getXmlRpcFailure(1, 'post not founded');
|
if(!$output->toBool() || !$output->data)
|
||||||
printContent($content);
|
{
|
||||||
} else {
|
$content = getXmlRpcFailure(1, 'post not founded');
|
||||||
$oEditorController = &getController('editor');
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$oEditorController = getController('editor');
|
||||||
|
|
||||||
$posts = array();
|
$posts = array();
|
||||||
foreach($output->data as $key => $oDocument) {
|
foreach($output->data as $key => $oDocument)
|
||||||
$post = null;
|
{
|
||||||
$post->categories = array();
|
$post = new stdClass();
|
||||||
$post->dateCreated = date("Ymd", $oDocument->getRegdateTime()).'T'.date("H:i:s", $oDocument->getRegdateTime());
|
$post->categories = array();
|
||||||
$post->description = htmlspecialchars($oEditorController->transComponent($oDocument->getContent(false,false,true,false)));
|
$post->dateCreated = date("Ymd", $oDocument->getRegdateTime()) . 'T' . date("H:i:s", $oDocument->getRegdateTime());
|
||||||
$post->link = $post->permaLink = getFullUrl('','document_srl',$oDocument->document_srl);
|
$post->description = htmlspecialchars($oEditorController->transComponent($oDocument->getContent(false, false, true, false)));
|
||||||
$post->postid = $oDocument->document_srl;
|
$post->link = $post->permaLink = getFullUrl('', 'document_srl', $oDocument->document_srl);
|
||||||
$post->title = htmlspecialchars($oDocument->get('title'));
|
$post->postid = $oDocument->document_srl;
|
||||||
$post->publish = 1;
|
$post->title = htmlspecialchars($oDocument->get('title'));
|
||||||
$post->userid = $oDocument->get('user_id');
|
$post->publish = 1;
|
||||||
$post->mt_allow_pings = 0;
|
$post->userid = $oDocument->get('user_id');
|
||||||
$post->mt_allow_comments = $oDocument->allowComment()?1:0;
|
$post->mt_allow_pings = 0;
|
||||||
$posts[] = $post;
|
$post->mt_allow_comments = $oDocument->allowComment() ? 1 : 0;
|
||||||
}
|
$posts[] = $post;
|
||||||
$content = getXmlRpcResponse($posts);
|
|
||||||
printContent($content);
|
|
||||||
}
|
}
|
||||||
|
$content = getXmlRpcResponse($posts);
|
||||||
|
printContent($content);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Display RSD if there is no request
|
// Display RSD if there is no request
|
||||||
default :
|
default :
|
||||||
$homepagelink = getUrl('','mid',$this->mid);
|
$homepagelink = getUrl('', 'mid', $this->mid);
|
||||||
$site_module_info = Context::get('site_module_info');
|
$site_module_info = Context::get('site_module_info');
|
||||||
$api_url = getFullSiteUrl($site_module_info->domain, '', 'mid',$site_module_info->mid, 'act','api');
|
$api_url = getFullSiteUrl($site_module_info->domain, '', 'mid', $site_module_info->mid, 'act', 'api');
|
||||||
$content = <<<RSDContent
|
$content = <<<RSDContent
|
||||||
<?xml version="1.0" ?>
|
<?xml version="1.0" ?>
|
||||||
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd" >
|
<rsd version="1.0" xmlns="http://archipelago.phrasewise.com/rsd" >
|
||||||
<service>
|
<service>
|
||||||
|
|
@ -431,8 +522,9 @@ if($called_position == 'before_module_proc') {
|
||||||
</service>
|
</service>
|
||||||
</rsd>
|
</rsd>
|
||||||
RSDContent;
|
RSDContent;
|
||||||
printContent($content);
|
printContent($content);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
/* End of file blogapi.addon.php */
|
||||||
|
/* Location: ./addons/blogapi/blogapi.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,66 +1,96 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
|
||||||
/**
|
if(!defined('__XE__'))
|
||||||
* @file ./addons/blogapi/blogapi.func.php
|
exit();
|
||||||
* @author NHN (developers@xpressengine.com)
|
|
||||||
* @brief Function collections for the implementation of blogapi
|
|
||||||
**/
|
|
||||||
|
|
||||||
// Error messages
|
|
||||||
function getXmlRpcFailure($error, $message) {
|
|
||||||
return
|
|
||||||
sprintf(
|
|
||||||
"<methodResponse>\n<fault><value><struct>\n<member>\n<name>faultCode</name>\n<value><int>%d</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>%s</string></value>\n</member>\n</struct></value></fault>\n</methodResponse>\n",
|
|
||||||
$error,
|
|
||||||
htmlspecialchars($message)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// Display results
|
|
||||||
function getXmlRpcResponse($params) {
|
|
||||||
$buff = '<?xml version="1.0" encoding="utf-8"?>'."\n<methodResponse><params>";
|
|
||||||
$buff .= _getEncodedVal($params);
|
|
||||||
$buff .= "</params>\n</methodResponse>\n";
|
|
||||||
|
|
||||||
return $buff;
|
/**
|
||||||
}
|
* @file ./addons/blogapi/blogapi.func.php
|
||||||
// Encoding
|
* @author NHN (developers@xpressengine.com)
|
||||||
function _getEncodedVal($val, $is_sub_set = false) {
|
* @brief Function collections for the implementation of blogapi
|
||||||
if(is_int($val)) $buff = sprintf("<value><i4>%d</i4></value>", $val);
|
* */
|
||||||
elseif(is_string($val)&&preg_match('/^([0-9]+)T([0-9\:]+)$/', $val)) $buff = sprintf("<value><dateTime.iso8601>%s</dateTime.iso8601></value>\n", $val);
|
// Error messages
|
||||||
elseif(is_double($val)) $buff = sprintf("<value><double>%f</double></value>", $val);
|
function getXmlRpcFailure($error, $message)
|
||||||
elseif(is_bool($val)) $buff = sprintf("<value><boolean>%d</boolean></value>", $val?1:0);
|
{
|
||||||
elseif(is_object($val)) {
|
return
|
||||||
$values = get_object_vars($val);
|
sprintf(
|
||||||
$val_count = count($values);
|
"<methodResponse>\n<fault><value><struct>\n<member>\n<name>faultCode</name>\n<value><int>%d</int></value>\n</member>\n<member>\n<name>faultString</name>\n<value><string>%s</string></value>\n</member>\n</struct></value></fault>\n</methodResponse>\n", $error, htmlspecialchars($message)
|
||||||
$buff = "<value><struct>";
|
);
|
||||||
foreach($values as $k => $v) {
|
}
|
||||||
$buff .= sprintf("<member>\n<name>%s</name>\n%s</member>\n", htmlspecialchars($k), _getEncodedVal($v, true));
|
|
||||||
}
|
// Display results
|
||||||
$buff .= "</struct></value>\n";
|
function getXmlRpcResponse($params)
|
||||||
} elseif(is_array($val)) {
|
{
|
||||||
$val_count = count($val);
|
$buff = '<?xml version="1.0" encoding="utf-8"?>' . "\n<methodResponse><params>";
|
||||||
$buff = "<value><array>\n<data>";
|
$buff .= _getEncodedVal($params);
|
||||||
for($i=0;$i<$val_count;$i++) {
|
$buff .= "</params>\n</methodResponse>\n";
|
||||||
$buff .= _getEncodedVal($val[$i], true);
|
|
||||||
}
|
return $buff;
|
||||||
$buff .= "</data>\n</array></value>";
|
}
|
||||||
} else {
|
|
||||||
$buff = sprintf("<value><string>%s</string></value>\n", $val);
|
// Encoding
|
||||||
}
|
function _getEncodedVal($val, $is_sub_set = false)
|
||||||
if(!$is_sub_set) return sprintf("<param>\n%s</param>", $buff);
|
{
|
||||||
return $buff;
|
if(is_int($val))
|
||||||
}
|
{
|
||||||
// Display the result
|
$buff = sprintf("<value><i4>%d</i4></value>", $val);
|
||||||
function printContent($content) {
|
}
|
||||||
header("Content-Type: text/xml; charset=UTF-8");
|
elseif(is_string($val) && preg_match('/^([0-9]+)T([0-9\:]+)$/', $val))
|
||||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
{
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
$buff = sprintf("<value><dateTime.iso8601>%s</dateTime.iso8601></value>\n", $val);
|
||||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
}
|
||||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
elseif(is_double($val))
|
||||||
header("Pragma: no-cache");
|
{
|
||||||
print $content;
|
$buff = sprintf("<value><double>%f</double></value>", $val);
|
||||||
Context::close();
|
}
|
||||||
exit();
|
elseif(is_bool($val))
|
||||||
}
|
{
|
||||||
?>
|
$buff = sprintf("<value><boolean>%d</boolean></value>", $val ? 1 : 0);
|
||||||
|
}
|
||||||
|
elseif(is_object($val))
|
||||||
|
{
|
||||||
|
$values = get_object_vars($val);
|
||||||
|
$val_count = count($values);
|
||||||
|
$buff = "<value><struct>";
|
||||||
|
foreach($values as $k => $v)
|
||||||
|
{
|
||||||
|
$buff .= sprintf("<member>\n<name>%s</name>\n%s</member>\n", htmlspecialchars($k), _getEncodedVal($v, true));
|
||||||
|
}
|
||||||
|
$buff .= "</struct></value>\n";
|
||||||
|
}
|
||||||
|
elseif(is_array($val))
|
||||||
|
{
|
||||||
|
$val_count = count($val);
|
||||||
|
$buff = "<value><array>\n<data>";
|
||||||
|
for($i = 0; $i < $val_count; $i++)
|
||||||
|
{
|
||||||
|
$buff .= _getEncodedVal($val[$i], true);
|
||||||
|
}
|
||||||
|
$buff .= "</data>\n</array></value>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$buff = sprintf("<value><string>%s</string></value>\n", $val);
|
||||||
|
}
|
||||||
|
if(!$is_sub_set)
|
||||||
|
{
|
||||||
|
return sprintf("<param>\n%s</param>", $buff);
|
||||||
|
}
|
||||||
|
return $buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the result
|
||||||
|
function printContent($content)
|
||||||
|
{
|
||||||
|
header("Content-Type: text/xml; charset=UTF-8");
|
||||||
|
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||||
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
print $content;
|
||||||
|
Context::close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of file blogapi.func.php */
|
||||||
|
/* Location: ./addons/blogapi/blogapi.func.php */
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,9 @@
|
||||||
<title xml:lang="zh-TW">部落格 API</title>
|
<title xml:lang="zh-TW">部落格 API</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
metaWeblog를 지원하는 blogApi애드온입니다.
|
metaWeblog를 지원하는 blogApi애드온입니다.
|
||||||
사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다.
|
사용으로 설정하면 각 모듈마다 RSD 태그를 노출합니다.
|
||||||
api의 주소는 http://설치주소/모듈명/api 입니다.
|
api의 주소는 http://설치주소/모듈명/api 입니다.
|
||||||
사용으로 하셔야 RSD태그 및 api가 동작을 합니다.
|
사용으로 해야 RSD태그 및 api가 동작을 합니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="jp">
|
<description xml:lang="jp">
|
||||||
MetaWeblogをサポートするBlog APIアドオンです。
|
MetaWeblogをサポートするBlog APIアドオンです。
|
||||||
|
|
|
||||||
|
|
@ -1,347 +1,405 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined("__ZBXE__")) exit();
|
if(!defined("__XE__")) exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file captcha.addon.php
|
* @file captcha.addon.php
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
* @brief Captcha for a particular action
|
* @brief Captcha for a particular action
|
||||||
* English alphabets and voice verification added
|
* English alphabets and voice verification added
|
||||||
**/
|
* */
|
||||||
|
if(!class_exists('AddonCaptcha'))
|
||||||
if(!class_exists('AddonCaptcha'))
|
{
|
||||||
{
|
|
||||||
// On the mobile mode, XE Core does not load jquery and xe.js as normal.
|
// On the mobile mode, XE Core does not load jquery and xe.js as normal.
|
||||||
Context::loadFile(array('./common/js/jquery.min.js','head', NULL,-100000),true);
|
Context::loadFile(array('./common/js/jquery.min.js', 'head', NULL, -100000), true);
|
||||||
Context::loadFile(array('./common/js/xe.min.js','head', NULL,-100000),true);
|
Context::loadFile(array('./common/js/xe.min.js', 'head', NULL, -100000), true);
|
||||||
class AddonCaptcha
|
|
||||||
|
class AddonCaptcha
|
||||||
|
{
|
||||||
|
|
||||||
|
var $addon_info;
|
||||||
|
|
||||||
|
function setInfo(&$addon_info)
|
||||||
{
|
{
|
||||||
var $addon_info;
|
$this->addon_info = $addon_info;
|
||||||
|
}
|
||||||
|
|
||||||
function setInfo(&$addon_info)
|
function before_module_proc()
|
||||||
|
{
|
||||||
|
if($this->addon_info->act_type == 'everytime' && $_SESSION['captcha_authed'])
|
||||||
{
|
{
|
||||||
$this->addon_info = $addon_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
function before_module_proc()
|
|
||||||
{
|
|
||||||
if($this->addon_info->act_type == 'everytime' && $_SESSION['captcha_authed']) {
|
|
||||||
unset($_SESSION['captcha_authed']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function before_module_init(&$ModuleHandler)
|
|
||||||
{
|
|
||||||
$logged_info = Context::get('logged_info');
|
|
||||||
if($logged_info->is_admin == 'Y' || $logged_info->is_site_admin) return false;
|
|
||||||
if($this->addon_info->target != 'all' && Context::get('is_logged')) return false;
|
|
||||||
if($_SESSION['XE_VALIDATOR_ERROR'] == -1) $_SESSION['captcha_authed'] = false;
|
|
||||||
if($_SESSION['captcha_authed']) return false;
|
|
||||||
|
|
||||||
$type = Context::get('captchaType');
|
|
||||||
|
|
||||||
$target_acts = array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory','procTextyleInsertComment');
|
|
||||||
if($this->addon_info->apply_find_account=='apply') $target_acts[] = 'procMemberFindAccount';
|
|
||||||
if($this->addon_info->apply_resend_auth_mail=='apply') $target_acts[] = 'procMemberResendAuthMail';
|
|
||||||
if($this->addon_info->apply_signup=='apply') $target_acts[] = 'procMemberInsert';
|
|
||||||
|
|
||||||
if(Context::getRequestMethod()!='XMLRPC' && Context::getRequestMethod()!=='JSON')
|
|
||||||
{
|
|
||||||
if($type == 'inline') {
|
|
||||||
if(!$this->compareCaptcha())
|
|
||||||
{
|
|
||||||
Context::loadLang('./addons/captcha/lang');
|
|
||||||
$_SESSION['XE_VALIDATOR_ERROR'] = -1;
|
|
||||||
$_SESSION['XE_VALIDATOR_MESSAGE'] = Context::getLang('captcha_denied');;
|
|
||||||
$_SESSION['XE_VALIDATOR_MESSAGE_TYPE'] = 'error';
|
|
||||||
$_SESSION['XE_VALIDATOR_RETURN_URL'] = Context::get('error_return_url');
|
|
||||||
$ModuleHandler->_setInputValueToSession();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Context::addHtmlHeader('<script type="text/javascript"> var captchaTargetAct = new Array("'.implode('","',$target_acts).'"); </script>');
|
|
||||||
Context::loadFile(array('./addons/captcha/captcha.min.js', 'body', '', null), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// compare session when calling actions such as writing a post or a comment on the board/issue tracker module
|
|
||||||
if(!$_SESSION['captcha_authed'] && in_array(Context::get('act'), $target_acts)) {
|
|
||||||
Context::loadLang('./addons/captcha/lang');
|
|
||||||
$ModuleHandler->error = "captcha_denied";
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createKeyword()
|
|
||||||
{
|
|
||||||
$type = Context::get('captchaType');
|
|
||||||
if ($type == 'inline' && $_SESSION['captcha_keyword']) return;
|
|
||||||
|
|
||||||
$arr = range('A','Y');
|
|
||||||
shuffle($arr);
|
|
||||||
$arr = array_slice($arr,0,6);
|
|
||||||
$_SESSION['captcha_keyword'] = join('', $arr);
|
|
||||||
}
|
|
||||||
|
|
||||||
function before_module_init_setCaptchaSession()
|
|
||||||
{
|
|
||||||
if($_SESSION['captcha_authed']) return false;
|
|
||||||
// Load language files
|
|
||||||
|
|
||||||
Context::loadLang(_XE_PATH_.'addons/captcha/lang');
|
|
||||||
// Generate keywords
|
|
||||||
|
|
||||||
$this->createKeyword();
|
|
||||||
|
|
||||||
$target = Context::getLang('target_captcha');
|
|
||||||
header("Content-Type: text/xml; charset=UTF-8");
|
|
||||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
|
||||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
|
||||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
|
||||||
header("Pragma: no-cache");
|
|
||||||
printf("<response>\r\n <error>0</error>\r\n <message>success</message>\r\n <about_captcha><![CDATA[%s]]></about_captcha>\r\n <captcha_reload><![CDATA[%s]]></captcha_reload>\r\n <captcha_play><![CDATA[%s]]></captcha_play>\r\n <cmd_input><![CDATA[%s]]></cmd_input>\r\n <cmd_cancel><![CDATA[%s]]></cmd_cancel>\r\n </response>"
|
|
||||||
,Context::getLang('about_captcha')
|
|
||||||
,Context::getLang('captcha_reload')
|
|
||||||
,Context::getLang('captcha_play')
|
|
||||||
,Context::getLang('cmd_input')
|
|
||||||
,Context::getLang('cmd_cancel')
|
|
||||||
);
|
|
||||||
Context::close();
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function before_module_init_captchaImage()
|
|
||||||
{
|
|
||||||
if($_SESSION['captcha_authed']) return false;
|
|
||||||
if(Context::get('renew')) $this->createKeyword();
|
|
||||||
|
|
||||||
$keyword = $_SESSION['captcha_keyword'];
|
|
||||||
$im = $this->createCaptchaImage($keyword);
|
|
||||||
|
|
||||||
header("Cache-Control: ");
|
|
||||||
header("Pragma: ");
|
|
||||||
header("Content-Type: image/png");
|
|
||||||
|
|
||||||
imagepng($im);
|
|
||||||
imagedestroy($im);
|
|
||||||
|
|
||||||
Context::close();
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function createCaptchaImage($string)
|
|
||||||
{
|
|
||||||
$arr = array();
|
|
||||||
for($i=0,$c=strlen($string);$i<$c;$i++) $arr[] = $string{$i};
|
|
||||||
// Font site
|
|
||||||
|
|
||||||
$w = 18;
|
|
||||||
$h = 25;
|
|
||||||
// Character length
|
|
||||||
|
|
||||||
$c = count($arr);
|
|
||||||
// Character image
|
|
||||||
|
|
||||||
$im = array();
|
|
||||||
// Create an image by total size
|
|
||||||
|
|
||||||
$im[] = imagecreate(($w+2)*count($arr), $h);
|
|
||||||
|
|
||||||
$deg = range(-30,30);
|
|
||||||
shuffle($deg);
|
|
||||||
// Create an image for each letter
|
|
||||||
|
|
||||||
foreach($arr as $i => $str)
|
|
||||||
{
|
|
||||||
$im[$i+1] = @imagecreate($w, $h);
|
|
||||||
$background_color = imagecolorallocate($im[$i+1], 255, 255, 255);
|
|
||||||
$text_color = imagecolorallocate($im[$i+1], 0, 0, 0);
|
|
||||||
// Control font size
|
|
||||||
|
|
||||||
$ran = range(1,20);
|
|
||||||
shuffle($ran);
|
|
||||||
|
|
||||||
if(function_exists('imagerotate'))
|
|
||||||
{
|
|
||||||
imagestring($im[$i+1], (array_pop($ran)%3)+3, 2, (array_pop($ran)%8), $str, $text_color);
|
|
||||||
$im[$i+1] = imagerotate($im[$i+1], array_pop($deg), 0);
|
|
||||||
|
|
||||||
$background_color = imagecolorallocate($im[$i+1], 255, 255, 255);
|
|
||||||
imagecolortransparent($im[$i+1], $background_color);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
imagestring($im[$i+1], (array_pop($ran)%3)+3, 2, (array_pop($ran)%4), $str, $text_color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Combine images of each character
|
|
||||||
|
|
||||||
for($i=1;$i<count($im);$i++)
|
|
||||||
{
|
|
||||||
imagecopy($im[0],$im[$i],(($w+2)*($i-1)),0,0,0,$w,$h);
|
|
||||||
imagedestroy($im[$i]);
|
|
||||||
}
|
|
||||||
// Larger image
|
|
||||||
|
|
||||||
$big_count = 2;
|
|
||||||
$big = imagecreatetruecolor(($w+2)*$big_count*$c, $h*$big_count);
|
|
||||||
imagecopyresized($big, $im[0], 0, 0, 0, 0, ($w+2)*$big_count*$c, $h*$big_count, ($w+2)*$c, $h);
|
|
||||||
imagedestroy($im[0]);
|
|
||||||
|
|
||||||
if(function_exists('imageantialias')) imageantialias($big,true);
|
|
||||||
// Background line
|
|
||||||
|
|
||||||
$line_color = imagecolorallocate($big, 0, 0, 0);
|
|
||||||
|
|
||||||
$w = ($w+2)*$big_count*$c;
|
|
||||||
$h = $h*$big_count;
|
|
||||||
$d = array_pop($deg);
|
|
||||||
|
|
||||||
for($i=-abs($d);$i<$h+abs($d);$i=$i+7) imageline($big,0,$i+$d,$w,$i,$line_color);
|
|
||||||
|
|
||||||
$x = range(0,($w-10));
|
|
||||||
shuffle($x);
|
|
||||||
|
|
||||||
for($i=0;$i<200;$i++) imagesetpixel($big,$x[$i]%$w,$x[$i+1]%$h,$line_color);
|
|
||||||
|
|
||||||
return $big;
|
|
||||||
}
|
|
||||||
|
|
||||||
function before_module_init_captchaAudio()
|
|
||||||
{
|
|
||||||
if($_SESSION['captcha_authed']) return false;
|
|
||||||
|
|
||||||
$keyword = strtoupper($_SESSION['captcha_keyword']);
|
|
||||||
$data = $this->createCaptchaAudio($keyword);
|
|
||||||
|
|
||||||
header('Content-type: audio/mpeg');
|
|
||||||
header("Content-Disposition: attachment; filename=\"captcha_audio.mp3\"");
|
|
||||||
header('Cache-Control: no-store, no-cache, must-revalidate');
|
|
||||||
header('Expires: Sun, 1 Jan 2000 12:00:00 GMT');
|
|
||||||
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
|
|
||||||
header('Content-Length: ' . strlen($data));
|
|
||||||
|
|
||||||
echo $data;
|
|
||||||
Context::close();
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
function createCaptchaAudio($string)
|
|
||||||
{
|
|
||||||
$data = '';
|
|
||||||
$_audio = './addons/captcha/audio/F_%s.mp3';
|
|
||||||
for($i=0,$c=strlen($string);$i<$c;$i++)
|
|
||||||
{
|
|
||||||
$_data = FileHandler::readFile(sprintf($_audio, $string{$i}));
|
|
||||||
|
|
||||||
$start = rand(5, 68); // Random start in 4-byte header and 64 byte data
|
|
||||||
$datalen = strlen($_data) - $start - 256; // Last unchanged 256 bytes
|
|
||||||
|
|
||||||
for($j=$start;$j<$datalen;$j+=64)
|
|
||||||
{
|
|
||||||
$ch = ord($_data{$j});
|
|
||||||
if($ch<9 || $ch>119) continue;
|
|
||||||
$_data{$j} = chr($ch+rand(-8,8));
|
|
||||||
}
|
|
||||||
|
|
||||||
$data .= $_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function compareCaptcha()
|
|
||||||
{
|
|
||||||
if($_SESSION['captcha_authed']) return true;
|
|
||||||
|
|
||||||
if(strtoupper($_SESSION['captcha_keyword']) == strtoupper(Context::get('secret_text'))) {
|
|
||||||
$_SESSION['captcha_authed'] = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($_SESSION['captcha_authed']);
|
unset($_SESSION['captcha_authed']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function before_module_init(&$ModuleHandler)
|
||||||
|
{
|
||||||
|
$logged_info = Context::get('logged_info');
|
||||||
|
if($logged_info->is_admin == 'Y' || $logged_info->is_site_admin)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($this->addon_info->target != 'all' && Context::get('is_logged'))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if($_SESSION['XE_VALIDATOR_ERROR'] == -1)
|
||||||
|
{
|
||||||
|
$_SESSION['captcha_authed'] = false;
|
||||||
|
}
|
||||||
|
if($_SESSION['captcha_authed'])
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function before_module_init_captchaCompare()
|
$type = Context::get('captchaType');
|
||||||
|
|
||||||
|
$target_acts = array('procBoardInsertDocument', 'procBoardInsertComment', 'procIssuetrackerInsertIssue', 'procIssuetrackerInsertHistory', 'procTextyleInsertComment');
|
||||||
|
if($this->addon_info->apply_find_account == 'apply')
|
||||||
{
|
{
|
||||||
if(!$this->compareCaptcha())
|
$target_acts[] = 'procMemberFindAccount';
|
||||||
{
|
}
|
||||||
return false;
|
if($this->addon_info->apply_resend_auth_mail == 'apply')
|
||||||
}
|
{
|
||||||
|
$target_acts[] = 'procMemberResendAuthMail';
|
||||||
header("Content-Type: text/xml; charset=UTF-8");
|
}
|
||||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
if($this->addon_info->apply_signup == 'apply')
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
{
|
||||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
$target_acts[] = 'procMemberInsert';
|
||||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
|
||||||
header("Pragma: no-cache");
|
|
||||||
print("<response>\r\n<error>0</error>\r\n<message>success</message>\r\n</response>");
|
|
||||||
|
|
||||||
Context::close();
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function inlineDisplay()
|
if(Context::getRequestMethod() != 'XMLRPC' && Context::getRequestMethod() !== 'JSON')
|
||||||
|
{
|
||||||
|
if($type == 'inline')
|
||||||
|
{
|
||||||
|
if(!$this->compareCaptcha())
|
||||||
|
{
|
||||||
|
Context::loadLang('./addons/captcha/lang');
|
||||||
|
$_SESSION['XE_VALIDATOR_ERROR'] = -1;
|
||||||
|
$_SESSION['XE_VALIDATOR_MESSAGE'] = Context::getLang('captcha_denied');
|
||||||
|
$_SESSION['XE_VALIDATOR_MESSAGE_TYPE'] = 'error';
|
||||||
|
$_SESSION['XE_VALIDATOR_RETURN_URL'] = Context::get('error_return_url');
|
||||||
|
$ModuleHandler->_setInputValueToSession();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Context::addHtmlHeader('<script> var captchaTargetAct = new Array("' . implode('","', $target_acts) . '"); </script>');
|
||||||
|
Context::loadFile(array('./addons/captcha/captcha.min.js', 'body', '', null), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// compare session when calling actions such as writing a post or a comment on the board/issue tracker module
|
||||||
|
if(!$_SESSION['captcha_authed'] && in_array(Context::get('act'), $target_acts))
|
||||||
|
{
|
||||||
|
Context::loadLang('./addons/captcha/lang');
|
||||||
|
$ModuleHandler->error = "captcha_denied";
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createKeyword()
|
||||||
|
{
|
||||||
|
$type = Context::get('captchaType');
|
||||||
|
if($type == 'inline' && $_SESSION['captcha_keyword'])
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$arr = range('A', 'Y');
|
||||||
|
shuffle($arr);
|
||||||
|
$arr = array_slice($arr, 0, 6);
|
||||||
|
$_SESSION['captcha_keyword'] = join('', $arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function before_module_init_setCaptchaSession()
|
||||||
|
{
|
||||||
|
if($_SESSION['captcha_authed'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Load language files
|
||||||
|
Context::loadLang(_XE_PATH_ . 'addons/captcha/lang');
|
||||||
|
// Generate keywords
|
||||||
|
$this->createKeyword();
|
||||||
|
|
||||||
|
$target = Context::getLang('target_captcha');
|
||||||
|
header("Content-Type: text/xml; charset=UTF-8");
|
||||||
|
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||||
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
printf("<response>\r\n <error>0</error>\r\n <message>success</message>\r\n <about_captcha><![CDATA[%s]]></about_captcha>\r\n <captcha_reload><![CDATA[%s]]></captcha_reload>\r\n <captcha_play><![CDATA[%s]]></captcha_play>\r\n <cmd_input><![CDATA[%s]]></cmd_input>\r\n <cmd_cancel><![CDATA[%s]]></cmd_cancel>\r\n </response>"
|
||||||
|
, Context::getLang('about_captcha')
|
||||||
|
, Context::getLang('captcha_reload')
|
||||||
|
, Context::getLang('captcha_play')
|
||||||
|
, Context::getLang('cmd_input')
|
||||||
|
, Context::getLang('cmd_cancel')
|
||||||
|
);
|
||||||
|
Context::close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function before_module_init_captchaImage()
|
||||||
|
{
|
||||||
|
if($_SESSION['captcha_authed'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(Context::get('renew'))
|
||||||
{
|
{
|
||||||
unset($_SESSION['captcha_authed']);
|
|
||||||
$this->createKeyword();
|
$this->createKeyword();
|
||||||
|
}
|
||||||
|
|
||||||
$swfURL = getUrl().'addons/captcha/swf/play.swf';
|
$keyword = $_SESSION['captcha_keyword'];
|
||||||
Context::unloadFile('./addons/captcha/captcha.min.js');
|
$im = $this->createCaptchaImage($keyword);
|
||||||
Context::loadFile(array('./addons/captcha/inline_captcha.js','body'));
|
|
||||||
|
|
||||||
global $lang;
|
header("Cache-Control: ");
|
||||||
|
header("Pragma: ");
|
||||||
|
header("Content-Type: image/png");
|
||||||
|
|
||||||
$tags=<<<EOD
|
imagepng($im);
|
||||||
|
imagedestroy($im);
|
||||||
|
|
||||||
|
Context::close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function createCaptchaImage($string)
|
||||||
|
{
|
||||||
|
$arr = array();
|
||||||
|
for($i = 0, $c = strlen($string); $i < $c; $i++)
|
||||||
|
{
|
||||||
|
$arr[] = $string{$i};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Font site
|
||||||
|
$w = 18;
|
||||||
|
$h = 25;
|
||||||
|
|
||||||
|
// Character length
|
||||||
|
$c = count($arr);
|
||||||
|
|
||||||
|
// Character image
|
||||||
|
$im = array();
|
||||||
|
|
||||||
|
// Create an image by total size
|
||||||
|
$im[] = imagecreate(($w + 2) * count($arr), $h);
|
||||||
|
|
||||||
|
$deg = range(-30, 30);
|
||||||
|
shuffle($deg);
|
||||||
|
|
||||||
|
// Create an image for each letter
|
||||||
|
foreach($arr as $i => $str)
|
||||||
|
{
|
||||||
|
$im[$i + 1] = @imagecreate($w, $h);
|
||||||
|
$background_color = imagecolorallocate($im[$i + 1], 255, 255, 255);
|
||||||
|
$text_color = imagecolorallocate($im[$i + 1], 0, 0, 0);
|
||||||
|
|
||||||
|
// Control font size
|
||||||
|
$ran = range(1, 20);
|
||||||
|
shuffle($ran);
|
||||||
|
|
||||||
|
if(function_exists('imagerotate'))
|
||||||
|
{
|
||||||
|
imagestring($im[$i + 1], (array_pop($ran) % 3) + 3, 2, (array_pop($ran) % 8), $str, $text_color);
|
||||||
|
$im[$i + 1] = imagerotate($im[$i + 1], array_pop($deg), 0);
|
||||||
|
|
||||||
|
$background_color = imagecolorallocate($im[$i + 1], 255, 255, 255);
|
||||||
|
imagecolortransparent($im[$i + 1], $background_color);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
imagestring($im[$i + 1], (array_pop($ran) % 3) + 3, 2, (array_pop($ran) % 4), $str, $text_color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combine images of each character
|
||||||
|
for($i = 1; $i < count($im); $i++)
|
||||||
|
{
|
||||||
|
imagecopy($im[0], $im[$i], (($w + 2) * ($i - 1)), 0, 0, 0, $w, $h);
|
||||||
|
imagedestroy($im[$i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Larger image
|
||||||
|
$big_count = 2;
|
||||||
|
$big = imagecreatetruecolor(($w + 2) * $big_count * $c, $h * $big_count);
|
||||||
|
imagecopyresized($big, $im[0], 0, 0, 0, 0, ($w + 2) * $big_count * $c, $h * $big_count, ($w + 2) * $c, $h);
|
||||||
|
imagedestroy($im[0]);
|
||||||
|
|
||||||
|
if(function_exists('imageantialias'))
|
||||||
|
{
|
||||||
|
imageantialias($big, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background line
|
||||||
|
$line_color = imagecolorallocate($big, 0, 0, 0);
|
||||||
|
|
||||||
|
$w = ($w + 2) * $big_count * $c;
|
||||||
|
$h = $h * $big_count;
|
||||||
|
$d = array_pop($deg);
|
||||||
|
|
||||||
|
for($i = -abs($d); $i < $h + abs($d); $i = $i + 7)
|
||||||
|
{
|
||||||
|
imageline($big, 0, $i + $d, $w, $i, $line_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
$x = range(0, ($w - 10));
|
||||||
|
shuffle($x);
|
||||||
|
|
||||||
|
for($i = 0; $i < 200; $i++)
|
||||||
|
{
|
||||||
|
imagesetpixel($big, $x[$i] % $w, $x[$i + 1] % $h, $line_color);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $big;
|
||||||
|
}
|
||||||
|
|
||||||
|
function before_module_init_captchaAudio()
|
||||||
|
{
|
||||||
|
if($_SESSION['captcha_authed'])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$keyword = strtoupper($_SESSION['captcha_keyword']);
|
||||||
|
$data = $this->createCaptchaAudio($keyword);
|
||||||
|
|
||||||
|
header('Content-type: audio/mpeg');
|
||||||
|
header("Content-Disposition: attachment; filename=\"captcha_audio.mp3\"");
|
||||||
|
header('Cache-Control: no-store, no-cache, must-revalidate');
|
||||||
|
header('Expires: Sun, 1 Jan 2000 12:00:00 GMT');
|
||||||
|
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
|
||||||
|
header('Content-Length: ' . strlen($data));
|
||||||
|
|
||||||
|
echo $data;
|
||||||
|
Context::close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function createCaptchaAudio($string)
|
||||||
|
{
|
||||||
|
$data = '';
|
||||||
|
$_audio = './addons/captcha/audio/F_%s.mp3';
|
||||||
|
for($i = 0, $c = strlen($string); $i < $c; $i++)
|
||||||
|
{
|
||||||
|
$_data = FileHandler::readFile(sprintf($_audio, $string{$i}));
|
||||||
|
|
||||||
|
$start = rand(5, 68); // Random start in 4-byte header and 64 byte data
|
||||||
|
$datalen = strlen($_data) - $start - 256; // Last unchanged 256 bytes
|
||||||
|
|
||||||
|
for($j = $start; $j < $datalen; $j+=64)
|
||||||
|
{
|
||||||
|
$ch = ord($_data{$j});
|
||||||
|
if($ch < 9 || $ch > 119)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$_data{$j} = chr($ch + rand(-8, 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
$data .= $_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function compareCaptcha()
|
||||||
|
{
|
||||||
|
if($_SESSION['captcha_authed'])
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strtoupper($_SESSION['captcha_keyword']) == strtoupper(Context::get('secret_text')))
|
||||||
|
{
|
||||||
|
$_SESSION['captcha_authed'] = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($_SESSION['captcha_authed']);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function before_module_init_captchaCompare()
|
||||||
|
{
|
||||||
|
if(!$this->compareCaptcha())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
header("Content-Type: text/xml; charset=UTF-8");
|
||||||
|
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||||
|
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
print("<response>\r\n<error>0</error>\r\n<message>success</message>\r\n</response>");
|
||||||
|
|
||||||
|
Context::close();
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function inlineDisplay()
|
||||||
|
{
|
||||||
|
unset($_SESSION['captcha_authed']);
|
||||||
|
$this->createKeyword();
|
||||||
|
|
||||||
|
$swfURL = getUrl() . 'addons/captcha/swf/play.swf';
|
||||||
|
Context::unloadFile('./addons/captcha/captcha.min.js');
|
||||||
|
Context::loadFile(array('./addons/captcha/inline_captcha.js', 'body'));
|
||||||
|
|
||||||
|
global $lang;
|
||||||
|
|
||||||
|
$tags = <<<EOD
|
||||||
<img src="%s" id="captcha_image" alt="CAPTCHA" width="240" height="50" style="width:240px; height:50px; border:1px solid #b0b0b0" />
|
<img src="%s" id="captcha_image" alt="CAPTCHA" width="240" height="50" style="width:240px; height:50px; border:1px solid #b0b0b0" />
|
||||||
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="0" height="0" id="captcha_audio" align="middle">
|
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="0" height="0" id="captcha_audio" align="middle">
|
||||||
<param name="allowScriptAccess" value="always" />
|
<param name="allowScriptAccess" value="always" />
|
||||||
<param name="quality" value="high" />
|
<param name="quality" value="high" />
|
||||||
<param name="movie" value="%s" />
|
<param name="movie" value="%s" />
|
||||||
<param name="wmode" value="window" />
|
<param name="wmode" value="window" />
|
||||||
<param name="allowFullScreen" value="false">
|
<param name="allowFullScreen" value="false">
|
||||||
<param name="bgcolor" value="#fffff" />
|
<param name="bgcolor" value="#fffff" />
|
||||||
<embed src="%s" quality="high" wmode="window" allowFullScreen="false" bgcolor="#ffffff" width="0" height="0" name="captcha_audio" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
|
<embed src="%s" quality="high" wmode="window" allowFullScreen="false" bgcolor="#ffffff" width="0" height="0" name="captcha_audio" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
|
||||||
</object>
|
</object>
|
||||||
<button type="button" class="captchaReload text">%s</button>
|
<button type="button" class="captchaReload text">%s</button>
|
||||||
<button type="button" class="captchaPlay text">%s</button><br />
|
<button type="button" class="captchaPlay text">%s</button><br />
|
||||||
<input type="hidden" name="captchaType" value="inline" />
|
<input type="hidden" name="captchaType" value="inline" />
|
||||||
<input name="secret_text" type="text" id="secret_text" />
|
<input name="secret_text" type="text" id="secret_text" />
|
||||||
EOD;
|
EOD;
|
||||||
$tags = sprintf($tags, getUrl('captcha_action','captchaImage', 'rand', mt_rand(10000, 99999))
|
$tags = sprintf($tags, getUrl('captcha_action', 'captchaImage', 'rand', mt_rand(10000, 99999))
|
||||||
, $swfURL
|
, $swfURL
|
||||||
, $swfURL
|
, $swfURL
|
||||||
, $lang->reload
|
, $lang->reload
|
||||||
, $lang->play);
|
, $lang->play);
|
||||||
return $tags;
|
return $tags;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$GLOBALS['__AddonCaptcha__'] = new AddonCaptcha;
|
|
||||||
$GLOBALS['__AddonCaptcha__']->setInfo($addon_info);
|
|
||||||
Context::set('oCaptcha', &$GLOBALS['__AddonCaptcha__']);
|
|
||||||
}
|
}
|
||||||
|
$GLOBALS['__AddonCaptcha__'] = new AddonCaptcha;
|
||||||
|
$GLOBALS['__AddonCaptcha__']->setInfo($addon_info);
|
||||||
|
Context::set('oCaptcha', $GLOBALS['__AddonCaptcha__']);
|
||||||
|
}
|
||||||
|
|
||||||
$oAddonCaptcha = &$GLOBALS['__AddonCaptcha__'];
|
$oAddonCaptcha = &$GLOBALS['__AddonCaptcha__'];
|
||||||
|
|
||||||
if(method_exists($oAddonCaptcha, $called_position))
|
if(method_exists($oAddonCaptcha, $called_position))
|
||||||
|
{
|
||||||
|
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position), array(&$this)))
|
||||||
{
|
{
|
||||||
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position), array(&$this)))
|
return false;
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$addon_act = Context::get('captcha_action');
|
$addon_act = Context::get('captcha_action');
|
||||||
if($addon_act && method_exists($oAddonCaptcha, $called_position.'_'.$addon_act))
|
if($addon_act && method_exists($oAddonCaptcha, $called_position . '_' . $addon_act))
|
||||||
|
{
|
||||||
|
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position . '_' . $addon_act), array(&$this)))
|
||||||
{
|
{
|
||||||
if(!call_user_func_array(array(&$oAddonCaptcha, $called_position.'_'.$addon_act), array(&$this)))
|
return false;
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
?>
|
/* End of file captcha.addon.php */
|
||||||
|
/* Location: ./addons/captcha/captcha.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
<title xml:lang="en">How it works</title>
|
<title xml:lang="en">How it works</title>
|
||||||
<title xml:lang="ru">How it works</title>
|
<title xml:lang="ru">How it works</title>
|
||||||
<title xml:lang="vi">Sử dụng</title>
|
<title xml:lang="vi">Sử dụng</title>
|
||||||
<description xml:lang="ko">"1번만 동작"을 선택하시면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다</description>
|
<description xml:lang="ko">"1번만 동작"을 선택하면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다</description>
|
||||||
<description xml:lang="zh-CN">"一次"就是每个IP只出现一次验证。</description>
|
<description xml:lang="zh-CN">"一次"就是每个IP只出现一次验证。</description>
|
||||||
<description xml:lang="jp">「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。</description>
|
<description xml:lang="jp">「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。</description>
|
||||||
<description xml:lang="zh-TW">選擇"單次",下次不會再顯示;選擇"每次"則會一直顯示。</description>
|
<description xml:lang="zh-TW">選擇"單次",下次不會再顯示;選擇"每次"則會一直顯示。</description>
|
||||||
|
|
@ -123,9 +123,9 @@
|
||||||
<title xml:lang="en">applying to an action finding account</title>
|
<title xml:lang="en">applying to an action finding account</title>
|
||||||
<title xml:lang="ru">applying to an action finding account</title>
|
<title xml:lang="ru">applying to an action finding account</title>
|
||||||
<title xml:lang="vi">Khi lấy lại mật khẩu</title>
|
<title xml:lang="vi">Khi lấy lại mật khẩu</title>
|
||||||
<description xml:lang="ko">적용으로 하시면 비밀번호 찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
<description xml:lang="ko">적용으로 하면 비밀번호 찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以查找密码名义发送的垃圾邮件。</description>
|
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以查找密码名义发送的垃圾邮件。</description>
|
||||||
<description xml:lang="jp">적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
<description xml:lang="jp">적용으로 하면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-TW">開啟功能後在忘記密碼時會顯示驗證碼。</description>
|
<description xml:lang="zh-TW">開啟功能後在忘記密碼時會顯示驗證碼。</description>
|
||||||
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
|
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
|
||||||
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
|
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for finding account action, too.</description>
|
||||||
|
|
@ -157,9 +157,9 @@
|
||||||
<title xml:lang="en">apply to an action resending authmail</title>
|
<title xml:lang="en">apply to an action resending authmail</title>
|
||||||
<title xml:lang="ru">apply to an action resending authmail</title>
|
<title xml:lang="ru">apply to an action resending authmail</title>
|
||||||
<title xml:lang="vi">Khi lấy lại mã kích hoạt</title>
|
<title xml:lang="vi">Khi lấy lại mã kích hoạt</title>
|
||||||
<description xml:lang="ko">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
<description xml:lang="ko">적용으로 하면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以重新发送认证邮件名义发送的垃圾邮件。</description>
|
<description xml:lang="zh-CN">启用此项功能可以有效地拦截以重新发送认证邮件名义发送的垃圾邮件。</description>
|
||||||
<description xml:lang="jp">적용으로 하시면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
<description xml:lang="jp">적용으로 하면 인증 메일 재발송 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-TW">開啟功能後在重寄認證信時會顯示驗證碼。</description>
|
<description xml:lang="zh-TW">開啟功能後在重寄認證信時會顯示驗證碼。</description>
|
||||||
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
|
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
|
||||||
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
|
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for resending authmail action, too.</description>
|
||||||
|
|
@ -191,9 +191,9 @@
|
||||||
<title xml:lang="en">Apply to member signup</title>
|
<title xml:lang="en">Apply to member signup</title>
|
||||||
<title xml:lang="ru">Apply to member signup</title>
|
<title xml:lang="ru">Apply to member signup</title>
|
||||||
<title xml:lang="vi">Apply to member signup</title>
|
<title xml:lang="vi">Apply to member signup</title>
|
||||||
<description xml:lang="ko">적용으로 하시면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
|
<description xml:lang="ko">적용으로 하면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-CN">启用此项功能可以有效地拦截自动注册软件的施虐。</description>
|
<description xml:lang="zh-CN">启用此项功能可以有效地拦截自动注册软件的施虐。</description>
|
||||||
<description xml:lang="jp">적용으로 하시면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
|
<description xml:lang="jp">적용으로 하면 회원가입 기능에도 적용되어 악의적인 봇(또는 프로그램)의 회원가입을 막을 수 있습니다.</description>
|
||||||
<description xml:lang="zh-TW">開啟功能後在註冊時會顯示驗證碼。</description>
|
<description xml:lang="zh-TW">開啟功能後在註冊時會顯示驗證碼。</description>
|
||||||
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
|
<description xml:lang="en">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
|
||||||
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
|
<description xml:lang="ru">If you set this option as apply, CAPTCHA will work for signup action, too.</description>
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
<value xml:lang="zh-TW"><![CDATA[播放]]></value>
|
<value xml:lang="zh-TW"><![CDATA[播放]]></value>
|
||||||
</item>
|
</item>
|
||||||
<item name="captcha_denied">
|
<item name="captcha_denied">
|
||||||
<value xml:lang="ko"><![CDATA[잘못 입력하셨습니다]]></value>
|
<value xml:lang="ko"><![CDATA[잘못 입력했습니다]]></value>
|
||||||
<value xml:lang="en"><![CDATA[The characters you entered didn't match the word verification.]]></value>
|
<value xml:lang="en"><![CDATA[The characters you entered didn't match the word verification.]]></value>
|
||||||
<value xml:lang="jp"><![CDATA[正しく入力してください。]]></value>
|
<value xml:lang="jp"><![CDATA[正しく入力してください。]]></value>
|
||||||
<value xml:lang="zh-CN"><![CDATA[验证码错误]]></value>
|
<value xml:lang="zh-CN"><![CDATA[验证码错误]]></value>
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
<title xml:lang="ru">Аддон счетчика</title>
|
<title xml:lang="ru">Аддон счетчика</title>
|
||||||
<title xml:lang="zh-TW">網站訪問統計</title>
|
<title xml:lang="zh-TW">網站訪問統計</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다.
|
XE의 기본 카운터를 이용하여 접속 정보를 기록합니다.
|
||||||
이 애드온을 켜셔야 접속 정보 수집이 됩니다.
|
이 애드온을 켜야 접속 정보 수집이 됩니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="jp">
|
<description xml:lang="jp">
|
||||||
XEのアクセスカウンターモジュールで接続(アクセス)情報を記録します。
|
XEのアクセスカウンターモジュールで接続(アクセス)情報を記録します。
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file counter.addon.php
|
* @file counter.addon.php
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
* @brief Counter add-on
|
* @brief Counter add-on
|
||||||
**/
|
*/
|
||||||
// Execute if called_position is before_display_content
|
// Execute if called_position is before_display_content
|
||||||
if(Context::isInstalled() && $called_position == 'before_module_init' && Context::get('module')!='admin' && Context::getResponseMethod() == 'HTML') {
|
if(Context::isInstalled() && $called_position == 'before_module_init' && Context::get('module') != 'admin' && Context::getResponseMethod() == 'HTML')
|
||||||
$oCounterController = &getController('counter');
|
{
|
||||||
|
$oCounterController = getController('counter');
|
||||||
$oCounterController->counterExecute();
|
$oCounterController->counterExecute();
|
||||||
}
|
}
|
||||||
?>
|
/* End of file counter.addon.php */
|
||||||
|
/* Location: ./addons/counter/counter.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
<title xml:lang="ru">Общение</title>
|
<title xml:lang="ru">Общение</title>
|
||||||
<title xml:lang="zh-TW">交流</title>
|
<title xml:lang="zh-TW">交流</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
커뮤니케이션 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
||||||
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
|
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 설정하면 됩니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="jp">
|
<description xml:lang="jp">
|
||||||
メッセージ・友達機能を使うにはこのアドオンを「使用」にして下さい。
|
メッセージ・友達機能を使うにはこのアドオンを「使用」にして下さい。
|
||||||
|
|
@ -28,12 +28,12 @@
|
||||||
Hãy kích hoạt nếu bạn muốn sử dụng chức năng này.
|
Hãy kích hoạt nếu bạn muốn sử dụng chức năng này.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="ge">
|
<description xml:lang="ge">
|
||||||
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
커뮤니케이션 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
||||||
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
|
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 설정하면 됩니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="es">
|
<description xml:lang="es">
|
||||||
커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
커뮤니케이션 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다.
|
||||||
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다.
|
쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 설정하면 됩니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="ru">
|
<description xml:lang="ru">
|
||||||
Активизирует модуль Общение, позволяет использование сообщений между друзьями.
|
Активизирует модуль Общение, позволяет использование сообщений между друзьями.
|
||||||
|
|
@ -55,4 +55,40 @@
|
||||||
<name xml:lang="ru">NHN</name>
|
<name xml:lang="ru">NHN</name>
|
||||||
<name xml:lang="zh-TW">NHN</name>
|
<name xml:lang="zh-TW">NHN</name>
|
||||||
</author>
|
</author>
|
||||||
|
<extra_vars>
|
||||||
|
<var name="use_alarm" type="select">
|
||||||
|
<title xml:lang="ko">알람기능 사용</title>
|
||||||
|
<title xml:lang="zh-CN">Using alarm</title>
|
||||||
|
<title xml:lang="jp">Using alarm</title>
|
||||||
|
<title xml:lang="zh-TW">Using alarm</title>
|
||||||
|
<title xml:lang="en">Using alarm</title>
|
||||||
|
<title xml:lang="ru">Using alarm</title>
|
||||||
|
<title xml:lang="vi">Using alarm</title>
|
||||||
|
<description xml:lang="ko">새로운 쪽지가 왔을때 팝업으로 알립니다.</description>
|
||||||
|
<description xml:lang="zh-CN">Pop-up alram when new message received.</description>
|
||||||
|
<description xml:lang="jp">Pop-up alram when new message received.</description>
|
||||||
|
<description xml:lang="zh-TW">Pop-up alram when new message received.</description>
|
||||||
|
<description xml:lang="en">Pop-up alram when new message received.</description>
|
||||||
|
<description xml:lang="ru">Pop-up alram when new message received.</description>
|
||||||
|
<description xml:lang="vi">Pop-up alram when new message received.</description>
|
||||||
|
<options value="">
|
||||||
|
<title xml:lang="ko">사용함</title>
|
||||||
|
<title xml:lang="zh-CN">Using</title>
|
||||||
|
<title xml:lang="jp">Using</title>
|
||||||
|
<title xml:lang="zh-TW">Using</title>
|
||||||
|
<title xml:lang="en">Using</title>
|
||||||
|
<title xml:lang="ru">Using</title>
|
||||||
|
<title xml:lang="vi">Using</title>
|
||||||
|
</options>
|
||||||
|
<options value="N">
|
||||||
|
<title xml:lang="ko">사용하지 않음</title>
|
||||||
|
<title xml:lang="zh-CN">Not using</title>
|
||||||
|
<title xml:lang="jp">Not using</title>
|
||||||
|
<title xml:lang="zh-TW">Not using</title>
|
||||||
|
<title xml:lang="en">Not using</title>
|
||||||
|
<title xml:lang="ru">Not using</title>
|
||||||
|
<title xml:lang="vi">Not using</title>
|
||||||
|
</options>
|
||||||
|
</var>
|
||||||
|
</extra_vars>
|
||||||
</addon>
|
</addon>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file member_communication.addon.php
|
* @file member_communication.addon.php
|
||||||
|
|
@ -9,63 +11,78 @@ if(!defined('__XE__')) exit();
|
||||||
* - Pop-up the message if new message comes in
|
* - Pop-up the message if new message comes in
|
||||||
* - When calling MemberModel::getMemberMenu, feature to send a message is added
|
* - When calling MemberModel::getMemberMenu, feature to send a message is added
|
||||||
* - When caliing MemberModel::getMemberMenu, feature to add a friend is added
|
* - When caliing MemberModel::getMemberMenu, feature to add a friend is added
|
||||||
**/
|
*/
|
||||||
// Stop if non-logged-in user is
|
// Stop if non-logged-in user is
|
||||||
$logged_info = Context::get('logged_info');
|
$logged_info = Context::get('logged_info');
|
||||||
if(!$logged_info) return;
|
if(!$logged_info)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message/Friend munus are added on the pop-up window and member profile. Check if a new message is received
|
* Message/Friend munus are added on the pop-up window and member profile. Check if a new message is received
|
||||||
**/
|
* */
|
||||||
if($called_position == 'before_module_init' && $this->module != 'member') {
|
if($called_position == 'before_module_init' && $this->module != 'member')
|
||||||
|
{
|
||||||
// Load a language file from the communication module
|
// Load a language file from the communication module
|
||||||
Context::loadLang('./modules/communication/lang');
|
Context::loadLang('./modules/communication/lang');
|
||||||
// Add menus on the member login information
|
// Add menus on the member login information
|
||||||
$oMemberController = &getController('member');
|
$oMemberController = getController('member');
|
||||||
$oMemberController->addMemberMenu('dispCommunicationFriend', 'cmd_view_friend');
|
$oMemberController->addMemberMenu('dispCommunicationFriend', 'cmd_view_friend');
|
||||||
$oMemberController->addMemberMenu('dispCommunicationMessages', 'cmd_view_message_box');
|
$oMemberController->addMemberMenu('dispCommunicationMessages', 'cmd_view_message_box');
|
||||||
// Pop-up to display messages if a flag on new message is set
|
// Pop-up to display messages if a flag on new message is set
|
||||||
$flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl);
|
$flag_path = './files/member_extra_info/new_message_flags/' . getNumberingPath($logged_info->member_srl);
|
||||||
$flag_file = $flag_path.$logged_info->member_srl;
|
$flag_file = $flag_path . $logged_info->member_srl;
|
||||||
|
|
||||||
if(file_exists($flag_file)) {
|
if(file_exists($flag_file) && $addon_info->use_alarm != 'N')
|
||||||
|
{
|
||||||
$new_message_count = trim(FileHandler::readFile($flag_file));
|
$new_message_count = trim(FileHandler::readFile($flag_file));
|
||||||
FileHandler::removeFile($flag_file);
|
FileHandler::removeFile($flag_file);
|
||||||
Context::loadLang('./addons/member_communication/lang');
|
Context::loadLang('./addons/member_communication/lang');
|
||||||
Context::loadFile(array('./addons/member_communication/tpl/member_communication.js'), true);
|
Context::loadFile(array('./addons/member_communication/tpl/member_communication.js'), true);
|
||||||
|
|
||||||
$text = preg_replace('@\r?\n@', '\\n', addslashes(Context::getLang('alert_new_message_arrived')));
|
$text = preg_replace('@\r?\n@', '\\n', addslashes(Context::getLang('alert_new_message_arrived')));
|
||||||
$link = Context::getRequestUri().'?module=communication&act=dispCommunicationNewMessage';
|
$link = Context::getRequestUri() . '?module=communication&act=dispCommunicationNewMessage';
|
||||||
$script = "<script type=\"text/javascript\">jQuery(function(){ xeNotifyMessage('{$text}','{$new_message_count}'); });</script>";
|
$script = "<script type=\"text/javascript\">jQuery(function(){ xeNotifyMessage('{$text}','{$new_message_count}'); });</script>";
|
||||||
|
|
||||||
Context::addHtmlFooter($script);
|
Context::addHtmlFooter($script);
|
||||||
}
|
}
|
||||||
} elseif($called_position == 'before_module_proc' && $this->act == 'getMemberMenu') {
|
}
|
||||||
$oMemberController = &getController('member');
|
elseif($called_position == 'before_module_proc' && $this->act == 'getMemberMenu')
|
||||||
|
{
|
||||||
|
$oMemberController = getController('member');
|
||||||
$member_srl = Context::get('target_srl');
|
$member_srl = Context::get('target_srl');
|
||||||
$mid = Context::get('cur_mid');
|
$mid = Context::get('cur_mid');
|
||||||
// Creates communication model object
|
// Creates communication model object
|
||||||
$oCommunicationModel = &getModel('communication');
|
$oCommunicationModel = getModel('communication');
|
||||||
// Add a feature to display own message box.
|
// Add a feature to display own message box.
|
||||||
if($logged_info->member_srl == $member_srl) {
|
if($logged_info->member_srl == $member_srl)
|
||||||
|
{
|
||||||
// Add your own viewing Note Template
|
// Add your own viewing Note Template
|
||||||
$oMemberController->addMemberPopupMenu(getUrl('','mid',$mid,'act','dispCommunicationMessages'), 'cmd_view_message_box', '', 'self');
|
$oMemberController->addMemberPopupMenu(getUrl('', 'mid', $mid, 'act', 'dispCommunicationMessages'), 'cmd_view_message_box', '', 'self');
|
||||||
// Display a list of friends
|
// Display a list of friends
|
||||||
$oMemberController->addMemberPopupMenu(getUrl('','mid',$mid,'act','dispCommunicationFriend'), 'cmd_view_friend', '', 'self');
|
$oMemberController->addMemberPopupMenu(getUrl('', 'mid', $mid, 'act', 'dispCommunicationFriend'), 'cmd_view_friend', '', 'self');
|
||||||
// If not, Add menus to send message and to add friends
|
// If not, Add menus to send message and to add friends
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Get member information
|
// Get member information
|
||||||
$oMemberModel = &getModel('member');
|
$oMemberModel = getModel('member');
|
||||||
$target_member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
|
$target_member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
|
||||||
if(!$target_member_info->member_srl) return;
|
if(!$target_member_info->member_srl)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Get logged-in user information
|
// Get logged-in user information
|
||||||
$logged_info = Context::get('logged_info');
|
$logged_info = Context::get('logged_info');
|
||||||
// Add a menu for sending message
|
// Add a menu for sending message
|
||||||
if( $logged_info->is_admin == 'Y' || $target_member_info->allow_message =='Y' || ($target_member_info->allow_message == 'F' && $oCommunicationModel->isFriend($member_srl)))
|
if($logged_info->is_admin == 'Y' || $target_member_info->allow_message == 'Y' || ($target_member_info->allow_message == 'F' && $oCommunicationModel->isFriend($member_srl)))
|
||||||
$oMemberController->addMemberPopupMenu(getUrl('','module','communication','act','dispCommunicationSendMessage','receiver_srl',$member_srl), 'cmd_send_message', '', 'popup');
|
$oMemberController->addMemberPopupMenu(getUrl('', 'module', 'communication', 'act', 'dispCommunicationSendMessage', 'receiver_srl', $member_srl), 'cmd_send_message', '', 'popup');
|
||||||
// Add a menu for listing friends (if a friend is new)
|
// Add a menu for listing friends (if a friend is new)
|
||||||
if(!$oCommunicationModel->isAddedFriend($member_srl))
|
if(!$oCommunicationModel->isAddedFriend($member_srl))
|
||||||
$oMemberController->addMemberPopupMenu(getUrl('','module','communication','act','dispCommunicationAddFriend','target_srl',$member_srl), 'cmd_add_friend', '', 'popup');
|
$oMemberController->addMemberPopupMenu(getUrl('', 'module', 'communication', 'act', 'dispCommunicationAddFriend', 'target_srl', $member_srl), 'cmd_add_friend', '', 'popup');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
/* End of file member_communication.addon.php */
|
||||||
|
/* Location: ./addons/member_communication/member_communication.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file image_name.addon.php
|
* @file image_name.addon.php
|
||||||
|
|
@ -8,16 +10,23 @@ if(!defined('__XE__')) exit();
|
||||||
*
|
*
|
||||||
* Find member_srl in the part with <div class="member_MemberSerialNumber"> .... </div>
|
* Find member_srl in the part with <div class="member_MemberSerialNumber"> .... </div>
|
||||||
* Check if ther is image name and image mark. Then change it.
|
* Check if ther is image name and image mark. Then change it.
|
||||||
**/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Just before displaying, change image name/ image mark
|
* Just before displaying, change image name/ image mark
|
||||||
**/
|
*/
|
||||||
if($called_position != "before_display_content" || Context::get('act')=='dispPageAdminContentModify') return;
|
if($called_position != "before_display_content" || Context::get('act') == 'dispPageAdminContentModify')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Include a file having functions to replace member image name/mark
|
// Include a file having functions to replace member image name/mark
|
||||||
require_once('./addons/member_extra_info/member_extra_info.lib.php');
|
require_once('./addons/member_extra_info/member_extra_info.lib.php');
|
||||||
// 1. Find a part <div class="member_MemberSerialNumber"> content </div> in the output document, change it to image name/mark by using MemberController::transImageName()
|
// 1. Find a part <div class="member_MemberSerialNumber"> content </div> in the output document, change it to image name/mark by using MemberController::transImageName()
|
||||||
$temp_output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'memberTransImageName', $output);
|
$temp_output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'memberTransImageName', $output);
|
||||||
if($temp_output) $output = $temp_output;
|
if($temp_output)
|
||||||
|
{
|
||||||
|
$output = $temp_output;
|
||||||
|
}
|
||||||
unset($temp_output);
|
unset($temp_output);
|
||||||
?>
|
|
||||||
|
/* End of file member_extra_info.addon.php */
|
||||||
|
/* Location: ./addons/member_extra_info/member_extra_info.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,49 +1,86 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* @brief If member_srl exists in the div or span, replace to image name or nick image for each member_srl
|
|
||||||
**/
|
|
||||||
function memberTransImageName($matches) {
|
|
||||||
// If member_srl < 0, then return text only in the body
|
|
||||||
$member_srl = $matches[3];
|
|
||||||
if($member_srl<0) return $matches[5];
|
|
||||||
// If member_srl=o(not a member), return the entire body
|
|
||||||
if(!$member_srl) return $matches[0];
|
|
||||||
|
|
||||||
$oMemberModel = &getModel('member');
|
/**
|
||||||
$nick_name = $matches[5];
|
* @brief If member_srl exists in the div or span, replace to image name or nick image for each member_srl
|
||||||
|
* */
|
||||||
|
function memberTransImageName($matches)
|
||||||
|
{
|
||||||
|
// If member_srl < 0, then return text only in the body
|
||||||
|
$member_srl = $matches[3];
|
||||||
|
if($member_srl < 0)
|
||||||
|
{
|
||||||
|
return $matches[5];
|
||||||
|
}
|
||||||
|
// If member_srl=o(not a member), return the entire body
|
||||||
|
if(!$member_srl)
|
||||||
|
{
|
||||||
|
return $matches[0];
|
||||||
|
}
|
||||||
|
|
||||||
// If pre-defined data in the global variablesm return it
|
$oMemberModel = getModel('member');
|
||||||
if(!$GLOBALS['_transImageNameList'][$member_srl]->cached) {
|
$nick_name = $matches[5];
|
||||||
$GLOBALS['_transImageNameList'][$member_srl]->cached = true;
|
|
||||||
$image_name_file = sprintf('files/member_extra_info/image_name/%s%d.gif', getNumberingPath($member_srl), $member_srl);
|
|
||||||
$image_mark_file = sprintf('files/member_extra_info/image_mark/%s%d.gif', getNumberingPath($member_srl), $member_srl);
|
|
||||||
if(file_exists($image_name_file)) $GLOBALS['_transImageNameList'][$member_srl]->image_name_file = $image_name_file;
|
|
||||||
else $image_name_file = '';
|
|
||||||
if(file_exists($image_mark_file)) $GLOBALS['_transImageNameList'][$member_srl]->image_mark_file = $image_mark_file;
|
|
||||||
else $image_mark_file = '';
|
|
||||||
|
|
||||||
$site_module_info = Context::get('site_module_info');
|
// If pre-defined data in the global variablesm return it
|
||||||
$group_image = $oMemberModel->getGroupImageMark($member_srl,$site_module_info->site_srl);
|
if(!$GLOBALS['_transImageNameList'][$member_srl]->cached)
|
||||||
$GLOBALS['_transImageNameList'][$member_srl]->group_image = $group_image;
|
{
|
||||||
} else {
|
$GLOBALS['_transImageNameList'][$member_srl]->cached = true;
|
||||||
$group_image = $GLOBALS['_transImageNameList'][$member_srl]->group_image;
|
$image_name_file = sprintf('files/member_extra_info/image_name/%s%d.gif', getNumberingPath($member_srl), $member_srl);
|
||||||
$image_name_file = $GLOBALS['_transImageNameList'][$member_srl]->image_name_file;
|
$image_mark_file = sprintf('files/member_extra_info/image_mark/%s%d.gif', getNumberingPath($member_srl), $member_srl);
|
||||||
$image_mark_file = $GLOBALS['_transImageNameList'][$member_srl]->image_mark_file;
|
if(file_exists($image_name_file))
|
||||||
}
|
{
|
||||||
// If image name and mark doesn't exist, set the original information
|
$GLOBALS['_transImageNameList'][$member_srl]->image_name_file = $image_name_file;
|
||||||
if(!$image_name_file && !$image_mark_file && !$group_image) return $matches[0];
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$image_name_file = '';
|
||||||
|
}
|
||||||
|
if(file_exists($image_mark_file))
|
||||||
|
{
|
||||||
|
$GLOBALS['_transImageNameList'][$member_srl]->image_mark_file = $image_mark_file;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$image_mark_file = '';
|
||||||
|
}
|
||||||
|
|
||||||
// check member_config
|
$site_module_info = Context::get('site_module_info');
|
||||||
|
$group_image = $oMemberModel->getGroupImageMark($member_srl, $site_module_info->site_srl);
|
||||||
$config = $oMemberModel->getMemberConfig();
|
$GLOBALS['_transImageNameList'][$member_srl]->group_image = $group_image;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$group_image = $GLOBALS['_transImageNameList'][$member_srl]->group_image;
|
||||||
|
$image_name_file = $GLOBALS['_transImageNameList'][$member_srl]->image_name_file;
|
||||||
|
$image_mark_file = $GLOBALS['_transImageNameList'][$member_srl]->image_mark_file;
|
||||||
|
}
|
||||||
|
// If image name and mark doesn't exist, set the original information
|
||||||
|
if(!$image_name_file && !$image_mark_file && !$group_image)
|
||||||
|
{
|
||||||
|
return $matches[0];
|
||||||
|
}
|
||||||
|
|
||||||
if($config->image_name == 'Y' && $image_name_file) $nick_name = sprintf('<img src="%s%s" border="0" alt="id: %s" title="id: %s" style="vertical-align:middle;margin-right:3px" />', Context::getRequestUri(),$image_name_file, strip_tags($nick_name), strip_tags($nick_name));
|
// check member_config
|
||||||
if($config->image_mark == 'Y' && $image_mark_file) $nick_name = sprintf('<img src="%s%s" border="0" alt="id: %s" title="id : %s" style="vertical-align:middle;margin-right:3px"/>%s', Context::getRequestUri(),$image_mark_file, strip_tags($nick_name), strip_tags($nick_name), $nick_name);
|
|
||||||
|
|
||||||
if($group_image) $nick_name = sprintf('<img src="%s" border="0" style="max-height:16px;vertical-align:middle;margin-right:3px" alt="%s" title="%s" />%s', $group_image->src, $group_image->title, $group_image->description, $nick_name);
|
$config = $oMemberModel->getMemberConfig();
|
||||||
|
|
||||||
|
if($config->image_name == 'Y' && $image_name_file)
|
||||||
|
{
|
||||||
|
$nick_name = sprintf('<img src="%s%s" alt="id: %s" title="id: %s" style="border:0;vertical-align:middle;margin-right:3px" />', Context::getRequestUri(), $image_name_file, strip_tags($nick_name), strip_tags($nick_name));
|
||||||
|
}
|
||||||
|
if($config->image_mark == 'Y' && $image_mark_file)
|
||||||
|
{
|
||||||
|
$nick_name = sprintf('<img src="%s%s" alt="id: %s" title="id : %s" style="border:0;vertical-align:middle;margin-right:3px"/>%s', Context::getRequestUri(), $image_mark_file, strip_tags($nick_name), strip_tags($nick_name), $nick_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($group_image)
|
||||||
|
{
|
||||||
|
$nick_name = sprintf('<img src="%s" style="border:0;max-height:16px;vertical-align:middle;margin-right:3px" alt="%s" title="%s" />%s', $group_image->src, $group_image->title, $group_image->description, $nick_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$orig_text = preg_replace('/'.preg_quote($matches[5],'/').'<\/'.$matches[6].'>$/', '', $matches[0]);
|
$orig_text = preg_replace('/' . preg_quote($matches[5], '/') . '<\/' . $matches[6] . '>$/', '', $matches[0]);
|
||||||
return $orig_text.$nick_name.'</'.$matches[6].'>';
|
return $orig_text . $nick_name . '</' . $matches[6] . '>';
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
/* End of file member_extra_info.lib.php */
|
||||||
|
/* Location: ./addons/member_extra_info/member_extra_info.lib.php */
|
||||||
|
|
|
||||||
|
|
@ -1,103 +1,124 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* HDML Library ver 0.1
|
* HDML Library ver 0.1
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
**/
|
*/
|
||||||
class wap extends mobileXE {
|
class wap extends mobileXE {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief constructor
|
* @brief constructor
|
||||||
**/
|
**/
|
||||||
function wap() {
|
function wap()
|
||||||
parent::mobileXE();
|
{
|
||||||
}
|
parent::mobileXE();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief hdml header output
|
* @brief hdml header output
|
||||||
**/
|
**/
|
||||||
function printHeader() {
|
function printHeader()
|
||||||
header("Content-Type:text/x-hdml; charset=".$this->charset);
|
{
|
||||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
header("Content-Type:text/x-hdml; charset=".$this->charset);
|
||||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
header("Pragma: no-cache");
|
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
|
||||||
print '<hdml version=3.0 ttl=0 markable=true>';
|
print '<hdml version=3.0 ttl=0 markable=true>';
|
||||||
print "\n";
|
print "\n";
|
||||||
print $this->hasChilds()?'<choice name=main>':'<display>';
|
print $this->hasChilds()?'<choice name=main>':'<display>';
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|
||||||
if($this->upperUrl) {
|
if($this->upperUrl)
|
||||||
$url = $this->upperUrl;
|
{
|
||||||
printf('<action type=soft1 task=go dest="%s" label="%s">%s', $url->url, $url->text, "\n");
|
$url = $this->upperUrl;
|
||||||
}
|
printf('<action type=soft1 task=go dest="%s" label="%s">%s', $url->url, $url->text, "\n");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Output title
|
* @brief Output title
|
||||||
**/
|
**/
|
||||||
function printTitle() {
|
function printTitle()
|
||||||
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
{
|
||||||
printf('<b><%s%s>%s', $this->title,$titlePageStr,"\n");
|
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
||||||
}
|
printf('<b><%s%s>%s', $this->title,$titlePageStr,"\n");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Output information
|
* @brief Output information
|
||||||
* hasChilds() if there is a list of content types, otherwise output
|
* hasChilds() if there is a list of content types, otherwise output
|
||||||
**/
|
**/
|
||||||
function printContent() {
|
function printContent()
|
||||||
if($this->hasChilds()) {
|
{
|
||||||
foreach($this->getChilds() as $key => $val) {
|
if($this->hasChilds())
|
||||||
if(!$val['link']) continue;
|
{
|
||||||
printf('<ce task=go label="%s" dest="%s">%s%s',Context::getLang('cmd_select'), $val['href'], $val['text'], "\n");
|
foreach($this->getChilds() as $key => $val)
|
||||||
}
|
{
|
||||||
} else {
|
if(!$val['link']) continue;
|
||||||
printf('<wrap>%s<br>%s', $this->getContent(),"\n");
|
printf('<ce task=go label="%s" dest="%s">%s%s',Context::getLang('cmd_select'), $val['href'], $val['text'], "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf('<wrap>%s<br>%s', $this->getContent(),"\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Button to output
|
* @brief Button to output
|
||||||
**/
|
**/
|
||||||
function printBtn() {
|
function printBtn()
|
||||||
// Menu Types
|
{
|
||||||
if($this->hasChilds()) {
|
// Menu Types
|
||||||
if($this->nextUrl) {
|
if($this->hasChilds())
|
||||||
$url = $this->nextUrl;
|
{
|
||||||
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
if($this->nextUrl)
|
||||||
}
|
{
|
||||||
if($this->prevUrl) {
|
$url = $this->nextUrl;
|
||||||
$url = $this->prevUrl;
|
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
||||||
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
}
|
||||||
}
|
if($this->prevUrl)
|
||||||
if($this->homeUrl) {
|
{
|
||||||
$url = $this->homeUrl;
|
$url = $this->prevUrl;
|
||||||
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
||||||
}
|
}
|
||||||
// Content Types
|
if($this->homeUrl)
|
||||||
} else {
|
{
|
||||||
if($this->nextUrl) {
|
$url = $this->homeUrl;
|
||||||
$url = $this->nextUrl;
|
printf('<ce task=go label="%s" dest="%s">%s%s', $url->text, $url->url, $url->text, "\n");
|
||||||
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
}
|
||||||
}
|
// Content Types
|
||||||
if($this->prevUrl) {
|
}
|
||||||
$url = $this->prevUrl;
|
else
|
||||||
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
{
|
||||||
}
|
if($this->nextUrl)
|
||||||
if($this->homeUrl) {
|
{
|
||||||
$url = $this->homeUrl;
|
$url = $this->nextUrl;
|
||||||
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
||||||
}
|
}
|
||||||
}
|
if($this->prevUrl)
|
||||||
}
|
{
|
||||||
|
$url = $this->prevUrl;
|
||||||
|
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
||||||
|
}
|
||||||
|
if($this->homeUrl)
|
||||||
|
{
|
||||||
|
$url = $this->homeUrl;
|
||||||
|
printf('<a task=gosub label="%s" dest="%s">%s</a>', $url->text, $url->url, $url->text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Footer information output
|
* @brief Footer information output
|
||||||
**/
|
**/
|
||||||
function printFooter() {
|
function printFooter()
|
||||||
print $this->hasChilds()?'</choice>':'</display>';
|
{
|
||||||
print "\n";
|
print $this->hasChilds()?'</choice>':'</display>';
|
||||||
print("</hdml>");
|
print "\n";
|
||||||
}
|
print("</hdml>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
/* End of file hdml.class.php */
|
||||||
?>
|
/* Location: ./addons/mobile/classes/hdml.class.php */
|
||||||
|
|
|
||||||
|
|
@ -1,80 +1,98 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
include './mobile.class.php';
|
||||||
* mhtml Library ver 0.1
|
/**
|
||||||
* @author NHN (developers@xpressengine.com) / lang_select : misol
|
* mhtml Library ver 0.1
|
||||||
**/
|
* @author NHN (developers@xpressengine.com) / lang_select : misol
|
||||||
class wap extends mobileXE {
|
*/
|
||||||
|
class wap extends mobileXE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief constructor
|
||||||
|
**/
|
||||||
|
function wap()
|
||||||
|
{
|
||||||
|
parent::mobileXE();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief constructor
|
* @brief hdml header output
|
||||||
**/
|
**/
|
||||||
function wap() {
|
function printHeader()
|
||||||
parent::mobileXE();
|
{
|
||||||
}
|
print("<html><head>\n");
|
||||||
|
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
||||||
|
printf("<title>%s%s</title></head><body>\n", htmlspecialchars($this->title),htmlspecialchars($titlePageStr));
|
||||||
|
}
|
||||||
|
// Output title
|
||||||
|
function printTitle()
|
||||||
|
{
|
||||||
|
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
||||||
|
printf('<%s%s><br>%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief hdml header output
|
* @brief Output information
|
||||||
**/
|
* hasChilds() if there is a list of content types, otherwise output
|
||||||
function printHeader() {
|
**/
|
||||||
print("<html><head>\n");
|
function printContent()
|
||||||
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
{
|
||||||
printf("<title>%s%s</title></head><body>\n", htmlspecialchars($this->title),htmlspecialchars($titlePageStr));
|
if($this->hasChilds())
|
||||||
}
|
{
|
||||||
// Output title
|
foreach($this->getChilds() as $key => $val)
|
||||||
function printTitle() {
|
{
|
||||||
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
if(!$val['link']) continue;
|
||||||
printf('<%s%s><br>%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n");
|
printf('<a href="%s" accesskey="%s">%s</a><br>%s', $val['href'], $this->getNo(), $val['text'], "\n");
|
||||||
}
|
if($val['extra']) printf("<br>%s\n",str_replace('<br/>','<br>',$val['extra']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print(str_replace('<br/>','<br>',$this->getContent())."\n");
|
||||||
|
}
|
||||||
|
print "<hr><br>";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Output information
|
* @brief Button to output
|
||||||
* hasChilds() if there is a list of content types, otherwise output
|
**/
|
||||||
**/
|
function printBtn()
|
||||||
function printContent() {
|
{
|
||||||
if($this->hasChilds()) {
|
if($this->nextUrl)
|
||||||
foreach($this->getChilds() as $key => $val) {
|
{
|
||||||
if(!$val['link']) continue;
|
$url = $this->nextUrl;
|
||||||
printf('<a href="%s" accesskey="%s">%s</a><br>%s', $val['href'], $this->getNo(), $val['text'], "\n");
|
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
|
||||||
if($val['extra']) printf("<br>%s\n",str_replace('<br/>','<br>',$val['extra']));
|
}
|
||||||
}
|
if($this->prevUrl)
|
||||||
} else {
|
{
|
||||||
print(str_replace('<br/>','<br>',$this->getContent())."\n");
|
$url = $this->prevUrl;
|
||||||
}
|
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
|
||||||
print "<hr><br>";
|
}
|
||||||
}
|
// Select Language
|
||||||
|
if(!parent::isLangChange())
|
||||||
/**
|
{
|
||||||
* @brief Button to output
|
$url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url'));
|
||||||
**/
|
printf('<a href="%s">%s</a><br>%s', $url, 'Language : '.Context::getLang('select_lang'), "\n");
|
||||||
function printBtn() {
|
}
|
||||||
if($this->nextUrl) {
|
else
|
||||||
$url = $this->nextUrl;
|
{
|
||||||
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
|
printf('<a href="%s">%s</a><br>%s', Context::get('return_uri'), Context::getLang('lang_return'), "\n");
|
||||||
}
|
}
|
||||||
if($this->prevUrl) {
|
if($this->upperUrl)
|
||||||
$url = $this->prevUrl;
|
{
|
||||||
printf('<a href="%s">%s</a><br>%s', $url->url, $url->text, "\n");
|
$url = $this->upperUrl;
|
||||||
}
|
printf('<btn href="%s" name="%s">%s', $url->url, $url->text, "\n");
|
||||||
// Select Language
|
}
|
||||||
if(!parent::isLangChange()){
|
if($this->homeUrl)
|
||||||
$url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url'));
|
{
|
||||||
printf('<a href="%s">%s</a><br>%s', $url, 'Language : '.Context::getLang('select_lang'), "\n");
|
$url = $this->homeUrl;
|
||||||
}
|
printf('<a btn="%s" href="%s">%s</a><br>%s', $url->text, $url->url, $url->text, "\n");
|
||||||
else {
|
}
|
||||||
printf('<a href="%s">%s</a><br>%s', Context::get('return_uri'), Context::getLang('lang_return'), "\n");
|
}
|
||||||
}
|
// Footer information output
|
||||||
if($this->upperUrl) {
|
function printFooter()
|
||||||
$url = $this->upperUrl;
|
{
|
||||||
printf('<btn href="%s" name="%s">%s', $url->url, $url->text, "\n");
|
print("</body></html>\n");
|
||||||
}
|
}
|
||||||
if($this->homeUrl) {
|
}
|
||||||
$url = $this->homeUrl;
|
/* End of file mhtml.class.php */
|
||||||
printf('<a btn="%s" href="%s">%s</a><br>%s', $url->text, $url->url, $url->text, "\n");
|
/* Location: ./addons/mobile/classes/mhtml.class.php */
|
||||||
}
|
|
||||||
}
|
|
||||||
// Footer information output
|
|
||||||
function printFooter() {
|
|
||||||
print("</body></html>\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
|
||||||
|
|
@ -1,104 +1,127 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* WML Library ver 0.1
|
* WML Library ver 0.1
|
||||||
* @author NHN (developers@xpressengine.com) / lang_select : misol
|
* @author NHN (developers@xpressengine.com) / lang_select : misol
|
||||||
**/
|
*/
|
||||||
class wap extends mobileXE {
|
class wap extends mobileXE
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @brief constructor
|
||||||
|
*/
|
||||||
|
function wap()
|
||||||
|
{
|
||||||
|
parent::mobileXE();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief constructor
|
* @brief wml header output
|
||||||
**/
|
*/
|
||||||
function wap() {
|
function printHeader()
|
||||||
parent::mobileXE();
|
{
|
||||||
}
|
header("Content-Type: text/vnd.wap.wml");
|
||||||
|
header("charset: ".$this->charset);
|
||||||
|
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
||||||
|
print("<?xml version=\"1.0\" encoding=\"".$this->charset."\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
|
||||||
|
// Card Title
|
||||||
|
printf("<wml>\n<card title=\"%s%s\">\n<p>\n",htmlspecialchars($this->title),htmlspecialchars($titlePageStr));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief wml header output
|
* @brief Output title
|
||||||
**/
|
*/
|
||||||
function printHeader() {
|
function printTitle()
|
||||||
header("Content-Type: text/vnd.wap.wml");
|
{
|
||||||
header("charset: ".$this->charset);
|
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
||||||
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
printf('<%s%s><br/>%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n");
|
||||||
print("<?xml version=\"1.0\" encoding=\"".$this->charset."\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
|
}
|
||||||
// Card Title
|
|
||||||
printf("<wml>\n<card title=\"%s%s\">\n<p>\n",htmlspecialchars($this->title),htmlspecialchars($titlePageStr));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Output title
|
* @brief Output information
|
||||||
**/
|
* hasChilds() if there is a list of content types, otherwise output
|
||||||
function printTitle() {
|
*/
|
||||||
if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage);
|
function printContent()
|
||||||
printf('<%s%s><br/>%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n");
|
{
|
||||||
}
|
if($this->hasChilds())
|
||||||
|
{
|
||||||
|
foreach($this->getChilds() as $key => $val)
|
||||||
|
{
|
||||||
|
if(!$val['link']) continue;
|
||||||
|
printf('<do type="%s" label="%s"><go href="%s" /></do>%s', $this->getNo(), htmlspecialchars($val['text']), $val['href'], "\n");
|
||||||
|
if($val['extra']) printf("%s\n",$val['extra']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf('%s<br/>%s', str_replace("<br>","<br/>",$this->getContent()),"\n");
|
||||||
|
}
|
||||||
|
print('<br/>');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Output information
|
* @brief Button to output
|
||||||
* hasChilds() if there is a list of content types, otherwise output
|
*/
|
||||||
**/
|
function printBtn()
|
||||||
function printContent() {
|
{
|
||||||
if($this->hasChilds()) {
|
if($this->nextUrl)
|
||||||
foreach($this->getChilds() as $key => $val) {
|
{
|
||||||
if(!$val['link']) continue;
|
$url = $this->nextUrl;
|
||||||
printf('<do type="%s" label="%s"><go href="%s" /></do>%s', $this->getNo(), htmlspecialchars($val['text']), $val['href'], "\n");
|
printf('<do type="vnd.next" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
||||||
if($val['extra']) printf("%s\n",$val['extra']);
|
}
|
||||||
}
|
if($this->prevUrl)
|
||||||
} else {
|
{
|
||||||
printf('%s<br/>%s', str_replace("<br>","<br/>",$this->getContent()),"\n");
|
$url = $this->prevUrl;
|
||||||
}
|
printf('<do type="vnd.prev" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
||||||
print('<br/>');
|
}
|
||||||
}
|
// Others are not applicable in charge of the button output (array passed) type??
|
||||||
|
if($this->etcBtn)
|
||||||
/**
|
{
|
||||||
* @brief Button to output
|
if(is_array($this->etcBtn))
|
||||||
**/
|
{
|
||||||
function printBtn() {
|
foreach($this->etcBtn as $key=>$val)
|
||||||
if($this->nextUrl) {
|
{
|
||||||
$url = $this->nextUrl;
|
printf('<do type="vnd.btn%s" label="%s"><go href="%s"/></do>%s', $key, $val['text'], $val['url'], "\n");
|
||||||
printf('<do type="vnd.next" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
}
|
||||||
}
|
}
|
||||||
if($this->prevUrl) {
|
}
|
||||||
$url = $this->prevUrl;
|
// Select Language
|
||||||
printf('<do type="vnd.prev" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
if(!parent::isLangChange())
|
||||||
}
|
{
|
||||||
// Others are not applicable in charge of the button output (array passed) type??
|
$url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url'));
|
||||||
if($this->etcBtn) {
|
printf('<do type="vnd.lang" label="%s"><go href="%s"/></do>%s', 'Language : '.Context::getLang('select_lang'), $url, "\n");
|
||||||
if(is_array($this->etcBtn)) {
|
}
|
||||||
foreach($this->etcBtn as $key=>$val) {
|
else
|
||||||
printf('<do type="vnd.btn%s" label="%s"><go href="%s"/></do>%s', $key, $val['text'], $val['url'], "\n");
|
{
|
||||||
}
|
printf('<do type="vnd.lang" label="%s"><go href="%s"/></do>%s', Context::getLang('lang_return'), Context::get('return_uri'), "\n");
|
||||||
}
|
}
|
||||||
}
|
if($this->homeUrl)
|
||||||
// Select Language
|
{
|
||||||
if(!parent::isLangChange()){
|
$url = $this->homeUrl;
|
||||||
$url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url'));
|
printf('<do type="access" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
||||||
printf('<do type="vnd.lang" label="%s"><go href="%s"/></do>%s', 'Language : '.Context::getLang('select_lang'), $url, "\n");
|
}
|
||||||
}
|
if($this->upperUrl)
|
||||||
else {
|
{
|
||||||
printf('<do type="vnd.lang" label="%s"><go href="%s"/></do>%s', Context::getLang('lang_return'), Context::get('return_uri'), "\n");
|
$url = $this->upperUrl;
|
||||||
}
|
printf('<do type="vnd.up" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
||||||
if($this->homeUrl) {
|
}
|
||||||
$url = $this->homeUrl;
|
}
|
||||||
printf('<do type="access" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
// Footer information output
|
||||||
}
|
function printFooter()
|
||||||
if($this->upperUrl) {
|
{
|
||||||
$url = $this->upperUrl;
|
print("</p>\n</card>\n</wml>");
|
||||||
printf('<do type="vnd.up" label="%s"><go href="%s"/></do>%s', $url->text, $url->url, "\n");
|
}
|
||||||
}
|
// And returns a list of serial numbers in
|
||||||
}
|
function getNo()
|
||||||
// Footer information output
|
{
|
||||||
function printFooter() {
|
if(Context::get('mobile_skt')==1)
|
||||||
print("</p>\n</card>\n</wml>");
|
{
|
||||||
}
|
return "vnd.skmn".parent::getNo();
|
||||||
// And returns a list of serial numbers in
|
}
|
||||||
function getNo() {
|
else
|
||||||
if(Context::get('mobile_skt')==1) {
|
{
|
||||||
return "vnd.skmn".parent::getNo();
|
return parent::getNo();
|
||||||
}
|
}
|
||||||
else {
|
return $str;
|
||||||
return parent::getNo();
|
}
|
||||||
}
|
}
|
||||||
return $str;
|
/* End of file wml.class.php */
|
||||||
}
|
/* Location: ./addons/mobile/classes/wml.class.php */
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<title xml:lang="ru">Mobile XE</title>
|
<title xml:lang="ru">Mobile XE</title>
|
||||||
<title xml:lang="zh-TW">XE行動上網</title>
|
<title xml:lang="zh-TW">XE行動上網</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다.
|
모바일에서 접속시 헤더 정보를 분석하여 WAP 태그로 출력하는 애드온입니다.
|
||||||
wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다.
|
wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="jp">
|
<description xml:lang="jp">
|
||||||
|
|
@ -72,41 +72,13 @@
|
||||||
<title xml:lang="vi">Charset</title>
|
<title xml:lang="vi">Charset</title>
|
||||||
<title xml:lang="ru">Charset</title>
|
<title xml:lang="ru">Charset</title>
|
||||||
<title xml:lang="zh-TW">編碼</title>
|
<title xml:lang="zh-TW">編碼</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다. 문자셋에 원하는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다. 기본값은 UTF-8입니다. (*SK Telecom 휴대전화의 경우 euc-kr인코딩만 지원하므로, 강제로 euc-kr인코딩만 지원합니다.)</description>
|
||||||
모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다.
|
<description xml:lang="jp">ある特定のモバイル機器ではutf-8文字コードの認識が出来ない場合があります。文字コードを設定すると、(日本語だけの場合)該当文字コードに自動変換して正常に表示出来るようになります。本アドオンのデフォルト値はUTF-8で、日本の携帯はshift-jisが一般的です。</description>
|
||||||
문자셋에 원하시는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다.
|
<description xml:lang="zh-CN">手机有时无法识别utf-8编码,这时输入相应的编码值即可自动转换。默认编码为UTF-8。</description>
|
||||||
기본값은 UTF-8입니다.
|
<description xml:lang="en">utf-8 may be read with mobile tools. Mobile tools will display correct charset when you input charset you want. Default charset is UTF-8.</description>
|
||||||
(*SK Telecom 휴대전화의 경우 euc-kr인코딩만 지원하므로, 강제로 euc-kr인코딩만 지원합니다.)
|
<description xml:lang="vi">UTF-8 không thể đọc được cho các công cụ di động. Những công cụ di động sẽ trình bày Charset đúng khi bạn nhập vào Charset bạn muốn. Charset mặc định là UTF-8.</description>
|
||||||
</description>
|
<description xml:lang="ru">utf-8 may be read with mobile tools. Mobile tools will display correct charset when you input charset you want. Default charset is UTF-8.</description>
|
||||||
<description xml:lang="jp">
|
<description xml:lang="zh-TW">行動工具無法讀取utf-8編碼。當您輸入所想要的編碼時,行動工具將會正確的顯示。預設編碼是UTF-8.</description>
|
||||||
ある特定のモバイル機器ではutf-8文字コードの認識が出来ない場合があります。
|
|
||||||
文字コードを設定すると、(日本語だけの場合)該当文字コードに自動変換して正常に表示出来るようになります。
|
|
||||||
本アドオンのデフォルト値はUTF-8で、日本の携帯はshift-jisが一般的です。
|
|
||||||
</description>
|
|
||||||
<description xml:lang="zh-CN">
|
|
||||||
手机有时无法识别utf-8编码,这时输入相应的编码值即可自动转换。
|
|
||||||
默认编码为UTF-8。
|
|
||||||
</description>
|
|
||||||
<description xml:lang="en">
|
|
||||||
utf-8 may be read with mobile tools.
|
|
||||||
Mobile tools will display correct charset when you input charset you want.
|
|
||||||
Default charset is UTF-8.
|
|
||||||
</description>
|
|
||||||
<description xml:lang="vi">
|
|
||||||
UTF-8 không thể đọc được cho các công cụ di động.
|
|
||||||
Những công cụ di động sẽ trình bày Charset đúng khi bạn nhập vào Charset bạn muốn.
|
|
||||||
Charset mặc định là UTF-8.
|
|
||||||
</description>
|
|
||||||
<description xml:lang="ru">
|
|
||||||
utf-8 may be read with mobile tools.
|
|
||||||
Mobile tools will display correct charset when you input charset you want.
|
|
||||||
Default charset is UTF-8.
|
|
||||||
</description>
|
|
||||||
<description xml:lang="zh-TW">
|
|
||||||
行動工具無法讀取utf-8編碼。
|
|
||||||
當您輸入所想要的編碼時,行動工具將會正確的顯示。
|
|
||||||
預設編碼是UTF-8.
|
|
||||||
</description>
|
|
||||||
</var>
|
</var>
|
||||||
</extra_vars>
|
</extra_vars>
|
||||||
</addon>
|
</addon>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file mobile.addon.php
|
* @file mobile.addon.php
|
||||||
|
|
@ -14,37 +16,61 @@ if(!defined('__XE__')) exit();
|
||||||
*
|
*
|
||||||
* after_module_proc > display mobile content
|
* after_module_proc > display mobile content
|
||||||
* Condition
|
* Condition
|
||||||
**/
|
* */
|
||||||
// Ignore admin page
|
// Ignore admin page
|
||||||
if(Context::get('module')=='admin') return;
|
if(Context::get('module') == 'admin')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Manage when to call it
|
// Manage when to call it
|
||||||
if($called_position != 'before_module_proc' && $called_position != 'after_module_proc' ) return;
|
if($called_position != 'before_module_proc' && $called_position != 'after_module_proc')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Ignore if not mobile browser
|
// Ignore if not mobile browser
|
||||||
require_once(_XE_PATH_.'addons/mobile/classes/mobile.class.php');
|
require_once(_XE_PATH_ . 'addons/mobile/classes/mobile.class.php');
|
||||||
if(!mobileXE::getBrowserType()) return;
|
if(!mobileXE::getBrowserType())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Generate mobile instance
|
// Generate mobile instance
|
||||||
$oMobile = &mobileXE::getInstance();
|
$oMobile = &mobileXE::getInstance();
|
||||||
if(!$oMobile) return;
|
if(!$oMobile)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Specify charset on the add-on settings
|
// Specify charset on the add-on settings
|
||||||
$oMobile->setCharSet($addon_info->charset);
|
$oMobile->setCharSet($addon_info->charset);
|
||||||
// Set module information
|
// Set module information
|
||||||
$oMobile->setModuleInfo($this->module_info);
|
$oMobile->setModuleInfo($this->module_info);
|
||||||
// Register the current module object
|
// Register the current module object
|
||||||
$oMobile->setModuleInstance($this);
|
$oMobile->setModuleInstance($this);
|
||||||
// Extract content and display/exit if navigate mode is or if WAP class exists
|
|
||||||
if($called_position == 'before_module_proc') {
|
|
||||||
|
|
||||||
if($oMobile->isLangChange()) {
|
// Extract content and display/exit if navigate mode is or if WAP class exists
|
||||||
|
if($called_position == 'before_module_proc')
|
||||||
|
{
|
||||||
|
if($oMobile->isLangChange())
|
||||||
|
{
|
||||||
$oMobile->setLangType();
|
$oMobile->setLangType();
|
||||||
$oMobile->displayLangSelect();
|
$oMobile->displayLangSelect();
|
||||||
}
|
}
|
||||||
// On navigation mode, display navigation content
|
// On navigation mode, display navigation content
|
||||||
if($oMobile->isNavigationMode()) $oMobile->displayNavigationContent();
|
if($oMobile->isNavigationMode())
|
||||||
|
{
|
||||||
|
$oMobile->displayNavigationContent();
|
||||||
|
}
|
||||||
// If you have a WAP class content output via WAP class
|
// If you have a WAP class content output via WAP class
|
||||||
else $oMobile->displayModuleContent();
|
else
|
||||||
// If neither navigation mode nor WAP class is, display the module's result
|
{
|
||||||
} else if($called_position == 'after_module_proc') {
|
$oMobile->displayModuleContent();
|
||||||
|
}
|
||||||
|
// If neither navigation mode nor WAP class is, display the module's result
|
||||||
|
}
|
||||||
|
else if($called_position == 'after_module_proc')
|
||||||
|
{
|
||||||
// Display
|
// Display
|
||||||
$oMobile->displayContent();
|
$oMobile->displayContent();
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
/* End of file mobile.addon.php */
|
||||||
|
/* Location: ./addons/mobile/mobile.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file openid_delegation_id.addon.php
|
* @file openid_delegation_id.addon.php
|
||||||
|
|
@ -8,20 +10,28 @@ if(!defined('__XE__')) exit();
|
||||||
*
|
*
|
||||||
* This enables to use openID as user's homepage or blog url.
|
* This enables to use openID as user's homepage or blog url.
|
||||||
* Enter your open ID service information on the configuration.
|
* Enter your open ID service information on the configuration.
|
||||||
**/
|
* */
|
||||||
// Execute only wen called_position is before_module_init
|
// Execute only wen called_position is before_module_init
|
||||||
if($called_position != 'before_module_init') return;
|
if($called_position != 'before_module_init')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Get add-on settings(openid_delegation_id)
|
// Get add-on settings(openid_delegation_id)
|
||||||
if(!$addon_info->server||!$addon_info->delegate||!$addon_info->xrds) return;
|
if(!$addon_info->server || !$addon_info->delegate || !$addon_info->xrds)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$header_script = sprintf(
|
$header_script = sprintf(
|
||||||
'<link rel="openid.server" href="%s" />'."\n".
|
'<link rel="openid.server" href="%s" />' . "\n" .
|
||||||
'<link rel="openid.delegate" href="%s" />'."\n".
|
'<link rel="openid.delegate" href="%s" />' . "\n" .
|
||||||
'<meta http-equiv="X-XRDS-Location" content="%s" />',
|
'<meta http-equiv="X-XRDS-Location" content="%s" />',
|
||||||
$addon_info->server,
|
$addon_info->server,
|
||||||
$addon_info->delegate,
|
$addon_info->delegate,
|
||||||
$addon_info->xrds
|
$addon_info->xrds
|
||||||
);
|
);
|
||||||
|
|
||||||
Context::addHtmlHeader($header_script);
|
Context::addHtmlHeader($header_script);
|
||||||
?>
|
|
||||||
|
/* End of file openid_delegation_id.addon.php */
|
||||||
|
/* Location: ./addons/openid_delegation_id/openid_delegation_id.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<title xml:lang="zh-TW">點數等級圖案</title>
|
<title xml:lang="zh-TW">點數等級圖案</title>
|
||||||
<description xml:lang="ko">
|
<description xml:lang="ko">
|
||||||
포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다.
|
포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다.
|
||||||
레벨 아이콘은 모듈 > 포인트시스템에서 선택 가능합니다.
|
레벨 아이콘은 설치된 모듈 > 포인트시스템에서 선택 가능합니다.
|
||||||
</description>
|
</description>
|
||||||
<description xml:lang="zh-CN">
|
<description xml:lang="zh-CN">
|
||||||
使用积分系统时,可以在用户名前显示级别图标。
|
使用积分系统时,可以在用户名前显示级别图标。
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file point.addon.php
|
* @file point.addon.php
|
||||||
|
|
@ -7,13 +9,21 @@ if(!defined('__XE__')) exit();
|
||||||
* @brief Icon-on-point level
|
* @brief Icon-on-point level
|
||||||
*
|
*
|
||||||
* Display point level icon before user name when point system is enabled.
|
* Display point level icon before user name when point system is enabled.
|
||||||
**/
|
* */
|
||||||
// return unless before_display_content
|
// return unless before_display_content
|
||||||
if($called_position != "before_display_content" || Context::get('act')=='dispPageAdminContentModify') return;
|
if($called_position != "before_display_content" || Context::get('act') == 'dispPageAdminContentModify')
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
require_once('./addons/point_level_icon/point_level_icon.lib.php');
|
require_once('./addons/point_level_icon/point_level_icon.lib.php');
|
||||||
|
|
||||||
$temp_output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'pointLevelIconTrans', $output);
|
$temp_output = preg_replace_callback('!<(div|span|a)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span|a)\>!is', 'pointLevelIconTrans', $output);
|
||||||
if($temp_output) $output = $temp_output;
|
if($temp_output)
|
||||||
|
{
|
||||||
|
$output = $temp_output;
|
||||||
|
}
|
||||||
unset($temp_output);
|
unset($temp_output);
|
||||||
?>
|
|
||||||
|
/* End of file point_level_icon.addon.php */
|
||||||
|
/* Location: ./addons/point_level_icon/point_level_icon.addon.php */
|
||||||
|
|
|
||||||
|
|
@ -1,52 +1,78 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Function to change point icon.
|
* @brief Function to change point icon.
|
||||||
**/
|
*/
|
||||||
function pointLevelIconTrans($matches) {
|
function pointLevelIconTrans($matches)
|
||||||
|
{
|
||||||
$member_srl = $matches[3];
|
$member_srl = $matches[3];
|
||||||
if($member_srl<1) return $matches[0];
|
if($member_srl < 1)
|
||||||
|
{
|
||||||
|
return $matches[0];
|
||||||
|
}
|
||||||
|
|
||||||
$orig_text = preg_replace('/'.preg_quote($matches[5],'/').'<\/'.$matches[6].'>$/', '', $matches[0]);
|
$orig_text = preg_replace('/' . preg_quote($matches[5], '/') . '<\/' . $matches[6] . '>$/', '', $matches[0]);
|
||||||
|
|
||||||
// Check Group Image Mark
|
// Check Group Image Mark
|
||||||
$oMemberModel = &getModel('member');
|
$oMemberModel = getModel('member');
|
||||||
if($oMemberModel->getGroupImageMark($member_srl)) return $orig_text.$matches[5].'</'.$matches[6].'>';
|
if($oMemberModel->getGroupImageMark($member_srl))
|
||||||
|
{
|
||||||
|
return $orig_text . $matches[5] . '</' . $matches[6] . '>';
|
||||||
|
}
|
||||||
|
|
||||||
if(!isset($GLOBALS['_pointLevelIcon'][$member_srl])) {
|
if(!isset($GLOBALS['_pointLevelIcon'][$member_srl]))
|
||||||
|
{
|
||||||
// Get point configuration
|
// Get point configuration
|
||||||
if(!$GLOBALS['_pointConfig']) {
|
if(!$GLOBALS['_pointConfig'])
|
||||||
$oModuleModel = &getModel('module');
|
{
|
||||||
|
$oModuleModel = getModel('module');
|
||||||
$GLOBALS['_pointConfig'] = $oModuleModel->getModuleConfig('point');
|
$GLOBALS['_pointConfig'] = $oModuleModel->getModuleConfig('point');
|
||||||
}
|
}
|
||||||
$config = $GLOBALS['_pointConfig'];
|
$config = $GLOBALS['_pointConfig'];
|
||||||
|
|
||||||
// Get point model
|
// Get point model
|
||||||
if(!$GLOBALS['_pointModel']) $GLOBALS['_pointModel'] = getModel('point');
|
if(!$GLOBALS['_pointModel'])
|
||||||
|
{
|
||||||
|
$GLOBALS['_pointModel'] = getModel('point');
|
||||||
|
}
|
||||||
$oPointModel = &$GLOBALS['_pointModel'];
|
$oPointModel = &$GLOBALS['_pointModel'];
|
||||||
|
|
||||||
// Get points
|
// Get points
|
||||||
if(!$oPointModel->isExistsPoint($member_srl)) return $matches[0];
|
if(!$oPointModel->isExistsPoint($member_srl))
|
||||||
|
{
|
||||||
|
return $matches[0];
|
||||||
|
}
|
||||||
|
|
||||||
$point = $oPointModel->getPoint($member_srl);
|
$point = $oPointModel->getPoint($member_srl);
|
||||||
|
|
||||||
// Get level
|
// Get level
|
||||||
$level = $oPointModel->getLevel($point, $config->level_step);
|
$level = $oPointModel->getLevel($point, $config->level_step);
|
||||||
$text = $matches[5];
|
$text = $matches[5];
|
||||||
|
|
||||||
// Get a path where level icon is
|
// Get a path where level icon is
|
||||||
$level_icon = sprintf('%smodules/point/icons/%s/%d.gif', Context::getRequestUri(), $config->level_icon, $level);
|
$level_icon = sprintf('%smodules/point/icons/%s/%d.gif', Context::getRequestUri(), $config->level_icon, $level);
|
||||||
|
|
||||||
// Get per to go to the next level if not a top level
|
// Get per to go to the next level if not a top level
|
||||||
if($level < $config->max_level) {
|
if($level < $config->max_level)
|
||||||
$next_point = $config->level_step[$level+1];
|
{
|
||||||
|
$next_point = $config->level_step[$level + 1];
|
||||||
$present_point = $config->level_step[$level];
|
$present_point = $config->level_step[$level];
|
||||||
if($next_point > 0) {
|
if($next_point > 0)
|
||||||
$per = (int)(($point - $present_point) / ($next_point - $present_point)*100);
|
{
|
||||||
$per = $per.'%';
|
$per = (int) (($point - $present_point) / ($next_point - $present_point) * 100);
|
||||||
|
$per = $per . '%';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$title = sprintf('%s:%s%s%s, %s:%s/%s', Context::getLang('point'), $point, $config->point_name, $per?' ('.$per.')':'', Context::getLang('level'), $level, $config->max_level);
|
$title = sprintf('%s:%s%s%s, %s:%s/%s', Context::getLang('point'), $point, $config->point_name, $per ? ' (' . $per . ')' : '', Context::getLang('level'), $level, $config->max_level);
|
||||||
$alt = sprintf('[%s:%s]', Context::getLang('level'), $level);
|
$alt = sprintf('[%s:%s]', Context::getLang('level'), $level);
|
||||||
|
|
||||||
$GLOBALS['_pointLevelIcon'][$member_srl] = sprintf('<img src="%s" alt="%s" title="%s" style="vertical-align:middle; margin-right:3px;" />', $level_icon, $alt, $title);
|
$GLOBALS['_pointLevelIcon'][$member_srl] = sprintf('<img src="%s" alt="%s" title="%s" style="vertical-align:middle; margin-right:3px;" />', $level_icon, $alt, $title);
|
||||||
}
|
}
|
||||||
$text = $GLOBALS['_pointLevelIcon'][$member_srl];
|
$text = $GLOBALS['_pointLevelIcon'][$member_srl];
|
||||||
|
|
||||||
return $orig_text.$text.$matches[5].'</'.$matches[6].'>';
|
return $orig_text . $text . $matches[5] . '</' . $matches[6] . '>';
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
/* End of file point_level_icon.lib.php */
|
||||||
|
/* Location: ./addons/point_level_icon/point_level_icon.lib.php */
|
||||||
|
|
|
||||||
BIN
addons/resize_image/btn.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -1 +1 @@
|
||||||
.xe_content img{max-width:100%;height:auto !important}
|
.xe_content img{max-width:100%;height:auto}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
|
@ -9,76 +9,104 @@ var xScreen = null;
|
||||||
function getScreen() {
|
function getScreen() {
|
||||||
var body = $(document.body);
|
var body = $(document.body);
|
||||||
var controls, imgframe, closebtn, prevbtn, nextbtn;
|
var controls, imgframe, closebtn, prevbtn, nextbtn;
|
||||||
|
|
||||||
// 스크린이 없으면 스크린을 만든다.
|
// 스크린이 없으면 스크린을 만든다.
|
||||||
if (!xScreen) {
|
if (!xScreen) {
|
||||||
// 검은 스크린
|
// 검은 스크린
|
||||||
xScreen = $("<div>")
|
xScreen = $("<div>")
|
||||||
.attr("id","xe_gallery_screen")
|
.attr("id","xe_gallery_screen")
|
||||||
.css({
|
.css({
|
||||||
position:"absolute",
|
position:"fixed",
|
||||||
display:"none",
|
display:"none",
|
||||||
backgroundColor:"black",
|
backgroundColor:"black",
|
||||||
zIndex:500,
|
zIndex:500,
|
||||||
opacity:0.5
|
opacity:0.7
|
||||||
});
|
});
|
||||||
|
|
||||||
// 이미지를 보여주고 컨트롤 버튼을 다룰 레이어
|
// 이미지를 보여주고 컨트롤 버튼을 다룰 레이어
|
||||||
controls = $("<div>")
|
controls = $("<div>")
|
||||||
.attr("id","xe_gallery_controls")
|
.attr("id","xe_gallery_controls")
|
||||||
.css({
|
.css({
|
||||||
position:"absolute",
|
position:"fixed",
|
||||||
display:"none",
|
display:"none",
|
||||||
overflow:"hidden",
|
overflow:"hidden",
|
||||||
zIndex:510
|
zIndex:510
|
||||||
});
|
});
|
||||||
|
|
||||||
// 닫기 버튼
|
// 이전 버튼
|
||||||
closebtn = $("<img>")
|
prevbtn = $('<button type="button" id="xe_gallery_prevbtn" />')
|
||||||
.attr("id", "xe_gallery_closebtn")
|
|
||||||
.attr("src", request_uri+"addons/resize_image/iconClose.png")
|
|
||||||
.css({
|
.css({
|
||||||
top : "10px"
|
left: "10px",
|
||||||
|
backgroundPosition: "0 -64px"
|
||||||
|
})
|
||||||
|
.click(function(){xScreen.xePrev()})
|
||||||
|
.appendTo(controls);
|
||||||
|
|
||||||
|
// 닫기 버튼
|
||||||
|
closebtn = $('<button type="button" id="xe_gallery_closebtn" />')
|
||||||
|
.css({
|
||||||
|
top: "10px",
|
||||||
|
backgroundPosition: "0 0"
|
||||||
})
|
})
|
||||||
.click(function(){xScreen.xeHide()})
|
.click(function(){xScreen.xeHide()})
|
||||||
.appendTo(controls);
|
.appendTo(controls);
|
||||||
|
|
||||||
// 이전 버튼
|
|
||||||
prevbtn = $("<img>")
|
|
||||||
.attr("id", "xe_gallery_prevbtn")
|
|
||||||
.attr("src", request_uri+"addons/resize_image/iconLeft.png")
|
|
||||||
.css("left","10px")
|
|
||||||
.click(function(){xScreen.xePrev()})
|
|
||||||
.appendTo(controls);
|
|
||||||
|
|
||||||
// 다음 버튼
|
// 다음 버튼
|
||||||
nextbtn = $("<img>")
|
nextbtn = $('<button type="button" id="xe_gallery_nextbtn" />')
|
||||||
.attr("id", "xe_gallery_nextbtn")
|
.attr("id", "xe_gallery_nextbtn")
|
||||||
.attr("src", request_uri+"addons/resize_image/iconRight.png")
|
.css({
|
||||||
.css("right","10px")
|
right: "10px",
|
||||||
|
backgroundPosition: "0 -128px"
|
||||||
|
})
|
||||||
.click(function(){xScreen.xeNext()})
|
.click(function(){xScreen.xeNext()})
|
||||||
.appendTo(controls);
|
.appendTo(controls);
|
||||||
|
|
||||||
// 버튼 공통 속성
|
// 버튼 공통 속성
|
||||||
controls.find("img")
|
controls.find(">button")
|
||||||
.attr({
|
|
||||||
width : 60,
|
|
||||||
height : 60,
|
|
||||||
className : "iePngFix"
|
|
||||||
})
|
|
||||||
.css({
|
.css({
|
||||||
position : "absolute",
|
position : "absolute",
|
||||||
width : "60px",
|
width : "64px",
|
||||||
height : "60px",
|
height : "64px",
|
||||||
zIndex : 530,
|
zIndex : 530,
|
||||||
cursor : "pointer"
|
cursor : "pointer",
|
||||||
});
|
border : 0,
|
||||||
|
margin : 0,
|
||||||
|
padding : 0,
|
||||||
|
backgroundColor: "transparent",
|
||||||
|
backgroundImage: "url(" + request_uri + "addons/resize_image/btn.png)",
|
||||||
|
backgroundRepeat: "no-repeat",
|
||||||
|
opacity: ".5",
|
||||||
|
filter: "alpha(opacity=50)"
|
||||||
|
})
|
||||||
|
.mouseover(function(){
|
||||||
|
$(this).css({
|
||||||
|
opacity: "1",
|
||||||
|
filter: "alpha(opacity=100)"
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.mouseout(function(){
|
||||||
|
$(this).css({
|
||||||
|
opacity: ".5",
|
||||||
|
filter: "alpha(opacity=50)"
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.focus(function(){
|
||||||
|
$(this).trigger('mouseover');
|
||||||
|
})
|
||||||
|
.blur(function(){
|
||||||
|
$(this).trigger('mouseout');
|
||||||
|
})
|
||||||
|
;
|
||||||
|
|
||||||
// 이미지 홀더
|
// 이미지 홀더
|
||||||
imgframe = $("<img>")
|
imgframe = $("<img>")
|
||||||
.attr("id", "xe_gallery_holder")
|
.attr("id", "xe_gallery_holder")
|
||||||
.css("border", "7px solid white")
|
.css({
|
||||||
.css("zIndex", 520)
|
border: '5px solid white',
|
||||||
|
zindex: 520,
|
||||||
|
maxWidth: 'none',
|
||||||
|
borderRadius: '5px',
|
||||||
|
boxShadow: '0 0 10px #000'
|
||||||
|
})
|
||||||
.appendTo(controls).draggable();
|
.appendTo(controls).draggable();
|
||||||
|
|
||||||
body.append(xScreen).append(controls);
|
body.append(xScreen).append(controls);
|
||||||
|
|
@ -87,28 +115,18 @@ function getScreen() {
|
||||||
xScreen.xeShow = function() {
|
xScreen.xeShow = function() {
|
||||||
var clientWidth = $(window).width();
|
var clientWidth = $(window).width();
|
||||||
var clientHeight = $(window).height();
|
var clientHeight = $(window).height();
|
||||||
|
$("#xe_gallery_controls,#xe_gallery_screen").show().css({
|
||||||
$("#xe_gallery_controls,#xe_gallery_screen").css({
|
top : 0,
|
||||||
display:"block",
|
right : 0,
|
||||||
width : $(document).width() + "px",
|
bottom : 0,
|
||||||
height : $(document).height() + "px",
|
left : 0
|
||||||
left : 0,
|
|
||||||
top : 0
|
|
||||||
//width : clientWidth + "px",
|
|
||||||
//height : clientHeight + "px",
|
|
||||||
// left : $(document).scrollLeft(),
|
|
||||||
// top : $(document).scrollTop()
|
|
||||||
});
|
});
|
||||||
|
$("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top", Math.round(clientHeight/2 - 32) + "px");
|
||||||
closebtn.css("left", Math.round((clientWidth-60)/2) + "px");
|
|
||||||
|
|
||||||
$("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top", Math.round( (clientHeight-60)/2 ) + "px");
|
|
||||||
|
|
||||||
this.xeMove(0);
|
this.xeMove(0);
|
||||||
};
|
};
|
||||||
xScreen.xeHide = function(event) {
|
xScreen.xeHide = function(event) {
|
||||||
xScreen.css("display","none");
|
xScreen.hide();
|
||||||
controls.css("display","none");
|
controls.hide();
|
||||||
};
|
};
|
||||||
xScreen.xePrev = function() {
|
xScreen.xePrev = function() {
|
||||||
this.xeMove(-1);
|
this.xeMove(-1);
|
||||||
|
|
@ -119,29 +137,31 @@ function getScreen() {
|
||||||
xScreen.xeMove = function(val) {
|
xScreen.xeMove = function(val) {
|
||||||
var clientWidth = $(window).width();
|
var clientWidth = $(window).width();
|
||||||
var clientHeight = $(window).height();
|
var clientHeight = $(window).height();
|
||||||
|
|
||||||
this.index += val;
|
this.index += val;
|
||||||
|
|
||||||
prevbtn.css("visibility", (this.index>0)?"visible":"hidden");
|
prevbtn.css("visibility", (this.index>0)?"visible":"hidden");
|
||||||
nextbtn.css("visibility", (this.index<this.list.size()-1)?"visible":"hidden");
|
nextbtn.css("visibility", (this.index<this.list.size()-1)?"visible":"hidden");
|
||||||
|
|
||||||
//textyle 이미지 리사이즈 처리
|
//textyle 이미지 리사이즈 처리
|
||||||
var src = this.list.eq(this.index).attr("rawsrc");
|
var src = this.list.eq(this.index).attr("rawsrc");
|
||||||
if(!src) src = this.list.eq(this.index).attr("src");
|
if(!src) src = this.list.eq(this.index).attr("src");
|
||||||
|
|
||||||
imgframe.attr("src", src).css({
|
imgframe.attr("src", src).css({
|
||||||
left : Math.round( Math.max( parseInt($(document).scrollLeft()) + (clientWidth-imgframe.width()-14)/2, 0 ) ) + "px",
|
left : clientWidth/2 - imgframe.width()/2 + "px",
|
||||||
top : Math.round( Math.max( parseInt($(document).scrollTop()) + (clientHeight-imgframe.height()-14)/2, 0 ) ) + "px"
|
top : clientHeight/2 - imgframe.height()/2 + "px"
|
||||||
});
|
});
|
||||||
|
|
||||||
closebtn.css({
|
closebtn.css({
|
||||||
left : Math.round( Math.max( parseInt($(document).scrollLeft()) + (clientWidth-closebtn.width())/2, 0 ) ) + "px",
|
left : clientWidth/2 - 32 + "px",
|
||||||
top : Math.round( Math.max( parseInt($(document).scrollTop()) + 10, 0 ) ) + "px"
|
top : "10px"
|
||||||
});
|
}).focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
// 스크린을 닫는 상황
|
// 스크린을 닫는 상황
|
||||||
$(document).keydown(xScreen.xeHide);
|
$(document).keydown(function(e){
|
||||||
|
if(e.which == 27){
|
||||||
|
xScreen.xeHide();
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
controls = $("#xe_gallery_controls");
|
controls = $("#xe_gallery_controls");
|
||||||
imgframe = $("#xe_gallery_holder");
|
imgframe = $("#xe_gallery_holder");
|
||||||
|
|
@ -149,7 +169,6 @@ function getScreen() {
|
||||||
prevbtn = $("#xe_gallery_prevbtn");
|
prevbtn = $("#xe_gallery_prevbtn");
|
||||||
nextbtn = $("#xe_gallery_nextbtn");
|
nextbtn = $("#xe_gallery_nextbtn");
|
||||||
}
|
}
|
||||||
|
|
||||||
return xScreen;
|
return xScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,15 +185,15 @@ function slideshow(event) {
|
||||||
xScreen.xeShow();
|
xScreen.xeShow();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DOM READY */
|
/* Window Load */
|
||||||
$(function() {
|
$(window).load(function(){
|
||||||
var regx_skip = /(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i;
|
var regx_skip = /(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i;
|
||||||
var regx_allow_i6pngfix = /(?:common\/tpl\/images\/blank\.gif$)/i;
|
var regx_allow_i6pngfix = /(?:common\/tpl\/images\/blank\.gif$)/i;
|
||||||
/**
|
/**
|
||||||
* 본문 폭 구하기 위한 개체
|
* 본문 폭 구하기 위한 개체
|
||||||
* IE6에서 본문폭을 넘는 이미지가 있으면 그 크기로 구해지는 문제 우회용
|
* IE6에서 본문폭을 넘는 이미지가 있으면 그 크기로 구해지는 문제 우회용
|
||||||
**/
|
**/
|
||||||
var dummy = $('<div style="height:1; overflow:hidden; opacity:0; display:block; clear:both;"></div>');
|
var dummy = $('<div style="height:1px;overflow:hidden;opacity:0;display:block;clear:both"></div>');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 리사이즈 실행 함수
|
* 리사이즈 실행 함수
|
||||||
|
|
@ -208,7 +227,7 @@ $(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$('div.xe_content').each(function() {
|
$('.xe_content').each(function() {
|
||||||
var contentWidth = dummy.appendTo(this).width();
|
var contentWidth = dummy.appendTo(this).width();
|
||||||
dummy.remove();
|
dummy.remove();
|
||||||
if(!contentWidth) return;
|
if(!contentWidth) return;
|
||||||
|
|
@ -217,9 +236,7 @@ $(function() {
|
||||||
var $img = $(this);
|
var $img = $(this);
|
||||||
var imgSrc = $img.attr('src');
|
var imgSrc = $img.attr('src');
|
||||||
if(regx_skip.test(imgSrc) && !regx_allow_i6pngfix.test(imgSrc)) return;
|
if(regx_skip.test(imgSrc) && !regx_allow_i6pngfix.test(imgSrc)) return;
|
||||||
|
|
||||||
$img.attr('rel', 'xe_gallery');
|
$img.attr('rel', 'xe_gallery');
|
||||||
|
|
||||||
doResize.call($img, contentWidth);
|
doResize.call($img, contentWidth);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
8
addons/resize_image/js/resize_image.min.js
vendored
|
|
@ -1,7 +1 @@
|
||||||
/**
|
(function(c){var d=null;function a(){var g=c(document.body);var h,f,e,j,i;if(!d){d=c("<div>").attr("id","xe_gallery_screen").css({position:"fixed",display:"none",backgroundColor:"black",zIndex:500,opacity:0.7});h=c("<div>").attr("id","xe_gallery_controls").css({position:"fixed",display:"none",overflow:"hidden",zIndex:510});j=c('<button type="button" id="xe_gallery_prevbtn" />').css({left:"10px",backgroundPosition:"0 -64px"}).click(function(){d.xePrev()}).appendTo(h);e=c('<button type="button" id="xe_gallery_closebtn" />').css({top:"10px",backgroundPosition:"0 0"}).click(function(){d.xeHide()}).appendTo(h);i=c('<button type="button" id="xe_gallery_nextbtn" />').attr("id","xe_gallery_nextbtn").css({right:"10px",backgroundPosition:"0 -128px"}).click(function(){d.xeNext()}).appendTo(h);h.find(">button").css({position:"absolute",width:"64px",height:"64px",zIndex:530,cursor:"pointer",border:0,margin:0,padding:0,backgroundColor:"transparent",backgroundImage:"url("+request_uri+"addons/resize_image/btn.png)",backgroundRepeat:"no-repeat",opacity:".5",filter:"alpha(opacity=50)"}).mouseover(function(){c(this).css({opacity:"1",filter:"alpha(opacity=100)"})}).mouseout(function(){c(this).css({opacity:".5",filter:"alpha(opacity=50)"})}).focus(function(){c(this).trigger("mouseover")}).blur(function(){c(this).trigger("mouseout")});f=c("<img>").attr("id","xe_gallery_holder").css({border:"5px solid white",zindex:520,maxWidth:"none",borderRadius:"5px",boxShadow:"0 0 10px #000"}).appendTo(h).draggable();g.append(d).append(h);d.xeShow=function(){var l=c(window).width();var k=c(window).height();c("#xe_gallery_controls,#xe_gallery_screen").show().css({top:0,right:0,bottom:0,left:0});c("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top",Math.round(k/2-32)+"px");this.xeMove(0)};d.xeHide=function(k){d.hide();h.hide()};d.xePrev=function(){this.xeMove(-1)};d.xeNext=function(){this.xeMove(1)};d.xeMove=function(n){var m=c(window).width();var k=c(window).height();this.index+=n;j.css("visibility",(this.index>0)?"visible":"hidden");i.css("visibility",(this.index<this.list.size()-1)?"visible":"hidden");var l=this.list.eq(this.index).attr("rawsrc");if(!l){l=this.list.eq(this.index).attr("src")}f.attr("src",l).css({left:m/2-f.width()/2+"px",top:k/2-f.height()/2+"px"});e.css({left:m/2-32+"px",top:"10px"}).focus()};c(document).keydown(function(k){if(k.which==27){d.xeHide();return false}else{return true}})}else{h=c("#xe_gallery_controls");f=c("#xe_gallery_holder");e=c("#xe_gallery_closebtn");j=c("#xe_gallery_prevbtn");i=c("#xe_gallery_nextbtn")}return d}function b(h){var f=c(this).closest(".xe_content");var e=f.find("img[rel=xe_gallery]");var g=c.inArray(c(this).get(0),e.get());var i=a();i.list=e;i.index=g;i.xeShow()}c(window).load(function(){var g=/(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i;var f=/(?:common\/tpl\/images\/blank\.gif$)/i;var h=c('<div style="height:1px;overflow:hidden;opacity:0;display:block;clear:both"></div>');function e(k,m){if(!m){m=0}if(m>=10){return}var l=this;var j={width:l.width(),height:l.height()};if(!j.width||!j.height){setTimeout(function(){e.call(l,k,++m)},200);return}if(j.width<=k){return}var i=k/j.width;l.removeAttr("width").removeAttr("height").css({width:k,height:parseInt(j.height*i,10)})}c(".xe_content").each(function(){var i=h.appendTo(this).width();h.remove();if(!i){return}c("img",this).each(function(){var j=c(this);var k=j.attr("src");if(g.test(k)&&!f.test(k)){return}j.attr("rel","xe_gallery");e.call(j,i)});c("img[rel=xe_gallery]",this).live("mouseover",function(){var j=c(this);if(!j.parent("a").length&&!j.attr("onclick")){j.css("cursor","pointer").click(b)}})})})})(jQuery);
|
||||||
* @brief 화면내에서 상위 영역보다 이미지가 크면 리사이즈를 하고 클릭시 원본을 보여줄수 있도록 변경
|
|
||||||
**/
|
|
||||||
(function($){var xScreen=null
|
|
||||||
function getScreen(){var body=$(document.body),controls,imgframe,closebtn,prevbtn,nextbtn;if(!xScreen){xScreen=$("<div>").attr("id","xe_gallery_screen").css({position:"absolute",display:"none",backgroundColor:"black",zIndex:500,opacity:0.5});controls=$("<div>").attr("id","xe_gallery_controls").css({position:"absolute",display:"none",overflow:"hidden",zIndex:510});closebtn=$("<img>").attr("id","xe_gallery_closebtn").attr("src",request_uri+"addons/resize_image/iconClose.png").css({top:"10px"}).click(function(){xScreen.xeHide()}).appendTo(controls);prevbtn=$("<img>").attr("id","xe_gallery_prevbtn").attr("src",request_uri+"addons/resize_image/iconLeft.png").css("left","10px").click(function(){xScreen.xePrev()}).appendTo(controls);nextbtn=$("<img>").attr("id","xe_gallery_nextbtn").attr("src",request_uri+"addons/resize_image/iconRight.png").css("right","10px").click(function(){xScreen.xeNext()}).appendTo(controls);controls.find("img").attr({width:60,height:60,className:"iePngFix"}).css({position:"absolute",width:"60px",height:"60px",zIndex:530,cursor:"pointer"});imgframe=$("<img>").attr("id","xe_gallery_holder").css("border","7px solid white").css("zIndex",520).appendTo(controls).draggable();body.append(xScreen).append(controls);xScreen.xeShow=function(){var clientWidth=$(window).width(),clientHeight=$(window).height();$("#xe_gallery_controls,#xe_gallery_screen").css({display:"block",width:$(document).width()+"px",height:$(document).height()+"px",left:0,top:0});closebtn.css("left",Math.round((clientWidth-60)/2)+"px");$("#xe_gallery_prevbtn,#xe_gallery_nextbtn").css("top",Math.round((clientHeight-60)/2)+"px");this.xeMove(0)};xScreen.xeHide=function(event){xScreen.css("display","none");controls.css("display","none")};xScreen.xePrev=function(){this.xeMove(-1)};xScreen.xeNext=function(){this.xeMove(1)};xScreen.xeMove=function(val){var clientWidth=$(window).width(),clientHeight=$(window).height();this.index+=val;prevbtn.css("visibility",(this.index>0)?"visible":"hidden");nextbtn.css("visibility",(this.index<this.list.size()-1)?"visible":"hidden");var src=this.list.eq(this.index).attr("rawsrc");if(!src)src=this.list.eq(this.index).attr("src");imgframe.attr("src",src).css({left:Math.round(Math.max(parseInt($(document).scrollLeft())+(clientWidth-imgframe.width()-14)/2,0))+"px",top:Math.round(Math.max(parseInt($(document).scrollTop())+(clientHeight-imgframe.height()-14)/2,0))+"px"});closebtn.css({left:Math.round(Math.max(parseInt($(document).scrollLeft())+(clientWidth-closebtn.width())/2,0))+"px",top:Math.round(Math.max(parseInt($(document).scrollTop())+10,0))+"px"})};$(document).keydown(xScreen.xeHide)}else{controls=$("#xe_gallery_controls");imgframe=$("#xe_gallery_holder");closebtn=$("#xe_gallery_closebtn");prevbtn=$("#xe_gallery_prevbtn");nextbtn=$("#xe_gallery_nextbtn")};return xScreen}
|
|
||||||
function slideshow(event){var container=$(this).closest('.xe_content'),imglist=container.find("img[rel=xe_gallery]"),currentIdx=$.inArray($(this).get(0),imglist.get()),xScreen=getScreen();xScreen.list=imglist;xScreen.index=currentIdx;xScreen.xeShow()};$(function(){var regx_skip=/(?:(modules|addons|classes|common|layouts|libs|widgets|widgetstyles)\/)/i,regx_allow_i6pngfix=/(?:common\/tpl\/images\/blank\.gif$)/i,dummy=$('<div style="height:1; overflow:hidden; opacity:0; display:block; clear:both;"></div>')
|
|
||||||
function doResize(contentWidth,count){if(!count)count=0;if(count>=10)return;var $img=this,beforSize={width:$img.width(),height:$img.height()};if(!beforSize.width||!beforSize.height){setTimeout(function(){doResize.call($img,contentWidth,++count)},200);return};if(beforSize.width<=contentWidth)return;var resize_ratio=contentWidth/beforSize.width;$img.removeAttr('width').removeAttr('height').css({width:contentWidth,height:parseInt(beforSize.height*resize_ratio,10)})};$('div.xe_content').each(function(){var contentWidth=dummy.appendTo(this).width();dummy.remove();if(!contentWidth)return;$('img',this).each(function(){var $img=$(this),imgSrc=$img.attr('src');if(regx_skip.test(imgSrc)&&!regx_allow_i6pngfix.test(imgSrc))return;$img.attr('rel','xe_gallery');doResize.call($img,contentWidth)});$('img[rel=xe_gallery]',this).live('mouseover',function(){var $img=$(this);if(!$img.parent('a').length&&!$img.attr('onclick'))$img.css('cursor','pointer').click(slideshow)})})})})(jQuery)
|
|
||||||
|
|
@ -1,18 +1,25 @@
|
||||||
<?php
|
<?php
|
||||||
if(!defined('__XE__')) exit();
|
|
||||||
|
if(!defined('__XE__'))
|
||||||
|
exit();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file resize_image.addon.php
|
* @file resize_image.addon.php
|
||||||
* @author NHN (developers@xpressengine.com)
|
* @author NHN (developers@xpressengine.com)
|
||||||
* @brief Add-on to resize images in the body
|
* @brief Add-on to resize images in the body
|
||||||
**/
|
*/
|
||||||
|
if($called_position == 'after_module_proc' && Context::getResponseMethod() == "HTML")
|
||||||
if($called_position == 'after_module_proc' && Context::getResponseMethod()=="HTML") {
|
{
|
||||||
if(Mobile::isFromMobilePhone()) {
|
if(Mobile::isFromMobilePhone())
|
||||||
|
{
|
||||||
Context::loadFile('./addons/resize_image/css/resize_image.mobile.css', true);
|
Context::loadFile('./addons/resize_image/css/resize_image.mobile.css', true);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
Context::loadJavascriptPlugin('ui');
|
Context::loadJavascriptPlugin('ui');
|
||||||
Context::loadFile(array('./addons/resize_image/js/resize_image.min.js', 'body', '', null), true);
|
Context::loadFile(array('./addons/resize_image/js/resize_image.min.js', 'body', '', null), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
/* End of file resize_image.addon.php */
|
||||||
|
/* Location: ./addons/resize_image/resize_image.addon.php */
|
||||||
|
|
|
||||||
BIN
admin/help/img/admin/dashboard.PNG
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
admin/help/img/admin/easyinstall_for_textyle.PNG
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
admin/help/img/admin/ftp_config.PNG
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
admin/help/img/admin/installed_module.PNG
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
admin/help/img/faq/add_multilingual.PNG
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
admin/help/img/faq/admin_ip_band.PNG
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
admin/help/img/faq/apply_multilingual.PNG
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
admin/help/img/faq/board_basic_setup.PNG
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
admin/help/img/faq/comment_publish.PNG
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
admin/help/img/faq/defence_login_limit.PNG
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
admin/help/img/faq/deny_admin_by_ip.PNG
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
admin/help/img/faq/export1.PNG
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
admin/help/img/faq/export2.PNG
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
admin/help/img/faq/export3.PNG
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
admin/help/img/faq/exposure_target.PNG
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
admin/help/img/faq/file_status.PNG
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
admin/help/img/faq/import1.PNG
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
admin/help/img/faq/import2.PNG
Normal file
|
After Width: | Height: | Size: 9 KiB |
BIN
admin/help/img/faq/import_complete.PNG
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
admin/help/img/faq/joinform_manage.PNG
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
admin/help/img/faq/joinform_type.PNG
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
admin/help/img/faq/login_config.PNG
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
admin/help/img/faq/menu_name_modify.PNG
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
admin/help/img/faq/search_multilingual.PNG
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
admin/help/img/faq/use_multilingual.PNG
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
admin/help/img/faq/user_defined_joinform.PNG
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
admin/help/img/image001.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
admin/help/img/image002.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
admin/help/img/image003.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
admin/help/img/image004.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
admin/help/img/image005.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
admin/help/img/image006.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
admin/help/img/image007.jpg
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
admin/help/img/image008.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
admin/help/img/image009.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
admin/help/img/image010.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
admin/help/img/image011.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
admin/help/img/image012.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
admin/help/img/image013.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
admin/help/img/image014.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
admin/help/img/image015.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
admin/help/img/image016.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
admin/help/img/image017.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
admin/help/img/image018.jpg
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
admin/help/img/image019.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
admin/help/img/image020.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
admin/help/img/image021.jpg
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
admin/help/img/image022.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
admin/help/img/image023.png
Normal file
|
After Width: | Height: | Size: 330 B |
BIN
admin/help/img/image024.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
admin/help/img/image025.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
admin/help/img/image026.png
Normal file
|
After Width: | Height: | Size: 327 B |
BIN
admin/help/img/image027.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
admin/help/img/image028.png
Normal file
|
After Width: | Height: | Size: 229 B |
BIN
admin/help/img/image029.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
admin/help/img/image030.png
Normal file
|
After Width: | Height: | Size: 228 B |
BIN
admin/help/img/image031.jpg
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
admin/help/img/image032.jpg
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
admin/help/img/image033.jpg
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
admin/help/img/image034.jpg
Normal file
|
After Width: | Height: | Size: 383 B |
BIN
admin/help/img/image035.jpg
Normal file
|
After Width: | Height: | Size: 1 KiB |
BIN
admin/help/img/image036.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
admin/help/img/image037.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
admin/help/img/image038.jpg
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
admin/help/img/image039.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
admin/help/img/image040.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |