Skip to content
Snippets Groups Projects
Commit 751767c2 authored by jaapjansma's avatar jaapjansma
Browse files

updated caching and fixed bug

parent 7df34b90
No related branches found
No related tags found
No related merge requests found
......@@ -115,10 +115,13 @@ class CRM_Contact_Selector_DataProcessorContactSearch {
*/
protected function loadDataProcessor() {
if (!$this->dataProcessorId) {
$debug = CRM_Utils_Request::retrieve('debug', 'Boolean', $this, FALSE);
$doNotUseCache = $debug ? true : false;
$dataProcessorName = $this->getDataProcessorName();
$sql = "
SELECT civicrm_data_processor.id as data_processor_id, civicrm_data_processor_output.id AS output_id
FROM civicrm_data_processor
FROM civicrm_data_processor
INNER JOIN civicrm_data_processor_output ON civicrm_data_processor.id = civicrm_data_processor_output.data_processor_id
WHERE is_active = 1 AND civicrm_data_processor.name = %1 AND civicrm_data_processor_output.type = %2
";
......@@ -130,7 +133,7 @@ class CRM_Contact_Selector_DataProcessorContactSearch {
}
$this->dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dao->data_processor_id));
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, true);
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, $doNotUseCache);
$this->dataProcessorId = $dao->data_processor_id;
$this->dataProcessorOutput = civicrm_api3('DataProcessorOutput', 'getsingle', array('id' => $dao->output_id));
......@@ -188,4 +191,4 @@ class CRM_Contact_Selector_DataProcessorContactSearch {
}
}
\ No newline at end of file
}
......@@ -54,13 +54,15 @@ class CRM_Dataprocessor_BAO_DataProcessor extends CRM_Dataprocessor_DAO_DataProc
* Returns a configured data processor instance.
*
* @param array $dataProcessor
* @param bool $forece
* If set reload the data processor in the cache.
* @return \Civi\DataProcessor\ProcessorType\AbstractProcessorType
* @throws \Exception
*/
public static function dataProcessorToClass($dataProcessor) {
public static function dataProcessorToClass($dataProcessor, $force=false) {
$cache_key = 'dataprocessor_'.$dataProcessor['id'];
$cache = CRM_Dataprocessor_Utils_Cache::singleton();
if ($dataProcessorClass = $cache->get($cache_key)) {
if (!$force && $dataProcessorClass = $cache->get($cache_key)) {
// Reset the default filter values as they might have been changed.
$dataProcessorClass->setDefaultFilterValues();
return $dataProcessorClass;
......
......@@ -47,7 +47,7 @@ class CRM_Dataprocessor_Form_FilterValue extends CRM_Core_Form {
$factory = dataprocessor_get_factory();
$this->dataProcessorId = CRM_Utils_Request::retrieve('data_processor_id', 'Integer');
$this->dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $this->dataProcessorId));
$this->dataProcessorClass = CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor);
$this->dataProcessorClass = CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, true);
$this->assign('data_processor_id', $this->dataProcessorId);
$this->id = CRM_Utils_Request::retrieve('id', 'Integer');
......@@ -107,4 +107,4 @@ class CRM_Dataprocessor_Form_FilterValue extends CRM_Core_Form {
parent::postProcess();
}
}
\ No newline at end of file
}
......@@ -64,6 +64,9 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
protected function loadDataProcessor() {
$factory = dataprocessor_get_factory();
if (!$this->dataProcessorId) {
$debug = CRM_Utils_Request::retrieve('debug', 'Boolean', $this, FALSE);
$doNotUseCache = $debug ? true : false;
$dataProcessorName = $this->getDataProcessorName();
$sql = "
SELECT civicrm_data_processor.id as data_processor_id, civicrm_data_processor_output.id AS output_id
......@@ -79,7 +82,7 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co
}
$this->dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dao->data_processor_id));
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, true);
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, $doNotUseCache);
$this->dataProcessorId = $dao->data_processor_id;
$this->dataProcessorOutput = civicrm_api3('DataProcessorOutput', 'getsingle', array('id' => $dao->output_id));
......
......@@ -90,7 +90,7 @@ class CRM_DataprocessorOutputExport_Page_Export extends CRM_Core_Page {
}
$this->dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dao->data_processor_id));
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor, true);
$this->dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($this->dataProcessor);
$this->dataProcessorId = $dao->data_processor_id;
$this->dataProcessorOutput = civicrm_api3('DataProcessorOutput', 'getsingle', array('id' => $dao->output_id));
......
......@@ -77,8 +77,7 @@ class AbstractSimpleFieldOutputHandler extends AbstractFieldOutputHandler implem
3 => $configuration['datasource']
)));
}
$this->inputFieldSpec = clone $this->inputFieldSpec;
$this->inputFieldSpec->alias = $alias;
$this->inputFieldSpec = $this->inputFieldSpec;
$this->dataSource->ensureFieldInSource($this->inputFieldSpec);
$this->outputFieldSpec = clone $this->inputFieldSpec;
......
......@@ -291,11 +291,14 @@ class Api implements OutputInterface, API_ProviderInterface, EventSubscriberInte
}
protected function getFields($entity, $params) {
$debug = isset($params['debug']) && $params['debug'] ? true : false;
$doNotUseCache = $debug ? true : false;
$cacheKey = 'getfields_'.strtolower($entity);
if (isset($params['action'])) {
$cacheKey .= '_'.strtolower($params['action']);
}
if ($cache = $this->cache->get($cacheKey)) {
if (!$doNotUseCache && $cache = $this->cache->get($cacheKey)) {
return $cache;
}
$types = \CRM_Utils_Type::getValidTypes();
......@@ -320,8 +323,7 @@ class Api implements OutputInterface, API_ProviderInterface, EventSubscriberInte
throw new \API_Exception("Could not find a data processor");
}
$dataProcessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dao->data_processor_id));
$dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor);
$dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor, $doNotUseCache);
foreach ($dataProcessorClass->getDataFlow()->getOutputFieldHandlers() as $outputFieldHandler) {
$fieldSpec = $outputFieldHandler->getOutputFieldSpecification();
......@@ -434,6 +436,10 @@ class Api implements OutputInterface, API_ProviderInterface, EventSubscriberInte
}
protected function invokeDataProcessor($apiRequest) {
$params = $apiRequest['params'];
$debug = isset($params['debug']) && $params['debug'] ? true : false;
$doNotUseCache = $debug ? true : false;
$isCountAction = FALSE;
$dataProcessorIdSql = "
SELECT *
......@@ -453,13 +459,11 @@ class Api implements OutputInterface, API_ProviderInterface, EventSubscriberInte
}
$cache_key = 'data_processor_id_'.$dao->data_processor_id;
if (! ($dataProcessor = $this->cache->get($cache_key)) ){
if ($doNotUseCache || !($dataProcessor = $this->cache->get($cache_key)) ){
$dataProcessor = civicrm_api3('DataProcessor', 'getsingle', ['id' => $dao->data_processor_id]);
$this->cache->set($cache_key, $dataProcessor);
}
$dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor);
$params = $apiRequest['params'];
$dataProcessorClass = \CRM_Dataprocessor_BAO_DataProcessor::dataProcessorToClass($dataProcessor, $doNotUseCache);
return $this->runDataProcessor($dataProcessorClass, $params, $isCountAction);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment