yacs 8.1: AJAX photo gallery, JSON-RPC, SEO, performance enhancements
Posted by Bernard on Feb. 2, (popular)
YACS is quite a flexible system to publish photos and images. It resizes uploaded files automatically, to ensure that they will fit nicely into page design. Thumbnail images are generated automatically as well. The new version of YACS adds a dynamic AJAX gallery, to enhance the experience of surfers navigating all these photos.
YACS version 8.1 leverages AJAX development efforts started during Summer 2007. The JSON-RPC specification has been implemented this month, since we believe AJAX developers are looking for such a standard approach of interacting with back-end services.
On the SEO side, this version also brings new mechanisms to expose user profile information, and page meta-information as well. Also, punctuation has less impact on nice URLs built dynamically.
Lastly, a lot of energy this month has been dedicated to performance enhancements. First, some limits set in the software have been modified to better adapt to growing YACS servers. And the backup/restore facility has been revisited to accomodate for huge databases. Second, YACS now allows for partial loading of libraries. Third, many back-end scripts have been profiled to remove as much fat as possible. At the end of the day, YACS 8.1 is taking care of computing and network resources it can use.
284 files have been modified or added since the previous release.
Here is a list of new or updated features coming with this release:

The AJAX library of YACS,
shared/yacs.js, has been considerably extended to make it more powerful. It now support modal boxes from within the pages, a nice alternative to intrusive and blocked popup windows.

This library also builds a dynamic slideshow when a surfer clicks on a thumbnail image. The scope of the slideshow is all images in the page, and transitions are nicely animated thanks to script.aculo.us effects.

Thumbnails are not linked to
images/view.php anymore, but to the actual images instead. This has been made necessary for the AJAX library to pre-fetch images in a slideshow. See
codes/codes.php
Yacs 8.1 features prototype version 1.6.0 and script.aculo.us version 8.0 in directory
included/browser
Some new AJAX capabilities are demonstrated in
tools/ajax.php
YACS now implements
the JSON-RPC specification, to allow for powerful AJAX requests to the server. See
services/json_rpc.php and
services/json_rpc_codec.php.

Please note that hooks written for RPC can be invoked using XML-RPC and with JSON-RPC with no modification. Look at
services/rpc_echo_hook.php for an example of such a thing.

The RPC client script
services/call.php is able to handle both XML-RPC and JSON-RPC protocols. Of course, the codec loader,
services/codec.php, has the same capability.

A new debugging option has been added to the configuration panel for web services (
services/configure.php), to ease the troubleshooting of RPC invocations.

JSON dynamic objects generated by YACS are always compressed if user agents allows for it. See
shared/global.php
Categories now supports layouts and overlays, thanks to a large contribution from
Tof. See
categories/view.php.

When editing a category, you can separately define layouts to use for sub-categories, attached sections, and for attached pages, as shown in
categories/edit.php.

Moreover, a new layout
categories/layout_categories_as_tabs.php has been offered by
Tof.

The backup script now relies on a temporary file to manage huge database content. Previously it used RAM and could be hit by memory limit of the server. See
control/backup.php
To restore a database you can also upload SQL statements to the directory
inbox/database. By being able to process files there,
control/backup.php helps to overcome limitations inherent to PHP uploads.

The processing engine for uploaded SQL statements has been moved to
shared/sql.php.

Many SQL requests for articles are now explicitly referring managed sections, so that editors can easily access content of sections they are taking care of. See
articles/articles.php
YACS now checks access rules before sending e-mail alerts to section subscribers. Secured pages are not exposed to non-authorized members anymore. See
sections/section.php and
shared/members.php
When computing category pages YACS now takes into account additional rights given to section editors. See
shared/members.php
YACS is now less sensitive to trackback spamming, thanks to tests added to
links/trackback.php both for interactive form and for remote invocation.

In order to reduce the burden yacs now allows for partial loading of the library. By setting adequate constants before the inclusion of
shared/global/php you can avoid one or all of the Model-View-Controller facets of the software. For example, in
error.php, YACS is instructed to not contact the database server with a
define('NO_MODEL_PRELOAD', TRUE); statement. See also
included/browser/minify.php for a script not using the YACS MVC features at all.

The skin is not loaded anymore in scripts that are not using it. This saves a lot of CPU cycles in AJAX back-end scripts.

Some frequently invoked scripts such as
users/heartbit.php have been profiled as well to remove as much fat as possible.
shared/values.php and
users/visits.php are not systematically loaded anymore, and scripts that require them have to include these libraries explicitly, like in
cron.php
Reference servers are now supposed to be installed at the top of the file system. URLs mentioning
/yacs/ have been turned to
/, like in the main help page, at
help.php.

When YACS is installed in a sub-directory, the software is expecting to be located in
/yacs/. This default value can now be changed by creating a text file with the name
yacs.home that indicates the installation directory. For example, if you install YACS in directory
/foo/, place a file
yacs.home in the directory
/ with the word "##foo##" at the beginning of the first line. See
index.php for more details.

The home page now supports the compact layout for articles as expected. See
index.php.

A new variable
$context['page_description'] is used to adapt the meta-tag
description to the actual content of each page. In articles, sections, categories and user profiles this is set to the value of the introduction field. For other pages, and on empty introduction field, the default parameter set in configuration panel applies. This way of using introduction fields as meta-data helps crawlers to do something clever out of published content. Thanks to
ThierryP for the idea.

The function
Articles::get_url() now accepts a fourth parameter to allow for nice links based on nick names. The idea, suggested by
ThierryP, is to use nick names instead of titles when possible, to re-enforce SEO pertinence of links generated by YACS. See
articles/articles.php.

The 'information' tab of user profiles is now populated synchronously by
users/view.php, instead of using an AJAX call. This to expose more of user data to web crawlers and search engines.

Punctuation marks have been removed from nice URLs, in
shared/global.php
Loading of internationalized strings (.po files) is now ok even at Blue Host. Check of the magic number has been hardened, as visible in
i18n/i18n.php.

In debugging mode, YACS now captures profiling information during script execution. See
shared/logger.php
Number of comments attached to articles is now correctly displayed in
sections/layout_sections_as_jive.php
When a member is assigned as a section editor, the section is now automatically added to member's watch list. See
sections/select.php and
users/select.php
The library
shared/utf8.php has been augmented to transcode from ISO8859 to UTF-8.

The system test page, at
control/test.php, now displays the current language for the surfer.

The query page now properly includes the e-mail address of the poster, if any, thanks to suggestion from
Claireformatrice. See
query.php to get more details.

The limit of pages sharing the same nick name has been moved from 20 to 100 in
articles/articles.php.

When looking at the content tree, YACS now looks at up to 200 sub-sections per section, instead of 21 previously. See
sections/sections.php
You can now receive up to 2000 comments in RSS feeds, instead of 200 previously. Quite useful to monitor lively threads remotely, isn't it? See
comments/feed.php
Text submitting in a thread will be appended to the previous comment, but only during 10 minutes. After this amount of time, the new contribution will be put in a separate comment. See
comments/thread.php.

When the script
articles/move.php moves a page to another section, it now adds a comment to the moved page to keep history of this change.

SQL requests have been made more compatible with most recent versions of mySQL engine.

The
control/chmod.php script now asks for confirmation before changing file permissions of all scripts.

A new script
control/jsmin.php has been added to compress Javascript files. This script requires a huge amount of memory to work properly, so it may not work at your specific site. You have been warned.

The Control Panel now features links to the
chmod and
jsmin scripts. See
control/index.php.

As an experimental feature, YACS now allows for the compression of reference files. The idea is to generate a compact set of running PHP scripts, with no comments, minimum spaces, etc. These files will be smaller than regular scripts and, therefore, require less memory when loaded by server engine. See
scripts/build.php
Another experimental script
sections/import.php has been added to create articles out of static HTML pages.