가온 위키:기능 구현 불가-누가 해결책을 알려주세요!: 두 판 사이의 차이

(어두운 모드 표 배경 색 버그 추가)
(→‎구현한 기능: 단축 URL 추가)
 
(사용자 2명의 중간 판 19개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==이 문서는...==
==이 문서는...==
# 답답한 우리의 [[사용자:Admin|가온 위키 관리자]]가 구현하지 못해, 착한 유저가 해결책을 제시한 경우, 감사의 표시로 이곳과 [[가온 위키 커뮤니티]]에 표시하는 곳입니다.<br/>
답답한 우리의 [[사용자:Admin|가온 위키 관리자]]가 구현하지 못해, 착한 유저가 해결책을 제시한 경우, 감사의 표시로 이곳과 [[가온 위키 커뮤니티]]에 표시하는 곳입니다.<br/>


==구현 못한 부분==
==구현 못한 부분==
6번째 줄: 6번째 줄:


==해결됨==
==해결됨==
===니코동 영상 가져오기===
# 어디서는<ref>크흠... 트리위키라 하면 알겠지...?</ref> SSL을 적용해도 잘만 가져오는데, 여기는 못 가져오네...<br/>
# [https://www.mediawiki.org/wiki/Extension:EmbedVideo EmbedVideo 확장 기능]을 수정해 보았지만 어렵네...
# 그래도 수정을 완료했다!(<del>스스로 토닥이는 관리자. 잘했어. 하얗게 불태웠어.</del>)


====수정 전====
===리버티 스킨 관련 문제===
* ./extensions/EmbedVideo/classes/VideoService.php 파일이다.
리버티 스킨과 관련된 문제는 [[가온 위키:기능 구현 불가-누가 해결책을 알려주세요!/리버티 스킨]] 문서를 참고하자.
<syntaxhighlight lang="PHP" highlight="2" start='215' line>
 
'nico' => [
===영상 가져오기(Embed) 관련 문제===
'embed' => '<iframe srcdoc="&lt;script type=&quot;text/javascript&quot; src=&quot;http://ext.nicovideo.jp/thumb_watch/%1$s?w=%2$d&amp;h=%3$d&quot;&gt;&lt;/script&gt;" width="%2$d" height="%3$d" frameborder="0" allowFullScreen="true"></iframe>',
외부 서비스들 중에서 가져오지 못하는 것들은 [[가온 위키:기능 구현 불가-누가 해결책을 알려주세요!/영상 가져오기]] 문서를 참고하자!
'default_width' => 640,
'default_ratio' => 1.59609120521173, // (490 / 307)
'https_enabled' => false,
'url_regex' => [
'#nicovideo\.jp/watch/((?:[a-zA-Z]{2})?[\d]+)#is'
],
'id_regex' => [
'#^((?:[a-zA-Z]{2})?[\d]+)$#is'
]
],
</syntaxhighlight><br/>


====수정 후====
===이미지 관련 문제===
<syntaxhighlight lang="PHP" highlight="2" start='215' line>
====이미지 크기 설정시 파일 링크만 뜨는 현상====
'nico' => [
<nowiki>[[파일:updates.png|100px]]</nowiki> 이렇게 하면 일반 문서처럼 링크로 뜬다. 서버 이전 전에는 이러지 않았는데...
'embed' => '<iframe src="https://embed.nicovideo.jp/watch/%1s/" width="%2$d" height="%3$d" frameborder="0" allowFullScreen="true"></iframe>',
'default_width' => 640,
'default_ratio' => 1.59609120521173, // (490 / 307)
'https_enabled' => true,
'url_regex' => [
'#nicovideo\.jp/watch/((?:[a-zA-Z]{2})?[\d]+)#is'
],
'id_regex' => [
'#^((?:[a-zA-Z]{2})?[\d]+)$#is'
]
],
</syntaxhighlight><br/>


# '''<nowiki>'embed'=> '<iframe srcdoc="&lt;script type=&quot;text/javascript&quot; src=&quot;http://ext.nicovideo.jp/thumb_watch/%1$s?w=%2$d&amp;h=%3$d&quot;&gt;&lt;/script&gt;</nowiki>"'''를 '''<nowiki>'embed'=> '<iframe src="https://embed.nicovideo.jp/watch/%1s/"</nowiki>'''로 변경한다.
[https://m.mediawiki.org/w/index.php?title=Topic:Rnjccxoqss9wfedy&topic_showPostId=rnq05rzcc6o7z4hc#flow-post-rnq05rzcc6o7z4hc 미디어위키 헬프 데스크]에서 찾았다.


===최근바뀜에서 문서명에 / 가 포함되어 있으면, 오류 뜨는 경우===
=====수정 전=====
# 같은 스킨을 쓰는 [[리브레 위키]]에서는 잘 되던데... 서버 설정 오류인가?<br/>
[[미디어위키]]의 루트 폴더에 있는 [[미디어위키/LocalSettings.php|LocalSettings.php]]수정한다.
# [https://quiple.mcsv.io/w/퀴플위키 퀴플위키]에서 해결책을 찾았다. 감사합니다. 퀴플위키!<ref>최신 버전 기준이다.</ref>
====수정 전====
* 리버티 스킨/js 폴더에 있는 live-recent.js를 수정한다.


<syntaxhighlight lang="JavaScript" highlight="5" start='55' line>
=====수정 후=====
var recentChanges, html, time, line, text;
[[LocalSettings.php]]의 하단 부분에 추가하자.
recentChanges = data.query.recentchanges;
<syntaxhighlight lang='php'>
html = recentChanges.map( function ( item ) {
$wgGenerateThumbnailOnParse = true;
time = new Date( item.timestamp );
</syntaxhighlight>
line = '<li><a class="recent-item" href = "' + ( mw.config.get( 'wgArticlePath' ) ).replace( '$1', encodeURIComponent( item.title ) ) + '" title="' + item.title + '">[' + timeFormat( time ) + '] ';
text = '';
if ( item.type === 'new' ) {
text += '[New]';
}
text += item.title;
if ( text.length > 13 ) {
text = text.substr( 0, 13 );
text += '...';
}
</syntaxhighlight><br/>


====수정 후====
그리고 [[미디어위키]] 버전이 1.30 이상인 경우, 썸네일을 재생성하자. [[미디어위키]]의 루트 폴더에서 '''maintenance''' 폴더로 이동한 뒤, 아래의 명령어를 입력하자.
<syntaxhighlight lang="JavaScript" highlight="5" start='55' line>
var recentChanges, html, time, line, text;
recentChanges = data.query.recentchanges;
html = recentChanges.map( function ( item ) {
time = new Date( item.timestamp );
line = '<li><a class="recent-item" href = "' + ( mw.config.get( 'wgArticlePath' ) ).replace( '$1', encodeURI( item.title ) ) + '" title="' + item.title + '">[' + timeFormat( time ) + '] ';
text = '';
if ( item.type === 'new' ) {
text += '[New]';
}
text += item.title;
if ( text.length > 13 ) {
text = text.substr( 0, 13 );
text += '...';
}
</syntaxhighlight><br/>
# 59번째 줄의 encodeURIComponent( item.title ) )에서 encodeURIComponent를 encodeURI로 변경


===이미지 크기 설정시 파일 링크만 뜨는 현상===
<syntaxhighlight lang='console'>
# <nowiki>[[파일:updates.png|100px]]</nowiki> 이렇게 하면 일반 문서처럼 링크로 뜬다.
root@gaon:/var/www/html/w/maintenance# php rebuildImages.php
# 서버 이전 전에는 이러지 않았는데...
</syntaxhighlight>
# [https://m.mediawiki.org/w/index.php?title=Topic:Rnjccxoqss9wfedy&topic_showPostId=rnq05rzcc6o7z4hc#flow-post-rnq05rzcc6o7z4hc 미디어위키 헬프 데스크]에서 찾았다.


====수정 전====
=====하고 싶은말=====
# [[미디어위키]]의 루트 폴더에 있는 [[LocalSettings.php]]를 수정한다.
이 오류는 [[미디어위키]] 1.27 버전에서는 없던 오류이므로 1.30 이상 버전의 오류같다. 물론 썸네일은 [[Imagemagick]]가 미리 설치 및 [[미디어위키]]에서 미리 설정 되어 있어야 한다.
# 아직 수정 전이므로 아래 내용은 없을 것이다.


<syntaxhighlight lang="PHP">
====SVG 파일 업로드시 썸네일의 흑백화====
SVG 파일을 업로드하면 원래 가지고 있던 색상값은 표시되지 않고 흑백으로만 표시가 된다. 이는 SVG를 png로 변환하는 프로그램인 ImageMagick의 특정 버전에서 나타난 오류이다. [https://bbs.gaonwiki.com/free/3877 zlzleking님]이 보고해 주셨다.


=====수정 전=====
먼저 Inkscape를 설치한다. 우분투 기준으로 아래의 명령어를 입력하면 된다.
<syntaxhighlight lang='console'>
root@gaon:/# apt update
root@gaon:/# apt install inkscape
</syntaxhighlight>
</syntaxhighlight>


====수정 후====
이후 [[미디어위키]]의 루트 폴더에 있는 [[미디어위키/LocalSettings.php|LocalSettings.php]]를 수정한다.
# [[LocalSettings.php]]의 하단 부분에 추가하자.
 
<syntaxhighlight lang="PHP">
<syntaxhighlight lang='php'>
$wgGenerateThumbnailOnParse = true;
$wgSVGConverter = 'ImageMagick';
</syntaxhighlight>
</syntaxhighlight>
# 그리고 [[미디어위키]] 버전이 1.30 이상인 경우, 썸네일을 재생성하자.
 
# [[미디어위키]]의 루트 폴더에서 '''maintenance''' 폴더로 이동한 뒤, 아래의 명령어를 입력하자.
=====수정 후=====
<syntaxhighlight lang="Sh">
[[LocalSettings.php]]의 하단 부분에 추가하자. Inkscape의 경로는 자신의 환경에 맞춰 수정하자.
php rebuildImages.php
<syntaxhighlight lang='php'>
$wgSVGConverterPath = '/usr/bin/inkscape';
$wgSVGConverters = [
        'Inkscape' => '/usr/bin/inkscape -w $width -z -w $width -f $input -e $output',
];
$wgSVGConverter = 'Inkscape';
 
#$wgSVGConverter = 'ImageMagick';
</syntaxhighlight>
</syntaxhighlight>
====하고 싶은말====
# 이 오류는 [[미디어위키]] 1.27 버전에서는 없던 오류이므로 1.30 이상 버전의 오류같다.
# 물론 썸네일은 [[Imagemagick]]가 미리 설치 및 [[미디어위키]]에서 미리 설정 되어 있어야 한다


===로그인시 '이러한 명령이 없습니다' 라는 오류 뜸===
여기서
# 로그인시, 특히 [[가온 위키:대문]] 문서가 아닌 다른 문서를 보다가 상단의 로그인 아이콘을 눌러 로그인 시도시 심심치 않게 '이러한 명령이 없습니다'라는 오류가 발생한다.
<syntaxhighlight lang='php'>
# 오류 내용을 자세히 보면, 'URL에 지정한 명령이 올바르지 않습니다. URL을 잘못 입력했거나, 올바르지 않은 링크를 따라갔을 수 있습니다. 가온 위키에 사용하는 소프트웨어의 버그일 수도 있습니다.' 라고 나타나 있다.
$wgSVGConverter = 'ImageMagick';
# 오류 해결은 [https://issue.librewiki.net/T515 리브레 위키 이슈 트래커]에서 찾았다.
</syntaxhighlight>
부분은 반드시 주석처리 한다.


====수정 전====
그리고 [[미디어위키]] 버전이 1.30 이상인 경우, 썸네일을 재생성하자. [[미디어위키]]의 루트 폴더에서 '''maintenance''' 폴더로 이동한 뒤, 아래의 명령어를 입력하자.
* 리버티 스킨에 있는 '''LibertyTemplate.php''' 파일을 수정한다.


<syntaxhighlight lang="PHP" highlight="4-5" start='343' line>
<syntaxhighlight lang='console'>
<div class="modal-body">
root@gaon:/var/www/html/w/maintenance# php rebuildImages.php
<div id="modal-login-alert" class="alert alert-hidden alert-danger" role="alert">
</syntaxhighlight>
</div>
<form id="modal-loginform" name="userlogin" class="modal-loginform"
  method="post">
<input class="loginText form-control" id="wpName1" tabindex="1"
  placeholder="<?php echo $skin->msg( 'userlogin-yourname-ph' )->plain() ?>" value="" name="lgname">
</syntaxhighlight><br/>
 
====수정 후====
<syntaxhighlight lang="PHP" highlight="4-5" start='343' line>
<div class="modal-body">
<div id="modal-login-alert" class="alert alert-hidden alert-danger" role="alert">
</div>
<form id="modal-loginform" name="userlogin" class="modal-loginform"
  method="post" onsubmit="return LoginManage();">
<input class="loginText form-control" id="wpName1" tabindex="1"
  placeholder="<?php echo $skin->msg( 'userlogin-yourname-ph' )->plain() ?>" value="" name="lgname">
</syntaxhighlight><br/>


===신택스 강조(Syntax Highlight) 사용시 사용된 문서가 '''구문 강조에 오류가 있는 문서'''로 분류되는 현상===
===신택스 강조(Syntax Highlight) 사용시 사용된 문서가 '''구문 강조에 오류가 있는 문서'''로 분류되는 현상===
160번째 줄: 93번째 줄:
이후 미디어위키 1.34 코어에 포함된 버전은 해당 문제가 발생하지 않는다. 1.33.1에 포함된 버전만 문제인 것 같다.
이후 미디어위키 1.34 코어에 포함된 버전은 해당 문제가 발생하지 않는다. 1.33.1에 포함된 버전만 문제인 것 같다.


===어두운 모드 사용시 표가 있는 부분의 배경색이 검정색이 되지 않는 버그===
====파이썬3 설치====
[[사용자:hunhee|hunhee님]]이 알려주셨어요!
1.35.1 기준, 서버에 파이썬3를 설치하면 해당 문제는 발생하지 않는다.
 
설치방법은 쉘에
 
<syntaxhighlight lang='console'>
root@gaon:/# apt update && apt -y install python3
</syntaxhighlight>
 
이라고 입력한다. 설치가 되었는지 확인하려면,
<syntaxhighlight lang='console'>
root@gaon:/# python3 --version
Python 3.8.5
</syntaxhighlight>
이라고 입력한다. 이때 버전은 위의 버전과 다를 수 있다.
 
===TitleKey 확장기능 설치===
대소문자 구분 없이 문서를 검색 할 수 있는 [[미디어위키/확장기능/TitleKey|TitleKey]] 설정 중, <code>php extensions/TitleKey/maintenance/rebuildTitleKeys.php</code> 명령어를 입력할 때, 경로를 찾지 못하는 문제가 있다.
 
문제는 환경변수 <code><nowiki>$IP</nowiki></code>가 경로를 제대로 반환하지 않아 생기는 문제이다.
 
여기서는 환경변수 <code><nowiki>$IP</nowiki></code>를 수정하지 않고, 9번째 줄을 절대경로로 바꾸어 사용했다. 사용 환경에 맞추어 수정하길 바란다.


리버티 스킨 루트 폴더에 있는 '''"SkinLiberty.php"''' 파일을 열어서 수정합니다.
====수정 전====
====수정 전====
<syntaxhighlight lang="PHP" highlight="1-2" start='138' line>
<syntaxhighlight lang='php' start='5' highlight='5'>
$LibertyDarkCss = "body, .Liberty, .dropdown-menu, .dropdown-item, .Liberty .nav-wrapper .navbar .form-inline .btn, .Liberty .content-wrapper .liberty-sidebar .liberty-right-fixed .live-recent .live-recent-header .nav .nav-item .nav-link.active, .Liberty .content-wrapper .liberty-content .liberty-content-main table.wikitable tr > th, .Liberty .content-wrapper .liberty-content .liberty-content-main table.wikitable tr > td, table.mw_metadata th, .Liberty .content-wrapper .liberty-content .liberty-content-main table.infobox th, #preferences fieldset:not(.prefsection), #preferences div.mw-prefs-buttons, .navbox, .navbox-subgroup, .navbox > tbody > tr:nth-child(even) > .navbox-list{
$IP = getenv( 'MW_INSTALL_PATH' );
background-color:#000;
if ( $IP === false ) {
color: #DDD;
$IP = __DIR__ . '/../..';
}
}
require_once "$IP/maintenance/Maintenance.php";
 
// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
require __DIR__ . '/../includes/TitleKey.php';
}
</syntaxhighlight>
</syntaxhighlight>


====수정 후====
====수정 후====
<syntaxhighlight lang="PHP" highlight="1-2" start='138' line>
<syntaxhighlight lang='php' start='5' highlight='5'>
$LibertyDarkCss = "body, .Liberty, .dropdown-menu, .dropdown-item, .Liberty .nav-wrapper .navbar .form-inline .btn, .Liberty .content-wrapper .liberty-sidebar .liberty-right-fixed .live-recent .live-recent-header .nav .nav-item .nav-link.active, .Liberty .content-wrapper .liberty-content .liberty-content-main table.wikitable tr > th, .Liberty .content-wrapper .liberty-content .liberty-content-main table.wikitable tr > td, table.mw_metadata th, .Liberty .content-wrapper .liberty-content .liberty-content-main table.infobox th, #preferences fieldset:not(.prefsection), #preferences div.mw-prefs-buttons, .navbox, .navbox-subgroup, .navbox > tbody > tr:nth-child(even) > .navbox-list, table.wikitable{
$IP = getenv( 'MW_INSTALL_PATH' );
background-color:#000!important;
if ( $IP === false ) {
color: #DDD;
$IP = __DIR__ . '/../..';
}
}
require_once "/var/www/html/w/maintenance/Maintenance.php";
 
// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
require __DIR__ . '/../includes/TitleKey.php';
}
</syntaxhighlight>
 
또는 상대경로로 지정해도 된다. 이 경우에는 미디어위키 설치 경로에 구애받지 않는다는 장점이 있다.
 
<syntaxhighlight lang='php' start='5' highlight='5'>
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = __DIR__ . '/../..';
}
require_once "../../../maintenance/Maintenance.php";
 
// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
require __DIR__ . '/../includes/TitleKey.php';
}
</syntaxhighlight>
 
==비주얼 에디터 설치==
비주얼 에디터를 설치하고, 사용할 수 있다. 다만 짧은 주소 설정시 오류가 발생할 수 있으므로 본 코드를 사용하자.
 
===짧은 주소 설정(선택, 권장)===
짧은 주소를 설정하자. .htaccess를 사용하므로 아파치 이용자만 할 수 있다.(짧은 주소 자체는 nginx도 할 수 있지만, 서술하지 않음).
 
먼저 [[미디어위키/LocalSettings.php|LocalSettings.php]]가 있는 루트 폴더로 이동하여 .htaccess를 열자. 없으면 생성하자.
 
이후 아래와 같이 입력한다.
 
<syntaxhighlight>
RewriteEngine On
RewriteBase /w/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /w/index.php [L]
 
RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]
 
RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/thumb.php?f=$1&width=$2 [L,QSA,B]
 
RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/thumb.php?f=$1&width=$2&archived=1 [L,QSA,B]
</syntaxhighlight>
 
여기서 2번째 줄과 6번째 줄에 있는 <code>/w/</code> 부분에 원하는 줄임(<nowiki>https://example.com/w/문서명</nowiki>) 단어를 입력한다.
 
[https://wnw1005.tistory.com/168 출처 : 씨실과 날실님 티스토리 블로그], [https://www.mediawiki.org/wiki/Topic:W2ahzg3yi27mvp9y 미디어위키 토론 중 Rogerhc님의 답변]
 
이후 LocalSettings.php 하단에 다음과 같이 입력한다.
<syntaxhighlight lang='php'>
$wgScriptExtension = ".php";
$wgArticlePath = "{$wgScriptPath}/$1";
$wgUsePathInfo = true;
</syntaxhighlight>
</syntaxhighlight>


* 138번째 줄의 '''"<nowiki>{</nowiki>"''' 바로 앞에 '''"<nowiki>, table.wikitable</nowiki>"'''을 붙히고, 139번째 줄에서 '''"#000"''' 다음에 '''"<nowiki>!important</nowiki>"'''을 붙힌다.
===비주얼 에디터 설치===
1.37버전은 이미 extensions 폴더에 있다. 코어에 포함되어 있으나, 삭제한 사람은 [https://www.mediawiki.org/wiki/Extension:VisualEditor 미디어위키 비주얼 에디터 페이지]에서 자신의 버전에 맞게 다운로드 받은 뒤 extensions 폴더 안에 넣는다.
 
이후 LocalSettings.php 하단에 다음과 같이 입력한다.
<syntaxhighlight lang='php'>
wfLoadExtension( 'VisualEditor' );
</syntaxhighlight>
 
이러면 끝이다.
 
== 미디어위키 1.39 버전 업그레이드 이후 분류값 앞에 점이 표시되고 세로로 정렬되는 문제 ==
미디어위키 1.39 rc버전에서는 이런 문제가 없었지만, 1.39 정식버전에서는 분류값 앞에 점이 표시되고, 세로로 정렬되는 문제가 있다. 또한 분류값이 '''분류:'''밑에 줄에 표시되는 문제가 있다.
[[파일:미디어위키1_39_분류_문제.png]]
 
이는 [[미디어위키:Common.css]] 문서를 수정하면 된다.
 
=== 수정 전 ===
<syntaxhighlight lang='css'>
/* 이 CSS 설정은 모든 스킨에 적용됩니다 */
.mw-highlight pre {
font-size: 90%;
}
</syntaxhighlight>
 
=== 수정 후 ===
<syntaxhighlight lang='css'>
/* 이 CSS 설정은 모든 스킨에 적용됩니다 */
.mw-highlight pre {
font-size: 90%;
}
 
/* 1.39 버전에서 분류 표시가 li로 표시돠는 문제 해결 */
#mw-normal-catlinks > ul {
list-style: none;
}
 
#mw-normal-catlinks > ul > li {
float: left;
margin-right: 15px;
}
 
/* 분류: 밑부분에 분류값이 표시되는 문제 해결 */
#mw-normal-catlinks {
display: flex;
align-items: center;
}
</syntaxhighlight>


==구현한 기능==
==구현한 기능==
* 아직 존재하지 않습니다.<br/>
=== 인디케이터 표시 ===
[https://github.com/merlinwarage/simple-scroll-progress simple-scroll-progress]를 이용하여 스크롤한 범위를 표시하는 기능입니다.
 
[[파일:리버티 스킨-스크롤 범위.gif]]<ref>초기의 타 라이브러리를 사용한 모습. 현재 버전은 본 위키에 적용되어 있다.</ref>
 
혹시 사용하고 싶다면, [https://github.com/gaon12/Liberty Liberty 깃허브 저장소]를 다운로드 받아 사용하면 된다. 라이브러리는 외부에서 불러오니 참고하자.
 
=== 클라우드플레어 원본 IP 주소 표시 ===
클라우드플레어 사용 시, 비로그인 유저가 문서를 편집하는 경우, ip주소가 클라우드플레어의 ip로 기록됩니다. 이를 수정해주는 확장기능을 개발하여 배포합니다.
 
{{깃허브/저장소|gaon12|mw_CloudflareRealIP}} 확장기능을 설치하면, 원본 IP 주소가 표시됩니다.
 
==== 설치 ====
# 먼저 GitHub 저장소에서 확장기능을 다운로드하세요.
# 다운로드 받은 확장기능을 미디어위키의 "extensions" 폴더에 업로드합니다.
# 미디어위키의 "LocalSettings.php" 파일을 찾아 아래 코드를 추가하세요
 
<br>
<syntaxhighlight lang='php'>
wfLoadExtension( 'CloudflareRealIP' );
</syntaxhighlight>
 
==== 사용법 ====
이 확장기능을 설치하고 나면 아무런 추가 설정 없이 자동으로 작동합니다. CloudflareRealIP 확장기능은 미디어위키에서 로그인하지 않고 편집할 때 Cloudflare의 IP 주소 대신 원래 사용자의 IP 주소를 저장합니다.
 
==== 참고 사항 ====
이 확장기능은 미디어위키 1.25 이상과 호환됩니다. 또한 Cloudflare 서비스를 사용하는 경우에만 필요하며, Cloudflare를 사용하지 않거나 단순히 DNS만 사용하는 경우 설치할 필요가 없습니다.
 
==== 원리 ====
Cloudflare Real IP 확장 기능의 작동 원리는 다음과 같습니다:
 
# 사용자가 미디어위키에서 로그인하지 않고 편집을 진행합니다.
# Cloudflare는 사용자의 원래 IP 주소를 "CF-Connecting-IP"라는 HTTP 헤더를 통해 전달합니다.
# 미디어위키에서는 로그인하지 않은 사용자의 IP 주소를 기록하려 할 때 UserGetIP 이벤트가 발생합니다.
# Cloudflare Real IP 확장 기능은 이 이벤트를 통해 사용자의 IP 주소를 가져옵니다.
# 확장 기능은 $_SERVER['HTTP_CF_CONNECTING_IP'] 변수를 확인하여 Cloudflare가 전달한 원래 사용자의 IP 주소가 있는지 확인합니다.
# 원래 사용자의 IP 주소가 있다면, 확장 기능은 이 IP 주소로 미디어위키에 저장되는 IP 주소를 변경합니다.
# 결과적으로, 미디어위키에서 로그인하지 않은 사용자의 편집 기록에 원래 사용자의 IP 주소가 저장됩니다.
 
이 확장 기능을 사용하면 Cloudflare를 사용하는 경우에도 미디어위키에서 로그인하지 않은 사용자의 원래 IP 주소를 정확하게 기록할 수 있습니다. 이로 인해 IP 주소를 기반으로 한 사용자 관리 및 안전 조치가 훨씬 간편해집니다.
 
==== 라이선스 ====
[[MIT 라이선스]]로 배포됩니다.
 
=== 단축 URL 생성 ===
긴 문서의 URL, 특히 문서명이 한글로 이루어져 있는 경우, URL이 길어져 공유할 때 불편합니다. 그래서 단축 URL을 생성하고, 복사할 수 있는 기능을 추가했습니다.
 
==== 사용 방법 ====
문서 최하단에 CCL 표기 부분과 '''개인정보처리방침 가온 위키 소개 면책 조항''' 링크 부분 사이에 '''• 현재 페이지 URL 줄이기''' 메뉴를 누르면, 팝업창이 뜨면서 현재 문서의 단축된 URL이 생성이 됩니다.
 
==== 원리 ====
[[미디어위키]]에는 문서를 편집할 때마다, 문서의 역사에 고유한 번호를 부여합니다. 이 번호는 <code>oldid</code>로, 1부터 편집할 때마다 1씩 증가합니다. 자세한 내용은 [[미디어위키/oldid]] 문서를 참고하세요!
 
<code>oldid</code> 값을 62진법<ref>숫자(0-9) + 알파벳 대문자(A-Z) + 알파벳 소문자(a-z)</ref>으로 변환하여 단축된 URL을 제공합니다. 일반 문서와 혼동이 생기지 않도록, <code>/a/</code> 경로로 제공됩니다.
 
==== 주의사항 ====
* <code>oldid</code> 값은 문서가 편집되면 새롭게 바뀌므로, 예전에 생성된 URL 값과 현재의 URL 값에는 차이가 있을 수 있습니다. 하지만 둘 다 원래의 문서로 자동으로 이동하므로 걱정하지 않아도 됩니다.
* 특수 문서, 편집 페이지 등 <code>oldid</code> 값이 존재하지 않는 페이지에는 본 메뉴가 생성되지 않습니다.


==각주==
==각주==

2023년 5월 23일 (화) 22:28 기준 최신판

이 문서는...[원본 편집]

답답한 우리의 가온 위키 관리자가 구현하지 못해, 착한 유저가 해결책을 제시한 경우, 감사의 표시로 이곳과 가온 위키 커뮤니티에 표시하는 곳입니다.

구현 못한 부분[원본 편집]

  • 아직까지 없습니다.

해결됨[원본 편집]

리버티 스킨 관련 문제[원본 편집]

리버티 스킨과 관련된 문제는 가온 위키:기능 구현 불가-누가 해결책을 알려주세요!/리버티 스킨 문서를 참고하자.

영상 가져오기(Embed) 관련 문제[원본 편집]

외부 서비스들 중에서 가져오지 못하는 것들은 가온 위키:기능 구현 불가-누가 해결책을 알려주세요!/영상 가져오기 문서를 참고하자!

이미지 관련 문제[원본 편집]

이미지 크기 설정시 파일 링크만 뜨는 현상[원본 편집]

[[파일:updates.png|100px]] 이렇게 하면 일반 문서처럼 링크로 뜬다. 서버 이전 전에는 이러지 않았는데...

미디어위키 헬프 데스크에서 찾았다.

수정 전[원본 편집]

미디어위키의 루트 폴더에 있는 LocalSettings.php를 수정한다.

수정 후[원본 편집]

LocalSettings.php의 하단 부분에 추가하자.

$wgGenerateThumbnailOnParse = true;

그리고 미디어위키 버전이 1.30 이상인 경우, 썸네일을 재생성하자. 미디어위키의 루트 폴더에서 maintenance 폴더로 이동한 뒤, 아래의 명령어를 입력하자.

root@gaon:/var/www/html/w/maintenance# php rebuildImages.php
하고 싶은말[원본 편집]

이 오류는 미디어위키 1.27 버전에서는 없던 오류이므로 1.30 이상 버전의 오류같다. 물론 썸네일은 Imagemagick가 미리 설치 및 미디어위키에서 미리 설정 되어 있어야 한다.

SVG 파일 업로드시 썸네일의 흑백화[원본 편집]

SVG 파일을 업로드하면 원래 가지고 있던 색상값은 표시되지 않고 흑백으로만 표시가 된다. 이는 SVG를 png로 변환하는 프로그램인 ImageMagick의 특정 버전에서 나타난 오류이다. zlzleking님이 보고해 주셨다.

수정 전[원본 편집]

먼저 Inkscape를 설치한다. 우분투 기준으로 아래의 명령어를 입력하면 된다.

root@gaon:/# apt update
root@gaon:/# apt install inkscape

이후 미디어위키의 루트 폴더에 있는 LocalSettings.php를 수정한다.

$wgSVGConverter = 'ImageMagick';
수정 후[원본 편집]

LocalSettings.php의 하단 부분에 추가하자. Inkscape의 경로는 자신의 환경에 맞춰 수정하자.

$wgSVGConverterPath = '/usr/bin/inkscape';
$wgSVGConverters = [
        'Inkscape' => '/usr/bin/inkscape -w $width -z -w $width -f $input -e $output',
];
$wgSVGConverter = 'Inkscape';

#$wgSVGConverter = 'ImageMagick';

여기서

$wgSVGConverter = 'ImageMagick';

부분은 반드시 주석처리 한다.

그리고 미디어위키 버전이 1.30 이상인 경우, 썸네일을 재생성하자. 미디어위키의 루트 폴더에서 maintenance 폴더로 이동한 뒤, 아래의 명령어를 입력하자.

root@gaon:/var/www/html/w/maintenance# php rebuildImages.php

신택스 강조(Syntax Highlight) 사용시 사용된 문서가 구문 강조에 오류가 있는 문서로 분류되는 현상[원본 편집]

미디어위키 1.33.1 버전에 있는 SyntaxHighlight 확장기능을 사용하는 경우, "구문 강조에 오류가 있는 문서"로 자동 분류된다.

미디어위키 코어에 포함되어 있는 버전만 파이썬 전역 환경변수 처리를 요구한다.

구버전 사용[원본 편집]

1.32.x 버전의 구버전을 사용하는 방법이다. 웹호스팅과 같이 서버를 직접 조작하지 못하는 경우에 사용하면 된다.

SyntaxHighlight 다운로드 페이지로 이동 후, 미디어위키 버전을 1.32 버전으로 설정 후, 기존에 있던 확장기능 삭제 후 새로 받은 버전으로 업로드 한다.

확장기능 페이지서 1.33버전으로 다운로드[원본 편집]

이상하게 1.33 버전으로 다운로드 받아도 작동한다. 아마도 코어 파일에 포함되어 있는 버전만 파이썬 전역 환경변수 처리해야 하는 것 같다.

이후 미디어위키 1.34 코어에 포함된 버전은 해당 문제가 발생하지 않는다. 1.33.1에 포함된 버전만 문제인 것 같다.

파이썬3 설치[원본 편집]

1.35.1 기준, 서버에 파이썬3를 설치하면 해당 문제는 발생하지 않는다.

설치방법은 쉘에

root@gaon:/# apt update && apt -y install python3

이라고 입력한다. 설치가 되었는지 확인하려면,

root@gaon:/# python3 --version
Python 3.8.5

이라고 입력한다. 이때 버전은 위의 버전과 다를 수 있다.

TitleKey 확장기능 설치[원본 편집]

대소문자 구분 없이 문서를 검색 할 수 있는 TitleKey 설정 중, php extensions/TitleKey/maintenance/rebuildTitleKeys.php 명령어를 입력할 때, 경로를 찾지 못하는 문제가 있다.

이 문제는 환경변수 $IP가 경로를 제대로 반환하지 않아 생기는 문제이다.

여기서는 환경변수 $IP를 수정하지 않고, 9번째 줄을 절대경로로 바꾸어 사용했다. 사용 환경에 맞추어 수정하길 바란다.

수정 전[원본 편집]

$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
	$IP = __DIR__ . '/../..';
}
require_once "$IP/maintenance/Maintenance.php";

// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
	require __DIR__ . '/../includes/TitleKey.php';
}

수정 후[원본 편집]

$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
	$IP = __DIR__ . '/../..';
}
require_once "/var/www/html/w/maintenance/Maintenance.php";

// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
	require __DIR__ . '/../includes/TitleKey.php';
}

또는 상대경로로 지정해도 된다. 이 경우에는 미디어위키 설치 경로에 구애받지 않는다는 장점이 있다.

$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
	$IP = __DIR__ . '/../..';
}
require_once "../../../maintenance/Maintenance.php";

// In case we want to do offline initialization...
if ( !class_exists( 'TitleKey' ) ) {
	require __DIR__ . '/../includes/TitleKey.php';
}

비주얼 에디터 설치[원본 편집]

비주얼 에디터를 설치하고, 사용할 수 있다. 다만 짧은 주소 설정시 오류가 발생할 수 있으므로 본 코드를 사용하자.

짧은 주소 설정(선택, 권장)[원본 편집]

짧은 주소를 설정하자. .htaccess를 사용하므로 아파치 이용자만 할 수 있다.(짧은 주소 자체는 nginx도 할 수 있지만, 서술하지 않음).

먼저 LocalSettings.php가 있는 루트 폴더로 이동하여 .htaccess를 열자. 없으면 생성하자.

이후 아래와 같이 입력한다.

RewriteEngine On
RewriteBase /w/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /w/index.php [L]

RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/index.php [L]

RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/thumb.php?f=$1&width=$2 [L,QSA,B]

RewriteCond %{HTTP_USER_AGENT} !^(VisualEditor)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/thumb.php?f=$1&width=$2&archived=1 [L,QSA,B]

여기서 2번째 줄과 6번째 줄에 있는 /w/ 부분에 원하는 줄임(https://example.com/w/문서명) 단어를 입력한다.

출처 : 씨실과 날실님 티스토리 블로그, 미디어위키 토론 중 Rogerhc님의 답변

이후 LocalSettings.php 하단에 다음과 같이 입력한다.

$wgScriptExtension = ".php";
$wgArticlePath = "{$wgScriptPath}/$1";
$wgUsePathInfo = true;

비주얼 에디터 설치[원본 편집]

1.37버전은 이미 extensions 폴더에 있다. 코어에 포함되어 있으나, 삭제한 사람은 미디어위키 비주얼 에디터 페이지에서 자신의 버전에 맞게 다운로드 받은 뒤 extensions 폴더 안에 넣는다.

이후 LocalSettings.php 하단에 다음과 같이 입력한다.

wfLoadExtension( 'VisualEditor' );

이러면 끝이다.

미디어위키 1.39 버전 업그레이드 이후 분류값 앞에 점이 표시되고 세로로 정렬되는 문제[원본 편집]

미디어위키 1.39 rc버전에서는 이런 문제가 없었지만, 1.39 정식버전에서는 분류값 앞에 점이 표시되고, 세로로 정렬되는 문제가 있다. 또한 분류값이 분류:밑에 줄에 표시되는 문제가 있다. 미디어위키1 39 분류 문제.png

이는 미디어위키:Common.css 문서를 수정하면 된다.

수정 전[원본 편집]

/* 이 CSS 설정은 모든 스킨에 적용됩니다 */
.mw-highlight pre {
	font-size: 90%;
}

수정 후[원본 편집]

/* 이 CSS 설정은 모든 스킨에 적용됩니다 */
.mw-highlight pre {
	font-size: 90%;
}

/* 1.39 버전에서 분류 표시가 li로 표시돠는 문제 해결 */
#mw-normal-catlinks > ul {
	list-style: none;
}

#mw-normal-catlinks > ul > li {
	float: left;
	margin-right: 15px;
}

/* 분류: 밑부분에 분류값이 표시되는 문제 해결 */
#mw-normal-catlinks {
	display: flex;
	align-items: center;
}

구현한 기능[원본 편집]

인디케이터 표시[원본 편집]

simple-scroll-progress를 이용하여 스크롤한 범위를 표시하는 기능입니다.

리버티 스킨-스크롤 범위.gif[1]

혹시 사용하고 싶다면, Liberty 깃허브 저장소를 다운로드 받아 사용하면 된다. 라이브러리는 외부에서 불러오니 참고하자.

클라우드플레어 원본 IP 주소 표시[원본 편집]

클라우드플레어 사용 시, 비로그인 유저가 문서를 편집하는 경우, ip주소가 클라우드플레어의 ip로 기록됩니다. 이를 수정해주는 확장기능을 개발하여 배포합니다.

Green tickmw_CloudflareRealIP 확장기능을 설치하면, 원본 IP 주소가 표시됩니다.

설치[원본 편집]

  1. 먼저 GitHub 저장소에서 확장기능을 다운로드하세요.
  2. 다운로드 받은 확장기능을 미디어위키의 "extensions" 폴더에 업로드합니다.
  3. 미디어위키의 "LocalSettings.php" 파일을 찾아 아래 코드를 추가하세요


wfLoadExtension( 'CloudflareRealIP' );

사용법[원본 편집]

이 확장기능을 설치하고 나면 아무런 추가 설정 없이 자동으로 작동합니다. CloudflareRealIP 확장기능은 미디어위키에서 로그인하지 않고 편집할 때 Cloudflare의 IP 주소 대신 원래 사용자의 IP 주소를 저장합니다.

참고 사항[원본 편집]

이 확장기능은 미디어위키 1.25 이상과 호환됩니다. 또한 Cloudflare 서비스를 사용하는 경우에만 필요하며, Cloudflare를 사용하지 않거나 단순히 DNS만 사용하는 경우 설치할 필요가 없습니다.

원리[원본 편집]

Cloudflare Real IP 확장 기능의 작동 원리는 다음과 같습니다:

  1. 사용자가 미디어위키에서 로그인하지 않고 편집을 진행합니다.
  2. Cloudflare는 사용자의 원래 IP 주소를 "CF-Connecting-IP"라는 HTTP 헤더를 통해 전달합니다.
  3. 미디어위키에서는 로그인하지 않은 사용자의 IP 주소를 기록하려 할 때 UserGetIP 이벤트가 발생합니다.
  4. Cloudflare Real IP 확장 기능은 이 이벤트를 통해 사용자의 IP 주소를 가져옵니다.
  5. 확장 기능은 $_SERVER['HTTP_CF_CONNECTING_IP'] 변수를 확인하여 Cloudflare가 전달한 원래 사용자의 IP 주소가 있는지 확인합니다.
  6. 원래 사용자의 IP 주소가 있다면, 확장 기능은 이 IP 주소로 미디어위키에 저장되는 IP 주소를 변경합니다.
  7. 결과적으로, 미디어위키에서 로그인하지 않은 사용자의 편집 기록에 원래 사용자의 IP 주소가 저장됩니다.

이 확장 기능을 사용하면 Cloudflare를 사용하는 경우에도 미디어위키에서 로그인하지 않은 사용자의 원래 IP 주소를 정확하게 기록할 수 있습니다. 이로 인해 IP 주소를 기반으로 한 사용자 관리 및 안전 조치가 훨씬 간편해집니다.

라이선스[원본 편집]

MIT 라이선스로 배포됩니다.

단축 URL 생성[원본 편집]

긴 문서의 URL, 특히 문서명이 한글로 이루어져 있는 경우, URL이 길어져 공유할 때 불편합니다. 그래서 단축 URL을 생성하고, 복사할 수 있는 기능을 추가했습니다.

사용 방법[원본 편집]

문서 최하단에 CCL 표기 부분과 개인정보처리방침 가온 위키 소개 면책 조항 링크 부분 사이에 • 현재 페이지 URL 줄이기 메뉴를 누르면, 팝업창이 뜨면서 현재 문서의 단축된 URL이 생성이 됩니다.

원리[원본 편집]

미디어위키에는 문서를 편집할 때마다, 문서의 역사에 고유한 번호를 부여합니다. 이 번호는 oldid로, 1부터 편집할 때마다 1씩 증가합니다. 자세한 내용은 미디어위키/oldid 문서를 참고하세요!

oldid 값을 62진법[2]으로 변환하여 단축된 URL을 제공합니다. 일반 문서와 혼동이 생기지 않도록, /a/ 경로로 제공됩니다.

주의사항[원본 편집]

  • oldid 값은 문서가 편집되면 새롭게 바뀌므로, 예전에 생성된 URL 값과 현재의 URL 값에는 차이가 있을 수 있습니다. 하지만 둘 다 원래의 문서로 자동으로 이동하므로 걱정하지 않아도 됩니다.
  • 특수 문서, 편집 페이지 등 oldid 값이 존재하지 않는 페이지에는 본 메뉴가 생성되지 않습니다.

각주[원본 편집]

  1. 초기의 타 라이브러리를 사용한 모습. 현재 버전은 본 위키에 적용되어 있다.
  2. 숫자(0-9) + 알파벳 대문자(A-Z) + 알파벳 소문자(a-z)
• 현재 페이지 URL 줄이기