Gossamer Forum
Home : Gossamer Threads Inc. : Announcements :

Gossamer Links 3.0.0 Released!

Quote Reply
Gossamer Links 3.0.0 Released!

We're pleased to announce the release of Gossamer Links 3.0.0. Due to rampant abuse of our licensing terms over the past years, we've implemented a system to track installations in an effort to abolish illegal installations of our programs. If you see the error message:

Server returned error code: 203 - Admin path does not match path stored on update server; reset possible

You can reset the admin path stored on the Gossamer Threads update server a limited number of times from the licensed download area.

It means that the install path stored in our database for your installation is not the same as the install path of the application you're currently working on. You have the option of changing the install path to your desired setting a limited number of times. Please note that for each license of our programs, only one installation of the program is allowed.

Bolded items are things which have changed since the RC (2.99.1).

New Features:
  • New Template Set
    • The new luna template set is XHTML 1.0 Transitional compliant and extensively uses CSS.
    • All the HTML generation in the code has been changed to be done in the templates, allowing for maximum flexibility.
    • With the style removed from the HTML, it should allow for much easier template upgrades.
  • Gossamer Update
    • An automatic update system that downloads updated files from our server, auto-detects current version and updates only the files that need to be updated. You'll never have to run install.cgi again for an update, and never have to upload files manually for posted Official Bug Fixes.
  • Bookmarks
    • Allow users to bookmark links from the directory and to share bookmark collections publicly, or store them in private folders.
  • Advanced Newsletter
    • Users may now subscribe to selected subcategories, rather than simply the entire directory.
  • Category directory naming
    • Now fully configurable, including the ability to limit long category names, better optimised for search engines.
  • Detailed Page naming
    • Naming and location of detailed page is now also configurable, including optional support for putting detailed pages inside their respective category directories.
  • Search Logger
    • Log searches made, the number of results and the average time the search took.
  • Search Highlighting
    • Highlight search terms contained in the search results.
    • This option replaces the search_bold option.
  • Framed Redirects
    • New option allowing links to be loaded in a frame so the user can easily go back to the Gossamer Links installation or perform actions on the link (review, bookmark, etc).
  • Link Validation
    • New option to check that links' URL are valid before allowing them to be submitted.
  • View Reviews by ID
    • By passing ReviewID into review.cgi, you may now view individual reviews.
  • Improved support for adding links into multiple categories
    • By changing the html select element to allow multiple selections, you can easily allow users to select multiple categories to add their links to.
    • The templates and e-mail templates have been updated to handle the multiple templates properly.
    • Note that payments still do not support multiple categories.
  • New paging code
    • The new paging code allows you to easily change the look and feel of the paging toolbar.
    • There are 3 different styles to choose from, and the code can easily be overridden to generate your own paging toolbars.
  • Delete/Modify/Validate reviews from the browser (admin and editor sides)
  • Added support for PayPal's sandbox testing environment
  • New theme capability - allows you to create a single template set with multiple style sheets
  • Changed "Random Link" to go to the detailed page of the link if detailed pages are enabled
  • Reskinned the installer
  • Updated the luna template set to allow for 3, 2, or 1 column layouts
  • Removed db_static_url and added build_static_url and build_static_path - the new location for static files such as javascript, css, and images
  • Added a rebuild Category tree admin option - note that you must rebuild the Category tree after an import (do it before repairing the tables and rebuilding the search)
  • Added ability to search reviews by passing in the keyword argument
  • For statically built sites, added javascript to rewrite the Login link to be Logout if the user is logged in

Bug Fixes:
  • Jump code was incorrectly using REMOTE_HOST instead of REMOTE_ADDR for hits logging.
  • Expiry notify was sending notices for links awaiting payment.
  • Only the owner of a link may now make payments towards a link.
  • Fixed various small payment bugs.
  • When a link is validated, the add/mod dates are now set to the current date.
  • Fix fatal error when users are deleted before queued mass emails are sent.
  • Fixed Safari javascript bug with category browser
  • Reset $USER when a user has logged out
  • Changed e-mails to not rely on users using a fixed font (proportional fonts broke indenting)
  • Saving globals only saves modified entries to local/globals.txt
  • Verify problem links not working
  • Fix staggered build total time statistic

2.99.* Bug Fixes (these only affected 2.99.*):
  • Fixed admin language issues (this also broke static page building)
  • E-mails were being sent out blank (compress option was breaking it)
  • Fixed SearchLogger upgrade bug
  • Fixed Timestmp bug when performing a 'Build Changed'
  • Various upgrade bugs
  • Static mode search paging fixed
  • Don't show the browser template as a choice for the default template set
  • Forgot to add in framed redirect option to admin
  • Fixed the sidebar pushing down content CSS issue
  • Fixed the IE text/textarea resizing CSS issue
  • Various other CSS issues
  • Fixed error on submitting an anonymous review
  • Fix total subscriber count
  • Various search logger fixes (sorting, date, etc)
  • Fixed a bug in GT::Plugins causing hooks to return the wrong value.

  • Other than the exception below, the Links SQL 2.x templates and plugins should still be compatible with Gossamer Links 3.x.
  • If you are still using Links SQL 2.x templates, then there are two changes in Gossamer Links 3.x that break compatibility:
    • In the review_search_results.html template, you must change the <%user%> tag to <%username%>
    • The newsletter code has been rewritten, so you need to create the newsletter templates. A 'global newsletter' mode has been added which makes the newsletter function like in Links SQL 2.x. If you use this mode, then all you need to do is create a newsletter_global.html template.
    • search_bold has been replaced with search_highlight, so to get this to work on older templates, the appropriate CSS needs to be added (see luna_core.css, .searchhl-* rules) and the search_results.html and link.html templates need to be changed to use Links::Utils::highlight (see the luna template set).
  • The PHP front-end is no longer supported due to miniscule usage by client base.

Template Notes:
There have been many changes in the design and usability with the creation of the luna template. Here is a list of some things that have been added:
  • 'isPaidLink' has been added to available tags when looping through links. This tag is set if the current link is a paid link (as opposed to a free one).
  • The 't' tag has been added to always exist as the current template set.
  • in, config, user hashes have been added.
    • 'in' is now available as the GT::CGI input parameter, allowing for usage such as: <%in.test%> to access $IN->param('test'). Those programs that currently pass through all input parameters as normal template variables will continue to do so for now, but may be removed in favour of in.paramname at some point in the future.
    • likewise, 'config' is now available to access the programs' $CFG object. For example, <%config.admin_root_path%> would access $CFG->{admin_root_path}.
    • lastly, 'user' contains the currently logged in user.

GT::Template Changes:
  • The GT::Template syntax help is now found in the GT::Template::Tutorial documentation - the GT::Template documentation now only includes information on invoking GT::Template
  • 'set' directives may now contain an operator on the right hand side, for example: <%set foo = $bar * 3%>, <%set foo += $bar * 3%>
  • New '||=' (or-equals) and '&&=' (and-equals) set directives available. Old: <%ifnot foo%><%set foo = 3%><%endif%> New: <%set foo ||= 3%>
  • Template includes may now include files based on template variables: <%include $variable%>
  • Individual hash/array reference values may be accessed using "a.b" notation:
    • <%var1.foo%> accesses tags->{var1}->{foo}
    • <%var2.3%> accesses tags->{var2}->[3]
    • <%var2.length%> is a special tag that returns the number of elements in the 'var2' array reference
  • Filters (such as escape_html, nbsp, uc, etc.) may now be nested, such as: <%nbsp unescape_html variable%>
  • Filters may be used within 'set' statements: <%set var2 = nbsp unescape_html var1%>
  • Note that previous versions of GT::Template incorrectly html unescaped input to escape_js. If your code is expecting this behaviour, you need to change your template code to <%escape_js unescape_html myvariable%>
  • Whitespace to the left and/or right of tags can be removed by starting and/or ending the tag with a '~', such as: <%~foo~%> which would display the 'foo' variable but not display any spacing before and after the tag.
  • GT::Template provides a new, much improved way of accessing tags from plugins, globals, etc. You may now call GT::Template->vars to access a GT::Template::Vars object that gives you a transparent way of accessing and retrieving template tag values.
    • my $vars = GT::Template->vars; gives you a new object.
    • $vars->{abc} accesses the 'abc' tag. Unlike the hash reference returned by GT::Template->tags, this will alway be a string, and any HTML-escaping that would apply (or not apply) inside the template will apply to the value retrieved. No more worrying about a value retrieved being a scalar reference, or being escape or not escaped.
    • $vars->{abc} = "value"; sets a value. HTML-escaping will apply if the tag is accessed again - either inside a template or by retrieving the value of $vars->{abc}. If the value is already HTML-escaped, or should not be escaped, set the variable to a reference: $vars->{abc} = \"value";
    • $vars->{"abc.def"} accesses the same value it would in a template - that is, it accesses the "def" key of the "abc" hash reference. Likewise for $vars->{"def.length"}, which would return the length of the "def" array reference/loop.
    • GT::Template->vars is now recommended instead of GT::Template->tags in all cases. GT::Template->tags still works as it did before.
    • See the GT::Template::Vars documentation included with Gossamer Links.
  • To assist in template debugging, a new <%DUMP%> tag has been added. This is essentially the same as the old GT::Template::dump, except that it can take a variable as an argument. When a variable is passed in, DUMP will attempt to dump the variable's structure. Without any arguments, DUMP will perform a full template variable dump.
  • Added support for inheriting from multiple template sets. You can use this by setting the value of the inheritance key in .tplinfo to an array reference of directories.
  • Added the ability to do: <%loop 4 .. 10%>, <%loop 4 .. $val%>, <%loop $val .. 8%>, <%loop 4 to 10%>, etc.
  • Added quoted string interpolation: <%set tag = "a $tag2 b"%>

Developer Notes:
There have been some internal changes in Gossamer Links that any plugin developers should be aware of. They are listed below:
  • Categories have been modified to use GT::SQL::Tree. This brings various speedups to Gossamer Links in areas related to category manipulation. For advanced uses, the tree can be used by obtaining a GT::SQL::Tree object - see the documentation for that module for more details. An example of the tree usage can be found in the added Newsletter code.
  • $GT::SQL::PREFIX should not be used, as it is not guaranteed to be correct in all cases. Instead you should use $DB->prefix() to determine the table prefix.
  • A few helper functions have been added to Links.pm:
    • Links::send_email makes sending emails in plugins easier.
    • Links::limit_offset simplifies proper checking of mh and nh.
    • Links::template_set returns the current, valid, user template set.

Gossamer Threads Development Team

Last edited by:

GT Dev Team: Jul 31, 2006, 12:58 PM