net)
- Almost certainly others
Features
- Structure
Introduce categories for boards as an additional means organization. For larger installations, boards alone might be insufficient.
Categories
+ Boards
+ Threads
+ Thread pages
+ Posts
+ Attached files
- Pretty URLs
Apart from being just "pretty", URLs should express is-a, has-a or subset relations. Examples:
http://example.com/horde/agora/main/testboard/testthread/page/3#post-9365
Category titled "Main" --´ | | | | |
Board titled "Testboard" -------´ | | | |
Thread titled "Testthread" -----------------´ | | |
Show page 3 of the thread ----------------------------´---´ |
Jump directly to post #9365 ----------------------------------´
http://example.com/horde/agora/main/testboard/testthread/9365/edit
Category titled "Main" --´ | | | |
Board titled "Testboard" -------´ | | |
Thread titled "Testthread" -----------------´ | |
Post with the id 9365 ----------------------------´ |
(there is little sense in naming individual posts) |
Action: Edit post #9365 ---------------------------------´
http://example.com/horde/agora/recent/page/3
List threads that got ----´ | |
recent replies | |
Show page three ----------´---´
In order to create a named URL part, the following operations should be performed:
* Strip trailing or leading whitespaces
* Transform all letters into lower case
* Translate all letters not within a-z into their phonetic equivalents. Examples:
| Original Letter | ä | ß | ø | ð |
| --- | --- | --- | --- | --- |
| Equivalent | ae | ss | oe | th |
* Turn everything except a-z and 0-9 into a dash ("-")
* Merge multiple dashes into one
* In case of a collision: Append a dash followed by the number of colliding strings + 1 (should result into "foobar", "foobar-2", "foobar-3", etc.)
- Statistics
People *love* statistics. Providing them also seems to encourage user participation. In particular, provide a publicly available stats page featuring:
* Top n most active users (by post count)
* Top n most popular boards (by post count or by views)
* Top n most popular threads (by post count or by views)
* Last n threads (possibly drop this in favour of /recent)
* Generic stats like:
>>* Total number of threads
>>* Total number of posts
>>* Average number of posts per thread (bonus: Use this to determine "hot threads" instead of a fixed value)
>>* Average number of posts per day and per hour (seems to be bogus, but people like it. And it is cheap to generate: Take the first and devide by 24)
* Overview over the number of posts on each of the last n days
Possibly provide all of these via blocks as well.
- Syndication
Provide RSS and Atom feeds (c.f. Project/FeedEverything). In particular:
* Feed solely for threads (e.g. newly created threads will be announced in here, showing the content of the very first post in the feed entry.)
* Full content feed (All new posts go in here)
* Both again for specific boards (this is excellent for larger installations with high traffic)
- Moderation
Currently, there can be only one moderator per board. Add an extra table to allow for an n:n boards-to-moderators relation.
Also: Allow moderators to perform reversive actions in boards not assigned to them, tying them closer to their assigned boards.
- Linkback
Enable threads to accept ping- and trackbacks. In addition, catch refbacks.
- Plugin Infrastructure
Forums are often subjects to heavy modifications in an effort to appease users. A powerful plugin infrastructure might help to keep the installed software maintainable while allowing the desired modifications. The Habari Project has got a system that might be a good start for this.
BBCode
An advanced BBCode parser has been proposed a long time ago. Since then, a better one has been in the making. Features include:
- Inspect links regarding availability. Examples:
www.example.com
or
[url]http://www.example.com[/url]
would be rendered as
http://www.example.com
Unreachable links would be marked with rel="nofollow", so there won't be an impact on search engine rating:
http://www.example.com
Additionally, CSS selectors could be used to give users an immediate feedback on broken links.
- Inspect embedded images
Check if:
* an img tag is pointing to a reachable destination
* if the destination is actually an image (the rise of one-click-image-hosters seems to entice users to c&p the URLs of result pages rather than the URLs of the actual images)
* Eventually, retrieve the image dimensions.
As an example
[img]http://www.example.com/example.png[/img]
would be rendered as
- Enhanced quotes
The quote tag has got an optional parameter that can hold three different kinds of values: A quoted string, the id of a post or an URL. The last two will be using the cite-rel microformat in the rendered output. Example:
[quote=http://www.horde.org]
Welcome to the home of the Horde Project.
[/quote]
Will be rendered as:
Using a post id will in addition show the username of the original poster
Features touching other modules
- Ansel could be utilized to provide (more or less) one-click-hosting out of Agora, offering a convenient method to publish images within posts.
- Scry. Create polls via API calls and tie them into Agora in an 1:1 relation (meaning there will be at most one poll per thread)
- Trean. Keeping track of larger forums is hard. Allow users to bookmark threads via Trean. Preserve Agora's logical structure (categories, boards) when displaying them. Bonus: Provide an Atom/RSS feed for bookmarked threads only.
- Folks. Link usernames to profiles in Folks accordingly.
- Possibly provide comments functionality for Whups and Wicked
Code
- H3: http://cvs.horde.org/agora
- H4: http://git.horde.org/browse/agora/browsedir.php?f=agora%2F\&onb=master
Resources
- API Documentation
Back to the Project List