Extension:QuickSurveys
This extension is maintained by the Reading Web team. |
![]() Release status: stable |
|
---|---|
Implementation | User interface |
Description | In-article quick surveys or external surveys. Polling readers for opinion. |
Author(s) | Jon Robson, Joaquin Hernandez, Rob Moen, Bahodir Mansurov, Sam Smith, Adam Wight |
Latest version | 1.4.0 |
MediaWiki | 1.26 |
License | MIT License |
Download | |
|
|
Translate the QuickSurveys extension if it is available at translatewiki.net | |
Vagrant role | quicksurveys |
Issues | Open tasks · Report a bug |
The QuickSurveys extension displays in-article banners, through which users can be canvassed for their feedback.
Documentation and featuresEdit
As of 2021, QuickSurveys can:
- target random readers
- target readers of a specific page
- target based on whether you're logged-in/logged-out
- target based on edit bucket
- target based on user agent
- ask one multiple-choice question
- collect one or more responses to that question ("pick the best answer" vs. "check all that apply")
- offer a link to another page (e.g., to provide information about a longer survey)
- embed one or more surveys at a customizable location on a specific page
Known problems:
- Some ad-blocking and no-script software blocks this extension.
- Setting up a survey requires support from a developer.
- Reading survey results requires support from analytics or a developer.
- No ability to target users in an arbitrary workflow or condition.
PrerequisitesEdit
QuickSurveys depends on EventLogging and won't work without it.
InstallationEdit
- If using Vagrant , install with
vagrant roles enable quicksurveys --provision
- Manual installation
- Download and place the file(s) in a directory called
QuickSurveys
in yourextensions/
folder. - Add the following code at the bottom of your LocalSettings.php:
wfLoadExtension( 'QuickSurveys' );
- Done – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.
ConfigurationEdit
Here are configurations for the two major types of survey: an "internal survey" which displays a question and a set of possible answers in the article itself, and an "external survey" which links to another platform (e.g. Google Forms).
const QS_ANSWERS_MULTI_CHOICE = [
'ext-quicksurveys-example-internal-survey-answer-positive',
'ext-quicksurveys-example-internal-survey-answer-neutral',
'ext-quicksurveys-example-internal-survey-answer-negative'
];
// Applies to all surveys
const QS_DEFAULTS = [
// Who is the survey for? All fields are optional.
'audience' => [
'minEdits' => 0,
'anons' => false,
'maxEdits' => 500,
'registrationStart' => '2018-01-01',
'registrationEnd' => '2080-01-31',
// You must have CentralNotice extension installed in order to limit audience by country
// 'countries' => [ 'US', 'UK' ]
],
// The i18n key of the privacy policy text
'privacyPolicy' => 'ext-quicksurveys-example-external-survey-privacy-policy',
// Whether the survey is enabled
'enabled' => true,
// Percentage of users that will see the survey
'coverage' => 1,
// For each platform (desktop, mobile), which version of it is targeted
'platforms' => [
'desktop' => [ 'stable' ],
'mobile' => [ 'stable' ]
],
];
$wgQuickSurveysConfig = [
// Example of an internal survey
[
// Survey name
'name' => 'internal example survey',
// Internal or external link survey?
'type' => 'internal',
// The respondent can choose one answer from a list.
'layout' => 'single-answer',
// Survey question message key
'question' => 'ext-quicksurveys-example-internal-survey-question',
// The message key of the description of the survey. Displayed immediately below the survey question.
//'description' => 'ext-quicksurveys-example-internal-survey-description',
// Possible answer message keys for positive, neutral, and negative
'answers' => QS_ANSWERS_MULTI_CHOICE,
// Label for the optional free form text answer
'freeformTextLabel' => 'ext-quicksurveys-example-internal-survey-freeform-text-label',
// Whether to shuffle the display of the answers
'shuffleAnswersDisplay' => true,
] + QS_DEFAULTS,
[
// Survey name
'name' => 'internal multi answer example survey',
// Internal or external link survey?
'type' => 'internal',
// The respondent can choose one answer from a list.
'layout' => 'multiple-answer',
// Survey question message key
'question' => 'ext-quicksurveys-example-internal-survey-question',
// The message key of the description of the survey. Displayed immediately below the survey question.
//'description' => 'ext-quicksurveys-example-internal-survey-description',
// Possible answer message keys for positive, neutral, and negative
'answers' => QS_ANSWERS_MULTI_CHOICE,
// Label for the optional free form text answer
'freeformTextLabel' => 'ext-quicksurveys-example-internal-survey-freeform-text-label',
// Whether to shuffle the display of the answers
'shuffleAnswersDisplay' => true,
] + QS_DEFAULTS,
// Example of an external survey
[
'name' => 'external example survey',
// Internal or external link survey
'type' => 'external',
// Survey question message key
'question' => 'ext-quicksurveys-example-external-survey-question',
// The i18n key of the description of the survey
'description' => 'ext-quicksurveys-example-external-survey-description',
// External link to the survey
'link' => 'ext-quicksurveys-example-external-survey-link',
// Parameter to add to external link
'instanceTokenParameterName' => 'parameterName',
] + QS_DEFAULTS,
];
Defining an audienceEdit
It is possible to define audiences for a survey based edit count, whether a respondent is logged in, user registration date, and their country (based on IP).
The audience field is optional and can be omitted if you want the survey to show to everyone (as defined in coverage). You can also only include some of the parameters. For example, including just minEdits
will target users who have at least that many edits with no maximum.
Note, the audience is not included in sampling, so for example if coverage is 0.5, 50% of all users will be bucketed for the survey, but only the users in that 50% that match the audience will actually see the survey.
All audience keys are additive.
We will accept several keys:
- minEdits: the minimum number of edits a user should have
- maxEdits: the maximum number of edits a user should have
- anons: is the survey targeted to anons (true) or logged-in (false) only? If undefined, both groups will potentially be included.
- registrationStart: if the survey is targeted by registration date, user had to join on or after this date. Date is in format YYYY-MM-DD
- registrationEnd: if the survey is targeted by registration date, user had to join before or on this date. Date is in format YYYY-MM-DD
- countries: a list of two letter country codes that are matched against window.Geo.country
- pageIds: a list of article IDs, the survey can only be displayed on matching pages
'audience': {
'minEdits': 2,
'maxEdits': 5,
'registrationStart': '2018-01-01',
'registrationEnd': '2018-01-31',
'pageIds': [ 1234, 9876 ],
'countries': [ 'US', 'UK' ]
},
Survey layoutEdit
The following configuration fields control how the survey will be displayed:
- type: external - The survey is hosted on an external website, all we show is a link.
External survey - layout: single-answer - Choices are each presented as a button. Clicking a choice will immediately submit and dismiss the survey, unless a freeform text input is enabled.
Single-answer survey - layout: multiple-answer - Choices are each presented as a checkbox. Multiple choices can be selected. A freeform text input will not be provided.
Multiple-answer survey - freeformTextLabel - The respondent is prompted to enter freeform text, in addition to an optional choice of answer.
Survey with freeform text input enabled - shuffleAnswersDisplay - The answers will be randomized and displayed in a different order for each respondent. This helps average out a response bias caused by the order of answers. Defaults to true.
- embedElementId - When this field is present, the survey can only be injected into a page with a DOM element matching the configured value by ID. For example, a survey with
embedElementId: "survey-embed-point"
will be displayed on a page with HTML<div id="survey-embed-point"></div>
, immediately after that element.Survey embedded at a specific location
Adding message keysEdit
Messages can be defined as part of an extension e.g. WikimediaMessages or by wiki page. For example the message "ext-quicksurveys-example-internal-survey-answer-positive" can be defined by editing the wiki page MediaWiki:ext-quicksurveys-example-internal-survey-answer-positive
For editing messages ensure you have the right permissions. You will need edit-interface right.
How to load a specific surveyEdit
You can bypass the sampling and load a survey using one of the methods below. Please note that the survey you want to load needs to be enabled and passed to the front end. See the "Notes and Gotchas" section if you are having trouble seeing a survey.
- To load any of the available surveys append
?quicksurvey=true
to the URL; - To load a survey whose name is 'surveyname' append
?quicksurvey=surveyname
to the URL.
- The following prefixes are deprecated but may be useful:
- To load an internal survey whose name is 'internal example survey' append
?quicksurvey=internal-survey-internal example survey
to the URL; - To load an external survey whose name is 'external example survey' append
?quicksurvey=external-survey-external example survey
to the URL.
- To load an internal survey whose name is 'internal example survey' append
Additionally, QuickSurveys has a JavaScript API that you can use to load a survey, e.g. the following loads a survey whose name is 'surveyname':
mw.loader.using( 'ext.quicksurveys.init' )
.then( () => {
mw.extQuickSurveys.showSurvey( 'surveyname' );
} );
Note well that this will work on any page.
Developer guideEdit
Rules for displaying a surveyEdit
Much of this logic seems to reside on the client.
To see what surveys are available you'll need to inspect the source code of JavaScript of the ext.quicksurveys.lib module. For example on the beta cluster: https://en.wikipedia.beta.wmflabs.org/w/load.php?modules=ext.quicksurveys.lib&debug=true (look for resources/ext.quicksurveys.lib/surveyData.json)
ResultsEdit
The initial impressions and responses are recorded in EventLogging. Initial impressions are in the QuickSurveyInitiation schema and responses are in QuickSurveysResponses. The surveyCodeName
field in both schemas corresponds to the survey's configured name
.
TroubleshootingEdit
For local development using Docker, to see quick surveys rendered on an article page, the page must exist locally when using Content Provider. Once the local page is created, appending the appropriate query parameters to the url will make the quick survey visible.
Notes and GotchasEdit
window.Geo
is provided by CentralNotice. To avoid setting up an extension runJSON.stringify( window.Geo )
in production and addwindow.Geo = <data>;
to your code.
Note that a survey won't show up when:
- on the Main Page;
- on non-article page;
- on non-existent article page. Be careful when using the MobileFrontend content provider!;
- on skin Minerva when the beta opt in panel is shown;
- (Broken: if a survey is an external one and points to non-https location. TODO: Pending task T255291.)
Live example surveysEdit
- Beta cluster - Internal example survey
- Beta cluster - Internal example survey with description and freeform text
- Beta cluster - Internal multiple answer example survey
- Beta cluster - Internal multiple answer example survey with description and freeform text
- Beta cluster - External example survey
This extension is being used on one or more Wikimedia projects. This probably means that the extension is stable and works well enough to be used by such high-traffic websites. Look for this extension's name in Wikimedia's CommonSettings.php and InitialiseSettings.php configuration files to see where it's installed. A full list of the extensions installed on a particular wiki can be seen on the wiki's Special:Version page. |