Building a new feature for a client that now forms part of a publically released plugin.
The Context. The Center for Applied Research and Environmental Systems (CARES) at the University of Missouri was using my BuddyPress Docs plugin on a community site that allows users to author and edit documents collaboratively. While Docs had become an important part of their internal workflow, there was one limitation: users wanted to share non-textual documents such as images and PowerPoint presentations, but BuddyPress Docs didn’t support attachments.
The Challenge. As the author of the BuddyPress Docs plugin and a lead developer of BuddyPress itself, the CARES team reached out to me as the best person to build the improvement. They needed attachment support added to BuddyPress Docs in a way that:
- made use of the WordPress user interface that their users were already comfortable with;
- integrated with the BuddyPress Docs UI;
- ensured proper privacy of uploaded documents.
The team was eager to roll the changes into the publicly available BuddyPress Docs plugin.
What I Did
As the clients already knew the product – BuddyPress Docs and BuddyPress – it only took a few short conversations to draw up the scope for the project. Within a few weeks of initial contact I was able to deliver the first iteration of the improvement.
The biggest technical challenge that I faced was dealing with attachment privacy. This was a key element of the project that I needed to get right. By default, WordPress uploads are put into a directory that is directly accessible by the webserver. This means that the files can be read and downloaded by anyone who knows the URL – regular users, search engines, and so on.
The standard way of dealing with this is to serve uploaded files only through the application – that is, by loading WordPress before letting the files be downloaded. But this, by itself, doesn’t scale very well. I built a solution that only runs downloads through WordPress if the document was created in a non-public group. I also built a tool to detect group privacy changes and update document settings accordingly. This solution struck a nice balance between security and performance.
The feature was rolled into the public version of the BuddyPress Docs plugin, which was released a few weeks after the project ended. As a result, I’ve been involved with maintaining the feature over the years, but no longer under the CARES umbrella. I have also improved the feature so that it works effectively with a larger number of server setups than the limited Apache configuration it was originally designed for.
- custom plugin development
- packaging and release into an existing free software project
- “Attachments” feature that greatly enhanced functionality on a tool that was already integral to the BuddyPress installation
Free Software Outcomes
- Improvements were rolled into the public plugin for the benefit of all users
Boone is an efficient, professional developer. He is easy to work with because he’s a good communicator and responsive to changing priorities. Boone also consistently uses his powers for good by championing and contributing to open source software projects.
David Cavins, Programmer, CARES University of Missouri