/** * construtor * * @param ConfigAbstract $config * */ public function __construct(ConfigAbstract $config) { $this->_config = $config; # inicia o setup das configurações de ambiente $this->setupEnvironment($this->_config); # registra o bootstrap na registry Registry::set('bootstrap', $this); # setup default module/functionaly/action $tmpCfgApp = $this->_config->get('app'); # setup persistcofig PersistConfig::registerConfigs($tmpCfgApp->get('persist')->toArray()); $moduleDefault = $tmpCfgApp->get('module.default'); Request::$moduleDefault = $moduleDefault->get('name'); Request::$functionalityDefault = $moduleDefault->get('functionality'); Request::$actionDefault = $moduleDefault->get('action'); /* recupera */ $this->_request = new Request(); /* aponta para o config.ini do módulo selecionado, caso este possui um .ini próprio */ $this->_useEspecificConfigIniFileIfExistsOne(); # registra o local de armazenamento do cache dos Values Object AnnotationCache::$cacheDir = $tmpCfgApp->get('cache.home'); # inicializa a requisicao $this->_request->setBehaviorMagicQuotesGPC($config->get('php.environment.magic_quotes_gpc')); # inicializa o manipulador de constantes $this->_constantHandler = ConstantHandler::factory($this); $this->_autoloadConstant(); # habilita ou nao uso de registro de log $this->_enablePersistLog($this->_config); }
/** * {@inheritdoc} * */ protected function _connect(PersistConfig $config) { try { $resource = new \PDO($config->getDSN(), $config->get('username'), $config->get('password')); # throws exception if anything goes wrong # only works with MySQL 4.x $resource->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); # get values as objects $resource->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ); # column names aways lowercase $resource->setAttribute(\PDO::ATTR_CASE, \PDO::CASE_LOWER); return $resource; } catch (\PDOException $pdoe) { # @todo um log com o error do PDO devera ser guardo throw new PersistException($pdoe->getMessage(), $pdoe->getCode()); } }
/** * @param PersistConfig $config * @return SoapClient * @throws PersistException * */ protected function _connect(PersistConfig $config) { try { $paramArray = array('local_cert' => $config->get('certificate'), 'proxy_host' => $config->get('proxyhost'), 'proxy_port' => $config->get('proxyport'), 'proxy_login' => $config->get('username'), 'proxy_password' => $config->get('password'), 'trace' => 1); # Retornar em XML $resource = new \SoapClient($config->getDSN(), $paramArray); $this->_config = $config; return $resource; } catch (\Exception $ldape) { # @todo da mesma forma do PDO guardar log para o LDAP throw new PersistException($ldape->getMessage(), $ldape->getCode()); } }
/** * o primeiro param pode ser uma Query ou um objeto Entity. Se uma Entity for informado, então Config * torna-se-á obrigatório devido a necessidade de estabelecer a conexao com o respositorio de dados. * a fonte de dados poderá ser informado por meio de terceiro para ou omitido para ser utilizado * a fonte de dados padrao. * * @param DSLinkerReferenceable $target * @param Config $config * @param string $dsName * */ public function __construct(DSLinkerReferenceable $target, Config $config = NULL, $dsName = 'default') { # se o target for uma referencia para Entity ou Query entao sera # necessario um objeto executor de consulta Persist if ($target instanceof Entity || $target instanceof QueryAbstract) { $info = $config->get($config->get($dsName)); $target = QueryAbstract::factory($info->get('driver'), $target); PersistConfig::registerConfigs($config->toArray()); $pConfig = $configPersist = PersistConfig::factory($config->get($dsName)); $namespace = sprintf('br\\gov\\sial\\core\\persist\\%s\\Persist', $pConfig->get('adapter')); $executor = Persist::factory($namespace, $pConfig); $target = $executor->execute($target); } $this->_result = $target; /* necessario para tornar o */ $this->next(); }
/** * Fábrica de Persist. * @example Persist::factory * @code * <?php * ... * Persist::factory('\lib\Persist', $persistConfig); * ... * ?> * @endcode * @param [string | Model] $namespace * @param PersistConfig $config * @return Persist * @throws PersistException * */ public static function factory($namespace = NULL, PersistConfig $config) { if (is_string($namespace)) { self::exists($namespace, TRUE); return new $namespace($config); } PersistException::throwsExceptionIfParamIsNull($namespace instanceof ModelAbstract, self::PERSIST_NAMESPACE_OR_MODEL_REQUIRED); # get the funcionality namespace $tmpNSFunc = current(explode(self::NAMESPACE_SEPARATOR . 'mvcb', $namespace->getNamespace())); $arrNS = explode(self::NAMESPACE_SEPARATOR, $tmpNSFunc); # get the funcionality name $tmpFuncy = end($arrNS); $tpl = '%1$s%2$spersist%2$s%3$s%2$s%4$sPersist'; $namespace = sprintf($tpl, $tmpNSFunc, self::NAMESPACE_SEPARATOR, $config->get('adapter'), ucfirst($tmpFuncy)); self::exists($namespace, TRUE); # instancia o ModuleDatabasePersist $tmpPersist = new $namespace($config); return $tmpPersist; }
/** * Verifica se um banco de dados é suportado. * * @param string $suspicious * @return bool * */ public function isSupported($suspicious) { return parent::isSupported(self::CONFIG_TYPE) && in_array($suspicious, self::$_acceptedDrivers); }
/** * Fábrica de Connect. * * @param PersistConfig $config * @return Connect * @throws PersistException * */ public static function factory(PersistConfig $config) { $hash = $config->hash(); if (!isset(self::$_instance[$hash])) { $namespace = sprintf('%1$s%2$s%3$s%2$sConnect', __NAMESPACE__, self::NAMESPACE_SEPARATOR, $config->get('driver')); self::$_instance[$hash] = new $namespace($config); } return self::$_instance[$hash]; }
/** * recupera meta informacao do valueObject informado * * @param stdClass $annon * @param string $dataSource * */ public function meta(\stdClass $annon, $dataSource) { $config = PersistConfig::factory($dataSource, self::$persistConfig->toArray()); $data = MetaAbstract::factory(Connect::factory($config))->data($this->safeToggle($annon, 'schema', NULL), $this->safeToggle($annon, 'entity', NULL)); $this->merge($annon, $data); }
/** * Construtor. * * @param string[] $config * @throws IllegalArgumentException * */ public function __construct(array $config = array()) { parent::__construct($config); }
/** * Método que efetua a conexão com o serivdor Ldap. * * @param persistConfig $config * @throws PersistException * @see Parent::_connect() * */ protected function _connect(PersistConfig $config) { try { $resource = ldap_connect($config->getDSN()); $this->_config = $config; # Seto parametros de acordo com a versão do LDAP ldap_set_option($resource, LDAP_OPT_PROTOCOL_VERSION, $config->get('version')); # Seta se as referências segue a biblioteca LDAP e retornadas por servidores LDAP. ldap_set_option($resource, LDAP_OPT_REFERRALS, 0); return $resource; } catch (\Exception $exc) { throw new PersistException($exc->getMessage(), $exc->getCode()); } }
/** * @return MetaAbstract * */ public function meta() { $dsName = $this->_bootstrap->config('app.persist.default'); $config = $this->_bootstrap->config('app.persist')->toArray(); $pConfig = PersistConfig::factory($dsName, $config); $persist = \br\gov\sial\core\persist\database\Connect::factory($pConfig); return MetaAbstract::factory($persist); }
/** * Fábrica Connect * * @param PersistConfig $config * @return \br\gov\sial\core\persist\Connect * @throws PersistException * */ public static function factory(PersistConfig $config) { $hash = $config->hash(); $tmpID = $config->hash(); if (FALSE === isset(self::$_instance[$tmpID])) { $namespace = sprintf('\\br\\gov\\sial\\core\\persist\\%s\\Connect', $config->get('adapter')); self::$_instance[$tmpID] = $namespace::factory($config); } return self::$_instance[$tmpID]; }
/** * Cria objeto persist do mesmo tipo da Model. * * @name _getPersist * @param string $dsName * @return PersistConfig * */ private function _factory($dsName) { return Persist::factory($this, PersistConfig::factory($dsName)); }