Google Summer of Code

Jojo are applying for Google Summer of Code 2008, as a way of boosting development efforts for the project. Each year, Google sponsors students to spend their summer holidays working on a range of open source projects, providing the projects have some meaty tasks for students to get into.

Luckily, meaty tasks are in good supply here.

The following are a list of projects we would love to see happen in Jojo. There are others, and we are open to suggestions if there is something not mentioned here that you would like to work on.

Image uploader / editor interface

Mentor: Harvey Kane
We are very proud of the architecture behind the image handling in Jojo. Jojo allows images to be uploaded at a large size, and resizing an image is as simple as calling a different URL. Resized images are cached, which can be cleared by pressing CTRL-F5. Images have nice URLs, and are able to be easily indexed by search engines.

However, our interface for uploading images is largely undeveloped. Users expect an easy way of being able to upload an image and insert it into a web page. Being able to resize by stretching an image is desireable, and being able to crop the image on the server is a nice to have feature as well.
Because images are uploaded in several parts of the admin area, and are inserted using a WYSIWYG editor, and BB Code (and potentially markdown, textile etc in the future), we are looking for an interface that is consistent, with plugins to integrate into the variuos editors such as Xinha.

There is a lot of scope to be creative in this project. We are looking for an image handling interface that fits in well with our unique backend, and that users will be able to feel comfortable with straight away.

Google calendar plugin

Mentor: TBA
Google calendar offers some neat features, and the API allows developers to display calendars, or parts of calendars on their sites.
We can see an immediate need for a flexible Jojo plugin that integrates with the Google calendar API, allowing our users to add calendars easily to their pages, and format them in a variety of different ways.
Calendars would mostly be used for displaying up and coming events, or for online booking systems that integrate with a payments plugin of sorts.
We can see this project being based around the following ideas...
  • Integrating with the Google Calendar API (PHP)
  • Providing a set of premade templates for displaying calendars in body content, and in sidebars. We are looking for a rich and usable interface for viewing calendars.
  • Multiple calendars can be displayed on a website, and display settings can be stored on a per-calendar basis.

Translations

Mentor: Mike Cochrane
We already have support for multilingual sites, but this does not extend to the admin side of things. We are looking for a scaleable way of translating text snippets across the Jojo interface. We think this should be handled at the template level, which will likely involve creating some custom Smarty tags for phrases that need translating.

What is more important though, is creating an interface for users to enter the translated text into. We would like Jojo to produce a list of phrases that need to be translated, which a translator can work through quickly to populate the data. We would like a way for translators to submit their changes to a central database so we can distribute translated text with future releases.

This project will also involve pre-populating as much translated text as possible by finding existing sources of translations (such as other open source projects), and entering as much as possible. We would also like all hard-coded text removed from core PHP files, so that these text snippets can be translated.

Being able to read/write in more than one language would be an advantage for this project, as well as an understanding of character sets and issues with translating text. This project will involve mostly PHP and Smarty coding, a focus on making a usable interface, and a little data-entry.


Payment Providers

Mentor: Harvey Kane
We are developing a payment plugin that allows developers to add payment facilities to their custom product database plugins. The plugin also connects to payment gateway plugins, which need to process payments in a variety of different ways.

We have in development payment processor plugins for popular New Zealand providers DPS and SecurePayTech, as well as WorldPay, Google Checkout and Paypal. However, if this plugin is to be used internationally, we need to provide plugins for the major providers.

Who are these providers?

This project involves researching the different payment providers, and creating plugins for those that are likely to be most useful to our users. We will also ask you to help develop the important features of our shopping cart plugin, provide additional configuration options, and ensure that integration with our affiliate, discount code, and loyalty scheme plugins is consistent and easy.

We think that Jojo CMS can be competitive in the product database market by combining search engine friendliness with good product databases and flexible payment integration.

Solid PHP5 skills are a must for this project, and a keen focus on security and attention to detail will be required.

GUI form manager

Mentor: Tom Dale
Developers are always asking for an easy way of creating web forms. We currently have a few solutions available, but all involve getting the hands dirty with PHP.

We would like to be able to offer a world-class form manager system - something that provides a GUI for creating forms, drag-drop ordering of form elements, client side and server side validation of data based on settings in the GUI, and a range of form elements to choose from, including rich elements such as date pickers, and cascading select boxes.

We would also love to see the addition of audio CAPTCHAs and support for the ReCAPTCHA system.

This project will require moderate PHP skills, and a good grasp of Javascript and CSS. Jquery is our weapon of choice for adding client-side interactivity to forms.

Improved search plugin

Mentor: Mike Cochrane
Jojo has a basic search system which allows plugins to add their pages into the site search results. We would like to extend this in a few ways:

Live search - an AJAX widget for giving live search results, similar in behaviour to www.oag.govt.nz

Improved relevancy - How can we provide better results from our onsite search? A way of filtering search results to recent entries, or by plugin. Also, smarter searching so that the best results are more likely to show first - how can we provide an effective and easy way for plugins to add themselves into the search, while still maintaining relevant results?

It may also be worth displaying results from a Google site: search if the Jojo algorithm fails to deliver any useful results. How can we ensure that the search facility is useful, and meets user expectations?

Extending our search facility will take a good knowledge of databases, indexing, and SQL queries. Searches need to be fast, relevant and not so complicated that plugins can't integrate into the system. This could possibly involve using SQLite and the [http://www.sqlite.org/cvstrac/wiki?p=FtsTwo Full Text Search] extension.

Approval of Edits

Mentor: Mike Cochrane
Jojo currently stores version history for every page save. This has come in handy more than once for restoring a previous copy of a page, but it involves accessing the database via phpMyAdmin to do so.

We would like to add the facility for content versioning and approval to Jojo, so that changes can be made to content without going live immediately. These changes would need to be approved before they go live.

Ideally, the content approver would get an email notification with a diff or similar detailing which changes have been made, with quick links for approving or reverting changes (similar to the existing comment approval emails).

A possible addition to this project would be implementing optimistic concurrency control on rows when multiple content authors are working on the same row at the same time.

Admin Interface Accessibility

Mentor: Tom Dale
Much of the admin interface has been created using off-the-shelf javascript widgets and custom AJAX code, and unfortunately this means the admin area isn't all that friendly to non-browser user agents. We would love to see the various elements of the admin section degrade gracefully for a wider range of user-agents, supporting the goals of accessibility as a whole, and making the system useful to a wider range of content authors.
This project would also extend to other aspects of the site - adding audio CAPTCHAs where appropriate, and ensuring that key elements of our core plugins work well for browsers, bots, and other user-agents.

Widgets System

Mentor: Mike Cochrane
A most of the existing Jojo plugins implement full page features like the articles or sitemap plugin does. Some plugins implement features that take up smaller amounts of space like the Google Maps plugin, or the YouTube plugin.

To use these plugins at the moment, the user must enter place holders in the pages that follow are particular format, eg:
[[youtube:url of video]]
[[gmaps:Name of Map]]
These are great for developers as it makes simple to implement, but it's not great for users who have to remember them.

What we're after is a way for plugins to define the widgets they implement and the options for those widgets. Once this is defined, create a way for users to add a widget to a page via a friendly interface. We are open to ideas on how the interface works for this, it just needs to be consistent and easy to us.

When that's all done, feel free to come up with a bunch of widgets. We have code that does some things already like in-page galleries, weather.com widgets, currency converts, Google and ZoomIn maps, Google and YouTube videos and probably many more if we looked around. These are all candidates for conversion to widgets. But there's got to be other cooler ones that we haven't implemented like Twitter feeds, RSS news feeds.

External APIs

Mentor: Mike Cochrane
Every cool site online has external APIs, and we want some for Jojo. There are a number of ways that you could go with this one depending on what APIs you think are most usefull.

OpenID
Jojo recently got an OpenID authentication plugin so is now an OpenID consumer but it would be great to be an OpenID provider too. This would involve creating a user interface around an existing OpenID library and wrapping this all up into a plugin so any Jojo site with user registration could become and OpenID provider. And while your in this area of the code, associating multiple OpenIDs against a user is important too.

Blogger API
There are a bunch of desktop tools for maintaining your blogs. These all comunicate back to the real blog over APIs, on of which is the Blogger API. The articles plugin could be extended, or a seperate plugin create, to provide the Blogger API externally. This would allow existing tools to work with Jojo and edit blogs. Other common Blogs APIs could be used, which ever you think is best. The articles plugin will need to be extended to handle the missing features needed eg currently it has no concept of post authors (although may do by the time you read this as I need it soon) and draft posts.

RSS feeds
Some of our plugnis could do with some help here, the articles and forum plugins have RSS feeds, but the gallery plugins where left out here. Maybe the galleries even get geotagging and get GeoRSS and KML support. And an RSS feed for the most recent changes to pages on the site, the data is there in the database - it just needs a feed created.

iCal feeds
A couple of time we've beenn asked if we've got an events plugin too - we don't yet but if we did, it'd have iCal feeds to subscribe too and multiple template for display, possibly reusing the Google Calendar ones above.

Additional themes

Mentor: Bon Virata
Users constantly ask for a greater selection of themes to choose from. Our goal for Jojo has always been to encourage using custom themes to avoid having all sites look the same, however developers would like a better choice of example themes to base their customizations on. We are looking for a selection of well commented themes in a range of different styles - 2 column, 3 column, fixed width, floating width, with a range of navigational structures which developers can re-use (navigation is typically one of the more time-consuming parts of developing a Jojo site).

Themes can be based on readily available open-source layouts, or a design-minded person would have full license to create a range of original designs and themes.

We are looking for a good looking set of themes that work well with different content layouts, is efficient to load, standards compliant, browser-tested, and are well commented. We would also love some video documentation on how to put together a good theme.

Community and User Profile tools

Mentor: TBA/Multiple

Jojo hasn't had a lot of use for community sites as yet because that's not the sort of clients we had, and Jojo's features have be largely driven by our paying client's needs.

We'd like to start using it to build online communities but it's lacking a lot in this area. To start, users need to be able to create decent user profiles. Sure they can upload a profile photo but that hardly counts. Help us by coming up with user profile system that allows adding friends and plugins to feed information into it.

Plugins have data about users they could be providing like recent article comments, recent blog posts (once the blog plugin gets author support - see above), recent forum posts. Other sites could be used to provide data like recent Diggs, Flickr Photos, Youtube videos or favorites, Twitter updates, FireEagle location, info from Google Social Graph API.

Other things that could be in here are support for Gravatars, importing contacts from Windows Live and GMail via their APIs, FOAF, XFN and MicroID stuff.

Widgets that this could be providing are things like;
Lists of most recently joined, users currently online (maybe extend the current customer session handler for storing this).

Jojo is object oriented in places, but its handling of users is not, so implementing a Jojo_User object to make it easier for plugin authors to work with users would be great too. There would be some work to refactor the existing hard coded querying of the user table that's currently in different plugins.

Plenty of scope for more than one person working on all this so feel free to suggest things that I've left off.