User:Chughakshay16/ConventionExtension

This page contains the details of an extension which would be developed by me as part of a GSOC-2012 project, which would help convert any wiki into a conference like website such as Wikimania. Currently Wikimania is hand-tailored to meet its needs(features it currently supports). With the help of this extension wiki admin can set up a conference with features like proposal submission, voting and registration. This extension would be built on the MVC(along with Observer classes) design pattern, which would help create an intuitive workflow for the admin(preferences) menu as well as for the users visiting the Conference wiki. Thread link which i have started at wikitech-l.

Features
Implementation of last two features can be seen at this link.
 * one or more conferences can be organized --->Admin can setup one or more conferences(a default set of pages would be created for each of those conferences and stored in a Mediawiki database just like any other wiki pages). Content and structure of those pages could be changed later by the admin ( or by someone who has been assigned special permissions by the admin).
 * conference can be easily configured with the help of preferences provided on the admin --->Various attributes pertaining to a conference like event can be set up by the admin once he creates a new Conference. Features such as the information on speakers, rooms used during the conference,assignment of teams of people for delegating the work at a conference can be configured too.
 * creates a set of UI pages for your conference ( like Welcome page, Registration page,Proposal Submission page and some more depending upon the preferences set)
 * assignment of people can be done for specific events --->An admin can assign people different roles such as a developer, a committee member,reviewer etc.
 * also creates some Special Pages from where admin can very easily monitor the Conference related features
 * rss feeds from any wiki website can be included on the page like this
 * updates from other social media networks (like Facebook, Twitter) can also be integrated in the wiki pages
 * special badges for the attendees of the conference could also be created
 * site user can import conference schedule into their preferred calendar application
 * all the details pertaining to the event ( or conference) can be downloaded in CSV( or XLS) format.
 * an email notification system would also be available
 * like/unlike buttons can also be integrated into the pages
 * event management features
 * news,and announcement feeds can also be integrated within a page

Setup
After loading this extension, a link "Start a Conference" would start appearing on the sidebar of your wiki(which would only be visible to admin of the wiki).So following that link admin can set up a conference on his/her own wiki. During the setup an admin would be presented with page(s) containing the preferences waiting to be set by the admin. Here menu page(s) would be a set of Special Pages which were created by this extension itself when this wiki was loaded into the browser for the first time. With the help of these menu page(s) an admin can configure a lot of features like :- Once the preferences are set by the admin via the menu page, a collection of UI pages would be created by this extension which would contain the default set of features that a conference website must have( like welcome, registration and submission pages).Current skins available in the wiki can also be applied to these newly created pages(or it will just take the default skin as set in the ExtensionName.php file).
 * conference details such as venue,timings and its schedule
 * modify the read/write permissions for the users
 * set up information about the events
 * assign people for specific events
 * publish information about the rooms used during the conference(or an event)

Appearance
Besides modifying the UI pages(created by the extension)by hand, one can use a new set of templates to change the appearance of these pages in whichever way they want. As of now i could think of some templates such as, ,. Wikimania also uses a lot of templates to decorate its pages.More information on such templates can be found here.Wikimania Templates.
 * - which would help display an event schedule
 * - for displaying sponsor banners
 * - for integrating an interface showing all the latest updates from Twitter, Facebook regarding this event.

Monitoring
Admin or a set of users permitted by admin can monitor the changes occurring on the wiki like keeping a check on vandalism, number of attendees registered for the event.This feature would be accomplished by a couple (or more) Special pages specially dedicated for monitoring purposes.So by extending a SpecialPage class, these pages would also be included under the Special Pages option present in every wiki.

Architecture
UI pages and Special pages(for monitoring and preferences) will form the views part of the MVC pattern, whereas additional controller(,helper and observer)and model classes would constitute the rest of MVC. Special pages written for this extension would carry the task of providing an admin an easy to configure interface where he/she would be able to manage and configure a particular event(or conference), whereas the other collection of pages per conference would provide an entry point for the visitors interested in the conference(more specifically the people who are interested in registering for that conference).

* UI pages
The extension by default creates a category under the name of the conference and stores the UI pages in the very same category.These pages would be stored just like any other wiki page in the database.So as we could see the title and the namespace of these pages would also be set by the extension itself(unless explicitly modified in the admin menu). * - I still haven't decided on the approach i would be taking to create the UI pages. (API or the mediawiki codebase)

Database storage
Some new tables would have to be created by the software for storing the conference related details. List of tables that i could think of :- (conference_id,conference_title,conference_duration,conference_startDate,conference_endDate....) (proposal_id, proposal_user_id,proposal_title, proposal_description...) here proposal_user_id would point to the user_id in the Users table (session_speaker-id,session_info,session_duration,....) here session_speaker_id would be equivalent to the id in Speakers table. (speaker_id,speaker_bio,speaker_session_id,speaker_image_link,speaker_excerpt....) here speaker_session_id would correspond to the session_id in sessions table (assignment_id,person_id,assignment_type.....) note here that a same assignment can be assigned to more than one person(a team of people) (person_id,person_info,person_type,....) (transaction_id,transaction_account_id,...) (account_id,account_username,account_password,account_schedule_id...) (account_schedule_id, account_id,session_id,...) (account_schedule_id,account_id,account_schedule_info,...) This is not a complete list of tables in any way, would keep on updating this list as i progress along in this project.
 * Conferences - contain the info on all the conferences created by the admin
 * Proposals - contain the info an all the proposals submitted
 * Sessions - contain the info of all the sessions that are part of the Conference schedule
 * Speakers - guest speakers for the conference
 * Assignments - would hold information about task assignment(done by the admin)
 * Persons - info about the people involved in the conference(volunteers,managing people)
 * Transactions - contain info about the transactions that will be carried out
 * Accounts - all the registered accounts
 * AccountPreferences - preferences per account holder
 * AccountSchedule - holds info about the account holder schedule

Useful Resources
To completely understand the functioning of a conference management system, i went through the code base of a couple of open source ones available out there. Crawling through their code base helped me set my approach for developing this extension. wisconDB openconferenceware

About Me
Name : Akshay Chugh email-id : chughakshay16@gmail.com IRC nickname : chughakshay16