📄 object.php
字号:
<?php
// $Id: object.php 1286 2008-02-03 04:07:19Z phppp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <http://www.xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: Kazumi Ono (AKA onokazu) //
// URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //
// Project: The XOOPS Project //
// ------------------------------------------------------------------------- //
/**
* @package kernel
* @copyright copyright © 2000 XOOPS.org
*/
/**#@+
* Xoops object datatype
*
**/
define('XOBJ_DTYPE_TXTBOX', 1);
define('XOBJ_DTYPE_TXTAREA', 2);
define('XOBJ_DTYPE_INT', 3);
define('XOBJ_DTYPE_URL', 4);
define('XOBJ_DTYPE_EMAIL', 5);
define('XOBJ_DTYPE_ARRAY', 6);
define('XOBJ_DTYPE_OTHER', 7);
define('XOBJ_DTYPE_SOURCE', 8);
define('XOBJ_DTYPE_STIME', 9);
define('XOBJ_DTYPE_MTIME', 10);
define('XOBJ_DTYPE_LTIME', 11);
/**#@-*/
//include_once "xoopspluginloader.php";
/**
* Base class for all objects in the Xoops kernel (and beyond)
*
* @author Kazumi Ono (AKA onokazu)
* @copyright copyright © 2000 XOOPS.org
* @package kernel
**/
class XoopsObject
{
/**
* holds all variables(properties) of an object
*
* @var array
* @access protected
**/
var $vars = array();
/**
* variables cleaned for store in DB
*
* @var array
* @access protected
*/
var $cleanVars = array();
/**
* is it a newly created object?
*
* @var bool
* @access private
*/
var $_isNew = false;
/**
* has any of the values been modified?
*
* @var bool
* @access private
*/
var $_isDirty = false;
/**
* errors
*
* @var array
* @access private
*/
var $_errors = array();
/**
* additional filters registered dynamically by a child class object
*
* @access private
*/
var $_filters = array();
/**
* constructor
*
* normally, this is called from child classes only
* @access public
*/
function XoopsObject()
{
}
/**#@+
* used for new/clone objects
*
* @access public
*/
function setNew()
{
$this->_isNew = true;
}
function unsetNew()
{
$this->_isNew = false;
}
function isNew()
{
return $this->_isNew;
}
/**#@-*/
/**#@+
* mark modified objects as dirty
*
* used for modified objects only
* @access public
*/
function setDirty()
{
$this->_isDirty = true;
}
function unsetDirty()
{
$this->_isDirty = false;
}
function isDirty()
{
return $this->_isDirty;
}
/**#@-*/
/**
* initialize variables for the object
*
* @access public
* @param string $key
* @param int $data_type set to one of XOBJ_DTYPE_XXX constants (set to XOBJ_DTYPE_OTHER if no data type ckecking nor text sanitizing is required)
* @param mixed
* @param bool $required require html form input?
* @param int $maxlength for XOBJ_DTYPE_TXTBOX type only
* @param string $option does this data have any select options?
*/
function initVar($key, $data_type, $value = null, $required = false, $maxlength = null, $options = '')
{
$this->vars[$key] = array('value' => $value, 'required' => $required, 'data_type' => $data_type, 'maxlength' => $maxlength, 'changed' => false, 'options' => $options);
}
/**
* assign a value to a variable
*
* @access public
* @param string $key name of the variable to assign
* @param mixed $value value to assign
*/
function assignVar($key, $value)
{
if (isset($value) && isset($this->vars[$key])) {
$this->vars[$key]['value'] =& $value;
}
}
/**
* assign values to multiple variables in a batch
*
* @access private
* @param array $var_array associative array of values to assign
*/
function assignVars($var_arr)
{
foreach ($var_arr as $key => $value) {
$this->assignVar($key, $value);
}
}
/**
* assign a value to a variable
*
* @access public
* @param string $key name of the variable to assign
* @param mixed $value value to assign
* @param bool $not_gpc
*/
function setVar($key, $value, $not_gpc = false)
{
if (!empty($key) && isset($value) && isset($this->vars[$key])) {
$this->vars[$key]['value'] =& $value;
$this->vars[$key]['not_gpc'] = $not_gpc;
$this->vars[$key]['changed'] = true;
$this->setDirty();
}
}
/**
* assign values to multiple variables in a batch
*
* @access private
* @param array $var_arr associative array of values to assign
* @param bool $not_gpc
*/
function setVars($var_arr, $not_gpc = false)
{
foreach ($var_arr as $key => $value) {
$this->setVar($key, $value, $not_gpc);
}
}
/**
* Assign values to multiple variables in a batch
*
* Meant for a CGI contenxt:
* - prefixed CGI args are considered save
* - avoids polluting of namespace with CGI args
*
* @access private
* @param array $var_arr associative array of values to assign
* @param string $pref prefix (only keys starting with the prefix will be set)
*/
function setFormVars($var_arr=null, $pref='xo_', $not_gpc=false) {
$len = strlen($pref);
foreach ($var_arr as $key => $value) {
if ($pref == substr($key,0,$len)) {
$this->setVar(substr($key,$len), $value, $not_gpc);
}
}
}
/**
* returns all variables for the object
*
* @access public
* @return array associative array of key->value pairs
*/
function &getVars()
{
return $this->vars;
}
/**
* Returns the values of the specified variables
*
* @param mixed $keys An array containing the names of the keys to retrieve, or null to get all of them
* @param string $format Format to use (see getVar)
* @param int $maxDepth Maximum level of recursion to use if some vars are objects themselves
* @return array associative array of key->value pairs
*/
function getValues( $keys = null, $format = 's', $maxDepth = 1 ) {
if ( !isset( $keys ) ) {
$keys = array_keys( $this->vars );
}
$vars = array();
foreach ( $keys as $key ) {
if ( isset( $this->vars[$key] ) ) {
if ( is_object( $this->vars[$key] ) && is_a( $this->vars[$key], 'XoopsObject' ) ) {
if ( $maxDepth ) {
$vars[$key] = $this->vars[$key]->getValues( null, $format, $maxDepth - 1 );
}
} else {
$vars[$key] = $this->getVar( $key, $format );
}
}
}
return $vars;
}
/**
* returns a specific variable for the object in a proper format
*
* @access public
* @param string $key key of the object's variable to be returned
* @param string $format format to use for the output
* @return mixed formatted value of the variable
*/
function getVar($key, $format = 's')
{
$ret = $this->vars[$key]['value'];
switch ($this->vars[$key]['data_type']) {
case XOBJ_DTYPE_TXTBOX:
switch (strtolower($format)) {
case 's':
case 'show':
case 'e':
case 'edit':
$ts =& MyTextSanitizer::getInstance();
return $ts->htmlSpecialChars($ret);
break 1;
case 'p':
case 'preview':
case 'f':
case 'formpreview':
$ts =& MyTextSanitizer::getInstance();
return $ts->htmlSpecialChars($ts->stripSlashesGPC($ret));
break 1;
case 'n':
case 'none':
default:
break 1;
}
break;
case XOBJ_DTYPE_TXTAREA:
switch (strtolower($format)) {
case 's':
case 'show':
$ts =& MyTextSanitizer::getInstance();
$html = !empty($this->vars['dohtml']['value']) ? 1 : 0;
$xcode = (!isset($this->vars['doxcode']['value']) || $this->vars['doxcode']['value'] == 1) ? 1 : 0;
$smiley = (!isset($this->vars['dosmiley']['value']) || $this->vars['dosmiley']['value'] == 1) ? 1 : 0;
$image = (!isset($this->vars['doimage']['value']) || $this->vars['doimage']['value'] == 1) ? 1 : 0;
$br = (!isset($this->vars['dobr']['value']) || $this->vars['dobr']['value'] == 1) ? 1 : 0;
return $ts->displayTarea($ret, $html, $smiley, $xcode, $image, $br);
break 1;
case 'e':
case 'edit':
return htmlspecialchars($ret, ENT_QUOTES);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -