Source for file Admin.php
Documentation is available at Admin.php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
* Contains the Translation2_Admin base class
* LICENSE: Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* @category Internationalization
* @author Lorenzo Alberton <l.alberton@quipo.it>
* @copyright 2004-2005 Lorenzo Alberton
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @version CVS: $Id: Admin.php,v 1.25 2008/05/03 09:17:59 quipo Exp $
* @link http://pear.php.net/package/Translation2
* require Translation2 base class
require_once 'Translation2.php';
* Administration utilities for translation string management
* Set of methods to easily add/remove languages and strings,
* with a common API for all the containers.
* @category Internationalization
* @author Lorenzo Alberton <l.alberton@quipo.it>
* @copyright 2004-2005 Lorenzo Alberton
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
* @link http://pear.php.net/package/Translation2
* Return a Translation2_Admin instance already initialized
* @param string $driver Type of the storage driver
* @param mixed $options Additional options for the storage driver
* (example: if you are using DB as the storage
* driver, you have to pass the DSN string here)
* @param array $params Array of parameters for the adapter class
* (i.e. you can set here the mappings between your
* table/field names and the ones used by this class)
* @return object Translation2 instance or PEAR_Error on failure
function & factory($driver, $options = '', $params = array ())
if (PEAR ::isError ($tr->storage )) {
$tr->_setDefaultOptions ();
$tr->_parseOptions ($params);
$tr->storage ->_parseOptions ($params);
* Return a storage driver based on $driver and $options
* Override Translation2::_storageFactory()
* @param string $driver Type of storage class to return
* @param string $options Optional parameters for the storage class
* @return object Object Storage object
function & _storageFactory ($driver, $options = '')
$storage_path = 'Translation2/Admin/Container/'. strtolower($driver). '.php';
$storage_class = 'Translation2_Admin_Container_'. strtolower($driver);
include_once $storage_path;
$storage = new $storage_class;
$err = $storage->init ($options);
if (PEAR ::isError ($err)) {
// {{{ _setDefaultOptions()
* Set some default options
function _setDefaultOptions ()
$this->options['autoCleanCache'] = false;
$this->options['cacheOptions'] = array ('defaultGroup' => 'Translation2');
parent ::_setDefaultOptions ();
// {{{ getAdminDecorator()
* Return an instance of an admin decorator
* @param string $decorator Name of the decorator
* @return object Decorator object reference
* @see Translation2::getDecorator()
$decorator_path = 'Translation2/Admin/Decorator/'. $decorator. '.php';
$decorator_class = 'Translation2_Admin_Decorator_'. $decorator;
include_once $decorator_path;
$ret = new $decorator_class($obj);
$ret = new $decorator_class($this);
* Prepare the storage container for a new lang.
* If the langsAvail table doesn't exist yet, it is created.
* @param array $langData array('lang_id' => 'en',
* 'table_name' => 'i18n',
* 'meta' => 'some meta info',
* 'error_text' => 'not available');
* @param array $options array('charset' => 'utf8',
* 'collation' => 'utf8_general_ci');
* @return mixed true on success, PEAR_Error on failure
function addLang($langData, $options = array ())
$res = $this->storage->addLang ($langData, $options);
if (PEAR ::isError ($res)) {
$res = $this->storage->addLangToList ($langData);
if (PEAR ::isError ($res)) {
$this->storage->fetchLangs (); //update local cache
if ($this->options['autoCleanCache']) {
* Remove the lang from the langsAvail table and drop the strings table.
* If the strings table holds other langs and $force==false, then
* only the lang column is dropped. If $force==true the whole
* table is dropped without any check
* @param string $langID language ID
* @param boolean $force remove the language info without further checks
* @return mixed true on success, PEAR_Error on failure
function removeLang($langID = null , $force = false )
$res = $this->storage->removeLang ($langID, $force);
if (PEAR ::isError ($res)) {
unset ($this->storage->langs [$langID]);
if ($this->options['autoCleanCache']) {
* Update the lang info in the langsAvail table
* @param array $langData array containing language info
* @return mixed true on success, PEAR_Error on failure
$result = $this->storage->updateLang ($langData);
if ($this->options['autoCleanCache']) {
* @param string $stringID string ID
* @param string $pageID page/group ID
* @param array $stringArray Associative array with string translations.
* Sample format: array('en' => 'sample', 'it' => 'esempio')
* @return mixed true on success, PEAR_Error on failure
function add($stringID, $pageID, $stringArray)
$result = $this->storage->add ($stringID, $pageID, $stringArray);
if ($this->options['autoCleanCache']) {
* Update an existing translation
* @param string $stringID string ID
* @param string $pageID page/group ID
* @param array $stringArray Associative array with string translations.
* Sample format: array('en' => 'sample', 'it' => 'esempio')
* @return mixed true on success, PEAR_Error on failure
function update($stringID, $pageID, $stringArray)
$result = $this->storage->update ($stringID, $pageID, $stringArray);
if ($this->options['autoCleanCache']) {
* Remove a translated string
* @param string $stringID string ID
* @param string $pageID page/group ID
* @return mixed true on success, PEAR_Error on failure
* @todo add a third $langs option, to conditionally remove only the langs specified
function remove($stringID, $pageID = null )
$result = $this->storage->remove ($stringID, $pageID);
if ($this->options['autoCleanCache']) {
* Remove all the strings in the given page/group
* @param string $pageID page/group ID
* @return mixed true on success, PEAR_Error on failure
$result = $this->storage->removePage ($pageID);
if ($this->options['autoCleanCache']) {
* Get a list of all the pageIDs in any table.
return $this->storage->getPageNames ();
* If you use the CacheLiteFunction decorator, you may want to invalidate
* the cache after a change in the data base.
static $cacheLiteFunction = null;
if (is_null ($cacheLiteFunction)) {
include_once 'Cache/Lite/Function.php';
$cacheLiteFunction = new Cache_Lite_Function ($this->options['cacheOptions']);
$cacheLiteFunction->clean ($this->options['cacheOptions']['defaultGroup']);
Documentation generated on Tue, 06 May 2008 06:00:12 -0400 by phpDocumentor 1.4.0. PEAR Logo Copyright © PHP Group 2004.
|