User:Mark Hershberger/specs: Difference between revisions
(initial pass) |
(more docs) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
* If a user chooses monthly payments, then it should be the yearly amount divided by 12 and rounded up to the nearest $. | * If a user chooses monthly payments, then it should be the yearly amount divided by 12 and rounded up to the nearest $. | ||
: So, at the $100 level, it would be $100 ÷ 12 = 8.3̅ ≆ $9 per month | : So, at the $100 level, it would be $100 ÷ 12 = 8.3̅ ≆ $9 per month | ||
* Corporate meberships can only be purchased after an individual membership is purchased. | |||
** Individual memberships should be purchased on a dedicated page by logged in users. | |||
** Non-logged in users will be denied access with UserNotLoggedIn. | |||
** The corporate membership page will only be available to people who have the <code>member</code>. | |||
** People who do not have the <code>corp-admin</code> permission will be offered any of the available corporate memberships. | |||
** People who have the <code>corp-admin</code> permission will be offered higher levels of memberships. | |||
** Finally, a third special page (fundrasing?) should be created where arbitrary amounts of money can be given. | |||
* Credit card info should NOT be stored anywhere. | * Credit card info should NOT be stored anywhere. | ||
* Billing address information should be collected. | * Billing address information should be collected. | ||
Line 14: | Line 21: | ||
* Group memberships would be set to [[mw:Help:User_rights_and_groups#User_group_expiry|automatically expire after one year]]. | * Group memberships would be set to [[mw:Help:User_rights_and_groups#User_group_expiry|automatically expire after one year]]. | ||
* The user should be able to cancel their subscription. If they do, they should be removed from the group. | * The user should be able to cancel their subscription. If they do, they should be removed from the group. | ||
* Administrators are users that have the <code>managemembership</code> right. | * Administrators are users that have the <code>managemembership</code> right. | ||
* ''(soft requirement)'' If a monthly or yearly payment is missed (''e.g.'' because of an automatic transaction error at Authorize.Net), then the user and the administrators should be sent a [[mw:Extension:Echo/Creating_a_new_notification_type|notification]]. | |||
== Implementation notes == | == Implementation notes == | ||
=== Permissions === | |||
* The <code>member</code> permission will be given to the <code>individual-subcription</code> by default. | |||
* The <code>corp-admin</code> permission will be given to anyone who purchases a bronze level or above membership. | |||
* ''(soft requirement)'' Users with <code>corp-admin</code> permission will be able to allocate their votes to on-wiki users as they wish. | |||
: For instance, if a person with the <code>corp-admin</code> permission has 40 votes, they would be able to allocate 20 to themselves and 10 to another user of their choosing and give the remaining 10 to 10 arbitrary wiki users. | |||
=== Membership tiers === | === Membership tiers === | ||
Line 25: | Line 39: | ||
{ | { | ||
"member-individual": { | "member-individual": { | ||
"cost": "100" | "cost": "100", | ||
"permission": "member", | |||
"vote": 1 | |||
}, | }, | ||
"member-bronze": { | "member-bronze": { | ||
"cost": "250", | "cost": "250", | ||
"dependant": "member-individual" | "dependant": "member-individual", | ||
"permission": "corp-admin" | |||
"vote": 10 | |||
}, | }, | ||
"member-silver": { | "member-silver": { | ||
"cost": "1000", | "cost": "1000", | ||
"dependant": "member-bronze" | "dependant": "member-bronze", | ||
"vote": 25 | |||
}, | }, | ||
"member-gold": { | "member-gold": { | ||
"cost": 2500, | "cost": 2500, | ||
"dependant": "member-silver" | "dependant": "member-silver", | ||
"vote": 40 | |||
}, | }, | ||
"member-platinum": { | "member-platinum": { | ||
"cost": 5000, | "cost": 5000, | ||
"dependant": "member-gold" | "dependant": "member-gold", | ||
"vote": 50 | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Each object in this associative array represents a membership level. The keys ( | Each object in this associative array represents a membership level. The keys (''e.g.'' <code>member-gold</code>) indicate the group name that the user is put in. These group names coorespond with the top-level key of the two-dimensional array that is contained in <code>[[mw:$wgGroupPermissions|$wgGroupPermissions]]</code>The usual MediaWiki system for managing labels for these groups are used. See [[mw:Manual:User_rights#Creating_a_new_group_and_assigning_permissions_to_it|the MW manual for “Creating a new group”]] for how to handle the display of these groups. | ||
For each object, the <code>cost</code> parameter is required, and any other parameters are optional. | For each object, the <code>cost</code> parameter is required, and any other parameters are optional. | ||
Immediately after a successful payment the user is assigned to a the group specified in the key ( | Immediately after a successful payment the user is assigned to a the group specified in the key (''e.g.'' <code>member-individual</code>). If a <code>dependant</code> has also been given, the extension will also assign the groups for that dependant recursively. So, for instance, if someone purchases the <code>member-silver</code> level, they would get assigned the groups <code>member-silver</code>, <code>member-bronze</code> and <code>member-individual</code>. | ||
== See also == | |||
* Wikimedia Deutschland's [[https://github.com/wmde/FundraisingFrontend|FundraisingFrontend]] for ideas. | |||
* [[mw:Extension:DonationInterface|Extension:DonationInterface]] “renders payment forms and provides fundraising mechanisms for collecting and tracking payments through various payment gateways” and is probably a good source of ideas. | |||
* [https://wikitech.wikimedia.org/wiki/Category:Fundraising Public WMF Fundraising documents] that may be useful. |
Latest revision as of 22:55, 5 July 2020
This document provides the specifications for a credit card processing engine that MWStakeholders is having developed.
Requirements
- The extension should use Omnipay to handle Authorize.Net transactions and it should set up recurring payments (probably using this package by cimpleo), either yearly or monthly.
- The yearly amounts are given on our dues page.
- If a user chooses monthly payments, then it should be the yearly amount divided by 12 and rounded up to the nearest $.
- So, at the $100 level, it would be $100 ÷ 12 = 8.3̅ ≆ $9 per month
- Corporate meberships can only be purchased after an individual membership is purchased.
- Individual memberships should be purchased on a dedicated page by logged in users.
- Non-logged in users will be denied access with UserNotLoggedIn.
- The corporate membership page will only be available to people who have the
member
. - People who do not have the
corp-admin
permission will be offered any of the available corporate memberships. - People who have the
corp-admin
permission will be offered higher levels of memberships. - Finally, a third special page (fundrasing?) should be created where arbitrary amounts of money can be given.
- Credit card info should NOT be stored anywhere.
- Billing address information should be collected.
- Once a person has signed up for a level, they should be put into a corresponding MW group. Group names should correspond with the level of payment.
- At the $100 level, the group would be the individual-subscription, for the $250 level, it would be bronze-subscription, etc.
- Permissions granted by lower groups should automatically be given to the higher group.
- Group memberships would be set to automatically expire after one year.
- The user should be able to cancel their subscription. If they do, they should be removed from the group.
- Administrators are users that have the
managemembership
right. - (soft requirement) If a monthly or yearly payment is missed (e.g. because of an automatic transaction error at Authorize.Net), then the user and the administrators should be sent a notification.
Implementation notes
Permissions
- The
member
permission will be given to theindividual-subcription
by default. - The
corp-admin
permission will be given to anyone who purchases a bronze level or above membership. - (soft requirement) Users with
corp-admin
permission will be able to allocate their votes to on-wiki users as they wish.
- For instance, if a person with the
corp-admin
permission has 40 votes, they would be able to allocate 20 to themselves and 10 to another user of their choosing and give the remaining 10 to 10 arbitrary wiki users.
Membership tiers
Configuration for membership tiers:
{
"member-individual": {
"cost": "100",
"permission": "member",
"vote": 1
},
"member-bronze": {
"cost": "250",
"dependant": "member-individual",
"permission": "corp-admin"
"vote": 10
},
"member-silver": {
"cost": "1000",
"dependant": "member-bronze",
"vote": 25
},
"member-gold": {
"cost": 2500,
"dependant": "member-silver",
"vote": 40
},
"member-platinum": {
"cost": 5000,
"dependant": "member-gold",
"vote": 50
}
}
Each object in this associative array represents a membership level. The keys (e.g. member-gold
) indicate the group name that the user is put in. These group names coorespond with the top-level key of the two-dimensional array that is contained in $wgGroupPermissions
The usual MediaWiki system for managing labels for these groups are used. See the MW manual for “Creating a new group” for how to handle the display of these groups.
For each object, the cost
parameter is required, and any other parameters are optional.
Immediately after a successful payment the user is assigned to a the group specified in the key (e.g. member-individual
). If a dependant
has also been given, the extension will also assign the groups for that dependant recursively. So, for instance, if someone purchases the member-silver
level, they would get assigned the groups member-silver
, member-bronze
and member-individual
.
See also
- Wikimedia Deutschland's [[1]] for ideas.
- Extension:DonationInterface “renders payment forms and provides fundraising mechanisms for collecting and tracking payments through various payment gateways” and is probably a good source of ideas.
- Public WMF Fundraising documents that may be useful.