Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//*** Contains the Translation2_Admin base class** PHP versions 4 and 5** 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* @package Translation2* @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 305985 2010-12-05 22:55:33Z clockwerx $* @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* @package Translation2* @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*/class Translation2_Admin extends Translation2{// {{{ class vars// }}}// {{{ factory()/*** 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* @access public* @static*/function & factory($driver, $options = '', $params = array()){$tr = new Translation2_Admin;$tr->storage = Translation2_Admin::_storageFactory($driver, $options);if (PEAR::isError($tr->storage)) {return $tr->storage;}$tr->_setDefaultOptions();$tr->_parseOptions($params);$tr->storage->_parseOptions($params);return $tr;}// }}}// {{{ _storageFactory()/*** 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* @access private* @static*/function & _storageFactory($driver, $options = ''){if (is_object($driver)) {return $driver;}$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)) {return $err;}return $storage;}// }}}// {{{ _setDefaultOptions()/*** Set some default options** @return void* @access private*/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()* @access public*/function &getAdminDecorator($decorator){$decorator_path = 'Translation2/Admin/Decorator/'.$decorator.'.php';$decorator_class = 'Translation2_Admin_Decorator_'.$decorator;include_once $decorator_path;if (func_num_args() > 1) {$obj =& func_get_arg(1);$ret = new $decorator_class($obj);} else {$ret = new $decorator_class($this);}return $ret;}// }}}// {{{ addLang/*** 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',* 'name' => 'english',* '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)) {return $res;}$res = $this->storage->addLangToList($langData);if (PEAR::isError($res)) {return $res;}$this->storage->fetchLangs(); //update local cacheif ($this->options['autoCleanCache']) {$this->cleanCache();}return true;}// }}}// {{{ removeLang/*** 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){if (is_null($langID)) {//return error}$res = $this->storage->removeLang($langID, $force);if (PEAR::isError($res)) {return $res;}unset($this->storage->langs[$langID]);if ($this->options['autoCleanCache']) {$this->cleanCache();}return true;}// }}}// {{{ updateLang/*** Update the lang info in the langsAvail table** @param array $langData array containing language info** @return mixed true on success, PEAR_Error on failure*/function updateLang($langData){$result = $this->storage->updateLang($langData);if ($this->options['autoCleanCache']) {$this->cleanCache();}return $result;}// }}}// {{{ add/*** Add a new 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 add($stringID, $pageID, $stringArray){$result = $this->storage->add($stringID, $pageID, $stringArray);if ($this->options['autoCleanCache']) {$this->cleanCache();}return $result;}// }}}// {{{ update/*** 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']) {$this->cleanCache();}return $result;}// }}}// {{{ remove/*** 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']) {$this->cleanCache();}return $result;}// }}}// {{{ removePage/*** Remove all the strings in the given page/group** @param string $pageID page/group ID** @return mixed true on success, PEAR_Error on failure*/function removePage($pageID = null){$result = $this->storage->removePage($pageID);if ($this->options['autoCleanCache']) {$this->cleanCache();}return $result;}// }}}// {{{ getPageNames()/*** Get a list of all the pageIDs in any table.** @return array*/function getPageNames(){return $this->storage->getPageNames();}// }}}// {{{ cleanCache()/*** If you use the CacheLiteFunction decorator, you may want to invalidate* the cache after a change in the data base.** @return void*/function cleanCache(){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']);}// }}}}?>