/** * Contructor of class * * @param array $xmlArr * @param string $childClassName * @param object $parentObj * @return void */ public function __construct(&$xmlArr, $childClassName, $parentObj = null) { $this->parentObj = $parentObj; if (!$xmlArr) { return; } if (isset($xmlArr["ATTRIBUTES"])) { $className = isset($xmlArr["ATTRIBUTES"]['CLASS']) ? $xmlArr["ATTRIBUTES"]['CLASS'] : $childClassName; if ((bool) strpos($className, ".")) { $a_package_name = explode(".", $className); $className = array_pop($a_package_name); $clsLoaded = ClassLoader::loadMetadataClass($className, implode(".", $a_package_name)); } //if (!$clsLoaded) trigger_error("Cannot find the load class $className", E_USER_ERROR); $className = Openbiz::objectFactory()->getClassNameFromAlias($className); $obj = new $className($xmlArr, $parentObj); $this->varValue[$obj->objectName] = $obj; } else { foreach ($xmlArr as $child) { $className = isset($child["ATTRIBUTES"]['CLASS']) ? $child["ATTRIBUTES"]['CLASS'] : $childClassName; /** * If a '.' is found within className we need to require such class * and then get the className after the last dot * ex. shared.dataobjs.FieldName, in this case FieldName is the class, shared/dataobjs the path * * The best solution to this is enable object factory to specify its resulting object constructor parameters */ if ($className) { //bug fixed by jixian for resolve load an empty classname if ((bool) strpos($className, ".")) { $a_package_name = explode(".", $className); $className = array_pop($a_package_name); $clsLoaded = ClassLoader::loadMetadataClass($className, implode(".", $a_package_name)); } elseif ($parentObj->package) { $clsLoaded = ClassLoader::loadMetadataClass($className, $parentObj->package); } $className = Openbiz::objectFactory()->getClassNameFromAlias($className); $obj = new $className($child, $parentObj); $this->varValue[$obj->objectName] = $obj; } } } }
protected function getElementObject(&$xmlArr, $defaultClassName, $parentObj = null) { // find the class attribute $className = isset($xmlArr["ATTRIBUTES"]['CLASS']) ? $xmlArr["ATTRIBUTES"]['CLASS'] : $defaultClassName; if ((bool) strpos($className, ".")) { $a_package_name = explode(".", $className); $className = array_pop($a_package_name); $clsLoaded = ClassLoader::loadMetadataClass($className, implode(".", $a_package_name)); if (!$clsLoaded) { trigger_error("Cannot find the load class {$className}", E_USER_ERROR); } } //echo "classname is $className\n"; $obj = new $className($xmlArr, $parentObj); return $obj; }
protected function invokeLoadHandler($event) { $modfile = Openbiz::$app->getModulePath() . "/" . $this->objectName . "/mod.xml"; $xml = simplexml_load_file($modfile); if (!isset($xml['LoadHandler']) && !empty($xml['LoadHandler'])) { return; } $modLoadHandler = $xml['LoadHandler']; $dotPos = strrpos($modLoadHandler, "."); $package = $dotPos > 0 ? substr($modLoadHandler, 0, $dotPos) : null; $class = $dotPos > 0 ? substr($modLoadHandler, $dotPos + 1) : $modLoadHandler; if (ClassLoader::loadMetadataClass($class, $package)) { $loadHandler = new $class(); switch ($event) { case "beforeLoadingModule": case "postLoadingModule": case "beforeUnloadModule": case "postUnloadModule": $loadHandler->{$event}($this); break; } } }