Current File : //opt/RZphp74/includes/CodeGen/PECL/Element/Ini.php |
<?php
/**
* Class describing a PHP ini directive within a PECL extension
*
* PHP versions 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category Tools and Utilities
* @package CodeGen
* @author Hartmut Holzgraefe <hartmut@php.net>
* @copyright 2005-2008 Hartmut Holzgraefe
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Ini.php,v 1.7 2006/10/12 13:11:25 hholzgra Exp $
* @link http://pear.php.net/package/CodeGen
*/
/**
* includes
*/
require_once "CodeGen/PECL/Element.php";
/**
* Class describing a PHP ini directive within a PECL extension
*
* @category Tools and Utilities
* @package CodeGen
* @author Hartmut Holzgraefe <hartmut@php.net>
* @copyright 2005-2008 Hartmut Holzgraefe
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version Release: @package_version@
* @link http://pear.php.net/package/CodeGen
*/
class CodeGen_PECL_Element_Ini
extends CodeGen_PECL_Element
{
// TODO this should be a subclass of CodeGen_PECL_Element_Global ?
/**
* Directive name
*
* @access private
* @var string
*/
protected $name;
/**
* Set method for name
*
* @access public
* @var string directive name
*/
function setName($name)
{
if (!self::isName($name)) {
return PEAR::raiseError("'$name' is not a valid php.ini directive name");
}
$this->name = $name;
return true;
}
/**
* Get method for name
*
* @access public
* @return string
*/
function getName()
{
return $this->name;
}
/**
* Directive data type
*
* @access private
* @var string
*/
protected $type;
/**
* Set method for data type
*
* @access public
* @param string one of bool, int, float, string
*/
function setType($type)
{
switch ($type) {
case "bool":
$this->cType = "zend_bool";
if (!$this->onupdate) {
$this->onupdate = "OnUpdateBool";
}
return true;
case "int":
$this->cType = "long";
if (!$this->onupdate) {
$this->onupdate = "OnUpdateLong";
}
return true;
case "float":
$this->cType = "double";
if (!$this->onupdate) {
$this->onupdate = "OnUpdateReal";
}
return true;
case "string":
$this->cType = "char *";
if (!$this->onupdate) {
$this->onupdate = "OnUpdateString";
}
return true;
default:
return PEAR::raiseError("'$this->type' not supported, only bool, int, float and string");
}
}
/**
* Get method for type
*
* @access public
* @return string
*/
function getType()
{
return $this->cType;
}
/**
* Directive default value
*
* @access private
* @var string
*/
protected $value;
/**
* Set method for default value
*
* @access public
* @param string default value
*/
function setValue($value)
{
// TODO checks
$this->value = $value;
return true;
}
/**
* Get method for default value
*
* @access public
* @return string
*/
function getValue()
{
return $this->value;
}
/**
* Directive description
*
* @access private
* @var string
*/
protected $desc;
/**
* Set method for directive description
*
* @access public
* @param string description
*/
function setDesc($desc)
{
$this->desc = $desc;
return true;
}
/**
* Get method for description
*
* @access public
* @return string
*/
function getDesc()
{
return $this->desc;
}
/**
* Directive access mode
*
* @access private
* @var string
*/
protected $access = "PHP_INI_ALL";
/**
* Set method for access mode
*
* @access private
* @param string access mode specification (system|perdir|user|all)
*/
function setAccess($access)
{
switch ($access) {
case "system":
$this->access = "PHP_INI_SYSTEM";
return true;
case "perdir":
$this->access = "PHP_INI_PERDIR";
return true;
case "user":
// TODO shouldn't this be ALL instead?
$this->access = "PHP_INI_USER";
return true;
case "all":
case "":
$this->access = "PHP_INI_ALL";
return true;
default:
return PEAR::raiseError("'$access' is not a valid access mode (system|perdir|user|all)");
}
}
/**
* Get method for access
*
* @access public
* @return string
*/
function getAccess()
{
return $this->access;
}
/**
* Directive OnUpdate handler
*
* @access private
* @var string
*/
protected $onupdate;
/**
* Set method for OnUpdate handler
*
* @access public
* @param string C function name
*/
function setOnUpdate($name)
{
if (!self::isName($name)) {
return PEAR::raiseError("'$name' is not a valid update function name");
}
$this->onupdate = $name;
return true;
}
/**
* Get method for update handler
*
* @access public
* @return string
*/
function getOnupdate()
{
return $this->onupdate;
}
/**
* Internal C type that stores the directives value
*
* @access private
* @var string
*/
protected $cType;
/**
* Constructor
*/
function __construct()
{
$this->setType("string");
}
/**
* Generate header for ini directive registration code
*
* @access private
* @param string extension basename
* @return string C code snippet
*/
static function cCodeHeader($name)
{
// this is a small incompatibility between ZE1 and ZE2 APIs
// "OnUpdateInt" was changed to "OnUpdateLong" as it actualy
// works on C type "long", not "int"
// the actual implementation didn't change so it is safe to
// just revert the name change using a cpp #define
// TODO: skip this for extensions that depend on PHP 5 anyway
$code = "
#ifndef ZEND_ENGINE_2
#define OnUpdateLong OnUpdateInt
#endif
";
$code .="PHP_INI_BEGIN()\n";
return $code;
}
/**
* Generate registration code for this directive
*
* @access private
* @param string extension basename
* @return string C code snippet
*/
function cCode($name)
{
$code = $this->ifConditionStart();
$code.= " STD_PHP_INI_ENTRY(\"$name.{$this->name}\", \"{$this->value}\", {$this->access}, {$this->onupdate}, {$this->name}, zend_{$name}_globals, {$name}_globals)\n";
$code.= $this->ifConditionEnd();
return $code;
}
/**
* Generate footer for ini directive registration code
*
* @access private
* @param string extension basename
* @return string C code snippet
*/
static function cCodeFooter($name)
{
return "PHP_INI_END()\n\n";
}
/**
* Generate header for ini directive documentation
*
* @access private
* @param string extension basename
* @return string DocBook XML snippet
*/
static function docHeader($name)
{
return
" <table>
<title>$name &ConfigureOptions;</title>
<tgroup cols='4'>
<thead>
<row>
<entry>&Name;</entry>
<entry>&Default;</entry>
<entry>&Changeable;</entry>
<entry>Changelog</entry>
</row>
</thead>
<tbody>
";
}
/**
* Generate documentation for ini directive documentation
*
* @access private
* @param string id basename for extension
* @return string DocBook XML snippet
*/
function docEntry($base)
{
return
" <row>
<entry>$this->name</entry>
<entry>$this->value</entry>
<entry>$this->access</entry>
<entry></entry>
</row>
";
}
/**
* Generate footer for ini directive documentation
*
* @access private
* @param string extension basename
* @return string DocBook XML snippet
*/
static function docFooter()
{
return
" </tbody>
</tgroup>
</table>
";
}
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode:nil
* End:
*/
?>