protected function ProcessParameters(array $p_parameters)
{
self::ReadArticleTypes();
$parameters = array();
$parameters['ignore_publication'] = false;
$parameters['ignore_issue'] = false;
$parameters['ignore_section'] = false;
$parameters['ignore_language'] = false;
foreach ($p_parameters as $parameter => $value) {
$parameter = strtolower($parameter);
switch ($parameter) {
case 'length':
case 'columns':
case 'name':
case 'constraints':
case 'order':
if ($parameter == 'length' || $parameter == 'columns') {
$intValue = (int) $value;
if ("{$intValue}" != $value || $intValue < 0) {
CampTemplate::singleton()->trigger_error("invalid value {$value} of parameter {$parameter} in statement list_articles");
}
$parameters[$parameter] = (int) $value;
} else {
$parameters[$parameter] = $value;
}
break;
case 'ignore_publication':
case 'ignore_issue':
case 'ignore_section':
case 'ignore_language':
$value = isset($value) && strtolower($value) != 'false';
$parameters[$parameter] = $value;
break;
case 'location':
$num = '[-+]?[0-9]+(?:\\.[0-9]+)?';
if (preg_match("/{$num} {$num}, {$num} {$num}/", trim($value))) {
$parameters[$parameter] = $value;
} else {
CampTemplate::singleton()->trigger_error("invalid value {$value} of parameter {$parameter} in statement list_articles");
}
break;
default:
$foundField = false;
foreach (self::$s_articleTypes as $atype) {
if (count($dynaBlaster = self::GetDynamicFields($atype, $parameter))) {
$foundField = current($dynaBlaster)->getType();
break;
}
}
if (!$foundField) {
CampTemplate::singleton()->trigger_error("invalid parameter {$parameter} in list_articles");
break;
}
switch ($foundField) {
case 'complex_date':
$this->m_constraints[] = new ComparisonOperation('complex_date', new Operator('is', 'string'), array($parameter => $value));
break;
default:
break;
}
CampTemplate::singleton()->trigger_error("invalid parameter {$parameter} in list_articles");
}
}
$operator = new Operator('is', 'integer');
$context = CampTemplate::singleton()->context();
if ($context->publication->defined && !$parameters['ignore_publication']) {
$this->m_constraints[] = new ComparisonOperation('IdPublication', $operator, $context->publication->identifier);
}
if ($context->language->defined && !$parameters['ignore_language']) {
$this->m_constraints[] = new ComparisonOperation('IdLanguage', $operator, $context->language->number);
}
$this->m_ignoreIssue = $parameters['ignore_issue'];
$this->m_ignoreSection = $parameters['ignore_section'];
if ($context->topic->defined) {
$this->m_constraints[] = new ComparisonOperation('topic', $operator, $context->topic->identifier);
}
if (!$context->preview) {
$this->m_constraints[] = new ComparisonOperation('published', $operator, 'true');
}
if (!empty($parameters['location'])) {
$this->m_constraints[] = new ComparisonOperation('location', new Operator('is', 'string'), $parameters['location']);
}
return $parameters;
}