User:Erangamapa/mygsoc

This is my GSoC project proposal to participate in Google Summer of Code 2012 with Wikimedia Foundation. I am particularly interested in integrating "Who's been awesome?" to MediaWiki suggested by User:Jalexander.

Identity
Name: Eranga Mapa Email: erangamapa@gmail.com Project title: MerchTool.

Contact/working info
Timezone: UTC/GMT +5:30 hours Typical working hours: 9am to 6pm IRC or IM networks/handle(s): Both my Skype name and Freenode IRC nickname is mapahere

Project summary
This project is based on the idea proposed by User:Jalexander who offers to mentor.

MediaWiki is adopted for many Wikis where number of editors involved in writing and editing articles. But there is no proper way to allow editors to appreciate each others work. But, by integrating a Merchandise tool("Who's been awesome?" functionality) to MediaWiki, wiki editors will get a chance to reward other wiki editors who helped them in their work. After a particular user makes 100 edits to a wiki, once a three months, a link will be provided in the top navigation bar. User can follow this link to praise other users based on their commitments towards that wiki. Those praises will be stored and will be available publicly via an API for merchandise purposes. Apart from that they will be fed into the Moodbar Dashbord.

For this purpose I am introducing an Extension called MerchTool for MediaWiki.

This extension will work based on the user data such as user names and user edits on MediaWiki. In this extension, a function Hook will be created for ArticleSaveComplete event.An evaluation function attached to that hook will check for two things.First it will check weather the user who is saving the article has done 100 or more edits. Then It will check weather time since last praise by that user exceeds three months. If so, a link mentioning "Know an editor who deserves a reward?" will appear in top navigation bar.

When user clicks on "Know an editor who deserves a reward?", popup box with a form will appear. From there onwards, user can submit a praise for another user or take a different action as preferred. A database table will be created for this extension in MediaWiki database. Submitted praises will be saved in that table. Those praises will be shown in a Special Page created for the extension. Data collected from this extension will be available through MediaWiki web service API. It can be used to access data related to this extension and use for merchandise purposes. Praises collected by this extension will be published to MoodBar Dashboard using API calls internally.

Required deliverables

 * Adding a JQuery module to load the link "Know an editor who deserves a reward?" to the top navigation bar. When user moves the mouse pointer on to the link, a tool tip will appear mentioning "Click here to praise a Wikiuser who helped you". This will help to guide the user.


 * Adding a JQuery module to view required UIs. Set of popup boxes will be created in this module using JQuery Overlay. After a user clicks on the above mentioned link, following popup boxes will appear one by one according to user's actions.
 * When a user clicks the above mentioned link, a popup box with a label,text box and a text area will appear. Label will contain a description about this MerchTool. Text box is to name users who deserve a praise. This text box will have the AutoCompletion by using Ajax asynchronous queries. When user types first few letters of a Wiki username, suggesion list will be provide. Then user can easily select a name of s user for praising. Text area is to write the praise. Apart from those, there will be a submit button and a "No thanks" link. By clicking the submit button, praise will be saved to a database table using an Ajax call.
 * After clicking the submit button, circular progress indicator will appear until data get saved in the database table. Then a thanks box will appear. In that box, there will be a label containing an appreciation message for the user who praised. Then there will be a button mentioning "Back to what I was doing" which will direct that user to the Wiki page.
 * If user clicks on "No thanks" link from first, another popup box will appear. It will have four buttons. One is to avoid praising this time. If user clicks on it, next time praising link will appear after three months for that user. Other button is to let the user to praise next time when he edits an article. Next button is to hide the popup box and make the MerchTool link available until user logs out. This will allow the user to praise after some time during current session. Last button is to go back to first popup box.


 * Special page to view praises done by users. This page will have a implementation using MediaWiki table markup. It will contain following columns.
 * User - Name of the user who got praised.
 * Praised by - Name of the user who did the praise.
 * Praise - Praise done by the user in Praised by coloumn.
 * Date of Praise(If needed)


 * An API module to make available the data collected by this extension as a web service. This will only give read only access to those data. If needed, read only access will be permitted upon submitting a login query for API users. By using this API, a developer can read praises towards a particular user and praises from a particular user in XML format.


 * Praises from this extension will be published in MoodBar Dashboard.This will be achived using API calls from MoodBar to MerchTool. A checkbox option will appear under types in MoodBar dashboard to filter praises.

If time permits

 * Sending merchandise to users.
 * This can be done using one of the following two approaches.
 * An email will be sent periodically(or after collecting certain number of praises) to users including praises. This will be done using MediaWiki UserMailer class. This email will include praises and names of users who praised for them.
 * A JQuery notification module will be created to notify users when there are new praises for them. When a user logs in, a link to that module will be shown in side bar.

Extension MerchTool will be the final deliverable.

Project schedule
Since I am having exams from 23rd April to 10th May, I will not be able to involve in this project during this period. But after 10th of May, I will be resuming my work and spending more time to cover up things.

Community bonding period

 * Going through MediaWiki documentation(Already happening).
 * Getting familiar with MediaWiki code base(Already happening).
 * Communicating with my mentor. Discuss about needed changes and clearing any doubts(Already happening).
 * Since there is a significant involvement in JQuery with this project, learning further about JQuery.
 * Getting used to MediaWiki testing environment(Selenium).

Starting from 24th May, 2012
Week 1

Deciding on required columns, creating a database table and adding some pre generated mock data for testing purposes.

Week 2

Writing an event handling function to handle the event ArticleSaveComplete inside the extension.

Week 3-4

Developing the JQuery module to load the link "Know an editor who deserves a reward?".
 * -Writing the CSS file.
 * -Writing the JQuery script.

Week 5-7

Developing the JQuery module to show required UIs.
 * -Writing required CSS classes for each UI.
 * -Developing a JQuery script to view praise submission form, submission progress indicator, thanks form and no thanks form.
 * -Writing a submission function to map submission form with database table.

Week 8-9

Creating SpecialPage and a table in it to view praises.
 * -Creating the special page.
 * -Creating a table inside the special page.
 * -Mapping the table with database table.

About you
I'm a 24 year old Computer Science and Engineering undergraduate at University of Moratuwa Sri Lanka. I am passionate about open source software development. So far I have been referring Wikipedia for many purposes and was wondering about how Wikipedia works. Then I came to know about MediaWiki, a nice open source software package which energize many wikis including Wikipedia. I looked into MediaWiki architecture and explored how things happening inside it. I was amazed with its maturity. So I decided to have my first open source experience by developing an extension to MediaWiki.

Mainly I'm interested in the area of Web Application Development. My appearance to web application development by developing few web sites. Then I learned to prepare web sites using WordPress and Joomla CMSs. Lately, I went more deep into this area by developing some web applications as my university projects. Thereafter I got familiar with many web technologies such as PHP, MySQL and Javascript. Eager to leverage my classroom learning into real world experience, I joined with Monvia Sri Lankan branch, as an outsourced software developer in 2011. In there, I involved in developing a web application with Symfony PHP framework to measure production line performance of a group of garment factories. Now I am working as a Software Engineer at GlomeTec. Apart from web application development I'm interested and experienced in many other areas such as Mobile Application Development, Game Design and Artificial Intelligence.

When talking about my personality, I am a quiet and reserved person. But when get interested, I would like to share my ideas with others and listen to their opinions. During my spare time, I would like listen to music, travel and hang out with my friends. I have a higher motivation to learn and try which drives me ahead.

Participation
I prefer to be in contact with 7.00 AM to 1.00 PM according to PDT. Most of the time, I will be hanging out in Skype and willing to go with IRC if needed. I like to use mail threads for important discussions. I prefer to share my source code using Git. MediWiki sub page will be used to publish my project progress.

Past open source experience
I have developed an extension ELearnware for MediaWiki which can be used to synchronize HTML5 video with content such as rich text and images. Main purpose can be to create rich video lectures synchronized with slides. It introduces two special pages. One is an editor page to chop HTML5 videos and align content with the video. Other special page is to view edited videos synchronized with content.

Any other info
Will be updated soon