Final
Introduction
Here is a complete progress report for a final project: additions to Nook geared towards Town Meeting, committees, and student groups.
Below you can find a history of our project, then a guide on how to replicate the additions we've made to our Nook backup. We've kept detailed notes on new module installations, content changes, configurations, bugs, and custom Views.
We don't feel that our work produced a beta version. Their are still bugs to work out and features that need to be configured. However, it is a formidable start for integration that we hope Nook will have in the future. The idea is that IT people will be able to reconstruct our work as a foundation for adding "group features" to Nook.
A Quick Note: We were unable to provide a .tar file backup of our Nook site, as we do not have SSH access.
Nook Additions
We began this project with the concept of developing community features for Nook. We wanted groups of users to be able to create content that could be specific/private to themselves. Initially we had different ideas for what applications this could be used for, but we decided on using Town Meeting as the group we would both concentrate on. Working with Town Meeting, we decided to give each group forums, meeting content, and a schedule of meetings. Initially, Ryan was also hoping to integrate a user-friendly system of managing users for groups, including automated features such as terms for members and an election and nomination system. However, we decided that this would be a very large undertaking and concentrated instead on getting the group pages functioning and somewhat pretty.
While we'll document the full process below, we'll give a brief overview here of our troubles and successes, and what we learned from this project.
Problem 1: One of the biggest things I had hoped to do was develop a system for managing group subscribers and also for elections and nominations. We attempted to create
an initial nomination system, but after the first few weeks we decided that neither system was feasible this semester. While everything else we were doing involved working within existing modules, these systems for managing users would have involved writing our own module. This was something that I was unprepared to do and that Patrick didn't have time to do, so we decided we would use what the Groups module provided for us.
-Ryan This leads us into...
Problem 2:: When we decided to just use the adminstration functions built-in to Organic Groups, we realized that we needed to find a way to work within the many limitations of the system. First, there can only be one administrator per group, and this person can only be changed
by changing the author of the Group home page. Also, an admin can only change a group's subscribers
by writing them out by hand in a text box. Both are very inconvenient on the scale of a Town Meeting group, but how could this be managed on a scale of dozens of groups? One solution was to create a group-moderator user that could manage all groups and the account could be given to several people and wouldn't require the help of an admin to transfer priveleges from one user to another. However, Ian Kozak told us that creating users outside LDAP would be very difficult. So instead we decided that each group could have one rotating admin that would manage subscribers, and that all these admins could be managed by a group manager. This would be a role that would have the privileges to edit all group content, allowing them to change the admins of any group. This solution won't hold up to many, many groups with many subscribers, but it should hold up very nicely for the purposes of this project.
-Ryan
Problem 3:: One of the main features I wanted in the beginning was for the town meeting group page to display a schedule of Town Meetings. I later expanded this idea to each committee having a schedule and possibly a schedule of all committee meetings. However, we've had great trouble doing this. Initially we thought that we would just have meeting name and time, and Patrick would create a Town Meeting schedule by searching for meetings that had the name "Town Meeting". We moved onto the idea of a meeting taxonomy, having Town Meetings, Committee Meetings, and Group Meetings. Based on this Patrick created a
meetings search page, as well as a
an upcoming Town Meetings block on the town meeting page. And after much research by Patrick and discussion, we concluded that it's impossible to create a block that will show each group's meeting content on its home page. And while we can limit the recent posts feature on the groups page to recently posted meeting content, it won't be a schedule, and we felt it better to show forum posts instead. So Patrick's specific view of the Town Meeting group is great, but is not possible to use as a template for all group home pages.
Patrick! Try and write about the problem and solution of the Apache memory error. I don't trust my knowledge to explain it accurately. ALSO, add more about the Group Meeting Block problem above, give it technical mumbo!
Weekly Progress
- Ryan began by setting up a test install of Drupal 5.1 on CS port 8080 | Screenshot. This took Ryan a bit to set up and he configured it with Patrick's help, but he was really surprised how easy it was to get set up. We had a little trouble configuring CRON, but eventually with Jim's help we figured that all you have to do in Drupal 5.1 is run cron.php. That was the only hiccup in the initial configuration. - Ryan (In line with Jim needing to know who did what, we'll sign the posts where one of us did the majority of work)
- We then tried to use a taxonomy and an access control module to create pages accessible only to certain users, but we found it would take a lot of work to do what we had hoped. Instead, we began using the Organic Groups module, which really did almost everything we were hoping to do. We configured the groups module and created committee content types and nominations. Here's what a typical group home page looked like. The nomination system was discussed for a while, but we decided to focus our efforts on getting Groups functions working well. So we used CS:8080 as a testbed for our ideas and gained a general idea of what we wanted to work with on Nook, which was the Groups module, the Content Construction kit, and Views. -Patrick and Ryan (This week we worked together for 5-6 hours)
- Ryan then talked to Elliot and he gave us a backup of Nook on his deluge server port 8445, and you can login using UN: Admin, PW: MyNook. We weren't given SSH access, so at first we were unable to install any modules using command-line FTP. Ryan played on CS:8080 and begin working on meeting content. He wanted to allow users to create Town Meeting dates that could be viewed in a schedule, so he created the Town Meeting Date content type, though Patrick convinced him to change this into a non-specific meeting type. He also played with the idea of creating meeting schedules, but Patrick decided he would work on this schedule page as he had worked extensively with views before. Ryan also experimented with the idea of committees being sub-groups of Town Meeting, though we later decided we didn't want to do this, mostly because we couldn't figure out what the actual features it gave us were.-Ryan
- After playing with several FTP programs, Ryan managed to install the organic groups module and configure it. We worked on reinstalling the Town Meeting group, and we played with several groups modules such as forums, roles, and content-type administration. We eventually decided that we didn't need group-specific roles and content-types, so these modules were removed. I created the Meeting content type on Nook with a taxonomy for different meeting types, such as committee meetings and town meetings. Patrick worked on installing and configuring the modules, and we decided we definitely wanted to use Group forums. Patrick also began working on creating a view for past town meetings. -Ryan and Patrick (Again we worked together, although Ryan spent an additional few hours documenting what we had done.)
Nook Installation Step-by-step
We'll be going through this process as a step-by-step guide of sorts to installing Groups on Nook. Each content and content type created has a link giving details to it's description, settings, etc..
- Get Elliot to give you a sweet clone of Nook, log in as admin.
- Use an FTP program to download the groups module and copy the files into Drupal under the directory /sites/all/modules/og/.
- Enable Organic Groups Access Control in Site Configuration - Modules.
- Create a 'groups' content type under Content Management - Content Types.
- Change the organic groups configuration under Organic Groups - OG Configuration
- Select the 'Groups' content type under 'Group home page'
- Under Group details set permissions and control
- Under Node authoring form set visibility of posts: chosen by author but default to private; turn on audience checkboxes.
- Create a Town Meeting group
- Create a Meeting content type
- Edit the Meeting content type and Add field - ¨Agenda¨, Text Field.
- 6 Rows, Help text: ¨Post the agenda here as soon as it's available.¨
- Add field - ¨Minutes¨, Text Field.
- 10 Rows, Help text: ¨Post the town meeting minutes here as soon as they're completed.¨
- Edit Meeting content type - Manage fields, give Agenda a -1 weight.
- Optional Add Group Content Type module in the same way as the organic groups module was added above. Not necessary for Town Meeting groups. Warning: This will give each group the ability to choose which content the group can create, but the settings override the site-wide settings for what content all users can create. Just be careful.
- Add Town Meeting as a group under Organic Groups - OG Content Types
- Enable Meeting content type in all groups
- Under User Manag. - Roles, enable Authenticated Users to create Meeting content, this allows non-admin group members to create group content.
- Add Groups Forum module
- Enable Forums for Town Meeting group under Organic Groups - OG forum
- Disable the Group Notifications Block under Site Config - Blocks
- Move Group Details to the right_nav in Site Config - Blocks
- Import custom Views
- Make sure to enable custom blocks that are created are enabled
Final product
The version of Nook we are testing on is running Drupal 5.2.
You can find it here. It is essentially a backup of Nook, created by Eliot. In addition to the modules Nook currently runs, we added the following:
- Organic Groups (og 5.x-2.2)
- Organic Groups Forums (og_forum 5.x-1.3)
- Views UI
- this is installed with Views module, which came pre-installed with Nook, but we turned it on
Final Screenshots:
Custom Homepage View for Town Meeting, Which We Were Unable to Implement as the default theme for all Groups (The reason for this is that to limit the content for the recent forum posts block, the block is only looking at content specific to the Town Meeting forum. To make a single view that would do this for every group homepage, the current node ID would have to be passed as an argument to tell the block what Group's content to display, and Patrick found that this was not possible with Drupal currently. Although this is something we can certainly try to do with future versions of Drupal, or continue to look for development in this area of 5.1.)
Our additions to Nook also depend much on custom Views. Here are the custom views we created with links to code you can use to import the Views:
Final Thoughts
Ryan: I think this semester has been very valuable in several respects, the biggest being that I've had to change how I go about working on projects. In the first half, working with CSS and XHTML really reminded me that with computers the best way to learn is to start with work done by others. My initial desire is to begin working from scratch, but when I tried to that with CSS I got terribly frustrated and really just learned didn't work, which as I learned is not a good way to learn programming languages. Beginning with good work by others allows me to see what works well from the beginning. Then I can take this well-done work of others and and change and implement it in my own way to understand how it works. So this course in the early half really reminded how to best learn to program languages and create web sites, in particular
The second half of the semester taught me that while it's sometimes best to just start working immediately, I need to remove myself from work on Drupal fairly frequently to think about the project on my own or discuss it with my partner. Without stopping my work, I get lost in Drupal and lose complete sight of what I'm actually trying to do. It also helps me immensely to plan fairly well before beginning work. Using this process I work much more efficiently and also do better work, although my removal from work and my early planning is far more necessary when I'm dealing with a system as complicated and often annoying as Drupal.
Also, I've now got enough experience with web design and with Drupal to begin work on my own ideas, and perhaps work on bigger projects this summer. And as I mentioned above, I now have a much better concept of how I can best do that work. So from this course I've got a good little bit of knowledge to work from and a really good way to learn much more and do larger projects.