NOTE: This issue is related to http://issues.civicrm.org/jira/browse/CRM-2964 - and is required to handle the Renewal case for Organization memberships.
Currently, for self-service (online) membership renewals - an authenticated user goes to an Online Contribution page which includes a Membership Block. We automatically check to see if they have an existing membership matching one of the membership types included in the block. If true, we display status and expiration date of that membership next to it's radio button option. Then the post process function renews the membership. This approach is somewhat error prone, and will not work well for cases where an individual is renewing a membership "on behalf of" an organization. We need to pass in an explicit membership ID to ensure the correct membership is renewed. (NOTE: self-service renewal will continue to be available only for AUTHENTICATED USERS.)
1. Modify preProcess for Online Contribution pages (civicrm/contribute/transact) to check for a membership id in the GET params (mid=xxx) IF we have an authenticated user session.
1.1 Verify that the passed membership ID belongs EITHER to the contact OR to a contact whom they have a permissioned relationship for (e.g. their "employer"). (Check http://issues.civicrm.org/jira/browse/CRM-2963 for info on permissioned relationships.) If it's not their membership, put up a status warning and ignore the mid value (handle it as a new membership signup if they proceed) - "Oops. The membership you're trying to renew appears to be invalid. Contact your site administrator if you need assistance. If you continue, you will issued a new membership."
1.2 Verify that the passed membership ID is for a membership type that is available in the membership block of the contribution page. If not, put up a status warning and ignore the mid value (handle it as a new membership signup if they proceed) - "Oops. The membership you're trying to renew appears to be invalid for this signup form. Contact your site administrator if you need assistance. If you continue, you will issued a new membership."
1.3 If mid is valid for the user/contact and the contribution page - load the "to be renewed" membership into the session, select the appropriate radio button in the membership block, show the current status of the membership. (This is what we currently do when we "discover" that the user/contact has an existing membership that matches one of the membership types in the membership block.)
1.4 For "on behalf of" membership - we'll need to "check" the "On behalf of" checkbox and load the related organization info. However, implementation of this logic s/b handled in
2. Contact Dashboard Changes
The Contact Dashboard (civicrm/user?reset=1) includes a "Renew" action link in the Memberships selector. Modify this link to add the membership record ID to the query string - mid=x