SNS 수정중
This commit is contained in:
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
$sub_menu = "300100";
|
||||
include_once('./_common.php');
|
||||
|
||||
check_demo();
|
||||
|
||||
if ($is_admin != 'super')
|
||||
alert("게시판 삭제는 최고관리자만 가능합니다.");
|
||||
|
||||
auth_check($auth[$sub_menu], 'd');
|
||||
|
||||
check_token();
|
||||
|
||||
// _BOARD_DELETE_ 상수를 선언해야 board_delete.inc.php 가 정상 작동함
|
||||
define('_BOARD_DELETE_', TRUE);
|
||||
|
||||
// include 전에 $bo_table 값을 반드시 넘겨야 함
|
||||
$tmp_bo_table = escape_trim($_GET['bo_table']);
|
||||
$sql = " select * from {$g4['board_table']} where bo_table = '{$tmp_bo_table}' ";
|
||||
$row = sql_fetch($sql);
|
||||
if (!$row) {
|
||||
alert('게시판을 삭제할 수 없습니다.');
|
||||
}
|
||||
|
||||
include_once ('./board_delete.inc.php');
|
||||
|
||||
goto_url('./board_list.php?'.$qstr.'&page='.$page);
|
||||
?>
|
||||
@ -729,11 +729,25 @@ $pg_anchor = '<ul class="anchor">
|
||||
<tr>
|
||||
<th scope="row"><label for="cf_facebook_appid">페이스북 앱 ID</label></th>
|
||||
<td>
|
||||
<input type="text" name="cf_facebook_appid" value="<?php echo $config['cf_facebook_appid'] ?>" id="cf_facebook_appid" class="frm_input"> <a href="https://developers.facebook.com/apps" target="_blank" class="btn_frmline">앱 등록페이지</a>
|
||||
<input type="text" name="cf_facebook_appid" value="<?php echo $config['cf_facebook_appid'] ?>" id="cf_facebook_appid" class="frm_input"> <a href="https://developers.facebook.com/apps" target="_blank" class="btn_frmline">앱 등록하기</a>
|
||||
</td>
|
||||
<th scope="row"><label for="cf_facebook_secret">페이스북 앱 Secret</label></th>
|
||||
<td>
|
||||
<input type="text" name="cf_facebook_secret" value="<?php echo $config['cf_facebook_secret'] ?>" id="cf_facebook_secret" class="frm_input" size="30">
|
||||
<input type="text" name="cf_facebook_secret" value="<?php echo $config['cf_facebook_secret'] ?>" id="cf_facebook_secret" class="frm_input" size="35">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="cf_twitter_use">트위터 사용</label></th>
|
||||
<td colspan="3"><input type="checkbox" name="cf_twitter_use" value="1" id="cf_twitter_use" <?php echo $config['cf_twitter_use']?'checked':''; ?>> 사용</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="cf_twitter_key">트위터 컨슈머 Key</label></th>
|
||||
<td>
|
||||
<input type="text" name="cf_twitter_key" value="<?php echo $config['cf_twitter_key'] ?>" id="cf_twitter_key" class="frm_input"> <a href="https://dev.twitter.com/apps" target="_blank" class="btn_frmline">앱 등록하기</a>
|
||||
</td>
|
||||
<th scope="row"><label for="cf_twitter_secret">트위터 컨슈머 Secret</label></th>
|
||||
<td>
|
||||
<input type="text" name="cf_twitter_secret" value="<?php echo $config['cf_twitter_secret'] ?>" id="cf_twitter_secret" class="frm_input" size="35">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@ -106,6 +106,9 @@ $sql = " update {$g4['config_table']}
|
||||
cf_facebook_use = '{$_POST['cf_facebook_use']}',
|
||||
cf_facebook_appid = '{$_POST['cf_facebook_appid']}',
|
||||
cf_facebook_secret = '{$_POST['cf_facebook_secret']}',
|
||||
cf_twitter_use = '{$_POST['cf_twitter_use']}',
|
||||
cf_twitter_key = '{$_POST['cf_twitter_key']}',
|
||||
cf_twitter_secret = '{$_POST['cf_twitter_secret']}',
|
||||
cf_1_subj = '{$_POST['cf_1_subj']}',
|
||||
cf_2_subj = '{$_POST['cf_2_subj']}',
|
||||
cf_3_subj = '{$_POST['cf_3_subj']}',
|
||||
|
||||
22
common.php
22
common.php
@ -134,8 +134,8 @@ div a {display:block;margin:50px auto 10px;width:170px;text-align:center}
|
||||
//==============================================================================
|
||||
// SESSION 설정
|
||||
//------------------------------------------------------------------------------
|
||||
ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음
|
||||
ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)
|
||||
@ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음
|
||||
@ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)
|
||||
|
||||
session_save_path(G4_DATA_PATH.'/session');
|
||||
|
||||
@ -143,15 +143,6 @@ if (isset($SESSION_CACHE_LIMITER))
|
||||
@session_cache_limiter($SESSION_CACHE_LIMITER);
|
||||
else
|
||||
@session_cache_limiter("no-cache, must-revalidate");
|
||||
//==============================================================================
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// 공용 변수
|
||||
//------------------------------------------------------------------------------
|
||||
// 기본환경설정
|
||||
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
|
||||
$config = sql_fetch(" select * from {$g4['config_table']} ");
|
||||
|
||||
ini_set("session.cache_expire", 180); // 세션 캐쉬 보관시간 (분)
|
||||
ini_set("session.gc_maxlifetime", 10800); // session data의 garbage collection 존재 기간을 지정 (초)
|
||||
@ -162,6 +153,15 @@ session_set_cookie_params(0, '/');
|
||||
ini_set("session.cookie_domain", G4_COOKIE_DOMAIN);
|
||||
|
||||
@session_start();
|
||||
//==============================================================================
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// 공용 변수
|
||||
//------------------------------------------------------------------------------
|
||||
// 기본환경설정
|
||||
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
|
||||
$config = sql_fetch(" select * from {$g4['config_table']} ");
|
||||
|
||||
define('G4_HTTP_BBS_URL', https_url(G4_BBS_DIR, false));
|
||||
define('G4_HTTPS_BBS_URL', https_url(G4_BBS_DIR, true));
|
||||
|
||||
17
config.php
17
config.php
@ -48,11 +48,9 @@ define('G4_SKIN_DIR', 'skin');
|
||||
define('G4_GCAPTCHA_DIR', 'gcaptcha');
|
||||
define('G4_CKEDITOR_DIR', 'ckeditor');
|
||||
define('G4_MOBILE_DIR', 'mobile');
|
||||
<<<<<<< HEAD
|
||||
define('G4_KCP_DIR', 'kcp');
|
||||
=======
|
||||
|
||||
define('G4_KCPCERT_DIR', 'kcpcert');
|
||||
>>>>>>> master
|
||||
|
||||
define('G4_SNS_DIR', 'sns');
|
||||
define('G4_SYNDI_DIR', 'syndi');
|
||||
|
||||
@ -82,11 +80,7 @@ define('G4_SKIN_URL', G4_URL.'/'.G4_SKIN_DIR);
|
||||
define('G4_PLUGIN_URL', G4_URL.'/'.G4_PLUGIN_DIR);
|
||||
define('G4_GCAPTCHA_URL', G4_PLUGIN_URL.'/'.G4_GCAPTCHA_DIR);
|
||||
define('G4_CKEDITOR_URL', G4_PLUGIN_URL.'/'.G4_CKEDITOR_DIR); // CKEDITOR 의 라이브러리 경로
|
||||
<<<<<<< HEAD
|
||||
define('G4_KCP_URL', G4_PLUGIN_URL.'/'.G4_KCP_DIR);
|
||||
=======
|
||||
define('G4_KCPCERT_URL', G4_PLUGIN_URL.'/'.G4_KCPCERT_DIR);
|
||||
>>>>>>> master
|
||||
define('G4_SNS_URL', G4_PLUGIN_URL.'/'.G4_SNS_DIR);
|
||||
define('G4_SYNDI_URL', G4_PLUGIN_URL.'/'.G4_SYNDI_DIR);
|
||||
define('G4_MOBILE_URL', G4_URL.'/'.G4_MOBILE_DIR);
|
||||
@ -101,11 +95,9 @@ define('G4_PLUGIN_PATH', G4_PATH.'/'.G4_PLUGIN_DIR);
|
||||
define('G4_SKIN_PATH', G4_PATH.'/'.G4_SKIN_DIR);
|
||||
define('G4_GCAPTCHA_PATH', G4_PLUGIN_PATH.'/'.G4_GCAPTCHA_DIR);
|
||||
define('G4_CKEDITOR_PATH', G4_PLUGIN_PATH.'/'.G4_CKEDITOR_DIR);
|
||||
<<<<<<< HEAD
|
||||
define('G4_KCP_PATH', G4_PLUGIN_PATH.'/'.G4_KCP_DIR);
|
||||
=======
|
||||
|
||||
define('G4_KCPCERT_PATH', G4_PLUGIN_PATH.'/'.G4_KCPCERT_DIR);
|
||||
>>>>>>> master
|
||||
|
||||
define('G4_SNS_PATH', G4_PLUGIN_PATH.'/'.G4_SNS_DIR);
|
||||
define('G4_SYNDI_PATH', G4_PLUGIN_PATH.'/'.G4_SYNDI_DIR);
|
||||
define('G4_MOBILE_PATH', G4_PATH.'/'.G4_MOBILE_DIR);
|
||||
@ -139,7 +131,6 @@ define('G4_SPECIAL', 64); // 특수문자
|
||||
// 모바일 인지 결정 $_SERVER['HTTP_USER_AGENT']
|
||||
define('G4_MOBILE_AGENT', 'phone|samsung|lgtel|mobile|skt|nokia|blackberry|android|sony');
|
||||
|
||||
|
||||
/********************
|
||||
기타 상수
|
||||
********************/
|
||||
|
||||
@ -998,17 +998,10 @@ function get_sideview($mb_id, $name='', $email='', $homepage='')
|
||||
if ($config['cf_use_member_icon'] == 2) // 회원아이콘+이름
|
||||
$tmp_name = $tmp_name.' '.$name;
|
||||
} else {
|
||||
<<<<<<< HEAD
|
||||
$tmp_name = $tmp_name." ".$name;
|
||||
}
|
||||
} else {
|
||||
$tmp_name = $tmp_name.' '.$name;
|
||||
=======
|
||||
$tmp_name = $tmp_name.' '.$name;
|
||||
}
|
||||
} else {
|
||||
$tmp_name = $tmp_name.' '.$name;
|
||||
>>>>>>> master
|
||||
}
|
||||
$tmp_name .= '</a>';
|
||||
|
||||
|
||||
@ -39,11 +39,12 @@ if ($user) {
|
||||
echo <<<EOT
|
||||
<script>
|
||||
$(function() {
|
||||
document.write("<strong>페이스북 승인이 되었습니다.</strong>");
|
||||
|
||||
var opener = window.opener;
|
||||
opener.$("#facebook_icon").attr("src", "{$g4_sns_url}/icon/facebook_on.png");
|
||||
opener.$("#facebook_checked").attr("disabled", false);
|
||||
opener.$("#facebook_checked").attr("checked", true);
|
||||
//alert("페이스북 승인이 되었습니다.");
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
|
||||
1
plugin/sns/twitter/.gitignore
vendored
Normal file
1
plugin/sns/twitter/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
config.php
|
||||
22
plugin/sns/twitter/LICENSE
Normal file
22
plugin/sns/twitter/LICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@poseurte.ch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
114
plugin/sns/twitter/README.md
Normal file
114
plugin/sns/twitter/README.md
Normal file
@ -0,0 +1,114 @@
|
||||
TwitterOAuth
|
||||
------------
|
||||
|
||||
PHP library for working with Twitter's OAuth API.
|
||||
|
||||
Flow Overview
|
||||
=============
|
||||
|
||||
1. Build TwitterOAuth object using client credentials.
|
||||
2. Request temporary credentials from Twitter.
|
||||
3. Build authorize URL for Twitter.
|
||||
4. Redirect user to authorize URL.
|
||||
5. User authorizes access and returns from Twitter.
|
||||
6. Rebuild TwitterOAuth object with client credentials and temporary credentials.
|
||||
7. Get token credentials from Twitter.
|
||||
8. Rebuild TwitterOAuth object with client credentials and token credentials.
|
||||
9. Query Twitter API.
|
||||
|
||||
Terminology
|
||||
===========
|
||||
|
||||
The terminology has changed since 0.1.x to better match the draft-hammer-oauth IETF
|
||||
RFC. You can read that at http://tools.ietf.org/html/draft-hammer-oauth. Some of the
|
||||
terms will differ from those Twitter uses as well.
|
||||
|
||||
client credentials - Consumer key/secret you get when registering an app with Twitter.
|
||||
temporary credentials - Previously known as the request token.
|
||||
token credentials - Previously known as the access token.
|
||||
|
||||
Parameters
|
||||
==========
|
||||
|
||||
There are a number of parameters you can modify after creating a TwitterOAuth object.
|
||||
|
||||
Switch an existing TwitterOAuth install to use version 1.1 of the API.
|
||||
|
||||
$connection->$host = "https://api.twitter.com/1.1/";
|
||||
|
||||
Custom useragent.
|
||||
|
||||
$connection->useragent = 'Custom useragent string';
|
||||
|
||||
Verify Twitters SSL certificate.
|
||||
|
||||
$connection->ssl_verifypeer = TRUE;
|
||||
|
||||
There are several more you can find in TwitterOAuth.php.
|
||||
|
||||
Extended flow using example code
|
||||
================================
|
||||
|
||||
To use TwitterOAuth with the Twitter API you need *TwitterOAuth.php*, *OAuth.php* and
|
||||
client credentials. You can get client credentials by registering your application at
|
||||
[dev.twitter.com/apps](https://dev.twitter.com/apps).
|
||||
|
||||
Users start out on connect.php which displays the "Sign in with Twitter" image hyperlinked
|
||||
to redirect.php. This button should be displayed on your homepage in your login section. The
|
||||
client credentials are saved in config.php as `CONSUMER_KEY` and `CONSUMER_SECRET`. You can
|
||||
save a static callback URL in the app settings page, in the config file or use a dynamic
|
||||
callback URL later in step 2. In example use https://example.com/callback.php.
|
||||
|
||||
1) When a user lands on redirect.php we build a new TwitterOAuth object using the client credentials.
|
||||
If you have your own configuration method feel free to use it instead of config.php.
|
||||
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); // Use config.php client credentials
|
||||
$connection = new TwitterOAuth('abc890', '123xyz');
|
||||
|
||||
2) Using the built $connection object you will ask Twitter for temporary credentials. The `oauth_callback` value is required.
|
||||
|
||||
$temporary_credentials = $connection->getRequestToken(OAUTH_CALLBACK); // Use config.php callback URL.
|
||||
|
||||
3) Now that we have temporary credentials the user has to go to Twitter and authorize the app
|
||||
to access and updates their data. You can also pass a second parameter of FALSE to not use [Sign
|
||||
in with Twitter](https://dev.twitter.com/docs/auth/sign-twitter).
|
||||
|
||||
$redirect_url = $connection->getAuthorizeURL($temporary_credentials); // Use Sign in with Twitter
|
||||
$redirect_url = $connection->getAuthorizeURL($temporary_credentials, FALSE);
|
||||
|
||||
4) You will now have a Twitter URL that you must send the user to.
|
||||
|
||||
https://api.twitter.com/oauth/authenticate?oauth_token=xyz123
|
||||
|
||||
5) The user is now on twitter.com and may have to login. Once authenticated with Twitter they will
|
||||
will either have to click on allow/deny, or will be automatically redirected back to the callback.
|
||||
|
||||
6) Now that the user has returned to callback.php and allowed access we need to build a new
|
||||
TwitterOAuth object using the temporary credentials.
|
||||
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'],
|
||||
$_SESSION['oauth_token_secret']);
|
||||
|
||||
7) Now we ask Twitter for long lasting token credentials. These are specific to the application
|
||||
and user and will act like password to make future requests. Normally the token credentials would
|
||||
get saved in your database but for this example we are just using sessions.
|
||||
|
||||
$token_credentials = $connection->getAccessToken($_REQUEST['oauth_verifier']);
|
||||
|
||||
8) With the token credentials we build a new TwitterOAuth object.
|
||||
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token_credentials['oauth_token'],
|
||||
$token_credentials['oauth_token_secret']);
|
||||
|
||||
9) And finally we can make requests authenticated as the user. You can GET, POST, and DELETE API
|
||||
methods. Directly copy the path from the API documentation and add an array of any parameter
|
||||
you wish to include for the API method such as curser or in_reply_to_status_id.
|
||||
|
||||
$account = $connection->get('account/verify_credentials');
|
||||
$status = $connection->post('statuses/update', array('status' => 'Text of status here', 'in_reply_to_status_id' => 123456));
|
||||
$status = $connection->delete('statuses/destroy/12345');
|
||||
|
||||
Contributors
|
||||
============
|
||||
|
||||
* [Abraham Williams](https://twitter.com/abraham) - Main developer, current maintainer.
|
||||
3
plugin/sns/twitter/_common.php
Normal file
3
plugin/sns/twitter/_common.php
Normal file
@ -0,0 +1,3 @@
|
||||
<?php
|
||||
include_once("../../../common.php");
|
||||
?>
|
||||
40
plugin/sns/twitter/callback-sample.php
Normal file
40
plugin/sns/twitter/callback-sample.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* @file
|
||||
* Take the user when they return from Twitter. Get access tokens.
|
||||
* Verify credentials and redirect to based on response from Twitter.
|
||||
*/
|
||||
|
||||
/* Start session and load lib */
|
||||
session_start();
|
||||
require_once('twitteroauth/twitteroauth.php');
|
||||
require_once('config.php');
|
||||
|
||||
/* If the oauth_token is old redirect to the connect page. */
|
||||
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
|
||||
$_SESSION['oauth_status'] = 'oldtoken';
|
||||
header('Location: ./clearsessions.php');
|
||||
}
|
||||
|
||||
/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
|
||||
|
||||
/* Request access tokens from twitter */
|
||||
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
|
||||
|
||||
/* Save the access tokens. Normally these would be saved in a database for future use. */
|
||||
$_SESSION['access_token'] = $access_token;
|
||||
|
||||
/* Remove no longer needed request tokens */
|
||||
unset($_SESSION['oauth_token']);
|
||||
unset($_SESSION['oauth_token_secret']);
|
||||
|
||||
/* If HTTP response is 200 continue otherwise send to connect page to retry */
|
||||
if (200 == $connection->http_code) {
|
||||
/* The user has been verified and the access tokens can be saved for future use */
|
||||
$_SESSION['status'] = 'verified';
|
||||
header('Location: ./index.php');
|
||||
} else {
|
||||
/* Save HTTP status for error dialog on connnect page.*/
|
||||
header('Location: ./clearsessions.php');
|
||||
}
|
||||
97
plugin/sns/twitter/callback.php
Normal file
97
plugin/sns/twitter/callback.php
Normal file
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Take the user when they return from Twitter. Get access tokens.
|
||||
* Verify credentials and redirect to based on response from Twitter.
|
||||
*/
|
||||
|
||||
/* Start session and load lib */
|
||||
//session_start();
|
||||
require_once(G4_SNS_PATH.'/twitter/twitteroauth/twitteroauth.php');
|
||||
require_once(G4_SNS_PATH.'/twitter/config.php');
|
||||
|
||||
//print_r2($_SESSION); print_r2($_REQUEST); exit;
|
||||
|
||||
/* If the oauth_token is old redirect to the connect page. */
|
||||
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
|
||||
$_SESSION['oauth_status'] = 'oldtoken';
|
||||
header('Location: ./clearsessions.php');
|
||||
}
|
||||
|
||||
/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
|
||||
|
||||
/* Request access tokens from twitter */
|
||||
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
|
||||
|
||||
/* Save the access tokens. Normally these would be saved in a database for future use. */
|
||||
$_SESSION['access_token'] = $access_token;
|
||||
|
||||
/* Remove no longer needed request tokens */
|
||||
unset($_SESSION['oauth_token']);
|
||||
unset($_SESSION['oauth_token_secret']);
|
||||
|
||||
/*
|
||||
if (200 == $connection->http_code) {
|
||||
$_SESSION['status'] = 'verified';
|
||||
header('Location: ./index.php');
|
||||
} else {
|
||||
header('Location: ./clearsessions.php');
|
||||
}
|
||||
exit;
|
||||
*/
|
||||
|
||||
$g4['title'] = '트위터 콜백';
|
||||
include_once(G4_PATH.'/head.sub.php');
|
||||
|
||||
if (200 == $connection->http_code) {
|
||||
|
||||
/*
|
||||
$access_token = $facebook->getAccessToken();
|
||||
|
||||
$appid = $config['cf_facebook_appid'];
|
||||
|
||||
setcookie('fbs_'.$appid, 1, G4_SERVER_TIME + 86400 * 31, '/', G4_COOKIE_DOMAIN);
|
||||
setcookie('fbs_'.$appid.'_code', $_SESSION['fb_'.$appid.'_code'], G4_SERVER_TIME + 86400 * 31, '/', G4_COOKIE_DOMAIN);
|
||||
setcookie('fbs_'.$appid.'_access_token', $_SESSION['fb_'.$appid.'_access_token'], G4_SERVER_TIME + 86400 * 31, '/', G4_COOKIE_DOMAIN);
|
||||
setcookie('fbs_'.$appid.'_user_id', $_SESSION['fb_'.$appid.'_user_id'], G4_SERVER_TIME + 86400 * 31, '/', G4_COOKIE_DOMAIN);
|
||||
|
||||
sql_query(" update {$g4['member_table']} set mb_facebook_token = '{$access_token}' where mb_id = '{$member['mb_id']}' ", true);
|
||||
|
||||
*/
|
||||
|
||||
sql_query(" update {$g4['member_table']} set mb_twitter_token = '{$access_token['oauth_token']}', mb_twitter_token_secret = '{$access_token['oauth_token_secret']}' where mb_id = '{$member['mb_id']}' ", true);
|
||||
|
||||
$g4_sns_url = G4_SNS_URL;
|
||||
|
||||
echo <<<EOT
|
||||
<script>
|
||||
$(function() {
|
||||
document.write("<strong>트위터에 승인이 되었습니다.</strong>");
|
||||
|
||||
var opener = window.opener;
|
||||
opener.$("#twitter_icon").attr("src", "{$g4_sns_url}/icon/twitter_on.png");
|
||||
opener.$("#twitter_checked").attr("disabled", false);
|
||||
opener.$("#twitter_checked").attr("checked", true);
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
EOT;
|
||||
|
||||
} else {
|
||||
|
||||
echo <<<EOT
|
||||
<script>
|
||||
$(function() {
|
||||
alert("트위터에 승인이 되지 않았습니다.");
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
EOT;
|
||||
|
||||
}
|
||||
|
||||
include_once(G4_PATH.'/tail.sub.php');
|
||||
?>
|
||||
14
plugin/sns/twitter/clearsessions.php
Normal file
14
plugin/sns/twitter/clearsessions.php
Normal file
@ -0,0 +1,14 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Clears PHP sessions and redirects to the connect page.
|
||||
*/
|
||||
|
||||
/* Load and clear sessions */
|
||||
session_start();
|
||||
session_destroy();
|
||||
|
||||
/* Redirect to page with the connect to Twitter option. */
|
||||
header('Location: ./connect.php');
|
||||
10
plugin/sns/twitter/config-sample.php
Normal file
10
plugin/sns/twitter/config-sample.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* A single location to store configuration.
|
||||
*/
|
||||
|
||||
define('CONSUMER_KEY', 'CONSUMER_KEY_HERE');
|
||||
define('CONSUMER_SECRET', 'CONSUMER_SECRET_HERE');
|
||||
define('OAUTH_CALLBACK', 'http://example.com/twitteroauth/callback.php');
|
||||
22
plugin/sns/twitter/connect.php
Normal file
22
plugin/sns/twitter/connect.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Check if consumer token is set and if so send user to get a request token.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Exit with an error message if the CONSUMER_KEY or CONSUMER_SECRET is not defined.
|
||||
*/
|
||||
require_once(G4_SNS_PATH.'/twitter/config.php');
|
||||
if (CONSUMER_KEY === '' || CONSUMER_SECRET === '' || CONSUMER_KEY === 'CONSUMER_KEY_HERE' || CONSUMER_SECRET === 'CONSUMER_SECRET_HERE') {
|
||||
echo 'You need a consumer key and secret to test the sample code. Get one from <a href="https://dev.twitter.com/apps">dev.twitter.com/apps</a>';
|
||||
exit;
|
||||
}
|
||||
|
||||
/* Build an image link to start the redirect process. */
|
||||
$content = '<a href="./redirect.php"><img src="./images/lighter.png" alt="Sign in with Twitter"/></a>';
|
||||
|
||||
/* Include HTML to display on the page. */
|
||||
include('html.inc');
|
||||
39
plugin/sns/twitter/html.inc
Normal file
39
plugin/sns/twitter/html.inc
Normal file
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title>Twitter OAuth in PHP</title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<style type="text/css">
|
||||
img {border-width: 0}
|
||||
* {font-family:'Lucida Grande', sans-serif;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<h2>Welcome to a Twitter OAuth PHP example.</h2>
|
||||
|
||||
<p>This site is a basic showcase of Twitters OAuth authentication method. If you are having issues try <a href='./clearsessions.php'>clearing your session</a>.</p>
|
||||
|
||||
<p>
|
||||
Links:
|
||||
<a href='http://github.com/abraham/twitteroauth'>Source Code</a> &
|
||||
<a href='http://wiki.github.com/abraham/twitteroauth/documentation'>Documentation</a> |
|
||||
Contact @<a href='http://twitter.com/abraham'>abraham</a>
|
||||
</p>
|
||||
<hr />
|
||||
<?php if (isset($menu)) { ?>
|
||||
<?php echo $menu; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php if (isset($status_text)) { ?>
|
||||
<?php echo '<h3>'.$status_text.'</h3>'; ?>
|
||||
<?php } ?>
|
||||
<p>
|
||||
<pre>
|
||||
<?php print_r($content); ?>
|
||||
</pre>
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
BIN
plugin/sns/twitter/images/darker.png
Normal file
BIN
plugin/sns/twitter/images/darker.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
BIN
plugin/sns/twitter/images/lighter.png
Normal file
BIN
plugin/sns/twitter/images/lighter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
35
plugin/sns/twitter/index.php
Normal file
35
plugin/sns/twitter/index.php
Normal file
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
/**
|
||||
* @file
|
||||
* User has successfully authenticated with Twitter. Access tokens saved to session and DB.
|
||||
*/
|
||||
|
||||
/* Load required lib files. */
|
||||
//session_start();
|
||||
require_once(G4_SNS_PATH.'/twitter/twitteroauth/twitteroauth.php');
|
||||
require_once(G4_SNS_PATH.'/twitter/config.php');
|
||||
|
||||
/* If access tokens are not available redirect to connect page. */
|
||||
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret'])) {
|
||||
header('Location: ./clearsessions.php');
|
||||
}
|
||||
/* Get user access tokens out of the session. */
|
||||
$access_token = $_SESSION['access_token'];
|
||||
|
||||
/* Create a TwitterOauth object with consumer/user tokens. */
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
|
||||
|
||||
/* If method is set change API call made. Test is called by default. */
|
||||
$content = $connection->get('account/verify_credentials');
|
||||
|
||||
/* Some example calls */
|
||||
//$connection->get('users/show', array('screen_name' => 'abraham'));
|
||||
//$connection->post('statuses/update', array('status' => date(DATE_RFC822)));
|
||||
//$connection->post('statuses/destroy', array('id' => 5437877770));
|
||||
//$connection->post('friendships/create', array('id' => 9436992));
|
||||
//$connection->post('friendships/destroy', array('id' => 9436992));
|
||||
|
||||
/* Include HTML to display on the page */
|
||||
include('html.inc');
|
||||
31
plugin/sns/twitter/redirect.php
Normal file
31
plugin/sns/twitter/redirect.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
include_once("./_common.php");
|
||||
|
||||
/* Start session and load library. */
|
||||
//session_start();
|
||||
require_once(G4_SNS_PATH.'/twitter/twitteroauth/twitteroauth.php');
|
||||
require_once(G4_SNS_PATH.'/twitter/config.php');
|
||||
|
||||
/* Build TwitterOAuth object with client credentials. */
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
|
||||
|
||||
/* Get temporary credentials. */
|
||||
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);
|
||||
|
||||
/* Save temporary credentials to session. */
|
||||
$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
|
||||
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
|
||||
|
||||
//print_r2($_SESSION); exit;
|
||||
|
||||
/* If last connection failed don't display authorization link. */
|
||||
switch ($connection->http_code) {
|
||||
case 200:
|
||||
/* Build authorize URL and redirect user to Twitter. */
|
||||
$url = $connection->getAuthorizeURL($token);
|
||||
header('Location: ' . $url);
|
||||
break;
|
||||
default:
|
||||
/* Show notification if something went wrong. */
|
||||
echo 'Could not connect to Twitter. Refresh the page or try again later.';
|
||||
}
|
||||
872
plugin/sns/twitter/twitteroauth/OAuth.php
Normal file
872
plugin/sns/twitter/twitteroauth/OAuth.php
Normal file
@ -0,0 +1,872 @@
|
||||
<?php
|
||||
// vim: foldmethod=marker
|
||||
|
||||
/* Generic exception class
|
||||
*/
|
||||
class OAuthException extends Exception {
|
||||
// pass
|
||||
}
|
||||
|
||||
class OAuthConsumer {
|
||||
public $key;
|
||||
public $secret;
|
||||
|
||||
function __construct($key, $secret, $callback_url=NULL) {
|
||||
$this->key = $key;
|
||||
$this->secret = $secret;
|
||||
$this->callback_url = $callback_url;
|
||||
}
|
||||
|
||||
function __toString() {
|
||||
return "OAuthConsumer[key=$this->key,secret=$this->secret]";
|
||||
}
|
||||
}
|
||||
|
||||
class OAuthToken {
|
||||
// access tokens and request tokens
|
||||
public $key;
|
||||
public $secret;
|
||||
|
||||
/**
|
||||
* key = the token
|
||||
* secret = the token secret
|
||||
*/
|
||||
function __construct($key, $secret) {
|
||||
$this->key = $key;
|
||||
$this->secret = $secret;
|
||||
}
|
||||
|
||||
/**
|
||||
* generates the basic string serialization of a token that a server
|
||||
* would respond to request_token and access_token calls with
|
||||
*/
|
||||
function to_string() {
|
||||
return "oauth_token=" .
|
||||
OAuthUtil::urlencode_rfc3986($this->key) .
|
||||
"&oauth_token_secret=" .
|
||||
OAuthUtil::urlencode_rfc3986($this->secret);
|
||||
}
|
||||
|
||||
function __toString() {
|
||||
return $this->to_string();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A class for implementing a Signature Method
|
||||
* See section 9 ("Signing Requests") in the spec
|
||||
*/
|
||||
abstract class OAuthSignatureMethod {
|
||||
/**
|
||||
* Needs to return the name of the Signature Method (ie HMAC-SHA1)
|
||||
* @return string
|
||||
*/
|
||||
abstract public function get_name();
|
||||
|
||||
/**
|
||||
* Build up the signature
|
||||
* NOTE: The output of this function MUST NOT be urlencoded.
|
||||
* the encoding is handled in OAuthRequest when the final
|
||||
* request is serialized
|
||||
* @param OAuthRequest $request
|
||||
* @param OAuthConsumer $consumer
|
||||
* @param OAuthToken $token
|
||||
* @return string
|
||||
*/
|
||||
abstract public function build_signature($request, $consumer, $token);
|
||||
|
||||
/**
|
||||
* Verifies that a given signature is correct
|
||||
* @param OAuthRequest $request
|
||||
* @param OAuthConsumer $consumer
|
||||
* @param OAuthToken $token
|
||||
* @param string $signature
|
||||
* @return bool
|
||||
*/
|
||||
public function check_signature($request, $consumer, $token, $signature) {
|
||||
$built = $this->build_signature($request, $consumer, $token);
|
||||
return $built == $signature;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
|
||||
* where the Signature Base String is the text and the key is the concatenated values (each first
|
||||
* encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
|
||||
* character (ASCII code 38) even if empty.
|
||||
* - Chapter 9.2 ("HMAC-SHA1")
|
||||
*/
|
||||
class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
|
||||
function get_name() {
|
||||
return "HMAC-SHA1";
|
||||
}
|
||||
|
||||
public function build_signature($request, $consumer, $token) {
|
||||
$base_string = $request->get_signature_base_string();
|
||||
$request->base_string = $base_string;
|
||||
|
||||
$key_parts = array(
|
||||
$consumer->secret,
|
||||
($token) ? $token->secret : ""
|
||||
);
|
||||
|
||||
$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
|
||||
$key = implode('&', $key_parts);
|
||||
|
||||
return base64_encode(hash_hmac('sha1', $base_string, $key, true));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The PLAINTEXT method does not provide any security protection and SHOULD only be used
|
||||
* over a secure channel such as HTTPS. It does not use the Signature Base String.
|
||||
* - Chapter 9.4 ("PLAINTEXT")
|
||||
*/
|
||||
class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
|
||||
public function get_name() {
|
||||
return "PLAINTEXT";
|
||||
}
|
||||
|
||||
/**
|
||||
* oauth_signature is set to the concatenated encoded values of the Consumer Secret and
|
||||
* Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
|
||||
* empty. The result MUST be encoded again.
|
||||
* - Chapter 9.4.1 ("Generating Signatures")
|
||||
*
|
||||
* Please note that the second encoding MUST NOT happen in the SignatureMethod, as
|
||||
* OAuthRequest handles this!
|
||||
*/
|
||||
public function build_signature($request, $consumer, $token) {
|
||||
$key_parts = array(
|
||||
$consumer->secret,
|
||||
($token) ? $token->secret : ""
|
||||
);
|
||||
|
||||
$key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
|
||||
$key = implode('&', $key_parts);
|
||||
$request->base_string = $key;
|
||||
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
|
||||
* [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
|
||||
* EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
|
||||
* verified way to the Service Provider, in a manner which is beyond the scope of this
|
||||
* specification.
|
||||
* - Chapter 9.3 ("RSA-SHA1")
|
||||
*/
|
||||
abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
|
||||
public function get_name() {
|
||||
return "RSA-SHA1";
|
||||
}
|
||||
|
||||
// Up to the SP to implement this lookup of keys. Possible ideas are:
|
||||
// (1) do a lookup in a table of trusted certs keyed off of consumer
|
||||
// (2) fetch via http using a url provided by the requester
|
||||
// (3) some sort of specific discovery code based on request
|
||||
//
|
||||
// Either way should return a string representation of the certificate
|
||||
protected abstract function fetch_public_cert(&$request);
|
||||
|
||||
// Up to the SP to implement this lookup of keys. Possible ideas are:
|
||||
// (1) do a lookup in a table of trusted certs keyed off of consumer
|
||||
//
|
||||
// Either way should return a string representation of the certificate
|
||||
protected abstract function fetch_private_cert(&$request);
|
||||
|
||||
public function build_signature($request, $consumer, $token) {
|
||||
$base_string = $request->get_signature_base_string();
|
||||
$request->base_string = $base_string;
|
||||
|
||||
// Fetch the private key cert based on the request
|
||||
$cert = $this->fetch_private_cert($request);
|
||||
|
||||
// Pull the private key ID from the certificate
|
||||
$privatekeyid = openssl_get_privatekey($cert);
|
||||
|
||||
// Sign using the key
|
||||
$ok = openssl_sign($base_string, $signature, $privatekeyid);
|
||||
|
||||
// Release the key resource
|
||||
openssl_free_key($privatekeyid);
|
||||
|
||||
return base64_encode($signature);
|
||||
}
|
||||
|
||||
public function check_signature($request, $consumer, $token, $signature) {
|
||||
$decoded_sig = base64_decode($signature);
|
||||
|
||||
$base_string = $request->get_signature_base_string();
|
||||
|
||||
// Fetch the public key cert based on the request
|
||||
$cert = $this->fetch_public_cert($request);
|
||||
|
||||
// Pull the public key ID from the certificate
|
||||
$publickeyid = openssl_get_publickey($cert);
|
||||
|
||||
// Check the computed signature against the one passed in the query
|
||||
$ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
|
||||
|
||||
// Release the key resource
|
||||
openssl_free_key($publickeyid);
|
||||
|
||||
return $ok == 1;
|
||||
}
|
||||
}
|
||||
|
||||
class OAuthRequest {
|
||||
private $parameters;
|
||||
private $http_method;
|
||||
private $http_url;
|
||||
// for debug purposes
|
||||
public $base_string;
|
||||
public static $version = '1.0';
|
||||
public static $POST_INPUT = 'php://input';
|
||||
|
||||
function __construct($http_method, $http_url, $parameters=NULL) {
|
||||
@$parameters or $parameters = array();
|
||||
$parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
|
||||
$this->parameters = $parameters;
|
||||
$this->http_method = $http_method;
|
||||
$this->http_url = $http_url;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* attempt to build up a request from what was passed to the server
|
||||
*/
|
||||
public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
|
||||
$scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
|
||||
? 'http'
|
||||
: 'https';
|
||||
@$http_url or $http_url = $scheme .
|
||||
'://' . $_SERVER['HTTP_HOST'] .
|
||||
':' .
|
||||
$_SERVER['SERVER_PORT'] .
|
||||
$_SERVER['REQUEST_URI'];
|
||||
@$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
|
||||
|
||||
// We weren't handed any parameters, so let's find the ones relevant to
|
||||
// this request.
|
||||
// If you run XML-RPC or similar you should use this to provide your own
|
||||
// parsed parameter-list
|
||||
if (!$parameters) {
|
||||
// Find request headers
|
||||
$request_headers = OAuthUtil::get_headers();
|
||||
|
||||
// Parse the query-string to find GET parameters
|
||||
$parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
|
||||
|
||||
// It's a POST request of the proper content-type, so parse POST
|
||||
// parameters and add those overriding any duplicates from GET
|
||||
if ($http_method == "POST"
|
||||
&& @strstr($request_headers["Content-Type"],
|
||||
"application/x-www-form-urlencoded")
|
||||
) {
|
||||
$post_data = OAuthUtil::parse_parameters(
|
||||
file_get_contents(self::$POST_INPUT)
|
||||
);
|
||||
$parameters = array_merge($parameters, $post_data);
|
||||
}
|
||||
|
||||
// We have a Authorization-header with OAuth data. Parse the header
|
||||
// and add those overriding any duplicates from GET or POST
|
||||
if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
|
||||
$header_parameters = OAuthUtil::split_header(
|
||||
$request_headers['Authorization']
|
||||
);
|
||||
$parameters = array_merge($parameters, $header_parameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new OAuthRequest($http_method, $http_url, $parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* pretty much a helper function to set up the request
|
||||
*/
|
||||
public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
|
||||
@$parameters or $parameters = array();
|
||||
$defaults = array("oauth_version" => OAuthRequest::$version,
|
||||
"oauth_nonce" => OAuthRequest::generate_nonce(),
|
||||
"oauth_timestamp" => OAuthRequest::generate_timestamp(),
|
||||
"oauth_consumer_key" => $consumer->key);
|
||||
if ($token)
|
||||
$defaults['oauth_token'] = $token->key;
|
||||
|
||||
$parameters = array_merge($defaults, $parameters);
|
||||
|
||||
return new OAuthRequest($http_method, $http_url, $parameters);
|
||||
}
|
||||
|
||||
public function set_parameter($name, $value, $allow_duplicates = true) {
|
||||
if ($allow_duplicates && isset($this->parameters[$name])) {
|
||||
// We have already added parameter(s) with this name, so add to the list
|
||||
if (is_scalar($this->parameters[$name])) {
|
||||
// This is the first duplicate, so transform scalar (string)
|
||||
// into an array so we can add the duplicates
|
||||
$this->parameters[$name] = array($this->parameters[$name]);
|
||||
}
|
||||
|
||||
$this->parameters[$name][] = $value;
|
||||
} else {
|
||||
$this->parameters[$name] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
public function get_parameter($name) {
|
||||
return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
|
||||
}
|
||||
|
||||
public function get_parameters() {
|
||||
return $this->parameters;
|
||||
}
|
||||
|
||||
public function unset_parameter($name) {
|
||||
unset($this->parameters[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* The request parameters, sorted and concatenated into a normalized string.
|
||||
* @return string
|
||||
*/
|
||||
public function get_signable_parameters() {
|
||||
// Grab all parameters
|
||||
$params = $this->parameters;
|
||||
|
||||
// Remove oauth_signature if present
|
||||
// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
|
||||
if (isset($params['oauth_signature'])) {
|
||||
unset($params['oauth_signature']);
|
||||
}
|
||||
|
||||
return OAuthUtil::build_http_query($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base string of this request
|
||||
*
|
||||
* The base string defined as the method, the url
|
||||
* and the parameters (normalized), each urlencoded
|
||||
* and the concated with &.
|
||||
*/
|
||||
public function get_signature_base_string() {
|
||||
$parts = array(
|
||||
$this->get_normalized_http_method(),
|
||||
$this->get_normalized_http_url(),
|
||||
$this->get_signable_parameters()
|
||||
);
|
||||
|
||||
$parts = OAuthUtil::urlencode_rfc3986($parts);
|
||||
|
||||
return implode('&', $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* just uppercases the http method
|
||||
*/
|
||||
public function get_normalized_http_method() {
|
||||
return strtoupper($this->http_method);
|
||||
}
|
||||
|
||||
/**
|
||||
* parses the url and rebuilds it to be
|
||||
* scheme://host/path
|
||||
*/
|
||||
public function get_normalized_http_url() {
|
||||
$parts = parse_url($this->http_url);
|
||||
|
||||
$port = @$parts['port'];
|
||||
$scheme = $parts['scheme'];
|
||||
$host = $parts['host'];
|
||||
$path = @$parts['path'];
|
||||
|
||||
$port or $port = ($scheme == 'https') ? '443' : '80';
|
||||
|
||||
if (($scheme == 'https' && $port != '443')
|
||||
|| ($scheme == 'http' && $port != '80')) {
|
||||
$host = "$host:$port";
|
||||
}
|
||||
return "$scheme://$host$path";
|
||||
}
|
||||
|
||||
/**
|
||||
* builds a url usable for a GET request
|
||||
*/
|
||||
public function to_url() {
|
||||
$post_data = $this->to_postdata();
|
||||
$out = $this->get_normalized_http_url();
|
||||
if ($post_data) {
|
||||
$out .= '?'.$post_data;
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* builds the data one would send in a POST request
|
||||
*/
|
||||
public function to_postdata() {
|
||||
return OAuthUtil::build_http_query($this->parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* builds the Authorization: header
|
||||
*/
|
||||
public function to_header($realm=null) {
|
||||
$first = true;
|
||||
if($realm) {
|
||||
$out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
|
||||
$first = false;
|
||||
} else
|
||||
$out = 'Authorization: OAuth';
|
||||
|
||||
$total = array();
|
||||
foreach ($this->parameters as $k => $v) {
|
||||
if (substr($k, 0, 5) != "oauth") continue;
|
||||
if (is_array($v)) {
|
||||
throw new OAuthException('Arrays not supported in headers');
|
||||
}
|
||||
$out .= ($first) ? ' ' : ',';
|
||||
$out .= OAuthUtil::urlencode_rfc3986($k) .
|
||||
'="' .
|
||||
OAuthUtil::urlencode_rfc3986($v) .
|
||||
'"';
|
||||
$first = false;
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
public function __toString() {
|
||||
return $this->to_url();
|
||||
}
|
||||
|
||||
|
||||
public function sign_request($signature_method, $consumer, $token) {
|
||||
$this->set_parameter(
|
||||
"oauth_signature_method",
|
||||
$signature_method->get_name(),
|
||||
false
|
||||
);
|
||||
$signature = $this->build_signature($signature_method, $consumer, $token);
|
||||
$this->set_parameter("oauth_signature", $signature, false);
|
||||
}
|
||||
|
||||
public function build_signature($signature_method, $consumer, $token) {
|
||||
$signature = $signature_method->build_signature($this, $consumer, $token);
|
||||
return $signature;
|
||||
}
|
||||
|
||||
/**
|
||||
* util function: current timestamp
|
||||
*/
|
||||
private static function generate_timestamp() {
|
||||
return time();
|
||||
}
|
||||
|
||||
/**
|
||||
* util function: current nonce
|
||||
*/
|
||||
private static function generate_nonce() {
|
||||
$mt = microtime();
|
||||
$rand = mt_rand();
|
||||
|
||||
return md5($mt . $rand); // md5s look nicer than numbers
|
||||
}
|
||||
}
|
||||
|
||||
class OAuthServer {
|
||||
protected $timestamp_threshold = 300; // in seconds, five minutes
|
||||
protected $version = '1.0'; // hi blaine
|
||||
protected $signature_methods = array();
|
||||
|
||||
protected $data_store;
|
||||
|
||||
function __construct($data_store) {
|
||||
$this->data_store = $data_store;
|
||||
}
|
||||
|
||||
public function add_signature_method($signature_method) {
|
||||
$this->signature_methods[$signature_method->get_name()] =
|
||||
$signature_method;
|
||||
}
|
||||
|
||||
// high level functions
|
||||
|
||||
/**
|
||||
* process a request_token request
|
||||
* returns the request token on success
|
||||
*/
|
||||
public function fetch_request_token(&$request) {
|
||||
$this->get_version($request);
|
||||
|
||||
$consumer = $this->get_consumer($request);
|
||||
|
||||
// no token required for the initial token request
|
||||
$token = NULL;
|
||||
|
||||
$this->check_signature($request, $consumer, $token);
|
||||
|
||||
// Rev A change
|
||||
$callback = $request->get_parameter('oauth_callback');
|
||||
$new_token = $this->data_store->new_request_token($consumer, $callback);
|
||||
|
||||
return $new_token;
|
||||
}
|
||||
|
||||
/**
|
||||
* process an access_token request
|
||||
* returns the access token on success
|
||||
*/
|
||||
public function fetch_access_token(&$request) {
|
||||
$this->get_version($request);
|
||||
|
||||
$consumer = $this->get_consumer($request);
|
||||
|
||||
// requires authorized request token
|
||||
$token = $this->get_token($request, $consumer, "request");
|
||||
|
||||
$this->check_signature($request, $consumer, $token);
|
||||
|
||||
// Rev A change
|
||||
$verifier = $request->get_parameter('oauth_verifier');
|
||||
$new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
|
||||
|
||||
return $new_token;
|
||||
}
|
||||
|
||||
/**
|
||||
* verify an api call, checks all the parameters
|
||||
*/
|
||||
public function verify_request(&$request) {
|
||||
$this->get_version($request);
|
||||
$consumer = $this->get_consumer($request);
|
||||
$token = $this->get_token($request, $consumer, "access");
|
||||
$this->check_signature($request, $consumer, $token);
|
||||
return array($consumer, $token);
|
||||
}
|
||||
|
||||
// Internals from here
|
||||
/**
|
||||
* version 1
|
||||
*/
|
||||
private function get_version(&$request) {
|
||||
$version = $request->get_parameter("oauth_version");
|
||||
if (!$version) {
|
||||
// Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
|
||||
// Chapter 7.0 ("Accessing Protected Ressources")
|
||||
$version = '1.0';
|
||||
}
|
||||
if ($version !== $this->version) {
|
||||
throw new OAuthException("OAuth version '$version' not supported");
|
||||
}
|
||||
return $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* figure out the signature with some defaults
|
||||
*/
|
||||
private function get_signature_method(&$request) {
|
||||
$signature_method =
|
||||
@$request->get_parameter("oauth_signature_method");
|
||||
|
||||
if (!$signature_method) {
|
||||
// According to chapter 7 ("Accessing Protected Ressources") the signature-method
|
||||
// parameter is required, and we can't just fallback to PLAINTEXT
|
||||
throw new OAuthException('No signature method parameter. This parameter is required');
|
||||
}
|
||||
|
||||
if (!in_array($signature_method,
|
||||
array_keys($this->signature_methods))) {
|
||||
throw new OAuthException(
|
||||
"Signature method '$signature_method' not supported " .
|
||||
"try one of the following: " .
|
||||
implode(", ", array_keys($this->signature_methods))
|
||||
);
|
||||
}
|
||||
return $this->signature_methods[$signature_method];
|
||||
}
|
||||
|
||||
/**
|
||||
* try to find the consumer for the provided request's consumer key
|
||||
*/
|
||||
private function get_consumer(&$request) {
|
||||
$consumer_key = @$request->get_parameter("oauth_consumer_key");
|
||||
if (!$consumer_key) {
|
||||
throw new OAuthException("Invalid consumer key");
|
||||
}
|
||||
|
||||
$consumer = $this->data_store->lookup_consumer($consumer_key);
|
||||
if (!$consumer) {
|
||||
throw new OAuthException("Invalid consumer");
|
||||
}
|
||||
|
||||
return $consumer;
|
||||
}
|
||||
|
||||
/**
|
||||
* try to find the token for the provided request's token key
|
||||
*/
|
||||
private function get_token(&$request, $consumer, $token_type="access") {
|
||||
$token_field = @$request->get_parameter('oauth_token');
|
||||
$token = $this->data_store->lookup_token(
|
||||
$consumer, $token_type, $token_field
|
||||
);
|
||||
if (!$token) {
|
||||
throw new OAuthException("Invalid $token_type token: $token_field");
|
||||
}
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* all-in-one function to check the signature on a request
|
||||
* should guess the signature method appropriately
|
||||
*/
|
||||
private function check_signature(&$request, $consumer, $token) {
|
||||
// this should probably be in a different method
|
||||
$timestamp = @$request->get_parameter('oauth_timestamp');
|
||||
$nonce = @$request->get_parameter('oauth_nonce');
|
||||
|
||||
$this->check_timestamp($timestamp);
|
||||
$this->check_nonce($consumer, $token, $nonce, $timestamp);
|
||||
|
||||
$signature_method = $this->get_signature_method($request);
|
||||
|
||||
$signature = $request->get_parameter('oauth_signature');
|
||||
$valid_sig = $signature_method->check_signature(
|
||||
$request,
|
||||
$consumer,
|
||||
$token,
|
||||
$signature
|
||||
);
|
||||
|
||||
if (!$valid_sig) {
|
||||
throw new OAuthException("Invalid signature");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check that the timestamp is new enough
|
||||
*/
|
||||
private function check_timestamp($timestamp) {
|
||||
if( ! $timestamp )
|
||||
throw new OAuthException(
|
||||
'Missing timestamp parameter. The parameter is required'
|
||||
);
|
||||
|
||||
// verify that timestamp is recentish
|
||||
$now = time();
|
||||
if (abs($now - $timestamp) > $this->timestamp_threshold) {
|
||||
throw new OAuthException(
|
||||
"Expired timestamp, yours $timestamp, ours $now"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check that the nonce is not repeated
|
||||
*/
|
||||
private function check_nonce($consumer, $token, $nonce, $timestamp) {
|
||||
if( ! $nonce )
|
||||
throw new OAuthException(
|
||||
'Missing nonce parameter. The parameter is required'
|
||||
);
|
||||
|
||||
// verify that the nonce is uniqueish
|
||||
$found = $this->data_store->lookup_nonce(
|
||||
$consumer,
|
||||
$token,
|
||||
$nonce,
|
||||
$timestamp
|
||||
);
|
||||
if ($found) {
|
||||
throw new OAuthException("Nonce already used: $nonce");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class OAuthDataStore {
|
||||
function lookup_consumer($consumer_key) {
|
||||
// implement me
|
||||
}
|
||||
|
||||
function lookup_token($consumer, $token_type, $token) {
|
||||
// implement me
|
||||
}
|
||||
|
||||
function lookup_nonce($consumer, $token, $nonce, $timestamp) {
|
||||
// implement me
|
||||
}
|
||||
|
||||
function new_request_token($consumer, $callback = null) {
|
||||
// return a new token attached to this consumer
|
||||
}
|
||||
|
||||
function new_access_token($token, $consumer, $verifier = null) {
|
||||
// return a new access token attached to this consumer
|
||||
// for the user associated with this token if the request token
|
||||
// is authorized
|
||||
// should also invalidate the request token
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class OAuthUtil {
|
||||
public static function urlencode_rfc3986($input) {
|
||||
if (is_array($input)) {
|
||||
return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
|
||||
} else if (is_scalar($input)) {
|
||||
return str_replace(
|
||||
'+',
|
||||
' ',
|
||||
str_replace('%7E', '~', rawurlencode($input))
|
||||
);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// This decode function isn't taking into consideration the above
|
||||
// modifications to the encoding process. However, this method doesn't
|
||||
// seem to be used anywhere so leaving it as is.
|
||||
public static function urldecode_rfc3986($string) {
|
||||
return urldecode($string);
|
||||
}
|
||||
|
||||
// Utility function for turning the Authorization: header into
|
||||
// parameters, has to do some unescaping
|
||||
// Can filter out any non-oauth parameters if needed (default behaviour)
|
||||
public static function split_header($header, $only_allow_oauth_parameters = true) {
|
||||
$pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
|
||||
$offset = 0;
|
||||
$params = array();
|
||||
while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
|
||||
$match = $matches[0];
|
||||
$header_name = $matches[2][0];
|
||||
$header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
|
||||
if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
|
||||
$params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
|
||||
}
|
||||
$offset = $match[1] + strlen($match[0]);
|
||||
}
|
||||
|
||||
if (isset($params['realm'])) {
|
||||
unset($params['realm']);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
// helper to try to sort out headers for people who aren't running apache
|
||||
public static function get_headers() {
|
||||
if (function_exists('apache_request_headers')) {
|
||||
// we need this to get the actual Authorization: header
|
||||
// because apache tends to tell us it doesn't exist
|
||||
$headers = apache_request_headers();
|
||||
|
||||
// sanitize the output of apache_request_headers because
|
||||
// we always want the keys to be Cased-Like-This and arh()
|
||||
// returns the headers in the same case as they are in the
|
||||
// request
|
||||
$out = array();
|
||||
foreach( $headers AS $key => $value ) {
|
||||
$key = str_replace(
|
||||
" ",
|
||||
"-",
|
||||
ucwords(strtolower(str_replace("-", " ", $key)))
|
||||
);
|
||||
$out[$key] = $value;
|
||||
}
|
||||
} else {
|
||||
// otherwise we don't have apache and are just going to have to hope
|
||||
// that $_SERVER actually contains what we need
|
||||
$out = array();
|
||||
if( isset($_SERVER['CONTENT_TYPE']) )
|
||||
$out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
|
||||
if( isset($_ENV['CONTENT_TYPE']) )
|
||||
$out['Content-Type'] = $_ENV['CONTENT_TYPE'];
|
||||
|
||||
foreach ($_SERVER as $key => $value) {
|
||||
if (substr($key, 0, 5) == "HTTP_") {
|
||||
// this is chaos, basically it is just there to capitalize the first
|
||||
// letter of every word that is not an initial HTTP and strip HTTP
|
||||
// code from przemek
|
||||
$key = str_replace(
|
||||
" ",
|
||||
"-",
|
||||
ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
|
||||
);
|
||||
$out[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
// This function takes a input like a=b&a=c&d=e and returns the parsed
|
||||
// parameters like this
|
||||
// array('a' => array('b','c'), 'd' => 'e')
|
||||
public static function parse_parameters( $input ) {
|
||||
if (!isset($input) || !$input) return array();
|
||||
|
||||
$pairs = explode('&', $input);
|
||||
|
||||
$parsed_parameters = array();
|
||||
foreach ($pairs as $pair) {
|
||||
$split = explode('=', $pair, 2);
|
||||
$parameter = OAuthUtil::urldecode_rfc3986($split[0]);
|
||||
$value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
|
||||
|
||||
if (isset($parsed_parameters[$parameter])) {
|
||||
// We have already recieved parameter(s) with this name, so add to the list
|
||||
// of parameters with this name
|
||||
|
||||
if (is_scalar($parsed_parameters[$parameter])) {
|
||||
// This is the first duplicate, so transform scalar (string) into an array
|
||||
// so we can add the duplicates
|
||||
$parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
|
||||
}
|
||||
|
||||
$parsed_parameters[$parameter][] = $value;
|
||||
} else {
|
||||
$parsed_parameters[$parameter] = $value;
|
||||
}
|
||||
}
|
||||
return $parsed_parameters;
|
||||
}
|
||||
|
||||
public static function build_http_query($params) {
|
||||
if (!$params) return '';
|
||||
|
||||
// Urlencode both keys and values
|
||||
$keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
|
||||
$values = OAuthUtil::urlencode_rfc3986(array_values($params));
|
||||
$params = array_combine($keys, $values);
|
||||
|
||||
// Parameters are sorted by name, using lexicographical byte value ordering.
|
||||
// Ref: Spec: 9.1.1 (1)
|
||||
uksort($params, 'strcmp');
|
||||
|
||||
$pairs = array();
|
||||
foreach ($params as $parameter => $value) {
|
||||
if (is_array($value)) {
|
||||
// If two or more parameters share the same name, they are sorted by their value
|
||||
// Ref: Spec: 9.1.1 (1)
|
||||
natsort($value);
|
||||
foreach ($value as $duplicate_value) {
|
||||
$pairs[] = $parameter . '=' . $duplicate_value;
|
||||
}
|
||||
} else {
|
||||
$pairs[] = $parameter . '=' . $value;
|
||||
}
|
||||
}
|
||||
// For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
|
||||
// Each name-value pair is separated by an '&' character (ASCII code 38)
|
||||
return implode('&', $pairs);
|
||||
}
|
||||
}
|
||||
241
plugin/sns/twitter/twitteroauth/twitteroauth.php
Normal file
241
plugin/sns/twitter/twitteroauth/twitteroauth.php
Normal file
@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Abraham Williams (abraham@abrah.am) http://abrah.am
|
||||
*
|
||||
* The first PHP Library to support OAuth for Twitter's REST API.
|
||||
*/
|
||||
|
||||
/* Load OAuth lib. You can find it at http://oauth.net */
|
||||
require_once('OAuth.php');
|
||||
|
||||
/**
|
||||
* Twitter OAuth class
|
||||
*/
|
||||
class TwitterOAuth {
|
||||
/* Contains the last HTTP status code returned. */
|
||||
public $http_code;
|
||||
/* Contains the last API call. */
|
||||
public $url;
|
||||
/* Set up the API root URL. */
|
||||
public $host = "https://api.twitter.com/1/";
|
||||
/* Set timeout default. */
|
||||
public $timeout = 30;
|
||||
/* Set connect timeout. */
|
||||
public $connecttimeout = 30;
|
||||
/* Verify SSL Cert. */
|
||||
public $ssl_verifypeer = FALSE;
|
||||
/* Respons format. */
|
||||
public $format = 'json';
|
||||
/* Decode returned json data. */
|
||||
public $decode_json = TRUE;
|
||||
/* Contains the last HTTP headers returned. */
|
||||
public $http_info;
|
||||
/* Set the useragnet. */
|
||||
public $useragent = 'TwitterOAuth v0.2.0-beta2';
|
||||
/* Immediately retry the API call if the response was not successful. */
|
||||
//public $retry = TRUE;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Set API URLS
|
||||
*/
|
||||
function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }
|
||||
function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
|
||||
function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }
|
||||
function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
|
||||
|
||||
/**
|
||||
* Debug helpers
|
||||
*/
|
||||
function lastStatusCode() { return $this->http_status; }
|
||||
function lastAPICall() { return $this->last_api_call; }
|
||||
|
||||
/**
|
||||
* construct TwitterOAuth object
|
||||
*/
|
||||
function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
|
||||
$this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1();
|
||||
$this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
|
||||
if (!empty($oauth_token) && !empty($oauth_token_secret)) {
|
||||
$this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
|
||||
} else {
|
||||
$this->token = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a request_token from Twitter
|
||||
*
|
||||
* @returns a key/value array containing oauth_token and oauth_token_secret
|
||||
*/
|
||||
function getRequestToken($oauth_callback) {
|
||||
$parameters = array();
|
||||
$parameters['oauth_callback'] = $oauth_callback;
|
||||
$request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
|
||||
$token = OAuthUtil::parse_parameters($request);
|
||||
$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the authorize URL
|
||||
*
|
||||
* @returns a string
|
||||
*/
|
||||
function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) {
|
||||
if (is_array($token)) {
|
||||
$token = $token['oauth_token'];
|
||||
}
|
||||
if (empty($sign_in_with_twitter)) {
|
||||
return $this->authorizeURL() . "?oauth_token={$token}";
|
||||
} else {
|
||||
return $this->authenticateURL() . "?oauth_token={$token}";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Exchange request token and secret for an access token and
|
||||
* secret, to sign API calls.
|
||||
*
|
||||
* @returns array("oauth_token" => "the-access-token",
|
||||
* "oauth_token_secret" => "the-access-secret",
|
||||
* "user_id" => "9436992",
|
||||
* "screen_name" => "abraham")
|
||||
*/
|
||||
function getAccessToken($oauth_verifier) {
|
||||
$parameters = array();
|
||||
$parameters['oauth_verifier'] = $oauth_verifier;
|
||||
$request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
|
||||
$token = OAuthUtil::parse_parameters($request);
|
||||
$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* One time exchange of username and password for access token and secret.
|
||||
*
|
||||
* @returns array("oauth_token" => "the-access-token",
|
||||
* "oauth_token_secret" => "the-access-secret",
|
||||
* "user_id" => "9436992",
|
||||
* "screen_name" => "abraham",
|
||||
* "x_auth_expires" => "0")
|
||||
*/
|
||||
function getXAuthToken($username, $password) {
|
||||
$parameters = array();
|
||||
$parameters['x_auth_username'] = $username;
|
||||
$parameters['x_auth_password'] = $password;
|
||||
$parameters['x_auth_mode'] = 'client_auth';
|
||||
$request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
|
||||
$token = OAuthUtil::parse_parameters($request);
|
||||
$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* GET wrapper for oAuthRequest.
|
||||
*/
|
||||
function get($url, $parameters = array()) {
|
||||
$response = $this->oAuthRequest($url, 'GET', $parameters);
|
||||
if ($this->format === 'json' && $this->decode_json) {
|
||||
return json_decode($response);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* POST wrapper for oAuthRequest.
|
||||
*/
|
||||
function post($url, $parameters = array()) {
|
||||
$response = $this->oAuthRequest($url, 'POST', $parameters);
|
||||
if ($this->format === 'json' && $this->decode_json) {
|
||||
return json_decode($response);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE wrapper for oAuthReqeust.
|
||||
*/
|
||||
function delete($url, $parameters = array()) {
|
||||
$response = $this->oAuthRequest($url, 'DELETE', $parameters);
|
||||
if ($this->format === 'json' && $this->decode_json) {
|
||||
return json_decode($response);
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format and sign an OAuth / API request
|
||||
*/
|
||||
function oAuthRequest($url, $method, $parameters) {
|
||||
if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
|
||||
$url = "{$this->host}{$url}.{$this->format}";
|
||||
}
|
||||
$request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
|
||||
$request->sign_request($this->sha1_method, $this->consumer, $this->token);
|
||||
switch ($method) {
|
||||
case 'GET':
|
||||
return $this->http($request->to_url(), 'GET');
|
||||
default:
|
||||
return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTTP request
|
||||
*
|
||||
* @return API results
|
||||
*/
|
||||
function http($url, $method, $postfields = NULL) {
|
||||
$this->http_info = array();
|
||||
$ci = curl_init();
|
||||
/* Curl settings */
|
||||
curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
|
||||
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
|
||||
curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
|
||||
curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
|
||||
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
|
||||
curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
|
||||
curl_setopt($ci, CURLOPT_HEADER, FALSE);
|
||||
|
||||
switch ($method) {
|
||||
case 'POST':
|
||||
curl_setopt($ci, CURLOPT_POST, TRUE);
|
||||
if (!empty($postfields)) {
|
||||
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
|
||||
}
|
||||
break;
|
||||
case 'DELETE':
|
||||
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
||||
if (!empty($postfields)) {
|
||||
$url = "{$url}?{$postfields}";
|
||||
}
|
||||
}
|
||||
|
||||
curl_setopt($ci, CURLOPT_URL, $url);
|
||||
$response = curl_exec($ci);
|
||||
$this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
|
||||
$this->http_info = array_merge($this->http_info, curl_getinfo($ci));
|
||||
$this->url = $url;
|
||||
curl_close ($ci);
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the header info to store.
|
||||
*/
|
||||
function getHeader($ch, $header) {
|
||||
$i = strpos($header, ':');
|
||||
if (!empty($i)) {
|
||||
$key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
|
||||
$value = trim(substr($header, $i + 2));
|
||||
$this->http_header[$key] = $value;
|
||||
}
|
||||
return strlen($header);
|
||||
}
|
||||
}
|
||||
@ -35,9 +35,9 @@ if ($is_nogood) $colspan++;
|
||||
|
||||
<?php if ($rss_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b02">RSS</a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01">RSS</a></li><?php } ?>
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin">관리자</a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01">글쓰기</a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b02">글쓰기</a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
@ -115,7 +115,7 @@ if ($is_nogood) $colspan++;
|
||||
|
||||
?>
|
||||
</td>
|
||||
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>
|
||||
<td class="td_name"><?php echo $list[$i]['name'] ?></td>
|
||||
<td class="td_date"><?php echo $list[$i]['datetime2'] ?></td>
|
||||
<td class="td_num"><?php echo $list[$i]['wr_hit'] ?></td>
|
||||
<?php if ($is_good) { ?><td class="td_num"><?php echo $list[$i]['wr_good'] ?></td><?php } ?>
|
||||
@ -140,7 +140,7 @@ if ($is_nogood) $colspan++;
|
||||
</ul>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01">글쓰기</a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b02">글쓰기</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
@ -174,7 +174,7 @@ if ($is_nogood) $colspan++;
|
||||
<option value="wr_name,0"<?php echo get_selected($sfl, 'wr_name,0'); ?>>글쓴이(코)</option>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" id="stx" required class="frm_input required" size="15" maxlength="15">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required class="frm_input required" size="15" maxlength="15">
|
||||
<input type="submit" value="검색" class="btn_submit">
|
||||
</form>
|
||||
</fieldset>
|
||||
|
||||
@ -2,81 +2,83 @@
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if (!$is_member) return;
|
||||
if (!$config['cf_facebook_use']) return;
|
||||
|
||||
include_once(G4_SNS_PATH."/facebook/src/facebook.php");
|
||||
$facebook = new Facebook(array(
|
||||
'appId' => $config['cf_facebook_appid'],
|
||||
'secret' => $config['cf_facebook_secret']
|
||||
));
|
||||
|
||||
$user = $facebook->getUser();
|
||||
|
||||
if ($user) {
|
||||
try {
|
||||
$user_profile = $facebook->api('/me');
|
||||
} catch (FacebookApiException $e) {
|
||||
error_log($e);
|
||||
$user = null;
|
||||
}
|
||||
} else {
|
||||
$appid = $config['cf_facebook_appid'];
|
||||
$secret = $config['cf_facebook_secret'];
|
||||
$access_token = $_COOKIE['fbs_'.$appid.'_access_token'];
|
||||
|
||||
$graph_url = "https://graph.facebook.com/oauth/access_token?client_id=$appid&client_secret=$secret&grant_type=client_credentials";
|
||||
$access_token = file_get_contents($graph_url);
|
||||
|
||||
if($access_token){
|
||||
|
||||
$graph_url = "https://graph.facebook.com/oauth/access_token_info?client_id=$appid&" . $access_token;
|
||||
$access_token_info = json_decode(file_get_contents($graph_url));
|
||||
|
||||
function nonceHasBeenUsed($auth_nonce) {
|
||||
// Here you would check your database to see if the nonce
|
||||
// has been used before. For the sake of this example, we'll
|
||||
// just assume the answer is "no".
|
||||
return false;
|
||||
}
|
||||
|
||||
if (nonceHasBeenUsed($access_token_info->auth_nonce) != true) {
|
||||
if ($result = @file_get_contents("https://graph.facebook.com/me/?".$access_token)) {
|
||||
$result = json_decode($result, true);
|
||||
print_r2($result);
|
||||
$user = $result['id'];
|
||||
}
|
||||
}
|
||||
/*
|
||||
if ($result = @file_get_contents("https://graph.facebook.com/me/?access_token=".$access_token)) {
|
||||
$result = json_decode($result, true);
|
||||
|
||||
print_r2($result);
|
||||
//echo $_SESSION['uid'] = $result['id'];
|
||||
//if ($result = @file_get_contents("https://graph.facebook.com/{$result['id']}/accounts/test-users?installed=true&name={$result['name']}&locale={$result['locale']}&permissions=read_stream&method=post&access_token=".$access_token)) {
|
||||
if ($result = @file_get_contents("https://graph.facebook.com/{$result['id']}/accounts/test-users?access_token=".$access_token)) {
|
||||
$result = json_decode($result, true);
|
||||
print_r2($result);
|
||||
$user = $result['id'];
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
if (!$config['cf_facebook_use'] && !$config['cf_twitter_use']) return;
|
||||
?>
|
||||
<tr>
|
||||
<th scope="row">SNS 등록</th>
|
||||
<td>
|
||||
<div id="sns_facebook">
|
||||
<?php
|
||||
if ($user) {
|
||||
echo '<input type="checkbox" name="facebook_checked" id="facebook_checked" '.($member['mb_facebook_checked']?'checked':'').' value="1">';
|
||||
echo '<img src="'.G4_SNS_URL.'/icon/facebook_on.png" id="facebook_icon">';
|
||||
} else {
|
||||
$facebook_url = $facebook->getLoginUrl(array("redirect_uri"=>G4_SNS_URL."/facebook/callback.php", "scope"=>"publish_stream,read_stream,offline_access", "display"=>"popup"));
|
||||
if ($config['cf_facebook_use']) {
|
||||
include_once(G4_SNS_PATH."/facebook/src/facebook.php");
|
||||
$facebook = new Facebook(array(
|
||||
'appId' => $config['cf_facebook_appid'],
|
||||
'secret' => $config['cf_facebook_secret']
|
||||
));
|
||||
|
||||
echo '<input type="checkbox" name="facebook_checked" id="facebook_checked" disabled value="1">';
|
||||
echo '<a href="'.$facebook_url.'" id="facebook_url" onclick="return false;"><img src="'.G4_SNS_URL.'/icon/facebook_'.($user?'on':'off').'.png" id="facebook_icon">';
|
||||
echo '<script>$(function(){ $("#facebook_url").click(function(){ window.open(this.href, "facebook_url", "width=500,height=250"); }); });</script>';
|
||||
$user = $facebook->getUser();
|
||||
|
||||
if ($user) {
|
||||
try {
|
||||
$user_profile = $facebook->api('/me');
|
||||
} catch (FacebookApiException $e) {
|
||||
error_log($e);
|
||||
$user = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
echo '<input type="checkbox" name="facebook_checked" id="facebook_checked" '.($member['mb_facebook_checked']?'checked':'').' value="1">';
|
||||
echo '<img src="'.G4_SNS_URL.'/icon/facebook_on.png" id="facebook_icon">';
|
||||
} else {
|
||||
$facebook_url = $facebook->getLoginUrl(array("redirect_uri"=>G4_SNS_URL."/facebook/callback.php", "scope"=>"publish_stream,read_stream,offline_access", "display"=>"popup"));
|
||||
|
||||
echo '<input type="checkbox" name="facebook_checked" id="facebook_checked" disabled value="1">';
|
||||
echo '<a href="'.$facebook_url.'" id="facebook_url" onclick="return false;"><img src="'.G4_SNS_URL.'/icon/facebook_'.($user?'on':'off').'.png" id="facebook_icon">';
|
||||
echo '<script>$(function(){ $("#facebook_url").click(function(){ window.open(this.href, "facebook_url", "width=600,height=250"); }); });</script>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($config['cf_twitter_use']) {
|
||||
include_once(G4_SNS_PATH."/twitter/twitteroauth/twitteroauth.php");
|
||||
include_once(G4_SNS_PATH."/twitter/config.php");
|
||||
|
||||
$user = false;
|
||||
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret'])) {
|
||||
$twitter_url = G4_SNS_URL."/twitter/redirect.php";
|
||||
} else {
|
||||
$access_token = $_SESSION['access_token'];
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
|
||||
$content = $connection->get('account/verify_credentials');
|
||||
//print_r2($content);
|
||||
|
||||
switch ($connection->http_code) {
|
||||
case 200:
|
||||
$user = true;
|
||||
$twitter_url = $connection->getAuthorizeURL($token);
|
||||
break;
|
||||
default :
|
||||
$twitter_url = G4_SNS_URL."/twitter/redirect.php";
|
||||
// 안먹히는 코드 ㅠㅠ
|
||||
if ($member['mb_twitter_token'] && $member['mb_twitter_token_secret']) {
|
||||
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $member['mb_twitter_token'], $member['mb_twitter_token_secret']);
|
||||
$content = $connection->get('account/verify_credentials');
|
||||
if (200 == $connection->http_code) {
|
||||
$user = true;
|
||||
$twitter_url = $connection->getAuthorizeURL($token);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
echo '<input type="checkbox" name="twitter_checked" id="twitter_checked" '.($member['mb_twitter_checked']?'checked':'').' value="1">';
|
||||
echo '<img src="'.G4_SNS_URL.'/icon/twitter_on.png" id="twitter_icon">';
|
||||
} else {
|
||||
echo '<input type="checkbox" name="twitter_checked" id="twitter_checked" disabled value="1">';
|
||||
echo '<a href="'.$twitter_url.'" id="twitter_url" onclick="return false;"><img src="'.G4_SNS_URL.'/icon/twitter_'.($user?'on':'off').'.png" id="twitter_icon">';
|
||||
echo '<script>$(function(){ $("#twitter_url").click(function(){ window.open(this.href, "twitter_url", "width=600,height=250"); }); });</script>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
@ -3,12 +3,14 @@
|
||||
/* 게시판 목록 */
|
||||
#bo_list_title {margin-bottom:20px;font-size:1.2em;letter-spacing:-0.1em}
|
||||
|
||||
#bo_cate h2 {position:absolute;;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate h2 {width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {margin-bottom:10px;padding-left:1px;width:728px;zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {float:left;margin-bottom:-1px}
|
||||
#bo_cate a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:90px;border:1px solid #ddd;background:#f7f7f7;color:#888;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none}
|
||||
#bo_cate a:focus,
|
||||
#bo_cate a:hover,
|
||||
#bo_cate a:active {text-decoration:none}
|
||||
#bo_cate #bo_cate_on {z-index:2;border:1px solid #565e60;background:#fff;color:#565e60;font-weight:bold}
|
||||
|
||||
.td_subject img {margin-left:3px}
|
||||
@ -23,7 +25,7 @@
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 10px;height:25px;border:1px solid #e8180c !important;background:#e8180c;color:#fff;text-decoration:none;vertical-align:middle;cursor:pointer}
|
||||
.bo_notice td {background:#f5f6fa}
|
||||
.bo_notice td {background:#f7f7f2}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {display:inline-block;margin:0 3px 0 0;padding:0 6px 0 0;border-right:1px solid #e7f1ed;color:#999 !important;font-weight:bold;text-decoration:none} /* 글제목줄 분류스타일 */
|
||||
@ -31,14 +33,14 @@
|
||||
.cnt_cmt {font-weight:bold}
|
||||
|
||||
#bo_sch {margin-bottom:10px;padding-top:5px;text-align:center}
|
||||
#bo_sch legend {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_sch legend {width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;padding-bottom:20px}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:15px;margin:0;padding:0 5px;height:25px;background:#565e60;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
#bo_v_cate {position:absolute;top:0;right:15px;margin:0;padding:0 5px;height:25px;background:#565e60;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {padding:10px 0;font-size:1.2em}
|
||||
#bo_v_h1 {padding:10px 0;font-size:1.2em}
|
||||
|
||||
#bo_v_info {padding:0 0 10px;border-bottom:1px solid #ddd}
|
||||
#bo_v_info h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
@ -51,24 +53,27 @@
|
||||
#bo_v_file {}
|
||||
#bo_v_file h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f5f6fa}
|
||||
#bo_v_file a {display:inline-block;padding:8px 0 7px;width:100%;color:#000;word-wrap:break-word}
|
||||
#bo_v_file a:focus, #bo_v_file a:hover, #bo_v_file a:active {text-decoration:none}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
.bo_v_file_cnt {display:inline-block;margin:0 0 3px 22px}
|
||||
#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f2}
|
||||
#bo_v_file a {display:inline-block;padding:8px 0 7px;color:#000}
|
||||
#bo_v_file a:focus,
|
||||
#bo_v_file a:hover,
|
||||
#bo_v_file a:active {text-decoration:none}
|
||||
.bo_v_file_cnt {display:inline-block;margin:0 10px}
|
||||
|
||||
#bo_v_link {}
|
||||
#bo_v_link h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_link ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f5f6fa}
|
||||
#bo_v_link a {display:inline-block;padding:8px 0 7px;width:100%;color:#000;word-wrap:break-word}
|
||||
#bo_v_link a:focus, #bo_v_link a:hover, #bo_v_link a:active {text-decoration:none}
|
||||
.bo_v_link_cnt {display:inline-block;margin:0 0 3px 22px}
|
||||
#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f2}
|
||||
#bo_v_link a {display:inline-block;padding:8px 0 7px;color:#000}
|
||||
#bo_v_link a:focus,
|
||||
#bo_v_link a:hover,
|
||||
#bo_v_link a:active {text-decoration:none}
|
||||
.bo_v_link_cnt {display:inline-block;margin:0 10px}
|
||||
|
||||
#bo_v_top {margin:0 0 10px;padding:10px 0;zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_top ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_top ul {list-style:none}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
@ -81,7 +86,7 @@
|
||||
.bo_v_com li {float:left;margin-left:5px}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_atc header h1 {margin:0;padding:0;width:1px;height:1px;overflow:hidden}
|
||||
|
||||
#bo_v_img {margin:0 0 10px;width:100%;overflow:hidden:zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
@ -96,24 +101,27 @@
|
||||
#bo_v_act span {display:inline-block;margin-right:5px;padding:0 10px;height:23px;border:1px solid #ccc !important;background:#fafafa !important;color:#000 !important;text-decoration:none !important;line-height:2.15em;vertical-align:top}
|
||||
#bo_v_act strong {color:#ff3061}
|
||||
#bo_v_act_good,
|
||||
#bo_v_act_nogood {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_act_nogood {position:absolute;top:0;left:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v form {padding-top:20px}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
#bo_vc {padding:20px 20px 10px;border-top:1px solid #cfded8;border-bottom:1px solid #cfded8;background:#f5f6fa}
|
||||
#bo_vc {margin:0 0 10px;padding:20px 20px 10px;border-top:1px solid #cfded8;border-bottom:1px solid #cfded8;background:#f7f7f2}
|
||||
#bo_vc h2 {margin-bottom:10px}
|
||||
#bo_vc article {padding:0 0 10px;border-top:1px dotted #ccc}
|
||||
#bo_vc header {position:relative;padding:15px 0 5px}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .sv_wrap {margin-right:15px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
#bo_vc .member,
|
||||
#bo_vc .guest,
|
||||
#bo_vc .sv_member,
|
||||
#bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {display:inline-block;margin:0 15px 0 5px}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc h1 {width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc a {color:#000;text-decoration:none}
|
||||
#bo_vc p {padding:0 0 5px;line-height:1.8em}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc_empty {margin:0;padding:20px !important;text-align:center}
|
||||
#bo_vc_empty {margin:0;padding:20px !important;border-bottom:1px dotted #ccc;text-align:center}
|
||||
#bo_vc fieldset {margin:0 0 10px;padding:0}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc footer {zoom:1}
|
||||
@ -123,8 +131,8 @@
|
||||
.bo_vc_act:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_act li {float:left;margin-left:5px}
|
||||
|
||||
#bo_vc_w {position:relative;margin:0 0 10px;padding:0 0 20px;border-bottom:1px solid #cfded8}
|
||||
#bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
#bo_vc_w {position:relative;margin-bottom:10px;padding:0 20px 20px;border-bottom:1px solid #cfded8}
|
||||
#bo_vc_w h2 {padding:15px 0 5px}
|
||||
#bo_vc_w #char_cnt {display:block;margin-bottom:5px}
|
||||
|
||||
#bo_vc form {padding:0}
|
||||
@ -5,20 +5,17 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $board_skin_url ?>/style.css">
|
||||
|
||||
<div id="bo_v_table"><?php echo $board['bo_subject']; ?></div>
|
||||
<div id="bo_v" style="width:<?php echo $width; ?>">
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h1 id="bo_v_title">
|
||||
<?php
|
||||
if ($category_name) echo ($category_name ? $view['ca_name'].' | ' : ''); // 분류 출력 끝
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?>
|
||||
</h1>
|
||||
</header>
|
||||
<p id="bo_v_cate">
|
||||
<?php echo $board['bo_subject'] ?>
|
||||
<?php if ($category_name) { // 분류가 지정되었다면 ?><?php echo ($category_name ? "{$view['ca_name']} " : ""); ?><?php } // 분류 출력 끝 ?>
|
||||
</p>
|
||||
|
||||
<h1 id="bo_v_h1"><?php echo cut_str(get_text($view['wr_subject']), 70) // 글제목 출력 ?></h1>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<h2>게시물 정보</h2>
|
||||
작성자 <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong>
|
||||
<span class="sound_only">작성일</span><strong><?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
조회<strong><?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
@ -90,7 +87,8 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
</section>
|
||||
<?php } ?>
|
||||
|
||||
<div id="bo_v_top">
|
||||
<nav id="bo_v_top">
|
||||
<h2>게시물 상단 버튼</h2>
|
||||
<?php
|
||||
ob_start();
|
||||
?>
|
||||
@ -115,10 +113,12 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<article id="bo_v_atc">
|
||||
<header>
|
||||
<h1>본문</h1>
|
||||
</header>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
@ -145,6 +145,7 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
<?php if ($scrap_href || $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn_b01" onclick="win_scrap(this.href); return false;">스크랩</a><?php } ?>
|
||||
|
||||
<?php if ($good_href) { ?>
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="btn_b01">추천 <strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
@ -153,10 +154,11 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="btn_b01">비추천 <strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span>추천 <strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span>비추천 <strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
@ -164,20 +166,24 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</section>
|
||||
?>
|
||||
</article>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once('./view_comment.php');
|
||||
?>
|
||||
|
||||
<div id="bo_v_bot">
|
||||
<nav id="bo_v_bot">
|
||||
<h2>게시물 하단 버튼</h2>
|
||||
|
||||
<!-- 링크 버튼 -->
|
||||
<?php echo $link_buttons ?>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
@ -211,35 +217,6 @@ $(window).load(function() {
|
||||
view_image_resize();
|
||||
});
|
||||
|
||||
var now = new Date();
|
||||
var timeout = false;
|
||||
var millisec = 200;
|
||||
var tid;
|
||||
|
||||
$(window).resize(function() {
|
||||
now = new Date();
|
||||
if (timeout === false) {
|
||||
timeout = true;
|
||||
|
||||
if(tid != null)
|
||||
clearTimeout(tid);
|
||||
|
||||
tid = setTimeout(resize_check, millisec);
|
||||
}
|
||||
});
|
||||
|
||||
function resize_check() {
|
||||
if (new Date() - now < millisec) {
|
||||
if(tid != null)
|
||||
clearTimeout(tid);
|
||||
|
||||
tid = setTimeout(resize_check, millisec);
|
||||
} else {
|
||||
timeout = false;
|
||||
view_image_resize();
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
@ -263,34 +240,14 @@ function view_image_resize()
|
||||
{
|
||||
var $img = $("#bo_v_atc img");
|
||||
var img_wrap = $("#bo_v_atc").width();
|
||||
var win_width = $(window).width() - 35;
|
||||
var res_width = 0;
|
||||
|
||||
if(img_wrap < win_width)
|
||||
res_width = img_wrap;
|
||||
else
|
||||
res_width = win_width;
|
||||
|
||||
$img.each(function() {
|
||||
var img_width = $(this).width();
|
||||
var img_height = $(this).height();
|
||||
var this_width = $(this).data("width");
|
||||
var this_height = $(this).data("height");
|
||||
|
||||
if(this_width == undefined) {
|
||||
$(this).data("width", img_width); // 원래 이미지 사이즈
|
||||
$(this).data("height", img_height);
|
||||
this_width = img_width;
|
||||
this_height = img_height;
|
||||
}
|
||||
|
||||
if(this_width > res_width) {
|
||||
$(this).width(res_width);
|
||||
var res_height = Math.round(res_width * $(this).data("height") / $(this).data("width"));
|
||||
$(this).height(res_height);
|
||||
} else {
|
||||
$(this).width(this_width);
|
||||
$(this).height(this_height);
|
||||
$(this).data("width", img_width); // 원래 이미지 사이즈
|
||||
if (img_width > img_wrap) {
|
||||
$(this).addClass("img_fix");
|
||||
} else if (img_width <= img_wrap && img_width >= $(this).data("width")) {
|
||||
$(this).removeClass("img_fix");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -73,7 +73,6 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
|
||||
</section>
|
||||
|
||||
<<<<<<< HEAD
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
@ -161,232 +160,146 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
=======
|
||||
<?php
|
||||
if ($is_comment_write) {
|
||||
if($w == '') $w = 'c';
|
||||
?>
|
||||
<section id="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
}
|
||||
|
||||
<table class="frm_tbl">
|
||||
<tbody>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_name">이름<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="text" name="wr_name" id="wr_name" required class="frm_input required" size="5" maxLength="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_password">패스워드<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="10" maxLength="20"></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_secret">비밀글사용</label></th>
|
||||
<td><input type="checkbox" name="wr_secret" value="secret" id="wr_secret"></td>
|
||||
</tr>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row">자동등록방지</th>
|
||||
<td><?php echo $captcha_html; ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row">내용</th>
|
||||
<td>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="댓글 내용"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$("textarea#wr_content[maxlength]").live("keyup change", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
<div class="btn_confirm">
|
||||
<input type="submit" value="댓글등록" id="btn_submit" class="btn_submit" accesskey="s">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
>>>>>>> master
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
/*
|
||||
var s;
|
||||
if (s = word_filter_check(document.getElementById('wr_content').value))
|
||||
{
|
||||
alert("내용에 금지단어('"+s+"')가 포함되어있습니다");
|
||||
document.getElementById('wr_content').focus();
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g4_bbs_url+"/filter.ajax.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
/*
|
||||
var s;
|
||||
if (s = word_filter_check(document.getElementById('wr_content').value))
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
alert("내용에 금지단어('"+s+"')가 포함되어있습니다");
|
||||
document.getElementById('wr_content').focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g4_bbs_url+"/filter.ajax.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
alert('패스워드가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id;
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
document.getElementById(save_before).innerHTML = '';
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).innerHTML = save_html;
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('패스워드가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id;
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
document.getElementById(save_before).innerHTML = '';
|
||||
}
|
||||
|
||||
save_before = el_id;
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).innerHTML = save_html;
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
</script>
|
||||
<?php } ?>
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
</script>
|
||||
<?php } ?>
|
||||
|
||||
@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $board_skin_url ?>/style.css">
|
||||
|
||||
<h1 id="container_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1 id="wrapper_title"><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
@ -147,7 +147,7 @@ echo $option_hidden;
|
||||
<p>
|
||||
작성하신 내용을 제출하시려면 <strong>글쓰기</strong> 버튼을, 작성을 취소하고 목록으로 돌아가시려면 <strong>취소</strong> 링크를 누르세요.
|
||||
</p>
|
||||
<input type="submit" value="글쓰기" id="btn_submit" class="btn_submit" accesskey="s">
|
||||
<input type="submit" value="글쓰기" id="btn_submit" accesskey="s" class="btn_submit">
|
||||
<a href="./board.php?bo_table=<?php echo $bo_table ?>" class="btn_cancel">취소</a>
|
||||
</div>
|
||||
</form>
|
||||
@ -218,8 +218,6 @@ function fwrite_submit(f)
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -171,7 +171,7 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
<option value="wr_name,0"<?php echo get_selected($sfl, "wr_name,0"); ?>>글쓴이(코)</option>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" id="stx" required class="frm_input required" size="15" maxlength="15">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required class="frm_input required" size="15" maxlength="15">
|
||||
<input type="submit" value="검색" class="btn_submit">
|
||||
</form>
|
||||
</fieldset>
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 10px;height:25px;border:1px solid #e8180c !important;background:#e8180c;color:#fff;text-decoration:none;vertical-align:middle;cursor:pointer}
|
||||
.bo_notice td {background:#f5f6fa}
|
||||
.bo_notice td {background:#f7f7f2}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {display:inline-block;margin:0 3px 0 0;padding:0 6px 0 0;border-right:1px solid #e7f1ed;color:#999 !important;font-weight:bold;text-decoration:none} /* 글제목줄 분류스타일 */
|
||||
@ -60,9 +60,9 @@
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;padding-bottom:20px}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:15px;margin:0;padding:0 5px;height:25px;background:#565e60;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
#bo_v_cate {position:absolute;top:0;right:15px;margin:0;padding:0 5px;height:25px;background:#565e60;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {padding:10px 0;font-size:1.2em}
|
||||
#bo_v_h1 {padding:10px 0;font-size:1.2em}
|
||||
|
||||
#bo_v_info {padding:0 0 10px;border-bottom:1px solid #ddd}
|
||||
#bo_v_info h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
@ -75,24 +75,27 @@
|
||||
#bo_v_file {}
|
||||
#bo_v_file h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f5f6fa}
|
||||
#bo_v_file a {display:inline-block;padding:8px 0 7px;width:100%;color:#000;word-wrap:break-word}
|
||||
#bo_v_file a:focus, #bo_v_file a:hover, #bo_v_file a:active {text-decoration:none}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
.bo_v_file_cnt {display:inline-block;margin:0 0 3px 22px}
|
||||
#bo_v_file li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f2}
|
||||
#bo_v_file a {display:inline-block;padding:8px 0 7px;color:#000}
|
||||
#bo_v_file a:focus,
|
||||
#bo_v_file a:hover,
|
||||
#bo_v_file a:active {text-decoration:none}
|
||||
.bo_v_file_cnt {display:inline-block;margin:0 10px}
|
||||
|
||||
#bo_v_link {}
|
||||
#bo_v_link h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_link ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f5f6fa}
|
||||
#bo_v_link a {display:inline-block;padding:8px 0 7px;width:100%;color:#000;word-wrap:break-word}
|
||||
#bo_v_link a:focus, #bo_v_link a:hover, #bo_v_link a:active {text-decoration:none}
|
||||
.bo_v_link_cnt {display:inline-block;margin:0 0 3px 22px}
|
||||
#bo_v_link li {padding:0 10px;border-bottom:1px solid #eee;background:#f7f7f2}
|
||||
#bo_v_link a {display:inline-block;padding:8px 0 7px;color:#000}
|
||||
#bo_v_link a:focus,
|
||||
#bo_v_link a:hover,
|
||||
#bo_v_link a:active {text-decoration:none}
|
||||
.bo_v_link_cnt {display:inline-block;margin:0 10px}
|
||||
|
||||
#bo_v_top {margin:0 0 10px;padding:10px 0;zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {margin:0;padding:0;height:0;overflow:hidden}
|
||||
#bo_v_top ul {margin:0;padding:0;list-style:none}
|
||||
#bo_v_top ul {list-style:none}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
@ -105,7 +108,7 @@
|
||||
.bo_v_com li {float:left;margin-left:5px}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_atc header h1 {margin:0;padding:0;width:1px;height:1px;overflow:hidden}
|
||||
|
||||
#bo_v_img {margin:0 0 10px;width:100%;overflow:hidden:zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
@ -120,24 +123,27 @@
|
||||
#bo_v_act span {display:inline-block;margin-right:5px;padding:0 10px;height:23px;border:1px solid #ccc !important;background:#fafafa !important;color:#000 !important;text-decoration:none !important;line-height:2.15em;vertical-align:top}
|
||||
#bo_v_act strong {color:#ff3061}
|
||||
#bo_v_act_good,
|
||||
#bo_v_act_nogood {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_act_nogood {position:absolute;top:0;left:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v form {padding-top:20px}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
#bo_vc {padding:20px 20px 10px;border-top:1px solid #cfded8;border-bottom:1px solid #cfded8;background:#f5f6fa}
|
||||
#bo_vc {margin:0 0 10px;padding:20px 20px 10px;border-top:1px solid #cfded8;border-bottom:1px solid #cfded8;background:#f7f7f2}
|
||||
#bo_vc h2 {margin-bottom:10px}
|
||||
#bo_vc article {padding:0 0 10px;border-top:1px dotted #ccc}
|
||||
#bo_vc header {position:relative;padding:15px 0 5px}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .sv_wrap {margin-right:15px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
#bo_vc .member,
|
||||
#bo_vc .guest,
|
||||
#bo_vc .sv_member,
|
||||
#bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {display:inline-block;margin:0 15px 0 5px}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc h1 {width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc a {color:#000;text-decoration:none}
|
||||
#bo_vc p {padding:0 0 5px;line-height:1.8em}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc_empty {margin:0;padding:20px !important;text-align:center}
|
||||
#bo_vc_empty {margin:0;padding:20px !important;border-bottom:1px dotted #ccc;text-align:center}
|
||||
#bo_vc fieldset {margin:0 0 10px;padding:0}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc footer {zoom:1}
|
||||
@ -147,8 +153,8 @@
|
||||
.bo_vc_act:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_act li {float:left;margin-left:5px}
|
||||
|
||||
#bo_vc_w {position:relative;margin:0 0 10px;padding:0 0 20px;border-bottom:1px solid #cfded8}
|
||||
#bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
#bo_vc_w {position:relative;margin-bottom:10px;padding:0 20px 20px;border-bottom:1px solid #cfded8}
|
||||
#bo_vc_w h2 {padding:15px 0 5px}
|
||||
#bo_vc_w #char_cnt {display:block;margin-bottom:5px}
|
||||
|
||||
#bo_vc form {padding:0}
|
||||
@ -5,20 +5,17 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $board_skin_url ?>/style.css">
|
||||
|
||||
<div id="bo_v_table"><?php echo $board['bo_subject']; ?></div>
|
||||
<div id="bo_v" style="width:<?php echo $width; ?>">
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h1 id="bo_v_title">
|
||||
<?php
|
||||
if ($category_name) echo ($category_name ? $view['ca_name'].' | ' : ''); // 분류 출력 끝
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?>
|
||||
</h1>
|
||||
</header>
|
||||
<p id="bo_v_cate">
|
||||
<?php echo $board['bo_subject'] ?>
|
||||
<?php if ($category_name) { // 분류가 지정되었다면 ?><?php echo ($category_name ? "{$view['ca_name']} " : ""); ?><?php } // 분류 출력 끝 ?>
|
||||
</p>
|
||||
|
||||
<h1 id="bo_v_h1"><?php echo cut_str(get_text($view['wr_subject']), 70) // 글제목 출력 ?></h1>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<h2>게시물 정보</h2>
|
||||
작성자 <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong>
|
||||
<span class="sound_only">작성일</span><strong><?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
조회<strong><?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
@ -90,7 +87,8 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
</section>
|
||||
<?php } ?>
|
||||
|
||||
<div id="bo_v_top">
|
||||
<nav id="bo_v_top">
|
||||
<h2>게시물 상단 버튼</h2>
|
||||
<?php
|
||||
ob_start();
|
||||
?>
|
||||
@ -115,10 +113,12 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<article id="bo_v_atc">
|
||||
<header>
|
||||
<h1>본문</h1>
|
||||
</header>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
@ -165,19 +165,23 @@ include_once(G4_LIB_PATH.'/thumbnail.lib.php');
|
||||
}
|
||||
}
|
||||
?>
|
||||
</section>
|
||||
</article>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once('./view_comment.php');
|
||||
?>
|
||||
|
||||
<div id="bo_v_bot">
|
||||
<nav id="bo_v_bot">
|
||||
<h2>게시물 하단 버튼</h2>
|
||||
|
||||
<!-- 링크 버튼 -->
|
||||
<?php echo $link_buttons ?>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
@ -211,35 +215,6 @@ $(window).load(function() {
|
||||
view_image_resize();
|
||||
});
|
||||
|
||||
var now = new Date();
|
||||
var timeout = false;
|
||||
var millisec = 200;
|
||||
var tid;
|
||||
|
||||
$(window).resize(function() {
|
||||
now = new Date();
|
||||
if (timeout === false) {
|
||||
timeout = true;
|
||||
|
||||
if(tid != null)
|
||||
clearTimeout(tid);
|
||||
|
||||
tid = setTimeout(resize_check, millisec);
|
||||
}
|
||||
});
|
||||
|
||||
function resize_check() {
|
||||
if (new Date() - now < millisec) {
|
||||
if(tid != null)
|
||||
clearTimeout(tid);
|
||||
|
||||
tid = setTimeout(resize_check, millisec);
|
||||
} else {
|
||||
timeout = false;
|
||||
view_image_resize();
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
@ -263,34 +238,14 @@ function view_image_resize()
|
||||
{
|
||||
var $img = $("#bo_v_atc img");
|
||||
var img_wrap = $("#bo_v_atc").width();
|
||||
var win_width = $(window).width() - 35;
|
||||
var res_width = 0;
|
||||
|
||||
if(img_wrap < win_width)
|
||||
res_width = img_wrap;
|
||||
else
|
||||
res_width = win_width;
|
||||
|
||||
$img.each(function() {
|
||||
var img_width = $(this).width();
|
||||
var img_height = $(this).height();
|
||||
var this_width = $(this).data("width");
|
||||
var this_height = $(this).data("height");
|
||||
|
||||
if(this_width == undefined) {
|
||||
$(this).data("width", img_width); // 원래 이미지 사이즈
|
||||
$(this).data("height", img_height);
|
||||
this_width = img_width;
|
||||
this_height = img_height;
|
||||
}
|
||||
|
||||
if(this_width > res_width) {
|
||||
$(this).width(res_width);
|
||||
var res_height = Math.round(res_width * $(this).data("height") / $(this).data("width"));
|
||||
$(this).height(res_height);
|
||||
} else {
|
||||
$(this).width(this_width);
|
||||
$(this).height(this_height);
|
||||
$(this).data("width", img_width); // 원래 이미지 사이즈
|
||||
if (img_width > img_wrap) {
|
||||
$(this).addClass("img_fix");
|
||||
} else if (img_width <= img_wrap && img_width >= $(this).data("width")) {
|
||||
$(this).removeClass("img_fix");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -21,8 +21,8 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
$str = $str;
|
||||
}
|
||||
$str = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $str);
|
||||
?>
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
?>
|
||||
<article id="c_<?php echo $comment_id; ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<header>
|
||||
<h1><?php echo $list[$i]['wr_name'] ?>님의 댓글</h1>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
@ -44,7 +44,7 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
<span id="edit_<?php echo $comment_id ?>"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
|
||||
<?php if($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) {
|
||||
@ -73,230 +73,219 @@ var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
|
||||
</section>
|
||||
|
||||
<?php
|
||||
if ($is_comment_write) {
|
||||
if($w == '') $w = 'c';
|
||||
?>
|
||||
<section id="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
<?php
|
||||
if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<aside id="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" action="./write_comment_update.php" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w" >
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<table class="frm_tbl">
|
||||
<tbody>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_name">이름<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="text" name="wr_name" id="wr_name" required class="frm_input required" size="5" maxLength="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_password">패스워드<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="10" maxLength="20"></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_secret">비밀글사용</label></th>
|
||||
<td><input type="checkbox" name="wr_secret" value="secret" id="wr_secret"></td>
|
||||
</tr>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row">자동등록방지</th>
|
||||
<td><?php echo $captcha_html; ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row">내용</th>
|
||||
<td>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="댓글 내용"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$("textarea#wr_content[maxlength]").live("keyup change", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="frm_tbl">
|
||||
<tbody>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_name">이름<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="text" name="wr_name" id="wr_name" required class="frm_input required" size="5" maxLength="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_password">패스워드<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="10" maxLength="20"></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="wr_secret">비밀글사용</label></th>
|
||||
<td><input type="checkbox" name="wr_secret" value="secret" id="wr_secret"></td>
|
||||
</tr>
|
||||
<?php if ($is_guest) { ?>
|
||||
<tr>
|
||||
<th scope="row">자동등록방지</th>
|
||||
<td><?php echo $captcha_html; ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<tr>
|
||||
<th scope="row">내용</th>
|
||||
<td>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea name="wr_content" id="wr_content" maxlength="10000" required class="required"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="btn_confirm">
|
||||
<input type="submit" value="댓글등록" id="btn_submit" class="btn_submit" accesskey="s">
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<input type="submit" class="btn_submit" value="댓글등록">
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</section>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
/*
|
||||
var s;
|
||||
if (s = word_filter_check(document.getElementById('wr_content').value))
|
||||
{
|
||||
alert("내용에 금지단어('"+s+"')가 포함되어있습니다");
|
||||
document.getElementById('wr_content').focus();
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g4_bbs_url+"/filter.ajax.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
/*
|
||||
var s;
|
||||
if (s = word_filter_check(document.getElementById('wr_content').value))
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
alert("내용에 금지단어('"+s+"')가 포함되어있습니다");
|
||||
document.getElementById('wr_content').focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g4_bbs_url+"/filter.ajax.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
alert('패스워드가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id;
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
document.getElementById(save_before).innerHTML = '';
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).innerHTML = save_html;
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('패스워드가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id;
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
document.getElementById(save_before).innerHTML = '';
|
||||
}
|
||||
|
||||
save_before = el_id;
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).innerHTML = save_html;
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
</script>
|
||||
<?php } ?>
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
</script>
|
||||
<?php } ?>
|
||||
|
||||
@ -4,7 +4,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $board_skin_url ?>/style.css">
|
||||
|
||||
<h1 id="container_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1 id="wrapper_title"><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
|
||||
@ -18,18 +18,18 @@ for ($i=0; $i<count($list); $i++) {
|
||||
$location = conv_content($list[$i]['lo_location'], 0);
|
||||
// 최고관리자에게만 허용
|
||||
// 이 조건문은 가능한 변경하지 마십시오.
|
||||
if ($list[$i]['lo_url'] && $is_admin == 'super') $display_location = '<a href="'.$list[$i]['lo_url'].'">'.$location.'</a>';
|
||||
if ($list[$i]['lo_url'] && $is_admin == 'super') $display_location = "<a href=\"".$list[$i]['lo_url']."\">".$location."</a>";
|
||||
else $display_location = $location;
|
||||
?>
|
||||
<tr>
|
||||
<td class="td_num"><?php echo $list[$i]['num'] ?></td>
|
||||
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>
|
||||
<td class="td_name"><?php echo $list[$i]['name'] ?></td>
|
||||
<td><?php echo $display_location ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
if ($i == 0)
|
||||
echo '<tr><td colspan="3" class="empty_table">현재 접속자가 없습니다.</td></tr>';
|
||||
echo "<tr><td colspan=\"3\" class=\"empty_table\">현재 접속자가 없습니다.</td></tr>";
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@ -4,8 +4,8 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $latest_skin_url ?>/style.css">
|
||||
|
||||
<section class="lat">
|
||||
<h2 class="lat_title"><a href="<?php echo G4_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>"><?php echo $bo_subject ?></a></h2>
|
||||
<div class="lt">
|
||||
<strong class="lt_title"><a href="<?php echo G4_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>"><?php echo $bo_subject ?></a></strong>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<count($list); $i++) { ?>
|
||||
<li>
|
||||
@ -37,5 +37,5 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<li>게시물이 없습니다.</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<div class="lat_more"><a href="<?php echo G4_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>"><span class="sound_only"><?php echo $bo_subject ?></span>더보기</a></div>
|
||||
</section>
|
||||
<div class="lt_more"><a href="<?php echo G4_BBS_URL ?>/board.php?bo_table=<?php echo $bo_table ?>"><span class="sound_only"><?php echo $bo_subject ?></span>더보기</a></div>
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/* 새글 스킨 (latest) */
|
||||
.lat_pc {float:left;margin-left:20px}
|
||||
.lat {position:relative;float:left;margin-bottom:20px;padding-bottom:10px;width:354px;height:150px;border-bottom:1px solid #ddd}
|
||||
.lat ul {margin:0 0 10px;padding:0;list-style:none}
|
||||
.lat li {padding:3px 0}
|
||||
.lat_title {display:block;padding:10px 0 8px}
|
||||
.lat_more {position:absolute;top:10px;right:0}
|
||||
.lt_pc {float:left;margin-left:20px}
|
||||
.lt {position:relative;float:left;margin-bottom:20px;padding-bottom:10px;width:354px;height:150px;border-bottom:1px solid #ddd}
|
||||
.lt ul {margin:0 0 10px;padding:0;list-style:none}
|
||||
.lt li {padding:3px 0}
|
||||
.lt_title {display:block;padding:10px 0 8px}
|
||||
.lt_more {position:absolute;top:10px;right:0}
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="formmail" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $name ?>님께 메일보내기</h1>
|
||||
<h1><?php echo $name ?>님께 메일보내기</h1>
|
||||
|
||||
<form name="fformmail" action="./formmail_send.php" onsubmit="return fformmail_submit(this);" method="post" enctype="multipart/form-data" style="margin:0px;">
|
||||
<input type="hidden" name="to" value="<?php echo $email ?>">
|
||||
@ -15,14 +15,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<input type="hidden" name="fnick" value="<?php echo $member['mb_nick'] ?>">
|
||||
<input type="hidden" name="fmail" value="<?php echo $member['mb_email'] ?>">
|
||||
<?php } ?>
|
||||
|
||||
<table class="frm_tbl">
|
||||
<caption>메일쓰기</caption>
|
||||
<tbody>
|
||||
<?php if (!$is_member) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="fnick">이름<strong class="sound_only">필수</strong></label></th>
|
||||
<td><input type="text" name="fnick" id="fnick" required class="frm_input required"></td>
|
||||
<td><input type="text"name="fnick" id="fnick" required class="frm_input required"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label for="fmail">E-mail<strong class="sound_only">필수</strong></label></th>
|
||||
|
||||
@ -10,18 +10,17 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<form name="flogin" action="<?php echo $login_action_url ?>" onsubmit="return flogin_submit(this);" method="post">
|
||||
<input type="hidden" name="url" value='<?php echo $login_url ?>'>
|
||||
|
||||
<fieldset id="mb_login_fs">
|
||||
<legend>회원로그인</legend>
|
||||
<label for="login_id" class="login_id">회원아이디<strong class="sound_only"> 필수</strong></label>
|
||||
<fieldset class="cbg">
|
||||
<label for="login_id" class="login_id">회원아이디<strong class="sound_only">필수</strong></label>
|
||||
<input type="text" name="mb_id" id="login_id" required class="frm_input required" size="20" maxLength="20">
|
||||
<label for="login_pw" class="login_pw">패스워드<strong class="sound_only"> 필수</strong></label>
|
||||
<label for="login_pw" class="login_pw">패스워드<strong class="sound_only">필수</strong></label>
|
||||
<input type="password" name="mb_password" id="login_pw" required class="frm_input required" size="20" maxLength="20">
|
||||
<input type="submit" value="로그인" class="btn_submit">
|
||||
<input type="checkbox" name="auto_login" id="login_auto_login">
|
||||
<label for="login_auto_login">자동로그인</label>
|
||||
</fieldset>
|
||||
|
||||
<aside id="mb_login_info">
|
||||
<section>
|
||||
<h2>회원로그인 안내</h2>
|
||||
<p>
|
||||
회원아이디 및 패스워드가 기억 안나실 때는 아이디/패스워드 찾기를 이용하십시오.<br>
|
||||
@ -31,7 +30,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<a href="<?php echo G4_BBS_URL ?>/password_lost.php" target="win_password_lost" id="login_password_lost" class="btn02">아이디 패스워드 찾기</a>
|
||||
<a href="./register.php" class="btn01">회원 가입</a>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<div class="btn_confirm">
|
||||
<a href="<?php echo G4_URL ?>/">메인으로 돌아가기</a>
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="memo_list" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<ul class="new_win_ul">
|
||||
<li><a href="./memo.php?kind=recv">받은쪽지</a></li>
|
||||
@ -34,7 +34,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<td class="td_mng"><a href="<?php echo $list[$i]['del_href'] ?>" onclick="del(this.href); return false;">삭제</a></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php if ($i==0) { echo '<tr><td colspan="4" class="empty_table">자료가 없습니다.</td></tr>'; } ?>
|
||||
<?php if ($i==0) { echo "<tr><td colspan=\"4\" class=\"empty_table\">자료가 없습니다.</td></tr>"; } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="memo_write" class="new_win">
|
||||
<h1 id="new_win_title">쪽지보내기</h1>
|
||||
<h1>쪽지보내기</h1>
|
||||
|
||||
<ul class="new_win_ul">
|
||||
<li><a href="./memo.php?kind=recv">받은쪽지</a></li>
|
||||
@ -13,8 +13,8 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<li><a href="./memo_form.php">쪽지쓰기</a></li>
|
||||
</ul>
|
||||
|
||||
<form name="fmemoform" action="<?php echo $memo_action_url; ?>" onsubmit="return fmemoform_submit(this);" method="post" autocomplete="off">
|
||||
<div>
|
||||
<form name="fmemoform" action="./memo_form_update.php" onsubmit="return fmemoform_submit(this);" method="post" autocomplete="off">
|
||||
<div class="cbox">
|
||||
<table class="frm_tbl">
|
||||
<caption>쪽지쓰기</caption>
|
||||
<tbody>
|
||||
|
||||
@ -14,18 +14,14 @@ else {
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="memo_view" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<h1><?php echo $g4['title'] ?></h1>
|
||||
<ul class="new_win_ul">
|
||||
<li><a href="./memo.php?kind=recv">받은쪽지</a></li>
|
||||
<li><a href="./memo.php?kind=send">보낸쪽지</a></li>
|
||||
<li><a href="./memo_form.php">쪽지쓰기</a></li>
|
||||
</ul>
|
||||
|
||||
<article id="memo_view_contents">
|
||||
<header>
|
||||
<h1>쪽지 내용</h1>
|
||||
</header>
|
||||
<section>
|
||||
<h2>쪽지 내용</h2>
|
||||
<ul id="memo_view_ul">
|
||||
<li class="memo_view_li">
|
||||
<span class="memo_view_subj"><?php echo $kind_str ?>사람</span>
|
||||
@ -39,7 +35,7 @@ else {
|
||||
<p>
|
||||
<?php echo conv_content($memo['me_memo'], 0) ?>
|
||||
</p>
|
||||
</article>
|
||||
</section>
|
||||
<div class="btn_win">
|
||||
<?php if($prev_link) { ?>
|
||||
<a href="<?php echo $prev_link ?>">이전쪽지</a>
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="find_info" class="new_win">
|
||||
<h1 id="new_win_title">회원정보 찾기</h1>
|
||||
<h1>회원정보 찾기</h1>
|
||||
|
||||
<form name="fpasswordlost" action="<?php echo $action_url ?>" onsubmit="return fpasswordlost_submit(this);" method="post" autocomplete="off">
|
||||
<fieldset id="find_info_fs">
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="profile" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $mb_nick ?>님의 프로필</h1>
|
||||
<h1><?php echo $mb_nick ?>님의 프로필</h1>
|
||||
|
||||
<table class="frm_tbl">
|
||||
<tbody>
|
||||
|
||||
@ -8,11 +8,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<form id="fregisterform" name="fregisterform" action="<?php echo $register_action_url ?>" onsubmit="return fregisterform_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="url" value="<?php echo $urlencode ?>">
|
||||
<?php if (isset($member['mb_sex'])) { ?><input type="hidden" name="mb_sex" value="<?php echo $member['mb_sex'] ?>"><?php } ?>
|
||||
<input type="hidden" name="agree" value="<?php echo $agree ?>">
|
||||
<input type="hidden" name="agree2" value="<?php echo $agree2 ?>">
|
||||
<?php if (isset($member['mb_sex'])) { ?><input type="hidden" name="mb_sex" value="<?php echo $member['mb_sex'] ?>"><?php } ?>
|
||||
<?php if (isset($member['mb_nick_date']) && $member['mb_nick_date'] > date("Y-m-d", G4_SERVER_TIME - ($config['cf_nick_modify'] * 86400))) { // 별명수정일이 지나지 않았다면 ?>
|
||||
<input type="hidden" name="mb_nick_default" value="<?php echo $member['mb_nick'] ?>">
|
||||
<input type="hidden" name="mb_nick" value="<?php echo $member['mb_nick'] ?>">
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<table class="frm_tbl">
|
||||
<caption>사이트 이용정보 입력</caption>
|
||||
@ -39,19 +41,10 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_name">이름<strong class="sound_only">필수</strong></label></th>
|
||||
<td>
|
||||
<?php if ($w=="u" && $config['cf_kcpcert_use']) { ?>
|
||||
<span class="frm_info">휴대폰 본인확인 후에는 이름과 휴대폰번호가 자동 입력되며 수동으로 입력할수 없게 됩니다.</span>
|
||||
<?php } ?>
|
||||
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php if ($w=='u') echo 'readonly'; ?> class="frm_input nospace <?php echo $required ?> <?php echo $readonly ?>" size="10">
|
||||
<?php if ($w=="u" && $config['cf_kcpcert_use']) { ?>
|
||||
<button type="button" id="win_kcpcert" class="btn_frmline">휴대폰 본인확인</button>
|
||||
<noscript>휴대폰 본인확인을 위해서는 자바스크립트 사용이 가능해야합니다.</noscript>
|
||||
<?php } ?>
|
||||
<?php if ($member['mb_hp_certify']) { ?>
|
||||
<div id="msg_hp_certify">
|
||||
휴대폰 <strong>본인확인</strong><?php if ($member['mb_hp_certify']) { ?> 및 <strong>성인인증</strong><?php } ?> 완료
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php /* if ($w=='') { echo "<span class=\"frm_info\">공백없이 한글만 입력하세요.</span>"; } */ ?>
|
||||
<?php echo $config['cf_kcpcert_use'] ? '<span class="frm_info">이름과 휴대폰번호는 아래의 휴대폰 본인확인 기능을 사용하여 입력해 주십시오.</span>' : ''; ?>
|
||||
<?php echo ($config['cf_kcpcert_use']=='test') ? '<span class="frm_info">테스트의 경우 이동통신사는 반드시 KT를 선택해 주십시오. 나머지 항목은 임의로 입력하시면 됩니다.</span>' : ''; ?>
|
||||
<input type="text" id="reg_mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>" <?php echo $required ?> <?php if ($config['cf_kcpcert_use']!=''||$w=='u') echo 'readonly'; ?> class="frm_input nospace <?php echo $required ?> <?php echo $readonly ?>" size="10">
|
||||
</td>
|
||||
</tr>
|
||||
<?php if ($req_nick) { ?>
|
||||
@ -67,17 +60,17 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<span id="msg_mb_nick"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_email">E-mail<strong class="sound_only">필수</strong></label></th>
|
||||
<td>
|
||||
<?php if ($config['cf_use_email_certify']) { ?>
|
||||
<span class="frm_info">
|
||||
<?php if ($w=='') { echo "E-mail 로 발송된 내용을 확인한 후 인증하셔야 회원가입이 완료됩니다."; } ?>
|
||||
<?php if ($w=='u') { echo "E-mail 주소를 변경하시면 다시 인증하셔야 합니다."; } ?>
|
||||
<?php if ($w=='') { echo "E-mail 로 발송된 내용을 확인한 후 인증하셔야 회원가입이 완료됩니다."; } ?>
|
||||
<?php if ($w=='u') { echo "E-mail 주소를 변경하시면 다시 인증하셔야 합니다."; } ?>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input type="hidden" name="old_email" value="<?php echo $member['mb_email'] ?>">
|
||||
<input type="text" name="mb_email" value="<?php echo isset($member['mb_email'])?$member['mb_email']:''; ?>" id="reg_mb_email" required class="frm_input email required" size="50" maxlength="100">
|
||||
</td>
|
||||
@ -88,27 +81,37 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<th scope="row"><label for="reg_mb_homepage">홈페이지<?php if ($config['cf_req_homepage']){ ?><strong class="sound_only">필수</strong><?php } ?></label></th>
|
||||
<td><input type="text" name="mb_homepage" value="<?php echo $member['mb_homepage'] ?>" id="reg_mb_homepage" <?php echo $config['cf_req_homepage']?"required":""; ?> class="frm_input <?php echo $config['cf_req_homepage']?"required":""; ?>" size="50" maxlength="255"></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_use_tel']) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_tel">전화번호<?php if ($config['cf_req_tel']) { ?><strong class="sound_only">필수</strong><?php } ?></label></th>
|
||||
<td><input type="text" name="mb_tel" value="<?php echo $member['mb_tel'] ?>" id="reg_mb_tel" <?php echo $config['cf_req_tel']?"required":""; ?> class="frm_input <?php echo $config['cf_req_tel']?"required":""; ?>" maxlength="20"></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_use_hp']) { ?>
|
||||
<?php if ($config['cf_use_hp'] || $config['cf_kcpcert_use']) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_hp">휴대폰번호<?php if ($config['cf_req_hp']) { ?><strong class="sound_only">필수</strong><?php } ?></label></th>
|
||||
<td><input type="text" name="mb_hp" value="<?php echo $member['mb_hp'] ?>" id="reg_mb_hp" <?php echo ($config['cf_req_hp'])?"required":""; ?> class="frm_input <?php echo ($config['cf_req_hp'])?"required":""; ?>" maxlength="20"></td>
|
||||
<td>
|
||||
<?php if ($config['cf_kcpcert_use']) { ?>
|
||||
<span class="frm_info">휴대폰번호는 휴대폰 본인확인 기능을 이용하여 입력하세요.</span>
|
||||
<?php } ?>
|
||||
<input type="text" name="mb_hp" value="<?php echo $member[mb_hp] ?>" id="reg_mb_hp" <?php echo ($config['cf_req_hp']||$config['cf_kcpcert_use'])?"required":""; ?> class="frm_input <?php echo ($config['cf_req_hp']||$config['cf_kcpcert_use'])?"required":""; ?>" <?php echo $config['cf_kcpcert_use']?"readonly":""; ?> maxlength="20">
|
||||
<?php if ($config['cf_kcpcert_use']) { ?>
|
||||
<input type="hidden" name="old_mb_hp" value="<?php echo $member['mb_hp'] ?>">
|
||||
<button type="button" id="win_kcpcert" class="btn_frmline">휴대폰 본인확인</button>
|
||||
<noscript>휴대폰 본인확인을 위해서는 자바스크립트 사용이 가능해야합니다.</noscript>
|
||||
<?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_use_addr']) { ?>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
주소
|
||||
<?php if ($config['cf_req_addr']) { ?><strong class="sound_only">필수</strong><?php } ?>
|
||||
<?php if ($config['cf_req_addr']) { ?><strong class="sound_only">필수</strong><?php } ?>
|
||||
</th>
|
||||
<td>
|
||||
<label for="reg_mb_zip1" class="sound_only">우편번호 앞자리<?php echo $config['cf_req_addr']?'<strong class="sound_only"> 필수</strong>':''; ?></label>
|
||||
@ -129,7 +132,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
</script>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
</table>
|
||||
|
||||
<table class="frm_tbl">
|
||||
@ -139,14 +142,14 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<th scope="row"><label for="reg_mb_signature">서명<?php if ($config['cf_req_signature']){ ?><strong class="sound_only">필수</strong><?php } ?></label></th>
|
||||
<td><textarea name="mb_signature" id="reg_mb_signature" <?php echo $config['cf_req_signature']?"required":""; ?> class="<?php echo $config['cf_req_signature']?"required":""; ?>"><?php echo $member['mb_signature'] ?></textarea></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_use_profile']) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_profile">자기소개</label></th>
|
||||
<td><textarea name="mb_profile" id="reg_mb_profile" <?php echo $config['cf_req_profile']?"required":""; ?> class="<?php echo $config['cf_req_profile']?"required":""; ?>"><?php echo $member['mb_profile'] ?></textarea></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($config['cf_use_member_icon'] && $member['mb_level'] >= $config['cf_icon_level']) { ?>
|
||||
<tr>
|
||||
@ -157,14 +160,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
gif만 가능하며 용량 <?php echo number_format($config['cf_member_icon_size']) ?>바이트 이하만 등록됩니다.
|
||||
</span>
|
||||
<input type="file" name="mb_icon" id="reg_mb_icon" class="frm_input">
|
||||
<?php if ($w == 'u' && file_exists($mb_icon_path)) { ?>
|
||||
<img src="<?php echo $mb_icon_url; ?>" alt="회원아이콘">
|
||||
<?php if ($w == 'u' && file_exists($mb_icon)) { ?>
|
||||
<input type="checkbox" name="del_mb_icon" value="1" id="del_mb_icon">
|
||||
<label for="del_mb_icon">삭제</label>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_mailling">메일링서비스</label></th>
|
||||
@ -182,7 +184,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
휴대폰 문자메세지를 받겠습니다.
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (isset($member['mb_open_date']) && $member['mb_open_date'] <= date("Y-m-d", G4_SERVER_TIME - ($config['cf_open_modify'] * 86400)) || empty($member['mb_open_date'])) { // 정보공개 수정일이 지났다면 수정가능 ?>
|
||||
<tr>
|
||||
@ -207,14 +209,14 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<input type="hidden" name="mb_open" value="<?php echo $member['mb_open'] ?>">
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($w == "" && $config['cf_use_recommend']) { ?>
|
||||
<tr>
|
||||
<th scope="row"><label for="reg_mb_recommend">추천인아이디</label></th>
|
||||
<td><input type="text" name="mb_recommend" id="reg_mb_recommend" class="frm_input" required></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<tr>
|
||||
<th scope="row">자동등록방지</th>
|
||||
@ -226,7 +228,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<p>
|
||||
작성하신 내용를 발송하시려면 <strong><?php echo $w==''?'회원가입':'정보수정'; ?></strong> 버튼을, 작성을 취소하고 창을 닫으시려면 <strong>취소</strong> 링크를 누르세요.
|
||||
</p>
|
||||
<input type="submit" value="<?php echo $w==''?'회원가입':'정보수정'; ?>" id="btn_submit" class="btn_submit" accesskey="s">
|
||||
<input type="submit" value="<?php echo $w==''?'회원가입':'정보수정'; ?>" class="btn_submit" accesskey="s">
|
||||
<a href="<?php echo $g4['path'] ?>/" class="btn_cancel">취소</a>
|
||||
</div>
|
||||
</form>
|
||||
@ -234,13 +236,17 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<?php
|
||||
if ($config['cf_kcpcert_use']) {
|
||||
// 휴대폰인증 form
|
||||
include_once(G4_KCPCERT_PATH.'/kcpcert_form.php');
|
||||
include_once(G4_KCP_PATH.'/kcpcert_form.php');
|
||||
?>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("#reg_zip_find").css("display", "inline-block");
|
||||
$("#reg_mb_zip1, #reg_mb_zip2, #reg_mb_addr1").attr("readonly", true);
|
||||
|
||||
// 휴대폰인증
|
||||
$('#win_kcpcert').click(function() {
|
||||
auth_type_check();
|
||||
auth_type_check($("#reg_mb_name").val());
|
||||
return false;
|
||||
});
|
||||
});
|
||||
@ -248,11 +254,6 @@ $(function() {
|
||||
<?php } ?>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("#reg_zip_find").css("display", "inline-block");
|
||||
$("#reg_mb_zip1, #reg_mb_zip2, #reg_mb_addr1").attr("readonly", true);
|
||||
});
|
||||
|
||||
// submit 최종 폼체크
|
||||
function fregisterform_submit(f)
|
||||
{
|
||||
@ -295,6 +296,15 @@ function fregisterform_submit(f)
|
||||
f.mb_name.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
var pattern = /([^가-힣\x20])/i;
|
||||
if (pattern.test(f.mb_name.value)) {
|
||||
alert('이름은 한글로 입력하십시오.');
|
||||
f.mb_name.select();
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// 별명 검사
|
||||
@ -327,7 +337,7 @@ function fregisterform_submit(f)
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.mb_recommend) != 'undefined' && f.mb_recommend.value) {
|
||||
if (typeof(f.mb_recommend) != 'undefined') {
|
||||
if (f.mb_id.value == f.mb_recommend.value) {
|
||||
alert('본인을 추천할 수 없습니다.');
|
||||
f.mb_recommend.focus();
|
||||
@ -342,9 +352,32 @@ function fregisterform_submit(f)
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo chk_captcha_js(); ?>
|
||||
<?php if ($config['cf_kcpcert_use']) { ?>
|
||||
var error = "";
|
||||
$.ajax({
|
||||
url: "<?php echo G4_KCP_URL ?>/kcpcert.ajax.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"w": f.w.value,
|
||||
"mb_name": f.mb_name.value,
|
||||
"mb_hp": f.mb_hp.value,
|
||||
"old_mb_hp":f.old_mb_hp.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
error = data.error;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
if (error) {
|
||||
alert(error);
|
||||
return false;
|
||||
}
|
||||
<?php } ?>
|
||||
|
||||
<?php echo chk_captcha_js(); ?>
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
7
skin/member/basic/register_form_update.head.skin.php
Normal file
7
skin/member/basic/register_form_update.head.skin.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if ($config['cf_kcpcert_use']) {
|
||||
include_once(G4_KCP_PATH.'/kcpcert.head.skin.php');
|
||||
}
|
||||
?>
|
||||
7
skin/member/basic/register_form_update.tail.skin.php
Normal file
7
skin/member/basic/register_form_update.tail.skin.php
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if ($config['cf_kcpcert_use']) {
|
||||
include_once(G4_KCP_PATH.'/kcpcert.tail.skin.php');
|
||||
}
|
||||
?>
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="scrap" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<table class="basic_tbl">
|
||||
<caption>스크랩 목록</caption>
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="scrap_do" class="new_win">
|
||||
<h1 id="new_win_title">스크랩하기</h1>
|
||||
<h1>스크랩하기</h1>
|
||||
|
||||
<form name="f_scrap_popin" action="./scrap_popin_update.php" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/* 회원가입 약관 */
|
||||
#fregister section {margin:0 0 20px;padding:20px 0;border-bottom:3px solid #eee}
|
||||
#fregister h2 {margin:0 0 20px;text-align:center}
|
||||
#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:98%;height:150px;border:1px solid #d9d9d9;background:#f7f7f7}
|
||||
#fregister textarea {display:block;margin-bottom:10px;padding:5px;width:98%;height:150px;border:1px solid #cfded8;background:#f7f7f7}
|
||||
#fregister textarea:focus {background:#21272e;color:#fff}
|
||||
.fregister_agree {padding:10px 0 0;text-align:right}
|
||||
.fregister_agree label {display:inline-block;margin-right:5px}
|
||||
@ -12,8 +12,6 @@
|
||||
#fregisterform .cbg {margin-bottom:15px;padding:20px}
|
||||
#fregisterform textarea {height:50px}
|
||||
|
||||
#msg_hp_certify {margin:5px 0 0;padding:5px;border:1px solid #dbecff;background:#eaf4ff;text-align:center}
|
||||
|
||||
/* 회원가입 완료 */
|
||||
#reg_result {padding:50px 0 0}
|
||||
#reg_result_logo {margin-bottom:50px;text-align:center}
|
||||
@ -37,19 +35,18 @@
|
||||
#mb_login {margin:0 auto;padding:100px 0;width:500px}
|
||||
#mb_login h1 {margin:0 0 20px;font-size:1.3em}
|
||||
#mb_login h2 {margin:0}
|
||||
#mb_login_fs {position:relative;margin:0;padding:20px 20px 20px 95px;border:1px solid #cfded8;border-bottom:0;background:#fff}
|
||||
#mb_login_fs legend {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#mb_login_fs label {letter-spacing:-0.1em}
|
||||
#mb_login_fs .login_id {position:absolute;top:26px;left:95px}
|
||||
#mb_login_fs .login_pw {position:absolute;top:52px;left:95px}
|
||||
#mb_login_fs .frm_input {display:block;margin:0 0 5px 80px}
|
||||
#mb_login_fs .btn_submit {position:absolute;top:20px;left:335px;height:49px}
|
||||
#mb_login_info {margin:0 0 30px;padding:20px;border:1px solid #cfded8;background:#f5f6fa}
|
||||
#mb_login_info div {text-align:right}
|
||||
#mb_login fieldset {position:relative;margin:0;padding:20px 20px 20px 95px;border:1px solid #cfded8;border-bottom:0;background:#fff}
|
||||
#mb_login label {letter-spacing:-0.1em}
|
||||
#mb_login .login_id {position:absolute;top:26px;left:95px}
|
||||
#mb_login .login_pw {position:absolute;top:52px;left:95px}
|
||||
#mb_login .frm_input {display:block;margin:0 0 5px 80px}
|
||||
#mb_login .btn_submit {position:absolute;top:20px;left:335px;height:49px}
|
||||
#mb_login section {margin:0 0 30px;padding:20px;border:1px solid #cfded8;background:#f7f7f2}
|
||||
#mb_login section div {text-align:right}
|
||||
|
||||
/* 쪽지 */
|
||||
#memo_view_contents {margin:0 auto 20px;width:90%}
|
||||
#memo_view_contents h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#memo_view section {margin:0 auto 20px;padding:20px;width:87%}
|
||||
#memo_view section h2 {width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#memo_view_ul {margin:0;padding:0 0 10px;border-bottom:1px solid #eee;list-style:none}
|
||||
.memo_view_li {position:relative;padding:5px 0}
|
||||
.memo_view_subj {display:inline-block;width:65px}
|
||||
@ -66,18 +63,18 @@
|
||||
/* 회원 패스워드 확인 */
|
||||
#mb_confirm {margin:0 auto;padding:100px 0;width:500px}
|
||||
#mb_confirm h1 {margin:0 0 20px;font-size:1.3em}
|
||||
#mb_confirm p {padding:20px;border:1px solid #d9d9d9;border-bottom:0;background:#fff}
|
||||
#mb_confirm p {padding:20px;border:1px solid #cfded8;border-bottom:0;background:#fff}
|
||||
#mb_confirm p strong {display:block}
|
||||
#mb_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #d9d9d9;background:#f5f6fa;text-align:center}
|
||||
#mb_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #cfded8;background:#f7f7f2;text-align:center}
|
||||
#mb_confirm label {letter-spacing:-0.1em}
|
||||
#mb_confirm_id {display:inline-block;margin-right:20px;font-weight:bold}
|
||||
|
||||
/* 비밀글 패스워드 확인 */
|
||||
#pw_confirm {margin:0 auto;padding:100px 0;width:500px}
|
||||
#pw_confirm h1 {margin:0 0 20px;font-size:1.3em}
|
||||
#pw_confirm p {padding:20px;border:1px solid #d9d9d9;border-bottom:0;background:#fff}
|
||||
#pw_confirm p {padding:20px;border:1px solid #cfded8;border-bottom:0;background:#fff}
|
||||
#pw_confirm p strong {display:block}
|
||||
#pw_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #d9d9d9;background:#f5f6fa;text-align:center}
|
||||
#pw_confirm fieldset {margin:0 0 30px;padding:30px 0;border:1px solid #cfded8;background:#f7f7f2;text-align:center}
|
||||
#pw_confirm label {letter-spacing:-0.1em}
|
||||
#pw_confirm_id {display:inline-block;margin-right:20px;font-weight:bold}
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $member_skin_url ?>/style.css">
|
||||
|
||||
<div id="post_code" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<form name="fzip" method="get" autocomplete="off">
|
||||
<input type="hidden" name="frm_name" value="<?php echo $frm_name ?>">
|
||||
@ -31,14 +31,11 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
<dl>
|
||||
<dt>총 <?php echo $search_count ?>건 가나다순 정렬</dt>
|
||||
<dd>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
if ($i == 0) echo '<ul>';
|
||||
?>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<count($list); $i++) { ?>
|
||||
<li><a href='javascript:;' onclick="find_zip('<?php echo $list[$i][zip1] ?>', '<?php echo $list[$i][zip2] ?>', '<?php echo $list[$i][addr] ?>');"><span class="post_code"><?php echo $list[$i][zip1] ?>-<?php echo $list[$i][zip2] ?></span> <?php echo $list[$i][addr] ?> <?php echo $list[$i][bunji] ?></a></li>
|
||||
<?php }
|
||||
if ($i > 0) echo '</ul>';
|
||||
?>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@ -55,7 +55,7 @@ for ($i=0; $i<count($list); $i++)
|
||||
<td class="td_group"><a href="./new.php?gr_id=<?php echo $list[$i]['gr_id'] ?>"><?php echo $gr_subject ?></a></td>
|
||||
<td class="td_board"><a href="./board.php?bo_table=<?php echo $list[$i]['bo_table'] ?>"><?php echo $bo_subject ?></a></td>
|
||||
<td><a href="<?php echo $list[$i]['href'] ?>"><?php echo $list[$i]['comment'] ?><?php echo $wr_subject ?></a></td>
|
||||
<td class="td_name sv_use"><div><?php echo $list[$i]['name'] ?></div></td>
|
||||
<td class="td_name"><div><?php echo $list[$i]['name'] ?></div></td>
|
||||
<td class="td_date"><?php echo $list[$i]['datetime2'] ?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
|
||||
@ -4,7 +4,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $outlogin_skin_url ?>/style.css">
|
||||
|
||||
<aside id="ol_before" class="ol">
|
||||
<section id="ol_before" class="ol">
|
||||
<h2>회원로그인</h2>
|
||||
<!-- 로그인 전 외부로그인 시작 -->
|
||||
<form name="foutlogin" action="<?php echo $outlogin_action_url ?>" onsubmit="return fhead_submit(this);" method="post" autocomplete="off">
|
||||
@ -25,12 +25,12 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
$omi = $('#ol_id');
|
||||
$omp = $('#ol_pw');
|
||||
$omp.css('display','inline-block').css('width',103);
|
||||
$omp.css('display','inline-block').css('width',104);
|
||||
$omi_label = $('#ol_idlabel');
|
||||
$omi_label.addClass('ol_idlabel');
|
||||
$omp_label = $('#ol_pwlabel');
|
||||
|
||||
@ -5,9 +5,9 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $outlogin_skin_url ?>/style.css">
|
||||
|
||||
<!-- 로그인 후 외부로그인 시작 -->
|
||||
<aside id="ol_after" class="ol">
|
||||
<section id="ol_after" class="ol">
|
||||
<header id="ol_after_hd">
|
||||
<h2>회원정보</h2>
|
||||
<h2>나의 회원정보</h2>
|
||||
<strong><?php echo $nick ?>님</strong>
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?><a href="<?php echo G4_ADMIN_URL ?>" class="btn_admin">관리자 모드</a><?php } ?>
|
||||
</header>
|
||||
@ -32,7 +32,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<a href="<?php echo G4_BBS_URL ?>/member_confirm.php?url=register_form.php" id="ol_after_info">정보수정</a>
|
||||
<a href="<?php echo G4_BBS_URL ?>/logout.php" id="ol_after_logout">로그아웃</a>
|
||||
</footer>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
// 탈퇴의 경우 아래 코드를 연동하시면 됩니다.
|
||||
|
||||
@ -5,9 +5,11 @@
|
||||
|
||||
#ol_before {}
|
||||
#ol_before fieldset {position:relative}
|
||||
#ol_id {display:block;margin:0 0 5px !important;margin:0 0 3px;padding:0 5px;width:167px;height:22px;border:1px solid #b8c9c2;line-height:1.6em}
|
||||
#ol_id {display:block;margin:0 0 5px !important;margin:0 0 3px;padding:0 5px;width:168px;height:22px;border:1px solid #b8c9c2;background:#f7f7f7;line-height:1.6em}
|
||||
#ol_id:focus {border-color:#333;background:#21272e;color:#fff}
|
||||
.ol_idlabel {position:absolute;top:6px;left:5px;color:#333;font-size:0.95em}
|
||||
#ol_pw {display:block;margin:0 0 5px !important;margin:0 0 3px;padding:0 5px;width:167px;height:22px;border:1px solid #b8c9c2;vertical-align:top;line-height:1.6em}
|
||||
#ol_pw {display:block;margin:0 0 5px !important;margin:0 0 3px;padding:0 5px;width:168px;height:22px;border:1px solid #b8c9c2;background:#f7f7f7;vertical-align:top;line-height:1.6em}
|
||||
#ol_pw:focus {border-color:#333;background:#21272e;color:#fff}
|
||||
.ol_pwlabel {position:absolute;top:35px;left:5px;color:#333;font-size:0.95em}
|
||||
#auto_login {}
|
||||
#auto_login_label {letter-spacing:-0.1em}
|
||||
@ -27,12 +29,14 @@
|
||||
#ol_after_private li {float:left}
|
||||
#ol_after_private a {display:block;padding-top:8px;height:37px;background:#f7f7f7;text-align:center}
|
||||
#ol_after_private a strong {display:block;padding-top:3px;color:#000;font-weight:normal}
|
||||
#ol_after_private a:focus, #ol_after_private a:hover {background:#333;color:#fff;text-decoration:none}
|
||||
#ol_after_private a:focus,
|
||||
#ol_after_private a:hover {background:#333;color:#fff;text-decoration:none}
|
||||
#ol_after_private a:focus strong,
|
||||
#ol_after_private a:hover strong {color:#fff;text-decoration:none}
|
||||
#ol_after_memo {width:50px;margin-right:1px}
|
||||
#ol_after_pt {width:79px;margin-right:1px}
|
||||
#ol_after_pt {width:80px;margin-right:1px}
|
||||
#ol_after_scrap {width:48px;line-height:2.6em !important}
|
||||
#ol_after_ft {text-align:justify}
|
||||
#ol_after_ft a {display:inline-block;width:87px;height:22px;background:#333;color:#fff;text-align:center;line-height:1.8em}
|
||||
#ol_after_ft a:focus, #ol_after_ft a:hover {text-decoration:none !important}
|
||||
#ol_after_ft a {display:inline-block;width:88px;height:22px;background:#333;color:#fff;text-align:center;line-height:1.8em}
|
||||
#ol_after_ft a:focus,
|
||||
#ol_after_ft a:hover {text-decoration:none !important}
|
||||
@ -7,7 +7,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<form name="fpoll" action="<?php echo G4_BBS_URL ?>/poll_update.php" onsubmit="return fpoll_submit(this);" method="post">
|
||||
<input type="hidden" name="po_id" value="<?php echo $po_id ?>">
|
||||
<input type="hidden" name="skin_dir" value="<?php echo $skin_dir ?>">
|
||||
<aside id="poll">
|
||||
<section id="poll">
|
||||
<header>
|
||||
<h2>설문조사</h2>
|
||||
<?php if ($is_admin == "super") { ?><a href="<?php echo G4_ADMIN_URL ?>/poll_form.php?w=u&po_id=<?php echo $po_id ?>" class="btn_admin">설문조사 관리</a><?php } ?>
|
||||
@ -22,7 +22,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<input type="submit" value="투표하기">
|
||||
<a href="<?php echo G4_BBS_URL."/poll_result.php?po_id=$po_id&skin_dir=$skin_dir" ?>" target="_blank" onclick="poll_result(this.href); return false;">결과보기</a>
|
||||
</footer>
|
||||
</aside>
|
||||
</section>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
|
||||
@ -5,7 +5,7 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
<link rel="stylesheet" href="<?php echo $poll_skin_url ?>/style.css">
|
||||
|
||||
<div id="poll_result" class="new_win">
|
||||
<h1 id="new_win_title"><?php echo $g4['title'] ?></h1>
|
||||
<h1><?php echo $g4['title'] ?></h1>
|
||||
|
||||
<section id="poll_result_list">
|
||||
<h2><?php echo $po_subject ?> 결과</h2>
|
||||
@ -88,14 +88,14 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
</section>
|
||||
<?php } ?>
|
||||
|
||||
<aside id="poll_result_oth">
|
||||
<section id="poll_result_oth">
|
||||
<h2>다른 투표 결과 보기</h2>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<count($list3); $i++) { ?>
|
||||
<li><a href="./poll_result.php?po_id=<?php echo $list3[$i]['po_id'] ?>&skin_dir=<?php echo $skin_dir ?>">[<?php echo $list3[$i]['date'] ?>] <?php echo $list3[$i]['subject'] ?></a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
<div class="btn_win">
|
||||
<a href="javascript:;" onclick="window.close();">창닫기</a>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/* 설문조사 스킨 */
|
||||
#poll {border-top:1px solid #d9e1e5}
|
||||
#poll {border-top:1px solid #e7f1ed}
|
||||
#poll header {position:relative;padding:15px 14px 0}
|
||||
#poll h2 {}
|
||||
#poll header .btn_admin {margin-top:5px;width:158px;text-align:center}
|
||||
|
||||
@ -4,16 +4,13 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $popular_skin_url ?>/style.css">
|
||||
|
||||
<aside id="popular">
|
||||
<section id="popular">
|
||||
<div>
|
||||
<h2>인기검색어</h2>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
if ($i == 0) echo '<ul>'.PHP_EOL;
|
||||
?>
|
||||
<ul>
|
||||
<?php for ($i=0; $i<count($list); $i++) { ?>
|
||||
<li><a href="<?php echo G4_BBS_URL ?>/search.php?sfl=wr_subject&sop=and&stx=<?php echo urlencode($list[$i]['pp_word']) ?>"><?php echo $list[$i]['pp_word'] ?></a></li>
|
||||
<?php }
|
||||
if ($i > 0) echo '</ul>'.PHP_EOL;
|
||||
?>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
@ -1,9 +1,10 @@
|
||||
/* 인기검색어 */
|
||||
#popular {}
|
||||
#popular {background:#515151}
|
||||
#popular div {margin:0 auto;width:980px;zoom:1}
|
||||
#popular div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#popular h2 {float:left;padding:10px 45px 10px 0;color:#fff}
|
||||
#popular ul {float:left;list-style:none}
|
||||
#popular li {float:left}
|
||||
#popular a {display:inline-block;padding:10px;color:#fff;text-decoration:none}
|
||||
#popular a:focus, #popular a:hover {background:#333;color:#fff}
|
||||
#popular a:focus,
|
||||
#popular a:hover {background:#333;color:#fff}
|
||||
@ -6,8 +6,8 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<form name="fsearch" onsubmit="return fsearch_submit(this);" method="get">
|
||||
<input type="hidden" name="srows" value="<?php echo $srows ?>">
|
||||
<fieldset id="sch_res_detail">
|
||||
<legend>상세검색</legend>
|
||||
<fieldset id="sch_result_detail">
|
||||
<legend class="sound_only">상세검색</legend>
|
||||
<?php echo $group_select ?>
|
||||
<script>document.getElementById("gr_id").value = "<?php echo $gr_id ?>";</script>
|
||||
|
||||
@ -61,33 +61,34 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<div id="sch_result">
|
||||
|
||||
<?php
|
||||
if ($stx) {
|
||||
if ($board_count) {
|
||||
?>
|
||||
<section id="sch_res_ov">
|
||||
<h2><?php echo $stx ?> 전체검색 결과</h2>
|
||||
<dl>
|
||||
<dt>게시판</dt>
|
||||
<dd><strong style="color:<?php echo $config['cf_search_color'] ?>"><?php echo $board_count ?>개</strong></dd>
|
||||
<dt>게시물</dt>
|
||||
<dd><strong style="color:<?php echo $config['cf_search_color'] ?>"><?php echo number_format($total_count) ?>개</strong></dd>
|
||||
</dl>
|
||||
<p><?php echo number_format($page) ?>/<?php echo number_format($total_page) ?> 페이지 열람 중</p>
|
||||
</section>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if ($stx) { ?>
|
||||
<?php if ($board_count) { ?>
|
||||
<dl id="sch_result_hd">
|
||||
<dt><strong><?php echo $stx ?></strong>에 대한 검색 결과입니다.</dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><span style="color:<?php echo $config['cf_search_color'] ?>"><?php echo $board_count ?></span>개의 게시판</li>
|
||||
<li><span style="color:<?php echo $config['cf_search_color'] ?>"><?php echo number_format($total_count) ?></span>개의 게시물</li>
|
||||
<li>현재 <?php echo number_format($page) ?>/<?php echo number_format($total_page) ?> 페이지 열람 중</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
if ($stx) {
|
||||
if ($board_count) {
|
||||
?>
|
||||
<ul id="sch_res_board">
|
||||
<li><a href="?<?php echo $search_query ?>&gr_id=<?php echo $gr_id ?>" <?php echo $sch_all ?>>전체게시판</a></li>
|
||||
<?php echo $str_board_list; ?>
|
||||
</ul>
|
||||
<dl id="sch_result_bo">
|
||||
<dt>검색결과가 있는 게시판 목록</dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><a href="?<?php echo $search_query ?>&gr_id=<?php echo $gr_id ?>" <?php echo $sch_all ?>>전체게시판</a></li>
|
||||
<?php echo $str_board_list; ?>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
@ -96,37 +97,37 @@ if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
|
||||
<hr>
|
||||
|
||||
<?php if ($stx && $board_count) { ?><section class="sch_res_list"><?php } ?>
|
||||
<?php if ($stx && $board_count) { ?><dl id="sch_result_atc"><?php } ?>
|
||||
<?php
|
||||
$k=0;
|
||||
for ($idx=$table_index, $k=0; $idx<count($search_table) && $k<$rows; $idx++) {
|
||||
$comment_def = "";
|
||||
$comment_href = "";
|
||||
?>
|
||||
<h2><a href="./board.php?bo_table=<?php echo $search_table[$idx] ?>&<?php echo $search_query ?>"><?php echo $bo_subject[$idx] ?> 게시판 내 결과</a></h2>
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<count($list[$idx]) && $k<$rows; $i++, $k++) {
|
||||
if ($list[$idx][$i][wr_is_comment])
|
||||
{
|
||||
$comment_def = "<span class=\"cmt_def\">댓글</span>";
|
||||
$comment_href = "#c_".$list[$idx][$i][wr_id];
|
||||
}
|
||||
?>
|
||||
<li>
|
||||
<a href="<?php echo $list[$idx][$i][href] ?><?php echo $comment_href ?>" class="sch_res_title"><?php echo $comment_def ?><?php echo $list[$idx][$i][subject] ?></a>
|
||||
<a href="<?php echo $list[$idx][$i][href] ?><?php echo $comment_href ?>" target="_blank">새창</a>
|
||||
<p><?php echo $list[$idx][$i][content] ?></p>
|
||||
<?php echo $list[$idx][$i][name] ?>
|
||||
<span class="sch_datetime"><?php echo $list[$idx][$i][wr_datetime] ?></span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<div class="sch_more"><a href="./board.php?bo_table=<?php echo $search_table[$idx] ?>&<?php echo $search_query ?>"><strong><?php echo $bo_subject[$idx] ?></strong> 결과 더보기</a></div>
|
||||
|
||||
<hr>
|
||||
<dt><a href="./board.php?bo_table=<?php echo $search_table[$idx] ?>&<?php echo $search_query ?>"><?php echo $bo_subject[$idx] ?>에서</a></dt>
|
||||
<dd>
|
||||
<ul>
|
||||
<?php
|
||||
for ($i=0; $i<count($list[$idx]) && $k<$rows; $i++, $k++) {
|
||||
if ($list[$idx][$i][wr_is_comment])
|
||||
{
|
||||
$comment_def = "<span class=\"cmt_def\">댓글</span>";
|
||||
$comment_href = "#c_".$list[$idx][$i][wr_id];
|
||||
}
|
||||
?>
|
||||
<li>
|
||||
<a href="<?php echo $list[$idx][$i][href] ?><?php echo $comment_href ?>" class="sch_result_title"><?php echo $comment_def ?><?php echo $list[$idx][$i][subject] ?></a>
|
||||
<a href="<?php echo $list[$idx][$i][href] ?><?php echo $comment_href ?>" target="_blank">새창</a>
|
||||
<p><?php echo $list[$idx][$i][content] ?></p>
|
||||
<?php echo $list[$idx][$i][name] ?>
|
||||
<span class="sch_datetime"><?php echo $list[$idx][$i][wr_datetime] ?></span>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<div class="sch_more"><a href="./board.php?bo_table=<?php echo $search_table[$idx] ?>&<?php echo $search_query ?>"><?php echo $bo_subject[$idx] ?> 더보기</a></div>
|
||||
</dd>
|
||||
<?php } ?>
|
||||
<?php if ($stx && $board_count) { ?></section><?php } ?>
|
||||
<?php if ($stx && $board_count) { ?></dl><?php } ?>
|
||||
|
||||
<?php echo $write_pages ?>
|
||||
|
||||
|
||||
@ -1,23 +1,33 @@
|
||||
/* 전체검색결과 스킨 */
|
||||
#sch_res_detail {padding:0 0 10px;border-bottom:1px solid #e9e9e9;text-align:center}
|
||||
#sch_res_detail legend {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#sch_res_ov {margin:0 0 10px;padding:10px;border-bottom:1px solid #e9e9e9;background:#f5f6fa;zoom:1}
|
||||
#sch_res_ov:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#sch_res_ov h2 {float:left}
|
||||
#sch_res_ov dl {float:left;margin:0 0 0 10px}
|
||||
#sch_res_ov dt {float:left}
|
||||
#sch_res_ov dd {float:left;margin:0 10px 0 5px}
|
||||
#sch_res_ov p {float:right;margin:0;padding:0;line-height:1em}
|
||||
|
||||
#sch_res_board {margin:0 0 10px;padding-left:1px;width:728px;list-style:none;zoom:1}
|
||||
#sch_res_board:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#sch_res_board li {float:left;margin-bottom:-1px}
|
||||
#sch_res_board a {display:block;position:relative;margin-left:-1px;padding:6px 0 5px;width:181px;border:1px solid #ddd;text-align:center;letter-spacing:-0.1em;line-height:1.2em;cursor:pointer}
|
||||
#sch_res_board a:focus, #sch_res_board a:hover, #sch_res_board a:active {text-decoration:none}
|
||||
#sch_res_board .cnt_cmt {font-weight:normal !important}
|
||||
|
||||
.sch_res_list {margin:0 0 10px;padding:10px 0 15px}
|
||||
.sch_res_list h2 {margin:0 0 15px;font-size:1.2em}
|
||||
.sch_res_list ul {margin:0;padding:0;list-style:none}
|
||||
.sch_res_list li {margin:0 0 10px;padding:0 0 10px;border-bottom:1px solid #e9e9e9}
|
||||
.sch_more {text-align:right}
|
||||
#sch_result_detail {margin:0;padding:15px 0;border:0;text-align:right}
|
||||
#sch_result {padding:10px 0 0 0;border-top:1px solid #cfded8;background:url('../img/sch_result_bg.jpg') repeat-y}
|
||||
#sch_result ul {margin:0;padding:0;list-style:none}
|
||||
#sch_result p {margin:5px 0;padding:0}
|
||||
#sch_result_hd {margin:0;padding:0;zoom:1}
|
||||
#sch_result_hd:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#sch_result_hd dt {float:left;padding:10px 0 15px}
|
||||
#sch_result_hd dd {float:right;margin:0;padding:10px 0 15px}
|
||||
#sch_result_hd ul {float:left}
|
||||
#sch_result_hd li {float:left;padding:0 10px;border-right:1px solid #cfded8}
|
||||
#sch_result_bo {float:left;margin:-1px 0 0;padding:0;width:170px}
|
||||
#sch_result_bo dt {margin:0;padding:0;border:0;font-size:0;line-height:0;overflow:hidden}
|
||||
#sch_result_bo dd {margin:0;padding:0}
|
||||
#sch_result_bo ul {margin-top:1px}
|
||||
#sch_result_bo li {position:relative;margin-top:-1px;height:40px}
|
||||
#sch_result_bo a {position:absolute;padding:0 10px;width:149px;height:40px;border:1px solid #618588;border-right:0;background:#151515;color:#fff;text-decoration:none;line-height:3.4em}
|
||||
#sch_result_bo .sch_on {width:150px;border-color:#cfded8;border-right:0;background:#fff;color:#000;font-weight:bold}
|
||||
#sch_result_bo .cnt_cmt {color:#fff}
|
||||
#sch_result_bo .sch_on .cnt_cmt {color:#000}
|
||||
#sch_result_atc {float:left;margin:-1px 0 0;padding:15px 25px;width:506px;border:1px solid #cfded8;background:#fff}
|
||||
#sch_result_atc dt a {display:inline-block;margin-bottom:15px;color:#000;font-size:1.2em;font-weight:bold;text-decoration:none}
|
||||
#sch_result_atc dd {margin:0 0 15px}
|
||||
#sch_result_atc dd a {}
|
||||
#sch_result_atc .sch_result_title {display:inline-block;margin-bottom:5px;font-size:1.1em;font-weight:bold;text-decoration:underline}
|
||||
#sch_result_atc li {padding:13px 0;border-bottom:1px solid #f0f0f0}
|
||||
#sch_result_atc p {padding:0 0 5px}
|
||||
#sch_result_atc a {display:inline-block;margin:0 10px 0 0}
|
||||
#sch_result_atc .cmt_def {display:inline-block;margin:0 10px 0 0}
|
||||
.sch_more {padding:10px 0 15px;text-align:right}
|
||||
.sch_more a {}
|
||||
.sch_datetime {display:inline-block;margin-right:15px;color:#999}
|
||||
.sch_word {font-weight:bold} /* 검색어 강조 */
|
||||
@ -1,5 +1,5 @@
|
||||
/* 방문자 집계 */
|
||||
#visit {background:#515151}
|
||||
#visit {background:#444}
|
||||
#visit div {margin:0 auto;width:980px;zoom:1}
|
||||
#visit div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#visit h2 {float:left;padding:10px 45px 10px 0;color:#fff}
|
||||
@ -7,4 +7,5 @@
|
||||
#visit dt {float:left;margin:0;padding:10px 0 10px;color:#fff}
|
||||
#visit dd {float:left;margin:0 30px 0 0;padding:10px;color:#fff}
|
||||
#visit a {display:inline-block;padding:10px;color:#fff;text-decoration:none}
|
||||
#visit a:focus, #visit a:hover {background:#333;color:#fff}
|
||||
#visit a:focus,
|
||||
#visit a:hover {background:#333;color:#fff}
|
||||
@ -6,7 +6,7 @@ global $is_admin;
|
||||
|
||||
<link rel="stylesheet" href="<?php echo $visit_skin_url ?>/style.css">
|
||||
|
||||
<aside id="visit">
|
||||
<section id="visit">
|
||||
<div>
|
||||
<h2>접속자집계</h2>
|
||||
<dl>
|
||||
@ -21,4 +21,4 @@ global $is_admin;
|
||||
</dl>
|
||||
<?php if ($is_admin == "super") { ?><a href="<?php echo G4_ADMIN_URL ?>/visit_list.php">상세보기</a><?php } ?>
|
||||
</div>
|
||||
</aside>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user