AjaXplorer 4.2.0 released


Announcing the release of AjaXplorer 4.2.0. a major release, introducing tons of new features and bugfixes.

Many improvements were done in the field of users management and configurations, allowing better connectivity with third party directories like LDAP/AD, and better performances for cloud deployment and/or huge user base. On the filesystem-side,  recursive listing and filehashing make the application ready for desktop synchronisation clients (an implementation is actually already on-the-road). New plugin for automagically mounting a filesystem (in the sense of linux “mount”) at login, a user quota implementation (only disk usage yet), an embedded tasks scheduler, etc… Plus a new automated build process (using phing)  that should ease the production of linux packages (rpm/deb, still working on this).

Please read the whole changelog below! It also includes the 4.1.0 changes that were in the “dev” channel.

And last but not least, announcing the birth of Abstrium, a company dedicated to provide enterprise-grade services and support for AjaXplorer! Stay tuned, more to come very soon.

  • License : Affero GPL
  • Copyright : Charles du Jeu 2012
  • Version number : 4.2.0
  • Download : ajaxplorer-core-4.2.0.zip or ajaxplorer-core-4.2.0.tar.gz
  • Install instructions : see the 4-steps installation guide
  • Demo : https://pyd.io/demo
  • Contributors : Cyril Russo, Carl Chan, Alexandre Champalle, Daniel Berteaud, Thomas Oettli, Michele Beltrame, David Robinson

Upgrade instruction

  • From 4.0.4  : use the automatic upgrade mechanism.
  • From 4.1.0 : also, but make sure you are using the “Development” channel. You’ll be able to switch back to stable channel after the upgrade.
  • In both cases, the upgrade will try to force the overwrite of conf/bootstrap_context.php. If not possible, you may be unable to relaunch after the upgrade, simply manually update the bootstrap_context.php file to the newest version.



  • Auth.multi driver : Implement an alternative MODE, instead of proposing the various drivers to the user, consider one is the master (typically ldap) and the other is the local alternative (typically serial) to allow creating shared users.
  • Action.scheduler : a generic CRON-LIKE scheduler triggering AjaXplorer actions in background. Only one call needs to be added to the cron to trigger the scheduler
  • Share engine : Add an optional Downloads Limit on generated links to auto-expire after x downloads.
  • Default repository : Add an option for forcing default repository at login.
  • Quota implementation : New hook before_create / Pass new size when possible in before_change and before_create
  • meta.file_hasher : Store md5_mtime to make sure some changes were not missed, recompute if not sure
  • meta.mount : Automount any filesystem (Linux only) automatically
  • log.syslog : Send logs to System Logger (Linux only)
  • Core.auth / Core.conf : New mechanisms to list users in a paginated way, to avoid overflowing GUI. Implemented by auth.sql, auth.conf and auth.ldap for now on.
  • ————————-  4.1.0 ———————–
  • PHP 5.4 Support : Call-time pass by reference are deprecated, replace static calls to DOMDocument::loadXML


  • XSD Schema : missing dynamicItems element definition, missing user_param element
  • Encoding : XmlEntities before sending in triggerBgAction.
  • Encoding : Preg_quote before using as regexp
  • New Cache : I18n Messages caching mechanism, one file cache per language
  • Automated build : exclude some under-used or very specific plugins from the standard build : access.demo, access.jsapi, access.wms, auth.cmsms, auth.phpbb, editor.codepress (deprecated), log.syslog
  • Replication : Ability to replicate groups of fields in the standard form kit.
  • Config files : New (optional) way of encoding serial files using JSON formatting. We may switch massively to this format, as it’s much more easy to hack manually (but would have to check performances before).
  • Refactoring : Deport login/logout and related actions inside AbstractAuthDriver instead of root index.php file
  • Autoloader : search interfaces defined in core plugins
  • Refactoring : New core.metastore plugin, defining the MetaStoreProvider interface & the AJXP_METADATA_ constants
  • Performances : New skipCheck parameter added to AJXP_Utils::loadSerialFile
  • Distributed Env : New variable AJXP_SHARED_CACHE_DIR / Shared cache can be a stream, which have implications at many levels
  • ————————-  4.1.0 ———————–
  • Cross-Repo copy : Two successive node expand changed the current repository to the destination repository (switch back replaced twice).
  • Core : Fix mkdir() call for the cmd_outputs folder
  • Performance : cache slow processing data when possible (registered extensions, messages, etc), either in memory (static var) or in cache files.


  • IE10 Ready : Prototypejs & Css fixes for forthcoming IE10 version (does not support filter: anymore)
  • Typo : Error prevented the updateIcon in xTree
  • Diaporama : Do not display splitter and info panel if no toggleButton action is passed
  • IFRAME uploader : use closeValidation instead of closeFunction to avoid override
  • Error catching : Catch error 500
  • Refactoring : ParseXMLMessage Return false on error
  • Refactoring : Set action_instance_ID on buttons referring to actions, to dynamically update their label if necessary.
  • Performances : ActivityMonitor sends get_action=ping to avoid triggering default action.
  • HeaderResizer : decorellate from table_rows_container, fix columns width, fix typo that was preventing Opera from working.
  • Refactoring : Deep FilesList refactoring to attach a different data model
  • User Experience : Repository configs Update the Meta Sources tab for better UX.
  • Bug : Avoid shadower error / Do not call activate() on accordion if already showing.
  • ConfigEditor : Do not close window on repository creation error / Form Manager : use tab to navigate inside the accordion.
  • ————————-  4.1.0 ———————–
  • Client Session timer: hook to “ajaxplorer:longtask_xxx” events to avoid disconnecting during very long task (namely uploads for the moment)
  • Remember me : reported from 4.0.3 branch
  • Tpl Logo image : Wrong content type header
  • Massive deletion : POST instead of GET
  • Error Message : Restyle message box (max height), fixed broken carriage return
  • JSPacker : rtrim windows line feed


  • Actions : Group new user / new role actions under a same submenu.
  • Hooks : New hook for adding section to the Settings console from other plugins
  • UX : User pagination if auth driver supports it in access.ajxp_conf
  • Bug : In the few cases where the user now can upgrade its own rights, make sure to load() it before, if an admin has changed the rights during the session.
  • User case : Disable case sensitivity (in core.auth config)
  • Auth Schemes : Auth driver can provide AuthSchemes (displayed in the admin interface). Should be used by conf.serial to differentiate the storages by folder and avoid using ugly ID_SEPARATOR.
  • Performances : Implement __wakeup() function on Ajxp_user to make sure to clear the registerForSave array.
  • Performances : [conf.serial] Delegate the user files saving to the __destruct method for better performances.
  • Performances : New FAST_CHECKS parameter for conf and auth serial plugins


  • Performances : Performance improvement, applyActions() instead of directly calling driver methods, so that pre/post process are applied.
  • Refactoring : Detect if there is a metastore, and use it for storing webdav properties. Should implement locking.
  • Refactoring : Check interface AjxpWebdavProvider instead of hardcoded access types
  • Bug : Fix repository alias / id problems


  • access.fs : Preconfigure a folder whose content will be automatically copied to the repository at first load.
  • access.fs : optional arguments to use rename as move
  • access.fs : Upload : pass accented characters in the urlencoded_filename POST parameter
  • access.ftp : Fix FTP listing when multiple groups
  • access.ftp : Fix autorenaming on upload not working.
  • editor.browser : Classic header fixes for IE8
  • editor.imagick : Unoconv integration for both previews of office files and indexation of their textual content.
  • editor.imagick : Autodetection of thumbs ratios for pdf thumbnails.
  • editor.imagick : Threshold for generating all pdf pages at onces or on-demand.
  • index.lucene : Lucene and office documents : silently tries to index, avoid throwing errors
  • editor.video : Fix m4v support
  • action.updater : Connect to update site through a proxy.
  • http.downloader : Trigger before_create before downloading!
  • http.downloader : Fix progress bar for remote downloads
  • shorten.bitly : Re-display shorten form when showing shared link url
  • editor.pixlr : Add IfModule instruction in htaccess otherwise it can prevent from accessing the content of the folder.
  • meta.filehasher : rsync actions (requires PECL rsync extension)
  • uploader.jumploader : skip pre/post processors if xhr_uploader passed in the url
  • auth.sql : Override the clearRights() method, changes must be saved directly in the DB.
  • auth.sql : Fix double bookmarks loading
  • Jumploader : use uploader passed as argument, may solve FF random problems?
  • action.share : Change share action rights : allow readonly users to share links (but not folders).
  • action.share : Do not allow re-creating a temporary user
  • action.share : Handle SessionCredentials case along with folder sharing by saving an encoded version of the credentials in the options.
  • meta.svn : Usability & improvements, more documents oriented than source control. To be generalized. Todo : how to grab old versions metadata?
  • meta.svn : pass the LC_ALL environnent variable to proc_open if AJXP_LOCALE is defined
  • meta.svn : pass array if multiple arguments (will be shell escaped) / Auto-commit metafile changes
  • unoconv : How to guess the encoding of pdfs of docs for extracting text? / TODO : report documentation
  • ————————-  4.1.0 ———————–
  • Metadata loading : Set a “hidden” metadata to a passed node
  • Access.fs : handle symlinks more properly
  • Access.fs : Filter files and folders when creating Zips, using PCLZIP_CB_PRE_ADD callback
  • Access.smb : Clean URL everywhere, pass the Locale as environnement variable when defined
  • Access.fs : Big typo error making the “nodeName” resetting useless
  • Access.smb : override makeZip and allow its usage (by plugin configuration), as it can be an option when on a very fast network connection.
  • Access.smb : fix “+” in folder name, use rawurldecode() instead of urldecode()
  • Open_basedir : Multiple files downloads broken, do not “patch path” in readFile function when on the realFileSystem.
  • Core.conf : Add a $context parameter to the user save() method, to avoid “over saving” data : if context is “superuser”, save preferences and rights, where as in context “user” save only preferences.
  • Core.uploader : should solve the problems of setting the upload limit.
  • WebDAV Server : detect MiniRedir user agent
  • Synchro : Recursive listing implementation & hooks applyCondition for better performances. Testing synchro tool
  • Synchro : Various tricks to trigger the metadata updates from outside, and webdav optims
  • Conf.sql : Auto detect “objects” preferences and serialize them in the DB, adding the $phpserial$ prefix. Fixes AJXP_WEBDAV_DATA of users, as well as PLUGINS_DATA used by notify.phpmail
  • Editor.diaporama : fix the “navigator” when the is a marginTop on the thumbnail, encodeURIComponent before triggering download action, otherwise breaks (e.g. & in file name)
  • Editor.zoho : as reported by zoho support team, the Secret Key is in fact deprecated and no more necessary, apply node.before_change hook before saving
  • Editor.pixlr : apply node.before_change hook before saving
  • Editor.imagick : do not inverse slashes if not necessary!
  • Editor.video : Pass alternate videos versions in the metadata, and set them as HTML5 video source (require an external pre-encoding)
  • Index.lucene : ignore case for determining content-indexed extensions
  • Uploader.* : trigger events ajaxplorer:longtask_starting / ajaxplorer:longtask_finished
  • Auth.ftp : Force call to getServerFeatures() when coming from the login operation.
  • Auth.ldap : Jon Peck ldap contrib : ability to configure DN as an array and iterate through them
  • Meta.svn : manually set a library path to access the SVN commands.
  • Meta.filehasher : new utility for accelerating synchronization, compute and store file md5 in metadata (if metastore active) and delete on file change.
  • Action.powerfs : Fix zip delegation : do not sleep for one second, change the download mechanism, and place the zip inside the temporary folder, otherwise it makes problems for read-only folders. Allow compression when using powerfs in read mode, Todo : exclude hidden files from zip operation using an exclude list,
  • Action.share : AjxpSharedDriver avoid error on empty glob(), fix typo error


  • Test PHPCLI : Catch Errors on popen() to avoid IIS crash.
  • testPHPSession : Skip test if save_handler is not file based
  • CLI : Change the way the CLI is detected.


  • New config file : New optional config file to set the configs that must be set before anything else : LOCALE, TMP_DIR, INI_SET
  • Test.gpc : Totally commenting magic_quote_gpc breaks JSON if magic_quote is active!
  • Test.writeability : Call is_dir silently to avoid error triggering and let the diagnostic tool run
  • Tests failed : Suggest changes (in the new bootstrap_conf.php file)
  • Documentation : Plugin Info XML, ability to browse many plugins folders (experimental)
  • Security : Reported from 4.0.4 branch