mirror of
https://github.com/friendica/friendica
synced 2024-12-27 07:22:21 +00:00
185 lines
5.9 KiB
PHP
185 lines
5.9 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace DDDBL;
|
||
|
|
||
|
require_once __DIR__ . '/config.inc.php';
|
||
|
|
||
|
/**
|
||
|
* @throws \Exception - if no parameter are given
|
||
|
* @throws UnexpectedParameterTypeException - if first parameter is not a string
|
||
|
*
|
||
|
* @returns (mixed) - the result of the query-definition execution
|
||
|
*
|
||
|
* expect a list of parameter with at least one value. the
|
||
|
* list is handled over to the queue, which will executed
|
||
|
* with them
|
||
|
*
|
||
|
* in the end a result of the execution of the query-definition
|
||
|
* through the stored handler is returned
|
||
|
*
|
||
|
**/
|
||
|
function get() {
|
||
|
|
||
|
$arrParameter = func_get_args();
|
||
|
|
||
|
if(empty($arrParameter))
|
||
|
throw new \Exception ("no parameter given for execution");
|
||
|
|
||
|
if(!is_string($arrParameter[0]))
|
||
|
throw new UnexpectedParameterTypeException('string', $arrParameter[0]);
|
||
|
|
||
|
# get instance of queue and work with a copy of it
|
||
|
$objQueue = Singleton::getInstance('\DDDBL\Queue');
|
||
|
$objQueue = $objQueue->getClone();
|
||
|
|
||
|
return $objQueue->execute($arrParameter);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strFile - the file with the query definitions to store
|
||
|
*
|
||
|
* store all query-definitions from the given file
|
||
|
*
|
||
|
**/
|
||
|
function storeQueryFileContent($strFile) {
|
||
|
|
||
|
storeDefinitionsFromFileInGroup($strFile, 'Query-Definition');
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strDir - the dir with query-definitions files
|
||
|
* @param $strMatch - a rule files in the dir have to match
|
||
|
*
|
||
|
* iterate through all files in the given dir. if a file matches
|
||
|
* the rule in $strMatch, the definitions in the file will be stored
|
||
|
* as query-definitions. all files are match in default.
|
||
|
*
|
||
|
**/
|
||
|
function loadQueryDefinitionsInDir($strDir, $strMatch = '*') {
|
||
|
|
||
|
walkDirForCallback($strDir, '\DDDBL\storeQueryFileContent', $strMatch);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strFile - the file with the database definitions to store
|
||
|
*
|
||
|
* store all database definition from the given file
|
||
|
*
|
||
|
**/
|
||
|
function storeDBFileContent($strFile) {
|
||
|
|
||
|
$cloAdditionalHandler = function ($objDataObjectPool, $arrDefinition) {
|
||
|
if(!empty($arrDefinition['DEFAULT']) && true == (boolean) $arrDefinition['DEFAULT'])
|
||
|
$objDataObjectPool->add('DEFAULT', $arrDefinition);
|
||
|
};
|
||
|
|
||
|
storeDefinitionsFromFileInGroup($strFile, 'Database-Definition', $cloAdditionalHandler);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strDir - the dir with query-definitions files
|
||
|
* @param $strMatch - a rule files in the dir have to match
|
||
|
*
|
||
|
* iterate through all files in the given dir. if a file matches
|
||
|
* the rule in $strMatch, the definitions in the file will be stored
|
||
|
* as database-definitions. all files are matched in default.
|
||
|
*
|
||
|
**/
|
||
|
function loadDBDefinitionsInDir($strDir, $strMatch = '*') {
|
||
|
|
||
|
walkDirForCallback($strDir, '\DDDBL\loadDBDefinitionsInDir', $strMatch);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strPath - the path to the dir to handle
|
||
|
* @param $strCallback - the callback to call when a matching file is found
|
||
|
* @param $strFilenameMatch - the rule to filename has to match
|
||
|
*
|
||
|
* @throws UnexpectedParameterTypeException - if the given path or filematch-rule is not a string
|
||
|
* @throws UnexpectedParameterTypeException - if the given callback is not a callable
|
||
|
* @throws \Exception - if given path is not a directory
|
||
|
* @throws \Exception - if the directory is not readable
|
||
|
*
|
||
|
* reads all files of the given directory (just directory, not recursive)
|
||
|
* and checks, if the filename matches against the given rule. if
|
||
|
* a match is found the given callback is called with the full
|
||
|
* path to the file
|
||
|
*
|
||
|
**/
|
||
|
function walkDirForCallback($strPath, $strCallback, $strFilenameMatch) {
|
||
|
|
||
|
if(!is_string($strPath))
|
||
|
throw new UnexpectedParameterTypeException('string', $strPath);
|
||
|
|
||
|
if(!is_callable($strCallback))
|
||
|
throw new UnexpectedParameterTypeException('callable', $strCallback);
|
||
|
|
||
|
if(!is_string($strFilenameMatch))
|
||
|
throw new UnexpectedParameterTypeException('string', $strFilenameMatch);
|
||
|
|
||
|
if(!is_dir($strPath))
|
||
|
throw new \Exception ('given path is not an directory: ' . $strPath);
|
||
|
|
||
|
$resDirHandle = opendir($strPath);
|
||
|
|
||
|
if(!is_resource($resDirHandle))
|
||
|
throw new \Exception ('could not read directory: ' . $strPath);
|
||
|
|
||
|
while($strFile = readdir($resDirHandle))
|
||
|
if(is_file($strPath.$strFile) && fnmatch($strFilenameMatch, $strFile))
|
||
|
call_user_func_array($strCallback, array($strPath.$strFile));
|
||
|
|
||
|
closedir($resDirHandle);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $strFile - the file with definitions
|
||
|
* @param $strGroup - the group the definitions should be stored in
|
||
|
*
|
||
|
* @throws UnexpectedParameterTypeException - if the given file is not a string
|
||
|
* @throws UnexpectedParameterTypeException - if the given optional handler is not a callable
|
||
|
* @throws \Exception - if the given file is not a file or do not exists
|
||
|
* @throws \Exception - if the given file is not readable
|
||
|
*
|
||
|
* generic function to store all definitions in a given file
|
||
|
* in the specified group.
|
||
|
*
|
||
|
* if an additional handler is given, it is called AFTER the storage of the
|
||
|
* definition. when called it will get the reference to the DataObjectPool and the
|
||
|
* found definition as parameter.
|
||
|
*
|
||
|
**/
|
||
|
function storeDefinitionsFromFileInGroup($strFile, $strGroup, $cloAdditionalHandler = null) {
|
||
|
|
||
|
if(!is_string($strGroup))
|
||
|
throw new UnexpectedParameterTypeException('string', $strGroup);
|
||
|
|
||
|
if(!is_null($cloAdditionalHandler) && !is_callable($cloAdditionalHandler))
|
||
|
throw new UnexpectedParameterTypeException('callable', $cloAdditionalHandler);
|
||
|
|
||
|
if(!is_file($strFile) || !file_exists($strFile))
|
||
|
throw new \Exception ("given file is not a file or doesn't exists: $strFile");
|
||
|
|
||
|
if(!is_readable($strFile))
|
||
|
throw new \Exception ("given file is not readable: $strFile");
|
||
|
|
||
|
$arrDefinitions = parse_ini_file($strFile, true);
|
||
|
|
||
|
$objDataObjectPool = new DataObjectPool($strGroup);
|
||
|
|
||
|
foreach($arrDefinitions AS $strDefinitionAlias => $arrDefinition) {
|
||
|
$objDataObjectPool->add($strDefinitionAlias, $arrDefinition);
|
||
|
|
||
|
if(!is_null($cloAdditionalHandler))
|
||
|
$cloAdditionalHandler($objDataObjectPool, $arrDefinition);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|