[[toc]] + Agora Agora is Horde's forum module, providing comments on user submitted content in e.g. ((Project/Ansel|Ansel)) or ((Project/Jonah|Jonah)). ++ Bugs List any tickets on http://bugs.horde.org/ that cover this issue or are relevant to it. ++ People * Stephan (webmaster <ät> dasourcerer <döt> net) * Almost certainly others ++ Features * Structure > Introduce categories for boards as an additional means organization. For larger installations, boards alone might be insufficient. <code> Categories + Boards + Threads + Thread pages + Posts + Attached files </code> * Pretty URLs > Apart from being just "pretty", URLs should express is-a, has-a or subset relations. Examples: <code> 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 ----------´---´ </code> > 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 [http://www.habariproject.org Habari Project] has got a system that might be a good start for this. +++ BBCode An advanced BBCode parser has been proposed a [http://bugs.horde.org/ticket/7285 long time ago]. Since then, a better one has been in the making. Features include: * Inspect links regarding availability. Examples: <code> www.example.com </code> > or <code> [url]http://www.example.com[/url] </code> > would be rendered as <code> <a href="http://www.example.com" title="Example Site" type="text/html" target="_blank">http://www.example.com</a> </code> > Unreachable links would be marked with ''rel="nofollow"'', so there won't be an impact on search engine rating: <code> <a href="http://www.example.com" rel="nofollow" target="_blank">http://www.example.com</a> </code> > 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 <code> [img]http://www.example.com/example.png[/img] </code> > would be rendered as <code> <img src="http://www.example.com/example.png" alt="http://www.example.com/example.png" title="example.png (65536 bytes)" width="640" height="480" /> </code> * 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 [http://microformats.org/wiki/cite-rel cite-rel microformat] in the rendered output. Example: <code> [quote=http://www.horde.org] Welcome to the home of the Horde Project. [/quote] </code> > Will be rendered as: <code> <div class="quote"> Quote <cite class="via" id="cite-ef58e3aa-af7f-45ba-a17d-5192ffe883b7"><a href="http://www.horde.org" type="text/html" target="_blank">The Horde Project</a></cite>: <blockquote cite="#cite-ef58e3aa-af7f-45ba-a17d-5192ffe883b7"> Welcome to the home of the Horde Project. </blockquote> </div> </code> > Using a post id will in addition show the username of the original poster +++ Features touching other modules * ((Project/Ansel|Ansel)) could be utilized to provide (more or less) one-click-hosting out of Agora, offering a convenient method to publish images within posts. * ((Project/Scry|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) * ((Project/Trean|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. * ((Project/Folks|Folks)). Link usernames to profiles in Folks accordingly. * Possibly provide comments functionality for ((Project/Whups|Whups)) and ((Project/Wicked|Wicked)) ++ Code * H3: http://cvs.horde.org/agora * H4: http://git.horde.org/browse/agora/browsedir.php?f=agora%2F&onb=master ++ Resources * [http://dev.horde.org/api/agora/ API Documentation] ---- Back to the ((Projects|Project List))