ArticlesList::ProcessParameters PHP Method

ProcessParameters() protected method

Processes the input parameters passed in an array; drops the invalid parameters and parameters with invalid values. Returns an array of valid parameters.
protected ProcessParameters ( array $p_parameters ) : array
$p_parameters array
return array
    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;
    }