확장기능:StructuredDiscussions
정리된 토론(Structured Discussions)은 더 이상 개발되지 않으며 새로운 업데이트도 중단되어 있습니다. Wikitech 메일링 목록을 참고하세요. |
This extension is currently not actively maintained! Although it may still work, any bug reports or feature requests will more than likely be ignored. If you are interested in taking on the task of developing and maintaining this extension, you can request repository ownership. As a courtesy, you may want to contact the author. You should also remove this template and list yourself as maintaining the extension in the page's {{확장 기능 }} infobox. |
StructuredDiscussions 확장기능은 토론 페이지에 대한 토론과 협업을 위한 시스템을 제공합니다. 이 문서에서는 정리된을 설치하고 설정하는 방법을 다룹니다. 이 문서를 사용하는 지침을 참조하십시오. You can try out Structured Discussions yourself at the Sandbox talk page.
This extension was previously known as Flow, and names in some places (like the Git repository) still reflect that.
The StructuredDiscussions extension was developed by the Collaboration team at the Wikimedia Foundation. It is still being maintained to fix bugs, but no substantial development on the extension has been done since 2015, other than a rename to "StructuredDiscussions" in September 2017. For more information on the development status of this extension, as well as an overview of its design, see Structured Discussions.
설치
경고: | Note that StructuredDiscussions is not compatible with SQLite. |
- Make sure that all required dependencies are set up and configured.
- Make sure to set
$wgVirtualRestConfig['modules']['parsoid']['url']
to point to the rest.php of your wiki. - If you have problems in MediaWiki 1.40, you should make some changes to remove virtualrestconfig of restbase in Flow. See task T337223.
- 파일을 다운로드하고
Flow
폴더를extensions/
디렉토리에 넣어 주세요.
개발자와 코딩 기여자는 Git을 이용해 확장기능을 다운받는 것이 좋습니다.cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Flow - Git에서 설치할 경우, PHP 의존 기능을 설치하려면 Composer를 실행하여 확장 기능 디렉터리에
composer install --no-dev
를 발행하십시오. (잠재적인 문제에 대해서는 작업 T173141 을 참고하십시오.) - 아래의 코드를 LocalSettings.php 코드의 마지막에 추가합니다.
wfLoadExtension( 'Flow' );
- 갱신 스크립트를 실행합니다. 이 스크립트는 이 확장기능을 필요로 하는 데이터 베이스 테이블을 자동적으로 작성합니다.
- 완료 – 위키의 ‘Special:Version’에 이동해서, 확장기능이 올바르게 설치된 것을 확인합니다.
Vagrant 설치:
- Vagrant 를 사용하고 있는 경우에는,
vagrant roles enable flow --provision
로 설치해주세요
Post install
/tmp/mw-UIDGeneratorUUID-UID-xx
files that MediaWiki may be unable to open (작업 T55791). If you get a "Permission denied" error upon first visiting a Flow board you have to delete these files. Also, update.php will create {{FlowMention }} to support Flow's mention feature in VE (either @ or a toolbar menu provides a convenient auto-complete interface for mentions).Make sure you follow the full instructions for enabling or disabling StructuredDiscussions, including the scripts mentioned there.
Dependencies
- required
- 확장기능:Echo - for notifications (e.g. replies to your post)
- It is required to have an object cache. It is recommended that you use memcached for this. You may encounter problems with Redis currently.
- 확장기능:ParserFunctions - for the templates that are automatically installed (e.g. #time)
- strongly recommended
- Parsoid for the option to store posts as HTML (
$wgFlowContentFormat = 'html';
) which improves performance.
This is how WMF wikis are configured, and hence is the most tested configuration by far. If you use MediaWiki-Vagrant, enabling StructuredDiscussions enables Parsoid and sets the format to 'html'.
- optional
- 확장 기능:베타기능 - if you want to use the opt-in beta feature for user talk.
- Extension:CLDR - for human-friendly timestamps such as "3 days ago"
- Extension:VisualEditor - for VisualEditor support
- bug? if you have the VisualEditor present (e.g. perhaps to provide OOUI), then StructuredDiscussions will attempt to contact Parsoid even if VE is not enabled
- StructuredDiscussions can integrate with 확장기능:편집필터 , Extension:SpamBlacklist , and Extension:ConfirmEdit , see Extension:StructuredDiscussions/Spam
- StructuredDiscussions will integrate with 확장 기능:검사관 if you have it installed.
- 확장기능:감사 - to "Thank" users for their posts
Verifying installation
Visit one of the pages you enabled for StructuredDiscussions (see #Configuration) and try adding a topic and editing its header.
Configuration
Here are some settings you need to make in LocalSettings.php
.
Enabling or disabling StructuredDiscussions
미디어위키 버전: | ≤ 1.34 |
To enable or disable StructuredDiscussions for a namespace in MediaWiki before 1.35, first run populateContentModel.php on the affected namespaces (or you can do it on all
).
From 1.35 onward, this is no longer needed.
E.g. if you are about to enable or disable it on NS_TALK (1) and NS_USER_TALK (3) as shown in the PHP config below:
mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=revision
mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=archive
mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=page
mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=revision
mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=archive
mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=page
If mwscript is not configured, replace mwscript populateContentModel.php
with php maintenance/populateContentModel.php
After the above, set $wgNamespaceContentModels [namespace]
for particular namespaces.
For example:
// These lines enable StructuredDiscussions on the "Talk" and "User talk" namespaces
// All the NS_* constants here: https://www.mediawiki.org/wiki/Manual:Namespace_constants
$wgNamespaceContentModels[NS_TALK] = 'flow-board';
$wgNamespacesWithSubpages[NS_TALK] = true;
$wgNamespaceContentModels[NS_USER_TALK] = 'flow-board';
$wgNamespacesWithSubpages[NS_USER_TALK] = true;
Do not reassign the global (
).
$wgNamespaceContentModels =
To enable it on a single page, use Special:EnableStructuredDiscussions. This requires the flow-create-board right, which can be granted to any group (see Manual:User rights#Changing group permissions).
$wgGroupPermissions['somegroup']['flow-create-board'] = true;
See Extension:StructuredDiscussions/Turning off all StructuredDiscussions for how to turn off all StructuredDiscussions pages on your wiki.
Parsoid configuration
Parts of this page (those related to Parsoid's LocalSettings.js) are outdated. |
StructuredDiscussions uses the Virtual REST Service to contact a Parsoid or RESTBase service.
If your wiki loads the VisualEditor extension, then you've probably already set this up.
Look for the following in your LocalSettings.php
:
$wgVirtualRestConfig['modules']['parsoid'] = array(
// URL to the Parsoid instance
// Use port 8142 if you use the Debian package
'url' => 'http://localhost:8000',
// Parsoid "domain", see below (optional)
'domain' => 'localhost',
// Parsoid "prefix", see below (optional)
'prefix' => 'localhost',
);
A single Parsoid server can handle multiple wikis.
The Parsoid domain
setting identifies your wiki configuration to Parsoid.
By default it is set to the hostname named by $wgCanonicalServer
, but you can pick an arbitrary string.
Older versions of Parsoid also used a unique "prefix" to identify the server; you may need to list that here as well.
Parsoid must have been configured to match, using a line in Parsoid's localsettings.js
like:
parsoidConfig.setMwApi({ uri: 'http://path/to/my/wiki/api.php', domain: 'localhost', prefix: 'localhost' });
Again, the "domain" property is optional in the Parsoid configuration; it defaults to the hostname used in the uri
property if not specified.
The "prefix" property can also be omitted unless you are running an older version of Parsoid.
Make sure the domain
and prefix
listed in Parsoid's localsettings.js
match what's in your wiki's LocalSettings.php
.
See Parsoid/Setup#Configuration for more details.
"maximum function nesting level of '100' reached, aborting"
If you get this error, you need to set xdebug.max_nesting_level = 200
, probably in /etc/php5/apache2/php.ini
.[1]
"Exception Caught: CAS is not implemented in Xyz"
StructuredDiscussions invokes $cache->cas()
and some cache implementations including CACHE_ACCEL
(APCBagOStuff) don't implement CAS.
You probably need to use a different cache, for example install memcached and set $wgMainCacheType = CACHE_MEMCACHED;
.
Permissions
Users must have the core edit
permission to perform any write action in StructuredDiscussions.
Many wikis only grant this permission to the 'user' (logged-in) group.
StructuredDiscussions defines many actions such as edit-post
and delete-topic
(see the list in FlowActions.php).
The permissions vary depending on whether the post is your own and whether it has been moderated.
For example, by default users can edit their own posts, but only users in the 'sysop' group have the flow-edit-post
permission to edit anyone's post.
You can override which groups have which permissions and what permissions are required for each Flow action; see 매뉴얼:유저 권한 for an overview of permissions.
Migrating existing pages
To migrate a single existing page, use Special:EnableStructuredDiscussions. It will handle archiving of a single page (then enabling StructuredDiscussions) automatically.
The script maintenance/convertNamespaceFromWikitext.php
automates this namespace conversion and archiving, see Flow/Converting talk pages.
It is somewhat WMF-specific, so evaluate its operation and backup your database before running it.
Another script maintenance/convertAllLqtPages.php
converts LiquidThreads pages and their threads to Flow boards and topics, see Flow/Converting LiquidThreads. Similar caveats apply.
Flow adds a Topic: namespace, see Extension default namespaces#flow.
You can visit Special:PrefixIndex/Topic: to see if there are existing pages that conflict with this; if so run the maintenance script maintenance/namespaceDupes.php
.
Configuration
parameter | default | comment |
---|---|---|
$wgFlowHelpPage | //www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Flow | URL for more information about the Flow notification system |
$wgFlowCluster | false | $wgFlowCluster will define what external DB server should be used.
If set to false, the current database will be used to read/write data from/to. If StructuredDiscussions data is supposed to be stored on an external database, set the value of this variable to the $wgExternalServers key representing that external connection. |
$wgFlowDefaultWikiDb | false | Database to use for StructuredDiscussions metadata. Set to false to use the wiki db.
Any number of wikis can and should share the same StructuredDiscussions database. The actual database name is stored inside internal tables for each message. Changing the database name after messages have been posted will cause old threads to become inaccessible. |
$wgFlowExternalStore | false | Used for content storage.
False to store content in StructuredDiscussions db. Otherwise a cluster or list of clusters to use with ExternalStore. Provided clusters must exist in $wgExternalStores. Multiple clusters required for HA, so inserts can continue if one of the masters is down for maint or any other reason. $wgFlowExternalStore = array( 'DB://cluster24', 'DB://cluster25' ); |
$wgFlowContentFormat | html | By default, StructuredDiscussions will store content in HTML.
However, this requires having Parsoid up and running, as it'll be necessary to convert HTML to wikitext for the basic editor. (n.b. to use VisualEditor, you'll definitely need Parsoid, so if you do support VE, might as well set this to HTML right away) If $wgFlowParsoidURL is null, $wgFlowContentFormat will be forced to wikitext. The 'wikitext' format is likely to be deprecated in the future. |
$wgFlowParsoidURL | null | StructuredDiscussions Parsoid config Please note that this configuration is separate from VE's Parsoid config. |
$wgFlowParsoidPrefix | null | Flow Parsoid config Please note that this configuration is separate from VE's Parsoid config. |
$wgFlowParsoidTimeout | null | Flow Parsoid config Please note that this configuration is separate from VE's Parsoid config. |
$wgFlowParsoidForwardCookies | false | Forward users' Cookie: headers to Parsoid. Required for private wikis (login required to read). If the wiki is not private (i.e. $wgGroupPermissions['*']['read'] is This feature requires a non-locking session store. The default session store will not work and will cause deadlocks when trying to use this feature. If you experience deadlock issues, enable $wgSessionsInObjectCache. WARNING: ONLY enable this on private wikis and ONLY IF you understand the SECURITY IMPLICATIONS of sending Cookie headers to Parsoid over HTTP. $wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] be pointed to localhost if this setting is enabled.
|
$wgFlowDefaultLimit | 10 | Limits for paging |
$wgFlowMaxLimit | 100 | Limits for paging |
$wgFlowMaxMentionCount | 100 | Maximum number of users that can be mentioned in one comment |
$wgFlowMaxThreadingDepth | 8 | Max threading depth |
$wgFlowCacheTime | 60 * 60 * 24 * 3 | The default length of time to cache StructuredDiscussions data in memcache.
This value can be tuned in conjunction with measurements of cache hit/miss ratios to achieve the desired tradeoff between memory usage, db queries, and response time. The initial default of 3 days means StructuredDiscussions will attempt to keep in memcache all data models requested in the last 3 days. |
$wgFlowCacheVersion | 4.9 | A version string appended to cache keys.
Bump this if cache format or logic changes. StructuredDiscussions can be a cross-wiki database accessed by wikis running different versions of the Flow code; WMF sometimes overrides this globally in wmf-config/CommonSettings.php |
$wgFlowAbuseFilterGroup | 'flow' | Custom group name for AbuseFilter
Acceptable values:
|
$wgFlowAbuseFilterEmergencyDisableThreshold | 0.10 | AbuseFilter emergency disable values for StructuredDiscussions |
$wgFlowAbuseFilterEmergencyDisableCount | 50 | AbuseFilter emergency disable values for StructuredDiscussions |
$wgFlowAbuseFilterEmergencyDisableAge | 86400 // One day. | AbuseFilter emergency disable values for StructuredDiscussions |
$wgFlowAjaxTimeout | 30 | Timeout for StructuredDiscussions's AJAX requests (only affects ones that go through flow-api.js), in seconds |
$wgFlowCoreActionWhitelist | array( 'info', 'protect', 'unprotect', 'unwatch', 'watch', 'history', 'wikilove', 'move', 'delete' ); | Actions that must pass through to MediaWiki on StructuredDiscussions-enabled pages |
$wgFlowServerCompileTemplates | false | When set to true StructuredDiscussions will compile templates into their intermediate forms on every run. When set to false Flow will use the versions already written to disk. Production should always have this set to false. |
$wgFlowSearchServers, $wgFlowSearchConnectionAttempts, $wgFlowSearchBannedPlugins, $wgFlowSearchOptimizeIndexForExperimentalHighlighter, $wgFlowSearchMaxShardsPerNode, $wgFlowSearchRefreshInterval, $wgFlowSearchMaintenanceTimeout, $wgFlowSearchReplicas, $wgFlowSearchShardCount, $wgFlowSearchCacheWarmers, $wgFlowSearchMergeSettings, $wgFlowSearchIndexAllocation, $wgFlowSearchEnabled | N/A | These former settings were removed because the code was unmaintained and broken. (You can look at the previous documentation if you want.) There is currently no code for supporting search in StructuredDiscussions. |
System messages
Using the "Source editing" option on StructuredDiscussions boards makes visible the help text "위키텍스트는 마크업 사용을 하며, 언제든지 결과 미리 보기를 하실 수 있습니다."
.
The "uses markup" part is linked through the system message MediaWiki:Flow-wikitext-editor-help-uses-wikitext which makes use of an interwiki link to MediaWiki.org.
In some cases, this interwiki link, instead of pointing to Help:Formatting on MediaWiki.org, points to a (usually non-existent) Help:Formatting page on the host Wiki.
This can be corrected by changing the interwiki link on MediaWiki:Flow-wikitext-editor-help-uses-wikitext to an external link such as[https://www.mediawiki.org/wiki/Help:Formatting uses markup]
.Troubleshooting
Not getting Flow as expected? There are different fixes, depending on the source of the problem:
Badly configured parsoid/VE not working
When you get messages like Conversion from 'html' to 'wikitext' was requested, but core's Parser only supports 'wikitext' to 'html' conversion
, you probably have a version of MediaWiki (e.g. REL1_39) where the StrucuredDiscussions extension does not use the zero-config parsoid.
For using visual editor on discussions, you must manually configure parsoid-php.
For REL1_39 of MediaWiki and StructuredDiscussions, be sure to do all of the following:
wfLoadExtension('Flow');
wfLoadExtension ('Parsoid', "$IP/vendor/wikimedia/parsoid/extension.json" );
- Set appropriately. See example.
$wgVirtualRestConfig['modules']['parsoid']
Older versions of MediaWiki may need Parsoid-JS and perhaps a code patch:
- Make sure you have correctly installed parsoid.
- When this bug hasn't been resolved, apply this patch to the StructuredDiscussions codebase.
If the problem persists, this discussion might be of some help.
Wrong Custom-Namespace Declaration Order
The Flow declares must go after the declare for a custom namespace. Correct order is:
define("NS_PORTAL_TALK", 3005);
$wgExtraNamespaces[NS_PORTAL_TALK] = "Portal_Talk";
$wgNamespaceContentModels[NS_PORTAL_TALK] = 'flow-board';
$wgNamespacesWithSubpages[NS_PORTAL_TALK] = true;
Wrong Native Constants
Talk pages in the Main namespace are defined as NS_TALK
, not NS_MAIN_TALK
The correct declaration is:
$wgNamespaceContentModels[NS_TALK] = 'flow-board';
Non-Registered Extension Constants
Extension:Page Forms namespace constant is supposed to be PF_NS_FORM_TALK
.
But that constant does not work in the Flow declare-- you must use the actual number: 107.
This works:
$wgNamespaceContentModels[107] = 'flow-board';
It's unknown to this author whether Page_Forms failed to register its constants correctly, or whether all extension must use numbers (not constants) with Flow. See list of some other extension namespace constants.
Old Remnants
If you're correctly getting Flow on all talk-pages in a namespace, except for one page in that namespace, there may be remnant junk in the talk page (even if it appears empty). Do the following:
- Browse to the talk page that won't load Flow, e.g.: Portal_Talk:Welcome
- Delete the Talk page using the Delete tab.
- Go to the content page for that talk page, e.g.: Portal:Welcome
- Click Discuss.
- You get Flow.
Parsoid not working in StructuredDiscussions (Flow)
To get Parsoid to work with StructuredDiscussions (Flow):
- In
LocalSettings.php
, explicitely load Parsoid like so:wfLoadExtension( 'Parsoid', "vendor/wikimedia/parsoid/extension.json" );
- Apply the following patch.
For more details, see Topic:X8mv19b4va26u8tz.
Architecture
See Flow/Architecture.
Spam
See Extension:StructuredDiscussions/Spam for more information on how to fight spam in Flow.
Moderation
See Extension:StructuredDiscussions/Moderation for more information on moderation in Flow.
Export and Import
There is maintenance script to export Flow data similar to Manual:DumpBackup.php
php extensions/Flow/maintenance/dumpBackup.php
작업 T114703 - gives some hints about the import.
이 확장 기능은 하나 이상의 위키미디어 프로젝트에서 사용 중입니다. 이것은 아마도 이 확장 기능이 안정적이고 트래픽이 많은 웹 사이트에서 사용할 수 있을 만큼 충분히 잘 작동한다는 것을 의미합니다. 설치된 위치를 확인하려면 위키미디어의 CommonSettings.php 및 InitialiseSettings.php 구성 파일에서 이 확장 기능의 이름을 찾습니다. 특정 위키에 설치된 확장 기능의 전체 목록은 위키의 Special:Version 문서에서 볼 수 있습니다. |
This extension is included in the following wiki farms/hosts and/or packages: This is not an authoritative list. Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here. Always check with your wiki farms/hosts or bundle to confirm. |
- Unmaintained extensions/ko
- Page action extensions/ko
- GPL licensed extensions/ko
- Extensions in Wikimedia version control/ko
- AbortEmailNotification extensions/ko
- AbuseFilter-builder extensions/ko
- AbuseFilter-computeVariable extensions/ko
- AbuseFilter-deprecatedVariables extensions/ko
- AbuseFilterGenerateVarsForRecentChange extensions/ko
- ApiFeedContributions::feedItem extensions/ko
- Article::MissingArticleConditions extensions/ko
- ArticleConfirmDelete extensions/ko
- ArticleDelete extensions/ko
- ArticleDeleteComplete extensions/ko
- ArticleEditUpdateNewTalk extensions/ko
- ArticleUndelete extensions/ko
- BeforeCreateEchoEvent extensions/ko
- BeforeDisplayOrangeAlert extensions/ko
- BeforeEchoEventInsert extensions/ko
- BeforePageDisplay extensions/ko
- CategoryViewer::doCategoryQuery extensions/ko
- CategoryViewer::generateLink extensions/ko
- ChangesListInitRows extensions/ko
- ChangesListInsertArticleLink extensions/ko
- ChangesListSpecialPageQuery extensions/ko
- CheckUserFormatRow extensions/ko
- CheckUserInsertChangesRow extensions/ko
- ContribsPager::reallyDoQuery extensions/ko
- ContributionsLineEnding extensions/ko
- DeletedContribsPager::reallyDoQuery extensions/ko
- DeletedContributionsLineEnding extensions/ko
- EchoAbortEmailNotification extensions/ko
- EchoGetBundleRules extensions/ko
- EnhancedChangesList::getLogText extensions/ko
- EnhancedChangesListModifyBlockLineData extensions/ko
- EnhancedChangesListModifyLineData extensions/ko
- GetBetaFeaturePreferences extensions/ko
- GetPreferences extensions/ko
- IRCLineURL extensions/ko
- ImportHandleToplevelXMLTag extensions/ko
- InfoAction extensions/ko
- LiquidThreadsIsLqtPage extensions/ko
- LoadExtensionSchemaUpdates extensions/ko
- MergeAccountFromTo extensions/ko
- MovePageCheckPermissions extensions/ko
- MovePageIsValidMove extensions/ko
- NukeDeletePage extensions/ko
- NukeGetNewPages extensions/ko
- OldChangesListRecentChangesLine extensions/ko
- PageMoveCompleting extensions/ko
- ResourceLoaderGetConfigVars extensions/ko
- ResourceLoaderRegisterModules extensions/ko
- RevisionUndeleted extensions/ko
- SaveUserOptions extensions/ko
- SearchableNamespaces extensions/ko
- ShowMissingArticle extensions/ko
- SkinTemplateNavigation::Universal extensions/ko
- SpecialCheckUserGetLinksFromRow extensions/ko
- SpecialWatchlistGetNonRevisionTypes extensions/ko
- TitleMoveStarting extensions/ko
- TitleSquidURLs extensions/ko
- UnwatchArticle extensions/ko
- UserGetReservedNames extensions/ko
- UserMergeAccountFields extensions/ko
- WatchArticle extensions/ko
- WatchlistEditorBeforeFormRender extensions/ko
- WatchlistEditorBuildRemoveLine extensions/ko
- WhatLinksHereProps extensions/ko
- GetUserPermissionsErrors extensions/ko
- All extensions/ko
- Extensions incompatible with temporary accounts
- Extensions requiring Composer with git/ko
- Outdated pages/ko
- Extensions used on Wikimedia/ko
- Extensions included in Miraheze/ko
- Extensions included in WikiForge/ko
- Structured Discussions/ko
- Discussion and forum extensions/ko
- Extensions with VisualEditor support/ko