diff --git a/.htaccess b/.htaccess index 2c09ddc02..17d0d7415 100644 --- a/.htaccess +++ b/.htaccess @@ -44,6 +44,10 @@ RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/rss$ ./index.php?vid=$1&mid=$2&act= RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/atom$ ./index.php?vid=$1&mid=$2&act=atom [L] RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/api$ ./index.php?vid=$1&mid=$2&act=api [L] +# trackback +RewriteRule ^([0-9]+)/(.+)/trackback$ ./index.php?document_srl=$1&key=$2&act=trackback [L] +RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L] + # administrator page RewriteRule ^admin/?$ ./index.php?module=admin [L] diff --git a/addons/autolink/autolink.js b/addons/autolink/autolink.js index fa4478039..59e5dc43d 100644 --- a/addons/autolink/autolink.js +++ b/addons/autolink/autolink.js @@ -11,11 +11,11 @@ jQuery(function($) { if(!pObj) continue; var pN = pObj.nodeName.toLowerCase(); - if($.inArray(pN, ['a', 'pre', 'xml', 'textarea', 'input', 'option', 'code']) != -1) continue; + if($.inArray(pN, ['a', 'pre', 'xml', 'textarea', 'input', 'select', 'option', 'code', 'script', 'style']) != -1) continue; if(obj.nodeType == 3 && obj.length >= 10) { var content = obj.nodeValue; - if(!url_regx.test(content)) continue; + if(!/(http|https|ftp|news|telnet|irc):\/\//i.test(content)) continue; content = content.replace(//g, '>'); @@ -31,6 +31,6 @@ jQuery(function($) { } $('.xe_content').each(function() { - if(url_regx.test($(this).text())) replaceHrefLink(this); + replaceHrefLink(this); }); }); diff --git a/addons/autolink/conf/info.xml b/addons/autolink/conf/info.xml index 47b38d931..4b761de4a 100644 --- a/addons/autolink/conf/info.xml +++ b/addons/autolink/conf/info.xml @@ -12,7 +12,7 @@ 글과 댓글의 내용 중 URL 문자열에 링크를 걸어주는 애드온입니다. - 書き込み本文とコメントに登録された内容の中、httpで始まる一般文字列に自動にリンクを貼り付け、そのリンクにマウスオーバすると、別ウィンドウと同一ウィンドウに開くメニュが現れるアドオンです。 + 書き込み本文とコメントに登録された内容の中、httpで始まる一般文字列に自動にリンクを貼り付け、そのリンクにマウスオーバすると、別ウィンドウ、または同一ウィンドウに開くメニュが現れるアドオンです。 This addon makes a link to a string that starts with http. diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index fdd930159..1fb048c52 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -15,7 +15,7 @@ 사용으로 하셔야 RSD태그 및 api가 동작을 합니다. - MetaWeblogをサポートするBlogAPI アドオンです。 + MetaWeblogをサポートするBlog APIアドオンです。 「使用する」にチェックすると各モジュールごとにRSDのアドレスを表示します。 APIのアドレスは「http://インストールURL/モジュール名/api」です。 「使用する」に設定してから、RSDタグ、およびAPIが作動します。 diff --git a/addons/captcha/captcha.addon.php b/addons/captcha/captcha.addon.php index a3790652c..4fa01548f 100644 --- a/addons/captcha/captcha.addon.php +++ b/addons/captcha/captcha.addon.php @@ -18,6 +18,12 @@ if($logged_info->is_admin == 'Y' || $logged_info->is_site_admin) return; if($addon_info->target != 'all' && Context::get('is_logged')) return; + $target_acts = array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory'); + if($addon_info->apply_find_account=='apply') $target_acts[] = 'procMemberFindAccount'; + + Context::addHtmlHeader(''); + + // 캡챠 인증이 되지 않은 세션이면 실행 시작 if(!$_SESSION['captcha_authed']) { @@ -100,7 +106,7 @@ Context::addJsFile('./addons/captcha/captcha.js',false); // 게시판/ 이슈트래커의 글쓰기/댓글쓰기 액션 호출시 세션 비교 - if(in_array(Context::get('act'), array('procBoardInsertDocument','procBoardInsertComment','procIssuetrackerInsertIssue','procIssuetrackerInsertHistory'))) { + if(in_array(Context::get('act'), $target_acts)) { $this->error = "msg_not_permitted"; } } diff --git a/addons/captcha/captcha.js b/addons/captcha/captcha.js index 32178b61a..bda1a6e40 100644 --- a/addons/captcha/captcha.js +++ b/addons/captcha/captcha.js @@ -33,7 +33,17 @@ var calledArgs = null; body.append(captchaXE); captchaXE.exec = function(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) { - if(act == 'procBoardInsertDocument' || act == 'procBoardInsertComment' || act == 'procIssuetrackerInsertIssue' || act == 'procIssuetrackerInsertHistory') { + var doCheck = false; + if(typeof(captchaTargetAct)!='undefined') { + for(var i in captchaTargetAct) { + if(captchaTargetAct[i]==act) { + doCheck = true; + break; + } + } + } + + if(doCheck) { calledArgs = {'module':module,'act':act,'params':params,'callback_func':callback_func,'response_tags':response_tags,'callback_func_arg':callback_func_arg,'fo_obj':fo_obj}; oldExecXml('captcha','setCaptchaSession',new Array(),captchaXE.show,new Array('error','message','about','keyword')); } else { diff --git a/addons/captcha/conf/info.xml b/addons/captcha/conf/info.xml index 69ff99544..b1c283de1 100644 --- a/addons/captcha/conf/info.xml +++ b/addons/captcha/conf/info.xml @@ -37,7 +37,7 @@ 選擇目標 글/댓글 등록시 captcha가 동작할 대상을 정할 수 있습니다. 관리자는 무조건 제외됩니다 可以指定验证码应用对象(管理员除外)。 - 管理者を除き、書き込み・コメントを入力する際captchaイメージを見せる対象を設定します。 + 管理者を除き、書き込み・コメントを入力する際にcaptchaイメージを見せる対象を設定します。 除了管理員,在發表主題或評論時,設定圖形驗證應用的對象。 로그인하지 않은 사용자 @@ -59,7 +59,7 @@ 行為模式 "1번만 동작"을 선택하시면 1번만 동작후 상태를 저장해서 다음부터 물어보지 않고 그렇지 않으면 매번 물어보게 됩니다 "一次"就是每个IP只出现一次验证。 - "1回だけ表示"を選択すると、1回だけ動作した後、その情報を保存して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。 + 「1回だけ表示」を選択すると、最初だけ動作した後、その情報を記憶して次回からはCaptchaを見せないようにします。また、もう一つのオプションは毎回Captchaを表示します。 選擇"單次",產生第一次動作後,下次不會再顯示;選擇"每次"則會一直顯示。 1번만 동작 @@ -74,5 +74,27 @@ 每次 + + 비밀번호 찾기 적용 + 비밀번호 찾기 적용 + 비밀번호 찾기 적용 + 비밀번호 찾기 적용 + 적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다. + 적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다. + 적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다. + 적용으로 하시면 비밀번호찾기 기능에도 적용되어 악의적인 봇(또는 프로그램)에 의한 메일 발송을 막을 수 있습니다. + + 적용하지 않음 + 적용하지 않음 + 적용하지 않음 + 적용하지 않음 + + + 적용 + 적용 + 적용 + 적용 + + diff --git a/addons/counter/conf/info.xml b/addons/counter/conf/info.xml index aab848e96..22bbd205a 100644 --- a/addons/counter/conf/info.xml +++ b/addons/counter/conf/info.xml @@ -1,7 +1,7 @@ 기본 카운터 애드온 - 接続カウンターアドオン + アクセスカウンターアドオン 网站访问统计 Counter Addon Counter Addon @@ -13,7 +13,7 @@ 이 애드온을 켜셔야 접속 정보 수집이 됩니다. - XEの接続カウンターモジュールで接続(アクセス)情報を記録します。 + XEのアクセスカウンターモジュールで接続(アクセス)情報を記録します。 このアドオンを「使用」に設定してから、接続(アクセス)情報が記録されます。 diff --git a/addons/keyword_link/conf/info.xml b/addons/keyword_link/conf/info.xml index fdea2cfa0..832225072 100644 --- a/addons/keyword_link/conf/info.xml +++ b/addons/keyword_link/conf/info.xml @@ -56,7 +56,7 @@ 替换部分的jQuery cssquery。 如果正使用的是官方默认皮肤(xe_board),此处留空即可。 置換する部分のjQuery cssqueryです。 - xe_board掲示板スキンの場合は空白にして下さい。 + 「xe_board掲示板スキン」の場合は空白にして下さい。 jQuery cssquery for the part to be substituted. You may leave blank for xe_board skin. @@ -73,7 +73,7 @@ 키워드가 여러개 있을때 "첫번째 키워드"에만 링크를 걸 것인지 "모든 키워드"에 걸 것인지 선택합니다. - 複数のキーワードの場合、"最初のキーワード"のみ、もしくは "全てのキーワード"にリンクを貼りつけるかを設定します。 + 複数のキーワードの場合、「最初のキーワード」のみ、もしくは「全てのキーワード」にリンクを貼りつけるかを設定します。 For the multiple keywords, choose if make a link to the first keyword, or all the keywords diff --git a/addons/lemonpen/conf/info.xml b/addons/lemonpen/conf/info.xml index 15287c0f1..b52207438 100644 --- a/addons/lemonpen/conf/info.xml +++ b/addons/lemonpen/conf/info.xml @@ -14,7 +14,7 @@ You can insert LemonPen to the site when you enable this. Puede insertar LemonPen al sitio cuando este se activa. Вы можете вставить LemonPen к месту, когда вы позволили это. - 機能をオンにすると、サイト上でレモンペンを使うことが出来ます。 (LemonPen:Openmaru社のサービス) + 機能をオンにすると、サイト上でレモンペンを使います。 (LemonPen:Openmaru社のサービス) 想要在網站使用LemonPen,請將其啟用。 0.1 2007-12-10 @@ -46,7 +46,7 @@ Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen. Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen. Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen. - レモンペンのサイトから発行されたsidを入力して下さい。 (LemonPen:Openmaru社のサービス) + レモンペンのサイトから発行されたsid値を入力して下さい。 (LemonPen:Openmaru社のサービス) 請輸入在LemonPen網站註冊時,所給予的sid值。 diff --git a/addons/member_communication/conf/info.xml b/addons/member_communication/conf/info.xml index ee6ea0d5a..7d97853a2 100644 --- a/addons/member_communication/conf/info.xml +++ b/addons/member_communication/conf/info.xml @@ -13,7 +13,6 @@ 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. - コミュニケーションモジュールを活性化して、メッセージや友達機能を使えるようにします。 メッセージ・友達機能を使うにはこのアドオンを「使用」にして下さい。 diff --git a/addons/member_communication/lang/jp.lang.php b/addons/member_communication/lang/jp.lang.php index f7dceef07..7ff03c9fe 100644 --- a/addons/member_communication/lang/jp.lang.php +++ b/addons/member_communication/lang/jp.lang.php @@ -1,3 +1,3 @@ alert_new_message_arrived = '%d個の新しいメッセージが届きました。'; + $lang->alert_new_message_arrived = '%d個の新しいメッセージが届いています。 確認しますか?'; ?> diff --git a/addons/mobile/classes/mhtml.class.php b/addons/mobile/classes/mhtml.class.php index b34a7f9cb..185bf2da5 100644 --- a/addons/mobile/classes/mhtml.class.php +++ b/addons/mobile/classes/mhtml.class.php @@ -1,7 +1,7 @@ + * @author zero / lang_select : misol **/ class wap extends mobileXE { @@ -16,13 +16,15 @@ * @brief hdml 헤더 출력 **/ function printHeader() { - print("\n"); + print("\n"); + if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); + printf("%s%s\n", htmlspecialchars($this->title),htmlspecialchars($titlePageStr)); } // 제목을 출력 function printTitle() { if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); - printf('<%s%s>
%s', $this->title,$titlePageStr,"\n"); + printf('<%s%s>
%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n"); } /** @@ -34,14 +36,16 @@ foreach($this->getChilds() as $key => $val) { if(!$val['link']) continue; printf('%s
%s', $val['href'], $this->getNo(), $val['text'], "\n"); + if($val['extra']) printf("
%s\n",str_replace('
','
',$val['extra'])); } } else { - print $this->getContent()."\n"; - } + print(str_replace('
','
',$this->getContent())."\n"); + } + print "

"; } /** - * @brief 버튼을 출력함 + * @brief 버튼을 출력함 **/ function printBtn() { if($this->nextUrl) { @@ -52,19 +56,27 @@ $url = $this->prevUrl; printf('%s
%s', $url->url, $url->text, "\n"); } + // 언어선택 + if(!parent::isLangChange()){ + $url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url')); + printf('%s
%s', $url, 'Language : '.Context::getLang('select_lang'), "\n"); + } + else { + printf('%s
%s', Context::get('return_uri'), Context::getLang('lang_return'), "\n"); + } if($this->upperUrl) { $url = $this->upperUrl; printf('%s', $url->url, $url->text, "\n"); } if($this->homeUrl) { $url = $this->homeUrl; - printf('%s%s', $url->text, $url->url, $url->text, "\n"); + printf('%s
%s', $url->text, $url->url, $url->text, "\n"); } } // 푸터 정보를 출력 function printFooter() { - print("\n"); + print("\n"); } } ?> diff --git a/addons/mobile/classes/mobile.class.php b/addons/mobile/classes/mobile.class.php index bc5974fdb..c6fb93172 100644 --- a/addons/mobile/classes/mobile.class.php +++ b/addons/mobile/classes/mobile.class.php @@ -1,7 +1,7 @@ + * @author zero / lang_select : misol * @brief WAP 태그 출력을 위한 XE 라이브러리 **/ @@ -12,6 +12,7 @@ var $upperUrl = NULL; var $nextUrl = NULL; var $prevUrl = NULL; + var $etcBtn = NULL; // 메뉴 네비게이션을 위한 변수 var $childs = null; @@ -21,7 +22,7 @@ var $content = NULL; var $mobilePage = 0; var $totalPage = 1; - var $charset = 'euc-kr'; + var $charset = 'UTF-8'; var $no = 0; // 네비게이션 관련 변수 @@ -42,6 +43,9 @@ // Deck size var $deckSize = 1024; + // 언어 설정 변경 + var $languageMode = 0; + var $lang = null; /** * @brief getInstance **/ @@ -56,6 +60,13 @@ $class_file = sprintf('%saddons/mobile/classes/%s.class.php', _XE_PATH_, $browserType); require_once($class_file); + // 모바일 언어설정 로드(쿠키가 안되어 생각해낸 방법...-캐시파일 재생성을 클릭하면 초기화된다..) + $this->lang = FileHandler::readFile('./files/cache/addons/mobile/setLangType/personal_settings/'.md5(trim($_SERVER['HTTP_USER_AGENT']).trim($_SERVER['HTTP_PHONE_NUMBER']).trim($_SERVER['HTTP_HTTP_PHONE_NUMBER'])).'.php'); + if($this->lang) { + $lang_supported = Context::get('lang_supported'); + $this->lang = str_replace(array(''),array('',''),$this->lang); + if(isset($lang_supported[$this->lang])) Context::setLangType($this->lang); + } Context::loadLang(_XE_PATH_.'addons/mobile/lang'); $instance = new wap(); @@ -64,6 +75,7 @@ if(!$mobilePage) $mobilePage = 1; $instance->setMobilePage($mobilePage); + } return $instance; @@ -74,8 +86,15 @@ **/ function mobileXE() { // navigation mode 체크 - if(Context::get('nm')) $this->navigationMode = 1; - $this->cmid = (int)Context::get('cmid'); + if(Context::get('nm')) { + $this->navigationMode = 1; + $this->cmid = (int)Context::get('cmid'); + } + + if(Context::get('lcm')) { + $this->languageMode = 1; + $this->lang = Context::get('sel_lang'); + } } /** @@ -86,6 +105,30 @@ return ($this->navigationMode && $this->module_info->menu_srl)?true:false; } + /** + * @brief langchange mode 체크 + * languageMode 세팅 있어야 true return + **/ + function isLangChange() { + if($this->languageMode) return true; + else return false; + } + + /** + * @brief 언어 설정 + * 쿠키가 안되기 때문에 휴대전화마다 고유한 파일로 언어설정을 저장하는 파일 생성 + **/ + function setLangType() { + $lang_supported = Context::get('lang_supported'); + // 언어 변수가 있는지 확인하고 변수가 유효한지 확인 + if($this->lang && isset($lang_supported[$this->lang])) { + $langbuff = FileHandler::readFile('./files/cache/addons/mobile/setLangType/personal_settings/'.md5(trim($_SERVER['HTTP_USER_AGENT']).trim($_SERVER['HTTP_PHONE_NUMBER']).trim($_SERVER['HTTP_HTTP_PHONE_NUMBER'])).'.php'); + if($langbuff) FileHandler::removeFile('./files/cache/addons/mobile/setLangType/personal_settings/'.md5(trim($_SERVER['HTTP_USER_AGENT']).trim($_SERVER['HTTP_PHONE_NUMBER']).trim($_SERVER['HTTP_HTTP_PHONE_NUMBER'])).'.php'); + $langbuff = 'lang.'**/ ?>'; + FileHandler::writeFile('./files/cache/addons/mobile/setLangType/personal_settings/'.md5(trim($_SERVER['HTTP_USER_AGENT']).trim($_SERVER['HTTP_PHONE_NUMBER']).trim($_SERVER['HTTP_HTTP_PHONE_NUMBER'])).'.php',$langbuff); + } + } + /** * @brief 현재 요청된 모듈 정보 세팅 **/ @@ -108,7 +151,7 @@ if(!file_exists($menu_cache_file)) return; include $menu_cache_file; - + // 정리된 menu들을 1차원으로 변경 $this->getListedItems($menu->list, $listed_items, $node_list); @@ -138,13 +181,16 @@ * 모바일 브라우저가 아닐 경우 null return **/ function getBrowserType() { + if(Context::get('smartphone')) return null; // 브라우저 타입을 판별 $browserAccept = $_SERVER['HTTP_ACCEPT']; $userAgent = $_SERVER['HTTP_USER_AGENT']; $wap_sid = $_SERVER['HTTP_X_UP_SUBNO']; - if(eregi("SKT11", $userAgent)) return "wml"; - elseif(eregi("skt", $browserAccept)) return "wml"; + if(eregi("SKT11", $userAgent) || eregi("skt", $browserAccept)) { + Context::set('mobile_skt',1); + return "wml"; + } elseif(eregi("hdml", $browserAccept)) return "hdml"; elseif(eregi("CellPhone", $userAgent)) return "mhtml"; return null; @@ -153,8 +199,12 @@ /** * @brief charset 지정 **/ - function setCharSet($charset = 'euc-kr') { - if(!$charset) $charset = 'euc-kr'; + function setCharSet($charset = 'UTF-8') { + if(!$charset) $charset = 'UTF-8'; + + //SKT는 euc-kr만 지원 + if(Context::get('mobile_skt')==1) $charset = 'euc-kr'; + $this->charset = $charset; } @@ -220,7 +270,9 @@ * @brief title 지정 **/ function setTitle($title) { + $oModuleController = &getController('module'); $this->title = $title; + $oModuleController->replaceDefinedLangCode($this->title); } /** @@ -235,11 +287,12 @@ * HTML 컨텐츠에서 텍스트와 링크만 추출하는 기능 **/ function setContent($content) { - // 링크/줄바꿈을 임의의 문자열로 변경하고 태그 모두 제거 - $content = strip_tags(preg_replace('/<(\/?)(a|br)/i','[$1$2', $content)); + $oModuleController = &getController('module'); + $allow_tag_array = array('','
','

','','','','','','','','','',' -{@$_idx++} - - -
'); - // 링크/줄바꿈을 다시 원위치 - $content = preg_replace('/\[(\/?)(a|br)/i','<$1$2', $content); + + // 링크/ 줄바꿈, 강조만 제외하고 모든 태그 제거 + $content = strip_tags($content, implode($allow_tag_array)); // 탭 여백 제거 $content = str_replace("\t", "", $content); @@ -247,7 +300,9 @@ // 2번 이상 반복되는 공백과 줄나눔을 제거 $content = preg_replace('/( ){2,}/s', '', $content); $content = preg_replace("/([\r\n]+)/s", "\r\n", $content); - $content = str_replace(array("","
","
"), array("","
","
"), $content); + $content = preg_replace(array("/","
"), array("
","
"), $content); + while(strpos($content, '

')) { $content = str_replace('

','
',$content); } @@ -261,11 +316,21 @@ //$content = str_replace(array('&','<','>','"','&nbsp;'), array('&','<','>','"',' '), $content); - $tag_open_pos = strpos($content, ''); + foreach($allow_tag_array as $tag) { + if($tag == '
') continue; + $tag_open_pos = strpos($content, str_replace('>','',$tag)); + $tag_close_pos = strpos($content, str_replace('<','content = $contents[$this->mobilePage-1]; + $oModuleController->replaceDefinedLangCode($this->content); + $content = str_replace(array('$','\''), array('$$','''), $content); } /** @@ -337,6 +404,16 @@ $this->nextUrl->text = $text; } + /** + * @brief 다음, 이전, 상위 이외에 기타 버튼 지정 + **/ + function setEtcBtn($url, $text) { + if(!$url) $url = '#'; + $etc['url'] = $url; + $etc['text'] = htmlspecialchars($text); + $this->etcBtn[] = $etc; + } + /** * @brief display **/ @@ -345,7 +422,7 @@ $this->setHomeUrl(getUrl(), Context::getLang('cmd_go_home')); // 제목 지정 - $this->setTitle(Context::getBrowserTitle()); + if(!$this->title) $this->setTitle(Context::getBrowserTitle()); ob_start(); @@ -368,7 +445,7 @@ // 변환 후 출력 if(strtolower($this->charset) == 'utf-8') print $content; - else print iconv('UTF-8',$this->charset, $content); + else print iconv('UTF-8',$this->charset."//TRANSLIT", $content); exit(); } @@ -451,6 +528,38 @@ $this->display(); } + /** + * @brief 언어설정 메뉴 출력 + **/ + function displayLangSelect() { + $childs = array(); + + $this->lang = FileHandler::readFile('./files/cache/addons/mobile/setLangType/personal_settings/'.md5(trim($_SERVER['HTTP_USER_AGENT']).trim($_SERVER['HTTP_PHONE_NUMBER']).trim($_SERVER['HTTP_HTTP_PHONE_NUMBER'])).'.php'); + if($this->lang) { + $this->lang = str_replace(array(''),array('',''),$this->lang); + Context::setLangType($this->lang); + } + $lang_supported = Context::get('lang_supported'); + $lang_type = Context::getLangType(); + $obj = null; + $obj['link'] = $obj['text'] = Context::getLang('president_lang').' : '.$lang_supported[$lang_type]; + $obj['href'] = getUrl('sel_lang',$lang_type); + $childs[] = $obj; + + if(is_array($lang_supported)) { + foreach($lang_supported as $key => $val) { + $obj = null; + $obj['link'] = $obj['text'] = $val; + $obj['href'] = getUrl('sel_lang',$key); + $childs[] = $obj; + } + } + + $this->setChilds($childs); + + $this->display(); + } + /** * @brief 모듈의 WAP 클래스 객체 생성하여 WAP 준비 **/ diff --git a/addons/mobile/classes/wml.class.php b/addons/mobile/classes/wml.class.php index c01365e41..2d9c8821e 100644 --- a/addons/mobile/classes/wml.class.php +++ b/addons/mobile/classes/wml.class.php @@ -1,7 +1,7 @@ + * @author zero / lang_select : misol **/ class wap extends mobileXE { @@ -18,8 +18,10 @@ function printHeader() { header("Content-Type: text/vnd.wap.wml"); header("charset: ".$this->charset); + if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); print("charset."\"?>\n"); - print("\n\n

\n"); + // 카드제목 + printf("\n\n

\n",htmlspecialchars($this->title),htmlspecialchars($titlePageStr)); } /** @@ -27,7 +29,7 @@ **/ function printTitle() { if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); - printf('<%s%s>
%s', $this->title,$titlePageStr,"\n"); + printf('<%s%s>
%s', htmlspecialchars($this->title),htmlspecialchars($titlePageStr),"\n"); } /** @@ -38,24 +40,42 @@ if($this->hasChilds()) { foreach($this->getChilds() as $key => $val) { if(!$val['link']) continue; - printf('%s', $this->getNo(), $val['text'], $val['href'], "\n"); + printf('%s', $this->getNo(), htmlspecialchars($val['text']), $val['href'], "\n"); + if($val['extra']) printf("%s\n",$val['extra']); } } else { printf('%s
%s', str_replace("
","
",$this->getContent()),"\n"); - } + } + print('
'); } /** - * @brief 버튼을 출력함 + * @brief 버튼을 출력함 **/ function printBtn() { if($this->nextUrl) { $url = $this->nextUrl; - printf('%s', $this->getNo(), $url->text, $url->url, "\n"); + printf('%s', $url->text, $url->url, "\n"); } if($this->prevUrl) { $url = $this->prevUrl; - printf('%s', $this->getNo(), $url->text, $url->url, "\n"); + printf('%s', $url->text, $url->url, "\n"); + } + // 기타 해당사항 없는 버튼 출력 담당 (array로 전달) type?? + if($this->etcBtn) { + if(is_array($this->etcBtn)) { + foreach($this->etcBtn as $key=>$val) { + printf('%s', $key, $val['text'], $val['url'], "\n"); + } + } + } + // 언어선택 + if(!parent::isLangChange()){ + $url = getUrl('','lcm','1','sel_lang',Context::getLangType(),'return_uri',Context::get('current_url')); + printf('%s', 'Language : '.Context::getLang('select_lang'), $url, "\n"); + } + else { + printf('%s', Context::getLang('lang_return'), Context::get('return_uri'), "\n"); } if($this->homeUrl) { $url = $this->homeUrl; @@ -74,7 +94,12 @@ // 목록등에서 일련 번호를 리턴한다 function getNo() { - return "vnd.skmn".parent::getNo(); + if(Context::get('mobile_skt')==1) { + return "vnd.skmn".parent::getNo(); + } + else { + return parent::getNo(); + } return $str; } } diff --git a/addons/mobile/conf/info.xml b/addons/mobile/conf/info.xml index 2efec6126..5dff68f47 100644 --- a/addons/mobile/conf/info.xml +++ b/addons/mobile/conf/info.xml @@ -1,72 +1,86 @@ - - - 모바일XE 애드온 - モバイルXEアドオン - 手机XE插件 - Mobile XE - XE行動上網 - - 모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다. - wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다. - - - モバイル端末機からアクセス時、ヘッダー(header)情報を分析してメニュー - モジュールの関係を利用してWAPタグに変換表示するアドオンです。 - wml, hdml, mhtmlをサポートし、その以外は対応していません。 - - - 通过手机访问网站时将网页输出为WAP标签的插件。 - 支持语言:wml, hdml, mhtml - - - This addon displays WAP tag by analyzing header information on mobile connection. - Only wml, hdml, mhtml formats are provided. - - - 透過行動工具上網時,會將網頁轉換為WAP標籤顯示。 - 只限於 wml, hdml, mhtml格式。 - - 0.1 - 2008-06-20 - - - zero - zero - zero - zero - zero - - - - - 문자셋 - 文字コード - 编码 - Charset - 編碼 - - 모바일 기기의 경우 utf-8 문자셋을 인식하지 못할 수 있습니다. - 문자셋에 원하시는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다. - 기본값은 euc-kr입니다. - - - ある特定のモバイル機器ではutf-8文字コードの認識が出来ない場合があります。 - 文字コードを設定すると、該当文字コードに自動変換して正常に表示出来るようになります。 - 本アドオンのデフォルト値はeuc-krです。 - - - 手机有时无法识别utf-8编码,这时输入相应的编码值即可自动转换。 - 默认编码为euc-kr。 - - - utf-8 cannot be read for mobile tools. - Mobile tools will display correct charset when you input charset you want. - Default charset is euc-kr. - - - 行動工具無法讀取utf-8編碼。 - 當您輸入所想要的編碼時,行動工具將會正確的顯示。 - 預設編碼是euc-kr. - - - - + + + 모바일XE 애드온 + モバイルXEアドオン + 手机XE插件 + Mobile XE + XE行動上網 + + 모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다. + wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다. + + + モバイル端末機からアクセス時、ヘッダー(header)情報を分析して「メニュー」と「モジュール」の関係を利用してWAPタグに変換表示するアドオンです。 + wml, hdml, mhtmlをサポートし、その以外は対応していません。 + + + 通过手机访问网站时将网页输出为WAP标签的插件。 + 支持语言:wml, hdml, mhtml + + + This addon displays WAP tag by analyzing header information on mobile connection. + Only wml, hdml, mhtml formats are provided. + + + 透過行動工具上網時,會將網頁轉換為WAP標籤顯示。 + 只限於 wml, hdml, mhtml格式。 + + 0.1.1 + 2009-05-23 + + + zero + zero + zero + zero + zero + + + + + misol + misol + misol + misol + misol + + 언어선택 추가(WML, mHTML) + 인코딩 설정 개선 + 그 외 소소한 개선들 + + + + + 문자셋 + 文字コード + 编码 + Charset + 編碼 + + 모바일 기기의 경우 UTF-8 문자셋을 인식하지 못할 수 있습니다. + 문자셋에 원하시는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다. + 기본값은 UTF-8입니다. + (*SK Telecom 휴대전화의 경우 euc-kr인코딩만 지원하므로, 강제로 euc-kr인코딩만 지원합니다.) + + + ある特定のモバイル機器ではutf-8文字コードの認識が出来ない場合があります。 + 文字コードを設定すると、(日本語だけの場合)該当文字コードに自動変換して正常に表示出来るようになります。 + 本アドオンのデフォルト値はUTF-8で、日本の携帯はshift-jisが一般的です。 + + + 手机有时无法识别utf-8编码,这时输入相应的编码值即可自动转换。 + 默认编码为UTF-8。 + + + utf-8 cannot be read for mobile tools. + Mobile tools will display correct charset when you input charset you want. + Default charset is UTF-8. + + + 行動工具無法讀取utf-8編碼。 + 當您輸入所想要的編碼時,行動工具將會正確的顯示。 + 預設編碼是UTF-8. + + + + diff --git a/addons/mobile/lang/en.lang.php b/addons/mobile/lang/en.lang.php index 977217ca8..a0c93fd16 100644 --- a/addons/mobile/lang/en.lang.php +++ b/addons/mobile/lang/en.lang.php @@ -4,6 +4,10 @@ * @author zero (zero@nzeo.com) * @brief English Language Pack (Basic Contents only) **/ + // lang select by misol + $lang->president_lang = 'selected Language'; + $lang->select_lang = 'select Language'; + $lang->lang_return = 'Go Back'; $lang->cmd_go_upper = 'Upper'; $lang->cmd_go_home = 'Go Home'; diff --git a/addons/mobile/lang/jp.lang.php b/addons/mobile/lang/jp.lang.php index eb2715145..697c560e6 100644 --- a/addons/mobile/lang/jp.lang.php +++ b/addons/mobile/lang/jp.lang.php @@ -5,7 +5,7 @@ * @brief 日本語言語パッケージ **/ - $lang->cmd_go_upper = '上位'; + $lang->cmd_go_upper = '上位メニュー'; $lang->cmd_go_home = 'トップへ'; $lang->cmd_view_sitemap = 'サイトマップ'; ?> diff --git a/addons/mobile/lang/ko.lang.php b/addons/mobile/lang/ko.lang.php index 6b20e1f0f..f0b28dc0f 100644 --- a/addons/mobile/lang/ko.lang.php +++ b/addons/mobile/lang/ko.lang.php @@ -5,7 +5,13 @@ * @brief 한국어 언어팩 (기본적인 내용만 수록) **/ + // 언어 선택부분 by misol + $lang->president_lang = '현재 언어'; + $lang->select_lang = '언어 선택'; + $lang->lang_return = '돌아가기'; + $lang->cmd_go_upper = '상위'; $lang->cmd_go_home = '홈으로'; $lang->cmd_view_sitemap = '사이트맵 보기'; + ?> diff --git a/addons/mobile/mobile.addon.php b/addons/mobile/mobile.addon.php index 02169f752..3c1f2b50b 100644 --- a/addons/mobile/mobile.addon.php +++ b/addons/mobile/mobile.addon.php @@ -42,6 +42,11 @@ // 네비게이트 모드이거나 WAP class가 있을 경우 미리 컨텐츠를 추출하여 출력/ 종료 if($called_position == 'before_module_proc') { + if($oMobile->isLangChange()) { + $oMobile->setLangType(); + $oMobile->displayLangSelect(); + } + // 네비게이트 모드이면 네비게이션 컨텐츠 출력 if($oMobile->isNavigationMode()) $oMobile->displayNavigationContent(); diff --git a/addons/point_level_icon/conf/info.xml b/addons/point_level_icon/conf/info.xml index f51af83c7..68d8dafe2 100644 --- a/addons/point_level_icon/conf/info.xml +++ b/addons/point_level_icon/conf/info.xml @@ -17,8 +17,8 @@ 级别图标可以在模块 > 积分系统中进行选择。 - ポイントシステムを使用する場合、ユーザ名の前にレベルアイコンの表示が出来ます。 - レベルアイコンは、「モジュール > ポイントシステム」で選択出来ます。 + ポイントシステムを使用する場合、ユーザ名の前にレベルアイコンの表示します。 + レベルアイコンは、「モジュール > ポイントシステム」で選択します。 This addon displays level icon in front of the user name when you are using the point system. diff --git a/addons/resize_image/conf/info.xml b/addons/resize_image/conf/info.xml index 0f341bd1d..77d3c646e 100644 --- a/addons/resize_image/conf/info.xml +++ b/addons/resize_image/conf/info.xml @@ -12,7 +12,7 @@ 본문내에 삽입된 이미지의 크기를 본문크기에 맞게 하고 클릭시 원본을 보여주는 애드온입니다. - 本文内に挿入されたイメージのサイズを本文の幅サイズに合わせてリーサイズし、クリックした時、オリジナルサイズのイメージを表示するアドオンです。 + 本文内に挿入されたイメージのサイズを本文の幅サイズに合わせてリーサイズし、クリックした時、オリジナルサイズのイメージを表示します。 自动调整主题内容区内的图片大小,点击将显示原始大小的插件。 diff --git a/addons/resize_image/js/resize_image.js b/addons/resize_image/js/resize_image.js index dd3ecd111..9f8b5982e 100644 --- a/addons/resize_image/js/resize_image.js +++ b/addons/resize_image/js/resize_image.js @@ -157,48 +157,50 @@ function slideshow(event) { xScreen.xeShow(); } -$(window).load(function(){ +$(document).ready(function(){ var regx_skip = /(?:modules|addons|classes|common|layouts|libs|widgets)/i; var regx_parent = /(?:document|comment)_[0-9]+_[0-9]+/i; - var xe_content = $(".xe_content"); - var overflow = xe_content.css("overflow"); - var width = xe_content.css("width"); - xe_content.css("overflow","hidden"); - xe_content.css("width","100%"); - var offsetWidth = xe_content.attr("offsetWidth"); - xe_content.css("overflow",overflow); - xe_content.css("width",width); + $(".xe_content").each(function() { + $(this).find("img").each(function(){ + var img = $(this); + var width = img.attr("width"); + if(!width) width = img.width(); + img.attr("orig_width",width); + img.attr("width",1); + }); + var offsetWidth = $(this).width(); - // 이미지 목록을 가져와서 리사이즈 - $(".xe_content img").each(function(){ - var img = $(this); - var src = img.attr("src"); - var width = img.attr("width"); - var height = img.attr("height"); - - // XE 내부 프로그램 또는 스킨의 이미지라면 이미지 리사이즈를 하지 않음 - if ( regx_skip.test(src) ) return; - - // 커스텀 속성 추가 - img.attr("rel", "xe_gallery"); - - // 크기를 계산한다 - if(width>offsetWidth) { - img.attr("width",offsetWidth-1); - img.attr("height",parseInt(offsetWidth/width*height,10)); - } - - // 링크가 설정되어 있거나 onclick 이벤트가 부여되어 있으면 원본 보기를 하지 않음 - if ( !img.parent("a").size() && !img.attr("onclick") ) { - // 스타일 설정 - img.css("cursor", "pointer"); + $(this).find("img").each(function(){ + var img = $(this); + var src = img.attr("src"); + img.attr("width",img.attr("orig_width")); + img.removeAttr("orig_width",''); + var width = img.attr("width"); + var height = img.attr("height"); - // 클릭하면 슬라이드쇼 시작 - img.click(slideshow); - } + // XE 내부 프로그램 또는 스킨의 이미지라면 이미지 리사이즈를 하지 않음 + if ( !regx_skip.test(src) ) { + // 커스텀 속성 추가 + img.attr("rel", "xe_gallery"); - }); + // 크기를 계산한다 + if(width>offsetWidth) { + img.attr("width",offsetWidth-10); + img.attr("height",parseInt(offsetWidth/width*height,10)); + } + + // 링크가 설정되어 있거나 onclick 이벤트가 부여되어 있으면 원본 보기를 하지 않음 + if ( !img.parent("a").size() && !img.attr("onclick") ) { + // 스타일 설정 + img.css("cursor", "pointer"); + + // 클릭하면 슬라이드쇼 시작 + img.click(slideshow); + } + } + }); + }); }); })(jQuery); diff --git a/addons/smartphone/classes/smartphone.class.php b/addons/smartphone/classes/smartphone.class.php index 9ba8f7f0f..652a33898 100644 --- a/addons/smartphone/classes/smartphone.class.php +++ b/addons/smartphone/classes/smartphone.class.php @@ -1,106 +1,134 @@ oModule = $oModule; + $this->module_info = $module_info; + + if(!$this->module_info->menu_srl) { + $oMenuModel = &getAdminModel('menu'); + $menus = $oMenuModel->getMenus($this->module_info->site_srl); + if($menus[0]) $this->module_info->menu_srl = $menus[0]->menu_srl; + } + + if($this->module_info->menu_srl) { + $menu_cache_file = sprintf(_XE_PATH_.'files/cache/menu/%d.php', $this->module_info->menu_srl); + if(!file_exists($menu_cache_file)) return; + @include $menu_cache_file; + Context::addHtmlHeader(sprintf('', $this->_getAllItems($menu->list))); + $this->_setParentUrl($menu->list); } } - function setModuleInstance(&$oModule) { - if($this->oModule) return; - $this->oModule = $oModule; + function _setParentUrl($menu_list) { + if(!count($menu_list)) return; + foreach($menu_list as $key => $val) { + if(!$val['text']) continue; + if($val['list'] && $this->_setParentUrl($val['list'])) { + $href = $val['href']; + if(preg_match('/^[a-z0-9_]+$/i',$val['url'])) $href = getUrl('','mid',$val['url'],'smartphone','true'); + else $href = $val['href']; + $this->setParentUrl($href); + return false; + } + if($val['url']==Context::get('mid')) return true; + } + return false; + } + + function _getAllItems($menu_list, $depth=0) { + if(!count($menu_list)) return; + $output = ''; + + foreach($menu_list as $menu_item) + { + if($output) $output .= ","; + $key = $menu_item['text']; + $val = $menu_item['url']; + if($menu_item['list']) { + $childs = '{'.$this->_getAllItems($menu_item['list'], $depth+1).'}'; + } else { + $childs = 'null'; + } + + $output .= sprintf('"%s" : { "url" : "%s", "childs" : %s } ',str_replace('"','\"',$key), str_replace('"','\"',$val), $childs); + } + return $output; + } + + function procSmartPhone($msg = null) { + if(preg_match('/(iPopd|iPhone)/',$_SERVER['HTTP_USER_AGENT'])) { + Context::addHtmlHeader(''); + } else if(preg_match('/PPC/',$_SERVER['HTTP_USER_AGENT'])) { + Context::addHtmlHeader(''); + } + + if(is_a($this->output, 'Object') || is_subclass_of($this->output, 'Object') || $msg) { + if($msg) $this->setContent(Context::getLang($msg)); + else $this->setContent($this->output->getMessage()); + return; + } + + if($this->haveSmartphoneModule($this->module_info->module)) { + $oSmartPhoneModule =& getModule($this->module_info->module, 'smartphone'); + $vars = get_object_vars($this->oModule); + if(count($vars)) foreach($vars as $key => $val) $oSmartPhoneModule->{$key} = $val; + $oSmartPhoneModule->procSmartPhone($this); + } else { + switch(Context::getLangType()) { + case 'ko' : + $msg = '스마트폰을 지원하지 않는 모듈입니다'; + break; + case 'jp' : + $msg = 'このモジュールをサポートしていません。'; + break; + case 'zh-TW' : + $msg = '該模塊不支持。'; + break; + case 'zh-CN' : + $msg = '该模块不支持。'; + break; + default : + $msg = 'This module is not supported.'; + break; + } + $this->setContent($msg); + } } function setContent($content) { $this->content = $content; } - function setModuleInfo(&$module_info) - { - if($this->module_info) return; - $this->module_info = $module_info; + function setParentUrl($url) { + $this->parent_url = $url; } - function procSmartPhone() - { - if(!$this->module_info) return; - $oModule =& getModule($this->module_info->module, 'smartphone'); - if(!$oModule || !method_exists($oModule, 'procSmartPhone') ) return; - $vars = get_object_vars($this->oModule); - if(count($vars)) foreach($vars as $key => $val) $oModule->{$key} = $val; - return $oModule->procSmartPhone($this); + function setPrevUrl($url) { + $this->prev_url = $url; } - function getAllItems(&$menu_list, $node_srl = 0, $node_text= "Main Menu") - { - if($node_srl == 0) $this->menuList = array(); - - $obj = null; - $obj->text = $node_text; - $obj->list = array(); - foreach($menu_list as $menu_node_srl => $menu_item) - { - $it = null; - if(!preg_match('/^([a-zA-Z0-9\_\-]+)$/', $menu_item['url'])) { continue; } - if($menu_item["list"] && count($menu_item["list"]) > 0) - { - $this->getAllItems($menu_item["list"], $menu_node_srl, $menu_item["text"]); - } - $it->text = $menu_item["text"]; - $it->url = $menu_item["url"]; - $obj->list[$menu_node_srl] = $it; - } - $this->menuList[$node_srl] = $obj; + function setNextUrl($url) { + $this->next_url = $url; } - function setMenu() - { - $menu_cache_file = sprintf(_XE_PATH_.'files/cache/menu/%d.php', $this->module_info->menu_srl); - if(!file_exists($menu_cache_file)) return; - - include $menu_cache_file; - - $this->getAllItems($menu->list); - Context::set('menus', $this->menuList); - } - - function display() - { - Context::set('layout', 'none'); - $act = Context::get('act'); - if($act) - { - $content = $this->procSmartPhone(); - } - else - { - Context::set('module_info', $this->module_info); - $this->setMenu(); - $oModule =& getModule($this->module_info->module, 'smartphone'); - if($oModule && method_exists($oModule, 'procSmartPhone') ) Context::set('bHavePhoneMethod', true); - $oTemplate = new TemplateHandler(); - $oContext = &Context::getInstance(); - $content = $oTemplate->compile(_XE_PATH_."addons/smartphone/tpl", "layout"); - } - print $content; - - exit(); - } } ?> diff --git a/addons/smartphone/conf/info.xml b/addons/smartphone/conf/info.xml index a894d840e..55552e395 100644 --- a/addons/smartphone/conf/info.xml +++ b/addons/smartphone/conf/info.xml @@ -1,12 +1,22 @@ SmartphonePhone XE 애드온 + SmartphonePhone XE + SmartphonePhone XE アドオン IPhone (touch) 등, smartphone 에서 접속시 최적화된 화면을 보여줍니다. + + 以 IPhone (touch) 和 smartphone 瀏覽時會以最適當的畫面顯示。 + + + IPhone(touch)など、スマートフォンからアクセスした時、最適化されたインターフェースで表示させます。 + 0.1 2009-04-20 haneul + haneul + haneul diff --git a/addons/smartphone/iui/LICENSE.txt b/addons/smartphone/iui/LICENSE.txt deleted file mode 100644 index c43b26eec..000000000 --- a/addons/smartphone/iui/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2007, iUI Project Members - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the iUI Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/addons/smartphone/iui/backButton.png b/addons/smartphone/iui/backButton.png deleted file mode 100644 index e27ea8cdf..000000000 Binary files a/addons/smartphone/iui/backButton.png and /dev/null differ diff --git a/addons/smartphone/iui/blueButton.png b/addons/smartphone/iui/blueButton.png deleted file mode 100644 index 0f92dfd94..000000000 Binary files a/addons/smartphone/iui/blueButton.png and /dev/null differ diff --git a/addons/smartphone/iui/cancel.png b/addons/smartphone/iui/cancel.png deleted file mode 100644 index 5f6dcc87d..000000000 Binary files a/addons/smartphone/iui/cancel.png and /dev/null differ diff --git a/addons/smartphone/iui/grayButton.png b/addons/smartphone/iui/grayButton.png deleted file mode 100644 index 0ce6a30d4..000000000 Binary files a/addons/smartphone/iui/grayButton.png and /dev/null differ diff --git a/addons/smartphone/iui/image/next.png b/addons/smartphone/iui/image/next.png deleted file mode 100644 index 1b2c6e4ef..000000000 Binary files a/addons/smartphone/iui/image/next.png and /dev/null differ diff --git a/addons/smartphone/iui/image/next_New.png b/addons/smartphone/iui/image/next_New.png deleted file mode 100644 index eefc826dd..000000000 Binary files a/addons/smartphone/iui/image/next_New.png and /dev/null differ diff --git a/addons/smartphone/iui/image/previous.png b/addons/smartphone/iui/image/previous.png deleted file mode 100644 index 8095e0928..000000000 Binary files a/addons/smartphone/iui/image/previous.png and /dev/null differ diff --git a/addons/smartphone/iui/image/previous_New.png b/addons/smartphone/iui/image/previous_New.png deleted file mode 100644 index 36b1752c0..000000000 Binary files a/addons/smartphone/iui/image/previous_New.png and /dev/null differ diff --git a/addons/smartphone/iui/iui.css b/addons/smartphone/iui/iui.css deleted file mode 100644 index 6470d9b59..000000000 --- a/addons/smartphone/iui/iui.css +++ /dev/null @@ -1,486 +0,0 @@ -/* iui.css (c) 2007 by iUI Project Members, see LICENSE.txt for license */ -body { - margin: 0; - font-family: Helvetica; - background: #FFFFFF; - color: #000000; - overflow-x: hidden; - -webkit-user-select: none; - -webkit-text-size-adjust: none; -} - -body > *:not(.toolbar) { - display: none; - position: absolute; - margin: 0; - padding: 0; - left: 0; - top: 45px; - width: 100%; - min-height: 372px; -} - -body[orient="landscape"] > *:not(.toolbar) { - min-height: 268px; -} - -body > *[selected="true"] { - display: block; -} - -a[selected].link, a:active, link { - background-color: #194fdb !important; - background-image: url(listArrowSel.png), url(selection.png) !important; - background-repeat: no-repeat, repeat-x; - background-position: right center, left top; - color: #FFFFFF !important; -} - -a[selected="progress"].link { - background-image: url(loading.gif), url(selection.png) !important; -} - -/************************************************************************************************/ - -body > .toolbar { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - border-bottom: 1px solid #2d3642; - border-top: 1px solid #6d84a2; - padding: 10px; - height: 45px; - background: url(toolbar.png) #6d84a2 repeat-x; -} - -.toolbar > h1 { - position: absolute; - overflow: hidden; - left: 50%; - margin: 1px 0 0 -75px; - height: 45px; - font-size: 20px; - width: 150px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - color: #FFFFFF; -} - -body[orient="landscape"] > .toolbar > h1 { - margin-left: -125px; - width: 250px; -} - -.button { - position: absolute; - overflow: hidden; - top: 8px; - right: 6px; - margin: 0; - border-width: 0 5px; - padding: 0 3px; - width: auto; - height: 30px; - line-height: 30px; - font-family: inherit; - font-size: 12px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; - text-overflow: ellipsis; - text-decoration: none; - white-space: nowrap; - background: none; - -webkit-border-image: url(toolButton.png) 0 5 0 5; -} - -.blueButton { - -webkit-border-image: url(blueButton.png) 0 5 0 5; - border-width: 0 5px; -} - -.leftButton { - left: 6px; - right: auto; -} - -#backButton { - display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; - border-width: 0 8px 0 14px; - -webkit-border-image: url(backButton.png) 0 8 0 14; -} - -.whiteButton, -.grayButton { - display: block; - border-width: 0 12px; - padding: 10px; - text-align: center; - font-size: 20px; - font-weight: bold; - text-decoration: inherit; - color: inherit; -} - -.whiteButton { - -webkit-border-image: url(whiteButton.png) 0 12 0 12; - text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; -} - -.grayButton { - -webkit-border-image: url(grayButton.png) 0 12 0 12; - color: #FFFFFF; -} - -/************************************************************************************************/ - -body > ul > li { - position: relative; - margin: 0; - border-bottom: 1px solid #E0E0E0; - padding: 8px 0 8px 10px; - font-size: 18px; - font-weight: bold; - list-style: none; -} - -body > ul > li.group { - position: relative; - top: -1px; - margin-bottom: -2px; - border-top: 1px solid #7d7d7d; - border-bottom: 1px solid #999999; - padding: 1px 10px; - background: url(listGroup.png) repeat-x; - font-size: 17px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; - color: #FFFFFF; -} - -body > ul > li.group:first-child { - top: 0; - border-top: none; -} - -body > ul > li > a { - display: block; - margin: -8px 0 -8px -10px; - padding: 8px 32px 8px 10px; - text-decoration: none; - color: inherit; - background: url(listArrow.png) no-repeat right center; -} - -a[target="_replace"] { - box-sizing: border-box; - -webkit-box-sizing: border-box; - padding-top: 25px; - padding-bottom: 25px; - font-size: 18px; - color: cornflowerblue; - background-color: #FFFFFF; - background-image: none; -} - -/************************************************************************************************/ - -body > .dialog { - top: 0; - width: 100%; - min-height: 417px; - z-index: 2; - background: rgba(0, 0, 0, 0.8); - padding: 0; - text-align: right; -} - -.dialog > fieldset { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 0; - border: none; - border-top: 1px solid #6d84a2; - padding: 10px 6px; - background: url(toolbar.png) #7388a5 repeat-x; -} - -.dialog > fieldset > h1 { - margin: 0 10px 0 10px; - padding: 0; - font-size: 20px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; -} - -.dialog > fieldset > label { - position: absolute; - margin: 16px 0 0 6px; - font-size: 14px; - color: #999999; -} - -input { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 8px 0 0 0; - padding: 6px 6px 6px 44px; - font-size: 16px; - font-weight: normal; -} - -/************************************************************************************************/ - -body > .panel { - box-sizing: border-box; - -webkit-box-sizing: border-box; - padding: 10px; - background: #c8c8c8 url(pinstripes.png); -} - -.panel > fieldset { - position: relative; - margin: 0 0 20px 0; - padding: 0; - background: #FFFFFF; - -webkit-border-radius: 8px; - border: 1px solid #999999; - text-align: right; - font-size: 16px; -} - -.row { - position: relative; - min-height: 42px; - border-bottom: 1px solid #999999; - -webkit-border-radius: 0; - text-align: right; -} - -fieldset > .row:last-child { - border-bottom: none !important; -} - -.row > input { - box-sizing: border-box; - -webkit-box-sizing: border-box; - margin: 0; - border: none; - padding: 12px 10px 0 110px; - height: 42px; - background: none; -} - -.row > label { - position: absolute; - margin: 0 0 0 14px; - line-height: 42px; - font-weight: bold; -} - -.row > .toggle { - position: absolute; - top: 6px; - right: 6px; - width: 100px; - height: 28px; -} - -.toggle { - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #FFFFFF url(toggle.png) repeat-x; - font-size: 19px; - font-weight: bold; - line-height: 30px; -} - -.toggle[toggled="true"] { - border: 1px solid #143fae; - background: #194fdb url(toggleOn.png) repeat-x; -} - -.toggleOn { - display: none; - position: absolute; - width: 60px; - text-align: center; - left: 0; - top: 0; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; -} - -.toggleOff { - position: absolute; - width: 60px; - text-align: center; - right: 0; - top: 0; - color: #666666; -} - -.toggle[toggled="true"] > .toggleOn { - display: block; -} - -.toggle[toggled="true"] > .toggleOff { - display: none; -} - -.thumb { - position: absolute; - top: -1px; - left: -1px; - width: 40px; - height: 28px; - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #ffffff url(thumb.png) repeat-x; -} - -.toggle[toggled="true"] > .thumb { - left: auto; - right: -1px; -} - -.panel > h2 { - margin: 0 0 8px 14px; - font-size: inherit; - font-weight: bold; - color: #4d4d70; - text-shadow: rgba(255, 255, 255, 0.75) 2px 2px 0; -} - -.panel > .content { - background: #FFFFFF; - -webkit-border-radius: 8px; - border: 1px solid #999999; - padding: 10px; -} - -/************************************************************************************************/ - -#preloader { - display: none; - background-image: url(loading.gif), url(selection.png), - url(blueButton.png), url(listArrowSel.png), url(listGroup.png); -} - -body > ul > li.post_item > a > .post > span.title { - font-size:13px; - font-weight:normal; - display:block; -} -body > ul > li.post_item > a > .post > span.description { - font-size:10px; - font-weight:normal; - color:#bbb; - display:block; - margin-top:2px; - letter-spacing:0px; -} - -.next, .previous { - display: block; - text-decoration: none; - font-size: 16px; - padding: 7px 0; - background: url(image/previous_New.png) no-repeat; - color: #fff; - margin: 8px 12px; - width: 110px; - height: 21px; - text-align: center; - margin-bottom: 30px; - font-weight:normal; -} - -.next { - float: right; - background: url(image/next_New.png) no-repeat; -} - -.previous { - float: left; - opacity: 0.7; - margin: 8px 0px; -} - -.pagination { - background: none; - border: none; - text-align: center; -} - -.pagination strong { - font-size: 32px; - color: #ccc; - position: relative; - top: 5px; -} - -.siteinfo .description -{ - display: block; - font-size: 16px; - color: #6699FF; - text-align: right; -} - -.siteinfo .xe -{ - display: block; - text-align: right; - font-size:11px; - color: #999; -} - -ul.navigation { - margin:0; - padding:0; - list-style: none; -} - -ul.navigation > li { - position: relative; - font-size: 14px; - border-bottom: 1px solid #E0E0E0; - text-align: left; -} - -ul.navigation > li > a { - display: block; - background-image: url(listArrow.png); - background-repeat: no-repeat; - background-position: right center; - color: inherit; - text-decoration: none; - padding: 8px 32px 8px 10px; -} - -.comment_item > .author { - color: #3074A5; -} - -.comment_item > .regdate { - float:right; - font-size: 12px; - color: #CCC; -} - -.comment_item > .re { - font-size: 12px; - color: #DCC; -} diff --git a/addons/smartphone/iui/iui.js b/addons/smartphone/iui/iui.js deleted file mode 100644 index e479fefa6..000000000 --- a/addons/smartphone/iui/iui.js +++ /dev/null @@ -1,383 +0,0 @@ -/* - Copyright (c) 2007, iUI Project Members - See LICENSE.txt for licensing terms - */ - - -(function() { - -var slideSpeed = 40; -var slideInterval = 0; - -var currentPage = null; -var currentDialog = null; -var currentWidth = 0; -var currentHash = location.hash; -var hashPrefix = "#_"; -var pageHistory = []; -var newPageCount = 0; -var checkTimer; - -// ************************************************************************************************* - -window.iui = -{ - showPage: function(page, backwards) - { - if (page) - { - if (currentDialog) - { - currentDialog.removeAttribute("selected"); - currentDialog = null; - } - - if (hasClass(page, "dialog")) - showDialog(page); - else - { - var fromPage = currentPage; - currentPage = page; - - if (fromPage) - setTimeout(slidePages, 0, fromPage, page, backwards); - else - updatePage(page, fromPage); - } - } - }, - - showPageById: function(pageId) - { - var page = $(pageId); - if (page) - { - var index = pageHistory.indexOf(pageId); - var backwards = index != -1; - if (backwards) - pageHistory.splice(index, pageHistory.length); - - iui.showPage(page, backwards); - } - }, - - showPageByHref: function(href, args, method, replace, cb) - { - var req = new XMLHttpRequest(); - req.onerror = function() - { - if (cb) - cb(false); - }; - - req.onreadystatechange = function() - { - if (req.readyState == 4) - { - if (replace) - replaceElementWithSource(replace, req.responseText); - else - { - var frag = document.createElement("div"); - frag.innerHTML = req.responseText; - iui.insertPages(frag.childNodes); - } - if (cb) - setTimeout(cb, 1000, true); - } - }; - - if (args) - { - req.open(method || "GET", href, true); - req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - req.setRequestHeader("Content-Length", args.length); - req.send(args.join("&")); - } - else - { - req.open(method || "GET", href, true); - req.send(null); - } - }, - - insertPages: function(nodes) - { - var targetPage; - for (var i = 0; i < nodes.length; ++i) - { - var child = nodes[i]; - if (child.nodeType == 1) - { - if (!child.id) - child.id = "__" + (++newPageCount) + "__"; - - var clone = $(child.id); - if (clone) - clone.parentNode.replaceChild(child, clone); - else - document.body.appendChild(child); - - if (child.getAttribute("selected") == "true" || !targetPage) - targetPage = child; - - --i; - } - } - - if (targetPage) - iui.showPage(targetPage); - }, - - getSelectedPage: function() - { - for (var child = document.body.firstChild; child; child = child.nextSibling) - { - if (child.nodeType == 1 && child.getAttribute("selected") == "true") - return child; - } - } -}; - -// ************************************************************************************************* - -addEventListener("load", function(event) -{ - var page = iui.getSelectedPage(); - if (page) - iui.showPage(page); - - setTimeout(preloadImages, 0); - setTimeout(checkOrientAndLocation, 0); - checkTimer = setInterval(checkOrientAndLocation, 300); -}, false); - -addEventListener("click", function(event) -{ - var link = findParent(event.target, "a"); - if (link) - { - function unselect() { link.removeAttribute("selected"); } - - if (link.href && link.hash && link.hash != "#") - { - link.setAttribute("selected", "true"); - iui.showPage($(link.hash.substr(1))); - setTimeout(unselect, 500); - } - else if (link == $("backButton")) - history.back(); - else if (link.getAttribute("type") == "submit") - submitForm(findParent(link, "form")); - else if (link.getAttribute("type") == "cancel") - cancelDialog(findParent(link, "form")); - else if (link.target == "_replace") - { - link.setAttribute("selected", "progress"); - iui.showPageByHref(link.href, null, null, link, unselect); - } - else if (!link.target) - { - link.setAttribute("selected", "progress"); - iui.showPageByHref(link.href, null, null, null, unselect); - } - else - return; - - event.preventDefault(); - } -}, true); - -addEventListener("click", function(event) -{ - var div = findParent(event.target, "div"); - if (div && hasClass(div, "toggle")) - { - div.setAttribute("toggled", div.getAttribute("toggled") != "true"); - event.preventDefault(); - } -}, true); - -function checkOrientAndLocation() -{ - if (window.innerWidth != currentWidth) - { - currentWidth = window.innerWidth; - var orient = currentWidth == 320 ? "profile" : "landscape"; - document.body.setAttribute("orient", orient); - setTimeout(scrollTo, 100, 0, 1); - } - - if (location.hash != currentHash) - { - var pageId = location.hash.substr(hashPrefix.length) - iui.showPageById(pageId); - } -} - -function showDialog(page) -{ - currentDialog = page; - page.setAttribute("selected", "true"); - - if (hasClass(page, "dialog") && !page.target) - showForm(page); -} - -function showForm(form) -{ - form.onsubmit = function(event) - { - event.preventDefault(); - submitForm(form); - }; - - form.onclick = function(event) - { - if (event.target == form && hasClass(form, "dialog")) - cancelDialog(form); - }; -} - -function cancelDialog(form) -{ - form.removeAttribute("selected"); -} - -function updatePage(page, fromPage) -{ - if (!page.id) - page.id = "__" + (++newPageCount) + "__"; - - location.href = currentHash = hashPrefix + page.id; - pageHistory.push(page.id); - - var pageTitle = $("pageTitle"); - if (page.title) - pageTitle.innerHTML = page.title; - - if (page.localName.toLowerCase() == "form" && !page.target) - showForm(page); - - var backButton = $("backButton"); - if (backButton) - { - var prevPage = $(pageHistory[pageHistory.length-2]); - if (prevPage && !page.getAttribute("hideBackButton")) - { - backButton.style.display = "inline"; - backButton.innerHTML = prevPage.title ? prevPage.title : "Back"; - } - else - backButton.style.display = "none"; - } -} - -function slidePages(fromPage, toPage, backwards) -{ - var axis = (backwards ? fromPage : toPage).getAttribute("axis"); - if (axis == "y") - (backwards ? fromPage : toPage).style.top = "100%"; - else - toPage.style.left = "100%"; - - toPage.setAttribute("selected", "true"); - scrollTo(0, 1); - clearInterval(checkTimer); - - var percent = 100; - slide(); - var timer = setInterval(slide, slideInterval); - - function slide() - { - percent -= slideSpeed; - if (percent <= 0) - { - percent = 0; - if (!hasClass(toPage, "dialog")) - fromPage.removeAttribute("selected"); - clearInterval(timer); - checkTimer = setInterval(checkOrientAndLocation, 300); - setTimeout(updatePage, 0, toPage, fromPage); - } - - if (axis == "y") - { - backwards - ? fromPage.style.top = (100-percent) + "%" - : toPage.style.top = percent + "%"; - } - else - { - fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; - toPage.style.left = (backwards ? -percent : percent) + "%"; - } - } -} - -function preloadImages() -{ - var preloader = document.createElement("div"); - preloader.id = "preloader"; - document.body.appendChild(preloader); -} - -function submitForm(form) -{ - iui.showPageByHref(form.action || "POST", encodeForm(form), form.method); -} - -function encodeForm(form) -{ - function encode(inputs) - { - for (var i = 0; i < inputs.length; ++i) - { - if (inputs[i].name) - args.push(inputs[i].name + "=" + escape(inputs[i].value)); - } - } - - var args = []; - encode(form.getElementsByTagName("input")); - encode(form.getElementsByTagName("select")); - return args; -} - -function findParent(node, localName) -{ - while (node && (node.nodeType != 1 || node.localName.toLowerCase() != localName)) - node = node.parentNode; - return node; -} - -function hasClass(self, name) -{ - var re = new RegExp("(^|\\s)"+name+"($|\\s)"); - return re.exec(self.getAttribute("class")) != null; -} - -function replaceElementWithSource(replace, source) -{ - var page = replace.parentNode; - var parent = replace; - while (page.parentNode != document.body) - { - page = page.parentNode; - parent = parent.parentNode; - } - - var frag = document.createElement(parent.localName); - frag.innerHTML = source; - - page.removeChild(parent); - - while (frag.firstChild) - page.appendChild(frag.firstChild); -} - -function $(id) { return document.getElementById(id); } -function ddd() { console.log.apply(console, arguments); } - -})(); diff --git a/addons/smartphone/iui/iuix.css b/addons/smartphone/iui/iuix.css deleted file mode 100644 index 1a1969058..000000000 --- a/addons/smartphone/iui/iuix.css +++ /dev/null @@ -1 +0,0 @@ -body{margin:0;font-family:Helvetica;background:#FFF;color:#000;overflow-x:hidden;-webkit-user-select:none;-webkit-text-size-adjust:none;}body>*:not(.toolbar){display:none;position:absolute;margin:0;padding:0;left:0;top:45px;width:100%;min-height:372px;}body[orient="landscape"]>*:not(.toolbar){min-height:268px;}body>*[selected="true"]{display:block;}a[selected],a:active{background-color:#194fdb!important;background-image:url(listArrowSel.png),url(selection.png)!important;background-repeat:no-repeat,repeat-x;background-position:right center,left top;color:#FFF!important;}a[selected="progress"]{background-image:url(loading.gif),url(selection.png)!important;}body>.toolbar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-bottom:1px solid #2d3642;border-top:1px solid #6d84a2;padding:10px;height:45px;background:url(toolbar.png) #6d84a2 repeat-x;}.toolbar>h1{position:absolute;overflow:hidden;left:50%;margin:1px 0 0 -75px;height:45px;font-size:20px;width:150px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#FFF;}body[orient="landscape"]>.toolbar>h1{margin-left:-125px;width:250px;}.button{position:absolute;overflow:hidden;top:8px;right:6px;margin:0;border-width:0 5px;padding:0 3px;width:auto;height:30px;line-height:30px;font-family:inherit;font-size:12px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.6) 0 -1px 0;text-overflow:ellipsis;text-decoration:none;white-space:nowrap;background:none;-webkit-border-image:url(toolButton.png) 0 5 0 5;}.blueButton{-webkit-border-image:url(blueButton.png) 0 5 0 5;border-width:0 5px;}.leftButton{left:6px;right:auto;}#backButton{display:none;left:6px;right:auto;padding:0;max-width:55px;border-width:0 8px 0 14px;-webkit-border-image:url(backButton.png) 0 8 0 14;}.whiteButton,.grayButton{display:block;border-width:0 12px;padding:10px;text-align:center;font-size:20px;font-weight:bold;text-decoration:inherit;color:inherit;}.whiteButton{-webkit-border-image:url(whiteButton.png) 0 12 0 12;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}.grayButton{-webkit-border-image:url(grayButton.png) 0 12 0 12;color:#FFF;}body>ul>li{position:relative;margin:0;border-bottom:1px solid #E0E0E0;padding:8px 0 8px 10px;font-size:20px;font-weight:bold;list-style:none;}body>ul>li.group{position:relative;top:-1px;margin-bottom:-2px;border-top:1px solid #7d7d7d;border-bottom:1px solid #999;padding:1px 10px;background:url(listGroup.png) repeat-x;font-size:17px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 1px 0;color:#FFF;}body>ul>li.group:first-child{top:0;border-top:none;}body>ul>li>a{display:block;margin:-8px 0 -8px -10px;padding:8px 32px 8px 10px;text-decoration:none;color:inherit;background:url(listArrow.png) no-repeat right center;}a[target="_replace"]{box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:25px;padding-bottom:25px;font-size:18px;color:cornflowerblue;background-color:#FFF;background-image:none;}body>.dialog{top:0;width:100%;min-height:417px;z-index:2;background:rgba(0,0,0,0.8);padding:0;text-align:right;}.dialog>fieldset{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:0;border:none;border-top:1px solid #6d84a2;padding:10px 6px;background:url(toolbar.png) #7388a5 repeat-x;}.dialog>fieldset>h1{margin:0 10px 0 10px;padding:0;font-size:20px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;}.dialog>fieldset>label{position:absolute;margin:16px 0 0 6px;font-size:14px;color:#999;}input{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:8px 0 0 0;padding:6px 6px 6px 44px;font-size:16px;font-weight:normal;}body>.panel{box-sizing:border-box;-webkit-box-sizing:border-box;padding:10px;background:#c8c8c8 url(pinstripes.png);}.panel>fieldset{position:relative;margin:0 0 20px 0;padding:0;background:#FFF;-webkit-border-radius:10px;border:1px solid #999;text-align:right;font-size:16px;}.row{position:relative;min-height:42px;border-bottom:1px solid #999;-webkit-border-radius:0;text-align:right;}fieldset>.row:last-child{border-bottom:none!important;}.row>input{box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;border:none;padding:12px 10px 0 110px;height:42px;background:none;}.row>label{position:absolute;margin:0 0 0 14px;line-height:42px;font-weight:bold;}.row>.toggle{position:absolute;top:6px;right:6px;width:100px;height:28px;}.toggle{border:1px solid #888;-webkit-border-radius:6px;background:#FFF url(toggle.png) repeat-x;font-size:19px;font-weight:bold;line-height:30px;}.toggle[toggled="true"]{border:1px solid #143fae;background:#194fdb url(toggleOn.png) repeat-x;}.toggleOn{display:none;position:absolute;width:60px;text-align:center;left:0;top:0;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;}.toggleOff{position:absolute;width:60px;text-align:center;right:0;top:0;color:#666;}.toggle[toggled="true"]>.toggleOn{display:block;}.toggle[toggled="true"]>.toggleOff{display:none;}.thumb{position:absolute;top:-1px;left:-1px;width:40px;height:28px;border:1px solid #888;-webkit-border-radius:6px;background:#fff url(thumb.png) repeat-x;}.toggle[toggled="true"]>.thumb{left:auto;right:-1px;}.panel>h2{margin:0 0 8px 14px;font-size:inherit;font-weight:bold;color:#4d4d70;text-shadow:rgba(255,255,255,0.75) 2px 2px 0;}#preloader{display:none;background-image:url(loading.gif),url(selection.png),url(blueButton.png),url(listArrowSel.png),url(listGroup.png);} \ No newline at end of file diff --git a/addons/smartphone/iui/iuix.js b/addons/smartphone/iui/iuix.js deleted file mode 100644 index 3b2b37f9d..000000000 --- a/addons/smartphone/iui/iuix.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var _1=20;var _2=0;var _3=null;var _4=null;var _5=0;var _6=location.hash;var _7="#_";var _8=[];var _9=0;var _a;window.iui={showPage:function(_b,_c){if(_b){if(_4){_4.removeAttribute("selected");_4=null;}if(hasClass(_b,"dialog")){showDialog(_b);}else{var _d=_3;_3=_b;if(_d){setTimeout(slidePages,0,_d,_b,_c);}else{updatePage(_b,_d);}}}},showPageById:function(_e){var _f=$(_e);if(_f){var _10=_8.indexOf(_e);var _11=_10!=-1;if(_11){_8.splice(_10,_8.length);}iui.showPage(_f,_11);}},showPageByHref:function(_12,_13,_14,_15,cb){var req=new XMLHttpRequest();req.onerror=function(){if(cb){cb(false);}};req.onreadystatechange=function(){if(req.readyState==4){if(_15){replaceElementWithSource(_15,req.responseText);}else{var _18=document.createElement("div");_18.innerHTML=req.responseText;iui.insertPages(_18.childNodes);}if(cb){setTimeout(cb,1000,true);}}};if(_13){req.open(_14||"GET",_12,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.setRequestHeader("Content-Length",_13.length);req.send(_13.join("&"));}else{req.open(_14||"GET",_12,true);req.send(null);}},insertPages:function(_19){var _1a;for(var i=0;i<_19.length;++i){var _1c=_19[i];if(_1c.nodeType==1){if(!_1c.id){_1c.id="__"+(++_9)+"__";}var _1d=$(_1c.id);if(_1d){_1d.parentNode.replaceChild(_1c,_1d);}else{document.body.appendChild(_1c);}if(_1c.getAttribute("selected")=="true"||!_1a){_1a=_1c;}--i;}}if(_1a){iui.showPage(_1a);}},getSelectedPage:function(){for(var _1e=document.body.firstChild;_1e;_1e=_1e.nextSibling){if(_1e.nodeType==1&&_1e.getAttribute("selected")=="true"){return _1e;}}}};addEventListener("load",function(_1f){var _20=iui.getSelectedPage();if(_20){iui.showPage(_20);}setTimeout(preloadImages,0);setTimeout(checkOrientAndLocation,0);_a=setInterval(checkOrientAndLocation,300);},false);addEventListener("click",function(_21){var _22=findParent(_21.target,"a");if(_22){function unselect(){_22.removeAttribute("selected");}if(_22.href&&_22.hash&&_22.hash!="#"){_22.setAttribute("selected","true");iui.showPage($(_22.hash.substr(1)));setTimeout(unselect,500);}else{if(_22==$("backButton")){history.back();}else{if(_22.getAttribute("type")=="submit"){submitForm(findParent(_22,"form"));}else{if(_22.getAttribute("type")=="cancel"){cancelDialog(findParent(_22,"form"));}else{if(_22.target=="_replace"){_22.setAttribute("selected","progress");iui.showPageByHref(_22.href,null,null,_22,unselect);}else{if(!_22.target){_22.setAttribute("selected","progress");iui.showPageByHref(_22.href,null,null,null,unselect);}else{return;}}}}}}_21.preventDefault();}},true);addEventListener("click",function(_23){var div=findParent(_23.target,"div");if(div&&hasClass(div,"toggle")){div.setAttribute("toggled",div.getAttribute("toggled")!="true");_23.preventDefault();}},true);function checkOrientAndLocation(){if(window.innerWidth!=_5){_5=window.innerWidth;var _25=_5==320?"profile":"landscape";document.body.setAttribute("orient",_25);setTimeout(scrollTo,100,0,1);}if(location.hash!=_6){var _26=location.hash.substr(_7.length);iui.showPageById(_26);}}function showDialog(_27){_4=_27;_27.setAttribute("selected","true");if(hasClass(_27,"dialog")&&!_27.target){showForm(_27);}}function showForm(_28){_28.onsubmit=function(_29){_29.preventDefault();submitForm(_28);};_28.onclick=function(_2a){if(_2a.target==_28&&hasClass(_28,"dialog")){cancelDialog(_28);}};}function cancelDialog(_2b){_2b.removeAttribute("selected");}function updatePage(_2c,_2d){if(!_2c.id){_2c.id="__"+(++_9)+"__";}location.href=_6=_7+_2c.id;_8.push(_2c.id);var _2e=$("pageTitle");if(_2c.title){_2e.innerHTML=_2c.title;}if(_2c.localName.toLowerCase()=="form"&&!_2c.target){showForm(_2c);}var _2f=$("backButton");if(_2f){var _30=$(_8[_8.length-2]);if(_30&&!_2c.getAttribute("hideBackButton")){_2f.style.display="inline";_2f.innerHTML=_30.title?_30.title:"Back";}else{_2f.style.display="none";}}}function slidePages(_31,_32,_33){var _34=(_33?_31:_32).getAttribute("axis");if(_34=="y"){(_33?_31:_32).style.top="100%";}else{_32.style.left="100%";}_32.setAttribute("selected","true");scrollTo(0,1);clearInterval(_a);var _35=100;slide();var _36=setInterval(slide,_2);function slide(){_35-=_1;if(_35<=0){_35=0;if(!hasClass(_32,"dialog")){_31.removeAttribute("selected");}clearInterval(_36);_a=setInterval(checkOrientAndLocation,300);setTimeout(updatePage,0,_32,_31);}if(_34=="y"){_33?_31.style.top=(100-_35)+"%":_32.style.top=_35+"%";}else{_31.style.left=(_33?(100-_35):(_35-100))+"%";_32.style.left=(_33?-_35:_35)+"%";}}}function preloadImages(){var _37=document.createElement("div");_37.id="preloader";document.body.appendChild(_37);}function submitForm(_38){iui.showPageByHref(_38.action||"POST",encodeForm(_38),_38.method);}function encodeForm(_39){function encode(_3a){for(var i=0;i<_3a.length;++i){if(_3a[i].name){args.push(_3a[i].name+"="+escape(_3a[i].value));}}}var _3c=[];encode(_39.getElementsByTagName("input"));encode(_39.getElementsByTagName("select"));return _3c;}function findParent(_3d,_3e){while(_3d&&(_3d.nodeType!=1||_3d.localName.toLowerCase()!=_3e)){_3d=_3d.parentNode;}return _3d;}function hasClass(_3f,_40){var re=new RegExp("(^|\\s)"+_40+"($|\\s)");return re.exec(_3f.getAttribute("class"))!=null;}function replaceElementWithSource(_42,_43){var _44=_42.parentNode;var _45=_42;while(_44.parentNode!=document.body){_44=_44.parentNode;_45=_45.parentNode;}var _46=document.createElement(_45.localName);_46.innerHTML=_43;_44.removeChild(_45);while(_46.firstChild){_44.appendChild(_46.firstChild);}}function $(id){return document.getElementById(id);}function ddd(){console.log.apply(console,arguments);}})(); \ No newline at end of file diff --git a/addons/smartphone/iui/listArrowSel.png b/addons/smartphone/iui/listArrowSel.png deleted file mode 100644 index 86832ebc7..000000000 Binary files a/addons/smartphone/iui/listArrowSel.png and /dev/null differ diff --git a/addons/smartphone/iui/loading.gif b/addons/smartphone/iui/loading.gif deleted file mode 100644 index 8522ddf1a..000000000 Binary files a/addons/smartphone/iui/loading.gif and /dev/null differ diff --git a/addons/smartphone/iui/selection.png b/addons/smartphone/iui/selection.png deleted file mode 100644 index 537e3f0b1..000000000 Binary files a/addons/smartphone/iui/selection.png and /dev/null differ diff --git a/addons/smartphone/iui/thumb.png b/addons/smartphone/iui/thumb.png deleted file mode 100644 index cefa8fc5e..000000000 Binary files a/addons/smartphone/iui/thumb.png and /dev/null differ diff --git a/addons/smartphone/iui/toggle.png b/addons/smartphone/iui/toggle.png deleted file mode 100644 index 3b62ebf26..000000000 Binary files a/addons/smartphone/iui/toggle.png and /dev/null differ diff --git a/addons/smartphone/iui/toggleOn.png b/addons/smartphone/iui/toggleOn.png deleted file mode 100644 index b016814de..000000000 Binary files a/addons/smartphone/iui/toggleOn.png and /dev/null differ diff --git a/addons/smartphone/iui/toolButton.png b/addons/smartphone/iui/toolButton.png deleted file mode 100644 index afe4d7a3e..000000000 Binary files a/addons/smartphone/iui/toolButton.png and /dev/null differ diff --git a/addons/smartphone/iui/toolbar.png b/addons/smartphone/iui/toolbar.png deleted file mode 100644 index 3dde94c07..000000000 Binary files a/addons/smartphone/iui/toolbar.png and /dev/null differ diff --git a/addons/smartphone/iui/whiteButton.png b/addons/smartphone/iui/whiteButton.png deleted file mode 100644 index 5514b2700..000000000 Binary files a/addons/smartphone/iui/whiteButton.png and /dev/null differ diff --git a/addons/smartphone/smartphone.addon.php b/addons/smartphone/smartphone.addon.php index 4974d9460..f4d9a3190 100644 --- a/addons/smartphone/smartphone.addon.php +++ b/addons/smartphone/smartphone.addon.php @@ -3,20 +3,29 @@ if(Context::get('module')=='admin') return; - if($called_position != 'before_module_proc' && $called_position != 'after_module_proc' ) return; - require_once(_XE_PATH_.'addons/smartphone/classes/smartphone.class.php'); - debugPrint("here"); - if(!smartphoneXE::isFromSmartPhone()) - { - debugPrint("here"); - return; + if(!smartphoneXE::isFromSmartPhone()) return; + + if($called_position == 'after_module_proc' ) { + $oSmartphoneXE = new smartphoneXE($this, $this->module_info, $output); + $oSmartphoneXE->procSmartPhone(); + Context::set('layout', 'none'); + Context::set('smart_content', $oSmartphoneXE->content); + Context::set('parent_url', $oSmartphoneXE->parent_url); + Context::set('prev_url', $oSmartphoneXE->prev_url); + Context::set('next_url', $oSmartphoneXE->next_url); + $this->setTemplatePath('addons/smartphone/tpl'); + $this->setTemplateFile('layout'); + + } elseif($called_position == 'before_module_proc' && !$this->grant->access) { + $oSmartphoneXE = new smartphoneXE($this, $this->module_info, $output); + $oSmartphoneXE->procSmartPhone('msg_not_permitted_act'); + Context::set('layout', 'none'); + Context::set('smart_content', $oSmartphoneXE->content); + Context::set('parent_url', $oSmartphoneXE->parent_url); + Context::set('prev_url', $oSmartphoneXE->prev_url); + Context::set('next_url', $oSmartphoneXE->next_url); + $this->setTemplatePath('addons/smartphone/tpl'); + $this->setTemplateFile('layout'); } - debugPrint("here"); - - - $oSmartphoneXE = &smartphoneXE::getInstance(); - $oSmartphoneXE->setModuleInfo($this->module_info); - $oSmartphoneXE->setModuleInstance($this); - $oSmartphoneXE->display(); ?> diff --git a/addons/smartphone/tpl/images/btnMenu.png b/addons/smartphone/tpl/images/btnMenu.png new file mode 100755 index 000000000..3c43a027c Binary files /dev/null and b/addons/smartphone/tpl/images/btnMenu.png differ diff --git a/addons/smartphone/tpl/images/btnNext.png b/addons/smartphone/tpl/images/btnNext.png new file mode 100755 index 000000000..15b8215ba Binary files /dev/null and b/addons/smartphone/tpl/images/btnNext.png differ diff --git a/addons/smartphone/tpl/images/btnPrev.png b/addons/smartphone/tpl/images/btnPrev.png new file mode 100755 index 000000000..085d42942 Binary files /dev/null and b/addons/smartphone/tpl/images/btnPrev.png differ diff --git a/addons/smartphone/tpl/images/btnTop.png b/addons/smartphone/tpl/images/btnTop.png new file mode 100755 index 000000000..aa106e8cc Binary files /dev/null and b/addons/smartphone/tpl/images/btnTop.png differ diff --git a/addons/smartphone/iui/listArrow.png b/addons/smartphone/tpl/images/listArrow.png similarity index 100% rename from addons/smartphone/iui/listArrow.png rename to addons/smartphone/tpl/images/listArrow.png diff --git a/addons/smartphone/iui/listGroup.png b/addons/smartphone/tpl/images/listGroup.png similarity index 100% rename from addons/smartphone/iui/listGroup.png rename to addons/smartphone/tpl/images/listGroup.png diff --git a/addons/smartphone/iui/pinstripes.png b/addons/smartphone/tpl/images/pinstripes.png similarity index 100% rename from addons/smartphone/iui/pinstripes.png rename to addons/smartphone/tpl/images/pinstripes.png diff --git a/addons/smartphone/tpl/images/titlebar.png b/addons/smartphone/tpl/images/titlebar.png new file mode 100755 index 000000000..ddc3cd9b8 Binary files /dev/null and b/addons/smartphone/tpl/images/titlebar.png differ diff --git a/addons/smartphone/tpl/layout.html b/addons/smartphone/tpl/layout.html index 41193bc91..bf8cec8c0 100644 --- a/addons/smartphone/tpl/layout.html +++ b/addons/smartphone/tpl/layout.html @@ -1,55 +1,21 @@ - - - - - - + + - {Context::getBrowserTitle()} - - +

- - - - -
-

- - Search -
- -
    -
  • - {$module_info->description} - Powered by Xpress Engine -
  • - -
  • View - -
  • 이 모듈은 smartphoneView를 지원하지 않습니다.
  • - -
  • Menu
  • -
- - - - - +
+ {$smart_content} +
+
+ + Top + + + Prev + Next + + Menu +
diff --git a/addons/smartphone/tpl/smartphone.css b/addons/smartphone/tpl/smartphone.css new file mode 100644 index 000000000..3a356caf8 --- /dev/null +++ b/addons/smartphone/tpl/smartphone.css @@ -0,0 +1,189 @@ +body { + margin: 0; + padding:0; + font-family: Helvetica; + background: #E6E6E6 url(./images/pinstripes.png); + color: #000000; + overflow-x: hidden; + -webkit-user-select: none; + -webkit-text-size-adjust: none; + width:100%; +} + +.smartPhoneTitleBar { + border-bottom: 1px solid #2d3642; + border-top: 1px solid #6d84a2; + height: 43px; + overflow:hidden; + background:#485567 url(./images/titlebar.png) repeat-x left top; + + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.smartPhoneTitleBar h1 { + white-space:nowrap; + overflow: hidden; + color: #FFFFFF; + font-size: 20px; + font-weight: bold; + padding:8px 10px; + margin:0; + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; + text-overflow: ellipsis; +} + +.smartPhoneTitleBar h1 a { + text-decoration:none; + color:#fff; +} + +.smartPhoneContent { + z-index:450; + border: 1px solid #999999; + padding:10px; + background-color:#fff; + margin:10px; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -webkit-border-radius: 8px; +} + +.smartPhoneToolBar { + z-index:9999; + width:100%; + border-bottom: 1px solid #2d3642; + border-top: 1px solid #6d84a2; + height: 43px; + overflow:hidden; + background:#485567 url(./images/titlebar.png) repeat-x left top; + white-space:nowrap; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.smartPhoneBtn { + width:43px; + height:43px; + margin-left:8px; + border:0; +} + +.smartPhoneContent div.info { + font-size:13px; + padding-bottom:10px; + border-bottom:1px solid #444; + overflow:hidden; + *zoom:1; +} + +.smartPhoneContent div.info .author { + font-weight:bold; + float:left; +} + +.smartPhoneContent div.info .date { + font-size:11px; + float:right; +} + +.smartPhoneContent div.link { + margin-top:10px; + border-top:1px solid #444; +} + +.smartPhoneContent div.link a { + display:block; + padding:10px 0; + font-size:15px; + text-decoration:underline; + font-weight:bold; + color:#000; +} + +.smartPhoneList { + background-color:#fff; + z-index:500; + padding:0; + margin:0; +} + +.smartPhoneList ul { + padding:0; + margin:0; + left:0; + right:0; + top:43px; +} + +.smartPhoneList li { + list-style:none; + font-size:18px; + font-weight:bold; + padding:10px 20px 10px 10px; + border-bottom:1px solid #ccc; +} + +.smartPhoneList li a { + text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; + text-overflow: ellipsis; + color:#000; + text-decoration:none; + display:block; + width:100%; +} + +.smartPhoneList li.title { + position: relative; + top: -1px; + margin-bottom: -2px; + border-top: 1px solid #7d7d7d; + border-bottom: 1px solid #999999; + padding: 5px 10px; + background: url(./images/listGroup.png) repeat-x; + font-size: 12px; + font-weight: bold; + text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; + color: #FFFFFF; +} + +.smartPhoneList li.selected { + background-color:#ddd; +} + +.smartPhoneList li.selected * { + color:#fff; +} + + +.smartPhoneList li a { + background:transparent url(./images/listArrow.png) no-repeat scroll right center; + padding-right:30px; +} + +.smartPhoneList li.noArrow a { + background:none !important; +} + +.smartPhoneList li.item img.thumbnail { + margin:0 10px 0 0; + padding:0; +} + +.smartPhoneList li.item span.title, .smartPhoneList li.item span.title div { + font-size:15px; + font-weight:normal; + display:block; +} + +.smartPhoneList li.item span.info { + font-size:10px; + font-weight:normal; + color:#bbb; + display:block; + margin-top:2px; + letter-spacing:0px; +} + diff --git a/addons/smartphone/tpl/smartphone.js b/addons/smartphone/tpl/smartphone.js new file mode 100644 index 000000000..d0b4a13ca --- /dev/null +++ b/addons/smartphone/tpl/smartphone.js @@ -0,0 +1,101 @@ +var xeSmartMenu = null; +var xeSmartUpperMenu = null; +function showXEMenu() { + if(!xeSmartMenu) { + + xeSmartMenu = jQuery('
') + .attr("className","smartPhoneList") + .css('display','none') + .css('backgroundColor','#fff'); + + jQuery(document.body).append(xeSmartMenu); + + xeSmartMenu.slideIn = function(step) { + var w = this.width() + Math.pow(step,2)*30; + + if(w>jQuery(document).width()) { + this.css({left:0,right:0,display:'block'}); + this.width(''); + jQuery('.smartPhoneContentArea').css("display","none"); + } else { + this.width(w); + var o = parseInt(jQuery(document).width/w,10)/5; + if(o>1) o = 1; + setTimeout(function() { xeSmartMenu.slideIn(step+1); }, 50); + } + } + + xeSmartMenu.slideOut = function(step) { + var l = parseInt(this.css('left'),10) + Math.pow(step,2)*30; + + if(l>jQuery('.smartPhoneContent').width()) { + this.css({display:'none','left':''}); + jQuery('.smartPhoneContentArea').css("display","block"); + } else { + var o = parseInt(jQuery(document).width/l,10)/5; + if(o<0) o = 0; + this.css('left',l+'px'); + setTimeout(function() { xeSmartMenu.slideOut(step+1); }, 50); + } + } + } + + if(xeSmartMenu.css('display')=='none' && typeof(xeMenus)!='undefined') { + xeSmartUpperMenu = null; + var menu = findSmartNode(xeMenus); + if(!menu) menu = xeMenus; + var html = '
    '; + if(location.href.getQuery('mid')) html += '
  • < go Home >
  • '; + if(xeSmartUpperMenu) html += '
  • < go Upper >
  • '; + for(var text in menu) { + if(!text) continue; + var url = menu[text].url; + var href = ''; + if(/^[a-z0-9_]+$/i.test(url)) { + href = request_uri.setQuery('mid',url); + if(href.indexOf('?')>-1) href += '&smartphone=true'; + else href += '?smartphone=true'; + } + else href = url; + if(typeof(xeVid)!='undefined') { + if(href.indexOf('?')>-1) href += '&vid='+xeVid; + else href += '?vid='+xeVid; + } + html += '
  • '+text+'
  • '; + } + html += '
'; + + jQuery(xeSmartMenu).html(html); + jQuery(xeSmartMenu).css({ + width:'1px', + right:'0', + top:'43px', + display:'block', + position:'absolute', + padding:0 + }); + xeSmartMenu.slideIn(0); + } else if(location.href.getQuery('mid')||location.href.getQuery('document_srl')) { + xeSmartMenu.slideOut(0); + } +} + +function findSmartNode(nodes) { + var mid = current_url.getQuery('mid'); + if(typeof(mid)=='undefined'||!mid) return nodes; + for(var text in nodes) { + if(!text) continue; + if(nodes[text].childs) { + var n = findSmartNode(nodes[text].childs); + if(n) { + xeSmartUpperMenu = nodes[text]; + return n; + } + } + if(nodes[text].url == mid) { + if(nodes[text].childs) return nodes[text].childs; + return nodes; + } + } + return null; +} diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 170641063..ba2609b27 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -860,6 +860,10 @@ return sprintf('%s%s/%s',$rpath,$get_vars['mid'],$get_vars['document_srl']); case 'entry.mid' : return sprintf('%s%s/entry/%s',$rpath,$get_vars['mid'],$get_vars['entry']); + case 'act.document_srl.key' : + if($get_vars['act']=='trackback') return sprintf('%s%s/%s/%s', $rpath,$get_vars['document_srl'],$get_vars['key'],$get_vars['act']); + break; + } } @@ -918,10 +922,18 @@ if(Context::get("_https_port") && Context::get("_https_port") != 443) { $url_info['port'] = Context::get("_https_port"); } + else + { + unset($url_info['port']); + } } else { if(Context::get("_http_port") && Context::get("_http_port") != 80) { $url_info['port'] = Context::get("_http_port"); } + else + { + unset($url_info['port']); + } } $url[$ssl_mode][$domain_key] = sprintf("%s://%s%s%s",$use_ssl?'https':$url_info['scheme'], $url_info['host'], $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$url_info['path']); @@ -1088,6 +1100,18 @@ } } + /** + * @brief 모든 JS File을 제거 + **/ + function unloadAllJsFiles() { + $oContext = &Context::getInstance(); + return $oContext->_unloadAllJsFiles(); + } + + function _unloadAllJsFiles() { + $this->js_files = array(); + } + /** * @brief javascript filter 추가 **/ @@ -1172,6 +1196,18 @@ } } + /** + * @brief 모든 CSS File을 제거 + **/ + function unloadAllCSSFiles() { + $oContext = &Context::getInstance(); + return $oContext->_unloadAllCSSFiles(); + } + + function _unloadAllCSSFiles() { + $this->css_files = array(); + } + /** * @brief CSS file 목록 return **/ diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index 621ae4d30..fcbbae601 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -183,7 +183,7 @@ function getNextSequence() { $query = sprintf("insert into `%ssequence` (seq) values ('0')", $this->prefix); $this->_query($query); - $sequence = mysql_insert_id(); + $sequence = mysql_insert_id($this->fd); if($sequence % 10000 == 0) { $query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence); $this->_query($query); diff --git a/classes/db/DBMysql_innodb.class.php b/classes/db/DBMysql_innodb.class.php index d0c53fe60..71ad1a90e 100644 --- a/classes/db/DBMysql_innodb.class.php +++ b/classes/db/DBMysql_innodb.class.php @@ -193,7 +193,7 @@ function getNextSequence() { $query = sprintf("insert into `%ssequence` (seq) values ('0')", $this->prefix); $this->_query($query); - $sequence = mysql_insert_id(); + $sequence = mysql_insert_id($this->fd); if($sequence % 10000 == 0) { $query = sprintf("delete from `%ssequence` where seq < %d", $this->prefix, $sequence); $this->_query($query); diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index 277865b25..8b386f4eb 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -101,7 +101,7 @@ $output = preg_replace_callback('!!is', array($this,'moveStyleToHeader'), $output); // 메타 파일 변경 (캐싱기능등으로 인해 위젯등에서 태그를 content에 넣는 경우가 있음 - $output = preg_replace_callback('//is', array($this,'transMeta'), $output); + $output = preg_replace_callback('//is', array($this,'transMeta'), $output); // rewrite module 사용시 생기는 상대경로에 대한 처리를 함 if(Context::isAllowRewrite()) { @@ -117,6 +117,9 @@ if(__DEBUG__==3) $GLOBALS['__trans_content_elapsed__'] = getMicroTime()-$start; + // 불필요한 정보 제거 + $output = preg_replace('/member\_\-([0-9]+)/s','member_0',$output); + // 최종 레이아웃 변환 Context::set('content', $output); $output = $oTemplate->compile('./common/tpl', 'common_layout'); @@ -166,9 +169,7 @@ $variables = $oModule->getVariables(); $variables['error'] = $oModule->getError(); $variables['message'] = $oModule->getMessage(); - //if(function_exists('json_encode')) return json_encode($variables); - //else return json_encode2($variables); - $json = str_replace("\r\n",'\n',json_encode2($variables)); + $json = preg_replace("(\r\n|\n)",'\n',json_encode2($variables)); return $json; } diff --git a/classes/mail/Mail.class.php b/classes/mail/Mail.class.php index 9c201559c..761e7bc1f 100644 --- a/classes/mail/Mail.class.php +++ b/classes/mail/Mail.class.php @@ -45,9 +45,14 @@ } function setContent($content) { + $content = preg_replace_callback('/]+)>/i',array($this,'replaceResourceRealPath'), $content); $this->content = $content; } + function replaceResourceRealPath($matches) { + return preg_replace('/src=(["\']?)files/i','src=$1'.Context::getRequestUri().'files', $matches[0]); + } + function getPlainContent() { return chunk_split(base64_encode(str_replace(array("<",">","&"), array("<",">","&"), $this->content))); } diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 0d659e73e..1c96a7952 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -112,7 +112,7 @@ // 모듈을 여전히(;;) 못 찾고 모듈번호(module_srl)가 있으면 해당 모듈을 구함 // module_srl로 대상 모듈을 찾는 것을 주석 처리함. - if(!$this->module && !$module_info && $this->module_srl) { + if((!$this->module || $this->module != 'admin') && !$module_info && $this->module_srl) { $module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl); //if($this->module && $module_info->module != $this->module) unset($module_info); } @@ -155,17 +155,17 @@ // mid값이 있을 경우 mid값을 세팅 if($this->mid) Context::set('mid', $this->mid, true); - - // 현재 모듈의 정보를 세팅 - Context::set('current_module_info', $module_info); // 실제 동작을 하기 전에 trigger 호출 - $output = ModuleHandler::triggerCall('display', 'before', $content); + $output = ModuleHandler::triggerCall('moduleHandler.init', 'after', $this->module_info); if(!$output->toBool()) { $this->error = $output->getMessage(); return false; } + // 현재 모듈의 정보를 세팅 + Context::set('current_module_info', $this->module_info); + return true; } @@ -241,6 +241,10 @@ $this->error = 'msg_dbconnect_failed'; } + // 모듈 동작을 마친 후 trigger call + $output = ModuleHandler::triggerCall('moduleHandler.proc', 'after', $oModule); + if(!$output->toBool()) $this->error = $output->getMessage(); + // HTML call 이면 message view 객체 이용하도록 if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) { // 에러가 발생하였을시 처리 @@ -296,8 +300,6 @@ // 레이아웃이 수정되었을 경우 수정본을 지정 $edited_layout = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl); -// $edited_layout_css = $oLayoutModel->getUserLayoutCss($layout_info->layout_srl); -// Context::addCSSFile($edited_layout_css); if(file_exists($edited_layout)) $oModule->setEditedLayoutFile($edited_layout); } } diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index aef05c31e..f0014af7d 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -239,8 +239,7 @@ $addon_file = $oAddonController->getCacheFilePath(); if(file_exists($addon_file)) @include($addon_file); - // action 실행 - if(method_exists($this, $this->act)) { + if(isset($this->xml_info->action->{$this->act}) && method_exists($this, $this->act)) { // 권한 체크 if(!$this->grant->access) return $this->stop("msg_not_permitted_act"); @@ -275,7 +274,7 @@ if(!$forward) $forward = $oModuleModel->getActionForward($this->act); // 찾아진 forward 모듈이 있으면 실행 - if($forward->module && $forward->type && $forward->act) { + if($forward->module && $forward->type && $forward->act && $forward->act == $this->act) { $kind = strpos(strtolower($forward->act),'admin')!==false?'admin':''; @@ -288,7 +287,7 @@ $oModule->setModuleInfo($this->module_info, $xml_info); - if(method_exists($oModule, $forward->act)) { + if(isset($xml_info->action->{$forward->act}) && method_exists($oModule, $forward->act)) { $output = $oModule->{$forward->act}(); } else { return $this->stop("msg_module_is_not_exists"); @@ -299,11 +298,13 @@ $this->setTemplatePath($oModule->getTemplatePath()); $this->setTemplateFile($oModule->getTemplateFile()); + if($oModule->getLayoutFile()) $this->setLayoutFile($oModule->getLayoutFile()); $this->adds($oModule->getVariables()); // forward 모듈을 찾지 못했다면 원 모듈의 default index action을 실행 } else if($this->xml_info->default_index_act && method_exists($this, $this->xml_info->default_index_act)) { + Context::set('act',$this->act = $this->xml_info->default_index_act); $output = $this->{$this->xml_info->default_index_act}(); } else { return false; diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index ed75fc545..ea6368ece 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -138,11 +138,33 @@ **/ function _compileVarToContext($matches) { $str = trim(substr($matches[0],1,strlen($matches[0])-2)); - return ']+)/i','$__Context->\\1', $str).');?>'; + if(!$str) return $matches[0]; + if(!in_array(substr($str,0,1),array('(','$','\'','"'))) { + if(preg_match('/^([^\( \.]+)(\(| \.)/i',$str,$m)) { + $func = trim($m[1]); + if(strpos($func,'::')===false) { + if(!function_exists($func)) { + return $matches[0]; + } + } else { + list($class, $method) = explode('::',$func); + if(!class_exists($class) || !in_array($method, get_class_methods($class))) { + // 서버 환경에 따라서 class, method가 대소문자 구별을 할때와 하지 않을때가 있음 + list($class, $method) = explode('::',strtolower($func)); + if(!class_exists($class) || !in_array($method, get_class_methods($class))) { + return $matches[0]; + } + } + } + } else { + if(!defined($str)) return $matches[0]; + } + } + return ']+)/i','$__Context->\\1', $str).');?>'; } /** - * @brief {$와 } 안의 $... 변수를 Context::get(...) 으로 변경 + * @brief 이미지의 경로를 변경 **/ function _compileImgPath($matches) { static $real_path = null; @@ -290,18 +312,14 @@ **/ function _compileImportCode($matches) { // 현재 tpl 파일의 위치를 구해서 $base_path에 저장하여 적용하려는 xml file을 찾음 - //$base_path = dirname($this->tpl_file).'/'; $base_path = $this->tpl_path; $given_file = trim($matches[1]); if(!$given_file) return; - if(isset($matches[3])) - $optimized = strtolower(trim($matches[3])); + if(isset($matches[3])) $optimized = strtolower(trim($matches[3])); if(!$optimized) $optimized = 'true'; - if(isset($matches[5])) - $media = trim($matches[5]); + if(isset($matches[5])) $media = trim($matches[5]); if(!$media) $media = 'all'; - if(isset($matches[7])) - $targetie = trim($matches[7]); + if(isset($matches[7])) $targetie = trim($matches[7]); if(!$targetie) $targetie = ''; else $optimized = 'false'; @@ -313,10 +331,11 @@ // load lang이 아니라면 xml, css, js파일을 읽도록 시도 } else { - $filename = sprintf("%s%s",$base_path, $given_file); + if(substr($given_file,0,1)!='/') $source_filename = sprintf("%s%s",$base_path, $given_file); + else $source_filename = $given_file; // path와 파일이름을 구함 - $tmp_arr = explode("/",$filename); + $tmp_arr = explode("/",$source_filename); $filename = array_pop($tmp_arr); $base_path = implode("/",$tmp_arr)."/"; @@ -347,18 +366,26 @@ break; // css file case 'css' : - $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename, $optimized, $media, $targetie); + if(preg_match('/^(http|\/)/i',$source_filename)) { + $output = sprintf('', $source_filename, 'false', $media, $targetie); + } else { + $meta_file = sprintf('%s%s', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized, $media, $targetie); + } break; // js file case 'js' : - $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename, $optimized, $targetie); + if(preg_match('/^(http|\/)/i',$source_filename)) { + $output = sprintf('', $source_filename, 'false', $targetie); + } else { + $meta_file = sprintf('%s%s', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized, $targetie); + } break; } } - $output = ''.$output; + if($meta_file) $output = ''.$output; return $output; } @@ -377,25 +404,22 @@ **/ function _compileUnloadCode($matches) { // 현재 tpl 파일의 위치를 구해서 $base_path에 저장하여 적용하려는 xml file을 찾음 - //$base_path = dirname($this->tpl_file).'/'; $base_path = $this->tpl_path; $given_file = trim($matches[1]); if(!$given_file) return; - if(isset($matches[3])) - $optimized = strtolower(trim($matches[3])); + if(isset($matches[3])) $optimized = strtolower(trim($matches[3])); if(!$optimized) $optimized = 'true'; - if(isset($matches[5])) - $media = trim($matches[5]); + if(isset($matches[5])) $media = trim($matches[5]); if(!$media) $media = 'all'; - if(isset($matches[7])) - $targetie = trim($matches[7]); + if(isset($matches[7])) $targetie = trim($matches[7]); if(!$targetie) $targetie = ''; else $optimized = 'false'; - $filename = sprintf("%s%s",$base_path, $given_file); + if(substr($given_file,0,1)!='/') $source_filename = sprintf("%s%s",$base_path, $given_file); + else $source_filename = $given_file; // path와 파일이름을 구함 - $tmp_arr = explode("/",$filename); + $tmp_arr = explode("/",$source_filename); $filename = array_pop($tmp_arr); $base_path = implode("/",$tmp_arr)."/"; @@ -408,13 +432,21 @@ switch($ext) { // css file case 'css' : - $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename, $optimized, $media, $targetie); + if(preg_match('/^(http|\/)/i',$source_filename)) { + $output = sprintf('', $source_filename, 'false', $media, $targetie); + } else { + $meta_file = sprintf('%s%s', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized, $media, $targetie); + } break; // js file case 'js' : - $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename, $optimized, $targetie); + if(preg_match('/^(http|\/)/i',$source_filename)) { + $output = sprintf('', $source_filename, 'false', $targetie); + } else { + $meta_file = sprintf('%s%s', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized, $targetie); + } break; } diff --git a/common/css/button.css b/common/css/button.css index 25336fc1c..322a8ff77 100644 --- a/common/css/button.css +++ b/common/css/button.css @@ -6,55 +6,35 @@ a.button, a.button span { position:relative; display:inline-block; text-decoration:none !important; background:url(../tpl/images/buttonWhite.gif) no-repeat; cursor:pointer; white-space:nowrap; vertical-align:middle; *vertical-align:top;} a.button { padding:0; background-position:left top; overflow:visible;} a.button span { left:2px; padding:6px 10px 5px 8px; color:#000; font:12px/12px Sans-serif; background-position:right top;} -a.button, x:-moz-any-link { font:0/23px Sans-serif; padding:12px 0; top:1px;} /* Firefox 2 Fix */ -a.button, x:-moz-any-link, x:default { padding:0; top:0;} /* Firefox 2 Fix */ /* Large Size */ a.button.large { background-position:left -30px; } a.button.large span { padding:7px 10px 6px 8px; font:16px/16px Sans-serif; background-position:right -30px;} -a.button.large, x:-moz-any-link { font:0/29px Sans-serif; padding:15px 0;} /* Firefox 2 Fix */ -a.button.large, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */ /* xLarge Size */ a.button.xLarge { background-position:left -65px; } a.button.xLarge span { padding:8px 10px 7px 8px; font:20px/20px Sans-serif; background-position:right -65px;} -a.button.xLarge, x:-moz-any-link { font:0/35px Sans-serif; padding:18px 0;} /* Firefox 2 Fix */ -a.button.xLarge, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */ /* Small Size */ a.button.small { background-position:left -107px; } a.button.small span { padding:4px 6px 3px 4px; font:11px/11px Sans-serif; background-position:right -107px;} -a.button.small, x:-moz-any-link { font:0/18px Sans-serif; padding:9px 0;} /* Firefox 2 Fix */ -a.button.small, x:-moz-any-link, x:default { padding:0;} /* Firefox 2 Fix */ /* Control Button + Submit Button */ span.button, span.button button, span.button input { position:relative; margin:0; display:inline-block; border:0; font:12px Sans-serif; white-space:nowrap; background:url(../tpl/images/buttonWhite.gif) no-repeat; vertical-align:middle;} span.button { padding:0; background-position:left top;} -span.button, x:-moz-any-link{ font:0/23px Sans-serif; padding:11px 0;} /* Firefox 2 Fix */ -span.button, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */ span.button button, -span.button input { height:23px; left:2px; *top:-1px; _top:0; padding:0 10px 0 8px; *padding:0 5px 0 3px; line-height:24px; background-position:right top; cursor:pointer;} +span.button input { height:23px; left:2px; *top:-1px; _top:0; padding:0 10px 0 8px; line-height:24px; background-position:right top; cursor:pointer; *overflow:visible;} /* Large Size */ span.button.large { background-position:left -30px;} -span.button.large, x:-moz-any-link{ font:0/29px Sans-serif; padding:14px 0;} /* Firefox 2 Fix */ -span.button.large, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */ span.button.large button, -span.button.large input { height:30px; *top:0; _top:-1px; padding:0 10px 0 8px; *padding:0 5px 0 3px; font:16px/30px Sans-serif; background-position:right -30px;} +span.button.large input { height:30px; *top:0; _top:-1px; padding:0 10px 0 8px; font:16px/30px Sans-serif; background-position:right -30px;} /* xLarge Size */ span.button.xLarge { background-position:left -65px;} -span.button.xLarge, x:-moz-any-link{ font:0/35px Sans-serif; padding:17px 0;} /* Firefox 2 Fix */ -span.button.xLarge, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */ span.button.xLarge button, -span.button.xLarge input { height:35px; padding:0 10px 0 8px; *padding:0 5px 0 3px; font:20px/36px Sans-serif; background-position:right -65px;} +span.button.xLarge input { height:35px; padding:0 10px 0 8px; font:20px/36px Sans-serif; background-position:right -65px;} /* Small Size */ span.button.small { background-position:left -107px;} -span.button.small, x:-moz-any-link{ font:0/18px Sans-serif; padding:9px 0;} /* Firefox 2 Fix */ -span.button.small, x:-moz-any-link, x:default{ padding:0;} /* Firefox 2 Fix */ span.button.small button, -span.button.small input { height:18px; *top:0; _top:-1px; padding:0 6px 0 4px; *padding:0 3px 0 2px; font:11px/18px Sans-serif; background-position:right -107px;} -span.button.small button, x:-moz-any-link, -span.button.small input, x:-moz-any-link{ top:-1px;} /* Firefox 2 Fix */ -span.button.small button, x:-moz-any-link, x:default, -span.button.small input, x:-moz-any-link, x:default{ top:0;} /* Firefox 2 Fix */ +span.button.small input { height:18px; *top:0; _top:-1px; padding:0 6px 0 4px; font:11px/18px Sans-serif; background-position:right -107px;} /* Strong Button */ a.button.strong *, diff --git a/common/css/default.css b/common/css/default.css index e4344407b..d4f85fc4b 100644 --- a/common/css/default.css +++ b/common/css/default.css @@ -73,7 +73,7 @@ a.bold { font-weight:bold; } .folder_closer { display: none; } .folder_area { display: none; } -.xe_content { line-height:1.6; } +.xe_content { line-height:1.6; overflow:hidden; } .zbxe_widget_output { background:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;} diff --git a/common/js/common.js b/common/js/common.js index 2fc9a0100..c09725b0b 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -517,7 +517,7 @@ function setFixedPopupSize() { bodyObj.css({paddingRight:30}); var w = jQuery("#popup_content").width(); - w = w< 400 ? 400 : w; + w = w< 600 ? 600 : w; var h = jQuery("#popup_content").height(); if(h != _popupHeight) { diff --git a/common/js/plugins/ui.calendar/img/buttonCloseLayerX.gif b/common/js/plugins/ui.calendar/img/buttonCloseLayerX.gif new file mode 100644 index 000000000..535cfafad Binary files /dev/null and b/common/js/plugins/ui.calendar/img/buttonCloseLayerX.gif differ diff --git a/common/js/plugins/ui.calendar/img/buttonPaginate.gif b/common/js/plugins/ui.calendar/img/buttonPaginate.gif new file mode 100644 index 000000000..ab1c524c1 Binary files /dev/null and b/common/js/plugins/ui.calendar/img/buttonPaginate.gif differ diff --git a/common/js/plugins/ui.calendar/plugin.load b/common/js/plugins/ui.calendar/plugin.load new file mode 100644 index 000000000..800d8a64a --- /dev/null +++ b/common/js/plugins/ui.calendar/plugin.load @@ -0,0 +1,2 @@ +ui.calendar.js +ui.calendar.css \ No newline at end of file diff --git a/common/js/plugins/ui.calendar/ui.calendar.css b/common/js/plugins/ui.calendar/ui.calendar.css new file mode 100644 index 000000000..ff3205e47 --- /dev/null +++ b/common/js/plugins/ui.calendar/ui.calendar.css @@ -0,0 +1,30 @@ +/* Calendar */ +.ui-calendar {display:none; padding:25px 15px 15px 15px; position:absolute; border:2px solid #737373; background:#fff; color:#333;} +.ui-calendar .close{ position:absolute; top:10px; right:15px; width:17px; height:17px; border:0; padding:0; background:url(./img/buttonCloseLayerX.gif) no-repeat center center; cursor:pointer;} +.ui-calendar .close span{ position:absolute; width:0; height:0; font-size:0; line-height:0; overflow:hidden; z-index:-1; visibility:hidden;} +.ui-calendar table{ border:0; border-spacing:0; _width:200px;} +.ui-calendar caption{ font-weight:bold; text-align:center; position:relative;} +.ui-calendar caption span{ display:block; position:relative; padding:10px 0 15px 0; *zoom:1;} +.ui-calendar caption .today{ font-size:11px; border:0; padding:0; border-bottom:1px solid; background:none; cursor:pointer;} +.ui-calendar caption .today span{text-decoration:underline;} +.ui-calendar caption .navi{ position:absolute; top:10px; border:0; padding:0; width:17px; height:18px; background-color:transparent; background-image:url(./img/buttonPaginate.gif); background-repeat:no-repeat; cursor:pointer;} +.ui-calendar caption .navi span{ position:absolute; width:0; height:0; overflow:hidden; font-size:0; line-height:0; z-index:-1; visibility:hidden;} +.ui-calendar caption .navi.prev{ left:0; background-position:left top;} +.ui-calendar caption .navi.next{ right:0; background-position:right top;} +.ui-calendar th, +.ui-calendar td{ border:0; text-align:center;} +.ui-calendar th{ color:#666; background:#f2f2f2; padding:3px 8px;} +.ui-calendar td{ font-size:11px; padding:3px 8px;} +.ui-calendar td button{ padding:0; border:0; background:none; cursor:pointer; width:20px; font-size:11px; font-family:Tahoma, Sans-serif;} +.ui-calendar td button.today{ font-weight:bold;} +.ui-calendar td button.book, +.ui-calendar td button.active, +.ui-calendar tr.active button{ background:#ff4747; color:#fff;} +.ui-calendar .sun, +.ui-calendar .sun button{ color:#ff1a1a;} + +.ui-calendar table.month{ border-top:1px solid #f2f2f2; border-left:1px solid #f2f2f2;} +.ui-calendar table.month td{ border-right:1px solid #f2f2f2; border-bottom:1px solid #f2f2f2;} +.ui-calendar table.month td button{ width:50px; color:#bababa;} +.ui-calendar table.month td button.past{ color:#333;} +.ui-calendar table.month td button.active{ color:#fff;} diff --git a/common/js/plugins/ui.calendar/ui.calendar.js b/common/js/plugins/ui.calendar/ui.calendar.js new file mode 100644 index 000000000..c25f95f70 --- /dev/null +++ b/common/js/plugins/ui.calendar/ui.calendar.js @@ -0,0 +1,358 @@ +/** + * @brief XE Calendar + * @author gony (http://mygony.com) + * + * 사용법 + * + **/ +(function($){ + +if (!$.ui) $.ui = {}; +$.extend($.ui, { calendar: { version:'0.3' } }); + +var PROP_NAME = 'calendar'; +var index = 0; +var calendars = {}; +var template = {calendar:'',month:''}; + +function Calendar() { +} + +$.extend(Calendar.prototype, { + _activeCalendar : null, + _getuid : function(obj) { + var uid = obj.attr('class').match(/ui-calendar-(\d+-\d+)/); + + if (!uid) return -1; + return uid[1]; + }, + _show : function(obj) { + if (this._activeCalendar) this._hide(this._activeCalendar); + + // disabled? + if (obj.hasClass('ui-calendar-disabled')) return; + + // Active Calendar + this._activeCalendar = obj.show(300); + }, + _hide : function(obj) { + if (this._activeCalendar && this._activeCalendar.get(0) == obj.get(0)) this._activeCalendar = null; + obj.hide(300); + }, + _toggle : function(obj) { + (obj.css('display' ) == 'none')?this._show(obj):this._hide(obj); + }, + _attachCalendar : function(obj, options) { + if ((obj=$(obj)).hasClass('ui-calendar')) return; + + var uid = $.calendar.uuid+'-'+(index++); + var c = calendars[uid] = {}; + + // uid 추가 + obj.addClass('ui-calendar-'+uid).mousedown(function(){return false}); + + // default options + c.options = $.extend({ + type : 'day', + activeDate : '' + }, options||{}); + c.lang = $.extend({ + weekdays : 'Sun,Mon,Tue,Wed,Thu,Fri,Sat', + today : 'Today', + prevmonth : 'Prev Month', + nextmonth : 'Next Month', + close : 'Close' + }, options.lang||{}); + + c.lang.weekdays = c.lang.weekdays.split(','); + + // 날짜 설정 + var d; + if (typeof c.options.activeDate == 'string' && c.options.activeDate) { + var s = c.options.activeDate.split('/'); + d = new Date(s[0], s[1]-1, s[2]-0); + } else { + d = new Date(); + } + this._setDate(obj, d); + + // 토글 버튼 + if (c.options.button) { + (c.button=$(c.options.button)).click(function(){ obj.calendar('toggle') }); + } + + // 클래스 추가 + obj.addClass('ui-calendar'); + + // position 설정한 후, 좌표를 (0,0)으로 변경 + var pos = obj.css({position:'absolute',top:0,left:0}).show().offset(); + + // 버튼의 위치 구해서 좌표 조정 + var bpos = c.button.offset(); + var dx = bpos.left - pos.left; + var dy = bpos.top - pos.top; + + // 좌표 조정 후 레이어 숨김 + obj.css({top:(dy+c.button.height())+'px',left:dx+'px'}).hide(); + }, + _checkExternalClick : function(e) { + if ($.calendar._activeCalendar) $.calendar._hide($.calendar._activeCalendar); + }, + _processTemplate : function(tpl, vars) { + tpl = (' '+tpl+' ').split(/[\{\}]/g); + + for(var i=0; i < tpl.length; i++) { + if (i%2) { + if (/^[\w\.\[\]]+$/.test(tpl[i])) tpl[i] = 'try{v=vv.'+tpl[i]+'}catch(e){v=""};ret.push(v);'; + else if (/^@(\w+)\s+in\s+(\w+)$/.test(tpl[i])) tpl[i] = 'for(i=0,l=vv.'+RegExp.$2+'.length;i 9?v['m']:'0'+v['m']; + + // 연간 달력이 아니라면 이 달의 날짜를 구한다. + if (cal.options.type != 'month') { + // 날짜에 사용할 달력 + v['weeks'] = []; + + var d = new Date(cal.date.getTime()), w = []; + var last = (v.m!=2)? (v.m%2?31:30) : ((new Date(v.yyyy,v.m-1,29)).getMonth()==v.m?29:28); // 마지막 날 + + d.setDate(1); // 1일로 설정 후 1일의 요일을 가져온다. + var start = d.getDay(), end = last+start; + + for(var i=0,len=end+(7-(end%7||7));i= end) w.push(' '); + else w.push(''); + } + } + + // 템플릿 처리 + tpl = this._processTemplate(tpl, v); + obj.html(tpl); + + // 선택한 날짜 + if (cal.options.type == 'month') { + + } else { + var t = new Date(); + obj.find('td>button.day'+t.getFullYear()+'-'+(t.getMonth()+1)+'-'+t.getDate()).addClass('today'); + + t = cal.activeDate; + obj.find('td>button.day'+t.getFullYear()+'-'+(t.getMonth()+1)+'-'+t.getDate()).addClass('active'); + } + + // 이벤트 핸들러 + obj.find('button.close').click(function(){ $.calendar._hide(obj); }); + obj.find('button.today').click(function(){ $.calendar._moveToday(obj); }); + if (cal.options.type == 'month') { + obj.find('button.prev').click(function(){ $.calendar._prevYear(obj) }); + obj.find('button.next').click(function(){ $.calendar._nextYear(obj) }); + } else { + obj.find('button.prev').click(function(){ $.calendar._prevMonth(obj) }); + obj.find('button.next').click(function(){ $.calendar._nextMonth(obj) }); + } + obj.find('td>button').click(function(){ $.calendar._selectDate(obj, $(this)) }); + }, + _selectDate : function(obj, btn) { + var cal = calendars[ this._getuid(obj) ]; + var date = btn.attr('class').match(/day([\d\-]+)/); + if (!date) return; + + date = date[1].split('-'); + + var ad = cal.activeDate; + ad.setFullYear(date[0]-0); + ad.setMonth(date[1]-1); + ad.setDate(date[2]-0); + + this._setDate(obj, ad); + }, + _setDate : function(obj, newDate) { + var uid = this._getuid(obj); + if (uid < 0) return null; + if (!newDate || !(newDate instanceof Date)) newDate = new Date(); + + var cal = calendars[uid]; + cal.activeDate = new Date(newDate.getTime()); + cal.date = new Date(newDate.getTime()); + this._draw(obj); + + if ($.isFunction(cal.options.select) && obj.hasClass('ui-calendar')) { + cal.options.select(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate()); + } + }, + _getDate : function(obj, format) { + var uid = this._getuid(obj); + if (uid < 0) return null; + if (typeof format != 'string') return calendars[uid].activeDate; + + // format string + }, + _moveToday : function(obj) { + calendars[this._getuid(obj)].date = new Date(); + this._draw(obj); + }, + _prevMonth : function(obj) { + var cal = calendars[this._getuid(obj)]; + var m = cal.date.getMonth(); + + cal.date.setDate(1); + if (m == 0) { + cal.date.setFullYear(cal.date.getFullYear()-1); + cal.date.setMonth(11); + } else { + cal.date.setMonth(m-1); + } + + this._draw(obj); + }, + _nextMonth : function(obj) { + var cal = calendars[this._getuid(obj)]; + var m = cal.date.getMonth(); + + cal.date.setDate(1); + if (m == 11) { + cal.date.setFullYear(cal.date.getFullYear()+1); + cal.date.setMonth(0); + } else { + cal.date.setMonth(m+1); + } + + this._draw(obj); + }, + _prevYear : function(obj) { + this._draw(obj); + cal.date.setFullYear(cal.date.getFullYear()-1); + }, + _nextYear : function(obj) { + cal.date.setFullYear(cal.date.getFullYear()+1); + this._draw(obj); + } +}); + +/** + * Invoke the calednar functionallity + * @return jQuery object + */ +$.fn.calendar = function(options) { + var args = $.makeArray(arguments); + + if (!$.calendar.initialized) { + $(document).mousedown($.calendar._checkExternalClick); + $.calendar.initialized = true; + } + + if (typeof options == 'string' && $.inArray(options, ['getDate'])) { + args.shift(); + return $.calendar['_'+options].apply($.calendar, [$(this[0])].concat(args) ); + } + + return this.each(function(){ + if (typeof options == 'string') { + args.shift(); + $.calendar['_'+ options].apply($.calendar, [$(this)].concat(args)); + } else { + $.calendar._attachCalendar($(this), options); + } + }); +} + +$.calendar = new Calendar(); // singleton instance +$.calendar.initialized = false; +$.calendar.uuid = new Date().getTime(); +$.calendar.version = $.ui.calendar.version; + +// template +template.calendar = '\ +\ +\ +\ + \ + \ + \ + \ + \ + \ + \ + \ + \ +\ +\ + {@week in weeks}\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + {/}\ +\ +
\ + \ + {yyyy}.{mm}.\ + \ + \ + \ + \ +
{lang.weekdays[0]}{lang.weekdays[1]}{lang.weekdays[2]}{lang.weekdays[3]}{lang.weekdays[4]}{lang.weekdays[5]}{lang.weekdays[6]}
{week[0]}{week[1]}{week[2]}{week[3]}{week[4]}{week[5]}{week[6]}
\ +'; + +template.month = '\ +\ +\ +\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ +\ +
\ + \ + {yyyy}.{mm} \ + \ + \ + \ +
\ +'; + +})(jQuery); \ No newline at end of file diff --git a/common/js/xml_js_filter.js b/common/js/xml_js_filter.js index 01b89fa29..181d9c91c 100644 --- a/common/js/xml_js_filter.js +++ b/common/js/xml_js_filter.js @@ -28,7 +28,7 @@ function filterAlertMessage(ret_obj) { if(typeof(act)!="undefined" && act) url = current_url.setQuery("act", act); else if(typeof(redirect_url)!="undefined" && redirect_url) url = redirect_url; - if(url == location.href) url = url.replace(/#(.+)$/,''); + if(url == location.href) url = url.replace(/#(.*)$/,''); location.href = url; } diff --git a/common/lang/en.lang.php b/common/lang/en.lang.php index 3f9213406..6eee644e4 100644 --- a/common/lang/en.lang.php +++ b/common/lang/en.lang.php @@ -233,7 +233,7 @@ $lang->success_updated = 'Updated successfully'; $lang->success_deleted = 'Deleted successfully'; $lang->success_voted = 'Recommended successfully'; - $lang->success_blamed = 'Blamed success_blamed'; + $lang->success_blamed = 'Blamed successfully'; $lang->success_moved = 'Moved successfully'; $lang->success_sended = 'Sent successfully'; $lang->success_reset = 'Reset successfully'; diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index 1978f441a..d8de2c85f 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -151,7 +151,7 @@ $lang->regdate = '登録日'; $lang->last_update = '最近修正日'; $lang->last_post = '最近登録'; - $lang->signup_date = '加入日'; + $lang->signup_date = '登録日'; $lang->last_login = '最近ログイン'; $lang->first_page = '最初のページ'; $lang->last_page = '最後のページ'; @@ -221,8 +221,8 @@ $lang->msg_error_occured = 'エラーが発生しました。'; $lang->msg_not_founded = '見つかりません。'; $lang->msg_no_result = '検索結果がありません。'; - $lang->msg_fail_to_request_open = 'Fail to open your request'; - $lang->msg_invalid_format = 'Invalid Format'; + $lang->msg_fail_to_request_open = 'リクエストのアクセスに失敗しました。'; + $lang->msg_invalid_format = '正しくないフォーマットです。'; $lang->msg_not_permitted_act = '現在の操作は実行する権限がありません。'; $lang->msg_module_is_not_exists = "モジュールの起動を有効にされていません。\n管理者ページにセットアップを開始するモジュール。"; @@ -277,22 +277,23 @@ $lang->is_required = '必須項目'; $lang->eid = '拡張変数名'; - // ftp 관련 + // ftp関連 $lang->ftp_form_title = 'サーバーのFTP情報の入力'; $lang->ftp = 'FTP'; - $lang->ftp_port = 'FTP port'; + $lang->ftp_port = 'FTPポート番号(port)'; $lang->cmd_check_ftp_connect = 'FTP接続をテストする'; $lang->about_ftp_info = " - FTP情報は次の場合、利用されます。
- 1. PHPのsafe_mode=Onになった際、FTP情報を用いてXEが正常に動きます。
- 2. FTP経由でXEの自動アップデート等に使われます。
- FTP情報は files/config/ftp.config.php の中に保存されます。
+ FTP情報は次の場合、利用されます。
+ 1. サーバー側のPHPの設定中、「safe_mode=On」になった際、FTP情報を用いてXEが正常に働くようにします。 +
+ 2. FTP経由でXEの自動アップデート等に使われます。
+ FTP情報は「files/config/ftp.config.php」の中に保存されます。
また、XEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。(省略可能)
"; $lang->msg_safe_mode_ftp_needed = "PHPのsafe_modeがOnの場合、FTP情報を登録することで、XEのインストール及び利用が可能になります。"; $lang->msg_ftp_not_connected = "localhostへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかをご確認下さい。"; - $lang->msg_ftp_invalid_auth_info = "ログインが失敗しました。 FTP情報を再度ご確認下さい。"; + $lang->msg_ftp_invalid_auth_info = "ログインが失敗しました。 FTPアクセス情報を再度ご確認下さい。"; $lang->msg_ftp_mkdir_fail = "FTPを用いたディレクトリ生成に失敗しました。FTPサーバーの設定を再度ご確認下さい。"; $lang->msg_ftp_chmod_fail = "FTPを用いたディレクトリパーミッション(permission)変更に失敗しました。FTPサーバーの設定を再度ご確認下さい。"; $lang->msg_ftp_connect_success = "FTP接続に成功しました。"; @@ -301,9 +302,9 @@ $lang->filter->isnull = '%sを入力して下さい。'; $lang->filter->outofrange = '%sの文字の長さを合わせて下さい。'; $lang->filter->equalto = '%sが正しくありません。'; - $lang->filter->invalid_email = '%sのパターンが正しくありません。 (例: zbxe@zeroboard.com)'; + $lang->filter->invalid_email = '%sのパターンが正しくありません。 (例: zbxe@xepressengine.com)'; $lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%sの形式が正しくありません。\\n半角の英数と記号「_」を組み合わせて入力して下さい。頭字は半角英文字でなければなりません。"; - $lang->filter->invalid_homepage = '%sの形式が正しくありません。 (例: http://www.zeroboard.com)'; + $lang->filter->invalid_homepage = '%sの形式が正しくありません。 (例: http://www.xepressengine.com)'; $lang->filter->invalid_korean = '%sの形式が正しくありません。ハングルのみ入力して下さい。'; $lang->filter->invalid_korean_number = '%sの形式が正しくありません。ハングルと半角数字で入力して下さい。'; $lang->filter->invalid_alpha = '%sの形式が正しくありません。半角英文字のみ入力して下さい。'; diff --git a/common/lang/zh-TW.lang.php b/common/lang/zh-TW.lang.php index 510c83af1..c146ab0af 100644 --- a/common/lang/zh-TW.lang.php +++ b/common/lang/zh-TW.lang.php @@ -126,7 +126,7 @@ $lang->mid = '模組名稱'; $lang->sid = '網站名稱'; $lang->layout = '版面'; - $lang->widget = '控件 '; + $lang->widget = 'Widget '; $lang->module = '模組'; $lang->skin = '面板'; $lang->colorset = '顏色設定'; @@ -186,7 +186,7 @@ 'Wednesday' => '星期三', 'Thursday' => '星期四', 'Friday' => '星期五', - 'Saturday' => '禮拜六', + 'Saturday' => '星期六', 'Sunday' => '星期日', ); @@ -220,12 +220,12 @@ $lang->msg_invalid_password = '密碼錯誤'; $lang->msg_error_occured = '發生錯誤'; $lang->msg_not_founded = '找不到相關內容'; - $lang->msg_no_result = '找不到與您查詢的相符結果'; + $lang->msg_no_result = '搜尋不到結果'; $lang->msg_fail_to_request_open = 'Fail to open your request'; - $lang->msg_invalid_format = 'Invalid Format'; + $lang->msg_invalid_format = '格式錯誤'; $lang->msg_not_permitted_act = '沒有權限執行'; - $lang->msg_module_is_not_exists = "啟動模塊沒有啟用。\n安裝啟動模塊的管理員網頁。"; + $lang->msg_module_is_not_exists = "還沒有啟用模組。\n請在管理員頁面中啟用模組。"; $lang->msg_module_is_not_standalone = '您請求的模組不能單獨執行'; $lang->success_registed = '成功送出!'; @@ -244,9 +244,9 @@ $lang->fail_to_delete = '刪除成功!'; $lang->fail_to_move = '移動成功!'; - $lang->failed_voted = '您不能推薦!'; - $lang->failed_blamed = '您不能反對!'; - $lang->failed_declared = '您沒有檢舉權限!'; + $lang->failed_voted = '無法推薦!'; + $lang->failed_blamed = '無法反對!'; + $lang->failed_declared = '無法檢舉!'; $lang->fail_to_delete_have_children = '不能刪除有回覆的評論!'; $lang->confirm_submit = '確定要送出嗎?'; diff --git a/common/tpl/refresh.html b/common/tpl/refresh.html index 2f4983d1d..4ac78ff14 100644 --- a/common/tpl/refresh.html +++ b/common/tpl/refresh.html @@ -1,3 +1,3 @@ diff --git a/config/config.inc.php b/config/config.inc.php index ae94b01af..172d6f65e 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -13,7 +13,7 @@ * @brief XE의 전체 버전 표기 * 이 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '1.2.2'); + define('__ZBXE_VERSION__', '1.2.3'); /** * @brief zbXE가 설치된 장소의 base path를 구함 @@ -31,7 +31,7 @@ * define('__DEBUG_DB_OUTPUT__', 0); * define('__LOG_SLOW_QUERY__', 0); * define('__OB_GZHANDLER_ENABLE__', 1); - * + * define('__ENABLE_PHPUNIT_TEST__', 0); * define('__PROXY_SERVER__', 'http://domain:port/path'); * ?> */ @@ -87,6 +87,13 @@ **/ if(!defined('__OB_GZHANDLER_ENABLE__')) define('__OB_GZHANDLER_ENABLE__', 1); + /** + * @brief php unit test (경로/tests/index.php) 의 실행 유무 지정 + * 0 : 사용하지 않음 + * 1 : 사용함 + **/ + if(!defined('__ENABLE_PHPUNIT_TEST__')) define('__ENABLE_PHPUNIT_TEST__', 0); + /** * @brief __PROXY_SERVER__ 는 대상 서버를 거쳐서 외부 요청을 하도록 하는 서버의 정보를 가지고 있음 * FileHandler::getRemoteResource 에서 이 상수를 사용함 diff --git a/config/func.inc.php b/config/func.inc.php index fcfdf6234..f220ef427 100644 --- a/config/func.inc.php +++ b/config/func.inc.php @@ -524,7 +524,7 @@ **/ function removeHackTag($content) { // 특정 태그들을 일반 문자로 변경 - $content = preg_replace('/<(\/?)(iframe|script|meta|style)/is', '<$1$2', $content); + $content = preg_replace('/<(\/?)(iframe|script|meta|style|applet)/is', '<$1$2', $content); // XSS 사용을 위한 이벤트 제거 $content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content); diff --git a/layouts/cafeXE/conf/info.xml b/layouts/cafeXE/conf/info.xml index f40c13e70..2eb9f8648 100644 --- a/layouts/cafeXE/conf/info.xml +++ b/layouts/cafeXE/conf/info.xml @@ -69,12 +69,12 @@ Homepage's URL 站点地址 主頁網址 - ホームページのURL + cafeXEのURL 로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요. Input a destination URL when users click the logo. 点击LOGO时要移动的页面地址。 請輸入當用戶按了網站Logo後,要前往的頁面網址。 - ロゴをクリックする際、移動するホームページURLを入力して下さい。 + ロゴをクリックする際、移動するcafeXEのURLを入力して下さい。 로고 글자 @@ -136,7 +136,7 @@ Content position 内容区位置 選擇位置 - 本文位置 + 本文配置 본문의 위치를 좌/우중 선택할 수 있습니다. You can choose the position of content between left and right. 可以设置内容区的位置(左侧/右侧)。 diff --git a/layouts/cafeXE/lang/jp.lang.php b/layouts/cafeXE/lang/jp.lang.php index ff71c4e87..e90649314 100644 --- a/layouts/cafeXE/lang/jp.lang.php +++ b/layouts/cafeXE/lang/jp.lang.php @@ -5,7 +5,7 @@ * @brief 日本語言語パッケージ(基本的な内容のみ) **/ - $lang->new_members = '新規会員のお知らせ'; + $lang->new_members = '新規会員'; $lang->document_ranking = '書き込みランキング'; $lang->comment_ranking = 'コメント数ランキング'; ?> diff --git a/layouts/xe_blog/conf/info.xml b/layouts/xe_blog/conf/info.xml index 620ae2658..5dc11e715 100644 --- a/layouts/xe_blog/conf/info.xml +++ b/layouts/xe_blog/conf/info.xml @@ -208,7 +208,7 @@ 상단 메뉴 - 上段メニュー + 上段用メニュー 菜单 Top Menu Top-Menü diff --git a/layouts/xe_official/conf/info.xml b/layouts/xe_official/conf/info.xml index 1d2c53729..bb1789a1c 100644 --- a/layouts/xe_official/conf/info.xml +++ b/layouts/xe_official/conf/info.xml @@ -130,7 +130,7 @@ Изображения логотипа Imagen del logotipo 레이아웃의 상단에 표시될 로고이미지를 입력하세요. (세로길이가 23px인 투명이미지가 가장 어울립니다) - レイアウトの上段に表示されるロゴイメージを入力して下さい。 (縦幅が23pxである透明イメージが最も合います。) + レイアウトの上段に表示されるロゴイメージを入力して下さい。 (縦幅が23pxである透明イメージをお勧めします。。) 请输入显示在布局顶部的LOGO图片(高度为23px的透明图片为适)。 請輸入要顯示在版面上端的Logo圖片。(適當高度為23px的透明圖片。) Please input a logo image which will be displayed on the top of layout. (Transparent image with height of 23px is recommended.) @@ -179,7 +179,7 @@ 상단 메뉴 - 上段メニュー + 上段用メニュー 主菜单 主選單 Top menu @@ -189,7 +189,7 @@ 하단 메뉴 - 下段メニュー + 下段用メニュー 底部菜单 底部選單 Bottom menu diff --git a/modules/addon/lang/jp.lang.php b/modules/addon/lang/jp.lang.php index 85cb120c6..74e1fbfed 100644 --- a/modules/addon/lang/jp.lang.php +++ b/modules/addon/lang/jp.lang.php @@ -1,6 +1,6 @@ addon_info = 'アドオン情報'; $lang->addon_maker = 'アドオン制作者'; $lang->addon_license = 'ライセンス'; - $lang->addon_history = '変更内容'; + $lang->addon_history = '変更履歴'; - $lang->about_addon_mid = "アドオンが使われる対象を指定します。
(選択なしの場合、全ての対象で利用可能)"; - $lang->about_addon = 'アドオンは、HTMLの出力をコントロールするというより動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけでサイトの運営に有用な機能が利用出来ます。'; + $lang->about_addon_mid = "アドオンが使われる対象を指定します。
(選択なしの場合、全てのモジュールが利用可能対象)"; + $lang->about_addon = 'アドオンは、HTMLの出力をコントロールするというより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。'; ?> diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 99b33f0ea..4b48efdfb 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -89,7 +89,7 @@ /** * 최근 뉴스를 가져와서 세팅 **/ - $newest_news_url = sprintf("http://news.zeroboard.com/%s/news.php", Context::getLangType()); + $newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php", Context::getLangType()); $cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_,Context::getLangType()); if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) { FileHandler::getRemoteFile($newest_news_url, $cache_file); diff --git a/modules/admin/conf/info.xml b/modules/admin/conf/info.xml index 5fc6b25f1..1677018a4 100644 --- a/modules/admin/conf/info.xml +++ b/modules/admin/conf/info.xml @@ -11,7 +11,7 @@ This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator. Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador. 列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。 - 各モジュールの機能を羅列し、管理者用のレイアウトを適用させ、管理機能が使用出来るようにするモジュールです。 + 各モジュールを機能別に並べ、かつ管理者用のレイアウトを適用させて、管理機能が使用出来るようにします。 Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора. 列出各模組的功能並使用管理員版面,可讓其使用管理功能的模組。 0.1 diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index d15c45d89..50fe3e8da 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -1,6 +1,6 @@ admin_info = '管理者情報'; $lang->admin_index = '管理者トップページ'; $lang->control_panel = 'コントロールパネル'; - $lang->start_module = 'モジュールを起動します'; + $lang->start_module = '初期起動モジュール'; $lang->about_start_module = 'デフォルトで起動するモジュールを指定することができます。'; $lang->module_category_title = array( @@ -45,19 +45,19 @@ $lang->module_name = "モジュール名"; $lang->addon_name = "アドオン名"; $lang->version = "バージョン"; - $lang->author = "作者"; + $lang->author = "制作者"; $lang->table_count = "テーブル数"; $lang->installed_path = "インストールパス"; - $lang->cmd_shortcut_management = "メニュー編集"; + $lang->cmd_shortcut_management = "メニューの編集"; - $lang->msg_is_not_administrator = '管理者のみアクセス出来ます'; + $lang->msg_is_not_administrator = '管理者だけアクセス出来ます'; $lang->msg_manage_module_cannot_delete = 'モジュール、アドオン、ウィジェットのショットカットは削除出来ません。'; $lang->msg_default_act_is_null = 'デフォルトの管理者のアクションが指定されていないため、ショットカットを登録することが出来ません。'; $lang->welcome_to_xe = 'XEの管理者ページです。'; $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; - $lang->about_lang_env = "上で設定された言語を、初めてサイトに訪問したユーザに同じく適用させるためには、希望する言語に変更してから「保存」ボタンをクリックして下さい。"; + $lang->about_lang_env = "初めてサイトに訪問したユーザーに対し、上記の選択した言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用して下さい。"; $lang->xe_license = 'XEのライセンスはGPLです。'; $lang->about_shortcut = 'よく使用するモジュールに登録されたショートカットは削除出来ます。'; @@ -66,8 +66,8 @@ $lang->today = "今日"; $lang->cmd_lang_select = "言語選択"; - $lang->about_cmd_lang_select = "選択された言語のみでサービスを行います。"; - $lang->about_recompile_cache = "要らないdか誤ったキャッシューファイルを整理します。"; + $lang->about_cmd_lang_select = "選択された言語だけでサービスを行います。"; + $lang->about_recompile_cache = "要らないかごみのキャッシューファイルを整理します。"; $lang->use_ssl = "SSL環境設定"; $lang->ssl_options = array( 'none' => "使わない", @@ -77,6 +77,6 @@ $lang->about_use_ssl = "「部分的に使う場合」は「会員登録/会員情報変更」など特定のactionでSSLを利用する場合、「常に使う」は全てのサービスがSSLを使う場合に選択します。"; $lang->server_ports = "サーバーポート指定"; $lang->about_server_ports = "一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。"; - $lang->use_db_session = '인증 세션 DB 사용'; - $lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.
웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다
단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.'; + $lang->use_db_session = 'DBで認証セッション管理'; + $lang->about_db_session = '認証の時に使われるPHPセッションをDBで使う機能です。
ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。
また、この機能をオンにすると、「現在ログイン中の会員」の機能が不可になります。'; ?> diff --git a/modules/admin/lang/zh-CN.lang.php b/modules/admin/lang/zh-CN.lang.php index 09a7a1626..522e25bc2 100644 --- a/modules/admin/lang/zh-CN.lang.php +++ b/modules/admin/lang/zh-CN.lang.php @@ -77,6 +77,6 @@ $lang->about_use_ssl = "选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中,使用选项应用于所有服务。"; $lang->server_ports = "指定服务器端口"; $lang->about_server_ports = "使用除HTTP(80), HTTPS(443)以外的端口时,必须得指定该服务器端口号。"; - $lang->use_db_session = '인증 세션 DB 사용'; - $lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.
웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다
단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.'; + $lang->use_db_session = '使用DB session认证'; + $lang->about_db_session = '使用DBsession认证时系统会把PHPsession保存到数据库。
不使用这个功能会提高服务器应答速度,但读取不了在线人数。'; ?> diff --git a/modules/admin/lang/zh-TW.lang.php b/modules/admin/lang/zh-TW.lang.php index 03d13d8de..d99342c6e 100644 --- a/modules/admin/lang/zh-TW.lang.php +++ b/modules/admin/lang/zh-TW.lang.php @@ -8,8 +8,8 @@ $lang->admin_info = '管理員資訊'; $lang->admin_index = '管理頁面'; $lang->control_panel = '控制介面'; - $lang->start_module = '啟動模塊'; - $lang->about_start_module = '您可以指定默認的啟動模塊。'; + $lang->start_module = '啟用模組'; + $lang->about_start_module = '可以將所選擇的模組作為預設首頁。'; $lang->module_category_title = array( 'service' => '服務設定', @@ -35,11 +35,11 @@ $lang->current_version = "安裝版本"; $lang->current_path = "安裝路徑"; $lang->released_version = "最新版本"; - $lang->about_download_link = "官方網站已發佈新版本。\n請按[download]下載最新版本。"; + $lang->about_download_link = "官方網站已發佈新版本。\n請按[下載]下載最新版本。"; $lang->item_module = "模組列表"; $lang->item_addon = "元件列表"; - $lang->item_widget = "控件列表"; + $lang->item_widget = "Widget列表"; $lang->item_layout = "版面列表"; $lang->module_name = "模組名稱"; @@ -52,7 +52,7 @@ $lang->cmd_shortcut_management = "編輯選單"; $lang->msg_is_not_administrator = '只有管理員才可以檢視'; - $lang->msg_manage_module_cannot_delete = '模組,附加元件,版面設計,控件模組的快捷選單是無法刪除的。'; + $lang->msg_manage_module_cannot_delete = '模組,附加元件,版面設計,Widget的快捷選單是無法刪除的。'; $lang->msg_default_act_is_null = '沒有指定預設管理員的動作,是無法新增到快捷選單的。'; $lang->welcome_to_xe = 'XE管理頁面'; @@ -77,6 +77,6 @@ $lang->about_use_ssl = "當會員登入或修改資料等動作時,可選擇是否使用SSL功能。"; $lang->server_ports = "主機埠口"; $lang->about_server_ports = "HTTP預設埠口是『80』、HTTPS是『443』,如果想使用其他的埠口的話,請自行設定。"; - $lang->use_db_session = '인증 세션 DB 사용'; + $lang->use_db_session = 'DB session認證'; $lang->about_db_session = '인증시 사용되는 PHP 세션을 DB로 사용하는 기능입니다.
웹서버의 사용율이 낮은 사이트에서는 비활성화시 사이트 응답 속도가 향상될 수 있습니다
단 현재 접속자를 구할 수 없어 관련된 기능을 사용할 수 없게 됩니다.'; ?> diff --git a/modules/board/board.smartphone.php b/modules/board/board.smartphone.php index 9ce5b29b4..49c15813f 100644 --- a/modules/board/board.smartphone.php +++ b/modules/board/board.smartphone.php @@ -1,67 +1,44 @@ grant->list || $this->module_info->consultation == 'Y') return $oIPhone->setContent(Context::getLang('msg_not_permitted')); - $act = Context::get('act'); - if(method_exists($this, $act)) - { - $this->{$act}(); - } - else - { - $document_srl = Context::get('document_srl'); - if($document_srl) - return $this->dispContent($document_srl); - else - return $this->dispList(); - } - } - function dispContent($document_srl) - { + function procSmartPhone(&$oSmartPhone) { $oDocumentModel = &getModel('document'); - $oDocument = $oDocumentModel->getDocument($document_srl); + + if(!$this->grant->list || $this->module_info->consultation == 'Y') return $oSmartPhone->setContent(Context::getLang('msg_not_permitted')); + + $oDocument = Context::get('oDocument'); if($oDocument->isExists()) { - // 권한 확인 - if(!$this->grant->view) return Context::getLang('msg_not_permitted'); - - Context::setBrowserTitle($oDocument->getTitleText()); - Context::set('oDocument', $oDocument); - $oTemplate = new TemplateHandler(); - $content = $oTemplate->compile($this->module_path.'tpl/smartphone', "view_document"); - return $content; - } - else - { - return $this->dispList(); + if(Context::get('comment') == 'true' && $oDocument->getCommentCount()) { + Context::set('comment_list', $oDocument->getComments()); + $comment_page_navigation = $oDocument->comment_page_navigation; + if($comment_page_navigation) { + if($comment_page_navigation->cur_page > $comment_page_navigation->first_page) $oSmartPhone->setPrevUrl(getUrl('cpage',$comment_page_navigation->cur_page-1)); + if($comment_page_navigation->cur_page < $comment_page_navigation->last_page) $oSmartPhone->setNextUrl(getUrl('cpage',$comment_page_navigation->cur_page+1)); + } + $oSmartPhone->setParentUrl(getUrl('comment','')); + $tpl_file = 'comment_list'; + } else { + $oSmartPhone->setParentUrl(getUrl('document_srl','')); + $tpl_file = 'view_document'; + } + } else { + $page_navigation = Context::get('page_navigation'); + if($page_navigation) { + if($page_navigation->cur_page > $page_navigation->first_page) $oSmartPhone->setPrevUrl(getUrl('page',$page_navigation->cur_page-1)); + if($page_navigation->cur_page < $page_navigation->last_page) $oSmartPhone->setNextUrl(getUrl('page',$page_navigation->cur_page+1)); + } + $tpl_file = 'list'; } - } - - function dispList() - { - if(!$this->grant->list || $this->module_info->consultation == 'Y') return Context::getLang('msg_not_permitted'); - $oDocumentModel = &getModel('document'); - $args->module_srl = $this->module_srl; - $args->page = Context::get('page');; - $args->list_count = 8; - $args->sort_index = $this->module_info->order_target?$this->module_info->order_target:'list_order'; - $args->order_type = $this->module_info->order_type?$this->module_info->order_type:'asc'; - $output = $oDocumentModel->getDocumentList($args, $this->except_notice); - $document_list = $output->data; - Context::set('document_list', $document_list); - $page_navigation = $output->page_navigation; - Context::set('page_navigation',$page_navigation); $oTemplate = new TemplateHandler(); - $content = $oTemplate->compile($this->module_path.'tpl/smartphone', "list"); - return $content; + $content = $oTemplate->compile($this->module_path.'tpl/smartphone', $tpl_file); + $oSmartPhone->setContent($content); } } ?> diff --git a/modules/board/board.wap.php b/modules/board/board.wap.php index 1f96197ed..86fecf385 100644 --- a/modules/board/board.wap.php +++ b/modules/board/board.wap.php @@ -41,7 +41,7 @@ $oComment->setAttribute($val); if(!$oComment->isAccessible()) continue; $content .= "".$oComment->getNickName()." (".$oComment->getRegdate("Y-m-d").")
\r\n".$oComment->getContent(false,false)."
\r\n"; - } + } } // 내용 설정 @@ -54,12 +54,12 @@ } else { // 내용 지정 (태그를 모두 제거한 내용을 설정) - $content = strip_tags($oDocument->getContent(false,false,false)); + $content = strip_tags(str_replace('

','
   ',$oDocument->getContent(false,false,false)),'
'); // 내용 상단에 정보 출력 (댓글 보기 링크 포함) $content = Context::getLang('replies').' : '.$oDocument->getCommentCount().'
'."\r\n".$content; - $content = ''.$oDocument->getNickName()." (".$oDocument->getRegdate("Y-m-d").")
\r\n".$content; + $content = ''.$oDocument->getNickName().' ('.$oDocument->getRegdate("Y-m-d").")
\r\n".$content; // 내용 설정 $oMobile->setContent( $content ); @@ -90,11 +90,11 @@ $obj = null; $obj['href'] = $val->getPermanentUrl(); - $title = $val->getTitleText(); + $title = htmlspecialchars($val->getTitleText()); if($val->getCommentCount()) $title .= ' ['.$val->getCommentCount().']'; $obj['link'] = $obj['text'] = '['.$val->getNickName().'] '.$title; $childs[] = $obj; - } + } $oMobile->setChilds($childs); } diff --git a/modules/board/lang/jp.lang.php b/modules/board/lang/jp.lang.php index 7102867ab..30878581f 100644 --- a/modules/board/lang/jp.lang.php +++ b/modules/board/lang/jp.lang.php @@ -1,6 +1,6 @@ search_result = '検索結果'; $lang->consultation = '相談機能'; - $lang->secret = '秘密文機能'; - $lang->thisissecret = '秘密文です。'; + $lang->secret = '非公開文機能'; + $lang->thisissecret = '非公開文です。'; $lang->admin_mail = '管理者メールアドレス'; // ボタンに使用する用語 @@ -33,7 +33,7 @@ $lang->about_use_anonymous = '匿名掲示板として活用出来ます。スキン設定で登録者の情報を表示しないに設定をお勧めします。'; $lang->about_board = '掲示板の生成、および管理するモジュールです。'; $lang->about_consultation = "相談機能とは、管理権限のない会員に本人の書き込みだけを表示する機能です。\n但し、相談機能を使用する際は、非会員の書き込みは自動的に禁止されます。"; - $lang->about_secret = '掲示板およびコメントの秘密文を登録出来るようにします。'; + $lang->about_secret = '掲示板およびコメントの非公開文を登録出来るようにします。'; $lang->about_admin_mail = '書き込みやコメントが掲載される時、登録メールアドレス宛にメールが送信されます。
複数のメールアドレスへ送信する場合は「,」(半額コンマ)区切りで登録して下さい。'; $lang->about_list_config = '掲示板スタイルが「リスト型」の場合、好きな列の項目配置が出来ます。
ただし、スキンによってこの機能をサポートしない場合もあります。
ターゲットアイテム/表示アイテムをダブルクリックすると追加・削除が出来ます。'; diff --git a/modules/board/lang/ko.lang.php b/modules/board/lang/ko.lang.php index 84c22aafe..0a507dfbd 100644 --- a/modules/board/lang/ko.lang.php +++ b/modules/board/lang/ko.lang.php @@ -30,7 +30,7 @@ $lang->about_layout_setup = '블로그의 레이아웃 코드를 직접 수정할 수 있습니다. 위젯 코드를 원하는 곳에 삽입하시거나 관리하세요'; $lang->about_board_category = '분류를 만드실 수 있습니다.
분류가 오동작을 할 경우 캐시파일 재생성을 수동으로 해주시면 해결이 될 수 있습니다.'; $lang->about_except_notice = '목록 상단에 늘 나타나는 공지사항을 일반 목록에서 공지사항을 출력하지 않도록 합니다.'; - $lang->about_use_anonymous = '글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다'; + $lang->about_use_anonymous = '글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다.'; $lang->about_board = '게시판을 생성하고 관리할 수 있는 게시판 모듈입니다.'; $lang->about_consultation = "상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다\n단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다."; $lang->about_secret = '게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.'; diff --git a/modules/board/skins/xe_board/skin.xml b/modules/board/skins/xe_board/skin.xml index 5b1d727d2..881b2fc77 100644 --- a/modules/board/skins/xe_board/skin.xml +++ b/modules/board/skins/xe_board/skin.xml @@ -296,7 +296,7 @@ 게시판 제목 형식 - 게시판 제목 형식 + 掲示板タイトルフォーマット 게시판 제목 형식 게시판 제목 형식 게시판 제목 형식 @@ -353,7 +353,7 @@ 글 제목 형식 - 글 제목 형식 + 書き込みタイトルフォーマット 글 제목 형식 글 제목 형식 글 제목 형식 diff --git a/modules/board/skins/xe_board/write_form.html b/modules/board/skins/xe_board/write_form.html index c4f0d3968..959f02e36 100644 --- a/modules/board/skins/xe_board/write_form.html +++ b/modules/board/skins/xe_board/write_form.html @@ -1,5 +1,6 @@ +

diff --git a/modules/board/skins/xe_default/skin.xml b/modules/board/skins/xe_default/skin.xml index 834c1c495..93248737c 100644 --- a/modules/board/skins/xe_default/skin.xml +++ b/modules/board/skins/xe_default/skin.xml @@ -450,7 +450,7 @@ 可以设置主题发布者的个人签名及个性头像显示与否。 글내용 사용자의 서명과 프로필 이미지를 표시하거나 숨길 수 있습니다. 글내용 사용자의 서명과 프로필 이미지를 표시하거나 숨길 수 있습니다. - 可選擇是否在文章中顯示個人圖片和簽名檔 + 可選擇是否在文章中顯示個人圖片和簽名檔。 출력 display diff --git a/modules/board/tpl/smartphone/comment_list.html b/modules/board/tpl/smartphone/comment_list.html new file mode 100644 index 000000000..a3a692a5e --- /dev/null +++ b/modules/board/tpl/smartphone/comment_list.html @@ -0,0 +1,14 @@ +
    +
  • {$oDocument->getCommentCount()} comments, {$oDocument->comment_page_navigation->cur_page}/{$oDocument->comment_page_navigation->last_page} pages
  • + + +
  • + {$val->getContent(false)} + + {$val->getRegdate()} + [{$val->getNickName()}] + +
  • + + +
diff --git a/modules/board/tpl/smartphone/list.html b/modules/board/tpl/smartphone/list.html index fe5e357fb..f96e197ac 100644 --- a/modules/board/tpl/smartphone/list.html +++ b/modules/board/tpl/smartphone/list.html @@ -1,24 +1,17 @@ -
diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 74fe643c5..f553138b9 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -292,6 +292,9 @@ $obj->homepage = $source_obj->get('homepage'); } + + if(!$obj->content) $obj->content = $source_obj->get('content'); + // 내용에서 XE만의 태그를 삭제 $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); @@ -398,11 +401,27 @@ function deleteComments($document_srl) { // document model객체 생성 $oDocumentModel = &getModel('document'); + $oCommentModel = &getModel('comment'); // 권한이 있는지 확인 $oDocument = $oDocumentModel->getDocument($document_srl); if(!$oDocument->isExists() || !$oDocument->isGranted()) return new Object(-1, 'msg_not_permitted'); + // 댓글 목록을 가져와서 일단 trigger만 실행 (일괄 삭제를 해야 하기에 최대한 처리 비용을 줄이기 위한 방법) + $args->document_srl = $document_srl; + $comments = executeQueryArray('comment.getAllComments',$args); + if($comments->data) { + foreach($comments->data as $key => $comment) { + // trigger 호출 (before) + $output = ModuleHandler::triggerCall('comment.deleteComment', 'before', $comment); + if(!$output->toBool()) continue; + + // trigger 호출 (after) + $output = ModuleHandler::triggerCall('comment.deleteComment', 'after', $comment); + if(!$output->toBool()) continue; + } + } + // 댓글 본문 삭제 $args->document_srl = $document_srl; $output = executeQuery('comment.deleteComments', $args); diff --git a/modules/comment/comment.item.php b/modules/comment/comment.item.php index 0dd78f04d..943393f48 100644 --- a/modules/comment/comment.item.php +++ b/modules/comment/comment.item.php @@ -33,10 +33,6 @@ $this->comment_srl = null; return; } - if ($attribute->member_srl < 0) { - $attribute->member_srl = 0; - $attribute->ipaddress = '0.0.0.0'; - } $this->comment_srl = $attribute->comment_srl; $this->adds($attribute); @@ -205,18 +201,34 @@ return $content; } - function getSummary($str_size = 50) { - // 먼저 태그들을 제거함 - $content = preg_replace('!<([^>]*?)>!is','', $this->getContent(false,false)); + function getSummary($str_size = 50, $tail = '...') { + $content = $this->getContent(false, false); + + // 줄바꿈이 있을 때, 공백문자 삽입 + $content = preg_replace('!([\s]*)+!is', ' ', $content); + + //

, , 등의 태그를 공백 문자로 치환 + $content = str_replace(array('

', '', ''), ' ', $content); + + // 태그 제거 + $content = preg_replace('!<([^>]*?)>!is','', $content); // < , > , " 를 치환 $content = str_replace(array('<','>','"',' '), array('<','>','"',' '), $content); + // 연속된 공백문자 삭제 + $content = preg_replace('/ ( +)/is', ' ', $content); + // 문자열을 자름 - $content = trim(cut_str($content, $str_size, '...')); + $content = trim(cut_str($content, $str_size, $tail)); // >, <, "를 다시 복구 - return str_replace(array('<','>','"'),array('<','>','"'), $content); + $content = str_replace(array('<','>','"'),array('<','>','"'), $content); + + // 영문이 연결될 경우 개행이 안 되는 문제를 해결 + $content = preg_replace('/([a-z0-9\+:\/\.\~,\|\!\@\#\$\%\^\&\*\(\)\_]){20}/is',"$0-",$content); + + return $content; } function getRegdate($format = 'Y.m.d H:i:s') { diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php index 66e47b6d4..565390de8 100644 --- a/modules/comment/comment.model.php +++ b/modules/comment/comment.model.php @@ -153,7 +153,6 @@ function getCommentAllCount($module_srl) { $args->module_srl = $module_srl; $output = executeQuery('comment.getCommentCount', $args); - debugPrint($output); $total_count = $output->data->count; return (int)$total_count; @@ -393,10 +392,16 @@ } // comment.getTotalCommentList 쿼리 실행 - $output = executeQuery($query_id, $args); + $output = executeQueryArray($query_id, $args); // 결과가 없거나 오류 발생시 그냥 return if(!$output->toBool()||!count($output->data)) return $output; + foreach($output->data as $key => $val) { + unset($_oComment); + $_oComment = new CommentItem(0); + $_oComment->setAttribute($val); + $output->data[$key] = $_oComment; + } return $output; } diff --git a/modules/comment/lang/jp.lang.php b/modules/comment/lang/jp.lang.php index 6111b2083..30c7d6d6b 100644 --- a/modules/comment/lang/jp.lang.php +++ b/modules/comment/lang/jp.lang.php @@ -5,7 +5,7 @@ * @brief コメント(comment) モジュールの基本言語パッケージ **/ - $lang->cmd_comment_do = 'このコメントを..'; + $lang->cmd_comment_do = 'このコメントを…'; $lang->comment_list = 'コメントリスト'; $lang->cmd_toggle_checked_comment = '選択項目の反転'; diff --git a/modules/comment/queries/getAllComments.xml b/modules/comment/queries/getAllComments.xml new file mode 100644 index 000000000..14d0d1a35 --- /dev/null +++ b/modules/comment/queries/getAllComments.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/modules/communication/conf/info.xml b/modules/communication/conf/info.xml index 49a6dbb0d..96fc81202 100644 --- a/modules/communication/conf/info.xml +++ b/modules/communication/conf/info.xml @@ -6,7 +6,7 @@ Communication交流회원들간의 쪽지, 친구기능을 담당하는 모듈입니다. - 会員間にメッセージや友達管理などコミュニティ機能を提供するモジュールです。 + 会員間にメッセージや友達管理などコミュニティ機能を提供します。管理在线会员间短信息及好友功能的模块。This module is for managing message, friend functions.管理線上會員間短訊及好友功能的模組。 diff --git a/modules/communication/lang/jp.lang.php b/modules/communication/lang/jp.lang.php index b140e6bee..1845587f1 100644 --- a/modules/communication/lang/jp.lang.php +++ b/modules/communication/lang/jp.lang.php @@ -16,9 +16,9 @@ ); $lang->message_box = array( - 'R' => 'メッセージ受信ボックス', - 'S' => 'メッセージ送信ボックス', - 'T' => '保存ボックス', + 'R' => 'メッセージ受信箱', + 'S' => 'メッセージ送信箱', + 'T' => '保存箱', ); $lang->readed_date = "開封時間"; @@ -30,9 +30,9 @@ $lang->cmd_send_message = 'メッセージ送信'; $lang->cmd_reply_message = 'メッセージ返信'; - $lang->cmd_view_friend = '友達表示'; + $lang->cmd_view_friend = '友達リスト'; $lang->cmd_add_friend = '友達登録'; - $lang->cmd_view_message_box = 'メッセージ表示'; + $lang->cmd_view_message_box = 'メッセージ'; $lang->cmd_store = "保存"; $lang->cmd_add_friend_group = '友達グループ追加'; $lang->cmd_rename_friend_group = '友達グループ名変更'; diff --git a/modules/counter/counter.model.php b/modules/counter/counter.model.php index 733178605..5c1e41096 100644 --- a/modules/counter/counter.model.php +++ b/modules/counter/counter.model.php @@ -105,6 +105,34 @@ $sum += $count; } break; + case 'week' : + $time = strtotime($selected_date); + $w = date("D"); + while(date("D",$time) != "Sun") { + $time += 60*60*24; + } + $time -= 60*60*24; + while(date("D",$time)!="Sun") { + $thisWeek[] = date("Ymd",$time); + $time -= 60*60*24; + } + $thisWeek[] = date("Ymd",$time); + asort($thisWeek); + foreach($thisWeek as $day) { + unset($args); + $args->start_date = $day; + $args->end_date = $day; + if($site_srl) { + $args->site_srl = $site_srl; + $output = executeQuery('counter.getSiteCounterStatus', $args); + } else { + $output = executeQuery('counter.getCounterStatus', $args); + } + $count = (int)$output->data->unique_visitor; + $status->list[$day] = (int)$count; + if($count>$max) $max = $count; + $sum += $count; + } break; case 'month' : $year = substr($selected_date, 0, 4); diff --git a/modules/document/conf/info.xml b/modules/document/conf/info.xml index 5208488d3..43cf2490c 100644 --- a/modules/document/conf/info.xml +++ b/modules/document/conf/info.xml @@ -11,7 +11,7 @@ Module for managing documents used in board, blog, etc.Módulo para manejar los documentos en blog y en los tableros.管理版面,博客等处主题的模块。 - 掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理するモジュールです。 + 掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理します。Модуль для управления документами в форуме, блоге и прочее.管理討論板,部落格等主題的模組。 0.1 diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index e964ff1ac..681f97011 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -469,7 +469,10 @@ function procDocumentAdminRestoreTrash() { $trash_srl = Context::get('trash_srl'); + $this->restoreTrash($trash_srl); + } + function restoreTrash($trash_srl){ $oDB = &DB::getInstance(); $trash_args->trash_srl = $trash_srl; @@ -499,7 +502,8 @@ // commit $oDB->commit(); - } + return $output; + } } ?> diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index 440f6ad21..b84bbf438 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -248,7 +248,7 @@ $oDB->begin(); $oModuleModel = &getModel('module'); - $module_srl = $source_obj->get('module_srl'); + $module_srl = $obj->module_srl; $document_config = $oModuleModel->getModulePartConfig('document', $module_srl); if(!isset($document_config->use_history)) $document_config->use_history = 'N'; $bUseHistory = $document_config->use_history == 'Y' || $document_config->use_history == 'Trace'; @@ -348,7 +348,7 @@ } // 모든 확장 변수 삭제 - $this->deleteDocumentExtraVars($obj->module_srl, $obj->document_srl, null, Context::getLangType()); + $this->deleteDocumentExtraVars($source_obj->get('module_srl'), $obj->document_srl, null, Context::getLangType()); // 등록 성공시 확장 변수 등록 $extra_keys = $oDocumentModel->getExtraKeys($obj->module_srl); @@ -510,7 +510,7 @@ /** * @brief 해당 document의 조회수 증가 **/ - function updateReadedCount($oDocument) { + function updateReadedCount(&$oDocument) { $document_srl = $oDocument->document_srl; $member_srl = $oDocument->get('member_srl'); $logged_info = Context::get('logged_info'); diff --git a/modules/document/document.item.php b/modules/document/document.item.php index 828e7cf1e..d0aa3c783 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -37,10 +37,6 @@ $this->document_srl = null; return; } - if ($attribute->member_srl < 0) { - $attribute->member_srl = 0; - $attribute->ipaddress = '0.0.0.0'; - } $this->document_srl = $attribute->document_srl; $this->lang_code = $attribute->lang_code; $this->adds($attribute); @@ -55,7 +51,11 @@ $oDocumentModel = &getModel('document'); $GLOBALS['XE_DOCUMENT_LIST'][$this->document_srl] = $this; - if($load_extra_vars) $oDocumentModel->setToAllDocumentExtraVars(); + if($load_extra_vars) { + $oDocumentModel->setToAllDocumentExtraVars(); + $this->add('title', $GLOBALS['XE_DOCUMENT_LIST'][$this->document_srl]->get('title')); + $this->add('content', $GLOBALS['XE_DOCUMENT_LIST'][$this->document_srl]->get('content')); + } } function isExists() { @@ -239,7 +239,7 @@ function getContentText($strlen = 0) { if(!$this->document_srl) return; - if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret'); + if($this->isSecret() && !$this->isGranted() && !$this->isAccessible()) return Context::getLang('msg_is_secret'); $_SESSION['accessible'][$this->document_srl] = true; @@ -253,7 +253,7 @@ function getContent($add_popup_menu = true, $add_content_info = true, $resource_realpath = false, $add_xe_content_class = true) { if(!$this->document_srl) return; - if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret'); + if($this->isSecret() && !$this->isGranted() && !$this->isAccessible()) return Context::getLang('msg_is_secret'); $_SESSION['accessible'][$this->document_srl] = true; @@ -309,8 +309,7 @@ } function getSummary($str_size = 50, $tail = '...') { - // 영문이나 숫자가 연결되어서 20개 이상으로 연결시에 강제 띄움 시도 - {20,}으로 길이를 정하면, 20개 이상 문자열 맨 마지막에 스페이스를 추가할 뿐 원하는 의도는 달성되지 못함 - $content = preg_replace('/([a-z0-9\+:\/\.\~,\|\!\@\#\$\%\^\&\*\(\)\_]){20}/is',"$0-",$this->getContent(false,false)); + $content = $this->getContent(false,false); // 줄바꿈이 있을 때, 공백문자 삽입 $content = preg_replace('!([\s]*)+!is', ' ', $content); @@ -325,13 +324,18 @@ $content = str_replace(array('<','>','"',' '), array('<','>','"',' '), $content); // 연속된 공백문자 삭제 - $content = preg_replace('/([\s]{2,})/is', ' ', $content); + $content = preg_replace('/ ( +)/is', ' ', $content); // 문자열을 자름 $content = trim(cut_str($content, $str_size, $tail)); // >, <, "를 다시 복구 - return str_replace(array('<','>','"'),array('<','>','"'), $content); + $content = str_replace(array('<','>','"'),array('<','>','"'), $content); + + // 영문이 연결될 경우 개행이 안 되는 문제를 해결 + $content = preg_replace('/([a-z0-9\+:\/\.\~,\|\!\@\#\$\%\^\&\*\(\)\_]){20}/is',"$0-",$content); + + return $content; } function getRegdate($format = 'Y.m.d H:i:s') { @@ -387,8 +391,7 @@ $oDocumentController = &getController('document'); if($oDocumentController->updateReadedCount($this)) { $readed_count = $this->get('readed_count'); - $readed_count++; - $this->add('readed_count', $readed_count); + $this->add('readed_count', $readed_count+1); } } @@ -553,7 +556,8 @@ preg_match_all("!src=(\"|')([^\"' ]*?)(\"|')!is", $content, $matches, PREG_SET_ORDER); $cnt = count($matches); for($i=0;$i<$cnt;$i++) { - $target_src = $matches[$i][2]; + $target_src = trim($matches[$i][2]); + if(!preg_match("/\.(jpg|png|jpeg|gif|bmp)$/i",$target_src)) continue; if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $target_src)) continue; else { if(!preg_match('/^(http|https):\/\//i',$target_src)) $target_src = Context::getRequestUri().$target_src; diff --git a/modules/document/document.model.php b/modules/document/document.model.php index ad5f43392..124cb7564 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -27,7 +27,7 @@ static $checked_documents = array(); // XE에서 모든 문서 객체는 XE_DOCUMENT_LIST라는 전역 변수에 세팅을 함 - if(!count($GLOBALS['XE_DOCUMENT_LIST'])) continue; + if(!count($GLOBALS['XE_DOCUMENT_LIST'])) return; // 모든 호출된 문서 객체를 찾아서 확장변수가 설정되었는지를 확인 $document_srls = array(); @@ -51,45 +51,42 @@ } } + $user_lang_code = Context::getLangType(); for($i=0,$c=count($document_srls);$i<$c;$i++) { $document_srl = $document_srls[$i]; - $oDocument = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]; - $this->_setExtraVars($oDocument, $extra_vars[$document_srl]); - } - } + unset($vars); - function _setExtraVars($oDocument, $vars) { - if(!$oDocument || !is_object($oDocument) || !$oDocument->isExists()) return; - $module_srl = $oDocument->get('module_srl'); - $extra_keys = $this->getExtraKeys($module_srl); - $document_srl = $oDocument->document_srl; + if(!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl] || !is_object($GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) || !$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]->isExists()) continue; - $user_lang_code = Context::getLangType(); - $document_lang_code = $oDocument->get('lang_code'); + $module_srl = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]->get('module_srl'); + $extra_keys = $this->getExtraKeys($module_srl); + $vars = $extra_vars[$document_srl]; + $document_lang_code = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]->get('lang_code'); - // 확장변수 처리 - if(count($extra_keys)) { - foreach($extra_keys as $idx => $key) { - $val = $vars[$idx]; - if($val[$user_lang_code]) $v = $val[$user_lang_code]; - else if($val[$document_lang_code]) $v = $val[$document_lang_code]; - else if($val[0]) $v = $val[0]; - else $v = null; - $extra_keys[$idx]->value = $v; + // 확장변수 처리 + if(count($extra_keys)) { + foreach($extra_keys as $idx => $key) { + $val = $vars[$idx]; + if($val[$user_lang_code]) $v = $val[$user_lang_code]; + else if($val[$document_lang_code]) $v = $val[$document_lang_code]; + else if($val[0]) $v = $val[0]; + else $v = null; + $extra_keys[$idx]->value = $v; + } } + + unset($evars); + $evars = new ExtraVar($module_srl); + $evars->setExtraVarKeys($extra_keys); + + // 제목 처리 + if($vars[-1][$user_lang_code]) $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]->add('title',$vars[-1][$user_lang_code]); + + // 내용 처리 + if($vars[-2][$user_lang_code]) $GLOBALS['XE_DOCUMENT_LIST'][$document_srl]->add('content',$vars[-2][$user_lang_code]); + + $GLOBALS['XE_EXTRA_VARS'][$document_srl] = $evars->getExtraVars(); } - - $extra_vars = new ExtraVar($module_srl); - $extra_vars->setExtraVarKeys($extra_keys); - - // 제목 처리 - if($vars[-1][$user_lang_code]) $oDocument->add('title',$vars[-1][$user_lang_code]); - - // 내용 처리 - if($vars[-2][$user_lang_code]) $oDocument->add('content',$vars[-2][$user_lang_code]); - - $GLOBALS['XE_EXTRA_VARS'][$document_srl] = $extra_vars->getExtraVars(); - $GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument; } /** @@ -159,7 +156,7 @@ **/ function getDocumentList($obj, $except_notice = false) { // 정렬 대상과 순서 체크 - if(!in_array($obj->sort_index, array('list_order','regdate','last_update','update_order','readed_count','voted_count','comment_count','trackback_count','uploaded_count','title'))) $obj->sort_index = 'list_order'; + if(!in_array($obj->sort_index, array('list_order','regdate','last_update','update_order','readed_count','voted_count','comment_count','trackback_count','uploaded_count','title','category_srl'))) $obj->sort_index = 'list_order'; if(!in_array($obj->order_type, array('desc','asc'))) $obj->order_type = 'asc'; // module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌 @@ -834,8 +831,8 @@ $category_xml_file = $this->getCategoryXmlFile($module_srl); Context::set('category_xml_file', $category_xml_file); - Context::addJsFile('./common/js/tree_menu.js'); + Context::loadJavascriptPlugin('ui.tree'); // grant 정보를 추출 $oTemplate = &TemplateHandler::getInstance(); return $oTemplate->compile($this->module_path.'tpl', 'category_list'); @@ -913,6 +910,15 @@ else return $output->data->document_srl; } + function getAlias($document_srl){ + if(!$document_srl) return null; + $args->document_srl = $document_srl; + $output = executeQueryArray('document.getAliases', $args); + + if(!$output->data) return null; + else return $output->data[0]->alias_title; + } + function getHistories($document_srl, $list_count, $page) { $args->list_count = $list_count; @@ -928,5 +934,84 @@ $output = executeQuery('document.getHistory', $args); return $output->data; } + + /** + * @brief module_srl값을 가지는 문서의 목록을 가져옴 + **/ + function getTrashList($obj) { + + // 변수 체크 + $args->category_srl = $obj->category_srl?$obj->category_srl:null; + $args->sort_index = $obj->sort_index; + $args->order_type = $obj->order_type?$obj->order_type:'desc'; + $args->page = $obj->page?$obj->page:1; + $args->list_count = $obj->list_count?$obj->list_count:20; + $args->page_count = $obj->page_count?$obj->page_count:10; + + + // 검색 옵션 정리 + $search_target = $obj->search_target; + $search_keyword = $obj->search_keyword; + if($search_target && $search_keyword) { + switch($search_target) { + case 'title' : + case 'content' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->{"s_".$search_target} = $search_keyword; + $use_division = true; + break; + case 'title_content' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_title = $search_keyword; + $args->s_content = $search_keyword; + break; + case 'user_id' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->s_user_id = $search_keyword; + $args->sort_index = 'documents.'.$args->sort_index; + break; + case 'user_name' : + case 'nick_name' : + case 'email_address' : + case 'homepage' : + if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword); + $args->{"s_".$search_target} = $search_keyword; + break; + case 'is_notice' : + case 'is_secret' : + if($search_keyword=='N') $args->{"s_".$search_target} = 'N'; + elseif($search_keyword=='Y') $args->{"s_".$search_target} = 'Y'; + else $args->{"s_".$search_target} = ''; + break; + case 'member_srl' : + case 'readed_count' : + case 'voted_count' : + case 'comment_count' : + case 'trackback_count' : + case 'uploaded_count' : + $args->{"s_".$search_target} = (int)$search_keyword; + break; + case 'regdate' : + case 'last_update' : + case 'ipaddress' : + case 'tag' : + $args->{"s_".$search_target} = $search_keyword; + break; + } + } + + + $output = executeQueryArray('document.getTrashList', $args); + if($output->data){ + foreach($output->data as $key => $attribute) { + $oDocument = null; + $oDocument = new documentItem(); + $oDocument->setAttribute($attribute, false); + $attribute = $oDocument; + } + } + return $output; + } + } ?> diff --git a/modules/document/queries/getDocumentTags.xml b/modules/document/queries/getDocumentTags.xml new file mode 100644 index 000000000..de796080e --- /dev/null +++ b/modules/document/queries/getDocumentTags.xml @@ -0,0 +1,12 @@ + + +
+ + + + + + + + + diff --git a/modules/document/queries/getTrashByDocumentSrl.xml b/modules/document/queries/getTrashByDocumentSrl.xml new file mode 100644 index 000000000..cc5b463df --- /dev/null +++ b/modules/document/queries/getTrashByDocumentSrl.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/document/queries/getTrashList.xml b/modules/document/queries/getTrashList.xml index 07bda9c42..61be9e5ad 100644 --- a/modules/document/queries/getTrashList.xml +++ b/modules/document/queries/getTrashList.xml @@ -19,6 +19,29 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/document/queries/updateDocumentTags.xml b/modules/document/queries/updateDocumentTags.xml new file mode 100644 index 000000000..f24826397 --- /dev/null +++ b/modules/document/queries/updateDocumentTags.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/document/queries/updateDocumentsAllowCommentTrackback.xml b/modules/document/queries/updateDocumentsAllowCommentTrackback.xml new file mode 100644 index 000000000..f425d8934 --- /dev/null +++ b/modules/document/queries/updateDocumentsAllowCommentTrackback.xml @@ -0,0 +1,13 @@ + + +
+ + + + + + + + + + diff --git a/modules/document/queries/updateDocumentsSecret.xml b/modules/document/queries/updateDocumentsSecret.xml new file mode 100644 index 000000000..3a036f39d --- /dev/null +++ b/modules/document/queries/updateDocumentsSecret.xml @@ -0,0 +1,11 @@ + + +
+ + + + + + + + diff --git a/modules/editor/components/cc_license/lang/jp.lang.php b/modules/editor/components/cc_license/lang/jp.lang.php index 5f30c8052..7d7e55bc0 100644 --- a/modules/editor/components/cc_license/lang/jp.lang.php +++ b/modules/editor/components/cc_license/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa * @brief ウィジウィグエディターモジュール > CCL 表示エディターコンポーネント **/ diff --git a/modules/editor/components/cc_license/lang/ko.lang.php b/modules/editor/components/cc_license/lang/ko.lang.php index 53c9a078a..eba3c3876 100644 --- a/modules/editor/components/cc_license/lang/ko.lang.php +++ b/modules/editor/components/cc_license/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > CCL 출력 에디터 컴포넌트 **/ diff --git a/modules/editor/components/code_highlighter/lang/jp.lang.php b/modules/editor/components/code_highlighter/lang/jp.lang.php index 2d4951475..324694df5 100644 --- a/modules/editor/components/code_highlighter/lang/jp.lang.php +++ b/modules/editor/components/code_highlighter/lang/jp.lang.php @@ -1,6 +1,7 @@ 翻訳:ミニミ **/ $lang->code_type = '言語種類'; diff --git a/modules/editor/components/code_highlighter/lang/ko.lang.php b/modules/editor/components/code_highlighter/lang/ko.lang.php index 37894834e..fef6af2c8 100644 --- a/modules/editor/components/code_highlighter/lang/ko.lang.php +++ b/modules/editor/components/code_highlighter/lang/ko.lang.php @@ -1,5 +1,6 @@ **/ $lang->code_type = '언어 종류'; diff --git a/modules/editor/components/emoticon/tpl/popup.css b/modules/editor/components/emoticon/tpl/popup.css index 2227a0deb..d091d39fe 100644 --- a/modules/editor/components/emoticon/tpl/popup.css +++ b/modules/editor/components/emoticon/tpl/popup.css @@ -1,9 +1,6 @@ @charset "utf-8"; @import url(../../../../../modules/admin/tpl/css/admin.css); - -img.emoticon { margin:10px; cursor:pointer; } - -.emoticonList { position:absolute; top:9px; right:30px; } -*:first-child+html .emoticonList { top:9px; } +img.emoticon { margin:10px 10px 0 0; cursor:pointer; } +.emoticonList { position:absolute; right:40px; top:4px;} diff --git a/modules/editor/components/emoticon/tpl/popup.html b/modules/editor/components/emoticon/tpl/popup.html index 31758f7fe..2f991727b 100644 --- a/modules/editor/components/emoticon/tpl/popup.html +++ b/modules/editor/components/emoticon/tpl/popup.html @@ -10,14 +10,10 @@
- - {$src} - -
diff --git a/modules/editor/components/emoticon/tpl/popup.js b/modules/editor/components/emoticon/tpl/popup.js index 0f52bd44d..e6008554c 100644 --- a/modules/editor/components/emoticon/tpl/popup.js +++ b/modules/editor/components/emoticon/tpl/popup.js @@ -35,3 +35,5 @@ function completeGetEmoticons(ret_obj) { setFixedPopupSize(); setTimeout(setFixedPopupSize,1000); } + +jQuery(window).load(function() { getEmoticons('msn'); }); diff --git a/modules/editor/components/image_gallery/lang/jp.lang.php b/modules/editor/components/image_gallery/lang/jp.lang.php index 9763342ec..d07ae739c 100644 --- a/modules/editor/components/image_gallery/lang/jp.lang.php +++ b/modules/editor/components/image_gallery/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor)モジュール > イメージギャラリー(image_gallery)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/image_gallery/lang/ko.lang.php b/modules/editor/components/image_gallery/lang/ko.lang.php index 511598e4a..1d0cf21dc 100644 --- a/modules/editor/components/image_gallery/lang/ko.lang.php +++ b/modules/editor/components/image_gallery/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 이미지갤러리(image_gallery) 컴포넌트의 언어팩 **/ diff --git a/modules/editor/components/image_link/image_link.class.php b/modules/editor/components/image_link/image_link.class.php index 8f91428b8..55286a5c2 100644 --- a/modules/editor/components/image_link/image_link.class.php +++ b/modules/editor/components/image_link/image_link.class.php @@ -57,6 +57,7 @@ } $src = str_replace(array('&','"'), array('&','&qout;'), $src); + $src = str_replace('&amp;', '&', $src); if(!$alt) $alt = $src; $attr_output = array(); diff --git a/modules/editor/components/image_link/lang/jp.lang.php b/modules/editor/components/image_link/lang/jp.lang.php index fe87b5f59..8fb6f5739 100644 --- a/modules/editor/components/image_link/lang/jp.lang.php +++ b/modules/editor/components/image_link/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor)モジュール > イメージリンク(image_link)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/image_link/lang/ko.lang.php b/modules/editor/components/image_link/lang/ko.lang.php index 20eeb8d87..eaff0bae7 100644 --- a/modules/editor/components/image_link/lang/ko.lang.php +++ b/modules/editor/components/image_link/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 이미지링크(image_link) 컴포넌트의 언어팩 **/ diff --git a/modules/editor/components/multimedia_link/lang/jp.lang.php b/modules/editor/components/multimedia_link/lang/jp.lang.php index 16ed170e1..856e7f959 100644 --- a/modules/editor/components/multimedia_link/lang/jp.lang.php +++ b/modules/editor/components/multimedia_link/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa * @brief ウィジウィグエディター(editor)モジュール > マルチメディアリンク((multimedia_link)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/multimedia_link/lang/ko.lang.php b/modules/editor/components/multimedia_link/lang/ko.lang.php index 6655b451b..2bf1c4399 100644 --- a/modules/editor/components/multimedia_link/lang/ko.lang.php +++ b/modules/editor/components/multimedia_link/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 멀티미디어 링크 (multimedia_link) 컴포넌트의 언어팩 **/ diff --git a/modules/editor/components/naver_map/lang/jp.lang.php b/modules/editor/components/naver_map/lang/jp.lang.php index 59015ce64..0a103b064 100644 --- a/modules/editor/components/naver_map/lang/jp.lang.php +++ b/modules/editor/components/naver_map/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor) > マルチメディアリンク(naver_map)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/naver_map/lang/ko.lang.php b/modules/editor/components/naver_map/lang/ko.lang.php index da1af2a8e..2f88e82e2 100644 --- a/modules/editor/components/naver_map/lang/ko.lang.php +++ b/modules/editor/components/naver_map/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 멀티미디어 링크 (naver_map) 컴포넌트의 언어팩 **/ diff --git a/modules/editor/components/poll_maker/lang/jp.lang.php b/modules/editor/components/poll_maker/lang/jp.lang.php index 5b4270a99..48c4ea508 100644 --- a/modules/editor/components/poll_maker/lang/jp.lang.php +++ b/modules/editor/components/poll_maker/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor)モジュール > アンケート調査言語パッケージ **/ diff --git a/modules/editor/components/poll_maker/lang/ko.lang.php b/modules/editor/components/poll_maker/lang/ko.lang.php index ed2fe7fef..f034aa519 100644 --- a/modules/editor/components/poll_maker/lang/ko.lang.php +++ b/modules/editor/components/poll_maker/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 설문조사 컴포넌트의 언어팩 **/ diff --git a/modules/editor/components/quotation/lang/jp.lang.php b/modules/editor/components/quotation/lang/jp.lang.php index 3500cdafb..210e04baf 100644 --- a/modules/editor/components/quotation/lang/jp.lang.php +++ b/modules/editor/components/quotation/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor)モジュール > 引用句 (quotation)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/quotation/lang/ko.lang.php b/modules/editor/components/quotation/lang/ko.lang.php index 964ef48e4..728c694b7 100644 --- a/modules/editor/components/quotation/lang/ko.lang.php +++ b/modules/editor/components/quotation/lang/ko.lang.php @@ -1,6 +1,6 @@ * @brief 위지윅에디터(editor) 모듈 > 인용구 (quotation) 컴포넌트의 언어팩 **/ diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index 2c08a58b1..ea45e5f2a 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -158,14 +158,16 @@ $oEditorModel = &getModel('editor'); $editor_config = $oEditorModel->getEditorConfig($module_srl); $content_style = $editor_config->content_style; - $path = _XE_PATH_.'modules/editor/styles/'.$content_style.'/'; - if(is_dir($path) && file_exists($path.'style.ini')) { - $ini = file($path.'style.ini'); - for($i=0,$c=count($ini);$i<$c;$i++) { - $file = trim($ini[$i]); - if(!$file) continue; - if(preg_match('/\.css$/i',$file)) Context::addCSSFile('./modules/editor/styles/'.$content_style.'/'.$file, false); - elseif(preg_match('/\.js/i',$file)) Context::addJsFile('./modules/editor/styles/'.$content_style.'/'.$file, false); + if($content_style) { + $path = _XE_PATH_.'modules/editor/styles/'.$content_style.'/'; + if(is_dir($path) && file_exists($path.'style.ini')) { + $ini = file($path.'style.ini'); + for($i=0,$c=count($ini);$i<$c;$i++) { + $file = trim($ini[$i]); + if(!$file) continue; + if(preg_match('/\.css$/i',$file)) Context::addCSSFile('./modules/editor/styles/'.$content_style.'/'.$file, false); + elseif(preg_match('/\.js/i',$file)) Context::addJsFile('./modules/editor/styles/'.$content_style.'/'.$file, false); + } } } $content_font = $editor_config->content_font; @@ -188,29 +190,22 @@ * @brief 내용의 에디터 컴포넌트 코드를 변환 **/ function transEditorComponent($matches) { - // IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌 - $buff = $matches[0]; - $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff); - $buff = str_replace("&","&",$buff); + $script = sprintf(' %s editor_component=%s', $matches[1], $matches[2]); + $script = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $script); + preg_match_all('/([a-z0-9\-\_]+)\=\"([^\"]+)\"/is', $script, $m); + for($i=0,$c=count($m[0]);$i<$c;$i++) { + $xml_obj->attrs->{$m[1][$i]} = $m[2][$i]; + } + $xml_obj->body = $matches[3]; - // 에디터 컴포넌트에서 생성된 코드 - $oXmlParser = new XmlParser(); - $xml_doc = $oXmlParser->parse($buff); - if($xml_doc->div) $xml_doc = $xml_doc->div; - else if($xml_doc->img) $xml_doc = $xml_doc->img; - - $xml_doc->body = $matches[3]; - - // attribute가 없으면 return - $editor_component = $xml_doc->attrs->editor_component; - if(!$editor_component) return $matches[0]; + if(!$xml_obj->attrs->editor_component) return $matches[0]; // component::transHTML() 을 이용하여 변환된 코드를 받음 $oEditorModel = &getModel('editor'); - $oComponent = &$oEditorModel->getComponentObject($editor_component, 0); + $oComponent = &$oEditorModel->getComponentObject($xml_obj->attrs->editor_component, 0); if(!is_object($oComponent)||!method_exists($oComponent, 'transHTML')) return $matches[0]; - return $oComponent->transHTML($xml_doc); + return $oComponent->transHTML($xml_obj); } diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index f212c6b8d..9b9da8e8f 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -48,7 +48,7 @@ if(!$editor_config->editor_skin) $editor_config->editor_skin = 'xpresseditor'; if(!$editor_config->comment_editor_skin) $editor_config->comment_editor_skin = 'xpresseditor'; - if(!$editor_config->content_style) $editor_config->content_style = 'xeStyle'; + //if(!$editor_config->content_style) $editor_config->content_style = 'xeStyle'; return $editor_config; } @@ -611,6 +611,7 @@ FileHandler::writeFile($cache_file, $buff, "w"); + unset($xml_info); include($cache_file); return $xml_info; } diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index 578e8c1c6..d4b1615fd 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -203,4 +203,18 @@ $lang->edit->merge_cells = 'Merge Table Cells'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/es.lang.php b/modules/editor/lang/es.lang.php index a35dfde77..786ec7efd 100644 --- a/modules/editor/lang/es.lang.php +++ b/modules/editor/lang/es.lang.php @@ -199,4 +199,18 @@ $lang->edit->merge_cells = '셀 병합'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index 2069957ac..9370d13ab 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -203,4 +203,18 @@ $lang->edit->merge_cells = '셀 병합'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 27af053ae..1e7e25ad6 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -16,8 +16,8 @@ $lang->component_description = '説明'; $lang->component_extra_vars = '設定変数'; $lang->component_grant = '権限設定'; - $lang->content_style = 'Content Style'; - $lang->content_font = 'Content Font'; + $lang->content_style = 'コンテンツスタイル'; + $lang->content_font = 'コンテンツフォント'; $lang->about_component = 'コンポーネント情報'; $lang->about_component_grant = '基本コンポーネント以外の拡張コンポーネント機能が利用可能な権限の設定が出来ます。
(選択なしの場合、誰でも利用可能)'; @@ -43,8 +43,8 @@ $lang->editor_height = 'エディターの高さ'; $lang->about_editor_skin = 'エディターのスキンの選択が出来ます。'; - $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; - $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_style = 'コンテンツの編集、および内容表示の際のスタイルを指定します。'; + $lang->about_content_font = 'コンテンツの編集、および内容表示の際のフォントを指定します。
指定してない場合、ユーザーの設定を従います。
半角コンマ(,)区切りで複数フォントの登録が出来ます。'; $lang->about_upload_file_grant = 'ファイル添付可能な権限の設定が出来ます。(選択なしの場合、誰でも添付が可能)'; $lang->about_default_component_grant = 'エディターでの基本コンポーネントを使用可能な権限の設定が出来ます。(選択なしの場合、誰でも利用可能)'; $lang->about_editor_height = 'エディターの基本高さを設定します。'; @@ -201,8 +201,22 @@ $lang->edit->replace_words = '置換テキスト'; $lang->edit->next_search_words = '次を検索'; $lang->edit->edit_height_control = '入力サイズ調整'; + + $lang->edit->merge_cells = 'セルの結合'; + $lang->edit->split_row = '行の挿入'; + $lang->edit->split_col = '列の挿入'; - $lang->edit->merge_cells = '셀 병합'; - $lang->edit->split_row = '행 분할'; - $lang->edit->split_col = '열 분할'; + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index aa1d66665..dcae5fcf0 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -205,5 +205,18 @@ $lang->edit->merge_cells = '셀 병합'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/ru.lang.php b/modules/editor/lang/ru.lang.php index f8621e7b7..31b0d24ef 100644 --- a/modules/editor/lang/ru.lang.php +++ b/modules/editor/lang/ru.lang.php @@ -199,4 +199,18 @@ $lang->edit->merge_cells = '셀 병합'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 0b4f31c9e..81b4c7b46 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -205,4 +205,18 @@ $lang->edit->merge_cells = '셀 병합'; $lang->edit->split_row = '행 분할'; $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/lang/zh-TW.lang.php b/modules/editor/lang/zh-TW.lang.php index e6af9cdbc..2393576ae 100644 --- a/modules/editor/lang/zh-TW.lang.php +++ b/modules/editor/lang/zh-TW.lang.php @@ -12,12 +12,12 @@ $lang->component_link = '連結'; $lang->component_date = '編寫日期'; $lang->component_license = '版權'; - $lang->component_history = '紀錄'; + $lang->component_history = '更新紀錄'; $lang->component_description = '說明'; $lang->component_extra_vars = '變數設置'; $lang->component_grant = '權限設置'; $lang->content_style = '內容樣式'; - $lang->content_font = 'Content Font'; + $lang->content_font = '內容字體'; $lang->about_component = '組件簡介'; $lang->about_component_grant = '除預設組件外,可設置延伸組件的使用權限
(全部解除時,任何用戶都可使用)。'; @@ -185,7 +185,7 @@ $lang->edit->table_backgroundcolor = '背景顏色'; $lang->edit->special_character = '特殊符號'; $lang->edit->insert_special_character = '插入特殊符號'; - $lang->edit->close_special_character = '關閉特殊符號圖層'; + $lang->edit->close_special_character = '關閉'; $lang->edit->symbol = '一般符號'; $lang->edit->number_unit = '數字、單位'; $lang->edit->circle_bracket = '圓、括弧'; @@ -206,4 +206,18 @@ $lang->edit->merge_cells = '分割儲存格'; $lang->edit->split_row = '插入行'; $lang->edit->split_col = '插入列'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; ?> diff --git a/modules/editor/skins/fckeditor/editor.css b/modules/editor/skins/fckeditor/editor.css new file mode 100644 index 000000000..11f50514d --- /dev/null +++ b/modules/editor/skins/fckeditor/editor.css @@ -0,0 +1,15 @@ +@charset "utf-8"; +.xeEditor p.editor_autosaved_message { display:none; margin:0; padding:5px 2px; text-align:right; color:#666; font-size:10px; } +.fileUploader{ clear:both; padding-top:5px; margin-bottom:10px;} +.fileUploader:after{ content:""; display:block; clear:both;} +.fileUploader .preview{ float:left; width:64px; height:64px; border:1px solid #ccc;; padding:2px; margin:0 10px 5px 0;} +.fileUploader .preview.black { background-color:#000; border:1px solid #666;} +.fileUploader .preview img{ display:block; width:64px; height:64px;} +.fileUploader .fileListArea{ float:left; width:260px; margin:0 10px 5px 0;} +.fileUploader .fileListArea select{ width:100%; height:70px; overflow:auto;} +.fileUploader .fileListArea select option{ font-size:11px;} +.fileUploader .fileListArea.black select { background-color:#000; border:1px solid #666;} +.fileUploader .fileListArea.black select option { color:#aaa; } +.fileUploader .fileUploadControl{ clear:right;} +.fileUploader .fileUploadControl .button{ margin-bottom:5px;} +.fileUploader .file_attach_info{ clear:right; margin:5px 0;} diff --git a/modules/editor/skins/fckeditor/editor.html b/modules/editor/skins/fckeditor/editor.html index 8bf2cfecb..81de53c6d 100644 --- a/modules/editor/skins/fckeditor/editor.html +++ b/modules/editor/skins/fckeditor/editor.html @@ -1,6 +1,5 @@ - - + diff --git a/modules/editor/skins/xpresseditor/css/default.css b/modules/editor/skins/xpresseditor/css/default.css index df73a3cac..68521f732 100644 --- a/modules/editor/skins/xpresseditor/css/default.css +++ b/modules/editor/skins/xpresseditor/css/default.css @@ -1,407 +1,408 @@ -@charset "utf-8"; - -/* TextEditor */ -.xeTextEditor {padding:10px; overflow:hidden; margin:0 0 10px 0;} -.xeTextEditor textarea { display:block; margin:0; padding:2px; } -.xeTextEditor.black textarea { color:#fff; background-color:#000;} - -/* Type Selector */ -.xpress-editor *{margin:0; padding:0; font-style:normal; font-size:12px; } -.xpress-editor img, -.xpress-editor fieldset, -.xpress-editor button{ border:0;} -.xpress-editor button{ background:none; background-repeat:no-repeat; cursor:pointer; _cursor /**/:hand;} -.xpress-editor button *{ visibility:hidden;} -.xpress-editor legend{ position:absolute; width:0; height:0; font-size:0; line-height:0; overflow:hidden; visibility:hidden;} -.xpress-editor label{ cursor:pointer; _cursor /**/:hand;} -.xpress-editor hr{ display:none;} -.xpress-editor li{list-style:none;} - -/* Layout Selector */ -.xpress-editor{ position:relative; background:transparent;} -.xpress-editor #smart_content{ position:relative; clear:both; margin:0 0 10px 0; border:1px solid #c2c2c2; *zoom:1; z-index:5} -.xpress-editor #smart_footer{ position:relative; text-align:center; padding:10px 0;} - -/* Footer */ -.xpress-editor #smart_footer *{ vertical-align:top;} -.xpress-editor #smart_footer button{ position:relative; width:67px; height:25px; margin:0 5px 0 0;} -.xpress-editor #smart_footer button.save_temp{ background:url(../img/btn_save_temp.gif) no-repeat;} -.xpress-editor #smart_footer button.preview{ background:url(../img/btn_preview.gif) no-repeat;} -.xpress-editor #smart_footer input{ margin:0;} -.xpress-editor #smart_footer input.reset{ width:67px; height:25px; border:0; background:url(../img/btn_cancel.gif) no-repeat; cursor:pointer; margin-left:5px;} - -/* Content > Input Area */ -.xpress-editor a.skip{ position:relative; display:block; top:0; right:0; width:0; height:0; overflow:hidden; clear:both; zoom:1} -.xpress-editor a.skip:hover, -.xpress-editor a.skip:active, -.xpress-editor a.skip:focus{ position:relative; display:block; padding:5px; right:0; z-index:60; width:auto; height:auto; text-align:right; white-space:nowrap; color:#000; text-decoration:none; letter-spacing:-1px; _zoom:1;} - -.xpress-editor .input_area{ position:relative; margin:10px; z-index:30; *zoom:1; height:400px;} -.xpress-editor .input_area iframe, -.xpress-editor .input_area textarea{ display:block; width:100%; position:relative; height:100%; border:0; overflow:auto;} -.xpress-editor .input_area iframe{} -.xpress-editor .input_area textarea{ *margin:0 -10px; _margin-bottom:-2px;} -.xpress-editor .input_area textarea.blind{ display:none;} -.xpress-editor .input_control{ position:relative; display:block; width:100%; clear:both; text-align:center; background:#fbfbfb url(../img/btn_expand.gif) no-repeat center center; cursor:n-resize;} -.xpress-editor .input_control span{ display:block; height:10px; border-top:1px solid #dfdfdf; visibility:visible; font-size:0; line-height:200%; white-space:nowrap; color:#fff;} -.xpress-editor.black .input_control { background:#111 url(../img/btn_expand.black.gif) no-repeat center center;} -.xpress-editor.black .input_control span{ border-top:1px solid #333; color:#000;} - -.xpress-editor .tool{ position:relative; overflow:visible; padding:5px 10px 6px 10px; *padding:5px 10px 8px 10px; z-index:40; clear:both; background:#f8f8f8 url(../img/bg_tool.gif) repeat-x left bottom; border:0; *zoom:1;} -.xpress-editor.black .tool{ background:#111 url(../img/bg_tool.black.gif) repeat-x left bottom; } - -.xpress-editor .tool:after{ content:""; display:block; clear:both;} -.xpress-editor .tool ul{ position:relative; overflow:visible; float:left; margin:0 5px 2px 0; z-index:2;} -.xpress-editor .tool ul.action{ width:43px;} -.xpress-editor .tool ul.type{ width:auto; white-space:nowrap;} -.xpress-editor .tool ul.style{ width:169px; z-index:6;} -.xpress-editor .tool ul.paragraph{ width:169px; z-index:5;} -.xpress-editor .tool ul.extra1{ width:90px; z-index:4;} -.xpress-editor .tool ul.table{ width:85px; z-index:3;} -.xpress-editor .tool ul.extra2{ width:auto; z-index:2;} -.xpress-editor .tool ul.extra3{ float:right; width:auto; z-index:1; margin-right:1px;} -.xpress-editor .tool ul.extra3 li{ margin-right:4px;} -.xpress-editor .tool li{ position:relative; float:left;} -.xpress-editor .tool li button{ width:21px; height:21px; background:url(../img/btn_set.gif) no-repeat 0 0; vertical-align:top;} -.xpress-editor.black .tool li button{ width:21px; height:21px; background:url(../img/btn_set.black.gif) no-repeat 0 0; vertical-align:top;} -.xpress-editor .tool li button span{ position:absolute; top:0; left:0; width:0; height:0; overflow:hidden; visibility:hidden;} - -.xpress-editor .tool li.extensions span.exButton, -.xpress-editor .tool li.extensions span.exButton button{ float:left; position:relative; display:inline-block; width:auto; background:url(../img/btn_extension.gif) no-repeat left top;} -.xpress-editor .tool li.extensions span.exButton{ margin-right:18px;} -.xpress-editor .tool li.extensions span.exButton button{ left:18px; height:21px; background-position:right top; padding:0 4px 0 0; font:11px/21px Tahoma, Sans-serif; text-align:left;} -.xpress-editor.black .tool li.extensions span.exButton, -.xpress-editor.black .tool li.extensions span.exButton button{ color:#fff; background-image:url(../img/btn_extension.black.gif); } - -.xpress-editor .tool li.html span, -.xpress-editor .tool li.html span button, -.xpress-editor .tool li.preview span, -.xpress-editor .tool li.preview span button{ float:left; position:relative; display:inline-block; width:auto; height:auto; visibility:visible; background:url(../img/btn_set_blank.gif) no-repeat 0 0; white-space:nowrap;} -.xpress-editor.black .tool li.html span, -.xpress-editor.black .tool li.html span button, -.xpress-editor.black .tool li.preview span, -.xpress-editor.black .tool li.preview span button{ color:#fff;background-image:url(../img/btn_set_blank.black.gif); } - -.xpress-editor .tool li.html span, -.xpress-editor .tool li.preview span{ margin-right:2px; background-position:left top;} -.xpress-editor .tool li.html span button, -.xpress-editor .tool li.preview span button{ left:2px; height:21px; background-position:right top; font:11px/21px Tahoma, Sans-serif; padding:0 4px;} - -.xpress-editor .tool ul.type li{ float:none; display:inline; *top:1px;} -.xpress-editor .tool ul.type li select{ height:21px; width:62px;} -.xpress-editor.black .tool ul.type li select{ color:#fff; background-color:#000; } - -/* Content > Tool > Button Default */ -.xpress-editor .tool li.undo button{ width:22px; background-position:0 0;} -.xpress-editor .tool li.redo button{ background-position:-22px 0;} -.xpress-editor .tool li.bold button{ width:22px; background-position:-43px 0;} -.xpress-editor .tool li.underline button{ background-position:-65px 0;} -.xpress-editor .tool li.italic button{ background-position:-86px 0;} -.xpress-editor .tool li.del button{ background-position:-107px 0;} -.xpress-editor .tool li.fcolor button{ background-position:-128px 0;} -.xpress-editor .tool li.bcolor button{ background-position:-149px 0;} -.xpress-editor .tool li.sup button{ background-position:-170px 0;} -.xpress-editor .tool li.sub button{ background-position:-191px 0;} -.xpress-editor .tool li.left button{ width:22px; background-position:-212px 0;} -.xpress-editor .tool li.center button{ background-position:-234px 0;} -.xpress-editor .tool li.right button{ background-position:-255px 0;} -.xpress-editor .tool li.justify button{ background-position:-276px 0;} -.xpress-editor .tool li.ol button{ background-position:-297px 0;} -.xpress-editor .tool li.ul button{ background-position:-318px 0;} -.xpress-editor .tool li.outdent button{ background-position:-339px 0;} -.xpress-editor .tool li.indent button{ background-position:-360px 0;} -.xpress-editor .tool li.blockquote button{ width:22px; background-position:-381px 0;} -.xpress-editor .tool li.url button{ width:26px; background-position:-403px 0;} -.xpress-editor .tool li.character button{ background-position:-429px 0;} -.xpress-editor .tool li.find button{ background-position:-450px 0;} -.xpress-editor .tool li.table button{ width:22px; background-position:-471px 0;} -.xpress-editor .tool li.merge button{ background-position:-493px 0;} -.xpress-editor .tool li.splitCol button{ background-position:-514px 0;} -.xpress-editor .tool li.splitRow button{ background-position:-535px 0;} -.xpress-editor .tool li.extensions span{ background-position:0 0;} -.xpress-editor .tool li.extensions span button{ background-position:right 0;} -.xpress-editor .tool li.html span{ background-position:0 0;} -.xpress-editor .tool li.html span button{ background-position:right 0;} -.xpress-editor .tool li.preview span{ background-position:0 0;} -.xpress-editor .tool li.preview span button{ background-position:right 0;} - -/* Content > Tool > Button Hover */ -.xpress-editor .tool li.undo button.hover{ width:22px; background-position:0 -21px;} -.xpress-editor .tool li.redo button.hover{ background-position:-22px -21px;} -.xpress-editor .tool li.bold button.hover{ width:22px; background-position:-43px -21px;} -.xpress-editor .tool li.underline button.hover{ background-position:-65px -21px;} -.xpress-editor .tool li.italic button.hover{ background-position:-86px -21px;} -.xpress-editor .tool li.del button.hover{ background-position:-107px -21px;} -.xpress-editor .tool li.fcolor button.hover{ background-position:-128px -21px;} -.xpress-editor .tool li.bcolor button.hover{ background-position:-149px -21px;} -.xpress-editor .tool li.sup button.hover{ background-position:-170px -21px;} -.xpress-editor .tool li.sub button.hover{ background-position:-191px -21px;} -.xpress-editor .tool li.left button.hover{ width:22px; background-position:-212px -21px;} -.xpress-editor .tool li.center button.hover{ background-position:-234px -21px;} -.xpress-editor .tool li.right button.hover{ background-position:-255px -21px;} -.xpress-editor .tool li.justify button.hover{ background-position:-276px -21px;} -.xpress-editor .tool li.ol button.hover{ background-position:-297px -21px;} -.xpress-editor .tool li.ul button.hover{ background-position:-318px -21px;} -.xpress-editor .tool li.outdent button.hover{ background-position:-339px -21px;} -.xpress-editor .tool li.indent button.hover{ background-position:-360px -21px;} -.xpress-editor .tool li.blockquote button.hover{ width:22px; background-position:-381px -21px;} -.xpress-editor .tool li.url button.hover{ width:26px; background-position:-403px -21px;} -.xpress-editor .tool li.character button.hover{ background-position:-429px -21px;} -.xpress-editor .tool li.find button.hover{ background-position:-450px -21px;} -.xpress-editor .tool li.table button.hover{ width:22px; background-position:-471px -21px;} -.xpress-editor .tool li.merge button.hover{ background-position:-493px -21px;} -.xpress-editor .tool li.splitCol button.hover{ background-position:-514px -21px;} -.xpress-editor .tool li.splitRow button.hover{ background-position:-535px -21px;} -.xpress-editor .tool li.extensions span.hover{ background-position:0 -21px;} -.xpress-editor .tool li.extensions span.hover button{ background-position:right -21px;} -.xpress-editor .tool li.html span.hover{ background-position:0 -21px;} -.xpress-editor .tool li.html span.hover button{ background-position:right -21px;} -.xpress-editor .tool li.preview span.hover{ background-position:0 -21px;} -.xpress-editor .tool li.preview span.hover button{ background-position:right -21px;} - -/* Content > Tool > Button Active */ -.xpress-editor .tool li.undo button.active{ width:22px; background-position:0 -42px;} -.xpress-editor .tool li.redo button.active{ background-position:-22px -42px;} -.xpress-editor .tool li.bold button.active{ width:22px; background-position:-43px -42px;} -.xpress-editor .tool li.underline button.active{ background-position:-65px -42px;} -.xpress-editor .tool li.italic button.active{ background-position:-86px -42px;} -.xpress-editor .tool li.del button.active{ background-position:-107px -42px;} -.xpress-editor .tool li.fcolor button.active{ background-position:-128px -42px;} -.xpress-editor .tool li.bcolor button.active{ background-position:-149px -42px;} -.xpress-editor .tool li.sup button.active{ background-position:-170px -42px;} -.xpress-editor .tool li.sub button.active{ background-position:-191px -42px;} -.xpress-editor .tool li.left button.active{ width:22px; background-position:-212px -42px;} -.xpress-editor .tool li.center button.active{ background-position:-234px -42px;} -.xpress-editor .tool li.right button.active{ background-position:-255px -42px;} -.xpress-editor .tool li.justify button.active{ background-position:-276px -42px;} -.xpress-editor .tool li.ol button.active{ background-position:-297px -42px;} -.xpress-editor .tool li.ul button.active{ background-position:-318px -42px;} -.xpress-editor .tool li.outdent button.active{ background-position:-339px -42px;} -.xpress-editor .tool li.indent button.active{ background-position:-360px -42px;} -.xpress-editor .tool li.blockquote button.active{ width:22px; background-position:-381px -42px;} -.xpress-editor .tool li.url button.active{ width:26px; background-position:-403px -42px;} -.xpress-editor .tool li.character button.active{ background-position:-429px -42px;} -.xpress-editor .tool li.find button.active{ background-position:-450px -42px;} -.xpress-editor .tool li.table button.active{ width:22px; background-position:-471px -42px;} -.xpress-editor .tool li.merge button.active{ background-position:-493px -42px;} -.xpress-editor .tool li.splitCol button.active{ background-position:-514px -42px;} -.xpress-editor .tool li.splitRow button.active{ background-position:-535px -42px;} -.xpress-editor .tool li.extensions span.active{ background-position:0 -42px;} -.xpress-editor .tool li.extensions span.active button{ background-position:right -42px;} -.xpress-editor .tool li.html span.active{ background-position:0 -42px;} -.xpress-editor .tool li.html span.active button{ background-position:right -42px;} -.xpress-editor .tool li.preview span.active{ background-position:0 -42px;} -.xpress-editor .tool li.preview span.active button{ background-position:right -42px;} - -/* Content > Tool > Button Off */ -.xpress-editor .tool.off li.undo button, -.xpress-editor .tool li.undo button.off{ width:22px; background-position:0 -63px;} -.xpress-editor .tool.off li.redo button, -.xpress-editor .tool li.redo button.off{ background-position:-22px -63px;} -.xpress-editor .tool.off li.bold button{ width:22px; background-position:-43px -63px;} -.xpress-editor .tool.off li.underline button{ background-position:-65px -63px;} -.xpress-editor .tool.off li.italic button{ background-position:-86px -63px;} -.xpress-editor .tool.off li.del button{ background-position:-107px -63px;} -.xpress-editor .tool.off li.fcolor button{ background-position:-128px -63px;} -.xpress-editor .tool.off li.bcolor button{ background-position:-149px -63px;} -.xpress-editor .tool.off li.sup button{ background-position:-170px -63px;} -.xpress-editor .tool.off li.sub button{ background-position:-191px -63px;} -.xpress-editor .tool.off li.left button{ width:22px; background-position:-212px -63px;} -.xpress-editor .tool.off li.center button{ background-position:-234px -63px;} -.xpress-editor .tool.off li.right button{ background-position:-255px -63px;} -.xpress-editor .tool.off li.justify button{ background-position:-276px -63px;} -.xpress-editor .tool.off li.ol button{ background-position:-297px -63px;} -.xpress-editor .tool.off li.ul button{ background-position:-318px -63px;} -.xpress-editor .tool.off li.outdent button{ background-position:-339px -63px;} -.xpress-editor .tool.off li.indent button{ background-position:-360px -63px;} -.xpress-editor .tool.off li.blockquote button{ width:22px; background-position:-381px -63px;} -.xpress-editor .tool.off li.url button{ width:26px; background-position:-403px -63px;} -.xpress-editor .tool.off li.character button{ background-position:-429px -63px;} -.xpress-editor .tool.off li.find button{ background-position:-450px -63px;} -.xpress-editor .tool.off li.table button{ width:22px; background-position:-471px -63px;} -.xpress-editor .tool.off li.merge button, -.xpress-editor .tool li.merge button.off{ background-position:-493px -63px;} -.xpress-editor .tool.off li.splitCol button, -.xpress-editor .tool li.splitCol button.off{ background-position:-514px -63px;} -.xpress-editor .tool.off li.splitRow button, -.xpress-editor .tool li.splitRow button.off{ background-position:-535px -63px;} -.xpress-editor .tool.off li.extensions span{ background-position:0 -63px;} -.xpress-editor .tool.off li.extensions span button{ background-position:right -63px; color:#bcbcbc;} -.xpress-editor .tool.off li button{ cursor:default;} -.xpress-editor .tool.off ul.extra3 li button{ cursor:pointer;} - -/* Content > Tool > Layer */ -.xpress-editor .tool .layer{ display:none; position:absolute; left:0; top:20px; background-color:#fbfbfb; border:1px solid #c5c5c5; border-right:1px solid #9f9f9f; border-bottom:1px solid #9f9f9f;} -.xpress-editor .tool .layer li{ float:none; left:0;} -.xpress-editor .tool .layer button{ margin:0 !important; width:auto; height:auto; background:none;} -.xpress-editor .tool .layer button span{ position:absolute; width:0; height:0; font-size:0; line-height:0; overflow:hidden; visibility:hidden;} -.xpress-editor .tool .btn_area{ position:relative; clear:both; text-align:center !important; padding:7px 0 12px 0; width:100%; white-space:nowrap; *zoom:1;} -.xpress-editor .tool .btn_area *{ vertical-align:top;} -.xpress-editor .tool button.close{ position:absolute; top:4px; right:3px; width:21px; height:20px; background:url(../img/btn_layer_close.gif) no-repeat center center !important;} -.xpress-editor .tool button.close span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} -.xpress-editor .tool .layer .btn_area button{ *margin:0 2px !important;} -.xpress-editor .tool .layer .btn_area button.confirm{ width:38px; height:21px; background:url(../img/btn_layer_confirm.gif) no-repeat;} -.xpress-editor .tool .layer .btn_area button.cancel{ width:38px; height:21px; background:url(../img/btn_layer_cancel.gif) no-repeat;} - -.xpress-editor .tool li.fcolor .layer{ width:218px !important; height:auto !important; background-image:none !important; overflow:hidden;} -.xpress-editor .tool .layer .palette{ width:210px; position:relative; left:7px; padding:8px 0 7px 0; margin:0;} -.xpress-editor .tool .layer .palette li{ float:left; margin:0 1px 1px 0; font-size:0; line-height:0;} -.xpress-editor .tool .layer .palette button{ position:relative; overflow:hidden; width:11px; height:11px;} - -.xpress-editor .tool li.bcolor .layer { width:218px; overflow:hidden;} -.xpress-editor .tool .layer .background{ width:210px; position:relative; left:7px; margin:0 0 -2px 0; padding:8px 0 0 0; *padding-bottom:8px; _padding-bottom:4px;} -.xpress-editor .tool .layer .background li{ float:left; margin:0 5px 2px 0;} -.xpress-editor .tool .layer .background button{ position:relative; overflow:hidden; width:65px; height:19px; text-align:left; padding:4px;} -.xpress-editor .tool .layer .background button span{ position:relative; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto;} - -.xpress-editor .tool li.style .layer{ padding:4px 2px; _overflow:hidden; filter:progid:DXImageTransform.Microsoft.Shadow(color=#dddddd,direction=135,strength=2);} -.xpress-editor .tool li.style .layer li{ position:relative; background:#fbfbfb;} -.xpress-editor .tool li.style .layer li button{ display:block; width:134px; position:relative;} -.xpress-editor .tool li.style .layer li button span{ display:block; width:130px; text-align:left; letter-spacing:normal;} -.xpress-editor .tool li.style .layer li.h3 button span{ padding:3px 0 1px 4px; height:15px; _height /**/:19px; font-size:16px; font-weight:bold;} -.xpress-editor .tool li.style .layer li.h4 button span{ padding:3px 0 2px 4px; height:13px; _height /**/:18px; font-size:14px; font-weight:bold;} -.xpress-editor .tool li.style .layer li.h5 button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px; font-weight:bold;} -.xpress-editor .tool li.style .layer li.h6 button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px;} -.xpress-editor .tool li.style .layer li.p button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px; color:#5d5d5d;} -.xpress-editor .tool li.style .layer li button.hover{ background:#c1f471; *height:1%;} - -.xpress-editor .tool li.blockquote .layer{ padding:6px 5px 6px 7px; left:0; width:288px;} -.xpress-editor .tool li.blockquote .layer ul{ *zoom:1; margin:0;} -.xpress-editor .tool li.blockquote .layer ul:after{ content:""; display:block; clear:both;} -.xpress-editor .tool li.blockquote .layer li{ position:relative; float:left; overflow:hidden; width:32px; height:34px; margin:0 2px 0 0; border:1px solid #cdcecc; background-image:url(../img/btn_qmark.gif); background-repeat:no-repeat;} -.xpress-editor .tool li.blockquote .layer li.q1{ background-position:0 0;} -.xpress-editor .tool li.blockquote .layer li.q2{ background-position:-32px 0;} -.xpress-editor .tool li.blockquote .layer li.q3{ background-position:-64px 0;} -.xpress-editor .tool li.blockquote .layer li.q4{ background-position:-96px 0;} -.xpress-editor .tool li.blockquote .layer li.q5{ background-position:-128px 0;} -.xpress-editor .tool li.blockquote .layer li.q6{ background-position:-160px 0;} -.xpress-editor .tool li.blockquote .layer li.q7{ background-position:-192px 0;} -.xpress-editor .tool li.blockquote .layer li.q8{ background-position:-224px 0;} -.xpress-editor .tool li.blockquote .layer li button{ width:32px; height:34px;} - -.xpress-editor .tool li.url .layer{ width:231px; height:125px; background-image:url(../img/bx_url.gif); background-repeat:no-repeat; background-position:10px 14px;} -.xpress-editor .tool li.url .layer fieldset{ position:absolute; width:212px; left:10px; top:14px;} -.xpress-editor .tool li.url .layer fieldset h3{ position:absolute; top:-4px; left:15px; color:#404040; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto; background:none; margin:0; padding:0; font-weight:normal;} -.xpress-editor .tool li.url .layer fieldset input.link{ position:absolute; left:12px; top:19px; width:179px; padding:2px 0 1px 6px; *margin:-1px 0; font-size:11px; height:13px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} -.xpress-editor .tool li.url .layer fieldset p{ position:absolute; left:12px; top:44px;} -.xpress-editor .tool li.url .layer fieldset p input{ width:13px; height:13px; vertical-align:middle; margin-right:3px;} -.xpress-editor .tool li.url .layer .btn_area{ position:absolute; bottom:12px; padding:0;} - -.xpress-editor .tool li.table .layer{ width:242px; height:239px; background-image:url(../img/bx_table.gif); background-repeat:no-repeat; background-position:10px 14px;} -.xpress-editor .tool li.table .layer fieldset{ position:absolute; width:222px; left:10px;} -.xpress-editor .tool li.table .layer fieldset h3{ position:absolute; top:-4px; left:15px; color:#404040; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto; background:none; margin:0; padding:0; font-weight:normal;} - -.xpress-editor .tool li.table .layer fieldset dl{ position:absolute; left:10px;} -.xpress-editor .tool li.table .layer fieldset dt{ float:left; padding:3px 0 0 0; height:20px; white-space:nowrap; letter-spacing:-1px;} -.xpress-editor .tool li.table .layer fieldset dd{ float:right; position:relative;} -.xpress-editor .tool li.table .layer fieldset dd button.add, -.xpress-editor .tool li.table .layer fieldset dd button.del{ position:absolute; left:27px; width:15px; height:8px; background:url(../img/btn_layer_cell_adjust.gif) no-repeat;} -.xpress-editor .tool li.table .layer fieldset dd button.add{ top:1px;} -.xpress-editor .tool li.table .layer fieldset dd button.del{ top:9px; background-position:0 -8px;} -.xpress-editor .tool li.table .layer fieldset dd .preview_palette{ display:block; float:left; margin:0 3px 0 0; padding:2px; position:relative; border:1px solid #c8c9c6; width:14px; height:14px; overflow:hidden;} -.xpress-editor .tool li.table .layer fieldset dd .preview_palette button{ width:14px; height:14px; font-size:500px; line-height:0;} -.xpress-editor .tool li.table .layer fieldset dd .find_palette{ width:33px; height:20px; background:url(../img/btn_search.gif) no-repeat;} - -.xpress-editor .tool li.table .layer fieldset.num{ top:14px;} -.xpress-editor .tool li.table .layer fieldset.num dl{ top:18px; width:60px;} -.xpress-editor .tool li.table .layer fieldset.num dt{ height:20px;} -.xpress-editor .tool li.table .layer fieldset.num dd{ height:23px;} -.xpress-editor .tool li.table .layer fieldset.num dt label{ font-size:11px; color:#333;} -.xpress-editor .tool li.table .layer fieldset.num dd input{ padding:3px 0 0 6px; *margin:-1px 0; width:35px; height:13px; font-size:11px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} - -.xpress-editor .tool li.table .layer fieldset.color{ top:96px;} -.xpress-editor .tool li.table .layer fieldset.color dl{ top:18px; width:210px;} -.xpress-editor .tool li.table .layer fieldset.color dt{ height:23px;} -.xpress-editor .tool li.table .layer fieldset.color dd{ height:26px; width:146px;} -.xpress-editor .tool li.table .layer fieldset.color dt label{ font-size:11px; color:#333;} -.xpress-editor .tool li.table .layer fieldset.color dd input{ padding:3px 0 0 6px; *margin:-1px 0; font-size:11px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} -.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_width{ width:35px; height:13px;} -.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_color, -.xpress-editor .tool li.table .layer fieldset.color dd input#table_bg_color{ width:70px; height:15px; *margin-right:3px;} - -.xpress-editor .tool li.table .layer table{ position:absolute; top:18px; left:75px; width:137px; height:40px; table-layout:fixed;} -.xpress-editor .tool li.table .layer table *{ font-size:0; line-height:0;} -.xpress-editor .tool li.table .layer table th, -.xpress-editor .tool li.table .layer table td{ text-align:center;} -.xpress-editor .tool li.table .layer .btn_area{ position:absolute; bottom:12px; padding:0; z-index:1;} - -.xpress-editor .tool li.table .layer .palette{ display:none; position:absolute; z-index:2; left:11px; width:204px; padding:8px 7px 7px 7px; _padding-right:6px; background-color:#fbfbfb; border:1px solid #c5c5c5; border-right:1px solid #9f9f9f; border-bottom:1px solid #9f9f9f;} -.xpress-editor .tool li.table .layer.p1 .palette{ display:block; top:163px;} -.xpress-editor .tool li.table .layer.p2 .palette{ display:block; top:189px;} - -.xpress-editor .tool li.character .layer{ width:433px; height:242px; overflow:hidden;} -.xpress-editor .tool li.character .layer ul{ margin:0;} -.xpress-editor .tool li.character .layer h3{position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} -.xpress-editor .tool li.character .layer .nav{ position:absolute; top:11px; left:-1px; overflow:hidden; white-space:nowrap;} -.xpress-editor .tool li.character .layer .nav li{ display:inline; margin:0 -4px 0 0; padding:0 8px; background:url(../img/vr_layer_character.gif) no-repeat 0 0;} -.xpress-editor .tool li.character .layer .nav li a{ color:#444; text-decoration:none; letter-spacing:-1px;} -.xpress-editor .tool li.character .layer .nav li a:hover, -.xpress-editor .tool li.character .layer .nav li a:active, -.xpress-editor .tool li.character .layer .nav li a:focus{ text-decoration:underline;} -.xpress-editor .tool li.character .layer .nav li a.on{ font-weight:bold; color:#004790; display:inline;} -.xpress-editor .tool li.character .layer .list{ position:absolute; left:7px; top:30px; width:421px; height:172px; background:url(../img/bx_character.gif) no-repeat;} -.xpress-editor .tool li.character .layer .list li{ position:relative; top:1px; left:1px; float:left; width:20px; height:18px; margin:0 1px 1px 0;} -.xpress-editor .tool li.character .layer .list li button{ width:20px; height:18px;} -.xpress-editor .tool li.character .layer .list li button.hover{ border:2px solid #27c11a;} -.xpress-editor .tool li.character .layer .list li button span{ overflow:visible; font-size:12px; width:auto; height:auto; position:relative; visibility:visible; line-height:normal;} -.xpress-editor .tool li.character .layer p{ position:absolute; top:212px; left:7px;} -.xpress-editor .tool li.character .layer p *{ vertical-align:top;} -.xpress-editor .tool li.character .layer p label{ position:relative; top:4px; margin:0 7px 0 0; color:#333; letter-spacing:-1px;} -.xpress-editor .tool li.character .layer p input{ padding:3px 0 0 4px; margin:0 4px 0 0; width:300px; _width /**/:306px; height:16px; _height /**/:20px; border:1px solid #acacac; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} -.xpress-editor .tool li.character .layer p button{ position:relative; *top:1px; width:38px; height:21px; background:url(../img/btn_layer_confirm.gif) no-repeat;} -.xpress-editor .tool li.character .layer p button span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} - -.xpress-editor .tool li.find .layer{ width:242px;} -.xpress-editor .tool li.find .layer h3{ background:#f2f2f2; color:#333; height:21px; margin:0 0 11px 0; padding:7px 0 0 5px;} -.xpress-editor .tool li.find .layer .menu_tab{ position:relative; z-index:20; width:100%; *zoom:1;} -.xpress-editor .tool li.find .layer .menu_tab:after{ content:""; display:block; clear:both;} -.xpress-editor .tool li.find .layer .layer_tab{ position:relative; left:10px; padding:0; margin:0; clear:both;} -.xpress-editor .tool li.find .layer .layer_tab li{ position:relative; z-index:1; float:left; margin-right:1px; background:url(../img/btn_layer_tab.gif) no-repeat 0 0;} -.xpress-editor .tool li.find .layer .layer_tab li a{ position:relative; display:block; float:left; left:2px; height:15px; padding:4px 9px 0 5px; color:#404040; text-decoration:none; background:url(../img/btn_layer_tab.gif) no-repeat right 0;} -.xpress-editor .tool li.find .layer.find .layer_tab li.tab1, -.xpress-editor .tool li.find .layer.replace .layer_tab li.tab2{ top:-1px; margin-bottom:-1px;} -.xpress-editor .tool li.find .layer.find .layer_tab li.tab1 a, -.xpress-editor .tool li.find .layer.replace .layer_tab li.tab2 a{ height:18px;} -.xpress-editor .tool li.find .layer .container{ position:relative; z-index:1; clear:both; top:-2px;} -.xpress-editor .tool li.find .layer .container .bx{ display:none; position:relative; width:222px; left:10px; clear:both; z-index:1; background:url(../img/bx_find.gif) no-repeat;} -.xpress-editor .tool li.find .layer.find .container #find, -.xpress-editor .tool li.find .layer.replace .container #replace{ display:block;} - -.xpress-editor .tool li.find .layer .bx fieldset{ position:relative; padding:13px 0 17px 11px;} -.xpress-editor .tool li.find .layer .bx fieldset *{ vertical-align:top;} -.xpress-editor .tool li.find .layer .bx label{ position:relative; top:4px; margin:0 7px 0 0; font-size:11px; letter-spacing:-1px; color:#333;} -.xpress-editor .tool li.find .layer .bx input{ padding:3px 0 0 4px; width:144px; _width /**/:150px; height:14px; _height /**/:19px; border:1px solid #acacac; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} -.xpress-editor .tool li.find .layer .bx .cap{ position:absolute; left:0; bottom:0; display:block; width:222px; height:2px; _margin:0 0 -1px 0; overflow:hidden; background:#fff url(../img/bx_find.gif) no-repeat left bottom; font-size:0; line-height:0;} -.xpress-editor .tool li.find .layer .bx#replace fieldset{ height:45px; _height /**/:75px;} -.xpress-editor .tool li.find .layer .bx#replace fieldset #keyword2{ margin-bottom:6px;} -.xpress-editor .tool li.find .layer .btn_area button{ display:none; *margin:0 2px !important;} -.xpress-editor .tool li.find .layer.find .btn_area .find_next{ display:inline; width:62px; height:21px; background:url(../img/btn_layer_find_next_strong.gif) no-repeat;} -.xpress-editor .tool li.find .layer.replace .btn_area .find_next{ display:inline; width:55px; height:21px; background:url(../img/btn_layer_find_next.gif) no-repeat;} -.xpress-editor .tool li.find .layer.replace .btn_area .replace{ display:inline; width:48px; height:21px; background:url(../img/btn_layer_replace.gif) no-repeat;} -.xpress-editor .tool li.find .layer.replace .btn_area .replace_all{ display:inline; width:69px; height:21px; background:url(../img/btn_layer_replace_all.gif) no-repeat;} -.xpress-editor .tool li.find .layer .btn_area .cancel{ display:inline;} - -.xpress-editor .tool li.extensions .layer{ width:auto; white-space:nowrap; padding:5px 10px;} -.xpress-editor .tool li.extensions .layer li{ margin:2px 0;} -.xpress-editor .tool li.extensions .layer li a { color:#000; text-decoration:none; } -.xpress-editor .tool li.extensions .layer li a:hover { text-decoration:underline; } - -/* File Uploader */ -.xpress-editor .fileUploader{ clear:both; padding-top:5px; margin-bottom:20px;} -.xpress-editor .fileUploader:after{ content:""; display:block; clear:both;} -.xpress-editor .fileUploader .preview{ float:left; width:64px; height:64px; border:1px solid #ccc;; padding:2px; margin:0 10px 5px 10px;} -.xpress-editor .fileUploader .preview.black { background-color:#000; border:1px solid #666;} -.xpress-editor .fileUploader .preview img{ display:block; width:64px; height:64px;} -.xpress-editor .fileUploader .fileListArea{ float:left; width:260px; margin:0 10px 5px 0;} -.xpress-editor .fileUploader .fileListArea select{ width:100%; height:70px; overflow:auto;} -.xpress-editor .fileUploader .fileListArea select option{ font-size:11px;} -.xpress-editor .fileUploader .fileListArea.black select { background-color:#000; border:1px solid #666;} -.xpress-editor .fileUploader .fileListArea.black select option { color:#aaa; } -.xpress-editor .fileUploader .fileUploadControl{ clear:right;} -.xpress-editor .fileUploader .fileUploadControl .button{ margin-bottom:5px;} -.xpress-editor .fileUploader .file_attach_info{ clear:right; margin:5px 0;} - -/* Auto Save */ -.xpress-editor .autosave_message { display:none; background: #f6ffdb; padding:6px 10px; margin:0; line-height:1;} -.xpress-editor.black .autosave_message { display:none; background:#222; padding:6px 10px; margin:0; line-height:1; color:#fff; } -.xpress-editor .input_syntax.black { background:transparent; color:#fff; } +@charset "utf-8"; + +/* TextEditor */ +.xeTextEditor {overflow:hidden;} +.xeTextEditor textarea { display:block; margin:0; padding:5px; } +.xeTextEditor.black textarea { color:#fff; background-color:#000;} + +/* Type Selector */ +.xpress-editor *{margin:0; padding:0; font-style:normal; font-size:12px; } +.xpress-editor img, +.xpress-editor fieldset, +.xpress-editor button{ border:0;} +.xpress-editor button{ background:none; background-repeat:no-repeat; cursor:pointer; _cursor /**/:hand;} +.xpress-editor button *{ visibility:hidden;} +.xpress-editor legend{ position:absolute; width:0; height:0; font-size:0; line-height:0; overflow:hidden; visibility:hidden;} +.xpress-editor label{ cursor:pointer; _cursor /**/:hand;} +.xpress-editor hr{ display:none;} +.xpress-editor li{list-style:none;} + +/* Layout Selector */ +.xpress-editor{ position:relative; background:transparent;} +.xpress-editor #smart_content{ position:relative; clear:both; margin:0 0 10px 0; border:1px solid #c2c2c2; *zoom:1; z-index:5; background:#fff;} +.xpress-editor #smart_footer{ position:relative; text-align:center; padding:10px 0;} + +/* Footer */ +.xpress-editor #smart_footer *{ vertical-align:top;} +.xpress-editor #smart_footer button{ position:relative; width:67px; height:25px; margin:0 5px 0 0;} +.xpress-editor #smart_footer button.save_temp{ background:url(../img/btn_save_temp.gif) no-repeat;} +.xpress-editor #smart_footer button.preview{ background:url(../img/btn_preview.gif) no-repeat;} +.xpress-editor #smart_footer input{ margin:0;} +.xpress-editor #smart_footer input.reset{ width:67px; height:25px; border:0; background:url(../img/btn_cancel.gif) no-repeat; cursor:pointer; margin-left:5px;} + +/* Content > Input Area */ +.xpress-editor a.skip{ position:relative; display:block; top:0; right:0; width:0; height:0; overflow:hidden; clear:both; zoom:1} +.xpress-editor a.skip:hover, +.xpress-editor a.skip:active, +.xpress-editor a.skip:focus{ position:relative; display:block; padding:5px; right:0; z-index:60; width:auto; height:auto; text-align:right; white-space:nowrap; color:#000; text-decoration:none; letter-spacing:-1px; _zoom:1;} + +.xpress-editor .input_area{ position:relative; margin:10px; z-index:30; *zoom:1; height:400px;} +.xpress-editor .input_area iframe, +.xpress-editor .input_area textarea{ display:block; width:100%; position:relative; height:100%; border:0; overflow:auto;} +.xpress-editor .input_area iframe{} +.xpress-editor .input_area textarea{ *margin:0 -10px; _margin-bottom:-2px;} +.xpress-editor .input_area textarea.blind{ display:none;} +.xpress-editor .input_control{ position:relative; display:block; width:100%; clear:both; text-align:center; background:#fbfbfb url(../img/btn_expand.gif) no-repeat center center; cursor:n-resize;} +.xpress-editor .input_control span{ display:block; height:10px; border-top:1px solid #dfdfdf; visibility:visible; font-size:0; line-height:200%; white-space:nowrap; color:#fff;} +.xpress-editor.black .input_control { background:#111 url(../img/btn_expand.black.gif) no-repeat center center;} +.xpress-editor.black .input_control span{ border-top:1px solid #333; color:#000;} + +.xpress-editor .tool{ position:relative; overflow:visible; padding:5px 10px 6px 10px; *padding:5px 10px 8px 10px; z-index:40; clear:both; background:#f8f8f8 url(../img/bg_tool.gif) repeat-x left bottom; border:0; *zoom:1;} +.xpress-editor .tool.disable { display:none; } +.xpress-editor.black .tool{ background:#111 url(../img/bg_tool.black.gif) repeat-x left bottom; } + +.xpress-editor .tool:after{ content:""; display:block; clear:both;} +.xpress-editor .tool ul{ position:relative; overflow:visible; float:left; margin:0 5px 2px 0; z-index:2;} +.xpress-editor .tool ul.action{ width:43px;} +.xpress-editor .tool ul.type{ width:auto; white-space:nowrap;} +.xpress-editor .tool ul.style{ width:169px; z-index:6;} +.xpress-editor .tool ul.paragraph{ width:169px; z-index:5;} +.xpress-editor .tool ul.extra1{ width:90px; z-index:4;} +.xpress-editor .tool ul.table{ width:85px; z-index:3;} +.xpress-editor .tool ul.extra2{ width:auto; z-index:2;} +.xpress-editor .tool ul.extra3{ float:right; width:auto; z-index:1; margin-right:1px;} +.xpress-editor .tool ul.extra3 li{ margin-right:4px;} +.xpress-editor .tool li{ position:relative; float:left;} +.xpress-editor .tool li button{ width:21px; height:21px; background:url(../img/btn_set.gif) no-repeat 0 0; vertical-align:top;} +.xpress-editor.black .tool li button{ width:21px; height:21px; background:url(../img/btn_set.black.gif) no-repeat 0 0; vertical-align:top;} +.xpress-editor .tool li button span{ position:absolute; top:0; left:0; width:0; height:0; overflow:hidden; visibility:hidden;} + +.xpress-editor .tool li.extensions span.exButton, +.xpress-editor .tool li.extensions span.exButton button{ float:left; position:relative; display:inline-block; width:auto; background:url(../img/btn_extension.gif) no-repeat left top;} +.xpress-editor .tool li.extensions span.exButton{ margin-right:18px;} +.xpress-editor .tool li.extensions span.exButton button{ left:18px; height:21px; background-position:right top; padding:0 4px 0 0; font:11px/21px Tahoma, Sans-serif; text-align:left; *overflow:visible; *line-height:20px;} +.xpress-editor.black .tool li.extensions span.exButton, +.xpress-editor.black .tool li.extensions span.exButton button{ color:#fff; background-image:url(../img/btn_extension.black.gif); } + +.xpress-editor .tool li.html span, +.xpress-editor .tool li.html span button, +.xpress-editor .tool li.preview span, +.xpress-editor .tool li.preview span button{ float:left; position:relative; display:inline-block; width:auto; height:auto; visibility:visible; background:url(../img/btn_set_blank.gif) no-repeat 0 0; white-space:nowrap;} +.xpress-editor.black .tool li.html span, +.xpress-editor.black .tool li.html span button, +.xpress-editor.black .tool li.preview span, +.xpress-editor.black .tool li.preview span button{ color:#fff;background-image:url(../img/btn_set_blank.black.gif); } + +.xpress-editor .tool li.html span, +.xpress-editor .tool li.preview span{ margin-right:2px; background-position:left top;} +.xpress-editor .tool li.html span button, +.xpress-editor .tool li.preview span button{ left:2px; height:21px; background-position:right top; font:11px/21px Tahoma, Sans-serif; padding:0 4px; *overflow:visible; *line-height:20px;} + +.xpress-editor .tool ul.type li{ float:none; display:inline; *top:1px;} +.xpress-editor .tool ul.type li select{ height:21px; width:62px;} +.xpress-editor.black .tool ul.type li select{ color:#fff; background-color:#000; } + +/* Content > Tool > Button Default */ +.xpress-editor .tool li.undo button{ width:22px; background-position:0 0;} +.xpress-editor .tool li.redo button{ background-position:-22px 0;} +.xpress-editor .tool li.bold button{ width:22px; background-position:-43px 0;} +.xpress-editor .tool li.underline button{ background-position:-65px 0;} +.xpress-editor .tool li.italic button{ background-position:-86px 0;} +.xpress-editor .tool li.del button{ background-position:-107px 0;} +.xpress-editor .tool li.fcolor button{ background-position:-128px 0;} +.xpress-editor .tool li.bcolor button{ background-position:-149px 0;} +.xpress-editor .tool li.sup button{ background-position:-170px 0;} +.xpress-editor .tool li.sub button{ background-position:-191px 0;} +.xpress-editor .tool li.left button{ width:22px; background-position:-212px 0;} +.xpress-editor .tool li.center button{ background-position:-234px 0;} +.xpress-editor .tool li.right button{ background-position:-255px 0;} +.xpress-editor .tool li.justify button{ background-position:-276px 0;} +.xpress-editor .tool li.ol button{ background-position:-297px 0;} +.xpress-editor .tool li.ul button{ background-position:-318px 0;} +.xpress-editor .tool li.outdent button{ background-position:-339px 0;} +.xpress-editor .tool li.indent button{ background-position:-360px 0;} +.xpress-editor .tool li.blockquote button{ width:22px; background-position:-381px 0;} +.xpress-editor .tool li.url button{ width:26px; background-position:-403px 0;} +.xpress-editor .tool li.character button{ background-position:-429px 0;} +.xpress-editor .tool li.find button{ background-position:-450px 0;} +.xpress-editor .tool li.table button{ width:22px; background-position:-471px 0;} +.xpress-editor .tool li.merge button{ background-position:-493px 0;} +.xpress-editor .tool li.splitCol button{ background-position:-514px 0;} +.xpress-editor .tool li.splitRow button{ background-position:-535px 0;} +.xpress-editor .tool li.extensions span{ background-position:0 0;} +.xpress-editor .tool li.extensions span button{ background-position:right 0;} +.xpress-editor .tool li.html span{ background-position:0 0;} +.xpress-editor .tool li.html span button{ background-position:right 0;} +.xpress-editor .tool li.preview span{ background-position:0 0;} +.xpress-editor .tool li.preview span button{ background-position:right 0;} + +/* Content > Tool > Button Hover */ +.xpress-editor .tool li.undo button.hover{ width:22px; background-position:0 -21px;} +.xpress-editor .tool li.redo button.hover{ background-position:-22px -21px;} +.xpress-editor .tool li.bold button.hover{ width:22px; background-position:-43px -21px;} +.xpress-editor .tool li.underline button.hover{ background-position:-65px -21px;} +.xpress-editor .tool li.italic button.hover{ background-position:-86px -21px;} +.xpress-editor .tool li.del button.hover{ background-position:-107px -21px;} +.xpress-editor .tool li.fcolor button.hover{ background-position:-128px -21px;} +.xpress-editor .tool li.bcolor button.hover{ background-position:-149px -21px;} +.xpress-editor .tool li.sup button.hover{ background-position:-170px -21px;} +.xpress-editor .tool li.sub button.hover{ background-position:-191px -21px;} +.xpress-editor .tool li.left button.hover{ width:22px; background-position:-212px -21px;} +.xpress-editor .tool li.center button.hover{ background-position:-234px -21px;} +.xpress-editor .tool li.right button.hover{ background-position:-255px -21px;} +.xpress-editor .tool li.justify button.hover{ background-position:-276px -21px;} +.xpress-editor .tool li.ol button.hover{ background-position:-297px -21px;} +.xpress-editor .tool li.ul button.hover{ background-position:-318px -21px;} +.xpress-editor .tool li.outdent button.hover{ background-position:-339px -21px;} +.xpress-editor .tool li.indent button.hover{ background-position:-360px -21px;} +.xpress-editor .tool li.blockquote button.hover{ width:22px; background-position:-381px -21px;} +.xpress-editor .tool li.url button.hover{ width:26px; background-position:-403px -21px;} +.xpress-editor .tool li.character button.hover{ background-position:-429px -21px;} +.xpress-editor .tool li.find button.hover{ background-position:-450px -21px;} +.xpress-editor .tool li.table button.hover{ width:22px; background-position:-471px -21px;} +.xpress-editor .tool li.merge button.hover{ background-position:-493px -21px;} +.xpress-editor .tool li.splitCol button.hover{ background-position:-514px -21px;} +.xpress-editor .tool li.splitRow button.hover{ background-position:-535px -21px;} +.xpress-editor .tool li.extensions span.hover{ background-position:0 -21px;} +.xpress-editor .tool li.extensions span.hover button{ background-position:right -21px;} +.xpress-editor .tool li.html span.hover{ background-position:0 -21px;} +.xpress-editor .tool li.html span.hover button{ background-position:right -21px;} +.xpress-editor .tool li.preview span.hover{ background-position:0 -21px;} +.xpress-editor .tool li.preview span.hover button{ background-position:right -21px;} + +/* Content > Tool > Button Active */ +.xpress-editor .tool li.undo button.active{ width:22px; background-position:0 -42px;} +.xpress-editor .tool li.redo button.active{ background-position:-22px -42px;} +.xpress-editor .tool li.bold button.active{ width:22px; background-position:-43px -42px;} +.xpress-editor .tool li.underline button.active{ background-position:-65px -42px;} +.xpress-editor .tool li.italic button.active{ background-position:-86px -42px;} +.xpress-editor .tool li.del button.active{ background-position:-107px -42px;} +.xpress-editor .tool li.fcolor button.active{ background-position:-128px -42px;} +.xpress-editor .tool li.bcolor button.active{ background-position:-149px -42px;} +.xpress-editor .tool li.sup button.active{ background-position:-170px -42px;} +.xpress-editor .tool li.sub button.active{ background-position:-191px -42px;} +.xpress-editor .tool li.left button.active{ width:22px; background-position:-212px -42px;} +.xpress-editor .tool li.center button.active{ background-position:-234px -42px;} +.xpress-editor .tool li.right button.active{ background-position:-255px -42px;} +.xpress-editor .tool li.justify button.active{ background-position:-276px -42px;} +.xpress-editor .tool li.ol button.active{ background-position:-297px -42px;} +.xpress-editor .tool li.ul button.active{ background-position:-318px -42px;} +.xpress-editor .tool li.outdent button.active{ background-position:-339px -42px;} +.xpress-editor .tool li.indent button.active{ background-position:-360px -42px;} +.xpress-editor .tool li.blockquote button.active{ width:22px; background-position:-381px -42px;} +.xpress-editor .tool li.url button.active{ width:26px; background-position:-403px -42px;} +.xpress-editor .tool li.character button.active{ background-position:-429px -42px;} +.xpress-editor .tool li.find button.active{ background-position:-450px -42px;} +.xpress-editor .tool li.table button.active{ width:22px; background-position:-471px -42px;} +.xpress-editor .tool li.merge button.active{ background-position:-493px -42px;} +.xpress-editor .tool li.splitCol button.active{ background-position:-514px -42px;} +.xpress-editor .tool li.splitRow button.active{ background-position:-535px -42px;} +.xpress-editor .tool li.extensions span.active{ background-position:0 -42px;} +.xpress-editor .tool li.extensions span.active button{ background-position:right -42px;} +.xpress-editor .tool li.html span.active{ background-position:0 -42px;} +.xpress-editor .tool li.html span.active button{ background-position:right -42px;} +.xpress-editor .tool li.preview span.active{ background-position:0 -42px;} +.xpress-editor .tool li.preview span.active button{ background-position:right -42px;} + +/* Content > Tool > Button Off */ +.xpress-editor .tool.off li.undo button, +.xpress-editor .tool li.undo button.off{ width:22px; background-position:0 -63px;} +.xpress-editor .tool.off li.redo button, +.xpress-editor .tool li.redo button.off{ background-position:-22px -63px;} +.xpress-editor .tool.off li.bold button{ width:22px; background-position:-43px -63px;} +.xpress-editor .tool.off li.underline button{ background-position:-65px -63px;} +.xpress-editor .tool.off li.italic button{ background-position:-86px -63px;} +.xpress-editor .tool.off li.del button{ background-position:-107px -63px;} +.xpress-editor .tool.off li.fcolor button{ background-position:-128px -63px;} +.xpress-editor .tool.off li.bcolor button{ background-position:-149px -63px;} +.xpress-editor .tool.off li.sup button{ background-position:-170px -63px;} +.xpress-editor .tool.off li.sub button{ background-position:-191px -63px;} +.xpress-editor .tool.off li.left button{ width:22px; background-position:-212px -63px;} +.xpress-editor .tool.off li.center button{ background-position:-234px -63px;} +.xpress-editor .tool.off li.right button{ background-position:-255px -63px;} +.xpress-editor .tool.off li.justify button{ background-position:-276px -63px;} +.xpress-editor .tool.off li.ol button{ background-position:-297px -63px;} +.xpress-editor .tool.off li.ul button{ background-position:-318px -63px;} +.xpress-editor .tool.off li.outdent button{ background-position:-339px -63px;} +.xpress-editor .tool.off li.indent button{ background-position:-360px -63px;} +.xpress-editor .tool.off li.blockquote button{ width:22px; background-position:-381px -63px;} +.xpress-editor .tool.off li.url button{ width:26px; background-position:-403px -63px;} +.xpress-editor .tool.off li.character button{ background-position:-429px -63px;} +.xpress-editor .tool.off li.find button{ background-position:-450px -63px;} +.xpress-editor .tool.off li.table button{ width:22px; background-position:-471px -63px;} +.xpress-editor .tool.off li.merge button, +.xpress-editor .tool li.merge button.off{ background-position:-493px -63px;} +.xpress-editor .tool.off li.splitCol button, +.xpress-editor .tool li.splitCol button.off{ background-position:-514px -63px;} +.xpress-editor .tool.off li.splitRow button, +.xpress-editor .tool li.splitRow button.off{ background-position:-535px -63px;} +.xpress-editor .tool.off li.extensions span{ background-position:0 -63px;} +.xpress-editor .tool.off li.extensions span button{ background-position:right -63px; color:#bcbcbc;} +.xpress-editor .tool.off li button{ cursor:default;} +.xpress-editor .tool.off ul.extra3 li button{ cursor:pointer;} + +/* Content > Tool > Layer */ +.xpress-editor .tool .layer{ display:none; position:absolute; left:0; top:20px; background-color:#fbfbfb; border:1px solid #c5c5c5; border-right:1px solid #9f9f9f; border-bottom:1px solid #9f9f9f;} +.xpress-editor .tool .layer li{ float:none; left:0;} +.xpress-editor .tool .layer button{ margin:0 !important; width:auto; height:auto; background:none;} +.xpress-editor .tool .layer button span{ position:absolute; width:0; height:0; font-size:0; line-height:0; overflow:hidden; visibility:hidden;} +.xpress-editor .tool .btn_area{ position:relative; clear:both; text-align:center !important; padding:7px 0 12px 0; width:100%; white-space:nowrap; *zoom:1;} +.xpress-editor .tool .btn_area *{ vertical-align:top;} +.xpress-editor .tool button.close{ position:absolute; top:4px; right:3px; width:21px; height:20px; background:url(../img/btn_layer_close.gif) no-repeat center center !important;} +.xpress-editor .tool button.close span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} +.xpress-editor .tool .layer .btn_area button{ *margin:0 2px !important;} +.xpress-editor .tool .layer .btn_area button.confirm{ width:38px; height:21px; background:url(../img/btn_layer_confirm.gif) no-repeat;} +.xpress-editor .tool .layer .btn_area button.cancel{ width:38px; height:21px; background:url(../img/btn_layer_cancel.gif) no-repeat;} + +.xpress-editor .tool li.fcolor .layer{ width:218px !important; height:auto !important; background-image:none !important; overflow:hidden;} +.xpress-editor .tool .layer .palette{ width:210px; position:relative; left:7px; padding:8px 0 7px 0; margin:0;} +.xpress-editor .tool .layer .palette li{ float:left; margin:0 1px 1px 0; font-size:0; line-height:0;} +.xpress-editor .tool .layer .palette button{ position:relative; overflow:hidden; width:11px; height:11px;} + +.xpress-editor .tool li.bcolor .layer { width:218px; overflow:hidden;} +.xpress-editor .tool .layer .background{ width:210px; position:relative; left:7px; margin:0 0 -2px 0; padding:8px 0 0 0; *padding-bottom:8px; _padding-bottom:4px;} +.xpress-editor .tool .layer .background li{ float:left; margin:0 5px 2px 0;} +.xpress-editor .tool .layer .background button{ position:relative; overflow:hidden; width:65px; height:19px; text-align:left; padding:4px;} +.xpress-editor .tool .layer .background button span{ position:relative; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto;} + +.xpress-editor .tool li.style .layer{ padding:4px 2px; _overflow:hidden; filter:progid:DXImageTransform.Microsoft.Shadow(color=#dddddd,direction=135,strength=2);} +.xpress-editor .tool li.style .layer li{ position:relative; background:#fbfbfb;} +.xpress-editor .tool li.style .layer li button{ display:block; width:134px; position:relative;} +.xpress-editor .tool li.style .layer li button span{ display:block; width:130px; text-align:left; letter-spacing:normal;} +.xpress-editor .tool li.style .layer li.h3 button span{ padding:3px 0 1px 4px; height:15px; _height /**/:19px; font-size:16px; font-weight:bold;} +.xpress-editor .tool li.style .layer li.h4 button span{ padding:3px 0 2px 4px; height:13px; _height /**/:18px; font-size:14px; font-weight:bold;} +.xpress-editor .tool li.style .layer li.h5 button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px; font-weight:bold;} +.xpress-editor .tool li.style .layer li.h6 button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px;} +.xpress-editor .tool li.style .layer li.p button span{ padding:3px 0 1px 4px; height:11px; _height /**/:15px; font-size:12px; color:#5d5d5d;} +.xpress-editor .tool li.style .layer li button.hover{ background:#c1f471; *height:1%;} + +.xpress-editor .tool li.blockquote .layer{ padding:6px 5px 6px 7px; left:0; width:288px;} +.xpress-editor .tool li.blockquote .layer ul{ *zoom:1; margin:0;} +.xpress-editor .tool li.blockquote .layer ul:after{ content:""; display:block; clear:both;} +.xpress-editor .tool li.blockquote .layer li{ position:relative; float:left; overflow:hidden; width:32px; height:34px; margin:0 2px 0 0; border:1px solid #cdcecc; background-image:url(../img/btn_qmark.gif); background-repeat:no-repeat;} +.xpress-editor .tool li.blockquote .layer li.q1{ background-position:0 0;} +.xpress-editor .tool li.blockquote .layer li.q2{ background-position:-32px 0;} +.xpress-editor .tool li.blockquote .layer li.q3{ background-position:-64px 0;} +.xpress-editor .tool li.blockquote .layer li.q4{ background-position:-96px 0;} +.xpress-editor .tool li.blockquote .layer li.q5{ background-position:-128px 0;} +.xpress-editor .tool li.blockquote .layer li.q6{ background-position:-160px 0;} +.xpress-editor .tool li.blockquote .layer li.q7{ background-position:-192px 0;} +.xpress-editor .tool li.blockquote .layer li.q8{ background-position:-224px 0;} +.xpress-editor .tool li.blockquote .layer li button{ width:32px; height:34px;} + +.xpress-editor .tool li.url .layer{ width:231px; height:125px; background-image:url(../img/bx_url.gif); background-repeat:no-repeat; background-position:10px 14px;} +.xpress-editor .tool li.url .layer fieldset{ position:absolute; width:212px; left:10px; top:14px;} +.xpress-editor .tool li.url .layer fieldset h3{ position:absolute; top:-4px; left:15px; color:#404040; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto; background:none; margin:0; padding:0; font-weight:normal;} +.xpress-editor .tool li.url .layer fieldset input.link{ position:absolute; left:12px; top:19px; width:179px; padding:2px 0 1px 6px; *margin:-1px 0; font-size:11px; height:13px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} +.xpress-editor .tool li.url .layer fieldset p{ position:absolute; left:12px; top:44px;} +.xpress-editor .tool li.url .layer fieldset p input{ width:13px; height:13px; vertical-align:middle; margin-right:3px;} +.xpress-editor .tool li.url .layer .btn_area{ position:absolute; bottom:12px; padding:0;} + +.xpress-editor .tool li.table .layer{ width:242px; height:239px; background-image:url(../img/bx_table.gif); background-repeat:no-repeat; background-position:10px 14px;} +.xpress-editor .tool li.table .layer fieldset{ position:absolute; width:222px; left:10px;} +.xpress-editor .tool li.table .layer fieldset h3{ position:absolute; top:-4px; left:15px; color:#404040; visibility:visible; font-size:12px; line-height:normal; width:auto; height:auto; background:none; margin:0; padding:0; font-weight:normal;} + +.xpress-editor .tool li.table .layer fieldset dl{ position:absolute; left:10px;} +.xpress-editor .tool li.table .layer fieldset dt{ float:left; padding:3px 0 0 0; height:20px; white-space:nowrap; letter-spacing:-1px;} +.xpress-editor .tool li.table .layer fieldset dd{ float:right; position:relative;} +.xpress-editor .tool li.table .layer fieldset dd button.add, +.xpress-editor .tool li.table .layer fieldset dd button.del{ position:absolute; left:27px; width:15px; height:8px; background:url(../img/btn_layer_cell_adjust.gif) no-repeat;} +.xpress-editor .tool li.table .layer fieldset dd button.add{ top:1px;} +.xpress-editor .tool li.table .layer fieldset dd button.del{ top:9px; background-position:0 -8px;} +.xpress-editor .tool li.table .layer fieldset dd .preview_palette{ display:block; float:left; margin:0 3px 0 0; padding:2px; position:relative; border:1px solid #c8c9c6; width:14px; height:14px; overflow:hidden;} +.xpress-editor .tool li.table .layer fieldset dd .preview_palette button{ width:14px; height:14px; font-size:500px; line-height:0;} +.xpress-editor .tool li.table .layer fieldset dd .find_palette{ width:33px; height:20px; background:url(../img/btn_search.gif) no-repeat;} + +.xpress-editor .tool li.table .layer fieldset.num{ top:14px;} +.xpress-editor .tool li.table .layer fieldset.num dl{ top:18px; width:60px;} +.xpress-editor .tool li.table .layer fieldset.num dt{ height:20px;} +.xpress-editor .tool li.table .layer fieldset.num dd{ height:23px;} +.xpress-editor .tool li.table .layer fieldset.num dt label{ font-size:11px; color:#333;} +.xpress-editor .tool li.table .layer fieldset.num dd input{ padding:3px 0 0 6px; *margin:-1px 0; width:35px; height:13px; font-size:11px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} + +.xpress-editor .tool li.table .layer fieldset.color{ top:96px;} +.xpress-editor .tool li.table .layer fieldset.color dl{ top:18px; width:210px;} +.xpress-editor .tool li.table .layer fieldset.color dt{ height:23px;} +.xpress-editor .tool li.table .layer fieldset.color dd{ height:26px; width:146px;} +.xpress-editor .tool li.table .layer fieldset.color dt label{ font-size:11px; color:#333;} +.xpress-editor .tool li.table .layer fieldset.color dd input{ padding:3px 0 0 6px; *margin:-1px 0; font-size:11px; border:1px solid #818181; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} +.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_width{ width:35px; height:13px;} +.xpress-editor .tool li.table .layer fieldset.color dd input#table_border_color, +.xpress-editor .tool li.table .layer fieldset.color dd input#table_bg_color{ width:70px; height:15px; *margin-right:3px;} + +.xpress-editor .tool li.table .layer table{ position:absolute; top:18px; left:75px; width:137px; height:40px; table-layout:fixed;} +.xpress-editor .tool li.table .layer table *{ font-size:0; line-height:0;} +.xpress-editor .tool li.table .layer table th, +.xpress-editor .tool li.table .layer table td{ text-align:center;} +.xpress-editor .tool li.table .layer .btn_area{ position:absolute; bottom:12px; padding:0; z-index:1;} + +.xpress-editor .tool li.table .layer .palette{ display:none; position:absolute; z-index:2; left:11px; width:204px; padding:8px 7px 7px 7px; _padding-right:6px; background-color:#fbfbfb; border:1px solid #c5c5c5; border-right:1px solid #9f9f9f; border-bottom:1px solid #9f9f9f;} +.xpress-editor .tool li.table .layer.p1 .palette{ display:block; top:163px;} +.xpress-editor .tool li.table .layer.p2 .palette{ display:block; top:189px;} + +.xpress-editor .tool li.character .layer{ width:433px; height:242px; overflow:hidden;} +.xpress-editor .tool li.character .layer ul{ margin:0;} +.xpress-editor .tool li.character .layer h3{position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} +.xpress-editor .tool li.character .layer .nav{ position:absolute; top:11px; left:-1px; overflow:hidden; white-space:nowrap;} +.xpress-editor .tool li.character .layer .nav li{ display:inline; margin:0 -4px 0 0; padding:0 8px; background:url(../img/vr_layer_character.gif) no-repeat 0 0;} +.xpress-editor .tool li.character .layer .nav li a{ color:#444; text-decoration:none; letter-spacing:-1px;} +.xpress-editor .tool li.character .layer .nav li a:hover, +.xpress-editor .tool li.character .layer .nav li a:active, +.xpress-editor .tool li.character .layer .nav li a:focus{ text-decoration:underline;} +.xpress-editor .tool li.character .layer .nav li a.on{ font-weight:bold; color:#004790; display:inline;} +.xpress-editor .tool li.character .layer .list{ position:absolute; left:7px; top:30px; width:421px; height:172px; background:url(../img/bx_character.gif) no-repeat;} +.xpress-editor .tool li.character .layer .list li{ position:relative; top:1px; left:1px; float:left; width:20px; height:18px; margin:0 1px 1px 0;} +.xpress-editor .tool li.character .layer .list li button{ width:20px; height:18px;} +.xpress-editor .tool li.character .layer .list li button.hover{ border:2px solid #27c11a;} +.xpress-editor .tool li.character .layer .list li button span{ overflow:visible; font-size:12px; width:auto; height:auto; position:relative; visibility:visible; line-height:normal;} +.xpress-editor .tool li.character .layer p{ position:absolute; top:212px; left:7px;} +.xpress-editor .tool li.character .layer p *{ vertical-align:top;} +.xpress-editor .tool li.character .layer p label{ position:relative; top:4px; margin:0 7px 0 0; color:#333; letter-spacing:-1px;} +.xpress-editor .tool li.character .layer p input{ padding:3px 0 0 4px; margin:0 4px 0 0; width:300px; _width /**/:306px; height:16px; _height /**/:20px; border:1px solid #acacac; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} +.xpress-editor .tool li.character .layer p button{ position:relative; *top:1px; width:38px; height:21px; background:url(../img/btn_layer_confirm.gif) no-repeat;} +.xpress-editor .tool li.character .layer p button span{ position:absolute; width:0; height:0; overflow:hidden; visibility:hidden;} + +.xpress-editor .tool li.find .layer{ width:242px;} +.xpress-editor .tool li.find .layer h3{ background:#f2f2f2; color:#333; height:21px; margin:0 0 11px 0; padding:7px 0 0 5px;} +.xpress-editor .tool li.find .layer .menu_tab{ position:relative; z-index:20; width:100%; *zoom:1;} +.xpress-editor .tool li.find .layer .menu_tab:after{ content:""; display:block; clear:both;} +.xpress-editor .tool li.find .layer .layer_tab{ position:relative; left:10px; padding:0; margin:0; clear:both;} +.xpress-editor .tool li.find .layer .layer_tab li{ position:relative; z-index:1; float:left; margin-right:1px; background:url(../img/btn_layer_tab.gif) no-repeat 0 0;} +.xpress-editor .tool li.find .layer .layer_tab li a{ position:relative; display:block; float:left; left:2px; height:15px; padding:4px 9px 0 5px; color:#404040; text-decoration:none; background:url(../img/btn_layer_tab.gif) no-repeat right 0;} +.xpress-editor .tool li.find .layer.find .layer_tab li.tab1, +.xpress-editor .tool li.find .layer.replace .layer_tab li.tab2{ top:-1px; margin-bottom:-1px;} +.xpress-editor .tool li.find .layer.find .layer_tab li.tab1 a, +.xpress-editor .tool li.find .layer.replace .layer_tab li.tab2 a{ height:18px;} +.xpress-editor .tool li.find .layer .container{ position:relative; z-index:1; clear:both; top:-2px;} +.xpress-editor .tool li.find .layer .container .bx{ display:none; position:relative; width:222px; left:10px; clear:both; z-index:1; background:url(../img/bx_find.gif) no-repeat;} +.xpress-editor .tool li.find .layer.find .container #find, +.xpress-editor .tool li.find .layer.replace .container #replace{ display:block;} + +.xpress-editor .tool li.find .layer .bx fieldset{ position:relative; padding:13px 0 17px 11px;} +.xpress-editor .tool li.find .layer .bx fieldset *{ vertical-align:top;} +.xpress-editor .tool li.find .layer .bx label{ position:relative; top:4px; margin:0 7px 0 0; font-size:11px; letter-spacing:-1px; color:#333;} +.xpress-editor .tool li.find .layer .bx input{ padding:3px 0 0 4px; width:144px; _width /**/:150px; height:14px; _height /**/:19px; border:1px solid #acacac; border-right:1px solid #dadada; border-bottom:1px solid #dadada;} +.xpress-editor .tool li.find .layer .bx .cap{ position:absolute; left:0; bottom:0; display:block; width:222px; height:2px; _margin:0 0 -1px 0; overflow:hidden; background:#fff url(../img/bx_find.gif) no-repeat left bottom; font-size:0; line-height:0;} +.xpress-editor .tool li.find .layer .bx#replace fieldset{ height:45px; _height /**/:75px;} +.xpress-editor .tool li.find .layer .bx#replace fieldset #keyword2{ margin-bottom:6px;} +.xpress-editor .tool li.find .layer .btn_area button{ display:none; *margin:0 2px !important;} +.xpress-editor .tool li.find .layer.find .btn_area .find_next{ display:inline; width:62px; height:21px; background:url(../img/btn_layer_find_next_strong.gif) no-repeat;} +.xpress-editor .tool li.find .layer.replace .btn_area .find_next{ display:inline; width:55px; height:21px; background:url(../img/btn_layer_find_next.gif) no-repeat;} +.xpress-editor .tool li.find .layer.replace .btn_area .replace{ display:inline; width:48px; height:21px; background:url(../img/btn_layer_replace.gif) no-repeat;} +.xpress-editor .tool li.find .layer.replace .btn_area .replace_all{ display:inline; width:69px; height:21px; background:url(../img/btn_layer_replace_all.gif) no-repeat;} +.xpress-editor .tool li.find .layer .btn_area .cancel{ display:inline;} + +.xpress-editor .tool li.extensions .layer{ width:auto; white-space:nowrap; padding:5px 10px;} +.xpress-editor .tool li.extensions .layer li{ margin:2px 0;} +.xpress-editor .tool li.extensions .layer li a { color:#000; text-decoration:none; } +.xpress-editor .tool li.extensions .layer li a:hover { text-decoration:underline; } + +/* File Uploader */ +.xpress-editor .fileUploader{ clear:both; padding-top:5px; margin-bottom:10px;} +.xpress-editor .fileUploader:after{ content:""; display:block; clear:both;} +.xpress-editor .fileUploader .preview{ float:left; width:64px; height:64px; border:1px solid #ccc;; padding:2px; margin:0 10px 5px 0;} +.xpress-editor .fileUploader .preview.black { background-color:#000; border:1px solid #666;} +.xpress-editor .fileUploader .preview img{ display:block; width:64px; height:64px;} +.xpress-editor .fileUploader .fileListArea{ float:left; width:260px; margin:0 10px 5px 0;} +.xpress-editor .fileUploader .fileListArea select{ width:100%; height:70px; overflow:auto;} +.xpress-editor .fileUploader .fileListArea select option{ font-size:11px;} +.xpress-editor .fileUploader .fileListArea.black select { background-color:#000; border:1px solid #666;} +.xpress-editor .fileUploader .fileListArea.black select option { color:#aaa; } +.xpress-editor .fileUploader .fileUploadControl{ clear:right;} +.xpress-editor .fileUploader .fileUploadControl .button{ margin-bottom:5px;} +.xpress-editor .fileUploader .file_attach_info{ clear:right; margin:5px 0;} + +/* Auto Save */ +.xpress-editor .autosave_message { display:none; background: #f6ffdb; padding:6px 10px; margin:0; line-height:1;} +.xpress-editor.black .autosave_message { display:none; background:#222; padding:6px 10px; margin:0; line-height:1; color:#fff; } +.xpress-editor .input_syntax.black { background:transparent; color:#fff; } diff --git a/modules/editor/skins/xpresseditor/editor.html b/modules/editor/skins/xpresseditor/editor.html index e43fb0c0a..76eb90478 100644 --- a/modules/editor/skins/xpresseditor/editor.html +++ b/modules/editor/skins/xpresseditor/editor.html @@ -1,519 +1,523 @@ - - - - - - - - - - - {@ $editor_class = "black" } - - -
- nbr" /> - -
- - - - - - - - - - - - - - - - -
-
- - -
- - -
    -
  • -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - - - - -
  • -
  • - - - - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
-
    -
  • - - - - -
  • - -
  • - - - - -
  • -
  • - - - - -
  • -
- -
    -
  • - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
    
    
    
    
- -
-

{$lang->edit->table_config}

-
-
- -
-
- - - -
-
- -
-
- - - -
-
- -
-
- - - -
-
-
-
- - -
- - - -
  • -
  • -
  • - - - - - - - - -
      - -
    • - -
    - - - - - -
    - -
    - - -

     

    - - - - - - - - - - - - -
    -
    -
    - -
    -
    - - - -
    -
    {$upload_status}
    -
    - - - - - - + + + + + + + + + + + {@ $editor_class = "black" } + + +
    + nbr" /> + +
    + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + +
      +
    • +
    • +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + + + + +
    • +
    • + + + + +
    • +
    • + +
    • +
    • + +
    • +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
      +
    • + + + + +
    • + +
    • + + + + +
    • +
    • + + + + +
    • +
    + +
      +
    • + + + + +
    • +
    • +
    • +
    • +
    + + + + + + + +
      + +
    • + +
    + + +
    + +
    + + + +
    + +
    + + +

     

    + + + + + +
    + + + + + + +
    +
    +
    + +
    +
    + + + +
    +
    {$upload_status}
    +
    + +
    + + + + diff --git a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js index 7a7a83e25..c041d75b9 100644 --- a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js +++ b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js @@ -5031,43 +5031,43 @@ xe.XE_Hyperlink = jQuery.Class({ this.oApp.exec("FOCUS", []); this.oSelection = this.oApp.getSelection(); - if(this._validateURL(sURL)){ - var sTarget = ""; - if(this.oCbNewWin.checked) - sTarget = "_blank"; - else - sTarget = "_self"; + //if(this._validateURL(sURL)){ + var sTarget = ""; + if(this.oCbNewWin.checked) + sTarget = "_blank"; + else + sTarget = "_self"; - if(this.oSelection.collapsed){ - var str = "" + sURL + ""; - this.oSelection.pasteHTML(str); - }else{ - var nSession = Math.ceil(Math.random()*10000); - var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); - this.oApp.exec("EXECCOMMAND", arg); + if(this.oSelection.collapsed){ + var str = "" + sURL + ""; + this.oSelection.pasteHTML(str); + }else{ + var nSession = Math.ceil(Math.random()*10000); + var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); + this.oApp.exec("EXECCOMMAND", arg); - this.oSelection.setFromSelection(); + this.oSelection.setFromSelection(); - var oDoc = this.oApp.getWYSIWYGDocument(); - var aATags = oDoc.body.getElementsByTagName("A"); - var nLen = aATags.length; - var rxMarker = new RegExp(this.sRXATagMarker+nSession, "i"); - var elATag; - for(var i=0; i]+))(.*?)>/ig, regex_class2 = /xe_selected_cell/g; regex_handler = /<(.*?)\s+on[a-z]+\s*=(?:\s*".*?"|\s*'.*?'|[^\s>]+)(.*?)>/ig, - regex_id = /<(.*?)\s+id\s*=(?:[^\s>]+|\s*".*?"|\s*'.*?')(.*?)>/ig, - regex_script = //ig, + //regex_id = /<(.*?)\s+id\s*=(?:[^\s>]+|\s*".*?"|\s*'.*?')(.*?)>/ig, + //regex_script = //ig, regex_font_color = /color\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, regex_font_face = /face\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, regex_font_size = /size\s*=(?:\s*"(\d+)"|\s*'(\d+)'|(\d+))/i, @@ -5432,11 +5432,11 @@ var regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, regex_font_style = /font-style\s*:\s*italic;?/i, regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i, - regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/g, + regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/ig, regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //" var - allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var,iframe,object,param'.split(','), + allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var,iframe,object,param,style'.split(','), lonely_tags = 'area,br,col,embed,hr,img,input,param'.split(','); var @@ -5459,6 +5459,10 @@ xe.XE_XHTMLFormatter = $.Class({ TO_IR : function(sContent) { var stack = []; + + // remove xeHandled attrs + sContent = sContent.replace(/xeHandled="YES"/ig,''); + // remove all useless styles sContent = sContent.replace(regex_meanless_css1, function(m0,m1,m2,m3){ @@ -5478,10 +5482,10 @@ xe.XE_XHTMLFormatter = $.Class({ sContent = sContent.replace(regex_handler, '<$1$2>'); // remove all id - sContent = sContent.replace(regex_id, '<$1$2>'); + //sContent = sContent.replace(regex_id, '<$1$2>'); // remove all scripts - sContent = sContent.replace(regex_script, ''); + //sContent = sContent.replace(regex_script, ''); if (jQuery.browser.msie) { // remove jQuery attributes @@ -5492,6 +5496,7 @@ xe.XE_XHTMLFormatter = $.Class({ return '<'+m1+' '+ m2.replace(regex_quote_attr, function(s0,s1,s2,s3){ if (s1) return s1; + if(/^"/.test(s3)||/"$/.test(s3)) return s2+'='+s3; return s2+'="'+s3+'"'; }) + '>'; }); @@ -5656,8 +5661,6 @@ xe.XE_Extension = jQuery.Class({ }, _removeAttrs : function(sContent) { - sContent = sContent.replace(/]*?) xe_handled\s*=\s*".+?"([^>]*?)>/i, ''); - return sContent; }, @@ -5669,25 +5672,24 @@ xe.XE_Extension = jQuery.Class({ var fn = function(){ var obj = jQuery(this); var comp = obj.attr('editor_component'); - if (comp && jQuery.isFunction(openComponent)) { editorPrevNode = obj.get(0); openComponent(comp, seq); } }; - jQuery('img[editor_component],div[editor_component]', doc).each(function(){ + jQuery('img,div[editor_component]', doc).each(function(){ var obj = jQuery(this); - if (!obj.attr('xe_handled')) { - obj.attr('xe_handled', 'yes').dblclick(fn); - } + if(this.nodeName == 'IMG' && !obj.attr('editor_component')) obj.attr('editor_component','image_link') + if(!obj.attr('xeHandled')) { + obj.attr('xeHandled','YES'); + obj.dblclick(fn); + } }); }, $ON_MSG_APP_READY : function() { this.oApp.exec('REGISTER_UI_EVENT', ['extension', 'click', 'TOGGLE_EXTENSION_LAYER']); - - this.oApp.addConverter("WYSIWYG_TO_IR", this._removeAttrs); }, $ON_TOGGLE_EXTENSION_LAYER : function() { diff --git a/modules/editor/skins/xpresseditor/js/xe_interface.js b/modules/editor/skins/xpresseditor/js/xe_interface.js index f14cd1ec9..07948db08 100644 --- a/modules/editor/skins/xpresseditor/js/xe_interface.js +++ b/modules/editor/skins/xpresseditor/js/xe_interface.js @@ -54,10 +54,15 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height oEditor.getFrame = function(){ return oWYSIWYGIFrame;} var content = form[content_key].value; - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; //' - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; //' - content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); + + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|mms|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); + form[content_key].value = content; jQuery("#xpress-editor-"+editor_sequence).val(content); @@ -124,11 +129,11 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height oEditor.registerPlugin(new xe.XE_WYSIWYGEnterKey(oWYSIWYGIFrame)); } - // 자동 저장 사용? + // 자동 저장 사용 if (s=form._saved_doc_title) { oEditor.registerPlugin(new xe.XE_AutoSave(oIRTextarea, elAppContainer)); } - + function load_proc() { try { var doc = oWYSIWYGIFrame.contentWindow.document, str; @@ -170,17 +175,17 @@ function editorGetIframe(srl) { return jQuery('iframe#editor_iframe_'+srl).get(0); } -function editorReplaceHTML(iframe_obj, text) { - // 이미지 경로 재지정 (rewrite mod) - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//' - text = text.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - - // href 경로 재지정 (rewrite mod) - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//' - text = text.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); +function editorReplaceHTML(iframe_obj, content) { + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|mms|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); var srl = parseInt(iframe_obj.id.replace(/^.*_/,''),10); - editorRelKeys[srl]["pasteHTML"](text); + editorRelKeys[srl]["pasteHTML"](content); } // WYSIWYG 모드를 저장하는 확장기능 @@ -202,14 +207,33 @@ xe.XE_GET_WYSYWYG_CONTENT = jQuery.Class({ $ON_MSG_APP_READY : function() { this.oApp.addConverter("IR_TO_WYSIWYG", this.TO_WYSIWYG_SET); + this.oApp.addConverter("IR_TO_HTMLSrc", this.IR_TO_HTMLSrc); }, TO_WYSIWYG_SET : function(content) { - var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//' - var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//' - content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); - content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>)*/ig, function(m0,m1,m2,m3,m4,m5) { + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3).replace(/^\.\//,''); + if(/^(http|https|ftp|telnet|mms|\/|\.\.)/i.test(val)) return m0; + return m1+m2+request_uri+val+m4+m5; + }); + return content; + }, + + IR_TO_HTMLSrc : function(content) { + // src, href, url의 XE 상대경로를 http로 시작하는 full path로 변경 + content = content.replace(/(src=|href=|url\()("|\')*([^"\'\)]+)("|\'|\))*(\s|>|\))*/ig, function(m0,m1,m2,m3,m4,m5) { + var uriReg = new RegExp('^'+request_uri.replace('\/','\\/'),'ig'); + if(m1=="url(") { m2=''; m4=')'; } else { if(typeof(m2)=='undefined') m2 = '"'; if(typeof(m4)=='undefined') m4 = '"'; if(typeof(m5)=='undefined') m5 = ''; } + var val = jQuery.trim(m3); + if(uriReg.test(val)) val = val.replace(uriReg,''); + else val = m3; + return m1+m2+val+m4+m5; + }); + return content; + } }); diff --git a/modules/editor/skins/xpresseditor/skin.xml b/modules/editor/skins/xpresseditor/skin.xml index 399c5ac0b..5f3eae897 100644 --- a/modules/editor/skins/xpresseditor/skin.xml +++ b/modules/editor/skins/xpresseditor/skin.xml @@ -1,11 +1,11 @@ XpressEditor Skin - XpressEditor fckeditor + XpressEditor Skin XpressEditor Skin XpressEditorスキン XpressEditor皮肤 - XpressEditor面板 + XpressEditor面板  XpressEditor based on SmartEditor Basic by 행복한고니 diff --git a/modules/editor/skins/xquared/skin.xml b/modules/editor/skins/xquared/skin.xml index fd628d649..bd069f763 100644 --- a/modules/editor/skins/xquared/skin.xml +++ b/modules/editor/skins/xquared/skin.xml @@ -4,7 +4,7 @@ Xquared编辑器皮肤 XE Xquared Editor Skin XE Xquared Editor de la piel - XE Xquared Editor Skin + XE Xquaredエディタースキン XE Xquared Editor面板 오픈소스 에디터인 Xquared를 이용한 위지윅 에디터입니다. diff --git a/modules/editor/styles/default/editor.css b/modules/editor/styles/default/editor.css new file mode 100644 index 000000000..07c475249 --- /dev/null +++ b/modules/editor/styles/default/editor.css @@ -0,0 +1,21 @@ +@charset "utf-8"; +/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */ + +html, body { height:100%; background-color:transparent; padding:0; margin:0;} +.xe_content{ color:#000; font-size:12px;} + +.xe_content blockquote.q1, +.xe_content blockquote.q2, +.xe_content blockquote.q3, +.xe_content blockquote.q4, +.xe_content blockquote.q5, +.xe_content blockquote.q6, +.xe_content blockquote.q7{ padding:10px; margin:0 15px; } + +.xe_content blockquote.q1{ padding:0 10px; border-left:2px solid #ccc;} +.xe_content blockquote.q2{ padding:0 10px; background:url(./img/bg_qmark.gif) no-repeat left top;} +.xe_content blockquote.q3{ border:1px solid #d9d9d9;} +.xe_content blockquote.q4{ border:1px solid #d9d9d9; background:#fbfbfb;} +.xe_content blockquote.q5{ border:2px solid #707070;} +.xe_content blockquote.q6{ border:1px dashed #707070;} +.xe_content blockquote.q7{ border:1px dashed #707070; background:#fbfbfb;} diff --git a/modules/editor/styles/default/editor.html b/modules/editor/styles/default/editor.html new file mode 100755 index 000000000..f90b184c7 --- /dev/null +++ b/modules/editor/styles/default/editor.html @@ -0,0 +1,10 @@ + + + + + +XpressEngine + + + + diff --git a/modules/editor/styles/default/img/bg_qmark.gif b/modules/editor/styles/default/img/bg_qmark.gif new file mode 100644 index 000000000..5a8a44625 Binary files /dev/null and b/modules/editor/styles/default/img/bg_qmark.gif differ diff --git a/modules/editor/styles/default/skin.xml b/modules/editor/styles/default/skin.xml new file mode 100644 index 000000000..70aad283e --- /dev/null +++ b/modules/editor/styles/default/skin.xml @@ -0,0 +1,15 @@ + + + XE 기본 서식 + XEデフォルトスタイル + XE預設樣式 + + XE 기본 문서 서식입니다. + 있는 그대로 표시가 될 뿐 편집/ 출력시 아무런 영향을 끼치지 않습니다. + + 0.0.1 + 2009-05-23 + + 정찬명 + + diff --git a/modules/editor/styles/default/style.css b/modules/editor/styles/default/style.css new file mode 100755 index 000000000..9786899bf --- /dev/null +++ b/modules/editor/styles/default/style.css @@ -0,0 +1,20 @@ +@charset "utf-8"; +/* NHN > UIT Center > Open UI Technology Team > Jeong Chan Myeong(dece24@nhncorp.com) */ +/* xe_content */ +.xe_content{ color:#000; font-size:12px;} + +.xe_content blockquote.q1, +.xe_content blockquote.q2, +.xe_content blockquote.q3, +.xe_content blockquote.q4, +.xe_content blockquote.q5, +.xe_content blockquote.q6, +.xe_content blockquote.q7{ padding:10px; margin:0 15px; } + +.xe_content blockquote.q1{ padding:0 10px; border-left:2px solid #ccc;} +.xe_content blockquote.q2{ padding:0 10px; background:url(./img/bg_qmark.gif) no-repeat left top;} +.xe_content blockquote.q3{ border:1px solid #d9d9d9;} +.xe_content blockquote.q4{ border:1px solid #d9d9d9; background:#fbfbfb;} +.xe_content blockquote.q5{ border:2px solid #707070;} +.xe_content blockquote.q6{ border:1px dashed #707070;} +.xe_content blockquote.q7{ border:1px dashed #707070; background:#fbfbfb;} diff --git a/modules/editor/styles/default/style.ini b/modules/editor/styles/default/style.ini new file mode 100644 index 000000000..e8c7365cf --- /dev/null +++ b/modules/editor/styles/default/style.ini @@ -0,0 +1 @@ +style.css diff --git a/modules/editor/styles/xeStyle/skin.xml b/modules/editor/styles/xeStyle/skin.xml index 4451ac6d4..460b34343 100644 --- a/modules/editor/styles/xeStyle/skin.xml +++ b/modules/editor/styles/xeStyle/skin.xml @@ -1,13 +1,25 @@ XE 기본 서식 (하얀 배경) + XEデフォルトスタイル(白色背景) + XE預設樣式(白色背景) XE 기본 문서 서식입니다. 문서 수정중에는 각 요소들이 구분되어 보입니다. + + XEのデフォルトドキュメントのスタイルです。 + ドキュメント編集中には、各要素が区分されて見えます。 + + + XE編輯器預設樣式。 + 문서 수정중에는 각 요소들이 구분되어 보입니다. + 0.0.1 2009-04-17 정찬명 + Chan-Myung Jeong + Chan-Myung Jeong diff --git a/modules/editor/styles/xeStyleBlack/skin.xml b/modules/editor/styles/xeStyleBlack/skin.xml index 7ae4cfd85..6e7aa8878 100644 --- a/modules/editor/styles/xeStyleBlack/skin.xml +++ b/modules/editor/styles/xeStyleBlack/skin.xml @@ -1,13 +1,25 @@ - - - XE 기본 서식 (검은 배경) - - XE 기본 문서 서식입니다. - 문서 수정중에는 각 요소들이 구분되어 보입니다. - - 0.0.1 - 2009-04-17 - - 정찬명 - - + + + XE 기본 서식 (검은 배경) + XEデフォルトスタイル(黑色背景) + XE預設樣式(黑色背景) + + XE 기본 문서 서식입니다. + 문서 수정중에는 각 요소들이 구분되어 보입니다. + + + XEのデフォルトドキュメントのスタイルです。 + ドキュメント編集中には、各要素が区分されて見えます。 + + + XE編輯器預設樣式。 + 문서 수정중에는 각 요소들이 구분되어 보입니다. + + 0.0.1 + 2009-04-17 + + 정찬명 + Chan-Myung Jeong + Chan-Myung Jeong + + diff --git a/modules/editor/tpl/js/editor_common.js b/modules/editor/tpl/js/editor_common.js index f7cc11bfb..742b12dc6 100644 --- a/modules/editor/tpl/js/editor_common.js +++ b/modules/editor/tpl/js/editor_common.js @@ -31,12 +31,12 @@ function editorFocus(editor_sequence) { /** * 자동 저장 기능 **/ -// 자동 저장 활성화 시키는 함수 (10초마다 자동저장) +// 자동 저장 활성화 시키는 함수 (50초마다 자동저장) function editorEnableAutoSave(fo_obj, editor_sequence) { var title = fo_obj.title.value; var content = editorRelKeys[editor_sequence]['content'].value; editorAutoSaveObj = {"fo_obj":fo_obj, "editor_sequence":editor_sequence, "title":title, "content":content, locked:false}; - setTimeout(_editorAutoSave, 10000); + setTimeout(_editorAutoSave, 50000); } // ajax를 이용하여 editor.procEditorSaveDoc 호출하여 자동 저장시킴 @@ -80,8 +80,8 @@ function _editorAutoSave() { show_waiting_message = true; } - // 10초마다 동기화를 시킴 - setTimeout(_editorAutoSave, 10000); + // 50초마다 동기화를 시킴 + setTimeout(_editorAutoSave, 50000); } // 자동저장된 모든 메세지를 삭제하는 루틴 diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index e832b2ddc..38e9b3eb8 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -264,6 +264,7 @@ function completeReloadFileList(ret_obj, response_tags, settings) { uploadedFiles[file_srl] = item[i]; var opt = new Option(item[i].source_filename+" ("+item[i].disp_file_size+")", file_srl, true, true); listObj.options[listObj.options.length] = opt; + item[i].download_url = encodeURI(item[i].download_url); if(/\.(jpg|jpeg|png|gif)$/i.test(item[i].download_url)) { var loadingImage = new Image(); loadingImage.src = item[i].download_url; diff --git a/modules/editor/tpl/popup.html b/modules/editor/tpl/popup.html index 0354d1709..e1e981475 100644 --- a/modules/editor/tpl/popup.html +++ b/modules/editor/tpl/popup.html @@ -1 +1,3 @@ +
    {$popup_content} +
    diff --git a/modules/file/conf/module.xml b/modules/file/conf/module.xml index 27040180c..c382cebb2 100644 --- a/modules/file/conf/module.xml +++ b/modules/file/conf/module.xml @@ -9,6 +9,7 @@ + diff --git a/modules/file/file.admin.view.php b/modules/file/file.admin.view.php index a9a0d1434..dda117914 100644 --- a/modules/file/file.admin.view.php +++ b/modules/file/file.admin.view.php @@ -31,51 +31,137 @@ $output = $oFileModel->getFileList($args); // 목록의 loop를 돌면서 document를 구하기 - if($file_count) { - $document_srl_list = array(); + if($output->data) { + $oCommentModel = &getModel('comment'); + $oDocumentModel = &getModel('document'); + $oModuleModel = &getModel('module'); - foreach($output->data as $val) { - if(!in_array($val->upload_target_srl, $document_srl_list)) $document_srl_list[] = $val->upload_target_srl; - } + $file_list = array(); + $document_list = array(); + $comment_list = array(); + $module_list= array(); - // comment의 첨부파일이면 document_srl을 추가로 구함 - if($document_srl_list) { - $oCommentModel = &getModel('comment'); - $comment_output = $oCommentModel->getComments($document_srl_list); + $doc_srls = array(); + $com_srls = array(); + $mod_srls= array(); - if($comment_output) { - foreach($comment_output as $val) { - $comment_list[$val->comment_srl] = $val->document_srl; + foreach($output->data as $file) { + $file_srl = $file->file_srl; + $target_srl = $file->upload_target_srl; + $file_update_args = null; + $file_update_args->file_srl = $file_srl; + + // upload_target_type이 없으면 찾아서 업데이트 + if(!$file->upload_target_type) { + // 찾아둔게 있으면 패스 + if($document_list[$target_srl]) { + $file->upload_target_type = 'doc'; + } else if($comment_list[$target_srl]) { + $file->upload_target_type = 'com'; + } else if($module_list[$target_srl]) { + $file->upload_target_type = 'mod'; + } else { + // document + $document = $oDocumentModel->getDocument($target_srl); + if($document->isExists()) { + $file->upload_target_type = 'doc'; + $file_update_args->upload_target_type = $file->upload_target_type; + $document_list[$target_srl] = $document; + } + // comment + if(!$file->upload_target_type) { + $comment = $oCommentModel->getComment($target_srl); + if($comment->isExists()) { + $file->upload_target_type = 'com'; + $file->target_document_srl = $comment->document_srl; + $file_update_args->upload_target_type = $file->upload_target_type; + $comment_list[$target_srl] = $comment; + $doc_srls[] = $comment->document_srl; + } + } + // module (페이지인 경우) + if(!$file->upload_target_type) { + $module = $oModuleModel->getModulesInfo($target_srl); + if($module) { + $file->upload_target_type = 'mod'; + $file_update_args->upload_target_type = $file->upload_target_type; + $module_list[$module->comment_srl] = $module; + } + } + if($file_update_args->upload_target_type) { + executeQuery('file.updateFile', $file_update_args); + } } - $file_list_keys = array_keys($output->data); - for($i=0; $i < $file_count; $i++) { - $output->data[$file_list_keys[$i]]->target_document_srl = $comment_list[$output->data[$file_list_keys[$i]]->upload_target_srl]; + // 이미 구해진 데이터가 있는 확인 + for($i = 0; $i < $com_srls_count; ++$i) { + if($comment_list[$com_srls[$i]]) delete($com_srls[$i]); } - - foreach($comment_output as $val) { - if(!in_array($val->document_srl, $document_srl_list)) $document_srl_list[] = $val->document_srl; + for($i = 0; $i < $doc_srls_count; ++$i) { + if($document_list[$doc_srls[$i]]) delete($doc_srls[$i]); + } + for($i = 0; $i < $mod_srls_count; ++$i) { + if($module_list[$mod_srls[$i]]) delete($mod_srls[$i]); } } - $args->document_srls = implode(',', $document_srl_list); - $document_output = executeQueryArray('document.getDocuments', $args); - - if($document_output->data) { - foreach($document_output->data as $document) { - $document_list[$document->document_srl] = $document; + if($file->upload_target_type) { + if(!in_array($file->upload_target_srl, ${$file->upload_target_type.'_srls'})) { + ${$file->upload_target_type.'_srls'}[] = $target_srl; } } + + $file_list[$file_srl] = $file; + $mod_srls[] = $file->module_srl; + } + + // 중복 제거 + $doc_srls = array_unique($doc_srls); + $com_srls = array_unique($com_srls); + $mod_srls = array_unique($mod_srls); + + // 댓글 목록 + $com_srls_count = count($com_srls); + if($com_srls_count) { + $comment_output = $oCommentModel->getComments($com_srls); + foreach($comment_output as $comment) { + $comment_list[$comment->comment_srl] = $comment; + $doc_srls[] = $comment->document_srl; + } } + // 문서 목록 + $doc_srls_count = count($doc_srls); + if($doc_srls_count) { + $document_output = $oDocumentModel->getDocuments($doc_srls); + foreach($document_output as $document) { + $document_list[$document->document_srl] = $document; + } + } + + // 모듈 목록 + $mod_srls_count = count($mod_srls); + if($mod_srls_count) { + $module_output = $oModuleModel->getModulesInfo($mod_srls); + foreach($module_output as $module) { + $module_list[$module->module_srl] = $module; + } + } + + foreach($file_list as $srl => $file) { + if($file->upload_target_type == 'com') { + $file_list[$srl]->target_document_srl = $comment_list[$file->upload_target_srl]->document_srl; + } + } } - + Context::set('file_list', $file_list); + Context::set('document_list', $document_list); + Context::set('comment_list', $comment_list); + Context::set('module_list', $module_list); Context::set('total_count', $output->total_count); Context::set('total_page', $output->total_page); Context::set('page', $output->page); - Context::set('file_list', $output->data); Context::set('page_navigation', $output->page_navigation); - Context::set('document_list', $document_list); // 템플릿 지정 $this->setTemplatePath($this->module_path.'tpl'); diff --git a/modules/file/file.class.php b/modules/file/file.class.php index 5e861aaec..9f09bfc2f 100644 --- a/modules/file/file.class.php +++ b/modules/file/file.class.php @@ -13,7 +13,7 @@ function moduleInstall() { // action forward에 등록 (관리자 모드에서 사용하기 위함) $oModuleController = &getController('module'); - + // 첨부파일의 기본 설정 저장 $config->allowed_filesize = '2'; $config->allowed_attach_size = '2'; @@ -49,6 +49,7 @@ * @brief 설치가 이상이 없는지 체크하는 method **/ function checkUpdate() { + $oDB = &DB::getInstance(); $oModuleModel = &getModel('module'); // 2007. 10. 17 글/댓글의 입력/수정/삭제에 대한 trigger 등록 @@ -69,6 +70,9 @@ // 2007. 10. 19 출력하기 전에 file 권한등을 세팅하는 트리거 호출 if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'file', 'view', 'triggerDispFileAdditionSetup', 'before')) return true; + // 타겟 판별용 필드 + if(!$oDB->isColumnExists('files', 'upload_target_type')) return true; + return false; } @@ -76,48 +80,52 @@ * @brief 업데이트 실행 **/ function moduleUpdate() { + $oDB = &DB::getInstance(); $oModuleModel = &getModel('module'); $oModuleController = &getController('module'); // 2007. 10. 17 글/댓글의 입력/수정/삭제에 대한 trigger 등록 - if(!$oModuleModel->getTrigger('document.insertDocument', 'file', 'controller', 'triggerCheckAttached', 'before')) + if(!$oModuleModel->getTrigger('document.insertDocument', 'file', 'controller', 'triggerCheckAttached', 'before')) $oModuleController->insertTrigger('document.insertDocument', 'file', 'controller', 'triggerCheckAttached', 'before'); - if(!$oModuleModel->getTrigger('document.insertDocument', 'file', 'controller', 'triggerAttachFiles', 'after')) + if(!$oModuleModel->getTrigger('document.insertDocument', 'file', 'controller', 'triggerAttachFiles', 'after')) $oModuleController->insertTrigger('document.insertDocument', 'file', 'controller', 'triggerAttachFiles', 'after'); - - if(!$oModuleModel->getTrigger('document.updateDocument', 'file', 'controller', 'triggerCheckAttached', 'before')) + + if(!$oModuleModel->getTrigger('document.updateDocument', 'file', 'controller', 'triggerCheckAttached', 'before')) $oModuleController->insertTrigger('document.updateDocument', 'file', 'controller', 'triggerCheckAttached', 'before'); - if(!$oModuleModel->getTrigger('document.updateDocument', 'file', 'controller', 'triggerAttachFiles', 'after')) + if(!$oModuleModel->getTrigger('document.updateDocument', 'file', 'controller', 'triggerAttachFiles', 'after')) $oModuleController->insertTrigger('document.updateDocument', 'file', 'controller', 'triggerAttachFiles', 'after'); - if(!$oModuleModel->getTrigger('document.deleteDocument', 'file', 'controller', 'triggerDeleteAttached', 'after')) + if(!$oModuleModel->getTrigger('document.deleteDocument', 'file', 'controller', 'triggerDeleteAttached', 'after')) $oModuleController->insertTrigger('document.deleteDocument', 'file', 'controller', 'triggerDeleteAttached', 'after'); - if(!$oModuleModel->getTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) + if(!$oModuleModel->getTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) $oModuleController->insertTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before'); - if(!$oModuleModel->getTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) + if(!$oModuleModel->getTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) $oModuleController->insertTrigger('comment.insertComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after'); - - if(!$oModuleModel->getTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) + + if(!$oModuleModel->getTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before')) $oModuleController->insertTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentCheckAttached', 'before'); - if(!$oModuleModel->getTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) + if(!$oModuleModel->getTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after')) $oModuleController->insertTrigger('comment.updateComment', 'file', 'controller', 'triggerCommentAttachFiles', 'after'); - if(!$oModuleModel->getTrigger('comment.deleteComment', 'file', 'controller', 'triggerCommentDeleteAttached', 'after')) + if(!$oModuleModel->getTrigger('comment.deleteComment', 'file', 'controller', 'triggerCommentDeleteAttached', 'after')) $oModuleController->insertTrigger('comment.deleteComment', 'file', 'controller', 'triggerCommentDeleteAttached', 'after'); // 2007. 10. 17 모듈이 삭제될때 등록된 첨부파일도 모두 삭제하는 트리거 추가 - if(!$oModuleModel->getTrigger('module.deleteModule', 'file', 'controller', 'triggerDeleteModuleFiles', 'after')) + if(!$oModuleModel->getTrigger('module.deleteModule', 'file', 'controller', 'triggerDeleteModuleFiles', 'after')) $oModuleController->insertTrigger('module.deleteModule', 'file', 'controller', 'triggerDeleteModuleFiles', 'after'); // 2007. 10. 19 출력하기 전에 file 권한등을 세팅하는 트리거 호출 - if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'file', 'view', 'triggerDispFileAdditionSetup', 'before')) + if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'file', 'view', 'triggerDispFileAdditionSetup', 'before')) $oModuleController->insertTrigger('module.dispAdditionSetup', 'file', 'view', 'triggerDispFileAdditionSetup', 'before'); + // 타겟 판별용 필드 + if(!$oDB->isColumnExists('files', 'upload_target_type')) $oDB->addColumn('files', 'upload_target_type', 'char', '3'); + return new Object(0, 'success_updated'); } diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php index ce3dee0e4..f32218de1 100644 --- a/modules/file/file.controller.php +++ b/modules/file/file.controller.php @@ -39,6 +39,38 @@ return $this->insertFile($file_info, $module_srl, $upload_target_srl); } + + /** + * @brief iframe 첨부파일 업로드 + **/ + function procFileIframeUpload() { + // 기본적으로 필요한 변수 설정 + $editor_sequence = Context::get('editor_sequence'); + $callback = Context::get('callback'); + $module_srl = $this->module_srl; + // 업로드 권한이 없거나 정보가 없을시 종료 + //if(!$_SESSION['upload_info'][$editor_sequence]->enabled) exit(); + + // upload_target_srl 구함 + $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; + if(!$upload_target_srl) { + $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = getNextSequence(); + } + + $file_info = Context::get('Filedata'); + // 정상적으로 업로드된 파일이 아니면 오류 출력 + if(is_uploaded_file($file_info['tmp_name'])){ + $output = $this->insertFile($file_info, $module_srl, $upload_target_srl); + Context::set('uploaded_fileinfo',$output); + } + + $this->setTemplatePath($this->module_path.'tpl'); + $this->setTemplateFile('iframe'); + + } + + + /** * @brief 첨부파일 다운로드 * 직접 요청을 받음 @@ -46,18 +78,25 @@ * sid : db에 저장된 비교 값, 틀리면 다운로드 하지 않음 **/ function procFileDownload() { + $oFileModel = &getModel('file'); + $file_srl = Context::get('file_srl'); $sid = Context::get('sid'); + $logged_info = Context::get('logged_info'); // 파일의 정보를 DB에서 받아옴 - $oFileModel = &getModel('file'); $file_obj = $oFileModel->getFile($file_srl); - if($file_obj->file_srl!=$file_srl || $file_obj->sid!=$sid || $file_obj->isvalid!='Y') return $this->stop('msg_not_permitted_download'); + + // 요청된 파일 정보가 잘못되었다면 파일을 찾을 수 없다는 오류 출력 + if($file_obj->file_srl!=$file_srl || $file_obj->sid!=$sid) return $this->stop('msg_file_not_found'); + + // 대기 상태일 경우 파일 다운로드 권한이 없음을 알림 (최고관리자는 다운 로드 허용) + if($logged_info->is_admin != 'Y' && $file_obj->isvalid!='Y') return $this->stop('msg_not_permitted_download'); // 파일 이름 $filename = $file_obj->source_filename; - $file_module_config = $oFileModel->getFileModuleConfig($file_obj->module_srl); + // 파일 외부링크 차단 if($file_module_config->allow_outlink == 'N') { //외부링크 허용 확장자 처리 @@ -96,6 +135,7 @@ } if($file_module_config->allow_outlink != 'Y') return $this->stop('msg_not_permitted_download'); } + // 파일 다운로드 권한이 있는지 확인 if(is_array($file_module_config->download_grant) && count($file_module_config->download_grant)>0) { if(!Context::get('is_logged')) return $this->stop('msg_not_permitted_download'); @@ -124,10 +164,10 @@ } $uploaded_filename = $file_obj->uploaded_filename; - if(!file_exists($uploaded_filename)) return $this->stop('msg_not_permitted_download'); + if(!file_exists($uploaded_filename)) return $this->stop('msg_file_not_found'); $fp = fopen($uploaded_filename, 'rb'); - if(!$fp) return $this->stop('msg_not_permitted_download'); + if(!$fp) return $this->stop('msg_file_not_found'); header("Cache-Control: "); header("Pragma: "); diff --git a/modules/file/lang/en.lang.php b/modules/file/lang/en.lang.php index bc9bacdf3..8207ae6ca 100644 --- a/modules/file/lang/en.lang.php +++ b/modules/file/lang/en.lang.php @@ -36,6 +36,7 @@ $lang->msg_cart_is_null = 'Please select file(s) to delete'; $lang->msg_checked_file_is_deleted = '%d attachment(s) was(were) deleted'; $lang->msg_exceeds_limit_size = 'File size of attachment is bigger than allowed size.'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( diff --git a/modules/file/lang/es.lang.php b/modules/file/lang/es.lang.php index e2a53d881..ba138dd7b 100644 --- a/modules/file/lang/es.lang.php +++ b/modules/file/lang/es.lang.php @@ -34,6 +34,7 @@ $lang->msg_cart_is_null = 'Seleccione el archivo a eliminar'; $lang->msg_checked_file_is_deleted = 'Total de %d archivos eliminados'; $lang->msg_exceeds_limit_size = 'Ha excedido el límite del tamaño total de los archivos adjuntos'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => 'Nombre del archivo', diff --git a/modules/file/lang/fr.lang.php b/modules/file/lang/fr.lang.php index a46b87351..32429b2a2 100644 --- a/modules/file/lang/fr.lang.php +++ b/modules/file/lang/fr.lang.php @@ -34,6 +34,7 @@ $lang->msg_cart_is_null = 'Choisissez un(des) fichier(s) a supprimer'; $lang->msg_checked_file_is_deleted = '%d Annexe(s) est(sont) supprime(s)'; $lang->msg_exceeds_limit_size = 'La mesure de l\'(des) Annexe(s) est plus grande que celle consentie.'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => 'Nom de Fichier', diff --git a/modules/file/lang/jp.lang.php b/modules/file/lang/jp.lang.php index 5dbfa99c6..8879bdb10 100644 --- a/modules/file/lang/jp.lang.php +++ b/modules/file/lang/jp.lang.php @@ -36,6 +36,7 @@ $lang->msg_cart_is_null = '削除するファイルを選択して下さい'; $lang->msg_checked_file_is_deleted = '%d個の添付ファイルを削除しました'; $lang->msg_exceeds_limit_size = 'ファイルサイズの制限を超えたため、添付出来ません。'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => 'ファイル名', diff --git a/modules/file/lang/ko.lang.php b/modules/file/lang/ko.lang.php index 12eaf6c4e..c41c68d40 100644 --- a/modules/file/lang/ko.lang.php +++ b/modules/file/lang/ko.lang.php @@ -36,6 +36,7 @@ $lang->msg_cart_is_null = '삭제할 파일을 선택해주세요'; $lang->msg_checked_file_is_deleted = '%d개의 첨부파일이 삭제되었습니다'; $lang->msg_exceeds_limit_size = '허용된 용량을 초과하여 첨부가 되지 않았습니다'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => '파일이름', diff --git a/modules/file/lang/ru.lang.php b/modules/file/lang/ru.lang.php index 0067eb2b3..63dbb6813 100644 --- a/modules/file/lang/ru.lang.php +++ b/modules/file/lang/ru.lang.php @@ -34,6 +34,7 @@ $lang->msg_cart_is_null = 'Выберите файл, который Вы хотите удалить'; $lang->msg_checked_file_is_deleted = 'Всего %d вложений было удалено'; $lang->msg_exceeds_limit_size = 'Вложение провалено: превышен лимит размера файлов'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => 'Имя файла', diff --git a/modules/file/lang/zh-CN.lang.php b/modules/file/lang/zh-CN.lang.php index 2954efbc3..a4f5bea39 100644 --- a/modules/file/lang/zh-CN.lang.php +++ b/modules/file/lang/zh-CN.lang.php @@ -34,6 +34,7 @@ $lang->msg_cart_is_null = ' 请选择要删除的文件。'; $lang->msg_checked_file_is_deleted = '已删除%d个文件!'; $lang->msg_exceeds_limit_size = '已超过系统指定的上传文件大小!'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => '文件名', diff --git a/modules/file/lang/zh-TW.lang.php b/modules/file/lang/zh-TW.lang.php index 248658c57..2e7fd4aa9 100644 --- a/modules/file/lang/zh-TW.lang.php +++ b/modules/file/lang/zh-TW.lang.php @@ -36,6 +36,7 @@ $lang->msg_cart_is_null = ' 請選擇要刪除的檔案。'; $lang->msg_checked_file_is_deleted = '已刪除%d個檔案!'; $lang->msg_exceeds_limit_size = '已超過系統指定的檔案大小!'; + $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; $lang->file_search_target_list = array( 'filename' => '檔案名稱', diff --git a/modules/file/queries/updateFile.xml b/modules/file/queries/updateFile.xml index a52a3cad5..18966c373 100644 --- a/modules/file/queries/updateFile.xml +++ b/modules/file/queries/updateFile.xml @@ -4,6 +4,7 @@
    + diff --git a/modules/file/schemas/files.xml b/modules/file/schemas/files.xml index 252b8931f..7c07b6da7 100644 --- a/modules/file/schemas/files.xml +++ b/modules/file/schemas/files.xml @@ -1,6 +1,7 @@ + diff --git a/modules/file/tpl/file_list.html b/modules/file/tpl/file_list.html index 702d4cc38..e5acc27fa 100644 --- a/modules/file/tpl/file_list.html +++ b/modules/file/tpl/file_list.html @@ -51,44 +51,61 @@ + - - {@ $document_srl = $val->target_document_srl} + + {@ $document_srl = $val->target_document_srl} {@ $move_uri = getUrl('', 'document_srl', $document_srl).'#comment_'.$val->upload_target_srl} - - {@ $document_srl = $val->upload_target_srl} + + {@ $document_srl = $val->upload_target_srl} {@ $move_uri = getUrl('', 'document_srl', $document_srl)} {@ $cur_upload_target_srl = $val->upload_target_srl} - - - - - + + + + + + {$lang->is_valid} - + {$lang->is_stand_by} - - - + + + + + diff --git a/modules/file/tpl/iframe.html b/modules/file/tpl/iframe.html new file mode 100644 index 000000000..c7ce135a5 --- /dev/null +++ b/modules/file/tpl/iframe.html @@ -0,0 +1,22 @@ + diff --git a/modules/homepage/conf/info.xml b/modules/homepage/conf/info.xml index 83d0b703f..9f9582236 100644 --- a/modules/homepage/conf/info.xml +++ b/modules/homepage/conf/info.xml @@ -11,7 +11,7 @@ XE 내에서 Cafe를 분양하고 관리할 수 있는 기능을 제공합니다提供一种在XE内迅速建立子站点的功能。提供XE運作及管理虛擬網站的功能。 - Cafeを運営・管理する機能を提供します。 + XEソリューションでCafeを運営・管理する機能を提供します。0.22009-02-11package diff --git a/modules/homepage/homepage.smartphone.php b/modules/homepage/homepage.smartphone.php new file mode 100644 index 000000000..045bdd983 --- /dev/null +++ b/modules/homepage/homepage.smartphone.php @@ -0,0 +1,16 @@ +compile($this->module_path.'tpl', 'smartphone'); + $oSmartPhone->setContent($content); + } + } +?> diff --git a/modules/homepage/lang/jp.lang.php b/modules/homepage/lang/jp.lang.php index 4b283c2c3..ab4d536a5 100644 --- a/modules/homepage/lang/jp.lang.php +++ b/modules/homepage/lang/jp.lang.php @@ -1,61 +1,61 @@ cafe = "CafeXE"; - $lang->cafe_id = "カフェへのアクセスID"; - $lang->cafe_title = "ホームページ名"; - $lang->cafe_description = 'カフェの説明'; - $lang->cafe_banner = 'カフェのバナーイメージ'; + $lang->cafe_id = "CafeへのアクセスID"; + $lang->cafe_title = "Cafe名"; + $lang->cafe_description = 'Cafeの説明'; + $lang->cafe_banner = 'Cafeのバナーイメージ'; $lang->module_type = "タイプ"; $lang->board = "掲示板"; $lang->page = "ページ"; $lang->module_id = "モジュール ID"; $lang->item_group_grant = "メニューを公開するグループ"; - $lang->cafe_info = "カフェの情報"; - $lang->cafe_admin = "カフェ管理者"; + $lang->cafe_info = "Cafeの情報"; + $lang->cafe_admin = "Cafe管理者"; $lang->do_selected_member = "選択した会員を : "; - $lang->cafe_latest_documents = 'カフェの新規書き込み'; - $lang->cafe_latest_comments = 'カフェの新規コメント'; - $lang->mycafe_list = '登録したカフェ'; - $lang->cafe_creation_type = 'カフェアクセス方法'; - $lang->about_cafe_creation_type = '作成するカフェへのユーザーからのアクセス方法を定めてください。Site IDとは http://ドメイン/IDへアクセスが可能になり、ドメインアクセスとは登録したサブドメイン(http://domain.mydomain.net)にカフェが作成されます。'; - $lang->cafe_main_layout = 'カフェトップページのレイアウト'; + $lang->cafe_latest_documents = 'Cafeの新規書き込み'; + $lang->cafe_latest_comments = 'Cafeの新規コメント'; + $lang->mycafe_list = '登録したCafe'; + $lang->cafe_creation_type = 'Cafeアクセス方法'; + $lang->about_cafe_creation_type = '作成するCafeへのユーザーからのアクセス方法を定めてください。Site IDとは「http://ドメイン/ID」へアクセスが可能になり、ドメインアクセスとは登録したサブドメイン( http://domain.mydomain.net )にCafeが作成されます。'; + $lang->cafe_main_layout = 'Cafeトップページのレイアウト'; $lang->default_layout = 'デフォルトレイアウト'; - $lang->about_default_layout = 'カフェを作成する時のデフォルトレイアウトを指定します。'; + $lang->about_default_layout = 'Cafeを作成する時のデフォルトレイアウトを指定します。'; $lang->enable_change_layout = 'レイアウト変更'; - $lang->about_change_layout = '選択すると、個々のカフェにてレイアウト変更が可能になります。'; + $lang->about_change_layout = '選択すると、個々のCafeにてレイアウト変更が可能になります。'; $lang->allow_service = '許可サービス'; - $lang->about_allow_service = '個々のカフェで利用する基本サービスを設定します。'; + $lang->about_allow_service = '個々のCafeで利用する基本サービスを設定します。'; - $lang->cmd_make_cafe = 'カフェ作成'; + $lang->cmd_make_cafe = 'Cafe作成'; $lang->cmd_import = 'インポート'; $lang->cmd_export = 'エクスポート'; - $lang->cafe_creation_privilege = 'カフェの作成権限'; + $lang->cafe_creation_privilege = 'Cafeの作成権限'; - $lang->cafe_main_mid = 'カフェメインID'; - $lang->about_cafe_main_mid = 'カフェのトップページを「http://ドメイン/ID」のように設定するためのID値を入力して下さい。'; + $lang->cafe_main_mid = 'CafeメインID'; + $lang->about_cafe_main_mid = 'Cafeのトップページを「http://ドメイン/ID」のように設定するためのID値を入力して下さい。'; $lang->default_menus = array( 'home' => 'ホーム', 'notice' => 'お知らせ', 'levelup' => 'レベルアップ', 'freeboard' => '自由掲示板', - 'view_total' => '全文を表示', - 'view_comment' => '一行の物語', - 'cafe_album' => 'フォトギャラリー', + 'view_total' => '最新書き込み', + 'view_comment' => '最新コメント', + 'cafe_album' => '最新フォト', 'menu' => 'メニュー', - 'default_group1' => 'スタンバイ会員', + 'default_group1' => '承認待ち会員', 'default_group2' => '準会員', 'default_group3' => '正会員', ); $lang->cmd_admin_menus = array( - "dispHomepageManage" => "カフェ設定", + "dispHomepageManage" => "Cafe設定", "dispHomepageMemberGroupManage" => "会員のグループ管理", "dispHomepageMemberManage" => "会員リスト", "dispHomepageTopMenu" => "基本メニュー 管理", @@ -63,11 +63,11 @@ "dispHomepageCounter" => "アクセス集計", "dispHomepageMidSetup" => "モジュール詳細設定", ); - $lang->cmd_cafe_registration = "カフェ作成"; - $lang->cmd_cafe_setup = "カフェ設定"; - $lang->cmd_cafe_delete = "カフェ削除"; + $lang->cmd_cafe_registration = "Cafe作成"; + $lang->cmd_cafe_setup = "Cafe設定"; + $lang->cmd_cafe_delete = "Cafe削除"; $lang->cmd_go_home = "ホームへ移動"; - $lang->cmd_go_cafe_admin = 'カフェ全体管理'; + $lang->cmd_go_cafe_admin = 'Cafe全体管理'; $lang->cmd_change_layout = "変更"; $lang->cmd_select_index = "初期ページ選択"; $lang->cmd_add_new_menu = "新しいメニュー追加"; @@ -75,17 +75,17 @@ $lang->about_default_language = "初めてアクセスするユーザーに見せるページの言語を指定します。"; $lang->about_cafe_act = array( - "dispHomepageManage" => "カフェのレイアウトを変更します。", - "dispHomepageMemberGroupManage" => "カフェ内のグループを管理します。", - "dispHomepageMemberManage" => "カフェに登録されている会員を管理します。", - "dispHomepageTopMenu" => "カフェのヘッダー(header、上段)や左側などのメニューを管理します。", + "dispHomepageManage" => "Cafeのレイアウトを変更します。", + "dispHomepageMemberGroupManage" => "Cafe内のグループを管理します。", + "dispHomepageMemberManage" => "Cafeに登録されている会員を管理します。", + "dispHomepageTopMenu" => "Cafeのヘッダー(header、上段)や左側などのメニューを管理します。", "dispHomepageComponent" => "エディターのコンポーネント/アドオンをオンにしたら、設定を変更します。", - "dispHomepageCounter" => "カフェへのアクセス状況を確認できます。", - "dispHomepageMidSetup" => "カフェの掲示板、ページなどのモジュールを管理します。", + "dispHomepageCounter" => "Cafeへのアクセス状況を確認できます。", + "dispHomepageMidSetup" => "Cafeの掲示板、ページなどのモジュールを管理します。", ); - $lang->about_cafe = "カフェサービス管理者は複数のカフェ作成、および各カフェを簡単に管理が出来ます。"; - $lang->about_cafe_title = "カフェ名は管理をするためだけに使われ、実サービスには表示されません。"; - $lang->about_menu_names = "カフェに使うメニュー名を言語別に指定出来ます。
    一個だけ記入した場合、他言語に一括適用されます。"; + $lang->about_cafe = "Cafeサービス管理者は複数のCafe作成、および各Cafeを簡単に管理が出来ます。"; + $lang->about_cafe_title = "Cafe名は管理をするためだけに使われ、実サービスには表示されません。"; + $lang->about_menu_names = "Cafeに使うメニュー名を言語別に指定出来ます。
    一個だけ記入した場合、他言語に一括適用されます。"; $lang->about_menu_option = "メニューを選択するとき新しいウィンドウズに開けるかを選択します。
    拡張メニューはレイアウトによって動作します。"; $lang->about_group_grant = "選択グループのみ、メニューが見えます。
    全てを解除すると非会員にも見えます。"; $lang->about_module_type = "掲示板、ページはモジュールを生成し、URLはリンクの情報のみ要ります。
    一度作成した後、変更は出来ません。"; @@ -93,8 +93,8 @@ $lang->about_module_id = "掲示板、ページなどにリンクさせるアドレスです。
    例) http://ドメイン/[モジュールID], http://ドメイン/?mid=[モジュールID]"; $lang->about_menu_item_url = "タイプをURLにした場合、リンク先を入れて下さい。
    http://は省いて入力して下さい。"; $lang->about_menu_image_button = "テキストのメニュー名の代わりに、イメージのメニューを使えます。"; - $lang->about_cafe_delete = "カフェを削除すると、リンクされている全てのモジュール(掲示板、ページなど)とそれに付随する書き込みが削除されます。
    ご注意下さい。"; - $lang->about_cafe_admin = "カフェ管理者の設定が出来ます。
    カフェ管理者は「http://ドメイン/?act=dispHomepageManage」にて管理者ページにアクセスが出来ます。
    存在しない会員は管理者として登録出来ません。"; + $lang->about_cafe_delete = "Cafeを削除すると、リンクされている全てのモジュール(掲示板、ページなど)とそれに付随する書き込みが削除されます。
    ご注意下さい。"; + $lang->about_cafe_admin = "Cafe管理者の設定が出来ます。
    Cafe管理者は「http://ドメイン/?act=dispHomepageManage」にて管理者ページにアクセスが出来ます。
    存在しない会員は管理者として登録出来ません。"; $lang->confirm_change_layout = "レイアウトの変更時、一部のレイアウト情報が失われる可能性があります。 変更しますか?"; $lang->confirm_delete_menu_item = "メニューの削除時、リンクされている掲示板やページモジュールも一緒に削除されます。削除しますか?"; diff --git a/modules/homepage/lang/ko.lang.php b/modules/homepage/lang/ko.lang.php index f3699115c..970851d9b 100644 --- a/modules/homepage/lang/ko.lang.php +++ b/modules/homepage/lang/ko.lang.php @@ -1,6 +1,6 @@ cafe = "虛擬網站"; - $lang->cafe_id = "카페 접속 ID"; + $lang->cafe_id = "網站 ID"; $lang->cafe_title = "網站名稱"; - $lang->cafe_description = 'Description of cafe'; - $lang->cafe_banner = 'Banner of Cafe'; + $lang->cafe_description = '網站說明'; + $lang->cafe_banner = '網站廣告'; $lang->module_type = "目標"; $lang->board = "討論板"; $lang->page = "頁面"; @@ -18,35 +18,35 @@ $lang->cafe_info = "網站資訊"; $lang->cafe_admin = "網站管理者"; $lang->do_selected_member = "選擇會員 : "; - $lang->cafe_latest_documents = '카페 최신 글'; - $lang->cafe_latest_comments = '카페 최신 댓글'; - $lang->mycafe_list = '가입한 카페'; - $lang->cafe_creation_type = '카페 접속 방법'; - $lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다'; - $lang->cafe_main_layout = '카페 메인 레이아웃'; + $lang->cafe_latest_documents = '最新主題'; + $lang->cafe_latest_comments = '最新評論'; + $lang->mycafe_list = '加入的網站'; + $lang->cafe_creation_type = '網站類型'; + $lang->about_cafe_creation_type = "Please choose how users access the created cafe. If you choose Site ID, they would access via http://defaultAddr/SiteID, and in the case of Domain name, they would access via sub-domain of registered domain name, http://subdomain.defaultDomain"; + $lang->cafe_main_layout = '主要版面'; - $lang->default_layout = '기본 레이아웃'; - $lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다'; - $lang->enable_change_layout = '레이아웃 변경'; - $lang->about_change_layout = '선택하시면 개별 카페에서 레이아웃 변경을 허용할 수 있습니다'; - $lang->allow_service = '허용 서비스'; - $lang->about_allow_service = '개별 카페에서 사용할 기본 서비스를 설정할 수 있습니다'; + $lang->default_layout = '預設版面'; + $lang->about_default_layout = '可指定建立網站時預設的版面。'; + $lang->enable_change_layout = '變更版面'; + $lang->about_change_layout = '允許所有網站都能夠變更版面。'; + $lang->allow_service = '允許服務'; + $lang->about_allow_service = 'You may configure default setting for the number and the type of services allowed in newly created cafes'; $lang->cmd_make_cafe = '建立網站'; - $lang->cmd_import = 'Import'; - $lang->cmd_export = 'Export'; - $lang->cafe_creation_privilege = '咖啡廳建立特權'; + $lang->cmd_import = '匯入'; + $lang->cmd_export = '匯出'; + $lang->cafe_creation_privilege = '網站建立權限'; - $lang->cafe_main_mid = '카페 메인 ID'; - $lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.'; + $lang->cafe_main_mid = '網站 ID'; + $lang->about_cafe_main_mid = '虛擬網站的網址為「http://網址/ID」,請輸入想要的ID值。'; $lang->default_menus = array( 'home' => '首頁', 'notice' => '公告事項', 'levelup' => '等級審核', 'freeboard' => '自由討論', - 'view_total' => '檢視全部', - 'view_comment' => '故事線', + 'view_total' => '所有主題', + 'view_comment' => '所有評論', 'cafe_album' => '網站相簿', 'menu' => '選單', 'default_group1' => '待審會員', @@ -86,7 +86,7 @@ $lang->about_cafe = "虛擬網站模組可快速建立網站,且容易進行設定。"; $lang->about_cafe_title = "只有在管理時才看的到此標題。"; $lang->about_menu_names = "可指定語言。
    如果只輸入其中一項,其他語言將會顯示一樣。"; - $lang->about_menu_option = "可設定案選單時,是否要以新視窗開啟。
    選展開的話,是隨版面。"; + $lang->about_menu_option = "可設定按選單時,是否要以新視窗開啟。
    選展開的話,是隨版面。"; $lang->about_group_grant = "有選擇用戶群組的話,只有被選擇的用戶群組才看的到。
    沒有選擇的話,非會員也能觀看。"; $lang->about_module_type = "討論板,頁面可直接建立該模組和連結網址。
    注意:建立後無法再修改"; @@ -99,8 +99,8 @@ $lang->confirm_change_layout = "變換版面可能會使原來的資料無法顯示。確定要變換嗎?"; $lang->confirm_delete_menu_item = "刪除選單:刪除選單的同時,將會使連結到選單的討論板或頁面一起刪除。確定要刪除嗎?"; - $lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다'; - $lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다'; - $lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다'; - $lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.
    다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요'; + $lang->msg_module_count_exceed = '模組數量已達到上限,無法再新建模組。'; + $lang->msg_not_enabled_id = '無法使用的帳號'; + $lang->msg_same_site = '無法在虛擬網站間移動模組。'; + $lang->about_move_module = '可在預設網站與虛擬網站間移動模組。
    Moving modules among virtual sites is note allowed. Also, if there exists a module with same mid, there can be unexpected errors, thus move only modules which have unique mid.'; ?> diff --git a/modules/homepage/queries/getNewestDocuments.xml b/modules/homepage/queries/getNewestDocuments.xml index ff0db6b85..721b5614e 100644 --- a/modules/homepage/queries/getNewestDocuments.xml +++ b/modules/homepage/queries/getNewestDocuments.xml @@ -13,6 +13,7 @@ + diff --git a/modules/homepage/skins/xe_default/skin.xml b/modules/homepage/skins/xe_default/skin.xml index 11d71e7a5..ac24de5b7 100644 --- a/modules/homepage/skins/xe_default/skin.xml +++ b/modules/homepage/skins/xe_default/skin.xml @@ -1,14 +1,24 @@ Cafe 기본 Skin + Cafe用デフォルトスキン + 虛擬網站預設面板 Cafe 기본 스킨입니다. + + Cafe用のデフォルトスキンです。 + + + 虛擬網站預設面板。 + 0.1 2009-04-03 zero + zero + zero GPL @@ -16,38 +26,67 @@ 기본 + デフォルト + 預設 제목 + タイトル + 標題 제목을 적어주세요. + タイトルを入力して下さい。 + 請輸入標題。 부제목 + サブタイトル + 副標題 제목 옆에 나타날 부제목을 적어주세요. + タイトルの隣りに表示されるサブタイトルを入力して下さい。 + 請輸入顯示在標題旁的副標題。 상세 설명 + 詳細説明 + 說明 제목 아래 표시될 설명을 입력하실 수 있습니다. + タイトルの下に表示される説明文を入力して下さい。 + 請輸入顯示在標題下方的副標題。 카페 소개 제목 + Cafeの紹介キャッチ + 虛擬網站標題 소개할 카페의 제목을 입력해주세요. (메인 노출) + 紹介するCafeのキャッチを入力して下さい。 (メインへ公開) + 請輸入虛擬網站的標題。 (メインへ公開) 카페 소개 내용 + Cafeの紹介詳細 + 虛擬網站說明 소개할 카페의 내용을 입력해주세요. (메인 노출) + 紹介するCafeの詳細説明を入力して下さい。 (メインへ公開) + 請輸入虛擬網站的簡介。 (メインへ公開) 카페 소개 이미지 + Cafeの紹介イメージ + 虛擬網站圖片 소개할 카페의 내용에 포함되는 이미지를 등록해주세요. (메인 노출) + 紹介するCafeの内容に表示するイメージを登録して下さい。 (メインへ公開) + 請輸入虛擬網站想要使用的背景圖片。 (メインへ公開) 카페 소개 링크 + Cafeの紹介URL + 虛擬網站連結 소개할 카페의 링크를 입력해주세요. (http:// 모두 포함) + 紹介するCafeのURLを入力して下さい。 (http:// を含む) + 請輸入虛擬網站連結。 (包含http:// ) - diff --git a/modules/homepage/tpl/smartphone.html b/modules/homepage/tpl/smartphone.html new file mode 100644 index 000000000..ac6154f8a --- /dev/null +++ b/modules/homepage/tpl/smartphone.html @@ -0,0 +1,18 @@ + diff --git a/modules/importer/lang/jp.lang.php b/modules/importer/lang/jp.lang.php index b55106bf3..139f69624 100644 --- a/modules/importer/lang/jp.lang.php +++ b/modules/importer/lang/jp.lang.php @@ -1,6 +1,6 @@ preprocessing = 'データ移転のため、準備中です。'; // 項目 - $lang->importer = 'ZBデータ変換'; + $lang->importer = 'XEデータ変換'; $lang->source_type = 'データ変換の対象'; $lang->type_member = '会員情報'; $lang->type_message = 'メッセージ情報'; diff --git a/modules/importer/lang/ko.lang.php b/modules/importer/lang/ko.lang.php index e032b845f..a9387c371 100644 --- a/modules/importer/lang/ko.lang.php +++ b/modules/importer/lang/ko.lang.php @@ -1,6 +1,6 @@ site_srl = 0; $site_args->index_module_srl = Context::get('index_module_srl'); $site_args->default_language = Context::get('change_lang_type'); + $site_args->domain = $db_info->default_url; $oModuleController = &getController('module'); $oModuleController->updateSite($site_args); diff --git a/modules/install/lang/jp.lang.php b/modules/install/lang/jp.lang.php index 85f030313..24488076b 100644 --- a/modules/install/lang/jp.lang.php +++ b/modules/install/lang/jp.lang.php @@ -1,6 +1,6 @@ 'XMLライブラリ', 'iconv' => 'ICONVライブラリ', 'gd' => 'GDライブラリ', - 'session' => 'Session.auto_start の設定', + 'session' => 'Session.auto_startの設定', ); $lang->install_checklist_desc = array( @@ -252,14 +252,14 @@ EndOfLicense; $lang->admin_title = '管理者情報'; $lang->env_title = '環境設定'; - $lang->use_optimizer = 'オプティマイザ使用'; - $lang->about_optimizer = 'オプティマイザを使用すると多数の「CSS/JS」ファイルを、統合・圧縮して転送するのでレスポンスが早くなります。
    但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。'; + $lang->use_optimizer = 'オプティマイザー使用'; + $lang->about_optimizer = 'オプティマイザーを使用すると多数の「CSS/JS」ファイルを、統合・圧縮して転送するのでレスポンスが早くなります。
    但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。'; $lang->use_rewrite = 'リライト・モジュールを使用'; $lang->about_rewrite = 'Webサーバで「リライト・モジュール(mod_rewrite)」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを動的だけど「http://アドレス/123」のように静的なページに見せることが出来ます。'; $lang->time_zone = 'タイムゾーン'; $lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差がある場合、タイムゾーンを指定して表示時間を合わせることが出来ます。'; $lang->qmail_compatibility = 'Qmail 互換'; - $lang->about_qmail_compatibility = 'Qmail等、CRLFを改行コードで認識出来ないMTAでメールが送信出来るようにします。'; + $lang->about_qmail_compatibility = 'Qmail等、CRLFを改行コードとして認識出来ないMTA(Message Transfer Agent)で、メールの送信が出来るようにします。'; $lang->about_database_file = 'Sqliteはファイルにデータを保存します。そのため、データベースファイルにはウェブからアクセス出来ない場所にしなければなりません。
    データファイルのパーミッションは「707」に設定して下さい。'; diff --git a/modules/install/lang/ko.lang.php b/modules/install/lang/ko.lang.php index d09543265..09b8c577f 100644 --- a/modules/install/lang/ko.lang.php +++ b/modules/install/lang/ko.lang.php @@ -1,6 +1,6 @@ '用 PHP的 PDO支援『sqlite3』。
    安裝時,資料庫數據應建立在網頁無法訪問的地方。', 'cubrid' => '使用 CUBRID DB。 manual', 'postgresql' => '使用 PostgreSql DB。', - 'firebird' => '使用 Firebird DB。', + 'firebird' => '使用 Firebird DB。
    DB 생성 방법 (create database "/path/dbname.fdb" page_size=8192 default character set UTF8;)', ); $lang->form_title = '輸入資料庫及管理員資訊'; @@ -234,7 +234,7 @@ EndOfLicense; $lang->db_type = '資料庫類型'; $lang->select_db_type = '請選擇要使用的資料庫。'; $lang->db_hostname = '主機名稱'; - $lang->db_port = 'PORT'; + $lang->db_port = '埠口'; $lang->db_userid = '使用者名稱'; $lang->db_password = '密碼'; $lang->db_database = '資料庫名稱'; @@ -246,7 +246,7 @@ EndOfLicense; $lang->env_title = '環境設置'; $lang->use_optimizer = 'Optimizer'; $lang->about_optimizer = '使用Optimizer可以對大部分的『CSS/JS』檔案進行整合/壓縮傳送使之加快網站訪問速度。
    只是有時會發生小小的問題。這時候請暫時不要使用Optimizer。'; - $lang->use_rewrite = 'Rewrite模組'; + $lang->use_rewrite = 'Rewrite'; $lang->about_rewrite = '如主機支援rewrite模組並選擇此項,可以簡化複雜的網址。
    例如,『http://域名/?document_srl=123』可簡化成『http://域名/123』。'; $lang->time_zone = '時區'; $lang->about_time_zone = '主機時間和您所處的時間有差異時,可以設置時區來滿足你所需要的時間顯示。'; diff --git a/modules/integration_search/integration_search.model.php b/modules/integration_search/integration_search.model.php index f7e070346..6c24cf887 100644 --- a/modules/integration_search/integration_search.model.php +++ b/modules/integration_search/integration_search.model.php @@ -49,14 +49,6 @@ $oCommentModel = &getModel('comment'); $output = $oCommentModel->getTotalCommentList($args); if(!$output->toBool()|| !$output->data) return $output; - - $list = array(); - foreach($output->data as $key => $val) { - $oComment = new commentItem(0); - $oComment->setAttribute($val); - $list[$key] = $oComment; - } - $output->data = $list; return $output; } diff --git a/modules/integration_search/lang/zh-TW.lang.php b/modules/integration_search/lang/zh-TW.lang.php index f2f66efba..9a3a889ab 100644 --- a/modules/integration_search/lang/zh-TW.lang.php +++ b/modules/integration_search/lang/zh-TW.lang.php @@ -14,7 +14,7 @@ $lang->msg_document_more_search = "계속 검색 버튼을 선택하시면 아직 검색하지 않은 부분까지 계속 검색 하실 수 있습니다"; $lang->is_result_text = "符合'%s'的搜尋結果,約有%d項"; - $lang->multimedia = "Images/ Movies"; + $lang->multimedia = "圖片/影片"; $lang->is_search_option = array( 'document' => array( diff --git a/modules/issuetracker/conf/module.xml b/modules/issuetracker/conf/module.xml index 397847fe7..cf2f38e48 100644 --- a/modules/issuetracker/conf/module.xml +++ b/modules/issuetracker/conf/module.xml @@ -48,7 +48,7 @@ - + diff --git a/modules/issuetracker/issuetracker.item.php b/modules/issuetracker/issuetracker.item.php index f5c114252..ceaba2ad0 100644 --- a/modules/issuetracker/issuetracker.item.php +++ b/modules/issuetracker/issuetracker.item.php @@ -144,5 +144,11 @@ function isClosed() { return in_array($this->status, $this->closed_status); } + + function isAccessible() { + $grant = Context::get('grant'); + if($grant->commiter) return true; + else return parent::isAccessible() || $this->isGranted(); + } } ?> diff --git a/modules/issuetracker/lang/jp.lang.php b/modules/issuetracker/lang/jp.lang.php index 6e8c57ab0..ff1a9965b 100644 --- a/modules/issuetracker/lang/jp.lang.php +++ b/modules/issuetracker/lang/jp.lang.php @@ -1,7 +1,7 @@ 翻訳:ミニミ + * @author zero (zero@nzeo.com) 翻訳:ミニミ * @brief イシュートラッカー(Issuetracker)モジュールの日本語言語パッケージ(基本的な内容のみ) **/ @@ -27,9 +27,9 @@ $lang->about_svn_cmd = 'SVN連動のためのsvn clientファイルがある場所(絶対経路)を入力して下さい。 (ex: /usr/bin/svn)'; $lang->diff_cmd = 'DIFFファイルの場所'; $lang->about_diff_cmd = 'SVNリビジョン(revision)間の比較のためのdiffファイルがある場所(絶対経路)を入力して下さい。(ex: /usr/bin/diff)'; - $lang->svn_userid = 'SVN ID'; + $lang->svn_userid = 'SVNアクセス用ID'; $lang->about_svn_userid = 'SVNリポジトリへのアクセス認証が必要な場合、IDを入力して下さい。'; - $lang->svn_passwd = 'SVNパスワード'; + $lang->svn_passwd = 'SVNアクセス用パスワード'; $lang->about_svn_passwd = 'SVNリポジトリへのアクセス認証が必要な場合、パスワードを入力して下さい。'; $lang->issue = 'イシュー'; diff --git a/modules/issuetracker/skins/xe_issuetracker/issue_list.html b/modules/issuetracker/skins/xe_issuetracker/issue_list.html index 5d7c19183..a21e3fd39 100644 --- a/modules/issuetracker/skins/xe_issuetracker/issue_list.html +++ b/modules/issuetracker/skins/xe_issuetracker/issue_list.html @@ -8,6 +8,7 @@
  • - + diff --git a/modules/layout/lang/zh-TW.lang.php b/modules/layout/lang/zh-TW.lang.php index 04db26726..d847b1727 100644 --- a/modules/layout/lang/zh-TW.lang.php +++ b/modules/layout/lang/zh-TW.lang.php @@ -58,10 +58,10 @@ 17 => '靠右對齊', 18 => '整體', 19 => '版面', - 20 => '新增控件', + 20 => '新增Widget', 21 => '新增內容', 22 => '屬性', - 23 => '控件樣式', + 23 => 'Widget樣式', 24 => '修改', 25 => '刪除', 26 => '對齊', @@ -106,8 +106,8 @@ 'description' => 'FaceOff Layout版面管理者,可於線上修改與設計版面。
    下圖為版面架構示意圖和功能簡介,瞭解後發揮創意製作出自己想要的版面吧!', 'layout' => 'FaceOff及HTML的架構是相同。
    이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.
    위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.
    이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 모듈의 내용이 출력됩니다.', 'setting' => '左上方的選單說明:
    • 儲存 : 儲存設定內容
    • 取消 : 不儲存設定內容並返回上一頁
    • 重置 : 重新設置回到最原始的版面設定
    • 模式 : 可設定版面模式為固定/ 變動/ 固定+變動(內容)
    • 樣式 : 可設置兩個Extension區域和Content區域
    • 對齊 : 可選擇版面的對齊方式
    ', - 'hotkey' => '除了可利用滑鼠選取各區域外,也能使用熱鍵選取:
    • tab鍵 : 當沒有選取控件時,選擇順序是: Header, Footer, Body;當有選取控件時,將會選擇下一個控件。
    • Shift + tab鍵 : 功能和tab鍵相反
    • Esc鍵 : 當沒有選擇區域時,選擇順序是: Neck, Extension(e1,e2),Knee;當有選擇控件時,將會選則此控件所屬的區域。
    • 方向鍵 : 當有選擇控件時,可利用方向鍵作移動。
    ', - 'attribute' => '除了控件以外的各個區域都可以指定背景顏色/圖片及文字顏色(包含a標籤)。', + 'hotkey' => '除了可利用滑鼠選取各區域外,也能使用熱鍵選取:
    • tab鍵 : 當沒有選取Widget時,選擇順序是: Header, Footer, Body;當有選取Widget時,將會選擇下一個Widget。
    • Shift + tab鍵 : 功能和tab鍵相反
    • Esc鍵 : 當沒有選擇區域時,選擇順序是: Neck, Extension(e1,e2),Knee;當有選擇Widget時,將會選則此Widget所屬的區域。
    • 方向鍵 : 當有選擇Widget時,可利用方向鍵作移動。
    ', + 'attribute' => '除了Widget以外的各個區域都可以指定背景顏色/圖片及文字顏色(包含a標籤)。', ); ?> diff --git a/modules/ldap/lang/jp.lang.php b/modules/ldap/lang/jp.lang.php index b21e754fd..fd6bec1e8 100644 --- a/modules/ldap/lang/jp.lang.php +++ b/modules/ldap/lang/jp.lang.php @@ -14,15 +14,15 @@ $lang->ldap_basedn = 'ベース(base)DN'; $lang->ldap_email_entry = '会員メールアカウントカラム'; - $lang->ldap_nickname_entry = '会員名カラム'; - $lang->ldap_username_entry = '会員のニックネームカラム'; + $lang->ldap_nickname_entry = '会員のニックネームカラム'; + $lang->ldap_username_entry = '会員名カラム'; $lang->ldap_group_entry = '会員のグループカラム'; $lang->about_use_ldap = 'LDAP認証連動のためには、下記のサーバー情報とともに上にチェックして下さい。'; $lang->about_ldap_server = 'LDAPサーバー情報を入力して下さい。'; $lang->about_ldap_port = 'LDAPサーバーのポート(port)番号情報を入力して下さい。'; - $lang->about_ldap_userdn_prefix = '認証のためのユーザーDNプレフィックス(prefix)を入力して下さい。 (例: cn=)'; - $lang->about_ldap_userdn_suffix = '認証のためのユーザーDNサフィックス(suffix)を入力して下さい。 (例: @abc.com)'; + $lang->about_ldap_userdn_prefix = '認証のためのユーザーDNプレフィックス(prefix)を入力して下さい。 (例: 「cn=」、もしくは、「uid=」など)'; + $lang->about_ldap_userdn_suffix = '認証のためのユーザーDNサフィックス(suffix)を入力して下さい。 (例: 「@abc.com」、もしくは、「,ou=People,dc=abc,dc=com」など)'; $lang->about_ldap_basedn = 'ディレクトリのベースDNをログインして下さい。 (例: dc=abc,dc=com)'; $lang->about_ldap_email_entry = 'LDAP情報中、会員のメールアカウント情報として使うカラム名を入力して下さい。 (重複不可)'; diff --git a/modules/lifepod/lang/jp.lang.php b/modules/lifepod/lang/jp.lang.php index 0ef5a781b..30b6c911b 100644 --- a/modules/lifepod/lang/jp.lang.php +++ b/modules/lifepod/lang/jp.lang.php @@ -1,6 +1,6 @@ default_group_1 = "準会員"; $lang->default_group_2 = "正会員"; $lang->admin_group = "管理グループ"; - $lang->keep_signed = '次回からIDの入力を省略'; - $lang->remember_user_id = 'ID保存'; + $lang->keep_signed = '次回からID入力を省略'; + $lang->remember_user_id = 'ID保存'; $lang->already_logged = '既にログインされています。'; $lang->denied_user_id = '使用が禁じられているIDです。'; - $lang->null_user_id = 'ユーザIDをもう一度入力して下さい。'; + $lang->null_user_id = 'ユーザーIDをもう一度入力して下さい。'; $lang->null_password = 'パスワードを入力して下さい。'; $lang->invalid_authorization = '認証出来ませんでした。'; $lang->invalid_user_id= '存在しないユーザIDです。'; $lang->invalid_password = '無効なパスワードです。'; - $lang->allow_mailing = 'メーリングリスト'; + $lang->allow_mailing = 'メーリングリストに登録'; $lang->denied = '使用中止'; $lang->is_admin = '最高管理権限'; $lang->group = '所属グループ'; - $lang->group_title = 'グループタイトル'; + $lang->group_title = 'グループ名'; $lang->group_srl = 'グループ番号'; $lang->signature = '署名'; $lang->profile_image = 'プロフィール写真'; - $lang->profile_image_max_width = '横幅サイズ制限'; - $lang->profile_image_max_height = '縦幅サイズ制限'; + $lang->profile_image_max_width = '制限横幅サイズ'; + $lang->profile_image_max_height = '制限縦幅サイズ'; $lang->image_name = 'イメージ名'; - $lang->image_name_max_width = '横幅制限サイズ'; - $lang->image_name_max_height = '縦幅制限サイズ'; + $lang->image_name_max_width = '制限横幅サイズ'; + $lang->image_name_max_height = '制限縦幅サイズ'; $lang->image_mark = 'イメージマーク'; - $lang->image_mark_max_width = '横幅制限サイズ'; - $lang->image_mark_max_height = '縦幅制限サイズ'; - $lang->group_image_mark = 'Group Image Mark'; - $lang->group_image_mark_max_width = '横幅制限サイズ'; - $lang->group_image_mark_max_height = '縦幅制限サイズ'; + $lang->image_mark_max_width = '制限横幅サイズ'; + $lang->image_mark_max_height = '制限縦幅サイズ'; + $lang->group_image_mark = 'グループ用イメージマーク'; + $lang->group_image_mark_max_width = '制限横幅サイズ'; + $lang->group_image_mark_max_height = '制限縦幅サイズ'; $lang->group_image_mark_order = 'グループ用イメージマークの順番'; - $lang->signature_max_height = '署名欄の高さの制限'; - $lang->enable_openid = 'OpenID使用'; + $lang->signature_max_height = '制限署名欄の高さ'; + $lang->enable_openid = 'OpenIDサポート'; $lang->enable_join = '会員登録を許可する'; - $lang->enable_confirm = 'メール認証を使用'; + $lang->enable_confirm = 'メール認証機能を使用'; $lang->enable_ssl = 'SSL使用'; $lang->security_sign_in = 'セキュア(SSL)'; - $lang->limit_day = '臨時制限日'; + $lang->limit_day = '臨時制限期間(日)'; $lang->limit_date = '制限日'; - $lang->after_login_url = 'ログイン後表示するページのURL'; - $lang->after_logout_url = 'ログアウト後表示するページのURL'; - $lang->redirect_url = '登録後表示するページ'; + $lang->after_login_url = 'ログイン後、表示するページのURL'; + $lang->after_logout_url = 'ログアウト後、表示するページのURL'; + $lang->redirect_url = '会員登録後、表示するページ'; $lang->agreement = '会員登録規約'; $lang->accept_agreement = '規約に同意する'; $lang->member_info = '会員情報'; @@ -63,7 +63,7 @@ 'N' => '全て禁止', ); $lang->about_allow_message = 'メッセージの許可タイプ及び対象を設定します。'; - $lang->logged_users = '現在アクセス中ユーザー'; + $lang->logged_users = '現在ログイン中の会員'; $lang->webmaster_name = 'ウェブマスターのお名前'; $lang->webmaster_email = 'ウェブマスターのメールアドレス'; @@ -73,7 +73,7 @@ $lang->about_webmaster_email = 'ウェブマスターのメールアドレスを入力して下さい。'; $lang->search_target_list = array( - 'user_id' => 'ユーザID', + 'user_id' => 'ユーザーID', 'user_name' => 'お名前', 'nick_name' => 'ニックネーム', 'email_address' => 'メールアドレス', @@ -92,7 +92,7 @@ $lang->cmd_site_signup = '登録'; $lang->cmd_modify_member_info = '会員情報修正'; $lang->cmd_modify_member_password = 'パスワード変更'; - $lang->cmd_view_member_info = '会員情報表示'; + $lang->cmd_view_member_info = '会員情報確認'; $lang->cmd_leave = '退会'; $lang->cmd_find_member_account = 'IDとパスワードのリマインダー'; @@ -102,15 +102,15 @@ $lang->cmd_send_mail = 'メール送信'; $lang->cmd_manage_id = '禁止ID管理'; $lang->cmd_manage_form = '会員登録フォーム管理'; - $lang->cmd_view_own_document = '書き込み表示'; - $lang->cmd_manage_member_info = 'Manage Member Info'; + $lang->cmd_view_own_document = '書き込み履歴'; + $lang->cmd_manage_member_info = '会員情報管理'; $lang->cmd_trace_document = '書き込みの追跡'; $lang->cmd_trace_comment = 'コメント追跡'; - $lang->cmd_view_scrapped_document = 'スクラップ表示'; - $lang->cmd_view_saved_document = '保存ドキュメント表示'; + $lang->cmd_view_scrapped_document = 'スクラップ'; + $lang->cmd_view_saved_document = '保存ドキュメント'; $lang->cmd_send_email = 'メール送信'; - $lang->msg_email_not_exists = "メールアドレスがありません。"; + $lang->msg_email_not_exists = "登録されたメールアドレスがありません。"; $lang->msg_alreay_scrapped = '既にスクラップされたコンテンツです。'; @@ -139,7 +139,7 @@ $lang->msg_exists_user_id = '既に存在するユーザIDです。他のIDを入力して下さい。'; $lang->msg_exists_email_address = '既に存在するメールアドレスです。他のメールアドレスを入力して下さい。'; $lang->msg_exists_nick_name = '既に存在するニックネームです。他のニックネームを入力して下さい。'; - $lang->msg_signup_disabled = '会員に登録することが出来ません。'; + $lang->msg_signup_disabled = '会員登録が制限されています。
    サイト管理者にお問合せ下さい。'; $lang->msg_already_logged = '既に会員に登録されています。'; $lang->msg_not_logged = 'ログインしていません。'; $lang->msg_insert_group_name = 'グループ名を入力して下さい。'; @@ -191,8 +191,8 @@ $lang->about_image_name = 'ユーザの名前を文字の代わりにイメージで表示させることが出来ます。'; $lang->about_image_mark = '使用者の名前の前にマークを付けることが出来ます。'; - $lang->about_profile_image = 'ユーザのプロフィールイメージが使用出来るようにします。'; $lang->about_group_image_mark = 'ユーザー名の前にグループマークを表示します。'; + $lang->about_profile_image = 'ユーザのプロフィールイメージが使用出来るようにします。'; $lang->about_signature_max_height = '署名欄の高さのサイズを制限します。 (0 もしくは空の場合は制限なし。)'; $lang->about_accept_agreement = '登録規約をすべて読んだ上で同意します。'; @@ -200,7 +200,7 @@ $lang->about_openid = 'OpenIDで登録する際、IDとメールなどの基本情報は、このサイトに保存されますが、パスワードと認証のための処理用の情報は該当するOpenID提供サービス側で行われます。'; $lang->about_openid_leave = 'OpenIDの退会は現在のサイトから会員情報を削除することを意味します。
    退会後ログインすると新しく登録することになり、書き込んだコンテンツに対する権限を維持することが出来ません。'; - $lang->about_find_member_account = 'ID/パスワードは登録時に登録されたメールにてお知らせします。
    登録時に登録したメールアドレスを入力して「IDとパスワードの検索」ボタンをクリックして下さい。
    '; + $lang->about_find_member_account = 'ID/パスワードは登録時に登録されたメールにてお知らせします。
    登録時に登録したメールアドレスを入力して「IDとパスワードのリマインダー」ボタンをクリックして下さい。
    '; $lang->about_member = "会員の作成・修正・削除することが出来、グループの管理、登録フォームの管理などが行える会員管理モジュールです。\nデフォルトで作成されたグループにグループを追加作成して会員管理が出来るようにし、会員登録フォーム管理では基本情報の他、フォームの入力情報を追加することが出来ます。"; $lang->about_ssl_port = '基本ポート以外のSSLポートを利用する場合、入力して下さい。'; diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index 53bd09cec..9d2835458 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -109,9 +109,8 @@ if(!trim(strip_tags($args->agreement))) $args->agreement = null; $args->limit_day = (int)$args->limit_day; - // module Controller 객체 생성하여 입력 - $oModuleController = &getController('module'); - $output = $oModuleController->insertModuleConfig('member',$args); + $oMemberController = &getController('member'); + $output = $oMemberController->setMemberConfig($args); return $output; } @@ -409,7 +408,7 @@ $oModuleControll = getController('module'); $config = $oModuleModel->getModuleConfig('member'); -// $config->group_image_mark_order = Context::get('group_image_mark_order'); + // $config->group_image_mark_order = Context::get('group_image_mark_order'); $oModuleControll->insertModuleConfig('member', $config); } diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index 458d21435..82f4d2df5 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -67,17 +67,8 @@ function dispMemberAdminConfig() { // 설정 정보를 받아옴 (module model 객체를 이용) $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('member'); - if(!$config->webmaster_name) $config->webmaster_name = 'webmaster'; - if(!$config->image_name_max_width) $config->image_name_max_width = 90; - if(!$config->image_name_max_height) $config->image_name_max_height = 20; - if(!$config->image_mark_max_width) $config->image_mark_max_width = 20; - if(!$config->image_mark_max_height) $config->image_mark_max_height = 20; - if(!$config->profile_image_max_width) $config->profile_image_max_width = 80; - if(!$config->profile_image_max_height) $config->profile_image_max_height = 80; - if(!$config->skin) $config->skin = "default"; - if(!$config->editor_skin || $config->editor_skin == 'default') $config->editor_skin = "xpresseditor"; - if(!$config->group_image_mark) $config->group_image_mark = "N"; + $oMemberModel = &getModel('member'); + $config = $oMemberModel->getMemberConfig(); Context::set('config',$config); // 회원 관리 모듈의 스킨 목록을 구함 diff --git a/modules/member/member.api.php b/modules/member/member.api.php new file mode 100644 index 000000000..66c6e2e47 --- /dev/null +++ b/modules/member/member.api.php @@ -0,0 +1,40 @@ +arrangeContentList(Context::get('document_list')); + $oModule->add('document_list',$document_list); + $oModule->add('page_navigation',Context::get('page_navigation')); + } + + + + function arrangeContentList($content_list) { + $output = array(); + if(count($content_list)) { + foreach($content_list as $key => $val) $output[] = $this->arrangeContent($val); + } + return $output; + } + + + function arrangeContent($content) { + $output = null; + if($content){ + $output= $content->gets('document_srl','category_srl','is_secret','nick_name','user_id','user_name','title','content','tags','voted_count','blamed_count','comment_count','regdate','last_update','extra_vars'); + } + return $output; + } + + } +?> diff --git a/modules/member/member.class.php b/modules/member/member.class.php index 155c6b2d5..77c802dd0 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -195,4 +195,4 @@ function recompileCache() { } } -?> \ No newline at end of file +?> diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index aa4f2a465..acc91a565 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -505,8 +505,8 @@ * @brief 회원 가입 **/ function procMemberInsert() { - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('member'); + $oMemberModel = &getModel('member'); + $config = $oMemberModel->getMemberConfig(); // 관리자가 회원가입을 허락하였는지 검사 if($config->enable_join != 'Y') return $this->stop('msg_signup_disabled'); @@ -1110,6 +1110,36 @@ $this->setMessage('success_deleted'); } + /** + * @brief 회원 설정 정보를 저장 + **/ + function setMemberConfig($args) { + if(!$args->skin) $args->skin = "default"; + if(!$args->colorset) $args->colorset = "white"; + if(!$args->editor_skin) $args->editor_skin= "xpresseditor"; + if(!$args->editor_colorset) $args->editor_colorset = "white"; + if($args->enable_join!='Y') $args->enable_join = 'N'; + if($args->enable_openid!='Y') $args->enable_openid= 'N'; + if($args->profile_image !='Y') $args->profile_image = 'N'; + if($args->image_name!='Y') $args->image_name = 'N'; + if($args->image_mark!='Y') $args->image_mark = 'N'; + if($args->group_image_mark!='Y') $args->group_image_mark = 'N'; + if(!trim(strip_tags($args->agreement))) $args->agreement = null; + $args->limit_day = (int)$args->limit_day; + + $agreement = trim($args->agreement); + unset($args->agreement); + + $oModuleController = &getController('module'); + $output = $oModuleController->insertModuleConfig('member',$args); + if(!$output->toBool()) return $output; + + $agreement_file = _XE_PATH_.'files/member_extra_info/agreement.txt'; + FileHandler::writeFile($agreement_file, $agreement); + + return new Object(); + } + /** * @brief 서명을 파일로 저장 **/ diff --git a/modules/member/member.model.php b/modules/member/member.model.php index f08d5a7a0..01518fed9 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -18,6 +18,32 @@ function init() { } + /** + * @brief 회원 설정 정보를 return + **/ + function getMemberConfig() { + // DB에 저장되는 회원 설정 정보 구함 + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + + // 회원가입 약관 구함 + $agreement_file = _XE_PATH_.'files/member_extra_info/agreement.txt'; + if(file_exists($agreement_file)) $config->agreement = FileHandler::readFile($agreement_file); + + if(!$config->webmaster_name) $config->webmaster_name = 'webmaster'; + if(!$config->image_name_max_width) $config->image_name_max_width = 90; + if(!$config->image_name_max_height) $config->image_name_max_height = 20; + if(!$config->image_mark_max_width) $config->image_mark_max_width = 20; + if(!$config->image_mark_max_height) $config->image_mark_max_height = 20; + if(!$config->profile_image_max_width) $config->profile_image_max_width = 80; + if(!$config->profile_image_max_height) $config->profile_image_max_height = 80; + if(!$config->skin) $config->skin = "default"; + if(!$config->editor_skin || $config->editor_skin == 'default') $config->editor_skin = "xpresseditor"; + if(!$config->group_image_mark) $config->group_image_mark = "N"; + + return $config; + } + /** * @brief 선택된 회원의 간단한 메뉴를 표시 **/ diff --git a/modules/member/member.view.php b/modules/member/member.view.php index a40c8e472..c6defd6e9 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -76,6 +76,9 @@ // 회원가입을 중지시켰을 때는 에러 표시 if($this->member_config->enable_join != 'Y') return $this->stop('msg_signup_disabled'); Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info)); + + $member_config = $oMemberModel->getMemberConfig(); + Context::set('member_config', $member_config); // 템플릿 파일 지정 $this->setTemplateFile('signup_form'); diff --git a/modules/member/skins/default/css/default.css b/modules/member/skins/default/css/default.css index 909eac4c7..2c0171edf 100644 --- a/modules/member/skins/default/css/default.css +++ b/modules/member/skins/default/css/default.css @@ -119,3 +119,8 @@ #memberModule .memberSmallBox .help { background:#f5f5f3; color:#666666; border-top:1px solid #eaebe7; overflow:hidden; padding:1.1em; color:#ccc;} #memberModule .memberSmallBox .help a{ color:#666; text-decoration:underline;} #memberModule .memberSmallBox .buttonArea{ position:absolute; top:10px; left:260px;} + + + +#memberModule ul.checkbox, +#memberModule ul.radio { list-style:none; margin:0; padding:0; } \ No newline at end of file diff --git a/modules/member/skins/default/js/member.js b/modules/member/skins/default/js/member.js index a1682c032..a6e0fa75b 100644 --- a/modules/member/skins/default/js/member.js +++ b/modules/member/skins/default/js/member.js @@ -37,24 +37,6 @@ function completeLeave(ret_obj, response_tags, args, fo_obj) { /* 이미지 업로드 */ function _doUploadImage(fo_obj, act) { - // 업로드용 iframe을 생성 - if(!xGetElementById('tmp_upload_iframe')) { - if(xIE4Up) { - window.document.body.insertAdjacentHTML("afterEnd", ""); - } else { - var obj_iframe = xCreateElement('IFRAME'); - obj_iframe.name = obj_iframe.id = 'tmp_upload_iframe'; - obj_iframe.style.display = 'none'; - obj_iframe.style.width = '1px'; - obj_iframe.style.height = '1px'; - obj_iframe.style.position = 'absolute'; - obj_iframe.style.top = '-10px'; - obj_iframe.style.left = '-10px'; - window.document.body.appendChild(obj_iframe); - } - } - - fo_obj.target = "tmp_upload_iframe"; fo_obj.act.value = act; fo_obj.submit(); } diff --git a/modules/member/skins/default/modify_info.html b/modules/member/skins/default/modify_info.html index af07c49a7..f4fffa82d 100644 --- a/modules/member/skins/default/modify_info.html +++ b/modules/member/skins/default/modify_info.html @@ -25,8 +25,7 @@

    {$lang->msg_update_member}

    - profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data"> - + profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data" target="tmp_upload_iframe"> @@ -177,6 +176,16 @@ + + + +
      + +
    • value == $v)-->checked="checked"/>{$v}
    • + +
    + + - @@ -271,4 +280,6 @@ })(jQuery); + + diff --git a/modules/member/skins/default/signup_form.html b/modules/member/skins/default/signup_form.html index c521108b8..1d3bb7aa3 100644 --- a/modules/member/skins/default/signup_form.html +++ b/modules/member/skins/default/signup_form.html @@ -128,7 +128,7 @@ -
      +
      • value)&&in_array($v, $val->value))-->checked="checked"/>{$v}
      • diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index d76c7ffe0..110933a38 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -186,6 +186,16 @@ + + +
          + +
        • value == $v)-->checked="checked"/>{$v}
        • + +
        + + +
    {$lang->cmd_download}
    {$lang->date}
    {$lang->ipaddress}
    {$lang->nick_name}
    - - {$lang->cmd_save} + + + {$lang->is_stand_by} - {$module_list[$val->module_srl]->browser_title} - {htmlspecialchars($document_list[$document_srl]->title)} + [{$lang->comment}] + [{$lang->module}] + + [{$lang->cmd_temp_save}] + {$module_list[$val->module_srl]->browser_title} + + - {$document_list[$document_srl]->getTitle()}{$document_list[$document_srl]->getTitle()} +
    {$no}{htmlspecialchars($val->source_filename)}{FileHandler::filesize($val->file_size)}{$no}{htmlspecialchars($val->source_filename)}{FileHandler::filesize($val->file_size)} - {$lang->is_valid}{$lang->is_stand_by}{$val->download_count}{zdate($val->regdate,"Y-m-d")}{$val->ipaddress}{$val->download_count}{zdate($val->regdate,"Y-m-d")}{$val->ipaddress} + + {$document_list[$document_srl]->getNickName()} + + {$comment_list[$val->upload_target_srl]->getNickName()} + +
    {$oIssue->getTitle()}- {$oIssue->getStatus()} {$oIssue->getNickName()}
    {$lang->milestone} : {$oIssue->getMilestoneTitle()}
    {$lang->openid}
    +
    +
    - - + + - + + + diff --git a/modules/opage/lang/jp.lang.php b/modules/opage/lang/jp.lang.php index fd97de35f..aa813a6c2 100644 --- a/modules/opage/lang/jp.lang.php +++ b/modules/opage/lang/jp.lang.php @@ -1,6 +1,6 @@ target_path = $path; - - // element의 속성중 value에 " 로 안 묶여 있는 것을 검사하여 묶어줌 - 에러날 수 있음 ex) window.open('*','*','width=320, height=240 ,left=100,top=100') - //$content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $content); - - // img, input, a, link등의 href, src값 변경 - $content = preg_replace_callback('!<(script|link|a|img|input|iframe)([^>]*)(href|src)=[\'"](.*?)[\'"]!is', array($this, '_replaceSrc'), $content); - - // background:url의 값 변경 - $content = preg_replace_callback('!url\((.*?)\)!is', array($this, '_replaceBackgroundUrl'), $content); + $url_info = parse_url($path); + $host = sprintf("%s://%s%s",$url_info['scheme'],$url_info['host'],$url_info['port']?':'.$url_info['port']:''); + $path = $url_info['path']; + if(substr($path,-1)=='/') $path = substr($path,-1); + $t = explode('/',$path); + $_t = array(); + for($i=0,$c=count($t)-1;$i<$c;$i++) { + $v = trim($t[$i]); + if(!$v) continue; + $_t[] = $v; + } + $path = $host.implode('/',$_t); + if(substr($path,-1)!='/') $path .= '/'; + $this->path = $path; + $content = preg_replace_callback('/(src=|href=|url\()("|\')?([^"\'\)]+)("|\'\))?/is',array($this,'_replacePath'),$content); return $content; } - function _replaceSrc($matches) { - $href = $matches[4]; - if(preg_match("/^http/i", $href) || $href == '#' || preg_match("/javascript:/i",$href)) return $matches[0]; - - if(substr($href,0,1)=='/') $href = substr($href,1); - $href = $this->target_path.$href; - - $buff = sprintf('<%s%s%s="%s"', $matches[1], $matches[2], $matches[3], $href); - return $buff; + function _replacePath($matches) { + $val = trim($matches[3]); + if(preg_match('/^(http|\/|\.\.)/i',$val)) return $matches[0]; + if(substr($val,0,2)=='./') $val = substr($val,2); + return sprintf("%s%s%s%s",$matches[1],$matches[2],$this->path.$val,$matches[4]); } - function _replaceBackgroundUrl($matches) { - $href = $matches[1]; - if(preg_match("/^http/i",$href) || $href == '#' || preg_match("/javascript:/i",$href)) return $matches[0]; - - if(substr($href,0,1)=='/') $href = substr($href,1); - $href = $this->target_path.$href; - - $buff = sprintf('url(%s)', $href); - return $buff; - } } ?> diff --git a/modules/opage/opage.view.php b/modules/opage/opage.view.php index 2fe18ff3a..1a18ce002 100644 --- a/modules/opage/opage.view.php +++ b/modules/opage/opage.view.php @@ -37,6 +37,7 @@ else $content = $this->executeFile($path, $caching_interval, $cache_file); } + Context::set('opage_content', $content); // 결과 출력 템플릿 지정 @@ -107,6 +108,12 @@ @include($path); $content = ob_get_clean(); + // 상대경로를 절대경로로 변경 + $path_info = pathinfo($path); + $this->path = realpath($path_info['dirname']).'/'; + $content = preg_replace_callback('/(src=|href=|url\()("|\')?([^"\'\)]+)("|\'\))?/is',array($this,'_replacePath'),$content); + $content = preg_replace_callback('/( + +{$setup_content} diff --git a/modules/page/tpl/header.html b/modules/page/tpl/header.html index 4ebbe5a76..242d7aa63 100644 --- a/modules/page/tpl/header.html +++ b/modules/page/tpl/header.html @@ -17,6 +17,7 @@
  • {$lang->cmd_back}
  • class="on">{$lang->module_info}
  • +
  • class="on">{$lang->cmd_addition_setup}
  • class="on">{$lang->cmd_manage_grant}
  • diff --git a/modules/page/tpl/smartphone.html b/modules/page/tpl/smartphone.html new file mode 100644 index 000000000..d228f8dd5 --- /dev/null +++ b/modules/page/tpl/smartphone.html @@ -0,0 +1,4 @@ +
    + {$content} +
    + diff --git a/modules/planet/lang/jp.lang.php b/modules/planet/lang/jp.lang.php index 6df738554..f9ee93353 100644 --- a/modules/planet/lang/jp.lang.php +++ b/modules/planet/lang/jp.lang.php @@ -1,6 +1,6 @@ insertTrigger('member.getMemberMenu', 'planet', 'controller', 'triggerMemberMenu', 'after'); + + // 2009. 05. 07 개별 플래닛에서 메인 플래닛의 레이아웃을 승계하기 위한 트리거 추가 + $oModuleController->insertTrigger('moduleHandler.init', 'planet', 'controller', 'triggerSetLayout', 'after'); } /** @@ -57,6 +60,9 @@ // 2009. 01. 29 아이디 클릭시 나타나는 팝업메뉴에 플래닛 보기 기능 추가 if(!$oModuleModel->getTrigger('member.getMemberMenu', 'planet', 'controller', 'triggerMemberMenu', 'after')) return true; + // 2009. 05. 07 개별 플래닛에서 메인 플래닛의 레이아웃을 승계하기 위한 트리거 추가 + if(!$oModuleModel->getTrigger('moduleHandler.init', 'planet', 'controller', 'triggerSetLayout', 'after')) return true; + return false; } @@ -71,6 +77,10 @@ if(!$oModuleModel->getTrigger('member.getMemberMenu', 'planet', 'controller', 'triggerMemberMenu', 'after')) $oModuleController->insertTrigger('member.getMemberMenu', 'planet', 'controller', 'triggerMemberMenu', 'after'); + // 2009. 05. 07 개별 플래닛에서 메인 플래닛의 레이아웃을 승계하기 위한 트리거 추가 + if(!$oModuleModel->getTrigger('moduleHandler.init', 'planet', 'controller', 'triggerSetLayout', 'after')) + $oModuleController->insertTrigger('moduleHandler.init','planet','controller','triggerSetLayout', 'after'); + return new Object(0, 'success_updated'); } diff --git a/modules/planet/planet.controller.php b/modules/planet/planet.controller.php index 43346e16e..a050ac7f6 100644 --- a/modules/planet/planet.controller.php +++ b/modules/planet/planet.controller.php @@ -871,6 +871,17 @@ return new Object(); } + /** + * @brief 개별 플래닛에서 forward action이 실행될때 레이아웃 정보를 메인 플래닛과 맞춰주는 trigger + **/ + function triggerSetLayout(&$module_info) { + if($module_info->module!='planet') return new Object(); + $oPlanetModel = &getModel('planet'); + $planet_config = $oPlanetModel->getPlanetConfig(); + $module_info->layout_srl = $planet_config->layout_srl; + return new Object(); + } + } ?> diff --git a/modules/planet/planet.item.php b/modules/planet/planet.item.php index 3c7bfbdc1..6ea687b1d 100644 --- a/modules/planet/planet.item.php +++ b/modules/planet/planet.item.php @@ -53,9 +53,9 @@ return $this->getExtraValue(20); } - function getContent() { + function getContent($add_popup_menu = false, $add_content_info = true, $resource_realpath = false, $add_xe_content_class = true) { if(!$this->document_srl) return; - return parent::getContent(false,true); + return parent::getContent($add_popup_menu, $add_content_info, $resource_realpath, $add_xe_content_class); } function getArrTags() { diff --git a/modules/planet/planet.smartphone.php b/modules/planet/planet.smartphone.php new file mode 100644 index 000000000..a995b16b2 --- /dev/null +++ b/modules/planet/planet.smartphone.php @@ -0,0 +1,21 @@ +setPrevUrl(getUrl('date',$prev_date, 'document_srl','')); + $next_date = Context::get('next_date'); + if($next_date) $oSmartPhone->setNextUrl(getUrl('date',$next_date, 'document_srl','')); + + $oTemplate = new TemplateHandler(); + $content = $oTemplate->compile($this->module_path.'tpl', 'smartphone'); + $oSmartPhone->setContent($content); + } + } +?> diff --git a/modules/planet/planet.view.php b/modules/planet/planet.view.php index b8571f32f..dde9c725f 100644 --- a/modules/planet/planet.view.php +++ b/modules/planet/planet.view.php @@ -19,7 +19,7 @@ $oPlanetModel = &getModel('planet'); $oModuleModel = &getModel('module'); $planet_config = $oPlanetModel->getPlanetConfig(); - foreach($this->module_info as $key => $val) if(!isset($planet_config->{$key})) $planet_config->{$key} = $val; + if(count($this->module_info)) foreach($this->module_info as $key => $val) if(!isset($planet_config->{$key})) $planet_config->{$key} = $val; Context::set('module_info',$this->module_info = $planet_config); $current_module_info = Context::get('current_module_info'); diff --git a/modules/planet/planet.wap.php b/modules/planet/planet.wap.php new file mode 100644 index 000000000..1b7eda9ac --- /dev/null +++ b/modules/planet/planet.wap.php @@ -0,0 +1,108 @@ +planet->getContentLastDay(); + $date = Context::get('date'); + if(!$date || $date > $last_date) $date = $last_date; + Context::set('date', $date); + Context::set('prev_date', $this->planet->getPrevDate($date)); + Context::set('next_date', $this->planet->getNextDate($date)); + + $type = Context::get('type'); + if(!$type) $type = 'all'; + Context::set('type',$type); + $tagtab = null; + + switch($type) { + case 'wantyou': + $sort_index = 'documents.voted_count'; + $order = 'desc'; + break; + case 'best': + $sort_index = 'documents.comment_count'; + $order = 'desc'; + break; + + case 'all': + $sort_index = 'documents.list_order'; + $order = 'asc'; + break; + } + + $page = Context::get('page'); + $oPlanetModel = &getModel('planet'); + + $output = $oPlanetModel->getNewestContentList(null, $date, $page, 9, $sort_index, $order,$tagtab ); + + $title = Context::getBrowserTitle().' ['.zdate($date,'Y').Context::getLang('unit_year'). + zdate($date,'m').Context::getLang('unit_month'). + zdate($date,'d').Context::getLang('unit_day').']'; + + // 댓글 보기 일 경우 + if($this->act == 'dispPlanetContentCommentList') { + $page = Context::get('page'); + $document_srl = Context::get('document_srl'); + $oPlanetModel = &getModel('planet'); + $output = $oPlanetModel->getReplyList($document_srl,$page); + $reply_list = $output->data; + + $title .= ' - '.Context::getLang('comment'); + if(is_array($reply_list)) { + foreach($reply_list as $key => $reply) { + $content .= '['.$reply->nick_name.'] '; + $content .= $reply->content; + } + } + + // 상위 페이지를 목록으로 돌아가기로 지정 + $oMobile->setUpperUrl( getUrl('act',''), Context::getLang('cmd_go_upper') ); + + } else { + if($output->page_navigation->total_page>1) { + if($output->page_navigation->cur_page < $output->page_navigation->last_page) { + // next/prevUrl 지정 + $oMobile->setPrevUrl(getUrl('page',$output->page_navigation->cur_page+1), sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $output->page_navigation->cur_page+1, $output->page_navigation->total_page)); + } + if($output->page_navigation->cur_page > 1) $oMobile->setNextUrl(getUrl('page',$output->page_navigation->cur_page-1), sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $output->page_navigation->cur_page-1, $output->page_navigation->total_page)); + } + + if(!$output->data || !count($output->data)) $content .= Context::getLang('no_documents'); + + + foreach($output->data as $no => $item) { + $obj = null; + $obj['href'] = getUrl('mid',$_GET['mid'],'document_srl',$item->get('document_srl'), 'act', 'dispPlanetContentCommentList'); + $obj['link'] = '['.htmlspecialchars($item->getNickName()).'] '."\n"; + $obj['link'] .= htmlspecialchars(strip_tags($item->getContent())); + if($item->getPostScript()) $obj['extra'] = Context::getLang('planet_postscript').htmlspecialchars($item->getPostScript()); + if(is_array($item->getArrTags())) { + $obj['extra'] .= '
    TAG:'; + $obj['extra'] .= implode(', ',$item->getArrTags()); + } + $obj['link'] = $obj['text'] = $obj['link']; + $childs[] = $obj; + } + $oMobile->setChilds($childs); + + + $prev_date = Context::get('prev_date'); + if($prev_date) $oMobile->setEtcBtn(getUrl('date',$prev_date, 'document_srl',''), '<'); + $next_date = Context::get('next_date'); + if($next_date) $oMobile->setEtcBtn(getUrl('date',$next_date, 'document_srl',''), '>'); + } + $oMobile->setTitle($title); + $oMobile->setContent($content); + } + + +} \ No newline at end of file diff --git a/modules/planet/tpl/smartphone.html b/modules/planet/tpl/smartphone.html new file mode 100644 index 000000000..06983c0ba --- /dev/null +++ b/modules/planet/tpl/smartphone.html @@ -0,0 +1,31 @@ + diff --git a/modules/point/conf/module.xml b/modules/point/conf/module.xml index f5d176d93..b15d34ecd 100644 --- a/modules/point/conf/module.xml +++ b/modules/point/conf/module.xml @@ -12,6 +12,7 @@ + diff --git a/modules/point/lang/en.lang.php b/modules/point/lang/en.lang.php index 67f988279..25e56e957 100644 --- a/modules/point/lang/en.lang.php +++ b/modules/point/lang/en.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = 'Prohibit Downloads'; $lang->about_disable_download = "This will prohibit downloads when there are not enough points. (Exclude image files)"; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = 'Point Calculation per Point'; $lang->expression = 'Please input Javascript formula by using level variable i. ex) Math.pow(i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = 'All point will be initialized only with articles/comments/attachments/join points.
    Only members who do website activities will get signup points after reset.
    Please use this function when complete initialization is required in case of data transferring or other situations.'; $lang->point_link_group = 'Group Change by Level'; - $lang->about_point_link_group = 'If you specify level for a specific group, users are assigned into the group when they adavnce to the level by getting points. When new group is assigned, the user is removed from the former assigned group.'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = 'If you specify level for a specific group, users are assigned into the group when they adavnce to the level by getting points.'; $lang->about_module_point = "You can set point for each module and modules which don't have any value will use default point.
    All point will be restored on acting reverse."; @@ -58,6 +62,7 @@ $lang->cmd_point_member_list = 'Member Point List'; $lang->msg_cannot_download = "You don't have enough point to download"; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = 'Adjusting Point. (%d / %d)'; $lang->point_recal_finished = 'Point recalculation is finished.'; diff --git a/modules/point/lang/es.lang.php b/modules/point/lang/es.lang.php index 3eb4aadf9..099b59e36 100644 --- a/modules/point/lang/es.lang.php +++ b/modules/point/lang/es.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = 'Prohibida la descarga'; $lang->about_disable_download = "Se prohibe la descarga de archivos al tener los puntos insuficientes.. (Excepto los archivos de imagen)"; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = 'Punto por punto cálculo'; $lang->expression = 'Por favor, de entrada mediante el uso de Javascript fórmula nivel variable i . Ex) Math.pow (i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = 'Grupo de cambio de nivel'; - $lang->about_point_link_group = 'Si especifica nivel para un grupo específico, a los usuarios se les asigna en el grupo cuando se adavnce al nivel por conseguir puntos. Al nuevo grupo se le asigna, el usuario se retira del ex grupo asignado.'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = 'Si especifica nivel para un grupo específico, a los usuarios se les asigna en el grupo cuando se adavnce al nivel por conseguir puntos.'; $lang->about_module_point = "Usted puede definir los puntos para cada módulo y los módulos que no tengan ningun valor usarán punto predefinido.
    Todos los puntos serán restituidos al actuar en forma contraria."; @@ -58,6 +62,7 @@ $lang->cmd_point_member_list = 'Lista de puntos del usuario'; $lang->msg_cannot_download = "No tiene puntos suficientes para descagar"; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = 'Ajuste de Punto. (%d / %d)'; $lang->point_recal_finished = 'Punto cálculo está acabado.'; diff --git a/modules/point/lang/fr.lang.php b/modules/point/lang/fr.lang.php index d5ec5232d..b0572b4ce 100644 --- a/modules/point/lang/fr.lang.php +++ b/modules/point/lang/fr.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = 'Interdire de télécharger'; $lang->about_disable_download = "Il est impossible de télécharger quand il n'y a pas de points suffisants. (Sauf les fichier d'images)"; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = 'Calcul des Points par Niveau'; $lang->expression = 'Entrez la formule en Javascript en utilisant la Variable de Niveau i. ex) Math.pow(i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = 'Tous les points seront recalculés basé seulement sur les points des articles/commentaires/annexes/inscription.
    Après la restauration, Les membres gagneront le point d\'inscription seulement quand il fait de l\'activité dans le site Web.
    Utilisez cette fonction seulement quand l\'initialisation complète est necessaire comme le cas de transfert des données etc.'; $lang->point_link_group = 'Changement du Groupe lié à celui du Niveau'; - $lang->about_point_link_group = 'Si vous designez un niveau à un groupe particulier, les utilisateur s sont assignés dans le groupe quand ils s\'avancent au groupe en gagnant des points. Quand un nouveau groupe est assigné, l\'utilisateur est supprimé du groupe assigné dernierement.'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = 'Si vous designez un niveau à un groupe particulier, les utilisateur s sont assignés dans le groupe quand ils s\'avancent au groupe en gagnant des points.'; $lang->about_module_point = "Vous pouvez configurer les points pour chaque module. Le module qui n'a pas de valeurs utilisera les points par défaut.
    Tous les points seront restaurés quand on fait de l'action inverse."; @@ -58,6 +62,7 @@ $lang->cmd_point_member_list = 'Liste des Points des Membres'; $lang->msg_cannot_download = "Vous n'avez pas assez de point pour télécharger"; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = 'En train d\'Adjuster le Point. (%d / %d)'; $lang->point_recal_finished = 'Recalcul des Points est fini.'; diff --git a/modules/point/lang/jp.lang.php b/modules/point/lang/jp.lang.php index a436e3d91..4da6cbcdd 100644 --- a/modules/point/lang/jp.lang.php +++ b/modules/point/lang/jp.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = 'ダウンロード禁止'; $lang->about_disable_download = 'チェックするとポイントがない場合、ダウンロードを禁止します(イメージファイル除外)。'; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = 'レベル別ポイント計算'; $lang->expression = 'レベル変数iを使用してJavaスクリプト数式を入力して下さい(例: Math.pow(i, 2) * 90)。'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '書き込み/コメント/添付ファイル/会員登録のポイントのみ取り、全ての他のポイントを初期化します。
    但し、会員登録ポイントは初期化後、該当会員の活動がスタートしたら付与されます。
    データ移管などによるポイントを完全に初期化する必要がある場合など、利用は慎重に行なって下さい。'; $lang->point_link_group = 'グループ連動'; - $lang->about_point_link_group = 'グループにレベルを指定すると、該当レベルになったらグループが変更されます。 ただし、新しいグループに変更されると以前自動登録されたグループは消去されます。'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = 'グループにレベルを指定すると、該当レベルになったらグループが変更されます。'; $lang->about_module_point = 'モジュール別にポイントを指定することが出来ますが、指定されていないモジュールでは、デフォルトポイントが使用されます。すべてのポイント数は、反対のアクションを行った際には原状復帰されます。'; @@ -57,6 +61,7 @@ $lang->cmd_point_member_list = '会員ポイントリスト'; $lang->msg_cannot_download = 'ポイントが不足しているため、ダウンロード出来ません。'; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = 'ただ今ポイントを適用しています。 (%d / %d)'; $lang->point_recal_finished = 'ポイント再計算が完了しました。'; diff --git a/modules/point/lang/ko.lang.php b/modules/point/lang/ko.lang.php index d1c199b67..37a55f41e 100644 --- a/modules/point/lang/ko.lang.php +++ b/modules/point/lang/ko.lang.php @@ -5,8 +5,8 @@ * @brief 포인트 (point) 모듈의 기본 언어팩 **/ - $lang->point = '포인트'; - $lang->level = '레벨'; + $lang->point = '포인트'; + $lang->level = '레벨'; $lang->about_point_module = '포인트 모듈은 글작성/댓글작성/업로드/다운로드등의 행동을 할때 포인트를 부여할 수 있습니다.
    단 포인트 모듈에서는 설정만 할 뿐이고 포인트 애드온을 활성화 시켜야 포인트가 누적이 됩니다'; $lang->about_act_config = '게시판,블로그등의 모듈마다 글작성/삭제/댓글작성/삭제등의 action이 있습니다.
    게시판/블로그외의 모듈에 포인트 기능 연동을 하고 싶을때는 각 기능에 맞는 act값을 추가해주시면 됩니다.
    연결은 ,(콤마)로 해주시면 됩니다.'; @@ -25,6 +25,8 @@ $lang->disable_download = '다운로드 금지'; $lang->about_disable_download = '포인트가 없을 경우 다운로드를 금지하게 합니다. (이미지파일은 제외입니다)'; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = '레벨별 포인트 계산'; $lang->expression = '레벨 변수 i를 사용하여 자바스크립트 수식을 입력하세요. 예: Math.pow(i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = '그룹 연동'; - $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다.'; $lang->about_module_point = '모듈별로 포인트를 지정할 수 있으며 지정되지 않은 모듈은 기본 포인트를 이용하게 됩니다
    모든 점수는 반대 행동을 하였을 경우 원상복귀 됩니다.'; @@ -57,6 +61,7 @@ $lang->cmd_point_member_list = '회원 포인트 목록'; $lang->msg_cannot_download = '포인트가 부족하여 다운로드를 하실 수 없습니다'; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = '포인트 적용중입니다. (%d / %d)'; $lang->point_recal_finished = '포인트 재계산이 모두 완료되었습니다'; diff --git a/modules/point/lang/ru.lang.php b/modules/point/lang/ru.lang.php index 8b13d7199..3585981a9 100644 --- a/modules/point/lang/ru.lang.php +++ b/modules/point/lang/ru.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = 'Запретить скачивание'; $lang->about_disable_download = "Это запретит скачивание файлов, когда не хватает достаточного кол-ва поинтов. (За исключением файлов изображений)"; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = '레벨별 포인트 계산'; $lang->expression = '레벨 변수 i를 사용하여 자바스크립트 수식을 입력하세요. 예: Math.pow(i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = '그룹 연동'; - $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다.'; $lang->about_module_point = "Вы можете установть поинты для каждого модуля, а модули, не имеющие значения будут использовать значение по умолчанию для поинтов.
    Все поинты будут восстановлены при обратном действии."; @@ -58,6 +62,7 @@ $lang->cmd_point_member_list = 'Список поинтов пользователей'; $lang->msg_cannot_download = "У Вас нет достаточного количества поитов, чтобы иметь разрешение скачивать файлы."; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = '포인트 적용중입니다. (%d / %d)'; $lang->point_recal_finished = '포인트 재계산이 모두 완료되었습니다'; diff --git a/modules/point/lang/zh-CN.lang.php b/modules/point/lang/zh-CN.lang.php index a9414178f..52e53b238 100644 --- a/modules/point/lang/zh-CN.lang.php +++ b/modules/point/lang/zh-CN.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = '禁止下载'; $lang->about_disable_download = '没有积分时,将禁止下载。 (图片除外)'; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = '计算级别积分'; $lang->expression = '使用级别变数"i"输入JS数学函数。例: Math.pow(i, 2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '积分初始化。即只保留文章/评论/附件/新会员注册的相关积分项。
    其中,初始化后的新会员注册积分项,将在会员有相关动作(发表主题/评论等)时,才付与其相应的积分。
    此项功能请务必慎用!此项功能只能在数据转移或真的需要初始化所有积分时才可以使用。'; $lang->point_link_group = '用户组绑定'; - $lang->about_point_link_group = '即级别绑定用户组。当级别达到指定级别时,会员所属用户组将自动更新为与其相对应的用户组。只是更新为新的用户组时,之前的默认用户组将自动被删除。'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = '即级别绑定用户组。当级别达到指定级别时,会员所属用户组将自动更新为与其相对应的用户组。'; $lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。
    所有积分在相反动作下恢复原始值。即:发表新帖后再删除得到的积分为0分。'; @@ -57,6 +61,7 @@ $lang->cmd_point_member_list = '会员积分目录'; $lang->msg_cannot_download = '积分不足无法下载!'; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = '计算并应用中(%d / %d)。'; $lang->point_recal_finished = '积分重新计算并应用完毕。'; diff --git a/modules/point/lang/zh-TW.lang.php b/modules/point/lang/zh-TW.lang.php index cf74de6b7..9b6694548 100644 --- a/modules/point/lang/zh-TW.lang.php +++ b/modules/point/lang/zh-TW.lang.php @@ -25,6 +25,8 @@ $lang->disable_download = '禁止下載'; $lang->about_disable_download = '沒有點數時,將禁止下載。(圖片除外)'; + $lang->disable_read_document = '글 열람 금지'; + $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; $lang->level_point_calc = '計算等級點數'; $lang->expression = '使用等級變數"i"輸入JS數學函數。例: Math.pow(i,2) * 90'; @@ -35,7 +37,9 @@ $lang->about_cmd_point_recal = '重置點數。即只保留文章/評論/附加檔案/新會員註冊的相關點數項目。
    其中,重置後的新會員註冊點數,將在會員有相關動作(例如:發表主題/評論等)時,才付與其相對應的點數。
    此項功能請務必慎用!此項功能只能在資料轉移或真的需要重置所有點數時才可以使用。'; $lang->point_link_group = '自動升級'; - $lang->about_point_link_group = '即群組隨等級變化。當等級達到指定等級時,會員所屬群組將自動更新成相對應的群組。但是更新成新的群組時,之前的預設群組將自動被刪除。'; + $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; + $lang->point_group_add_only = '새 그룹만 부여'; + $lang->about_point_link_group = '即群組隨等級變化。當等級達到指定等級時,會員所屬群組將自動更新成相對應的群組。'; $lang->about_module_point = '可以分別對各模組進行點數設置,沒有設置的模組將使用預設值。
    所有動作在反向操作下將恢復原始值。即:發表主題後再刪除得到的點數為零。'; @@ -58,6 +62,7 @@ $lang->cmd_point_member_list = '會員點數列表'; $lang->msg_cannot_download = '點數不夠無法下載!'; + $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; $lang->point_recal_message = '計算並套用中(%d / %d)。'; $lang->point_recal_finished = '點數重新計算並套用完畢。'; diff --git a/modules/point/point.admin.controller.php b/modules/point/point.admin.controller.php index bb7c01e6f..41cf8d58b 100644 --- a/modules/point/point.admin.controller.php +++ b/modules/point/point.admin.controller.php @@ -51,6 +51,10 @@ if($args->disable_download == 'Y') $config->disable_download = 'Y'; else $config->disable_download = 'N'; + // 포인트 미달시 글 열람 금지 여부 체크 + if($args->disable_read_document == 'Y') $config->disable_read_document = 'Y'; + else $config->disable_read_document = 'N'; + // 레벨별 그룹 설정 foreach($args as $key => $val) { if(substr($key, 0, strlen('point_group_')) != 'point_group_') continue; @@ -59,6 +63,7 @@ if(!$level) unset($config->point_group[$group_srl]); else $config->point_group[$group_srl] = $level; } + $config->group_reset = $args->group_reset; // 레벨별 포인트 설정 unset($config->level_step); @@ -142,7 +147,7 @@ function procPointAdminUpdatePoint() { $action = Context::get('action'); $member_srl = Context::get('member_srl'); - $point = Context::get('point'); + $point = Context::get('point'); $oPointController = &getController('point'); return $oPointController->setPoint($member_srl, (int)$point, $action); @@ -162,7 +167,7 @@ // 회원의 포인트 저장을 위한 변수 $member = array(); - + // 게시글 정보를 가져옴 $output = executeQueryArray('point.getDocumentPoint'); if(!$output->toBool()) return $output; @@ -270,6 +275,31 @@ } + /** + * @brief 개별 모듈의 포인트 리셋 + **/ + function procPointAdminReset() { + $module_srl = Context::get('module_srls'); + if(!$module_srl) return new Object(-1, 'msg_invalid_request'); + + // 여러개의 모듈 일괄 설정일 경우 + if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl); + else $module_srl = array($module_srl); + + // 설정 저장 + $oModuleController = &getController('module'); + for($i=0;$imodule = 'point'; + $args->module_srl = $srl; + executeQuery('module.deleteModulePartConfig', $args); + } + + $this->setMessage('success_updated'); + } + /** * @brief 캐시파일 저장 **/ diff --git a/modules/point/point.class.php b/modules/point/point.class.php index 09ee52dc8..78f356bd7 100644 --- a/modules/point/point.class.php +++ b/modules/point/point.class.php @@ -100,6 +100,9 @@ // 추천 / 비추천에 대한 트리거 추가 2008.05.13 haneul $oModuleController->insertTrigger('document.updateVotedCount', 'point', 'controller', 'triggerUpdateVotedCount', 'after'); + // 임시저장글을 정상 저장시 포인트 지급하도록 트리거 추가 2009. 05. 19 zero + $oModuleController->insertTrigger('document.updateDocument', 'point', 'controller', 'triggerUpdateDocument', 'before'); + return new Object(); } @@ -128,6 +131,9 @@ // 추천 / 비추천에 대한 트리거 추가 2008.05.13 haneul if(!$oModuleModel->getTrigger('document.updateVotedCount', 'point', 'controller', 'triggerUpdateVotedCount', 'after')) return true; + // 임시저장글을 정상 저장시 포인트 지급하도록 트리거 추가 2009. 05. 19 zero + if(!$oModuleModel->getTrigger('document.updateDocument', 'point', 'controller', 'triggerUpdateDocument', 'before')) return true; + return false; } @@ -171,6 +177,10 @@ if(!$oModuleModel->getTrigger('document.updateVotedCount', 'point', 'controller', 'triggerUpdateVotedCount', 'after')) $oModuleController->insertTrigger('document.updateVotedCount', 'point', 'controller', 'triggerUpdateVotedCount', 'after'); + // 임시저장글을 정상 저장시 포인트 지급하도록 트리거 추가 2009. 05. 19 zero + if(!$oModuleModel->getTrigger('document.updateDocument', 'point', 'controller', 'triggerUpdateDocument', 'before')) + $oModuleController->insertTrigger('document.updateDocument', 'point', 'controller', 'triggerUpdateDocument', 'before'); + return new Object(0, 'success_updated'); } diff --git a/modules/point/point.controller.php b/modules/point/point.controller.php index 11e76d394..e0a35ccad 100644 --- a/modules/point/point.controller.php +++ b/modules/point/point.controller.php @@ -50,7 +50,7 @@ $member_srl = $obj->member_srl; if(!$member_srl) return new Object(); - // 바로 이전 로그인이 오늘이 아니어야 포인트를 줌 + // 바로 이전 로그인이 오늘이 아니어야 포인트를 줌 if(substr($obj->last_login,0,8)==date("Ymd")) return new Object(); // point 모듈 정보 가져옴 @@ -78,6 +78,9 @@ $member_srl = $obj->member_srl; if(!$module_srl || !$member_srl) return new Object(); + // 임시저장일 경우 포인트를 지급하지 않도록 수정 + if($module_srl == $member_srl) return new Object(); + // point 모듈 정보 가져옴 $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); @@ -102,6 +105,48 @@ return new Object(); } + /** + * @brief 임시저장된 글을 정상 등록시 포인트 적용하는 trigger + * 1.2.3 에서 임시저장시에 포인트 지급되지 않도록 변경됨 + **/ + function triggerUpdateDocument(&$obj) { + $oDocumentModel = &getModel('document'); + $oModuleModel = &getModel('module'); + + $document_srl = $obj->document_srl; + $oDocument = $oDocumentModel->getDocument($document_srl); + + $module_srl = $oDocument->get('module_srl'); + $member_srl = $oDocument->get('member_srl'); + if(!$module_srl || !$member_srl) return new Object(); + + // 임시저장된 것이 아니면 return + if($module_srl != $member_srl) return new Object(); + + // point 모듈 정보 가져옴 + $config = $oModuleModel->getModuleConfig('point'); + $module_config = $oModuleModel->getModulePartConfig('point',$obj->module_srl); + + // 대상 회원의 포인트를 구함 + $oPointModel = &getModel('point'); + $cur_point = $oPointModel->getPoint($member_srl, true); + + $point = $module_config['insert_document']; + if(!isset($point)) $point = $config->insert_document; + $cur_point += $point; + + // 첨부파일 등록에 대한 포인트 추가 + $point = $module_config['upload_file']; + if(!isset($point)) $point = $config->upload_file; + if($obj->uploaded_count) $cur_point += $point * $obj->uploaded_count; + + // 포인트 증감 + $this->setPoint($member_srl,$cur_point); + + return new Object(); + + } + /** * @brief 게시글 삭제 이전에 게시글의 댓글에 대한 포인트 감소 처리를 하는 trigger **/ @@ -137,11 +182,11 @@ $cnt = count($output->data); for($i=0;$i<$cnt;$i++) { if($output->data[$i]->member_srl<1) continue; - $member_srls[$output->data[$i]->member_srl] = $output->data[$i]->count; + $member_srls[abs($output->data[$i]->member_srl)] = $output->data[$i]->count; } // 원글 작성 회원의 번호는 제거 - if($member_srl) unset($member_srls[$member_srl]); + if($member_srl) unset($member_srls[abs($member_srl)]); if(!count($member_srls)) return new Object(); // 각 회원들을 모두 돌면서 포인트 감소 @@ -211,7 +256,7 @@ $document_srl = $obj->document_srl; $oDocumentModel = &getModel('document'); $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists() || $oDocument->get('member_srl')==$member_srl) return new Object(); + if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl)) return new Object(); // point 모듈 정보 가져옴 $oModuleModel = &getModel('module'); @@ -236,17 +281,25 @@ * @brief 댓글 삭제 포인트 적용 trigger **/ function triggerDeleteComment(&$obj) { + $oModuleModel = &getModel('module'); + $oPointModel = &getModel('point'); + $oDocumentModel = &getModel('document'); + $module_srl = $obj->module_srl; - $member_srl = $obj->member_srl; + $member_srl = abs($obj->member_srl); + $document_srl = $obj->document_srl; if(!$module_srl || !$member_srl) return new Object(); + // 원글을 가져옴 (원글이 없거나 원글이 자신의 글이라면 포인트 적용 하지 않음) + $oDocument = $oDocumentModel->getDocument($document_srl); + if(!$oDocument->isExists()) return new Object(); + if($oDocument->get('member_srl')==$member_srl) return new Object(); + // point 모듈 정보 가져옴 - $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); $module_config = $oModuleModel->getModulePartConfig('point', $module_srl); // 대상 회원의 포인트를 구함 - $oPointModel = &getModel('point'); $cur_point = $oPointModel->getPoint($member_srl, true); $point = $module_config['insert_comment']; @@ -311,7 +364,7 @@ if(!$module_srl) return new Object(); // 자신의 올린 파일이면 패스 - if($obj->member_srl == $member_srl) return new Object(); + if(abs($obj->member_srl) == abs($member_srl)) return new Object(); $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); @@ -346,7 +399,7 @@ if(!$module_srl) return new Object(); // 자신의 올린 파일이면 패스 - if($obj->member_srl == $member_srl) return new Object(); + if(abs($obj->member_srl) == abs($member_srl)) return new Object(); // point 모듈 정보 가져옴 $oModuleModel = &getModel('module'); @@ -370,42 +423,62 @@ /** * @brief 조회수 증가시 포인트 적용 + * 포인트가 없을때 조회를 하지 못하는 기능의 적용도 실행 **/ function triggerUpdateReadedCount(&$obj) { - // 로그인 상태일때만 실행 - $logged_info = Context::get('logged_info'); - if(!$logged_info->member_srl) return new Object(); - $member_srl = $logged_info->member_srl; - $module_srl = $obj->get('module_srl'); - - // 자신의 글이면 패스 - if($obj->get('member_srl') == $member_srl) return new Object(); - - // point 모듈 정보 가져옴 $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('point'); - $module_config = $oModuleModel->getModulePartConfig('point', $module_srl); - - // 대상 회원의 포인트를 구함 $oPointModel = &getModel('point'); - $cur_point = $oPointModel->getPoint($member_srl, true); - // 포인트를 구해옴 + // 접속자의 정보 구함 + $logged_info = Context::get('logged_info'); + $member_srl = $logged_info->member_srl; + + // 원글의 회원 번호 구함 + $target_member_srl = abs($obj->get('member_srl')); + + // 원글을 적은 이와 동일하면 조회수 올리지 않고 pass + if($target_member_srl == $member_srl) return new Object(); + + // 모듈별 point 정보 가져옴 + $config = $oModuleModel->getModuleConfig('point'); + $module_config = $oModuleModel->getModulePartConfig('point', $obj->get('module_srl')); + + // 조회 포인트를 구해옴 $point = $module_config['read_document']; if(!isset($point)) $point = $config->read_document; + // 조회 포인트가 없으면 pass + if(!$point) return new Object(); + + // 회원일 경우 읽은 적이 있으면 그냥 pass 하고 그렇지 않으면 현재 포인트 구함 + if($member_srl) { + $args->member_srl = $member_srl; + $args->document_srl = $obj->document_srl; + $output = executeQuery('document.getDocumentReadedLogInfo', $args); + if($output->data->count) return new Object(); + $cur_point = $oPointModel->getPoint($member_srl, true); + } else { + $cur_point = 0; + } + + // 포인트 모듈 기본 설정 가져옴 + $config = $oModuleModel->getModuleConfig('point'); + + // 조회 포인트가 -(마이너스)일때 현재 포인트와 비교 + if($config->disable_read_document == 'Y' && $point < 0 && abs($point)>$cur_point) { + $obj->add('content', sprintf(Context::getLang('msg_disallow_by_point'), abs($point), $cur_point)); + return new Object(); + } + + // 로그인 사용자가 아니라면 pass + if(!$logged_info->member_srl) return new Object(); + // 조회 포인트가 없으면 패스 if(!$point) return new Object(); - // 읽은 기록이 있는지 확인 - $args->member_srl = $member_srl; - $args->document_srl = $obj->document_srl; - $output = executeQuery('document.getDocumentReadedLogInfo', $args); - if($output->data->count) return new Object(); - // 읽은 기록이 없으면 기록 남김 $output = executeQuery('document.insertDocumentReadedLog', $args); - + // 포인트 증감 $cur_point += $point; $this->setPoint($member_srl,$cur_point); @@ -446,10 +519,11 @@ return new Object(); } - /** + /** * @brief 포인트 설정 **/ function setPoint($member_srl, $point, $mode = null) { + $member_srl = abs($member_srl); $mode_arr = array('add', 'minus', 'update', 'signup'); if(!$mode || !in_array($mode,$mode_arr)) $mode = 'update'; @@ -467,26 +541,28 @@ $args->member_srl = $member_srl; $args->point = $prev_point; - if($mode == 'add') { - $args->point += $point; - } elseif($mode == 'minus') { - $args->point -= $point; - if($args->point < 0) $args->point = 0; - } elseif($mode == 'update') { - $args->point = $point; - if($args->point < 0) $args->point = 0; + switch($mode) { + + case 'add' : + $args->point += $point; + break; + case 'minus' : + $args->point -= $point; + break; + case 'update' : + $args->point = $point; + break; + case 'signup' : + $args->point = $point; + break; } + if($args->point < 0) $args->point = 0; $point = $args->point; - - // 포인트가 있는지 체크 + // 포인트가 있으면 update, 없으면 insert $oPointModel = &getModel('point'); - if($oPointModel->isExistsPoint($member_srl)) { - executeQuery("point.updatePoint", $args); - } else { - if($mode != 'signup') $args->point += (int)$config->signup_point; - executeQuery("point.insertPoint", $args); - } + if($oPointModel->isExistsPoint($member_srl)) executeQuery("point.updatePoint", $args); + else executeQuery("point.insertPoint", $args); // 새로운 레벨을 구함 $level = $oPointModel->getLevel($point, $config->level_step); @@ -498,37 +574,38 @@ $point_group = $config->point_group; // 포인트 그룹 정보가 있을때 시행 - if($point_group && is_array($point_group) && count($point_group) ) { + if($point_group && is_array($point_group) && count($point_group) ) { // 기본 그룹을 구함 $default_group = $oMemberModel->getDefaultGroup(); - // 포인트 그룹에 속한 그룹과 새로 부여 받을 그룹을 구함 - $point_group_list = array(); - $current_group_srl = 0; + // 제거될 그룹과 새로 부여 받을 그룹을 구함 + $del_group_list = array(); + $new_group_srl = 0; asort($point_group); // 포인트 그룹 설정을 돌면서 현재 레벨까지 체크 foreach($point_group as $group_srl => $target_level) { - $point_group_list[] = $group_srl; + if($config->group_reset != 'N') $del_group_list[] = $group_srl; if($target_level <= $level) { - $current_group_srl = $group_srl; + $new_group_srl = $group_srl; } } - $point_group_list[] = $default_group->group_srl; // 만약 새로운 그룹이 없다면 기본 그룹을 부여 받음 - if(!$current_group_srl) $current_group_srl = $default_group->group_srl; + if(!$new_group_srl) $new_group_srl = $default_group->group_srl; - // 일단 기존의 그룹을 모두 삭제 - $del_group_args->member_srl = $member_srl; - $del_group_args->group_srl = implode(',',$point_group_list); - $del_group_output = executeQuery('point.deleteMemberGroup', $del_group_args); + // 연동 그룹 제거 + if($config->group_reset != 'N' && $del_group_list && count($del_group_list)) { + $del_group_args->member_srl = $member_srl; + $del_group_args->group_srl = implode(',', $del_group_list); + $del_group_output = executeQuery('point.deleteMemberGroup', $del_group_args); + } // 새로운 그룹을 부여 $new_group_args->member_srl = $member_srl; - $new_group_args->group_srl = $current_group_srl; + $new_group_args->group_srl = $new_group_srl; $new_group_output = executeQuery('member.addMemberToGroup', $new_group_args); } } diff --git a/modules/point/point.model.php b/modules/point/point.model.php index 01f929f56..41842c614 100644 --- a/modules/point/point.model.php +++ b/modules/point/point.model.php @@ -17,6 +17,7 @@ * @brief 포인트 정보가 있는지 체크 **/ function isExistsPoint($member_srl) { + $member_srl = abs($member_srl); $args->member_srl = $member_srl; $output = executeQuery('point.getPoint', $args); if($output->data->member_srl == $member_srl) return true; @@ -27,6 +28,7 @@ * @brief 포인트를 구해옴 **/ function getPoint($member_srl, $from_db = false) { + $member_srl = abs($member_srl); $path = sprintf('./files/member_extra_info/point/%s',getNumberingPath($member_srl)); if(!is_dir($path)) FileHandler::makeDir($path); $cache_filename = sprintf('%s%d.cache.txt', $path, $member_srl); diff --git a/modules/point/tpl/config.html b/modules/point/tpl/config.html index 0091ce1b6..4d2d464e7 100644 --- a/modules/point/tpl/config.html +++ b/modules/point/tpl/config.html @@ -92,6 +92,16 @@
    +

    {$lang->disable_read_document}

    + + + + +
    + disable_read_document=='Y')-->checked="checked" /> +

    {$lang->about_disable_read_document}

    +
    + - - + + - + + + diff --git a/modules/point/tpl/js/point_admin.js b/modules/point/tpl/js/point_admin.js index df916d43b..dc123c054 100644 --- a/modules/point/tpl/js/point_admin.js +++ b/modules/point/tpl/js/point_admin.js @@ -60,3 +60,11 @@ function updatePoint(member_srl, action) procFilter(hF, update_point); } + +function doPointReset(module_srls) { + var params = new Array(); + var response_tags = new Array('error','message'); + params['module_srls'] = module_srls; + + exec_xml('point','procPointAdminReset',params,function(ret_obj) {alert(ret_obj['message']);}, response_tags); +} diff --git a/modules/point/tpl/point_module_config.html b/modules/point/tpl/point_module_config.html index 63a6bcb23..43bbea74e 100644 --- a/modules/point/tpl/point_module_config.html +++ b/modules/point/tpl/point_module_config.html @@ -1,4 +1,5 @@ + @@ -26,7 +27,10 @@ - +
    @@ -115,11 +125,19 @@

    {$lang->about_point_link_group}

    + +
    +

    {$lang->about_point_link_group}

    {$module_config['point_name']}
    + + +
    diff --git a/modules/rss/rss.view.php b/modules/rss/rss.view.php index 9d61ec66f..8ff51e31b 100644 --- a/modules/rss/rss.view.php +++ b/modules/rss/rss.view.php @@ -23,6 +23,8 @@ /** * 피드 출력을 위한 변수 설정 **/ + $site_module_info = Context::get('site_module_info'); + $site_srl = $site_module_info->site_srl; $mid = Context::get('mid'); ///< 대상 모듈 id, 없으면 전체로 $start_date = (int)Context::get('start_date'); $end_date = (int)Context::get('end_date'); @@ -46,7 +48,7 @@ // mid 가 선택되어 있지 않으면 전체 } else { if($total_config->use_total_feed != 'N') { - $rss_config = $oModuleModel->getModulePartConfigs('rss'); + $rss_config = $oModuleModel->getModulePartConfigs('rss', $site_srl); if($rss_config) { foreach($rss_config as $module_srl => $config) { if($config && $config->open_rss != 'N' && $config->open_total_feed != 'T_N') { diff --git a/modules/springnote/lang/jp.lang.php b/modules/springnote/lang/jp.lang.php index 8e2f6855f..9f033a8f9 100644 --- a/modules/springnote/lang/jp.lang.php +++ b/modules/springnote/lang/jp.lang.php @@ -1,6 +1,6 @@ + + + + + + + + diff --git a/modules/tag/queries/getAllTagList.xml b/modules/tag/queries/getAllTagList.xml new file mode 100644 index 000000000..c57852419 --- /dev/null +++ b/modules/tag/queries/getAllTagList.xml @@ -0,0 +1,12 @@ + + +
    + + + + + + + + + diff --git a/modules/tag/queries/getDocumentSrlByTag.xml b/modules/tag/queries/getDocumentSrlByTag.xml new file mode 100644 index 000000000..1ed8cc737 --- /dev/null +++ b/modules/tag/queries/getDocumentSrlByTag.xml @@ -0,0 +1,12 @@ + + +
    + + + + + + + + + diff --git a/modules/tag/queries/getDocumentsTagList.xml b/modules/tag/queries/getDocumentsTagList.xml new file mode 100644 index 000000000..b33c2250a --- /dev/null +++ b/modules/tag/queries/getDocumentsTagList.xml @@ -0,0 +1,19 @@ + + +
    + + + + + + + + + + + + + + + + diff --git a/modules/tag/tag.model.php b/modules/tag/tag.model.php index 606058384..7b5ef880e 100644 --- a/modules/tag/tag.model.php +++ b/modules/tag/tag.model.php @@ -28,11 +28,60 @@ if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl); else $args->module_srl = $obj->module_srl; $args->list_count = $obj->list_count; + $args->count = $obj->sort_index; $output = executeQueryArray('tag.getTagList', $args); if(!$output->toBool()) return $output; return $output; } + + + /** + * @brief tag로 document_srl를 가져오기 + **/ + function getDocumentSrlByTag($obj){ + if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl); + else $args->module_srl = $obj->module_srl; + + $args->tag = $obj->tag; + $output = executeQueryArray('tag.getDocumentSrlByTag', $args); + if(!$output->toBool()) return $output; + + return $output; + } + + /** + * @brief document 에서 사용된 tag 가져오기 + **/ + function getDocumentsTagList($obj){ + if(is_array($obj->document_srl)) $args->document_srl = implode(',', $obj->document_srl); + else $args->document_srl = $obj->document_srl; + + $output = executeQueryArray('tag.getDocumentsTagList', $args); + if(!$output->toBool()) return $output; + + return $output; + } + + /** + * @brief 특정tag과 함께 사용된 tag목록 + **/ + function getTagWithUsedList($obj){ + if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl); + else $args->module_srl = $obj->module_srl; + + $args->tag = $obj->tag; + $output = $this->getDocumentSrlByTag($args); + $document_srl = array(); + + if($output->data){ + foreach($output->data as $k => $v) $document_srl[] = $v->document_srl; + } + unset($args); + $args->document_srl = $document_srl; + $output = $this->getDocumentsTagList($args); + return $output; + } } ?> diff --git a/modules/trackback/trackback.controller.php b/modules/trackback/trackback.controller.php index 73276efce..2be76a994 100644 --- a/modules/trackback/trackback.controller.php +++ b/modules/trackback/trackback.controller.php @@ -58,7 +58,7 @@ // 엮인글 발송 링크 추가 $oDocumentController = &getController('document'); - $url = getUrl('module','trackback','act','dispTrackbackSend','document_srl', $document_srl); + $url = getUrl('','module','trackback','act','dispTrackbackSend','document_srl', $document_srl); $oDocumentController->addDocumentPopupMenu($url,'cmd_send_trackback','./modules/document/tpl/icons/send_trackback.gif','popup'); return new Object(); @@ -143,8 +143,7 @@ $obj->module_srl = $oDocument->get('module_srl'); } - - // 엮인글를 입력 + // 엮인글을 입력 $obj->trackback_srl = getNextSequence(); $obj->list_order = $obj->trackback_srl*-1; $output = executeQuery('trackback.insertTrackback', $obj); @@ -171,6 +170,9 @@ // 원본글에 알림(notify_message)가 설정되어 있으면 메세지 보냄 if(!$manual_inserted) $oDocument->notify(Context::getLang('trackback'), $obj->excerpt); + // trigger 호출 (after) + $output = ModuleHandler::triggerCall('trackback.insertTrackback', 'after', $obj); + if(!$output->toBool()) return $output; return new Object(); } @@ -187,6 +189,10 @@ if($trackback->data->trackback_srl != $trackback_srl) return new Object(-1, 'msg_invalid_request'); $document_srl = $trackback->data->document_srl; + // trigger 호출 (before) + $output = ModuleHandler::triggerCall('trackback.deleteTrackback', 'before', $trackback); + if(!$output->toBool()) return $output; + // document model 객체 생성 $oDocumentModel = &getModel('document'); @@ -207,6 +213,10 @@ $output = $oDocumentController->updateTrackbackCount($document_srl, $trackback_count); $output->add('document_srl', $document_srl); + // trigger 호출 (before) + $output = ModuleHandler::triggerCall('trackback.deleteTrackback', 'after', $trackback); + if(!$output->toBool()) return $output; + return $output; } @@ -227,9 +237,12 @@ * 발송 후 결과처리는 하지 않는 구조임 **/ function sendTrackback($oDocument, $trackback_url, $charset) { + $oModuleController = &getController('module'); + // 발송할 정보를 정리 $http = parse_url($trackback_url); $obj->blog_name = str_replace(array('<','>','&','"'), array('<','>','&','"'), Context::getBrowserTitle()); + $oModuleController->replaceDefinedLangCode($obj->blog_name); $obj->title = $oDocument->getTitleText(); $obj->excerpt = $oDocument->getSummary(200); $obj->url = getUrl('','document_srl',$oDocument->document_srl); diff --git a/modules/trackback/trackback.model.php b/modules/trackback/trackback.model.php index bdabf8878..ce32bf0d6 100644 --- a/modules/trackback/trackback.model.php +++ b/modules/trackback/trackback.model.php @@ -89,7 +89,7 @@ if(is_array($obj->module_srl)) $args->module_srl = implode(',', $obj->module_srl); else $args->module_srl = $obj->module_srl; $args->list_count = $obj->list_count; - $args->site_srl = (int)$obj->site_srl; + if($obj->site_srl) $args->site_srl = (int)$obj->site_srl; $args->sort_index = 'trackbacks.list_order'; $args->order = 'asc'; diff --git a/modules/widget/conf/info.xml b/modules/widget/conf/info.xml index 70e837c3f..e142eef6d 100644 --- a/modules/widget/conf/info.xml +++ b/modules/widget/conf/info.xml @@ -6,14 +6,14 @@ WidgetWidgetВиджеты - 控件 + Widget위젯 관리 모듈控件管理模块。ウィジェット管理モジュールModule for managing widgets.Módulo para el manejo de widgets.Модуль для управления виджетами. - 控件管理模組。 + Widget管理模組。0.12007-02-28construction diff --git a/modules/widget/lang/zh-TW.lang.php b/modules/widget/lang/zh-TW.lang.php index 308fc9dc5..7222e084d 100644 --- a/modules/widget/lang/zh-TW.lang.php +++ b/modules/widget/lang/zh-TW.lang.php @@ -2,16 +2,16 @@ /** * @file modules/widget/lang/zh-TW.lang.php * @author zero 翻譯:royallin - * @brief 控件(widget)模組正體中文語言 + * @brief Widget模組正體中文語言 **/ $lang->cmd_generate_code = '建立原始碼'; - $lang->widget_name = '控件名稱'; - $lang->widget_maker = '控件作者'; + $lang->widget_name = 'Widget名稱'; + $lang->widget_maker = 'Widget作者'; $lang->widget_license = '版權'; - $lang->widget_history = '更新事項'; - $lang->widget_info = '控件資料'; + $lang->widget_history = '更新紀錄'; + $lang->widget_info = 'Widget資料'; $lang->widget_code = '原始碼'; $lang->widget_cache = '暫存'; @@ -26,26 +26,26 @@ $lang->widget_margin_right = '右'; $lang->widget_margin_bottom = '下'; $lang->widget_margin_left= '左'; - $lang->about_widget_fix_width = '選擇此項將固定控件顯示寬度。'; + $lang->about_widget_fix_width = '選擇此項將固定Widget顯示寬度。'; $lang->about_widget_width = '請輸入寬度大小。'; - $lang->about_widget_position = '想要橫向顯示多個控件時,請選擇位置。'; - $lang->about_widget_margin = '想要橫向顯示多個控件時,請設置邊距。'; + $lang->about_widget_position = '想要橫向顯示多個Widget時,請選擇位置。'; + $lang->about_widget_margin = '想要橫向顯示多個Widget時,請設置邊距。'; $lang->about_widget_cache = '指定的時間內可以利用已暫存的資料。'; $lang->generated_code = '已建立的原始碼'; - $lang->widgetstyle= '控件樣式'; + $lang->widgetstyle= 'Widget樣式'; - $lang->msg_widget_is_not_exists = '找不到%s控件!'; - $lang->msg_widget_object_is_null = '無法建立%s控件目標!'; - $lang->msg_widget_proc_is_null = '無法執行%s控件的 proc()!'; - $lang->msg_widget_skin_is_null = '請選擇一個可正常使用的控件面板'; + $lang->msg_widget_is_not_exists = '找不到 %s Widget!'; + $lang->msg_widget_object_is_null = '無法建立 %s Widget目標!'; + $lang->msg_widget_proc_is_null = '無法執行 %s Widget的 proc()!'; + $lang->msg_widget_skin_is_null = '請選擇一個可正常使用的Widget面板'; - $lang->about_widget_code = '輸入所選控件所需要的各項資料後,按『建立原始碼』按鈕,即可在頁面下方獲得運用在版面設計中的部分原始碼。'; - $lang->about_widget_code_in_page = '輸入下列各項必要資料後,按『建立原始碼』按鈕,即可把控件插入到頁面當中。'; - $lang->about_widget = "控件是在版面或頁面模組中使用的一種元件。\n不僅可以連結內部模組或外部Open API,而且通過設置可以有許多種用途。\n即使不使用XE的頁面或版面設計模組,也可以通過『建立原始碼』功能直接新增相對應控件。"; + $lang->about_widget_code = '輸入所選Widget所需要的各項資料後,按『建立原始碼』按鈕,即可在頁面下方獲得運用在版面設計中的部分原始碼。'; + $lang->about_widget_code_in_page = '輸入下列各項必要資料後,按『建立原始碼』按鈕,即可把Widget插入到頁面當中。'; + $lang->about_widget = "Widget是在版面或頁面模組中使用的一種元件。\n不僅可以連結內部模組或外部Open API,而且通過設置可以有許多種用途。\n即使不使用XE的頁面或版面設計模組,也可以通過『建立原始碼』功能直接新增相對應Widget。"; $lang->cmd_content_insert = "新增內容"; - $lang->cmd_box_widget_insert = "新增控件箱"; + $lang->cmd_box_widget_insert = "新增Widget Box"; $lang->cmd_remove_all_widgets = "全部清空"; $lang->cmd_widget_size = "大小"; diff --git a/modules/widget/tpl/css/widget.css b/modules/widget/tpl/css/widget.css index 4bbf47686..8a46287c3 100644 --- a/modules/widget/tpl/css/widget.css +++ b/modules/widget/tpl/css/widget.css @@ -49,8 +49,6 @@ #pageSizeLayer .color_input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:44px; } #pageSizeLayer .submit { width:90%; border:1px solid #DEDEDE; background-color:#FFFFFF;} -div.editor { width:700px; } - .help { padding:5px 0; background-color:#EFEFEF; border-top:1px solid #CCCCCC; } ul.midCommand { float:left; margin:0 0 0 10px;; padding:0; *zoom:1; } diff --git a/modules/widget/tpl/js/widget.js b/modules/widget/tpl/js/widget.js index e71b7793e..5b76b6e6b 100644 --- a/modules/widget/tpl/js/widget.js +++ b/modules/widget/tpl/js/widget.js @@ -244,7 +244,7 @@ function doSyncPageContent() { } } - editorStart(1, "module_srl", "content", false, 400 ); + if(typeof(editorStart)!='undefined') editorStart(1, "module_srl", "content", false, 400 ); //editor_upload_start(1); setFixedPopupSize(); diff --git a/modules/widget/widget.admin.view.php b/modules/widget/widget.admin.view.php index 79364df22..93f03aecb 100644 --- a/modules/widget/widget.admin.view.php +++ b/modules/widget/widget.admin.view.php @@ -30,8 +30,6 @@ * @brief 내용 직접 입력 위젯 팝업창 내용을 꾸힘 **/ function dispWidgetAdminAddContent() { - $this->setLayoutFile("popup_layout"); - $module_srl = Context::get('module_srl'); if(!$module_srl) return $this->stop("msg_invalid_request"); @@ -46,20 +44,12 @@ // 에디터 모듈의 getEditor를 호출하여 세팅 $oEditorModel = &getModel('editor'); - $option->primary_key_name = 'module_srl'; - $option->content_key_name = 'content'; - $option->allow_fileupload = true; - $option->enable_autosave = false; - $option->enable_default_component = true; - $option->enable_component = true; - $option->resizable = false; - $option->height = 200; - $editor = $oEditorModel->getEditor($module_srl, $option); + $editor = $oEditorModel->getModuleEditor('document',$module_srl, $module_srl,'module_srl','content'); Context::set('editor', $editor); - - + $this->setLayoutFile("popup_layout"); $this->setTemplateFile('add_content_widget'); + } } diff --git a/modules/widget/widget.controller.php b/modules/widget/widget.controller.php index 95560f8ae..956d631d9 100644 --- a/modules/widget/widget.controller.php +++ b/modules/widget/widget.controller.php @@ -501,6 +501,10 @@ $body = base64_decode($args->body); } + // 에디터컴포넌트 변경 + $oEditorController = &getController('editor'); + $body = $oEditorController->transComponent($body); + $widget_content_header = sprintf('
    ', $args->id, $style, $inner_style); $widget_content_body = $body; $widget_content_footer = '
    '; diff --git a/modules/wiki/lang/jp.lang.php b/modules/wiki/lang/jp.lang.php index 027de0e44..0c7bf6018 100644 --- a/modules/wiki/lang/jp.lang.php +++ b/modules/wiki/lang/jp.lang.php @@ -14,5 +14,5 @@ $lang->about_use_comment = 'コメント機能をオン・オフを設定します。'; $lang->contributors = '投稿者'; $lang->notice_old_revision = '過去のバージョンです。'; - $lang->restore = 'Restore'; + $lang->restore = '復元'; ?> diff --git a/modules/wiki/lang/ko.lang.php b/modules/wiki/lang/ko.lang.php index 4e0a0eafa..cbc75061a 100644 --- a/modules/wiki/lang/ko.lang.php +++ b/modules/wiki/lang/ko.lang.php @@ -1,6 +1,6 @@ XE Default Skin XE维基默认皮肤 XE維基預設面板 - XE基本スキン + XEデフォルトスキン XE Default Skin @@ -14,38 +14,40 @@ XE維基預設面板 - XE基本スキン + XEデフォルトスキン 0.1 2009-01-31 - haneul + haneul + haneul haneul haneul - haneul - GPL - - - 제목 - 제목을 적어주세요. - Plase input the title. - - - 부제목 - Subtitle - 제목 옆에 나타날 부제목을 적어주세요. - Please input the subtitle which will be displayed beside title. - - - 상세 설명 - Description - 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. - You may input description which will be displayed under the title. - - + 제목 + 제목 + タイトル + 제목 + 標題 + 제목을 적어주세요. Plase input the title. タイトルを入力して下さい。 + 제목을 적어주세요. + 請輸入標題。 + 부제목 Subtitle サブタイトル + 부제목 + 副標題 + 제목 옆에 나타날 부제목을 적어주세요. Please input the subtitle which will be displayed beside title. タイトルの隣りに表示されるサブタイトルを入力して下さい。 + 제목 옆에 나타날 부제목을 적어주세요. + 請輸入顯示在標題旁的副標題。 + 상세 설명 + Description 詳細 + 상세 설명 + 說明 + 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. You may input description which will be displayed under the title. タイトルの下に表示される説明文を入力して下さい。 + 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. + 請輸入顯示在標題下方的說明。 + diff --git a/modules/wiki/wiki.view.php b/modules/wiki/wiki.view.php index 5a30c27fb..c872585f5 100644 --- a/modules/wiki/wiki.view.php +++ b/modules/wiki/wiki.view.php @@ -50,7 +50,6 @@ $entry = $oDocument->getTitleText(); Context::set('entry',$entry); $output = $oDocumentModel->getHistories($document_srl, 10, $page); - debugPrint($output); if(!$output->toBool() || !$output->data) { Context::set('histories', array()); diff --git a/tests/index.php b/tests/index.php index 13960f883..1f093d268 100644 --- a/tests/index.php +++ b/tests/index.php @@ -1,6 +1,9 @@ mid = $tmp_mid[0]; } - if($args->mid) $args->srl = $oModuleModel->getModuleSrlByMid($args->mid); + if($args->mid) { + $args->srl = $oModuleModel->getModuleSrlByMid($args->mid); + if(is_array($args->srl)) { + $args->srl = $args->srl[0]; + } + } $obj->module_srl = $args->srl; diff --git a/widgets/category/skins/default/category.html b/widgets/category/skins/default/category.html index d7e4e8b45..a7749648b 100644 --- a/widgets/category/skins/default/category.html +++ b/widgets/category/skins/default/category.html @@ -1,40 +1,49 @@ - -{@ $_pDepth = 0;} - - - - -
    black"> -
    - {$widget_info->total_title}{$widget_info->module_info->browser_title} ({$widget_info->total_document_count}) -
      - - - - -
    - - {@ $_pDepth = $val->depth} - - -
  • - - - - - - - - {$val->text} - ({$val->document_count}) - - - {@$_pDepth++} -
      - - - - -
    -
  • -
    + + +{@ $_pDepth = 0;} + + + +
    black"> +
    + + + {$widget_info->total_title} + + {$widget_info->module_info->browser_title} + + ({$widget_info->total_document_count}) +
      + + + +
    + + + {@ $_pDepth = $val->depth} + +
  • + + + + + + + + {$val->text} + + ({$val->document_count}) + + + {@$_pDepth++} +
      + + + + + +
    + + +
  • +
    diff --git a/widgets/category/skins/default/css/widget.css b/widgets/category/skins/default/css/widget.css index 2f9cd497e..f5c916f1b 100644 --- a/widgets/category/skins/default/css/widget.css +++ b/widgets/category/skins/default/css/widget.css @@ -1,70 +1,70 @@ -@charset "utf-8"; - -/* Widget Tree */ -.widgetTree { margin-top:10px;} -.widgetTree a.title { background:url(../img/white/folder.gif) no-repeat left top; padding-left:20px;} -.widgetTree a.strong { font-weight:bold; } -.widgetTree span { font-size:9px; font-family:tahoma; padding:0; margin:0; color:#999;} -.widgetTree ul span { margin-left:15px; } -.widgetTree *{ margin:0; padding:0; font-size:12px;} -.widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} -.widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} -.widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetTree ul li a, -.widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} -.widgetTree ul li a {text-decoration:none; } -.widgetTree ul li a.selected {font-weight:bold;} -.widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} -.widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} -.widgetTree ul li ul li{ display:none;} -.widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} -.widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} -.widgetTree ul li.nav_tree_on ul{ display:block;} -.widgetTree ul li.nav_tree_on ul li{ display:block;} -.widgetTree ul li.nav_tree_off ul{ display:none;} -.widgetTree ul li.nav_tree_off ul li{ display:none;} -.widgetTree .icon{ position:relative; left:16px;} - -/* widgetTree */ -.widgetTree{ color:#333;} -.widgetTree a{ color:#333; text-decoration:none;} - -/* Widget Tree */ -.widgetTree ul{ background:url(../img/white/lineTreeVr.gif) repeat-y 0 -1px;} -.widgetTree ul li{ background:url(../img/white/lineTreeHr.gif) no-repeat 1px 5px !important;} -.widgetTree ul li button{ background:url(../img/white/buttonTreeCollapse.gif) no-repeat;} -.widgetTree ul li.nav_tree_last{ background:url(../img/white/lineTreeLastHr.gif) no-repeat 0 5px !important;} - -.widgetContainer.black .widgetTree { margin-top:10px;} -.widgetContainer.black .widgetTree a.title { background:url(../img/black/folder.gif) no-repeat left top; padding-left:20px;} -.widgetContainer.black .widgetTree span { font-size:9px; font-family:tahoma; padding:0; margin:0; color:#333;} -.widgetContainer.black .widgetTree ul span { margin-left:15px; } -.widgetContainer.black .widgetTree *{ margin:0; padding:0; font-size:12px;} -.widgetContainer.black .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} -.widgetContainer.black .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} -.widgetContainer.black .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetContainer.black .widgetTree ul li a, -.widgetContainer.black .widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} -.widgetContainer.black .widgetTree ul li a {text-decoration:none; } -.widgetContainer.black .widgetTree ul li a.selected {font-weight:bold;} -.widgetContainer.black .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} -.widgetContainer.black .widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} -.widgetContainer.black .widgetTree ul li ul li{ display:none;} -.widgetContainer.black .widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} -.widgetContainer.black .widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} -.widgetContainer.black .widgetTree ul li.nav_tree_on ul{ display:block;} -.widgetContainer.black .widgetTree ul li.nav_tree_on ul li{ display:block;} -.widgetContainer.black .widgetTree ul li.nav_tree_off ul{ display:none;} -.widgetContainer.black .widgetTree ul li.nav_tree_off ul li{ display:none;} -.widgetContainer.black .widgetTree .icon{ position:relative; left:16px;} - -/* widgetTree */ -.widgetContainer.black .widgetTree{ color:#999;} -.widgetContainer.black .widgetTree a { color:#999; text-decoration:none;} - -/* Widget Tree */ -.widgetContainer.black .widgetTree ul{ background:url(../img/black/lineTreeVr.gif) repeat-y 0 -1px;} -.widgetContainer.black .widgetTree ul li{ background:url(../img/black/lineTreeHr.gif) no-repeat 1px 5px !important;} -.widgetContainer.black .widgetTree ul li button{ background:url(../img/black/buttonTreeCollapse.gif) no-repeat;} -.widgetContainer.black .widgetTree ul li.nav_tree_last{ background:url(../img/black/lineTreeLastHr.gif) no-repeat 0 5px !important;} - +@charset "utf-8"; + +/* Widget Tree */ +.widgetTree { margin-top:10px;} +.widgetTree a.all { background:url(../img/white/folder.gif) no-repeat left top; padding-left:20px;} +.widgetTree a.strong { font-weight:bold; } +.widgetTree span { font-size:9px; font-family:tahoma; padding:0; margin:0; color:#999;} +.widgetTree ul span { margin-left:15px; } +.widgetTree *{ margin:0; padding:0; font-size:12px;} +.widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} +.widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} +.widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} +.widgetTree ul li a, +.widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} +.widgetTree ul li a {text-decoration:none; } +.widgetTree ul li a.selected {font-weight:bold;} +.widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} +.widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} +.widgetTree ul li ul li{ display:none;} +.widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} +.widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} +.widgetTree ul li.nav_tree_on ul{ display:block;} +.widgetTree ul li.nav_tree_on ul li{ display:block;} +.widgetTree ul li.nav_tree_off ul{ display:none;} +.widgetTree ul li.nav_tree_off ul li{ display:none;} +.widgetTree .icon{ position:relative; left:16px;} + +/* widgetTree */ +.widgetTree{ color:#333;} +.widgetTree a{ color:#333; text-decoration:none;} + +/* Widget Tree */ +.widgetTree ul{ background:url(../img/white/lineTreeVr.gif) repeat-y 0 -1px;} +.widgetTree ul li{ background:url(../img/white/lineTreeHr.gif) no-repeat 1px 5px !important;} +.widgetTree ul li button{ background:url(../img/white/buttonTreeCollapse.gif) no-repeat;} +.widgetTree ul li.nav_tree_last{ background:url(../img/white/lineTreeLastHr.gif) no-repeat 0 5px !important;} + +.widgetContainer.black .widgetTree { margin-top:10px;} +.widgetContainer.black .widgetTree a.all { background:url(../img/black/folder.gif) no-repeat left top; padding-left:20px;} +.widgetContainer.black .widgetTree span { font-size:9px; font-family:tahoma; padding:0; margin:0; color:#333;} +.widgetContainer.black .widgetTree ul span { margin-left:15px; } +.widgetContainer.black .widgetTree *{ margin:0; padding:0; font-size:12px;} +.widgetContainer.black .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} +.widgetContainer.black .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} +.widgetContainer.black .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} +.widgetContainer.black .widgetTree ul li a, +.widgetContainer.black .widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} +.widgetContainer.black .widgetTree ul li a {text-decoration:none; } +.widgetContainer.black .widgetTree ul li a.selected {font-weight:bold;} +.widgetContainer.black .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} +.widgetContainer.black .widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} +.widgetContainer.black .widgetTree ul li ul li{ display:none;} +.widgetContainer.black .widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} +.widgetContainer.black .widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} +.widgetContainer.black .widgetTree ul li.nav_tree_on ul{ display:block;} +.widgetContainer.black .widgetTree ul li.nav_tree_on ul li{ display:block;} +.widgetContainer.black .widgetTree ul li.nav_tree_off ul{ display:none;} +.widgetContainer.black .widgetTree ul li.nav_tree_off ul li{ display:none;} +.widgetContainer.black .widgetTree .icon{ position:relative; left:16px;} + +/* widgetTree */ +.widgetContainer.black .widgetTree{ color:#999;} +.widgetContainer.black .widgetTree a { color:#999; text-decoration:none;} + +/* Widget Tree */ +.widgetContainer.black .widgetTree ul{ background:url(../img/black/lineTreeVr.gif) repeat-y 0 -1px;} +.widgetContainer.black .widgetTree ul li{ background:url(../img/black/lineTreeHr.gif) no-repeat 1px 5px !important;} +.widgetContainer.black .widgetTree ul li button{ background:url(../img/black/buttonTreeCollapse.gif) no-repeat;} +.widgetContainer.black .widgetTree ul li.nav_tree_last{ background:url(../img/black/lineTreeLastHr.gif) no-repeat 0 5px !important;} + diff --git a/widgets/content/conf/info.xml b/widgets/content/conf/info.xml index 35b2c261e..20c9e04f2 100644 --- a/widgets/content/conf/info.xml +++ b/widgets/content/conf/info.xml @@ -8,7 +8,7 @@ 게시판, 코멘트, 첨부파일 등 Content를 출력하는 위젯입니다. 게시판, 코멘트, 첨부파일 등 Content를 출력하는 위젯입니다. 以各种样式显示主题,评论,附件等站内内容的全局控件。 - 是種可輸出討論板、評論,附加檔案等內容的控件。 + 是種可輸出討論板、評論,附加檔案等內容的組件。 掲示板の書き込み、コメント、添付ファイルなどコンテンツを出力するウィジェットです。 0.1 2009-03-16 @@ -65,11 +65,11 @@ rss - RSS - RSS - RSS - RSS - RSS + 피드 (RSS/ATOM) + Feed (RSS/ATOM) + Feed (RSS/ATOM) + Feed (RSS/ATOM) + Feed (RSS/ATOM) @@ -539,7 +539,7 @@ 新しく登録された書き込みに対して「New」の表示時間を指定します(時間単位)。 You may set the duration of indication for fresh item. (unit is hour) Вы можете установить длительность индикации для нового объекта. (единица - час) - 可設置最新更新主題的new圖案顯示時間。 + 可設置最後更新主題的new圖案顯示時間。 text @@ -584,53 +584,87 @@ text - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL은 타입이 RSS일 경우 등록되어야 합니다. + 피드(RSS/ATOM) 주소 + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + 피드 주소는 타입이 지원하는 문서 형식일 경우에만 등록 됩니다. + (지원 문서 형식 : RSS 2.0, RSS 1.0, ATOM 1.0) + 피드 주소는 타입이 지원하는 문서 형식일 경우에만 등록 됩니다. (지원 문서 형식 : RSS 2.0, RSS 1.0, ATOM 1.0) - RSS URL은 타입이 RSS일 경우 등록되어야 합니다. RSS URLはタイプが RSSの時だけ登録出来ます。 (サポートする文書形式 : RSS 2.0, RSS 1.0, ATOM 1.0) text - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL + 피드(RSS/ATOM) 주소 + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL text - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL + 피드(RSS/ATOM) 주소 + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL text - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL + 피드(RSS/ATOM) 주소 + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL text - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL - RSS URL + 피드(RSS/ATOM) 주소 + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + Feed(RSS/ATOM) URL + + + select + HTML 출력 방식 + HTML 출력 방식 + HTML 출력 방식 + HTML 출력 방식 + HTML 출력 방식 + HTML 출력 방식 + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + + table + Table + Table + Table + Table + Table + Table + + + list + UL (list) + UL (list) + UL (list) + UL (list) + UL (list) + UL (list) + diff --git a/widgets/content/content.class.php b/widgets/content/content.class.php index 3e6de89f1..36d9c0eca 100644 --- a/widgets/content/content.class.php +++ b/widgets/content/content.class.php @@ -51,10 +51,13 @@ // 썸네일 세로 크기 if(!$args->thumbnail_height) $args->thumbnail_height = 75; - + // 보기 옵션 $args->option_view_arr = explode(',',$args->option_view); + // markup 옵션 + if(!$args->markup_type) $args->markup_type = 'table'; + // 내부적으로 쓰이는 변수 설정 $oModuleModel = &getModel('module'); $module_srls = $args->modules_info = $args->module_srls_info = $args->mid_lists = array(); @@ -252,6 +255,7 @@ $content_item = new contentItem( $args->module_srls_info[$module_srl]->browser_title ); $content_item->adds($oDocument->getObjectVars()); + $content_item->setTitle($oDocument->getTitle()); $content_item->setCategory( $category_lists[$module_srl][$category_srl]->title ); $content_item->setDomain( $args->module_srls_info[$module_srl]->domain ); $content_item->setContent($oDocument->getSummary($args->content_cut_size)); @@ -302,7 +306,6 @@ $browser_title = $args->module_srls_info[$attribute->module_srl]->browser_title; $domain = $args->module_srls_info[$attribute->module_srl]->domain; $category = $category_lists[$attribute->module_srl]->text; - $attribute = $oDocument->getObjectVars(); $content = $oDocument->getSummary($args->content_cut_size); $url = sprintf("%s#%s",$oDocument->getPermanentUrl() ,$oDocument->getCommentCount()); $thumbnail = $oDocument->getThumbnail($args->thumbnail_width,$args->thumbnail_height,$args->thumbnail_type); @@ -619,6 +622,8 @@ $widget_info->list_type = $args->list_type; $widget_info->tab_type = $args->tab_type; + $widget_info->markup_type = $args->markup_type; + // 탭형태일경우 탭에 대한 정보를 정리하고 module_srl로 되어 있는 key값을 index로 변경 if($args->tab_type != 'none' && $args->tab_type) { $tab = array(); @@ -727,8 +732,16 @@ return $this->get('module_srl'); } function getTitle($cut_size = 0, $tail='...'){ - if($cut_size) $title = cut_str($this->get('title'), $cut_size, $tail); - else $title = $this->get('title'); + $title = strip_tags($this->get('title')); + + if($cut_size) $title = cut_str($title, $cut_size, $tail); + + $attrs = array(); + if($this->get('title_bold') == 'Y') $attrs[] = 'font-weight:bold'; + if($this->get('title_color') && $this->get('title_color') != 'N') $attrs[] = 'color:#'.$this->get('title_color'); + + if(count($attrs)) $title = sprintf("%s", implode(';', $attrs), htmlspecialchars($title)); + return $title; } function getContent(){ diff --git a/widgets/content/skins/default/css/widget.css b/widgets/content/skins/default/css/widget.css index ba43c97a2..e3ce82672 100644 --- a/widgets/content/skins/default/css/widget.css +++ b/widgets/content/skins/default/css/widget.css @@ -22,6 +22,8 @@ .widgetTabA li a{ position:relative; left:2px; float:left; height:20px; padding:8px 15px 0 15px; text-decoration:none; font-size:12px; background-repeat:no-repeat; background-position:right 0;} .widgetTabA li.active a{ background-position:right -30px; font-weight:bold; letter-spacing:-1px;} +ul.widgetA { margin:0; padding:0; list-style:none; } +ul.widgetA li { margin:0; padding:0; list-style:none; } .widgetTableA { width:100%; font-size:12px; position:relative; border:0;} .widgetTableA td{ border:0; line-height:1.5; white-space:nowrap; vertical-align:top; padding:1px 5px 1px 5px;} .widgetTableA td.title{ width:100%; white-space:normal;} @@ -107,6 +109,15 @@ dl.widgetDivider dd{ display:none; margin:0;} .widgetTabA li a{ background-image:url(../img/white/buttonWidgetTab.gif);} .widgetTabA li a{ color:#333;} +.widgetA a.board { color:#333; padding-right:5px; background:url(../img/white/lineTextDiv.gif) no-repeat right center;} +.widgetA .notice{ color:#ff1a1a; background:url(../img/white/lineTextDiv.gif) no-repeat right center;} +.widgetA .category{ color:#333; background:url(../img/white/lineTextDiv.gif) no-repeat right center;} +.widgetA .replyNum a{ color:#ff1a1a;} +.widgetA .trackbackNum a{ color:#66c;} +.widgetA .author { color:#333;} +.widgetA .date{ color:#333;} +.widgetA .hour{ color:#888;} + .widgetTableA td.title a{ color:#333;} .widgetTableA td .board{ color:#333; background:url(../img/white/lineTextDiv.gif) no-repeat right center;} .widgetTableA td .notice{ color:#ff1a1a; background:url(../img/white/lineTextDiv.gif) no-repeat right center;} diff --git a/widgets/content/skins/default/image_title.html b/widgets/content/skins/default/image_title.html index a733e8aa9..92baabc65 100644 --- a/widgets/content/skins/default/image_title.html +++ b/widgets/content/skins/default/image_title.html @@ -1,60 +1,121 @@ -{@$have_first_thumbnail=false} - - {@$thumbnail_idx = $widget_info->content_items[0]->getFirstThumbnailIdx() } - {@$have_first_thumbnail=true} -

    - -

    - + + + {@$have_first_thumbnail=false} + + {@$thumbnail_idx = $widget_info->content_items[0]->getFirstThumbnailIdx() } + {@$have_first_thumbnail=true} +

    + +

    + - style="padding-left:{$widget_info->thumbnail_width+10}px"> -
    - -{@$_idx=0} - - = $widget_info->list_count)--> style="display:none"> - - - - - - - + +
      +
    • +
    • +
    + + + + + {@$have_first_thumbnail=false} + + {@$thumbnail_idx = $widget_info->content_items[0]->getFirstThumbnailIdx() } + {@$have_first_thumbnail=true} +

    + +

    + + + style="padding-left:{$widget_info->thumbnail_width+10}px"> +
    + style="padding-left:{$widget_info->thumbnail_width+10}px"> + + - - {$item->printExtraImages()} - - {$item->getNickName()}{$item->getRegdate("Y-m-d")} {$item->getRegdate("H:i")}
    + + {@$_idx=0} + + = $widget_info->list_count)--> style="display:none"> + + + + + + + + + + + {@$_idx++} + + +
    + + + {$item->getBrowserTitle()} + + + + {$item->getCategory()} + + + {$item->getTitle($widget_info->subject_cut_size)} + + + {$item->getCommentCount()} + + + + {$item->getTrackbackCount()} + + + + {$item->printExtraImages()} + + {$item->getNickName()}{$item->getRegdate("Y-m-d")} {$item->getRegdate("H:i")}
    + + + +
      +
    • +
    • +
    - -
    - - - -

      -
    • -
    • -
    diff --git a/widgets/content/skins/default/normal.html b/widgets/content/skins/default/normal.html index 540ced48f..9d2baeb56 100644 --- a/widgets/content/skins/default/normal.html +++ b/widgets/content/skins/default/normal.html @@ -1,50 +1,100 @@ - - -{@$_idx=0} - - = $widget_info->list_count)--> style="display:none"> - - - - - - - - - - -{@$_idx++} - - -
    + + + getMemberSrl())-->href="#" onclick="return false;" class="author member_{$item->getMemberSrl()}"href="{$item->getAuthorSite()}" onclick="window.open(this.href); return false;" class="author member"href="#" onclick="return false;" class="author member" >{$item->getNickName()}{$item->getRegdate("Y-m-d")} {$item->getRegdate("H:i")}
    - - - -
      -
    • -
    • -
    + + {$item->printExtraImages()} + + + +
    getMemberSrl())-->href="#" onclick="return false;" class="author member_{$item->getMemberSrl()}"href="{$item->getAuthorSite()}" onclick="window.open(this.href); return false;" class="author member"href="#" onclick="return false;" class="author member" >{$item->getNickName()} + + + {$item->getRegdate("Y-m-d")} {$item->getRegdate("H:i")} + + + + {@$_idx++} + + + + +
      +
    • +
    • +
    + + + + + + + {@$_idx=0} + + = $widget_info->list_count)--> style="display:none"> + + + + + + + + + + + {@$_idx++} + + +
    + + + + {$item->getBrowserTitle()} + + + {$item->getCategory()} + + + {$item->getTitle($widget_info->subject_cut_size)} + + + {$item->getCommentCount()} + + + + {$item->getTrackbackCount()} + + + + {$item->printExtraImages()} + + getMemberSrl())-->href="#" onclick="return false;" class="author member_{$item->getMemberSrl()}"href="{$item->getAuthorSite()}" onclick="window.open(this.href); return false;" class="author member"href="#" onclick="return false;" class="author member" >{$item->getNickName()}{$item->getRegdate("Y-m-d")} {$item->getRegdate("H:i")}
    + +
      +
    • +
    • +
    + diff --git a/widgets/forum/conf/info.xml b/widgets/forum/conf/info.xml index 06316026e..ebb94de31 100644 --- a/widgets/forum/conf/info.xml +++ b/widgets/forum/conf/info.xml @@ -30,7 +30,7 @@ Этот виджет отображает новейшие изделия из одной или нескольких борту в стиле форума. Описание будет отображаться с целевыми борту название и описание.
    - 把一個或多個討論板顯示成論壇介面的控件。 + 把一個或多個討論板顯示成論壇介面的widget。 論壇標題及說明,請參考各討論板裡的標題設置與說明。 0.1 @@ -62,7 +62,7 @@ You may set the duration of indication for fresh item. (unit is hour) Usted puede configurar la duración de la indicación de un nuevo tema. (Unidad es hora) Вы можете установить длительность индикации для нового объекта. (единица - час) - 可設置最新修改主題的new圖案顯示時。 + 可設置最後修改主題的new圖案顯示時間。 text diff --git a/widgets/image_counter/conf/info.xml b/widgets/image_counter/conf/info.xml index 5bde42909..b46510e85 100644 --- a/widgets/image_counter/conf/info.xml +++ b/widgets/image_counter/conf/info.xml @@ -38,9 +38,9 @@ Чтобы отображать график, GD библиотека должна быть установлена. - 能新增到部落格或網站的圖形統計控件。 - 不設置控件大小、背景顏色時,將使用預設。 - 因程式需要自動繪出圖形,所以主機必須要安裝 GD。 + 可新增到部落格或網站的圖形統計 Widget。 + 不設定尺寸大小、背景顏色時,將使用預設。 + 輸出圖形時,主機必須要安裝 GD library。 0.1 2007-08-27 @@ -97,7 +97,7 @@ 指定圖片寬度。 預設是150px。只需輸入數字即可。 - 此寬度與代碼建立頁面的寬度是不同的。 + 此寬度與原始碼建立頁面的寬度是不同的。 diff --git a/widgets/language_select/conf/info.xml b/widgets/language_select/conf/info.xml index db17de141..fc81ae506 100644 --- a/widgets/language_select/conf/info.xml +++ b/widgets/language_select/conf/info.xml @@ -6,7 +6,7 @@ Language Selcción del Idioma Выбор языка - 選擇語言 + 語言選擇 사용자의 접속언어를 변경할 수 있는 select폼을 출력합니다. 言語を変更することが出来るセレクト(select)フォームを表示します。 可以实现多国语言相互切换。 diff --git a/widgets/logged_members/conf/info.xml b/widgets/logged_members/conf/info.xml index 496e74568..cfe070e52 100644 --- a/widgets/logged_members/conf/info.xml +++ b/widgets/logged_members/conf/info.xml @@ -11,7 +11,7 @@ This widget displays on-line members. 显示在线会员列表的控件。 Este widget muestra en línea de los miembros. - 顯示線上會員的控件。 + 顯示線上會員的widget。 0.1 2008-06-18 diff --git a/widgets/login_info/skins/xe_official/login_form.html b/widgets/login_info/skins/xe_official/login_form.html index 67d185b1a..4af360d6c 100644 --- a/widgets/login_info/skins/xe_official/login_form.html +++ b/widgets/login_info/skins/xe_official/login_form.html @@ -33,12 +33,12 @@

    - +
    - +

    diff --git a/widgets/member_group/conf/info.xml b/widgets/member_group/conf/info.xml index b9dce905e..d3ad15151 100644 --- a/widgets/member_group/conf/info.xml +++ b/widgets/member_group/conf/info.xml @@ -6,7 +6,7 @@ Muestra el grupo de usuario específico 会员列表 Отображение членов определенной группы - 特定會員列表 + 特定會員群組 특정 그룹에 속한 회원의 목록을 출력하는 위젯입니다. 아직 테스트용 위젯이며 해당 그룹에 지정된 수 이상의 회원이 있을 경우 최근 가입순서대로 출력이 됩니다. @@ -38,8 +38,8 @@ Вы можете ввести группы для отображения в пространство ниже. Вы можете использовать запятую(,) для множественного ввода. - 顯示特定用戶組會員列表的控件。 - 該組用戶數比要顯示的用戶數多時,按照最近註冊日期來顯示。(測試中的控件) + 顯示特定用戶組會員列表的widget。 + 該組用戶數比要顯示的用戶數多時,按照最近註冊日期來顯示。(測試中) 要顯示的目標用戶組名稱以,(逗號)做區隔。 0.1 diff --git a/widgets/navigator/navigator.class.php b/widgets/navigator/navigator.class.php index 372fecfba..e6b006f69 100644 --- a/widgets/navigator/navigator.class.php +++ b/widgets/navigator/navigator.class.php @@ -101,6 +101,10 @@ $obj->selected = $val['selected']; $obj->open_window = $val['open_window']; + $obj->normal_btn = $val['normal_btn']; + $obj->hover_btn = $val['hover_btn']; + $obj->active_btn = $val['active_btn']; + $obj->child_count = 0; $obj->childs = array(); diff --git a/widgets/navigator/skins/horiNavigator/navigator.html b/widgets/navigator/skins/horiNavigator/navigator.html index c37e5c129..3d336a8cf 100755 --- a/widgets/navigator/skins/horiNavigator/navigator.html +++ b/widgets/navigator/skins/horiNavigator/navigator.html @@ -13,7 +13,7 @@ widget_navigator[{$widget_info->menu_srl}].load('{$widget_info->xml_file}'); + + {@ $_pDepth = $val->depth} diff --git a/widgets/navigator/skins/tree/skin.xml b/widgets/navigator/skins/tree/skin.xml index 9546b9f9b..7d2ef9889 100644 --- a/widgets/navigator/skins/tree/skin.xml +++ b/widgets/navigator/skins/tree/skin.xml @@ -3,11 +3,11 @@ 메뉴 트리 출력 스킨 树形菜单皮肤 樹狀選單面板 - 메뉴 트리 출력 스킨 + ツリー型メニュー用スキン 메뉴를 트리구조로 출력합니다. 树形菜单皮肤 以樹狀結構顯示選單。 - 메뉴를 트리구조로 출력합니다. + メニューをツリー型に表示します。 0.1 2009-02-10 http://www.zeroboard.com diff --git a/widgets/navigator/skins/vertNavigator/navigator.html b/widgets/navigator/skins/vertNavigator/navigator.html index 1a11956c7..6200299c5 100755 --- a/widgets/navigator/skins/vertNavigator/navigator.html +++ b/widgets/navigator/skins/vertNavigator/navigator.html @@ -10,13 +10,13 @@ - - + + {@ $_pDepth = $val->depth}
  • {htmlspecialchars($item->nick_name)}
    - {$item->getContent()} - {zdate($item->get('regdate'),"y.m.d",false)} {zdate($item->get('regdate'),"H:i",false)} + {$item->getContent()} + {zdate($item->get('regdate'),"y.m.d",false)} {zdate($item->get('regdate'),"H:i",false)} + by {$item->getNickName()} + {$lang->comment}:{$item->getCommentCount()} {$lang->cmd_planet_good}:{$item->getVotedCount()}
  • diff --git a/widgets/point_status/conf/info.xml b/widgets/point_status/conf/info.xml index 4441c733b..f9f859577 100644 --- a/widgets/point_status/conf/info.xml +++ b/widgets/point_status/conf/info.xml @@ -22,7 +22,7 @@ Cache must be 0. - 顯示會員積分狀況的控件。 + 顯示會員積分狀況的widget。 暫存要設為 0。 0.1 diff --git a/widgets/rank_count/conf/info.xml b/widgets/rank_count/conf/info.xml index 20a1f462d..0b9033eca 100644 --- a/widgets/rank_count/conf/info.xml +++ b/widgets/rank_count/conf/info.xml @@ -13,7 +13,7 @@ Este widget muestra de artículos y comentarios ranking. 按发表主题/评论/附件/推荐/查看数显示会员排行的控件。 Этот виджет отображает рейтинг статей и комментариев. - 顯示會員發表主題/評論/附檔/推薦/點閱排行的控件。 + 顯示會員發表主題/評論/附檔/推薦/點閱排行的widget。 1.5 2009-02-23 diff --git a/widgets/rank_download/conf/info.xml b/widgets/rank_download/conf/info.xml index 98dec5888..c3b1735db 100644 --- a/widgets/rank_download/conf/info.xml +++ b/widgets/rank_download/conf/info.xml @@ -36,7 +36,7 @@ N º de la lista 目录数 Число списка - 目錄數 + 列表數 출력될 목록의 수를 정하실 수 있습니다. (기본 5개) 出力するリスト数を指定します(デフォルト5個)。 You may set number of list that will be displayed. (default 5) diff --git a/widgets/rank_point/conf/info.xml b/widgets/rank_point/conf/info.xml index c6a519da6..b72b91167 100644 --- a/widgets/rank_point/conf/info.xml +++ b/widgets/rank_point/conf/info.xml @@ -13,7 +13,7 @@ Este widget muestra de los miembros del punto de la clasificación. 显示会员积分排行的控件。 Этот виджет отображает рейтинг поитов пользователей. - 顯示會員點數排行的控件。 + 顯示會員點數排行的widget。 1.0 2007-08-29 @@ -36,7 +36,7 @@ N º de la lista Количество Список 目录数 - 目錄數 + 列表數 출력될 목록의 수를 정하실 수 있습니다. (기본 5개) 出力するリストの数を指定します(デフォルト5個)。 You may set number of list that will be displayed. (default 5) diff --git a/widgets/rss_reader/conf/info.xml b/widgets/rss_reader/conf/info.xml index 85747b3f3..57e798234 100644 --- a/widgets/rss_reader/conf/info.xml +++ b/widgets/rss_reader/conf/info.xml @@ -11,7 +11,7 @@ RSS阅读器控件。 This widget displays data retrieved from RSS feed. Этот виджет отображает данные, полученные посредством RSS. - RSS閱讀器控件。 + RSS閱讀器widget。 #7 2007-10-26 diff --git a/widgets/site_info/conf/info.xml b/widgets/site_info/conf/info.xml index 37da2e0a8..47d9e44f3 100644 --- a/widgets/site_info/conf/info.xml +++ b/widgets/site_info/conf/info.xml @@ -6,7 +6,7 @@ バーチャル(Virtual)サイト情報 cafeXE와 같은 분양형 가상 사이트의 정보를 출력하는 위젯입니다. 显示子站点信息的控件。 - 可輸出顯示cafeXE資訊的控件。 + 可輸出顯示虛擬網站資訊的widget。 cafeXEのような分譲型バーチャル(Virtual)サイトの情報を出力するウィジェットです。 0.1 2009-02-16 diff --git a/widgets/tab_newest_document/conf/info.xml b/widgets/tab_newest_document/conf/info.xml index bde38c56c..da675ec6e 100644 --- a/widgets/tab_newest_document/conf/info.xml +++ b/widgets/tab_newest_document/conf/info.xml @@ -132,7 +132,7 @@ 新しく登録された書き込みに対して「New」の表示時間を指定します(時間単位)。 You may set the duration of indication for fresh item. (unit is hour) Вы можете установить длительность индикации для нового объекта. (единица - час) - 可設置最新更新主題的new圖案顯示時間。 + 可設置最後更新主題的new圖案顯示時間。
    text diff --git a/widgets/webzine/conf/info.xml b/widgets/webzine/conf/info.xml index a4de055fe..ef4637073 100644 --- a/widgets/webzine/conf/info.xml +++ b/widgets/webzine/conf/info.xml @@ -116,7 +116,7 @@ You may set the duration for indication of new item for newest article. (unit is hour) Usted puede configurar la duración de la indicación de un nuevo tema. (Unidad es hora) Вы можете установить длительность индикации для нового объекта. (единица - час) - 可設置最新更新主題的new圖案顯示時間。 + 可設置最後更新主題的new圖案顯示時間。 text diff --git a/widgetstyles/colorbox/skin.xml b/widgetstyles/colorbox/skin.xml index a97102c7f..0b0d15295 100644 --- a/widgetstyles/colorbox/skin.xml +++ b/widgetstyles/colorbox/skin.xml @@ -9,7 +9,7 @@ Baisc squared widget style 각진 면으로 꾸며진 위젯스타일 입니다. 可變換多種色彩外框的控件樣式。 - ウィジェットのスタイルです。 + 面のウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -118,6 +118,7 @@ Más información URL URL를 등록합니다. Register an URL. + URLを登録します。 URL para registrarse. diff --git a/widgetstyles/colorbox/widgetstyle.html b/widgetstyles/colorbox/widgetstyle.html index 85994befa..1ecae57f0 100644 --- a/widgetstyles/colorbox/widgetstyle.html +++ b/widgetstyles/colorbox/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/line/skin.xml b/widgetstyles/line/skin.xml index 546607b1a..d09f7a300 100644 --- a/widgetstyles/line/skin.xml +++ b/widgetstyles/line/skin.xml @@ -5,7 +5,7 @@ シンプルライト 선 하나만으로 꾸며진 위젯스타일 입니다. 可變換多種線條外框的控件樣式。 - ウィジェットのスタイルです。 + 線一つだけのウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -73,6 +73,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/line/widgetstyle.html b/widgetstyles/line/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/line/widgetstyle.html +++ b/widgetstyles/line/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/memo/skin.xml b/widgetstyles/memo/skin.xml index 15476d16c..008df7ec4 100644 --- a/widgetstyles/memo/skin.xml +++ b/widgetstyles/memo/skin.xml @@ -7,7 +7,7 @@ 메모지 처럼 꾸며진 위젯스타일 입니다. A widget style decorated like memo note (Post-It Style). 可變換多種留言外框的控件樣式。 - ウィジェットのスタイルです。 + メモ用紙のようなウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -104,6 +104,7 @@ 「もっと見る」URL URL를 등록합니다. Register an URL. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/memo/widgetstyle.html b/widgetstyles/memo/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/memo/widgetstyle.html +++ b/widgetstyles/memo/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/postitWire/skin.xml b/widgetstyles/postitWire/skin.xml index 23e85d302..47b86ebce 100644 --- a/widgetstyles/postitWire/skin.xml +++ b/widgetstyles/postitWire/skin.xml @@ -5,7 +5,7 @@ ポストイットワイヤー 메모지 처럼 꾸며진 위젯스타일 입니다. 可變換多種留言外框的控件樣式。 - ウィジェットのスタイルです。 + メモ用紙のようなウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -88,6 +88,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/postitWire/widgetstyle.html b/widgetstyles/postitWire/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/postitWire/widgetstyle.html +++ b/widgetstyles/postitWire/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/roundFace/skin.xml b/widgetstyles/roundFace/skin.xml index a65f750a9..4c3340b2a 100644 --- a/widgetstyles/roundFace/skin.xml +++ b/widgetstyles/roundFace/skin.xml @@ -5,7 +5,7 @@ ラウンドフェイス 둥근 면으로 꾸며진 위젯스타일 입니다. 可變換多種圓角背景的控件樣式。 - ウィジェットのスタイルです。 + ラウンドな面のウィジェットスタイルです。 0.1 2009-03-10 preview.gif diff --git a/widgetstyles/roundFace/widgetstyle.html b/widgetstyles/roundFace/widgetstyle.html index 59fcdf4ac..6ba042f66 100644 --- a/widgetstyles/roundFace/widgetstyle.html +++ b/widgetstyles/roundFace/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> diff --git a/widgetstyles/roundWire/skin.xml b/widgetstyles/roundWire/skin.xml index d27439c7c..2c4d05e9b 100644 --- a/widgetstyles/roundWire/skin.xml +++ b/widgetstyles/roundWire/skin.xml @@ -5,7 +5,7 @@ ラウンドワイヤー 둥근 선으로 꾸며진 위젯스타일 입니다. 可變換多種圓角外框的控件樣式。 - ウィジェットのスタイルです。 + ラウンドな線のウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -85,6 +85,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/roundWire/widgetstyle.html b/widgetstyles/roundWire/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/roundWire/widgetstyle.html +++ b/widgetstyles/roundWire/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/simple/skin.xml b/widgetstyles/simple/skin.xml index e48abae7b..ea58fe1c9 100644 --- a/widgetstyles/simple/skin.xml +++ b/widgetstyles/simple/skin.xml @@ -9,7 +9,7 @@ A widget style decorated with one simple line. 只有栏目名和查看更多(more)选项的简易控件样式。 只有標題與more按紐的簡單控件樣式。 - ウィジェットのスタイルです。 + 線一つだけのウィジェットスタイルです。 0.1 2009-02-03 preview.gif @@ -28,18 +28,18 @@ Colorset 颜色 顏色 - 컬러셋 + カラーセット 컬러셋을 지정해주세요 Choose colorset 请指定适当的颜色。 請選擇顏色。 - 컬러셋을 지정해주세요 + カラーセットを指定して下さい。 하얀색 White 白色 白色 - 하얀색 + white @@ -47,7 +47,7 @@ Black 黑色 黑色 - 검은색 + black @@ -71,7 +71,7 @@ 「もっと見る」URL http:// 포함한 URL를 등록합니다. Destination of a link 'more'. Register an URL including http:// - http:// 포함한 URL를 등록합니다. + 「http://」を含んだURLを登録します。 더보기 텍스트 diff --git a/widgetstyles/simpleRound/skin.xml b/widgetstyles/simpleRound/skin.xml index 92bb68b02..1d565f4a7 100644 --- a/widgetstyles/simpleRound/skin.xml +++ b/widgetstyles/simpleRound/skin.xml @@ -5,7 +5,7 @@ シンプルラウンド 둥근 선으로 꾸며진 위젯스타일 입니다. 可變換多種線條外框的控件樣式。 - ウィジェットのスタイルです。 + ラウンドな線のウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -26,7 +26,7 @@ widgetBoxC 심플 라운드 - 심플 라운드 + シンプルラウンド @@ -72,6 +72,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/simpleRound/widgetstyle.html b/widgetstyles/simpleRound/widgetstyle.html index 3e1e05f04..e7aa44ea8 100644 --- a/widgetstyles/simpleRound/widgetstyle.html +++ b/widgetstyles/simpleRound/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    ws_title_color&&$widgetstyle_extar_var->ws_title_color!='transparent')-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/simpleSquare/skin.xml b/widgetstyles/simpleSquare/skin.xml index 5e414a8b7..ebde638cd 100644 --- a/widgetstyles/simpleSquare/skin.xml +++ b/widgetstyles/simpleSquare/skin.xml @@ -5,7 +5,7 @@ シンプルスクウェア 각진 선으로 꾸며진 위젯스타일 입니다. 可變換多種線條外框的控件樣式。 - ウィジェットのスタイルです。 + ウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -72,6 +72,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/simpleSquare/widgetstyle.html b/widgetstyles/simpleSquare/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/simpleSquare/widgetstyle.html +++ b/widgetstyles/simpleSquare/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/simpleTitle/skin.xml b/widgetstyles/simpleTitle/skin.xml index 8e81e84ea..75fc01e92 100644 --- a/widgetstyles/simpleTitle/skin.xml +++ b/widgetstyles/simpleTitle/skin.xml @@ -7,7 +7,7 @@ 제목을 강조하는 위젯스타일 입니다. A widget style emphasizing its title. 可變換多種線條外框的控件樣式。 - タイトルを強調するウィジェットのスタイルです。. + タイトルを強調するウィジェットスタイルです。. 0.1 2009-03-10 preview.gif @@ -84,6 +84,7 @@ 「もっと見る」URL 제외한 URL를 등록합니다. Register an URL. + 外したURLを登録します。 더보기 이미지 diff --git a/widgetstyles/simpleTitle/widgetstyle.html b/widgetstyles/simpleTitle/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/simpleTitle/widgetstyle.html +++ b/widgetstyles/simpleTitle/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/widgetstyles/squareWire/skin.xml b/widgetstyles/squareWire/skin.xml index 979f30443..586c0e1e1 100644 --- a/widgetstyles/squareWire/skin.xml +++ b/widgetstyles/squareWire/skin.xml @@ -5,7 +5,7 @@ スクウェアワイアー 각진 선으로 꾸며진 위젯스타일 입니다. 可變換多種色彩外框的控件樣式。 - 각진 선으로 꾸며진ウィジェットのスタイルです。 + 線のウィジェットスタイルです。 0.1 2009-03-10 preview.gif @@ -85,6 +85,7 @@ more URL 「もっと見る」URL URL를 등록합니다. + URLを登録します。 더보기 이미지 diff --git a/widgetstyles/squareWire/widgetstyle.html b/widgetstyles/squareWire/widgetstyle.html index 3e1e05f04..fb48ceb3f 100644 --- a/widgetstyles/squareWire/widgetstyle.html +++ b/widgetstyles/squareWire/widgetstyle.html @@ -4,7 +4,7 @@ -

    ws_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> +

    wws_title_colors_title_color)-->style="color:{$widgetstyle_extar_var->ws_title_color};"> @@ -47,4 +47,4 @@ - \ No newline at end of file +