User:Mark Hershberger/specs: Difference between revisions

From MWStake
Jump to navigation Jump to search
(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.
* If a monthly or yearly payment is missed, then the user and the administrators should be sent a [[mw:Extension:Echo/Creating_a_new_notification_type|notification]].
* 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 (''''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.
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 (''''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>.
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 the individual-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 $wgGroupPermissionsThe 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