The end-user portion of the application works the same for both contacts and leads. Add a custom button to the Campaign History related list for both Leads and Contacts called "Add to Campaigns". When the end-user clicks this button display a list of campaigns with check boxes and a "check all" option. (The query for the list of campaigns will be determined in the administrator portion of the application.) When the end-user submits the form, insert the contact/lead to the campaign as member with the default status for that campaign and return the user back to the standard contact/lead details page.
The administrator portion of the application is simply to determine the campaigns that are displayed to the end-user. Create a Visualforce page with a few predetermined field allowing the administrator (non-developer) to construct a SOQL query. Combine the following fields from the Campaign object with "AND" to create the WHERE��clause for the SOQL query that select the campaigns for the end-user portion of the application. Any combination of all or no fields is possible.
RecordType - select a single recordtype from the list of available recordtypes
Type ��-��select a single type from the list of available
Active - true or false
StartDate - any date that will select campaigns with a start after this date
EndDate - any date that will select campaigns with a end before this date
Parent - a single campaign to select any campaigns that have this campaign as its parent
There will also be an option to group the query results for the end user. ��Administrator can select to group the results by one of the following:
Month of start date
Quarter of start date
See this blog post for sample code on how you might dynamically groups query results.