⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ktentity.inc.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
        $ret = $oObject->create();        if (PEAR::isError($ret)) {            return $ret;        }        if ($ret === false) {            return PEAR::raiseError(sprintf(_kt("create for class %s failed"), $sClassName));        }        $meth = array($sClassName, 'get');        return call_user_func($meth, $oObject->getId());    }    function updateFromArray ($sClassName, $iId, $aOptions) {        $oObject = new $ClassName;        $ret = $oObject->load($iId);        if (PEAR::isError($ret)) {            return $ret;        }        $ret = $this->loadFromArray($aOptions);        if (PEAR::isError($ret)) {            return $ret;        }        $ret = $this->update();        if (PEAR::isError($ret)) {            return $ret;        }        if ($ret === false) {            return PEAR::raiseError(sprintf(_kt("update for class %s failed"), $sClassName));        }        return true;    }    function &loadFromArray ($sClassName, $aArray, $aOptions = null) {        $oObject =new $ClassName;        $ret = $oObject->loadFromArray($aArray);        if (PEAR::isError($ret)) {            return $ret;        }        return $oObject;    }    function &loadFromArrayMulti($sClassName, $aMultiArray, $aOptions = null) {        $aRet = array();        foreach ($aMultiArray as $aArray) {            $oObject =new $sClassName;            $ret = $oObject->loadFromArray($aArray);            if (PEAR::isError($ret)) {                return $ret;            }            $aRet[] = $oObject;        }        return $aRet;    }    static function &get($sClassName, $iId) {        if (!is_numeric($iId)) {            return PEAR::raiseError(_kt('Non-numeric identifier'));        }        $iId = (int)$iId;        /* */        $sProxyClass = KTEntityUtil::_getProxyClass($sClassName);        $oObject =new $sProxyClass($iId);        $res = $oObject->getId();        if (PEAR::isError($res)) {            return $res;        }        return $oObject;        /* */        // XXX Object cache currently causes hard-to-trace inconsistencies in data.        // $oObject =& KTUtil::arrayGet($GLOBALS['_OBJECTCACHE'][$sClassName], $iId);        // if ($oObject) { return $oObject; }        $oObject =new $sClassName;        $res = $oObject->load($iId);        if (PEAR::isError($res)) {            return $res;        }        // XXX Object cache currently causes hard-to-trace inconsistencies in data.        //$GLOBALS['_OBJECTCACHE'][$sClassName][$iId] =& $oObject;        return $oObject;        /* */    }    static function _getProxyClass($sClassName) {        $sProxyClassName = sprintf("%sProxy", $sClassName);        if (!class_exists($sProxyClassName)) {            KTEntityUtil::_proxyCreate($sClassName, $sProxyClassName);        }        return $sProxyClassName;    }    static function _proxyCreate($sClassName, $sProxyClassName) {        /*        $code = KTEntityUtil::_proxyBuild($sClassName, $sProxyClassName);        return eval($code);        /* */        $oKTConfig =& KTConfig::getSingleton();        $sDirectory = $oKTConfig->get('cache/proxyCacheDirectory');        if (!file_exists($sDirectory)) {            $res = @mkdir($sDirectory);        }        $sRunningUser = KTUtil::running_user();        if ($sRunningUser) {            $sDirectory = sprintf("%s/%s", $sDirectory, $sRunningUser);        }        if (!file_exists($sDirectory)) {            $res = @mkdir($sDirectory);        }        $sFilename = sprintf("%s/%s.inc.php", $sDirectory, $sProxyClassName);        if (file_exists($sFilename)) {            require_once($sFilename);            return;        }        $oCache =& KTCache::getSingleton();        list($bCached, $mCached) = $oCache->get('ktentity/proxycreate', $sClassName);        if ($bCached) {            $code = $mCached;        } else {            $code = KTEntityUtil::_proxyBuild($sClassName, $sProxyClassName);            $res = @file_put_contents($sFilename, "<?php\n$code");            if ($res) {                require_once($sFilename);                return;            }            $oCache->set('ktentity/proxycreate', $sClassName, $code);        }        eval($code);    }    function _proxyBuild($sClassName, $sProxyClassName) {        // var_dump("Building proxy for $sClassName");        $methods = get_class_methods($sClassName);        $allcode = array();        $allcode[] = sprintf('var $cacheGlobal = null;%s', "\n");        foreach ($methods as $sMethod) {            if ($sMethod == 'getid') {                $code = sprintf('function getId() { return $this->iId; }');    		} else if ($sMethod == '_table' || $sMethod == 'update' ) {                $code = sprintf('function %s() { return parent::%s(); }', $sMethod, $sMethod);    		} else if ($sMethod == 'get') {    			$code = sprintf('function get($oId) { return $this->get(%s, $oid); }', $sClassName);    		} else {                $code = sprintf('function %s() { $aArgs = func_get_args(); return $this->_callOnObject("%s", $aArgs); }%s', $sMethod, $sMethod, "\n");            }		  $allcode[] = $code;        }        $allcode[] = sprintf('function &_fetch() {            if (!empty($this->cacheGlobal[$this->iId])) {                $oObject =& $this->cacheGlobal[$this->iId];                return $oObject;            }            $oObject =new %s;            $res = $oObject->load($this->iId);            if (PEAR::isError($res)) {                return $res;            }            $this->cacheGlobal[$this->iId] =& $oObject;            return $oObject;        }', $sClassName, $sClassName, $sClassName, $sClassName);        $allcode[] = sprintf('function _save(&$oObject) {            $this->cacheGlobal[$this->iId] =& $oObject;        }', $sClassName);        $allcode[] = 'function &_callOnObject($sName, $aArgs) {            $oObject =& $this->_fetch();            if (PEAR::isError($oObject)) {                return $oObject;            }            /* */            $res = call_user_func_array(array(&$oObject, $sName), $aArgs);            $this->cacheGlobal[$this->iId] =& $oObject;            return $res;            /* */            /* */            $aExecArgs = array();            $exec = \'$res =& $oObject->$sName(\';            foreach (array_keys($aArgs) as $iKey) {                $aExecArgs[] = \'$aArgs[\' . $iKey . \']\';            }            $exec .= join(", ", $aExecArgs);            $exec .= \');\';            eval($exec);            $this->cacheGlobal[$this->iId] =& $oObject;            return $res;            /* */        }';        $allcode[] = sprintf('function %s ($iId) { $this->iId = $iId; $this->cacheGlobal =& $GLOBALS["_OBJECTCACHE"][%s]; }' . "\n", $sProxyClassName, $sClassName);        $gen = sprintf("class %s extends %s {\n", $sProxyClassName, $sClassName);        $gen .= "    " . join("\n    ", $allcode) . "\n";        $gen .= "}";        return $gen;    }    static function _getBy_equals($sField, $aValue) {        $aParam = $aValue['value'];        if (!is_array($aParam)) {            return array("$sField = ?", array($aParam));        }        $sParam = DBUtil::paramArray($aParam);        return array("$sField IN ($sParam)", array($aParam));    }    static function _getBy_nequals($sField, $aValue) {        $aParam = $aValue['value'];        if (!is_array($aParam)) {            return array("$sField \!= ?", array($aParam));        }        $sParam = DBUtil::paramArray($aParam);        return array("$sField NOT IN ($sParam)", array($aParam));    }    static function _getBy_after($sField, $aValue) {        $aParam = $aValue['value'];        return array("$sField > ?", array($aParam));    }    static function _getBy_before($sField, $aValue) {        $aParam = $aValue['value'];        return array("$sField < ?", array($aParam));    }    static function _getBy_between($sField, $aValue) {        $aParam = $aValue['value'];        return array("$sField BETWEEN ? AND ?", $aParam);    }    static function &getBy($sClassName, $aField, $mValue, $aOptions = null) {        $bMulti = KTUtil::arrayGet($aOptions, 'multi', false);        if ($bMulti) {            $bNoneOk = true;        } else {            $bNoneOk = false;        }        $bNoneOk = KTUtil::arrayGet($aOptions, 'noneok', $bNoneOk);        if (is_string($aField)) {            $aField = array($aField);            $mValue = array($mValue);        }        $aWhere = array();        foreach ($aField as $k => $sField) {            $mThisValue = $mValue[$k];            if (!is_array($mThisValue)) {                $mThisValue = array('type' => 'equals', 'value' => $mThisValue);            }            $sField = KTUtil::arrayGet($mThisValue, 'field', $sField);            $sType = KTUtil::arrayGet($mThisValue, 'type');            if (empty($sType)) {                $mThisValue = array('type' => 'equals', 'value' => $mThisValue);                $sType = 'equals';            }            $sFunc = array('KTEntityUtil', sprintf('_getby_%s', $sType));            if (!is_callable($sFunc)) {                return PEAR::raiseError(_kt('Unknown comparison type given: ') . $sType);            }            $aWhere[] = call_user_func($sFunc, $sField, $mThisValue);        }        $sWhereClause = KTUtil::whereToString($aWhere);        $aObjects =& KTEntityUtil::getList2($sClassName, $sWhereClause, $aOptions);        if (PEAR::isError($aObjects)) {            return $aObjects;        }        if ($bMulti === false) {            if (count($aObjects) === 0) {                if ($bNoneOk) {                    return null;                }                return new KTEntityNoObjects();            }            if (count($aObjects) > 1) {                return PEAR::raiseError(_kt("Multiple objects returned"));            }            return $aObjects[0];        } else {            return $aObjects;        }    }    function &getByDict($sClassName, $aDict, $aOptions = null) {        return KTEntityUtil::getBy($sClassName, array_keys($aDict), array_values($aDict), $aOptions);    }    function clearAllCaches($sClassName) {        KTEntity::_innerClearCachedGroups($sClassName);        $oCache =& KTCache::getSingleton();        $oCache->clear(sprintf("%s/id", $sClassName));        unset($GLOBALS['_OBJECTCACHE'][$sClassName]);    }}class KTEntityNoObjects extends PEAR_Error {}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -