LimeSurvey Manual
Menu
Navigation
Main page
Recent changes
Help
Special pages
Printable version
Recent changes
Help
English
Log in
Login
Log in to your account
English
Log in to Manual
Get started for free
Sign up
x
Main chapters
LimeSurvey Cloud vs LimeSurvey CE
LimeSurvey Cloud - Quick start guide
LimeSurvey CE - Installation
How to design a good survey (Guide)
Getting started
LimeSurvey configuration
Introduction - Surveys
View survey settings
View survey menu
View survey structure
Introduction - Questions
Introduction - Question Groups
Introduction - Surveys - Management
Survey toolbar options
Multilingual survey
Quick start guide - ExpressionScript
Advanced features
General FAQ
Troubleshooting
Workarounds
License
Version change log
Plugins - Advanced
Main chapters
Actions
Translate
Language statistics
Message group statistics
Export
Special
Export translations
Settings
Group
Activating a survey
Adding answers or subquestions
Administering LimeSurvey
Alternatives to the LimeSurvey import function
Assessments
Backup entire database
Batch deletion
Category:Advanced Question Settings
Category:General Question Options
Category:Question Settings
Central Participant Database
Changing an active survey
Check data integrity
Check question logic
Check survey logic - Advanced
Closing a survey
ComfortUpdate
Copy question
Custom translation
Data encryption
Data entry
Data policy settings
DateFunctions
Default answers
Delete question
Delete survey
Display/Export survey
Edit question
Email bounce tracking system
Email templates
Export question
Export responses
Exporting results
Expression Manager
Expression Manager sample surveys
ExpressionScript - Presentation
ExpressionScript Engine - Quick start guide
ExpressionScript examples
ExpressionScript How-tos
ExpressionScript sample surveys
Extension compatibility
Failed email notifications
First login - your user preferences
General FAQ
General settings
Getting started
Global settings
Google API howto
Home page settings
How to design a good survey (guide)
Import responses
Importing a survey
Installation - LimeSurvey CE
Installation FAQ
Installation security hints
Installation using a command line interface (CLI)
Installation Version 1.92 or older
Iterate survey
Label sets
LDAP settings
License
LimeSurvey Manual
LimeSurvey PRO vs LimeSurvey CE
LimeSurvey Users
List question groups
List questions
Localization
Major version upgrade
Make your plugin compatible with LS4
Manage user groups
Manage users
Menu configuration
Menu entries configuration
Multilingual survey
New Template System in LS3.x
Not categorized and advanced features
Notifications & data
Optional settings
Overview
Panel integration
Participant settings
Plugin manager
Plugin menu
Plugins - advanced
Presentation
Preview function
Problems & solutions
Publication & access
QS:Allowed filetypes
QS:Alphasort
QS:Answer width
QS:Array filter
QS:Array filter exclude
QS:Array filter style
QS:Assessment value
QS:Autocheck exclusive option
QS:Category separator
QS:Chart type
QS:Choice column width
QS:Choice header
QS:Code filter
QS:Commented checkbox
QS:CSS Class
QS:Date max
QS:Date min
QS:Date time format
QS:Display chart
QS:Display columns
QS:Display map
QS:Display rows
QS:Display type
QS:Dropdown dates
QS:Dropdown dates year max
QS:Dropdown dates year min
QS:Dropdown prefix
QS:Dropdown prepostfix
QS:Dropdown separators
QS:Dropdown size
QS:Dualscale headerA
QS:Dualscale headerB
QS:Em validation q
QS:Em validation q tip
QS:Em validation sq
QS:Em validation sq tip
QS:Encryption
QS:Equals num value
QS:Equation
QS:Exclusive option
QS:Get order previous q
QS:Hidden
QS:Hide tip
QS:Input box size
QS:Input boxes
QS:Input max characters
QS:Label column width
QS:Location city
QS:Location country
QS:Location defaultcoordinates
QS:Location mapheight
QS:Location mapservice
QS:Location mapwidth
QS:Location mapzoom
QS:Location nodefaultfromip
QS:Location postal
QS:Location state
QS:Mandatory
QS:Max answers
QS:Max filesize
QS:Max num value
QS:Max num value n
QS:Max num value sgqa
QS:Max subquestions
QS:Maximum chars
QS:Maximum number of files
QS:Min answers
QS:Min num value
QS:Min num value n
QS:Minimum number of files
QS:Minute step interval
QS:Month display style
QS:Multiflexible checkbox
QS:Multiflexible max
QS:Multiflexible min
QS:Multiflexible step
QS:Num value int only
QS:Numbers only
QS:Other
QS:Other comment mandatory
QS:Other numbers only
QS:Other Position
QS:Other replace text
QS:Page break
QS:Prefix
QS:Preg validation
QS:Printable survey relevance help
QS:Public statistics
QS:Question theme
QS:Random group
QS:Random order
QS:Rank header
QS:Relevance
QS:Remove text or uncheck checkbox
QS:Repeat headers
QS:Reverse
QS:Reverse answer order
QS:Samechoiceheight
QS:Samelistheight
QS:Scale export
QS:Show comment
QS:Show grand total
QS:Show title
QS:Show totals
QS:Showpopups
QS:Slider accuracy
QS:Slider default
QS:Slider handle shape
QS:Slider handle Unicode shape
QS:Slider initial value
QS:Slider layout
QS:Slider max
QS:Slider middlestart
QS:Slider min
QS:Slider orientation
QS:Slider rating
QS:Slider reset
QS:Slider reverse
QS:Slider separator
QS:Slider showminmax
QS:Subquestion width
QS:Suffix
QS:Text input width
QS:Theme editor - advanced options
QS:Time limit
QS:Time limit action
QS:Time limit countdown message
QS:Time limit disable next
QS:Time limit disable prev
QS:Time limit message
QS:Time limit message delay
QS:Time limit message style
QS:Time limit timer style
QS:Time limit warning
QS:Time limit warning display time
QS:Time limit warning message
QS:Time limit warning style
QS:Use dropdown
QS:Value range allows missing
Question groups - introduction
Question toolbar options
Question type - 5 point choice
Question type - Array
Question type - Array (10 point choice)
Question type - Array (5 point choice)
Question type - Array (Increase-Same-Decrease)
Question type - Array (Numbers)
Question type - Array (Texts)
Question type - Array (Yes-No-Uncertain)
Question type - Array by column
Question type - Array dual scale
Question type - Date
Question type - Equation
Question type - File upload
Question type - Gender
Question type - Huge free text
Question type - Language switch
Question type - List (Dropdown)
Question type - List (Radio)
Question type - List with comment
Question type - Long free text
Question type - Multiple choice
Question type - Multiple choice with comments
Question type - Multiple numerical input
Question type - Multiple short text
Question type - Numerical input
Question type - Ranking
Question type - Short free text
Question type - Text display
Question type - Yes-No
Question types
Questions - introduction
QueXML PDF Export
Quick start guide - LimeSurvey 2.50+
Quick start guide - LimeSurvey 3.0+
Quick-translation
Regenerate question codes
Reorder questions and question groups
Reset conditions
Resources
Responses & statistics
Responses (survey results)
Running a survey safely
Setting conditions
SGQA identifier
Statistics
Survey group permissions
Survey menu
Survey participants
Survey permissions
Survey quotas
Survey settings
Survey structure
Survey toolbar options
Surveys - introduction
Surveys - management
Tab Separated Value survey structure
Template:Deprecated
Template:DeprecatedIn
Template:Example
Template:FeatureChange
Template:FeatureStarting
Template:Hint
Template:NewIn
Template:UpdatedIn
Testing a survey
Text elements
Theme editor
Theme options
Themes
Timing statistics
Tools
Transferring an installation
Translating LimeSurvey
Troubleshooting
TwoFactorAdminLogin
Upgrading from a previous version
URL fields
Using regular expressions
Version change log
Version guide
View saved but not submitted responses
Workarounds
Language
aa - Afar
aae - Arbëresh
ab - Abkhazian
abs - Ambonese Malay
ace - Acehnese
acf - Saint Lucian Creole
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
apc - Levantine Arabic
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgc - Haryanvi
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Rinconada Bikol
bug - Buginese
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
ccp - Chakma
cdo - Mindong
ce - Chechen
ceb - Cebuano
ch - Chamorro
chn - Chinook Jargon
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cps - Capiznon
cpx - Puxian
cpx-hans - Puxian (Simplified Han script)
cpx-hant - Puxian (Traditional Han script)
cpx-latn - Puxian (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Dobrujan Tatar
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Southern Dagaare
din - Dinka
diq - Dimli
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dua - Duala
dv - Divehi
dz - Dzongkha
ee - Ewe
efi - Efik
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan
gan-hans - Gan (Simplified Han script)
gan-hant - Gan (Traditional Han script)
gcf - Guadeloupean Creole
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
hak-hans - Hakka (Simplified Han script)
hak-hant - Hakka (Traditional Han script)
hak-latn - Hakka (Latin script)
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hno - Northern Hindko
ho - Hiri Motu
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
iba - Iban
ibb - Ibibio
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
isv-cyrl - Interslavic (Cyrillic script)
isv-latn - Interslavic (Latin script)
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
kge - Komering
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
knc - Central Kanuri
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kusaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lua - Luba-Lulua
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mui - Musi
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nahuatl
nan - Minnan
nan-hant - Minnan (Traditional Han script)
nan-latn-pehoeji - Minnan (Pe̍h-ōe-jī)
nan-latn-tailo - Minnan (Tâi-lô)
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
nit - Southeastern Kolami
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nr - South Ndebele
nrm - Norman
nso - Northern Sotho
nup - Nupe
nv - Navajo
ny - Nyanja
nyn - Nyankole
nyo - Nyoro
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Pitcairn-Norfolk
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rut - Rutul
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Atayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tig - Tigre
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
ttj - Tooro
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wo - Wolof
wuu - Wu
wuu-hans - Wu (Simplified Han script)
wuu-hant - Wu (Traditional Han script)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yue - Cantonese
yue-hans - Cantonese (Simplified Han script)
yue-hant - Cantonese (Traditional Han script)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zgh-latn - Standard Moroccan Tamazight (Latin script)
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
{{DISPLAYTITLE:플러그인 - 고급}}<languages /> <span id="Overview"></span> == 개요 == LimeSurvey 2.05부터 LimeSurvey는 공식적으로 플러그인을 지원합니다. 일부 플러그인은 LimeSurvey 팀에서 지원되며 핵심으로 들어갈 것입니다. 일부는 LimeSurvey 팀 외부의 다른 사람들에 의해 지원됩니다. 이를 찾는 데 도움이 되도록 [[사용 가능한 타사 플러그인]]을 확인하고 여기에 자신만의 플러그인을 추가하세요! 플러그인을 사용하면 사용자는 정기적인 소프트웨어 업데이트의 혜택을 누리면서 설치 기능을 사용자 정의할 수 있습니다. 이 문서는 자신의 사용이나 클라이언트를 위해 LimeSurvey를 확장하는 개발자를 위한 것입니다. 최종 사용자에게는 이 문서가 도움이 되지 않습니다. 플러그인은 [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/iPlugin.php iPlugin] 인터페이스를 구현해야 합니다. [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/PluginBase.php PluginBase] 클래스에서 플러그인 클래스를 확장하는 것이 좋습니다. <div class="mw-translate-fuzzy"> 플러그인은 [https://manual.limesurvey.org/Plugin_events 이벤트] 메커니즘을 중심으로 개발되었습니다. </div> <span id="Plugin_settings"></span> == 플러그인 설정 == 확장하면 당사가 이미 구현한 플러그인에 필요한 공통 기능의 이점을 누릴 수 있습니다. 이러한 함수 중 하나는 getPluginSettings 함수의 구현입니다. 이 함수는 사용자의 구성 옵션을 설명하는 배열을 반환해야 합니다. 예제 플러그인은 단 하나의 구성 가능한 설정, 즉 표시될 메시지를 노출합니다. <syntaxhighlight lang="php"> protected $settings = array( 'logo' => array( 'type' => 'logo', 'path' => 'assets/logo.png' ), 'message' => array( 'type' => 'string', 'label' => 'Message' ) ); </syntaxhighlight> 배열에는 각 설정의 이름이 키로 포함되어 있습니다. 값은 필수 메타데이터가 포함된 배열입니다. 지원되는 유형은 다음과 같습니다: * logo * int (정수) * string (영숫자) * text * html * relevance * info * password * date * select 유형 외에도 여러 가지 다른 키를 사용할 수 있습니다. <div class="mw-translate-fuzzy"> * label, 레이블 정의 * default, 값이 지정되지 않은 경우 표시할 값을 정의합니다(측량 설정이 아닌 전역 설정에만 해당) * current, 현재 값을 정의합니다. * readOnly : 설정은 readonly * htmlOptions, 입력 부분의 htmlOptions( Yii 매뉴얼 [[https://www.yiiframework.com/doc/api/1.1/CHtml]]) * 플러그인 옵션 참조)로 표시됩니다. 일부 설정(html 또는 선택) : 위젯 옵션 설정 * labelOptions : 라벨의 htmlOptions * controlOptions : 라벨 및 입력 래퍼의 htmlOptions </div> 모든 실제 설정을 사용한 플러그인 예제는 [https://gitlab.com/SondagesPro/SampleAndDemo/exampleSettings exampleSettings]에서 찾을 수 있습니다. === 읽기 및 쓰기 플러그인 설정=== 플러그인 코드에서 직접 플러그인 설정을 읽고 쓸 수 있습니다. 예: <syntaxhighlight lang="php"> $mySetting = $this->get('mySetting'); $this->set('mySetting', $mySetting + 1); </syntaxhighlight> 설정이 null인 경우 기본값을 얻을 수 있습니다. <syntaxhighlight lang="php"> $mySetting = $this->get('mySetting', null, null, 10); // 기본값은 10입니다 </syntaxhighlight> <span id="Survey_specific_plugin_settings"></span> === 설문조사별 플러그인 설정 === 설문조사별 플러그인 설정을 생성하는 데는 두 가지 이벤트가 사용됩니다. * newSurveySettings * beforeSurveySettings 특정 설문조사를 위해 플러그인을 비활성화하는 예: <syntaxhighlight lang="php"> public function init() { $this->subscribe('beforeSurveySettings'); $this->subscribe('newSurveySettings'); // 기타 이벤트... } public function beforeSurveySettings() { $event = $this->event; $surveyId = intval($event->get('survey')); $event->set( "surveysettings.{$this->id}", [ 'name' => get_class($this), 'settings' => [ 'isActive' => [ 'type' => 'boolean', 'label' => 'isActive', 'current' => $this->getIsActive($surveyId), 'help' => 'Activate plugin for this survey' ], ] ] ); } public function newSurveySettings() { $event = $this->event; foreach ($event->get('settings') as $name => $value) { $this->set($name, $value, 'Survey', $event->get('survey'), false); } } private function getIsActive(int $sid): bool { return (bool) $this->get('isActive', 'Survey', $sid, false); } </syntaxhighlight> <span id="Events"></span> == 이벤트 == 플러그인은 이벤트를 구독하고 이벤트가 실행될 때 LimeSurvey와 상호 작용할 수 있습니다. 현재 사용 가능한 이벤트 목록을 보려면 [[플러그인 이벤트]]를 확인하세요. == API == 플러그인은 "공개" API를 통해서만 LimeSurvey를 확장해야 합니다. 즉, 소스 코드에 있는 클래스를 직접 사용하는 것은 나쁜 습관입니다. 강제로 그렇게 하지 않도록 할 수는 없지만, 사소한 업데이트를 할 때마다 플러그인이 손상될 위험이 있습니다. 가능한 한 [http://api.limesurvey.org/classes/LimeSurvey.PluginManager.LimesurveyApi.html 여기]에 설명된 방법을 통해서만 LimeSurvey와 상호 작용하십시오. 이벤트와 동일합니다. API 개체는 PluginBase에서 확장할 때 <code>$this->api</code> 통해 사용할 수 있습니다. 그렇지 않으면 플러그인 생성자에 전달되는 PluginManager 인스턴스에서 가져올 수 있습니다. 요청 시 API 객체에 새로운 기능을 추가할 수 있습니다. <span id="Form_extension{{NewIn|v=6}}"></span> == 양식 확장{{NewIn|v=6}} == <span id="Introduction"></span> === 소개 === 양식 확장 시스템은 각 양식에 대해 새 이벤트를 추가하지 않고 핵심 LimeSurvey에서 양식을 확장하는 보다 일반적인 방법입니다. 이는 다음 구성 요소로 구성됩니다: * '''FormExtensionService'''라는 전역 모듈 * 플러그인이 위의 모듈 초기화에 추가할 수 있는 '''입력 클래스''' 라이브러리 * '''위젯'''과 함께 LimeSurvey 보기 파일에 사용되는 사용자 정의 렌더러 각 형태는 '''위치 문자열'''로 식별됩니다.<form name><dot><tab name> . 예: <code>globalsettings.general</code> 또는 <code>globalsettings.security</code> . HTML이 없는 클래스 기반 시스템의 핵심은 핵심 HTML이 변경될 때 플러그인 작성자가 HTML을 업데이트할 수 있도록 하는 것입니다. 그래도 작성자는 필요한 경우 <code>RawHtmlInput</code> 유형을 사용할 수 있습니다. 이 시스템에서 할 수 없는 한 가지는 '새 양식 탭'을 추가하는 것입니다. <span id="Example"></span> === 예시 === 플러그인에서 양식에 새 입력을 추가하려면 <code>init()</code> 함수에서 다음 코드를 사용하십시오: TODO: 전역 대신 플러그인 설정에 저장 <syntaxhighlight lang="php"> // 파일 맨 위에 use LimeSurvey\Libraries\FormExtension\Inputs\TextInput; use LimeSurvey\Libraries\FormExtension\SaveFailedException; // Inside init() Yii::app()->formExtensionService->add( 'globalsettings.general', new TextInput([ 'name' => 'myinput', 'label' => 'Label', 'disabled' => true, 'tooltip' => 'Moo moo moo', 'help' => 'Some help text', 'save' => function($request, $connection) { $value = $request->getPost('myinput'); if ($value === 'some invalid value') { throw new SaveFailedException("Could not save custom input 'myinput'"); } else { SettingGlobal::setSetting('myinput', $value); } }, 'load' => function () { return getGlobalSetting('myinput'); } ]) ); </syntaxhighlight> <span id="Validation"></span> === 유효성 검사 === 입력 유효성 검사는 <code>save</code> 기능에서 수행됩니다(위 예 참조). 게시된 값이 유효하지 않은 경우 <code>SaveFailedException</code> 발생하고 경고 플래시 메시지가 사용자에게 표시됩니다. <span id="Supported_forms"></span> === 지원되는 양식 === 다음 양식을 확장할 수 있습니다. * globalsettings.general{{NewIn|v=6.0.0}} 다른 핵심 양식에 대한 지원을 추가하려면 pull-요청에 다음 변경 사항을 적용해야 합니다. 보기 파일에 다음을 추가합니다: <syntaxhighlight lang="php"> <?php use LimeSurvey\Libraries\FormExtension\FormExtensionWidget; use LimeSurvey\Libraries\FormExtension\Inputs\DefaultBaseRenderer; ?> ... more HTML <?= FormExtensionWidget::render( App()->formExtensionService->getAll('globalsettings.security'), new DefaultBaseRenderer() ); ?> </syntaxhighlight> 양식 HTML이 다른 양식과 다른 경우 <code>DefaultBaseRenderer</code> 기반으로 새 렌더러(renderer) 클래스를 만들어야 할 수도 있습니다. 아직 추가되지 않은 입력 유형을 사용하여 기본 렌더러 클래스를 확장해야 할 수도 있습니다. 두 번째 변경 사항은 양식을 저장하는 컨트롤러 작업에서 양식 확장 서비스 클래스에 대한 호출을 추가하는 것입니다: <syntaxhighlight lang="php"> $request = App()->request; Yii::app()->formExtensionService->applySave('globalsettings', $request); </syntaxhighlight> 그게 다입니다! <span id="Localization_{{NewIn|v=3}}"></span> == 현지화 {{NewIn|v=3}} == 플러그인이 자신의 로케일 파일을 추가하는 것이 가능합니다. 사용되는 파일 형식은 핵심 번역과 동일하게 .mo입니다. 파일은 다음 위치에 저장되어야 합니다. <plugin root folder>/locale/<language>/<language>.mo "<language>"에는 "de" 또는 "ko"와 같은 두 글자 단어입니다. 특정 로케일 파일을 사용하려면 플러그인 함수 gT를 사용하십시오. <syntaxhighlight lang="php"> $this->gT("A plugin text that needs to be translated"); </syntaxhighlight> 특정 문자열을 플러그인 특정 로케일 파일에서 찾을 수 없는 경우 함수는 핵심 로케일 파일을 찾습니다. 따라서 "취소"와 같은 문자열을 사용하는 것이 안전합니다. <syntaxhighlight lang="php"> $this->gT("Cancel"); // Will be translated even if "Cancel" is not in the plugin locale file </syntaxhighlight> 플러그인과 함께 뷰를 사용하는 경우 다음을 사용해야 합니다: <syntaxhighlight lang="php"> $plugin->gT("Translate me"); </syntaxhighlight> 보기에서 플러그인별 번역을 수행합니다. pot 파일의 모양에 대한 예로 [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.potlimesurvey.pot] 파일을 사용할 수 있습니다. 이를 번역 도구로 가져옵니다. <span id="Tools"></span> === 도구 === po 및 mo 파일을 편집하는 오픈 소스 도구 중 하나는 [https://poedit.net/Poedit]입니다. <span id="Logging_{{NewIn|v=3}}"></span> == 로깅 {{NewIn|v=3}} == 플러그인에서 무언가를 기록하고 싶다면 다음과 같이 작성하세요: <syntaxhighlight lang="php"> $this->log("Your message"); </syntaxhighlight> 기본 로깅 수준은 추적이지만 선택적인 두 번째 인수로 다른 로그 수준을 제공할 수 있습니다. <syntaxhighlight lang="php"> $this->log("Something went wrong!", CLogger::LEVEL_ERROR); </syntaxhighlight> 로그 파일은 폴더에서 찾을 수 있습니다: <limesurvey root folder>/tmp/runtime/plugin.log 플러그인 이름이 자동으로 카테고리로 사용됩니다. 플러그인의 오류만 확인하는 좋은 방법은 grep(Linux에서)을 사용하는 것입니다. $ tail -f tmp/runtime/plugin.log | grep <your plugin name> === Logging plugin deactivation due to error {{NewIn|v=6.13.3}} === Since version 5 of Limesurvey: a plugin can be automatically deactivated in the event of a PHP error. An email was sent automatically to LimeSurvey administrator. You can use the log system to generate an alert to the other server administrators. For example: to send an alert message <syntaxhighlight lang="php"> // Plugin error happen, plugin was disable : send email using CLogRoute 'pluginError' => array( 'class' => 'CEmailLogRoute', // https://www.yiiframework.com/doc/api/1.1/CEmailLogRoute 'categories' => 'application.model.plugin.setLoadError', // A plugin was disable 'subject' => '[ERROR] Plugin deactivated', 'emails' => ['webmaster@example.org'], 'sentFrom' => 'noreply@example.org', 'enabled' => 1, // enabled here ) </syntaxhighlight> Yii 1의 로깅 구성에 대한 추가 정보: [[Optional_settings#Logging_settings]]. <span id="Extension_updates_{{NewIn|v=4}}"></span> == 확장 업데이트 {{NewIn|v=4}} == LimeSurvey 버전 4.0.0부터 플러그인 및 기타 확장 업데이트를 처리하는 시스템이 마련되어 있습니다. 이 시스템을 사용하려면 확장 config.xml 파일에 업데이트 구성이 포함되어야 합니다. <syntaxhighlight lang="xml"> <updaters> <updater> <stable>1</stable> <type>rest</type> <source>https://comfortupdate.limesurvey.org/index.php?r=limestorerest</source> <manualUpdateUrl>https://somedownloadlink.com/maybegithub</manualUpdateUrl> </updater> </updaters> </syntaxhighlight> (위의 소스 태그는 LimeStore에서 사용 가능한 모든 확장 프로그램에 사용되는 LimeStore REST API를 가리킵니다.) {| class="wikitable" |+ Updater tag descriptions |- ! Tag ! Description |- | stable | "1" if this source only gives you stable version numbers; "0" if the source will also provide unstable versions, like <code>0.3.3-beta</code>. |- | type | For now, only type <code>rest</code> is supported. It's easy to add new updater types (version checkers), like git, wget, etc. |- | source | The URL to fetch new versions from. |- | manualUpdateUrl | URL which the user can go to to update the latest version of the extension. |- | automaticUpdateUrl | TODO |} 업데이트 프로그램을 제공하지 않으려면 구성 XML 파일에 다음 텍스트를 입력해야 합니다. <syntaxhighlight lang="xml"> <updaters disabled="disabled"> </updaters> </syntaxhighlight> 이렇게 하면 업데이트 시스템을 의도적으로 비활성화했으며 업데이트 시스템을 추가하는 것을 잊지 않았음을 시스템에 알릴 수 있습니다. 새로운 플러그인 '''UpdateCheck'''(기본적으로 설치 및 활성화됨)는 최고 관리자가 로그인할 때 최대 24시간마다 최대 한 번 비동기적으로 로그인할 때 ''모든'' 설치된 확장 프로그램에 대한 새 업데이트를 확인합니다. 새 버전이 발견되면 알림이 푸시됩니다. [[파일:availableupdates.png||사용 가능한 업데이트]] 새로운 보안 업데이트가 발견되면 알림이 자동으로 열리고 "위험" 클래스로 스타일이 지정됩니다. [[파일:availablesecurityupdates.png||사용 가능한 보안 업데이트]] 플러그인 관리자 보기로 이동하여 "업데이트 확인"을 클릭하면 업데이트를 수동으로 확인할 수 있습니다. 이 버튼은 UpdateCheck 플러그인이 활성화된 경우에만 표시됩니다. [[파일:manuallycheckforupdates.png||수동으로 업데이트 확인]] <span id="Under_the_hood"></span> === 내부 내용 === 이 섹션에서는 확장 업데이트 구현에 대한 간략한 개요를 제공합니다. 확장 업데이트 프로그램은 ExtensionInstaller 라이브러리의 일부입니다. 아래는 업데이터 프로세스와 관련된 클래스에 대한 UML 다이어그램입니다. [[파일:extensionupdateruml.png||확장 업데이트 UML 다이어그램]] Yii가 시작될 때의 프로그램 흐름: <pre> Yii init VersionFetcherServiceLocator->init() Add REST version fetcher ExtensionUpdaterServiceLocator->init() Add PluginUpdater TODO: Add an updater for each extension type (theme, question template, ...) </pre> UpdaterCheck 플러그인 실행 시 프로그램 흐름: <pre> Get all updaters from ExtensionUpdaterServiceLocator Loop each updater For each updater, loop through version fetchers configured by <updater> XML For each version fetcher, contact remote source and get version information Compose all versions into a notification </pre> UpdateCheck 플러그인의 [https://github.com/LimeSurvey/LimeSurvey/blob/develop/application/core/plugins/UpdateCheck/UpdateCheck.php#L130 checkAll] 메소드는 새 버전에 대한 모든 확장을 쿼리하는 방법에 대한 예를 제공합니다. . <span id="Adding_new_version_fetchers"></span> ==== 새 버전 가져오기 도구 추가 ==== 새로운 사용자 정의 버전 가져오기 프로그램을 추가하려면 Yii 초기화 중에 다음을 실행하세요: <syntaxhighlight lang="php"> $service = \Yii::app()->versionFetcherServiceLocator $service->addVersionFetcherType( 'myNewVersionFetcherType', function (\SimpleXMLElement $updaterXml) { return new MyNewVersionFetcher($updaterXml); } ); </syntaxhighlight> 물론 <code>MyNewVersionFetcher</code> 클래스는 <code>VersionFetcher</code> 하위 클래스로 만들어야 합니다. 새 버전 가져오기 프로그램을 사용하려면 업데이터 XML의 <code>type</code> 태그에서 을 사용하도록 구성하세요. <code>myNewVersionFetcherType</code> (예: <code>rest</code> 대신). <span id="Adding_new_extension_updaters"></span> ==== 새로운 확장 업데이트 프로그램 추가 ==== 새로운 사용자 정의 확장 업데이트 프로그램을 추가하려면 Yii 초기화 중에 다음을 실행하세요: <syntaxhighlight lang="php"> $service = \Yii::app()->extensionUpdaterServiceLocator; $service->addUpdaterType( 'myNewExtensionUpdater', function () { return MyNewExtensionUpdater::createUpdaters(); } ); </syntaxhighlight> <code>MyNewExtensionUpdater</code> 클래스는 <code>ExtensionUpdater</code> 하위 클래스로 만들어야 합니다. config.xml의 최상위 <code>type</code> 태그('plugin', 'theme', ...)는 이 확장에 사용되는 확장 업데이트 프로그램을 제어합니다. 사용자 정의 ExtensionInstaller, 메뉴 항목 등도 추가해야 하기 때문에 시스템을 아직 완전히 사용자 정의할 수는 없습니다. 그러나 이론상으로는, 어쩌면 미래에도 이런 방식으로 새로운 유형의 확장을 추가하는 것이 가능할 것입니다. <span id="Extension_installer"></span> == 확장 설치 프로그램 == 확장 설치 프로그램 라이브러리는 두 개의 추상 클래스로 구성됩니다: * ExtensionInstaller * FileFetcher ExtensionInstaller는 PluginInstaller, QuestionThemeInstaller 등과 같은 각 확장 유형에 대해 하위 클래스로 분류됩니다. FileFetcher는 파일을 가져오는 다양한 방법에 따라 하위 클래스로 분류됩니다. 현재는 업로드된 zip 파일만 지원되지만 앞으로는 Github 또는 LimeStore 가져오기 도구도 있을 수 있습니다. [[File: extensioninstalleruml.png]] <span id="Special_plugins"></span> == 특수 플러그인 == * [[인증 플러그인 개발]] * [[내보내기 플러그인 개발]] == 사용 가능한 플러그인 == * [[인증 플러그인]] * [[감사 로그]] * [[AzureOAuthSMTP 플러그인]] * [[CintLink]] * [[사용 가능한 타사 플러그인]] == 튜토리얼 == [https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 이] 단계별 튜토리얼은 모든 설문조사 응답 제출에 대해 게시물 요청을 보내는 플러그인을 만드는 방법을 보여줍니다. 튜토리얼에서는 전역 및 설문조사별 설정을 생성하고 저장하는 방법, 이벤트를 등록하는 방법 등을 보여줍니다. [[범주:개발]] [[범주:플러그인]]