Ariadne 2.7.0 has been released
Changes:
Major work (more about this below):
- All new user interface
- New and user-friendly installer
- New naming scheme on disk
- Ariadne templates with grants
- Muze Javascript library
- Changes in multi-language support
Improvements in:
- SVN support
- Library support
- Third party authentication
- PINP functionality
Bugfixes:
- Native language support
- TinyMCE editor handling
- lots of others minor bugfixes!
All new user interface
Based on the Yahoo User Interface and the Nuvola icon pack, the whole user interface driving Ariadne has been given a huge facelift - some screenshots have been published earlier, but this release contains all of the new eyecandy.

Not only does it look prettier, the new interface works under all major browsertypes (and even on some not-so-major browsers).
Friendly Installer
A new installation procedure has been added to Ariadne - instead of the old text-based installation, Ariadne now has a nice step-by-step installation wizard. It does a lot of the checks for you before the actual installation is run, so installing Ariadne will be faster and easier than ever.
Here is a preview:

Introduced new naming scheme in the disk templates
With the introduction of the new YUI interface we have begun using a new naming scheme for templates on disk. The most important change is the extension for core templates is now .php where it used to be .phtml. Another change is the prefixes of templates for the userinterface has changed from their menu location to their actual functionality. All templates having to do with the default explore view are now prefixed with explore. All dialogs are prefixed with dialog. System templates are, you guessed it, prefixed with system.
We will gradually convert the whole of Ariadne to this new naming scheme and will deprecate old templates that are renamed by keeping a wrapper in place for some time. (Time is relative and yet to be determined :)
Ariadne templates with grants
As a developer of pinp templates you can programmatically give a template extra grants. This is best illustrated by an example.
A common problem within Ariadne is allowing a public user to save data in an object but not allow editting of the whole object. Since there is only the 'edit' grant for an object you can't just set 'edit' for the public user because that would mean they could spawn the edit dialog and destroy any other data in that object. For instance you want to keep track of pageviews by saving them in $this->data->pageviews through a pinp template:
ppaget::save.pageview
<pinp>
$data->pageviews++;
save();
</pinp>
Without edit grants this would do nothing. Now to call this template with the extra edit grant the template dialog has an extra button 'Grant key' in the menu. This will spawn a dialog asking for the grants. Fill in 'edit' in our case, and press the generate button. This will give you a SHA1 key in the dialog, for instance: 'fd3d2216fea704652ea7176f9ab419c69b245710'.
This key can then be used in the following functions:
sgBegin($grants,$key)sgEnd()sgCall($grants, $key, $function, $args)
In the case of our simple example we would do:
ppage::view.html
<pinp>
// somewhere near the bottom ....
sgCall('edit', 'fd3d2216fea704652ea7176f9ab419c69b245710', 'save.pageview');
</pinp>
This would add the 'edit' grant for the current object (and its children) and run the template 'save.pageview', and destroy the grants again. Basically doing:
sgBegin('edit', 'fd3d2216fea704652ea7176f9ab419c69b245710');
call('save.pageview');
sgEnd();
A generated key is valid for the path its created on, and grants given by the key are added similar to group grants. This means if I give edit grant in my sgCall to 'save.pageview' any calls from that template to other templates on children of the object, or the object itself would be given that grant as well.
$AR->sgSalt to a string in your configuration. This is automatically and randomly done for you in the new installer. Without the $AR->sgSalt the sg* functions will not work.The Muze JavaScript library
Since Ariadne 2.7.0 we've added a simple JavaScript library to Ariadne. This library is very small and simple and only intended to make the JavaScript development for Ariadne's user interface a bit more manageable. We haven't opted to use one of the mainstream libraries, because we felt that they all are either too big and unwieldly or simply not good enough. We did not want to include the equivalent of a canon just to kill a bug.
NLS system overhaul
In the last few months we've fixed an impressive number of fairly low level bugs in the multi language system. This means that Ariadne now acts much more like we intended it to, but hasn't over the past few years. If you are building sites in multiple languages this means that this Ariadne update may break your site if you are not carefull. The most important change is that Ariadne no longer automatically lists all objects found with ls() or find() or parents() or even get(). Default behaviour is that if the current language is english (en) and the requested object is not available in that language, but it is language aware, this object will not be shown. This means that it is very easy for objects to go missing in your site. There are two solutions:
- edit the object and enter a name for the missing language
- add the following line to your calling template:
putvar('allnls', true);
In the past it was possible to get the above effect using:
putvar('nolangcheck', true);
This was a bug and no longer works. The language check is done just once per request and only on the main template, e.g. view.html. Once Ariadne starts to run a pinp template, there is no need to set this variable, since the check has been done already. The only exception is the config.ini template. If you add the above line to a config.ini template, Ariadne will never ask the user to select a different language in that part of the tree. An alternative solution is to redefine the user.languageselect.html template and redirect the browser to the default language.
The overhaul has some positive effects, it is now very easy to create a website in several languages and actually have different menu entries depending on the language. Just create a new object in e.g. dutch and english, set the configured default language to either dutch or english on this object and remove the name in the other language. Switching between languages will show or hide the menu entry.