User:Chughakshay16/ConventionExtension

This page contains the details of an extension which I would like to develop 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
 * special badges for the attendees of the conference could also be created
 * all the details pertaining to the event ( or conference) can be downloaded in CSV( or XLS) format much like an Export feature we have in a wiki.
 * an email notification system would also be available
 * like/unlike buttons can also be integrated into the pages
 * event management features
 * site user can import conference schedule into their preferred calendar application
 * 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

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
After taking a look at Wikimania and some other conference management systems(the ones not running on Mediawiki), I could see a lot of difference in the way they operate and the features they provide. And most of such features could be attributed to the way they implement their database storage. So i think these are three approaches one could follow to build a software with conference management facility. Most of what is written on this page before this section applies to Approach#2. In this approach all of the content on the pages created by the software would be just stored as simple wikitext under page,revision and text tables. And in this case most of the work would fall in the hands of the admin(and other people handling the conference) as extension would just handle the responsibility of registration, accounts and the payment portal. So very few extra tables would be needed : and some other useful would be stored as arrays in the extension code. so here as we can see content put on the conference pages isnt categorized and stored under separate tables, that's why for monitoring purposes an admin would have to follow the same old approach of checking out Watchlist and Recent Changes(Special pages). This approach is more what a normal website(collection of html and server scripts) would follow to accomplish such a task. In this case most of the content put on the page would be extracted and put in different tables mentioned below, so as to give admin much more control over the content and much more options for the users visiting the website. And if such an approach is used on a site running Mediawiki software ,then most of the content would have to be put with the help of some admin menu (UI) or in some cases with the help of a template. But this would kill the very purpose of Mediawiki where most of the content is written with the help of wikieditor in wiki markup language. - info about all the pages created under a specific conference - contains info about all the conferences set up by the admin. - contains the data of all the proposals submitted via the wiki * - there may be any types of submissions such as a proposal,talk, or even a presentation - info about all the speaker sessions that would be conducted during the conference - info of all the speakers - info of all the accounts - info of preferences set per account - information about the tracks. Tracks are actually the categories according to which proposals(submissions) will be categorized. More info here * - there could be any number of types for organizers for such an event such as a Program Team, a Sponsorship Team or a team which manages Media Relations - each day of conference would be set in this table - info about schedules of different conferences - schedule items, an item could be a Hackathon, or a lunch break - even links could be set for schedule items - facilitates the password reset feature - all the roles assigned by the admin * - there could be a number of role types such as a reviewer,developer,translator.. - permissions pertaining to each role - schedule items preferred by each account holder - schedule per each account holder - contains info about all the attendees for the conference (such as their country,username,languages,arrival,departure..) - information about all the rooms for the stay of people registered for this event - various specific locations where different sessions would be held If an admin would also like to sell items during his/her conference then the below mentioned tables would be used to store such data.This idea was included from wisconDB(which is an open source conference management system). More about wisconDB can be found here. - stores all financial transactions occured * - type of transactions * - different codes for different status values, so these mappings will be stored here * - different types of sources(code- source mappings) Transactions table would state transactionType,transactionStatusType,transactionSourceType values for each of the row present.
 * Approach #1
 * Approach #2
 * - All these tables could be replaced by a number of arrays for storing the information.

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