/** * Cria classe se ela não existe * * @param string $namespace * @param string $class * @param string $parent * @param string $implements * @param string $license * */ public static function create($namespace, $class, $parent = NUL, $implements = NULL, $license = NULL) { $NSTemp = $namespace; $namespace = self::NAMESPACE_SEPARATOR == substr($namespace, -1) ? substr($namespace, 0, -1) : $namespace; $namespace = $namespace . self::NAMESPACE_SEPARATOR . $class; $fullpath = Location::realpathFromNamespace($namespace) . '.php'; if (TRUE == is_file($fullpath)) { return; } $dirname = dirname($fullpath); if (!is_dir($dirname)) { mkdir($dirname, 0700, TRUE); } $content = sprintf('<?php%5$s%1$s%5$s%2$s%5$s%5$s%3$s%5$s%4$s', self::classLicense(), self::classLocation($NSTemp), self::classDoc($NSTemp, $class), self::classDef($class, $parent, $implements), PHP_EOL); IOException::throwsExceptionIfParamIsNull(file_put_contents($fullpath, $content, LOCK_EX | FILE_TEXT), self::T_CREATECLASSIFNOTEXISTS_ERROR_ON_CREATE_CLASS); }
/** * cria o diretorio informado, se ainda nao existir, ou lanca um exception se * nao conseguir cria-lo * * @param string $dirpath * @return SIALApplication * @todo refatarar este metodo para outra classs * */ public function createDirIfNotExists($dirpath) { if (!is_dir($dirpath)) { # verifica se o diretorio solicitado esta abaixo da estrutura do projeto IOException::throwsExceptionIfParamIsNull(false !== strpos($dirpath, constant('APPLICATION_HTDOCS')), self::T_SIALAPPLICATION_INVALID_PLACE_TO_CREATE_DIRECTORY); # @todo criar rotina para verificar se existe permissao de escrita do diretorio # note que sera necessario criar uma rotina recursiva para esta verificacao, # tendo em vista que o usuario podera informar uma cadeia de diretorio (arvore) # e pedir para criar de forma recursivar, exemplo: # /var/www/app_folder (ate este ponto os diretorios jah existem) # o usuario solicita a criacao de: # /var/www/app_folder/br/com/foo/bar (note que o ultimo diretorio valido eh app_folder) IOException::throwsExceptionIfParamIsNull(mkdir($dirpath, self::T_SIALAPPLICATION_DIRECTORY_PERMISSION, TRUE), sprintf(self::T_SIALAPPLICATION_UNABLE_TO_CREATE_DIRECTORY, str_replace(constant('APPLICATION_HTDOCS'), '', $dirpath))); } return $this; }
/** * grava o arquivo de cache * * @param stdClass $data * @throws IOException * */ public function write(\stdClass $data) { # define o nome do arquivo que armazenará o cache $cacheFileName = self::cacheFileName($data); # verifica se é possível gravar na pasta de cache IOException::throwsExceptionIfParamIsNull(is_writable(dirname($cacheFileName)), self::T_ANNONTATIONCACHE_UNABLE_TO_WRITE_CACHE); # verifica se foi informando um dataSourceName para obter as metas-informacoes if ($metaDataSourceName = $this->safeToggle($data, 'persist', NULL)) { $this->meta($data, $metaDataSourceName); } IOException::throwsExceptionIfParamIsNull(file_put_contents($cacheFileName, json_encode($data)), 'Não foi possível gravar o cache solicitado'); }
/** * verifica se o local para armazenamento dos arquivos é valido, * defini-se por válido: * - a existência prévia da pasta * - permimissão de leitura * - permissão de escrita * * @param string $fullpath * @throws IOException */ private static function _isValidStorage($fullpath) { IOException::throwsExceptionIfParamIsNull(is_dir($fullpath), self::T_UPLOADER_INVALID_TARGET); }
/** * cria a pasta que acomodará o arquivo de configuracao final * * @param string * @return string * */ public static final function createTargetDirectory($dirname) { IOException::throwsExceptionIfParamIsNull(is_writeable($dirname), sprintf('Não há permissão de escrita no diretório %s', $dirname)); $target = $dirname . DIRECTORY_SEPARATOR . 'cache'; if (!is_dir($target)) { IOException::throwsExceptionIfParamIsNull(mkdir($target), 'Não foi possível criar pasta de cache de configuração'); } return $target; }
/** * Fábrica de LimitAbstract * * @param string driver * @return LimitAbstract * @throws IOException * */ public static function factory($driver) { $namespace = __NAMESPACE__ . self::NAMESPACE_SEPARATOR . strtolower($driver) . self::NAMESPACE_SEPARATOR . 'Limit'; $message = self::LIMITABSTRACT_UNAVAILABLE_LIMIT_OPERATOR; IOException::throwsExceptionIfParamIsNull(TRUE == is_file(self::realpathFromNamespace($namespace) . '.php'), $message); return new $namespace(); }