User:Chughakshay16/GSOCProposal(2012)

This proposal page contains the details of the extension that I would like to build as part of a GSOC-2012 project.

Identity

 * Name
 * Akshay Chugh


 * Email
 * chughakshay16@gmail.com


 * Project Title
 * Convention Extension

Contact/working info

 * Timezone
 * Bangalore - India (UTC/GMT +5:30 hours)


 * Typical Working hours
 * 0900 hrs to 2200 hrs


 * IRC or IM networks/handle(s)
 * chughakshay16 on freenode.net (X-Chat) and webchat.freenode.net

Project Updates
Following things were done by the end of first milestone: - database calls - core model classes - php unit test for testing core functions - edit and delete functions for Api modules - utility functions - create, edit and delete modules for all the model classes
 * Implementation of back-end model classes is completed
 * Implementation of API modules is completed

- conference dashboard and conference setup special pages
 * Admin Interface ( is still going on)

Project Summary
Convention Extension would help convert a wiki (running on MediaWiki) into a conference like website such as Wikimania. It would provide a collection of admin UI interfaces which help ease the process of setting up conference like features on a wiki. Most of the other common features such as submission and registration forms would be created automatically for the conference. Monitoring such a conference would be made really easy with the help of a Dashboard feature, from where an admin would be able to look for all the changes happening within a conference.

These are the set of features that it would provide :- 1. modified user pages for the attendees - all the information regarding their registrations (and transactions) will be shown on their respective user pages 2. dashboard to configure conference related settings - a special page to monitor and make changes to a conference 3. automatic creation of wiki pages (with default content) for the conference - after the admin has setup the conference details the list of default wiki pages will be created for the conference 4. special badges can be created for the attendees 5. all information for a conference (schedule+proposals+speakers...) can be exported in XML format 6. event management feature - at any time new events can be added or already added events can be removed 7. some custom tags (parser) to design the conference wiki pages - for example tag could be used to show the schedule for a conference on a page 8. creation of submission and registration forms - these forms will be implemented using Special Pages.

All the admin pages including the Dashboard would be implemented with the help of SpecialPages` and AJAX(JS) scripts. The other elements of this extension such as submission, registration and scholarship forms would also be set up through Special Pages. The regular conference pages (Welcome Page, Registration page..etc) would just be the normal wiki pages with the admin defined permissions (user rights). With the help of custom (parser) tags the look and design of conference pages can be changed. The best part of this extension would be that most of the regular setup of this conference would be automated, which means that as soon as the admin sets up the preferences and settings for the conference all the common features for a conference would be ready to be use. Currently wikis powered by MediaWiki serve the purpose of a content management system, but with the help of this extension they would bring the already accepted and highly appreciated power of MediaWiki combined with an efficient conference management system.Some work has already been done by other mediaiwiki developers on a  wikimania extension, so that in itself marks the need for such an extension. Detailed explanation of every feature can be found at this page ..

Deliverables
Keeping in mind the very essentials this extension should be good at I have prepared the given set of deliverables for this project :

Required Deliverables

 * Admin Pages - Create a set of admin pages(Start conference page, Conference Setup page and Dashboard)which would help admin in setting and monitoring a conference.
 * Modification of user pages - Details regarding the transactions, registrations and signups will be shown on user pages.
 * User-Input forms - Develop user-input forms for the purpose of proposal submission, registration and scholarships
 * Custom tags and Magic Words - Define new parser tags and magic words which would help in putting some relevant information on conference pages.
 * Documentation - Besides the documentation provided for the code written ,some extensive demo pages would be created explaining the usage of this extension.

If time permits

 * I would like to create more custom tags that an admin could use to design the conference pages as the sole purpose of this extension is to set up a good conference website with minimal amount of effort.
 * One of the important features of a conference management system is the payment gateway which will handle all the financial transactions within a conference. So would like to work on this feature post summer. - sample.
 * Proposals ranking system would prove in handy for the admin and the organizers to review large number of proposals. - discussion.

Project Schedule
I prefer to document and test the code side by side, so have prepared a schedule keeping that in mind.

Pre-Coding Period

 * Set up a Git repository(already done) and gain some more familiarity(more than what I already have) with it.
 * Learn about php unit testing(done)
 * Setup local testing environment(Selenium)
 * Learn about how to use Selenium
 * Learn about how different types of caching is implemented in Mediawiki
 * And finally learn some more about the API functionality in Mediawiki

Official Schedule

 * Milestone 1  23rd May - 30th May
 * write code for parsing content from wiki pages(extracting content from page, page_properties, user and user_properties table)


 * 31st May - 1st June- test for parsing code written with sample data + documentation
 * Milestone 2 2nd June - 9th June
 * start writing API modules(API classes extending ApiBase)


 * 10th June - 11th June - test the finished API modules + documentation
 * Milestone 3 12th June - 19th June
 * finish writing API modules(API classes extending ApiBase which serve the response for Ajax calls)


 * 20th June - 21st June- testing of finished API modules + documentation
 * Milestone 4 22nd June - 29th June
 * start writing code for admin interfaces(HTML+javascript+jQuery+some PHP Special Page classes)


 * 30th June - 1st July- test the code to see if HTML elements are rendered as desired ( fix CSS &javascript bugs for different browsers)+ documentation
 * Milestone 5 2nd July - 9th July
 * continue working on admin interfaces + User pages +dashboard(HTML+javascript+jQuery+Special Page class for the Dashboard)


 * 10th July - 11th June- would test for the CSS and javascript browser issues + documentation
 * Milestone 6 12th July - 19th July
 * write code for custom tags and magic words


 * 20th July - 20st July - test the functioning of custom tags and magic words + documentation
 * Milestone 7 22nd July - 29th July
 * complete the code for user-input forms(registration,submission and scholarship forms)


 * Milestone 8 30th July - 15th August
 * merging with trunk, pre-deploy review, testing, bugfixing
 * document the finished code
 * do some refining tasks


 * 15th August - 20th August - Pencils down on official project

Post Summer Of Code
Some important features of a conference management system such as the ones mentioned above in "If time permits" section would be implemented by me during this period. The roadmap for the same is as follows :-
 * Milestone 9  30th August - 5th September
 * start writing code for payment gateway(using paypal)sample

This above task will include :- 1.writing a PHP class for outputting HTML form linked with paypal account. 2.creating database table 'transactions'(for storing the transaction details)
 * 6th September - 8th September- testing with sample data
 * Milestone 10  9th September - 15th September
 * start writing code for payment gateway(using google checkout)


 * 16th September - 17th September- testing with sample data+documentation(for both paypal+ google checkout)
 * Milestone 11  18th September - 1st October(2 weeks)
 * begin to write code for assessment system sample

This above task will include :- 1. ConferenceReviewer class for handling all the data relevant to a reviewer 2. ConferenceRanking class for handling the logic related to ranking These both classes will help in creating Reviewer and Ranking(wiki pages), and also in maintaining page_props for each of these pages. 3. Modification of ConferenceSetup and ConferenceDashboard special pages -add options in Dashboard to configure/remove reviewers for the conference - add a page in Dashboard where ranking done by all the reviewers can be seen
 * 2nd October - 4th October- testing +documentation+ browser js issues
 * Milestone 12  5th October - 11th October
 * create a Special Page for uploading information about hotels tied with the conference(photos + room availability info + cost for rooms)

1. ConferenceHotel class for handling hotel data This class would create ConferenceHotel(wiki page) which would store the hotel info as the content and conference_id as 'hotel-conf' property in the page_props table.
 * 12th October - 13th October- final testing of this special page
 * Milestone 13  14th October onwards
 * work on implementing interface messages in different languages( most of the work would be done with the help of translatewiki.net)
 * complete the unfinished documentation

 Note :- The above schedule is likely to change depending on how and when the milestones are achieved, but the order in which they are mentioned will remain the same

About You
I am pursuing Masters of Science in Chemistry and Bachelor of Technology in Electronics and Instrumentation from Birla Institute of Technology and Science(BITS), Pilani(India). Currently I am in my 5th(final) year and working as an Intern for a software company in Bangalore. It wasn't very long ago(may be in my 2nd year) when I got into writing code just to see something render on my browser. But later when those pretty things on my browser didn't excite me anymore, I got interested in writing server side code for web applications.Most of the the work that I have worked on till date has been mostly in Java, Javascript(jQuery) and ActionScript(Flex).During my internship I was asked to write PHP scripts for server side components, so the familiarity with PHP language I gained during that period along with the bug patches I submitted for Mediawiki helped me become competent in PHP. The idea of making things simple, even simpler than what they already are has always been the sole purpose behind my coding. Most of the people around us are not familiar with the coding stuff that goes into making a software, all they are concerned with is the end result. So unless and until the user experience the software offers is easy enough for them to understand and use ,there is no point in developing such a software in the first place. I am talking about simplicity in terms of how the user interacts with the software and how quickly user gets familiar with it.And I think for the same reason(besides that its a free source of accumulated human knowledge) Wikipedia and its related projects are so popular, because end users can modify the content without having any knowledge of HTML or CSS .Just the same way I want my extension to be a simple ,yet powerful tool to provide means for setting up a conference on a wiki site. An admin with just a preliminary knowledge of PHP should be able to configure the Conference according to his/her needs. Some of my work that I have shared on Github -
 * TransactionAppWebService - java(J2EE,spring)
 * MapsModule - javascript

Participation
I mostly prefer to write code during day time, unless there is something not letting me sleep at night. I would keep my mentor updated about the project details on a weekly basis, and due to the difference in timezone main mode of communication would be emails. In order to seek help for my queries I would be mailing them to my mentor if I dont happen to find him/her on IRC channels. I would be maintaining a page under mediawiki.org for posting all the project details ,and all the project code would be kept under the public repository at Git.I have already created a repository for the same, and this is the link.

Past Open Source Experience
Most of what I have developed till date has either been for a college project or of my personal interest. Well I am not new to the concept of open source, I have used many of the java open source libraries and tools in my projects. And having used them helps me understand the value of open source code available out there for others to use. I would see this as an amazing opportunity for me to become a part of open source family where code developed by me could prove useful to others and where people would contribute with my work to make it better.In order to start contributing for Mediawiki I have been going through their code base for some time now, and have written some bug patches as well. The Pune Hackathon (India) which was held in February showed me how much fun it is to develop open source code for the community. Patches : bug 19935 , bug 6908 , bug 7184 , bug 21119(gerrit) bug 10817(gerrit)

Any other info

 * proof of concept code - https://github.com/chughakshay16/ConventionExtension
 * more details about this extension(architecture+UI mockups) - http://www.mediawiki.org/wiki/User:Chughakshay16/ConventionExtension#Architecture_and_Workflow
 * data storage details for this extension - http://www.mediawiki.org/wiki/User:Chughakshay16/ConventionExtension#Data_Storage_Architecture
 * my proposal on wikitech-l - http://lists.wikimedia.org/pipermail/wikitech-l/2012-February/058387.html
 * ranking proposal system - http://www.mediawiki.org/wiki/User_talk:Chughakshay16/ConventionExtension#Ranking_Proposals_14643
 * other open source conference management systems pentaburf,WisConDBand OpenConferenceWare
 * code for wikimania extension developed by(^demon, reedy) -https://github.com/mediawiki/mediawiki-trunk-extensions/tree/eb1c4f1ab4483ea97ba5234a437bb19b019dd647/Wikimania