Exception
Error sending GET 192.168.3.1:9200/strutt/property/_search to Elasticsearch. Status code: 400. Array ( [root_cause] => Array ( [0] => Array ( [type] => illegal_argument_exception [reason] => Fielddata is disabled on text fields by default. Set fielddata=true on [office_cid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead. ) ) [type] => search_phase_execution_exception [reason] => all shards failed [phase] => query [grouped] => 1 [failed_shards] => Array ( [0] => Array ( [shard] => 0 [index] => strutt [node] => WmI07xb6Re-jPwUrL8nh2Q [reason] => Array ( [type] => illegal_argument_exception [reason] => Fielddata is disabled on text fields by default. Set fielddata=true on [office_cid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead. ) ) ) ) Exception thrown with message "Error sending GET 192.168.3.1:9200/strutt/property/_search to Elasticsearch. Status code: 400. Array ( [root_cause] => Array ( [0] => Array ( [type] => illegal_argument_exception [reason] => Fielddata is disabled on text fields by default. Set fielddata=true on [office_cid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead. ) ) [type] => search_phase_execution_exception [reason] => all shards failed [phase] => query [grouped] => 1 [failed_shards] => Array ( [0] => Array ( [shard] => 0 [index] => strutt [node] => WmI07xb6Re-jPwUrL8nh2Q [reason] => Array ( [type] => illegal_argument_exception [reason] => Fielddata is disabled on text fields by default. Set fielddata=true on [office_cid] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead. ) ) ) ) " Stacktrace: #30 Exception in /var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticSearchRequest.php:73 #29 Concrete\Package\Elasticsearch\Src\Helpers\ElasticSearchRequest:sendElasticsearchRequest in /var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticQueryHelper.php:518 #28 Concrete\Package\Elasticsearch\Src\Helpers\ElasticQueryHelper:executeQueryWithMetadata in /var/www/strutt_public/application/src/Repositories/SoldProperties.php:128 #27 Application\Src\Repositories\SoldProperties:getOfficesWithSoldProperties in /var/www/strutt_public/application/src/Form/Types/SoldPropertiesType.php:35 #26 Application\Src\Form\Types\SoldPropertiesType:Application\Src\Form\Types\{closure} in /var/www/strutt_public/application/src/Service/CustomForm.php:776 #25 call_user_func in /var/www/strutt_public/application/src/Service/CustomForm.php:776 #24 Application\Src\Service\CustomForm:entitySelect in /var/www/strutt_public/application/src/Helpers/FormRenderer.php:49 #23 Application\Src\Helpers\FormRenderer:handleInput in /var/www/strutt_public/application/themes/rawnet/sold_properties.php:46 #22 include in /var/www/strutt_public/concrete/src/View/View.php:288 #21 Concrete\Core\View\View:renderTemplate in /var/www/strutt_public/concrete/src/View/View.php:250 #20 Concrete\Core\View\View:renderViewContents in /var/www/strutt_public/concrete/src/View/AbstractView.php:164 #19 Concrete\Core\View\AbstractView:render in /var/www/strutt_public/concrete/src/Http/ResponseFactory.php:153 #18 Concrete\Core\Http\ResponseFactory:view in /var/www/strutt_public/concrete/src/Http/ResponseFactory.php:220 #17 Concrete\Core\Http\ResponseFactory:controller in /var/www/strutt_public/concrete/src/Http/ResponseFactory.php:371 #16 Concrete\Core\Http\ResponseFactory:collection in /var/www/strutt_public/concrete/src/Http/DefaultDispatcher.php:131 #15 Concrete\Core\Http\DefaultDispatcher:handleDispatch in /var/www/strutt_public/concrete/src/Http/DefaultDispatcher.php:59 #14 Concrete\Core\Http\DefaultDispatcher:dispatch in /var/www/strutt_public/concrete/src/Http/Middleware/DispatcherDelegate.php:39 #13 Concrete\Core\Http\Middleware\DispatcherDelegate:next in /var/www/strutt_public/concrete/src/Http/Middleware/ThumbnailMiddleware.php:76 #12 Concrete\Core\Http\Middleware\ThumbnailMiddleware:process in /var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php:50 #11 Concrete\Core\Http\Middleware\MiddlewareDelegate:next in /var/www/strutt_public/concrete/src/Http/Middleware/FrameOptionsMiddleware.php:39 #10 Concrete\Core\Http\Middleware\FrameOptionsMiddleware:process in /var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php:50 #9 Concrete\Core\Http\Middleware\MiddlewareDelegate:next in /var/www/strutt_public/concrete/src/Http/Middleware/CookieMiddleware.php:35 #8 Concrete\Core\Http\Middleware\CookieMiddleware:process in /var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php:50 #7 Concrete\Core\Http\Middleware\MiddlewareDelegate:next in /var/www/strutt_public/concrete/src/Http/Middleware/ApplicationMiddleware.php:29 #6 Concrete\Core\Http\Middleware\ApplicationMiddleware:process in /var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php:50 #5 Concrete\Core\Http\Middleware\MiddlewareDelegate:next in /var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareStack.php:86 #4 Concrete\Core\Http\Middleware\MiddlewareStack:process in /var/www/strutt_public/concrete/src/Http/DefaultServer.php:85 #3 Concrete\Core\Http\DefaultServer:handleRequest in /var/www/strutt_public/concrete/src/Foundation/Runtime/Run/DefaultRunner.php:128 #2 Concrete\Core\Foundation\Runtime\Run\DefaultRunner:run in /var/www/strutt_public/concrete/src/Foundation/Runtime/DefaultRuntime.php:102 #1 Concrete\Core\Foundation\Runtime\DefaultRuntime:run in /var/www/strutt_public/concrete/dispatcher.php:45 #0 require in /var/www/strutt_public/index.php:3
Stack frames (31)
30
Exception
/var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticSearchRequest.php73
29
Concrete\Package\Elasticsearch\Src\Helpers\ElasticSearchRequest sendElasticsearchRequest
/var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticQueryHelper.php518
28
Concrete\Package\Elasticsearch\Src\Helpers\ElasticQueryHelper executeQueryWithMetadata
/var/www/strutt_public/application/src/Repositories/SoldProperties.php128
27
Application\Src\Repositories\SoldProperties getOfficesWithSoldProperties
/var/www/strutt_public/application/src/Form/Types/SoldPropertiesType.php35
26
Application\Src\Form\Types\SoldPropertiesType Application\Src\Form\Types\{closure}
/var/www/strutt_public/application/src/Service/CustomForm.php776
25
call_user_func
/var/www/strutt_public/application/src/Service/CustomForm.php776
24
Application\Src\Service\CustomForm entitySelect
/var/www/strutt_public/application/src/Helpers/FormRenderer.php49
23
Application\Src\Helpers\FormRenderer handleInput
/var/www/strutt_public/application/themes/rawnet/sold_properties.php46
22
include
/src/View/View.php288
21
Concrete\Core\View\View renderTemplate
/src/View/View.php250
20
Concrete\Core\View\View renderViewContents
/src/View/AbstractView.php164
19
Concrete\Core\View\AbstractView render
/src/Http/ResponseFactory.php153
18
Concrete\Core\Http\ResponseFactory view
/src/Http/ResponseFactory.php220
17
Concrete\Core\Http\ResponseFactory controller
/src/Http/ResponseFactory.php371
16
Concrete\Core\Http\ResponseFactory collection
/src/Http/DefaultDispatcher.php131
15
Concrete\Core\Http\DefaultDispatcher handleDispatch
/src/Http/DefaultDispatcher.php59
14
Concrete\Core\Http\DefaultDispatcher dispatch
/src/Http/Middleware/DispatcherDelegate.php39
13
Concrete\Core\Http\Middleware\DispatcherDelegate next
/src/Http/Middleware/ThumbnailMiddleware.php76
12
Concrete\Core\Http\Middleware\ThumbnailMiddleware process
/src/Http/Middleware/MiddlewareDelegate.php50
11
Concrete\Core\Http\Middleware\MiddlewareDelegate next
/src/Http/Middleware/FrameOptionsMiddleware.php39
10
Concrete\Core\Http\Middleware\FrameOptionsMiddleware process
/src/Http/Middleware/MiddlewareDelegate.php50
9
Concrete\Core\Http\Middleware\MiddlewareDelegate next
/src/Http/Middleware/CookieMiddleware.php35
8
Concrete\Core\Http\Middleware\CookieMiddleware process
/src/Http/Middleware/MiddlewareDelegate.php50
7
Concrete\Core\Http\Middleware\MiddlewareDelegate next
/src/Http/Middleware/ApplicationMiddleware.php29
6
Concrete\Core\Http\Middleware\ApplicationMiddleware process
/src/Http/Middleware/MiddlewareDelegate.php50
5
Concrete\Core\Http\Middleware\MiddlewareDelegate next
/src/Http/Middleware/MiddlewareStack.php86
4
Concrete\Core\Http\Middleware\MiddlewareStack process
/src/Http/DefaultServer.php85
3
Concrete\Core\Http\DefaultServer handleRequest
/src/Foundation/Runtime/Run/DefaultRunner.php128
2
Concrete\Core\Foundation\Runtime\Run\DefaultRunner run
/src/Foundation/Runtime/DefaultRuntime.php102
1
Concrete\Core\Foundation\Runtime\DefaultRuntime run
/dispatcher.php45
0
require
/var/www/strutt_public/index.php3
/var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticSearchRequest.php
        }
 
        $response = curl_exec($curl);
        $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
 
        self::logQuery($start, $url, $data);
 
        $responseData = json_decode($response, true);
 
        if ($httpCode === Response::HTTP_OK || $httpCode === Response::HTTP_CREATED) {
            return $responseData;
        } else {
            $message = 'Error sending ' . $httpMethod . ' ' . $url . ' to Elasticsearch.';
            $message .= ' Status code: ' . $httpCode;
            if ($responseData['error']) {
                $message .= '. ' . print_r($responseData['error'], true);
            }
 
            throw new \Exception($message);
        }
    }
 
    /**
     * Decide if a query should be logged
     *
     * @param float $start
     *   The time the query started
     * @param string $url
     *   The url the query was sent to
     * @param array $data
     *   The query data
     */
    private static function logQuery($start, $url, $data)
    {
        $elapsed = round((microtime(true) - $start) * 1000);
 
        if (self::isQueryLoggable($elapsed)) {
            $debugQuery = json_encode($data, JSON_PRETTY_PRINT);
            $output = "$url\nQuery time: $elapsed ms\n$debugQuery\n\n";
/var/www/strutt_public/packages/elasticsearch/src/Helpers/ElasticQueryHelper.php
     * @return array
     * @throws \Exception
     */
    public function executeQueryWithMetadata()
    {
        if ($this->maxResults !== false) {
            $this->query['size'] = $this->maxResults;
        }
 
        if(isset($this->query['query']['filtered'])){
            $this->query['query']['bool'] = $this->query['query']['filtered'];
            unset($this->query['query']['filtered']);
        }
 
        if(isset($this->query['query']['bool']['query'])){
            $this->query['query']['bool']['must'] = $this->query['query']['bool']['query'];
            unset($this->query['query']['bool']['query']);
        }
        
        return ElasticSearchRequest::sendElasticsearchRequest($this->getUrl(), ElasticSearchRequest::HTTP_METHOD_GET, $this->query);
    }
 
    /**
     * Get the URL for this query object
     */
    public function getUrl()
    {
        $url = '/';
 
        if (count($this->indexes)) {
            $url .= implode(',', $this->indexes) . '/';
        }
 
        $url .= '_search';
 
        return $url;
    }
 
    /**
     * Execute the query and only return the source of each matched document
/var/www/strutt_public/application/src/Repositories/SoldProperties.php
     *   office id => office name
     */
    public static function getOfficesWithSoldProperties()
    {
        $officeNames = [];
        $query = new ElasticQueryHelper();
        $query->addSearchIndex(PageType::PAGE_TYPE_OFFICE);
        $query->setMaxResults(10000);
        $results = $query->executeQueryResultsOnly();
        foreach ($results as $result) {
            $officeNames[$result['id']] = $result['name'];
        }
 
 
        $offices = [];
        $query = self::initialiseQuery();
        $query->addAggregation('offices', Property::ELASTICSEARCH_FIELD_OFFICE_CID);
        $query->setMaxResults(0);
 
        $results = $query->executeQueryWithMetadata();
        if (isset($results['aggregations']['offices']['buckets'])) {
            foreach ($results['aggregations']['offices']['buckets'] as $office) {
                $officeCid = $office['key'];
                // TODO: get the office name
                $offices[$officeCid] = $officeNames[$officeCid];
            }
        }
 
        asort($offices);
        // Don't use array_merge, as we lose the keys!
        $offices = ['' => 'All offices'] + $offices;
 
        return $offices;
    }
 
    private static function initialiseQuery()
    {
        $query = new ElasticQueryHelper();
        $query->addSearchIndex(PageType::PAGE_TYPE_PROPERTY);
 
/var/www/strutt_public/application/src/Form/Types/SoldPropertiesType.php
class SoldPropertiesType extends AbstractForm
{
    const FORM_NAME = 'sold-properties';
 
    /**
     * Constructor for the form config
     *
     * @param FormBuilderInterface $builder
     * @return mixed
     */
    protected function buildForm(FormBuilderInterface $builder)
    {
        $builder->add(Article::SEARCH_TEXT_FIELD, FormBuilderInterface::SEARCH, [
            'attr' => [
                'placeholder' => 'What are you looking for?'
            ]
        ])->add(Article::FILTER_OFFICES, FormBuilderInterface::ENTITY_SELECT, [
            'query' => function()  {
                $repo = new SoldProperties();
                $offices = $repo->getOfficesWithSoldProperties();
                return $offices;
            }
        ])->add(Property::FILTER_PRICE_TO_BUY, FormBuilderInterface::RANGE_SELECT, [
            'filterClass' => '\Application\Src\Models\Filters\PriceFilter',
            'choices' => $builder->buildSelectRangeOptionsList(ResidentialSalesPropertyType::$PRICE_OPTIONS, function ($value) {
                return '£' . number_format($value);
            }),
        ])->add(Article::SUBMIT_BUTTON, FormBuilderInterface::BUTTON, [
            'submitValue' => t('Go')
        ])->add(Article::FILTER_TEMPLATE, FormBuilderInterface::SEARCH_TYPE, [
                'choices' => self::$SEARCH_POINTS,
                'value' => 'knowledge-and-research'
            ])->add(Article::FILTER_TAGS, FormBuilderInterface::HIDDEN);
 
        $this->form = $builder;
    }
 
    /**
     * Namespace of the repo to handle the search
     *
/var/www/strutt_public/application/src/Service/CustomForm.php
            }
        }
        $html .= '</ul></div>';
 
        return $html;
    }
 
    /**
     * Renders a select field.
     *
     * @param string $key The name of the element. If $key denotes an array, the ID will start with $key but will have a progressive unique number added; if $key does not denotes an array, the ID attribute will be $key.
     * @param array $optionValues An associative array of key => display.
     * @param string|array $valueOrMiscFields The value of the field to be selected or an array with additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     * @param array $miscFields (used if $valueOrMiscFields is not an array) Additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     *
     * @return string - html
     */
    public function entitySelect($key, $optionValues, $valueOrMiscFields = '', $miscFields = array())
    {
        return $this->select($key, call_user_func($optionValues['query']), $valueOrMiscFields, $miscFields);
    }
 
    /**
     * Renders a select field.
     *
     * @param string $key The name of the element. If $key denotes an array, the ID will start with $key but will have a progressive unique number added; if $key does not denotes an array, the ID attribute will be $key.
     * @param array $optionValues An associative array of key => display.
     * @param string $value The value of the field to be selected
     * @param array $attributes Additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     *
     * @return string - html
     */
    public function select($key, $optionValues, $value = '', $miscFields = array())
    {
 
        // Render all selects with custom-select class
        if (isset($miscFields['class'])) {
            $miscFields['class'] .= ' custom-select';
        } else {
            $miscFields['class'] = 'custom-select';
/var/www/strutt_public/application/src/Service/CustomForm.php
            }
        }
        $html .= '</ul></div>';
 
        return $html;
    }
 
    /**
     * Renders a select field.
     *
     * @param string $key The name of the element. If $key denotes an array, the ID will start with $key but will have a progressive unique number added; if $key does not denotes an array, the ID attribute will be $key.
     * @param array $optionValues An associative array of key => display.
     * @param string|array $valueOrMiscFields The value of the field to be selected or an array with additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     * @param array $miscFields (used if $valueOrMiscFields is not an array) Additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     *
     * @return string - html
     */
    public function entitySelect($key, $optionValues, $valueOrMiscFields = '', $miscFields = array())
    {
        return $this->select($key, call_user_func($optionValues['query']), $valueOrMiscFields, $miscFields);
    }
 
    /**
     * Renders a select field.
     *
     * @param string $key The name of the element. If $key denotes an array, the ID will start with $key but will have a progressive unique number added; if $key does not denotes an array, the ID attribute will be $key.
     * @param array $optionValues An associative array of key => display.
     * @param string $value The value of the field to be selected
     * @param array $attributes Additional fields appended to the element (a hash array of attributes name => value), possibly including 'class'.
     *
     * @return string - html
     */
    public function select($key, $optionValues, $value = '', $miscFields = array())
    {
 
        // Render all selects with custom-select class
        if (isset($miscFields['class'])) {
            $miscFields['class'] .= ' custom-select';
        } else {
            $miscFields['class'] = 'custom-select';
/var/www/strutt_public/application/src/Helpers/FormRenderer.php
     * @param array $attribs
     * @param $choiceKey
     * @param $choice
     * @return string
     */
    public function handleInput(FormInterface $form, $key, array $attribs = [], $choiceKey = null, $choice = null){
        $options = $form->getBuilder()->get($key);
 
        // allows input attributes to be added or overridden on render
        if(count($attribs)) {
            $options = array_replace_recursive($options, $attribs);
        }
 
        if(isset($options['value'])) {
            $options['value'] = preg_replace(",<[^>]*>(:?.*<\s*/[^>]*>)?,", "", $options['value']);
        }
 
        switch($options['type']) {
            case FormBuilderInterface::ENTITY_SELECT:
                return $this->customForm->entitySelect($form->getName() . '[' . $key . ']', $options, isset($options['value']) ? $options['value'] : null, isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::SEARCH:
                return $this->customForm->search($form->getName() . '[' . $key . ']', isset($options['value']) ? $options['value'] : null, isset($options['attr']) ? $options['attr'] : null, isset($options['tags']) ? $options['tags'] : null);
 
            case FormBuilderInterface::SEARCH_TYPE:
                return $this->customForm->searchSelect($form->getName() . '[' .$key . ']', $options['choices'], isset($options['value']) ? $options['value'] : null, isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::TEXT:
                return $this->customForm->text($form->getName() . '[' . $key . ']', isset($options['value']) ? $options['value'] : null, isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::LOCATION:
                return $this->customForm->location($form->getName() . '[' . $key . ']', isset($options['value']) ? $options['value'] : null, isset($options['filterModel']) ? $options['filterModel'] : null, isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::SUBMIT:
                return $this->customForm->submit($form->getName() . '[' .$key . ']', isset($options['submitValue']) ? $options['submitValue'] : ucfirst($key), null, isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::BUTTON:
                return $this->customForm->button($form->getName() . '[' .$key . ']', isset($options['submitValue']) ? $options['submitValue'] : ucfirst($key), isset($options['attr']) ? $options['attr'] : null);
 
            case FormBuilderInterface::SELECT:
/var/www/strutt_public/application/themes/rawnet/sold_properties.php
    <div class="content-section content-section--patterned content-section--reduced-padding inner-wrapper">
        <!-- dummy search form to submit search to the sold-properties page -->
        <form data-behaviour="search-results">
            <select id="sold_properties[filter_template]" name="sold_properties[filter_template]" data-element="search-type" class="selectron__select">
                <option value="sold-properties" data-url="<?php echo $c->getCollectionPath(); ?>" data-form-name="sold_properties">Sold Properties</option>
            </select>
            <input type="hidden" id="sold_properties[search]" name="sold_properties[search]" value="" data-element="search-input">
        </form>
 
        <div data-element="show-on-success">
            <p class="results-message">
                There are <span data-element="total-results">0</span> results that match your search criteria...
            </p>
        </div>
 
        <div class="category-filter category-filter--align-center" data-element="always-show">
            <label class="category-filter__label category-filter__label--condensed">Filter by:</label>
            <?php echo $formRenderer->handleInput($searchForm, Article::FILTER_OFFICES, [
                'attr' => [
                    'class' => 'custom-select ',
                    'data-element' => 'category-filter'
                ]
            ]); ?>
 
            <label class="category-filter__label category-filter__label--condensed">Price range:</label>
            <div class="category-filter__sub">
                <?php echo $formRenderer->handleInput($searchForm, Property::FILTER_PRICE_TO_BUY, ['attr' => ['filter_group' => 'price', 'data-element' => 'category-filter']]); ?>
            </div>
 
            <?php echo $formRenderer->handleInput($searchForm, Article::FILTER_TAGS, [
                'attr' => [
                    'data-element' => 'filter-tag'
                ]
            ]);
            ?>
        </div>
 
        <div class="results-wrapper" data-element="results-container">
            <div class="article-listing article-listing--equal-height" data-element="display-results" data-behaviour="standard-carousel" data-slides="1" data-carousel-display="small" data-infinite="false">
            </div>
/var/www/strutt_public/concrete/src/View/View.php
        ob_end_clean();
 
        return $innerContent;
    }
 
    /**
     * Render the file set to $this->template
     * @param $scopeItems
     * @return string
     */
    protected function renderTemplate($scopeItems, $innerContent)
    {
        // Extract the items into the current scope
        extract($scopeItems);
 
        ob_start();
 
        // Fire a `before` event
        $this->onBeforeGetContents();
        include $this->template;
 
        // Fire an `after` event
        $this->onAfterGetContents();
        $contents = ob_get_contents();
        ob_end_clean();
 
        return $contents;
    }
 
    public function finishRender($contents)
    {
        $event = new \Symfony\Component\EventDispatcher\GenericEvent();
        $event->setArgument('view', $this);
        Events::dispatch('on_render_complete', $event);
 
        return $contents;
    }
 
    /**
     * Function responsible for outputting header items.
/var/www/strutt_public/concrete/src/View/View.php
    protected function onBeforeGetContents()
    {
        $event = new \Symfony\Component\EventDispatcher\GenericEvent();
        $event->setArgument('view', $this);
        Events::dispatch('on_before_render', $event);
        $this->themeObject->registerAssets();
    }
 
    public function renderViewContents($scopeItems)
    {
        $contents = '';
 
        // Render the main view file
        if ($this->innerContentFile) {
            $contents = $this->renderInnerContents($scopeItems);
        }
 
        // Render the template around it
        if (file_exists($this->template)) {
            $contents = $this->renderTemplate($scopeItems, $contents);
        }
 
        return $contents;
    }
 
    /**
     * Render the file set to $this->innerContentFile
     * @param $scopeItems
     * @return string
     */
    protected function renderInnerContents($scopeItems)
    {
        // Extract the items into the current scope
        extract($scopeItems);
 
        ob_start();
        include $this->innerContentFile;
        $innerContent = ob_get_contents();
        ob_end_clean();
 
/var/www/strutt_public/concrete/src/View/AbstractView.php
            $helpers = $this->controller->getHelperObjects();
            $return = array_merge($this->scopeItems, $sets, $helpers);
        } else {
            $return = $this->scopeItems;
        }
        $return['view'] = $this;
        $return['controller'] = $this->controller;
        return $return;
    }
 
    public function render($state = false)
    {
        if ($this instanceof View) {
            $this->setRequestInstance($this);
        }
        $this->start($state);
        $this->setupRender();
        $this->startRender();
        $scopeItems = $this->getScopeItems();
        $contents = $this->renderViewContents($scopeItems);
        $contents = $this->postProcessViewContents($contents);
        $response = $this->finishRender($contents);
        if ($this instanceof View) {
            $this->revertRequestInstance();
        }
 
        return $response;
    }
 
    public function renderViewContents($scopeItems)
    {
        if (file_exists($this->template)) {
            extract($scopeItems);
            ob_start();
            $this->onBeforeGetContents();
            include $this->template;
            $this->onAfterGetContents();
            $contents = ob_get_contents();
            ob_end_clean();
 
/var/www/strutt_public/concrete/src/Http/ResponseFactory.php
        $cnt = $this->app->make(PageForbidden::class);
        $this->controller($cnt, $code, $headers);
    }
 
    /**
     * {@inheritdoc}
     */
    public function redirect($to, $code = Response::HTTP_MOVED_PERMANENTLY, $headers = [])
    {
        return RedirectResponse::create($to, $code, $headers);
    }
 
    /**
     * {@inheritdoc}
     */
    public function view(View $view, $code = Response::HTTP_OK, $headers = [])
    {
        $this->localization->pushActiveContext(Localization::CONTEXT_SITE);
        try {
            $contents = $view->render();
 
            return $this->create($contents, $code, $headers);
        } finally {
            $this->localization->popActiveContext();
        }
    }
 
    /**
     * {@inheritdoc}
     */
    public function controller(Controller $controller, $code = Response::HTTP_OK, $headers = [])
    {
        $this->localization->pushActiveContext(Localization::CONTEXT_SITE);
        try {
            $request = $this->request;
 
            if ($response = $controller->on_start()) {
                return $response;
            }
 
/var/www/strutt_public/concrete/src/Http/ResponseFactory.php
                if ($response = $controller->runAction('view')) {
                    return $response;
                }
            }
 
            $view = $controller->getViewObject();
 
            // Mobile theme
            if ($this->config->get('concrete.misc.mobile_theme_id') > 0) {
                $md = $this->app->make(MobileDetect::class);
                if ($md->isMobile()) {
                    $mobileTheme = Theme::getByID($this->app->config->get('concrete.misc.mobile_theme_id'));
                    if ($mobileTheme instanceof Theme) {
                        $view->setViewTheme($mobileTheme);
                        $controller->setTheme($mobileTheme);
                    }
                }
            }
 
            return $this->view($view, $code, $headers);
        } finally {
            $this->localization->popActiveContext();
        }
    }
 
    /**
     * {@inheritdoc}
     */
    public function collection(Collection $collection, $code = Response::HTTP_OK, $headers = [])
    {
        if (!$this->app) {
            throw new \RuntimeException('Cannot resolve collections without a reference to the application');
        }
 
        $dl = $this->app->make('multilingual/detector');
        $request = $this->request;
 
        if ($collection->isError() && $collection->getError() == COLLECTION_NOT_FOUND) {
            if ($response = $this->collectionNotFound($collection, $request, $headers)) {
                return $response;
/var/www/strutt_public/concrete/src/Http/ResponseFactory.php
        $pe = new Event($collection);
        $pe->setUser($u);
        $pe->setRequest($request);
        $this->app['director']->dispatch('on_page_view', $pe);
 
        // Core menu items
        $item = new RelationListItem();
        $menu = $this->app->make('helper/concrete/ui/menu');
        $menu->addMenuItem($item);
 
        // Multisite item
        $item = new SiteListItem();
        $menu->addMenuItem($item);
 
        $controller = $collection->getPageController();
 
        // we update the current page with the one bound to this controller.
        $collection->setController($controller);
 
        return $this->controller($controller);
    }
 
    private function collectionNotFound(Collection $collection, Request $request, array $headers)
    {
        // if we don't have a path and we're doing cID, then this automatically fires a 404.
        if (!$request->getPath() && $request->get('cID')) {
            return $this->notFound('', Response::HTTP_NOT_FOUND, $headers);
        }
 
        // let's test to see if this is, in fact, the home page,
        // and we're routing arguments onto it (which is screwing up the path.)
        $home = Page::getByID(Page::getHomePageID());
        $request->setCurrentPage($home);
        $homeController = $home->getPageController();
        $homeController->setupRequestActionAndParameters($request);
 
        $response = $homeController->validateRequest();
        if ($response instanceof \Symfony\Component\HttpFoundation\Response) {
            return $response;
        } elseif ($response === true) {
/var/www/strutt_public/concrete/src/Http/DefaultDispatcher.php
                new DispatcherDelegate($dispatcher)
            );
            $stack->setApplication($this->app);
            foreach($route->getMiddlewares() as $middleware) {
                if (is_string($middleware->getMiddleware())) {
                    $inflatedMiddleware =  $this->app->make($middleware->getMiddleware());
                } else {
                    $inflatedMiddleware = $middleware->getMiddleware();
                }
                $stack = $stack->withMiddleware(
                    $inflatedMiddleware,
                    $middleware->getPriority()
                );
            }
            return $stack->process($request);
        } catch (ResourceNotFoundException $e) {
        } catch (MethodNotAllowedException $e) {
        }
        $c = \Page::getFromRequest($request);
        $response = $this->app->make(ResponseFactoryInterface::class)->collection($c);
 
        return $response;
    }
 
    /**
     * @param \Symfony\Component\Routing\RouteCollection $routes
     * @param string $path
     *
     * @return \Symfony\Component\Routing\RouteCollection
     */
    private function filterRouteCollectionForPath(RouteCollection $routes, $path)
    {
        $result = new RouteCollection();
        foreach ($routes->getResources() as $resource) {
            $result->addResource($resource);
        }
        foreach ($routes->all() as $name => $route) {
            $routePath = $route->getPath();
            $p = strpos($routePath, '{');
            $skip = false;
/var/www/strutt_public/concrete/src/Http/DefaultDispatcher.php
    /**
     * @param \Symfony\Component\HttpFoundation\Request $request
     *
     * @return SymfonyResponse
     */
    public function dispatch(SymfonyRequest $request)
    {
        $path = rawurldecode($request->getPathInfo());
 
        if (substr($path, 0, 3) == '../' || substr($path, -3) == '/..' || strpos($path, '/../') ||
            substr($path, 0, 3) == '..\\' || substr($path, -3) == '\\..' || strpos($path, '\\..\\')) {
            throw new UserMessageException(t('Invalid path traversal. Please make this request with a valid HTTP client.'));
        }
 
        $response = null;
        if ($this->app->isInstalled()) {
            $response = $this->getEarlyDispatchResponse();
        }
        if ($response === null) {
            $response = $this->handleDispatch($request);
        }
 
        return $response;
    }
 
    private function getEarlyDispatchResponse()
    {
        $validator = $this->app->make(SessionValidator::class);
        if ($validator->hasActiveSession()) {
            $session = $this->app['session'];
            if (!$session->has('uID')) {
                User::verifyAuthTypeCookie();
            }
 
            // User may have been logged in, so lets check status again.
            if ($session->has('uID') && $session->get('uID') > 0 && $response = $this->validateUser()) {
                return $response;
            }
        }
    }
/var/www/strutt_public/concrete/src/Http/Middleware/DispatcherDelegate.php
    private $dispatcher;
 
    /**
     * DispatcherFrame constructor.
     * @param \Concrete\Core\Http\DispatcherInterface $dispatcher
     */
    public function __construct(DispatcherInterface $dispatcher)
    {
        $this->dispatcher = $dispatcher;
    }
 
    /**
     * Dispatch the next available middleware and return the response.
     *
     * @param Request $request
     * @return Response
     */
    public function next(Request $request)
    {
        return $this->dispatcher->dispatch($request);
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/ThumbnailMiddleware.php
     * @var \Concrete\Core\Config\Repository\Repository
     */
    private $config;
 
    public function __construct(Repository $config)
    {
        $this->config = $config;
    }
 
    /**
     * Process the request and return a response.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @param DelegateInterface $frame
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function process(Request $request, DelegateInterface $frame)
    {
        $response = $frame->next($request);
 
        if ($response && $this->app->isInstalled() && $this->config->get('concrete.misc.basic_thumbnailer_generation_strategy') == 'now') {
            $responseStatusCode = (int) $response->getStatusCode();
            if ($responseStatusCode === 200 || $responseStatusCode === 404) {
                $database = $this->tryGetConnection();
                if ($database !== null) {
                    if ($responseStatusCode === 404) {
                        $searchThumbnailPath = $request->getRequestUri();
                    } else {
                        $searchThumbnailPath = null;
                    }
                    $thumbnail = $this->getThumbnailToGenerate($database, $searchThumbnailPath);
                    if ($thumbnail !== null) {
                        $this->markThumbnailAsBuilt($database, $thumbnail);
                        if ($this->generateThumbnail($thumbnail)) {
                            if ($this->couldBeTheRequestedThumbnail($thumbnail, $searchThumbnailPath)) {
                                $response = $this->buildRedirectToThumbnailResponse($request);
                            }
                        }
                    }
/var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php
 
    public function __construct(
        MiddlewareInterface $middleware,
        DelegateInterface $nextDelegate,
        HttpFoundationFactory $foundationFactory
    ) {
        $this->middleware = $middleware;
        $this->nextDelegate = $nextDelegate;
        $this->foundationFactory = $foundationFactory;
    }
 
    /**
     * Dispatch the next available middleware and return the response.
     *
     * @param Request $request
     * @return Response
     */
    public function next(Request $request)
    {
        $response = $this->middleware->process($request, $this->nextDelegate);
 
        // Negotiate PSR7 responses
        if ($response instanceof ResponseInterface) {
            return $this->foundationFactory->createResponse($response);
        }
 
        return $response;
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/FrameOptionsMiddleware.php
    private $config;
 
    /**
     * @var \Concrete\Core\Utility\Service\Validation\Strings
     */
    private $stringValidator;
 
    public function __construct(Repository $config, Strings $stringValidator)
    {
        $this->config = $config;
        $this->stringValidator = $stringValidator;
    }
 
    /**
     * @param \Concrete\Core\Http\Middleware\DelegateInterface $frame
     * @return Response
     */
    public function process(Request $request, DelegateInterface $frame)
    {
        $response = $frame->next($request);
 
        if ($response->headers->has('X-Frame-Options') === false) {
            $x_frame_options = $this->config->get('concrete.security.misc.x_frame_options');
            if ($this->stringValidator->notempty($x_frame_options)) {
                $response->headers->set('X-Frame-Options', $x_frame_options);
            }
        }
 
        return $response;
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php
 
    public function __construct(
        MiddlewareInterface $middleware,
        DelegateInterface $nextDelegate,
        HttpFoundationFactory $foundationFactory
    ) {
        $this->middleware = $middleware;
        $this->nextDelegate = $nextDelegate;
        $this->foundationFactory = $foundationFactory;
    }
 
    /**
     * Dispatch the next available middleware and return the response.
     *
     * @param Request $request
     * @return Response
     */
    public function next(Request $request)
    {
        $response = $this->middleware->process($request, $this->nextDelegate);
 
        // Negotiate PSR7 responses
        if ($response instanceof ResponseInterface) {
            return $this->foundationFactory->createResponse($response);
        }
 
        return $response;
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/CookieMiddleware.php
     * @var \Concrete\Core\Cookie\ResponseCookieJar
     */
    private $responseCookieJar;
 
    /**
     * @param \Concrete\Core\Cookie\ResponseCookieJar $responseCookieJar
     */
    public function __construct(ResponseCookieJar $responseCookieJar)
    {
        $this->responseCookieJar = $responseCookieJar;
    }
 
    /**
     * {@inheritdoc}
     *
     * @see \Concrete\Core\Http\Middleware\MiddlewareInterface::process()
     */
    public function process(Request $request, DelegateInterface $frame)
    {
        $response = $frame->next($request);
 
        $cleared = $this->responseCookieJar->getClearedCookies();
        foreach ($cleared as $cookie) {
            $response->headers->clearCookie($cookie, DIR_REL . '/');
        }
 
        $cookies = $this->responseCookieJar->getCookies();
        foreach ($cookies as $cookie) {
            $response->headers->setCookie($cookie);
        }
 
        return $response;
    }
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php
 
    public function __construct(
        MiddlewareInterface $middleware,
        DelegateInterface $nextDelegate,
        HttpFoundationFactory $foundationFactory
    ) {
        $this->middleware = $middleware;
        $this->nextDelegate = $nextDelegate;
        $this->foundationFactory = $foundationFactory;
    }
 
    /**
     * Dispatch the next available middleware and return the response.
     *
     * @param Request $request
     * @return Response
     */
    public function next(Request $request)
    {
        $response = $this->middleware->process($request, $this->nextDelegate);
 
        // Negotiate PSR7 responses
        if ($response instanceof ResponseInterface) {
            return $this->foundationFactory->createResponse($response);
        }
 
        return $response;
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/ApplicationMiddleware.php
 * Middleware for applying state changes to the application
 * @package Concrete\Core\Http\Middleware
 */
class ApplicationMiddleware implements MiddlewareInterface, ApplicationAwareInterface
{
 
    use ApplicationAwareTrait;
 
    /**
     * Apply the request instance to the request singleton
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @param \Concrete\Core\Http\Middleware\DelegateInterface $frame
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function process(Request $request, DelegateInterface $frame)
    {
        \Concrete\Core\Http\Request::setInstance($request);
        $this->app->instance('Concrete\Core\Http\Request', $request);
 
        return $frame->next($request);
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareDelegate.php
 
    public function __construct(
        MiddlewareInterface $middleware,
        DelegateInterface $nextDelegate,
        HttpFoundationFactory $foundationFactory
    ) {
        $this->middleware = $middleware;
        $this->nextDelegate = $nextDelegate;
        $this->foundationFactory = $foundationFactory;
    }
 
    /**
     * Dispatch the next available middleware and return the response.
     *
     * @param Request $request
     * @return Response
     */
    public function next(Request $request)
    {
        $response = $this->middleware->process($request, $this->nextDelegate);
 
        // Negotiate PSR7 responses
        if ($response instanceof ResponseInterface) {
            return $this->foundationFactory->createResponse($response);
        }
 
        return $response;
    }
 
}
 
/var/www/strutt_public/concrete/src/Http/Middleware/MiddlewareStack.php
    public function withoutMiddleware(MiddlewareInterface $middleware)
    {
        $stack = clone $this;
 
        $stack->middleware = array_map(function($priorityGroup) use ($middleware) {
            return array_map(function($stackMiddleware) use ($middleware)  {
                return $middleware === $stackMiddleware ? null : $stackMiddleware;
            }, $priorityGroup);
        }, $stack->middleware);
 
        return $stack;
    }
 
    /**
     * @inheritdoc
     */
    public function process(Request $request)
    {
        $stack = $this->getStack();
        return $stack->next($request);
    }
 
    /**
     * Reduce middleware into a stack of functions that each call the next
     * @return callable
     */
    private function getStack()
    {
        $processed = [];
 
        foreach ($this->middlewareGenerator() as $middleware) {
            $processed[] = $middleware;
        }
 
        $middleware = array_reverse($processed);
        $stack = array_reduce($middleware, $this->getZipper(), $this->dispatcher);
 
        return $stack;
    }
 
/var/www/strutt_public/concrete/src/Http/DefaultServer.php
     */
    public function removeMiddleware(MiddlewareInterface $middleware)
    {
        $this->stack = $this->stack->withoutMiddleware($middleware);
        return $this;
    }
 
    /**
     * Take a request and pass it through middleware, then return the response
     * @param SymfonyRequest $request
     * @return SymfonyResponse
     */
    public function handleRequest(SymfonyRequest $request)
    {
        $stack = $this->stack;
        if ($stack instanceof MiddlewareStack) {
            $stack = $stack->withDispatcher($this->app->make(DispatcherDelegate::class, [$this->dispatcher]));
        }
 
        return $stack->process($request);
    }
 
}
 
/var/www/strutt_public/concrete/src/Foundation/Runtime/Run/DefaultRunner.php
 
                // Register legacy config values
                'registerLegacyConfigValues',
 
                // Handle loading permission keys
                'handlePermissionKeys',
 
                // Handle eventing
                'handleEventing',
            ]);
        } else {
            $this->initializeSystemTimezone();
            $this->preloadClassAliases();
        }
 
        // Create the request to use
        $request = $this->createRequest();
 
        if (!$response) {
            $response = $this->server->handleRequest($request);
        }
 
        // Prepare and return the response
        return $response->prepare($request);
    }
 
    /**
     * Define the base url if not defined
     * This will define `BASE_URL` to whatever is resolved from the resolver.
     *
     * @deprecated In a future major version this will be part of HTTP middleware
     *
     * @return Response|void Returns a response if an error occurs
     */
    protected function initializeLegacyURLDefinitions()
    {
        if (!defined('BASE_URL')) {
            $resolver = $this->getUrlResolver();
 
            try {
/var/www/strutt_public/concrete/src/Foundation/Runtime/DefaultRuntime.php
            $this->status = self::STATUS_ACTIVE;
        }
    }
 
    /**
     * Begin the runtime.
     */
    public function run()
    {
        switch ($this->status) {
            case self::STATUS_ENDED:
                // We've already ended, lets just return
                return;
 
            case self::STATUS_INACTIVE:
                throw new \RuntimeException('Runtime has not yet booted.');
        }
 
        $runner = $this->getRunner();
        $response = $runner->run();
 
        if ($response) {
            $this->sendResponse($response);
        }
 
        return $response;
    }
 
    /**
     * The method that handles properly sending a response.
     *
     * @param \Symfony\Component\HttpFoundation\Response $response
     */
    protected function sendResponse(Response $response)
    {
        $response->send();
 
        // Set the status to ended
        $this->status = self::STATUS_ENDED;
    }
/var/www/strutt_public/concrete/dispatcher.php
 * Include all autoloaders.
 * ----------------------------------------------------------------------------
 */
require __DIR__ . '/bootstrap/autoload.php';
 
/*
 * ----------------------------------------------------------------------------
 * Begin concrete5 startup.
 * ----------------------------------------------------------------------------
 */
$app = require __DIR__ . '/bootstrap/start.php';
/** @var \Concrete\Core\Application\Application $app */
 
/*
 * ----------------------------------------------------------------------------
 * Run the runtime.
 * ----------------------------------------------------------------------------
 */
$runtime = $app->getRuntime();
if ($response = $runtime->run()) {
 
    /*
     * ------------------------------------------------------------------------
     * Shut it down.
     * ------------------------------------------------------------------------
     */
    $app->shutdown();
} else {
    return $app;
}
 
/var/www/strutt_public/index.php
<?php
 
require 'concrete/dispatcher.php';
 

Environment & details:

Key Value
Version 8.5.12
Installed Version 8.5.12
Database Version 20220319043123
Key Value
concrete.version 8.5.12
concrete.version_installed 8.5.12
concrete.version_db 20220319043123
concrete.installed true
concrete.locale en_US
concrete.charset UTF-8
concrete.charset_bom 
concrete.maintenance_mode false
concrete.debug.display_errors true
concrete.debug.detail debug
concrete.debug.error_reporting null
concrete.debug.hide_keys.config.0 ***********************
concrete.debug.hide_keys.config.1 ***********************************
concrete.debug.hide_keys.config.2 ******************************
concrete.debug.hide_keys.config.3 *********************************
concrete.debug.hide_keys.config.4 **************************************
concrete.debug.hide_keys.config.5 ********************************************
concrete.debug.hide_keys.config.6 ********************************************
concrete.debug.hide_keys.config.7 ************************
concrete.debug.hide_keys.config.8 ************
concrete.proxy.host null
concrete.proxy.port null
concrete.proxy.user null
concrete.proxy.password ***
concrete.upload.extensions *.flv;*.jpg;*.gif;*.jpeg;*.ico;*.docx;*.xla;*.png;*.psd;*.swf;*.doc;*.txt;*.xls;*.xlsx;*.csv;*.pdf;*.tiff;*.rtf;*.m4a;*.mov;*.wmv;*.mpeg;*.mpg;*.wav;*.3gp;*.avi;*.m4v;*.mp4;*.mp3;*.qt;*.ppt;*.pptx;*.kml;*.xml;*.svg;*.webm;*.ogg;*.ogv;*.html;*.js;*.zip
concrete.upload.extensions_blacklist *.php;*.php2;*.php3;*.php4;*.php5;*.php7;*.php8;*.phtml;*.phar;*.htaccess;*.pl;*.phpsh;*.pht;*.shtml;*.cgi
concrete.upload.chunking.enabled true
concrete.upload.chunking.chunkSize null
concrete.export.csv.include_bom false
concrete.export.csv.datetime_format Y-m-d\TH:i:sP
concrete.interface.panel.page_relations false
concrete.mail.method smtp
concrete.mail.methods.smtp.server smtp.postmarkapp.com
concrete.mail.methods.smtp.port 587
concrete.mail.methods.smtp.username 5b848bdf-b1a0-4bdf-af1f-33aeb433568c
concrete.mail.methods.smtp.password ************************************
concrete.mail.methods.smtp.encryption
concrete.mail.methods.smtp.messages_per_connection null
concrete.mail.methods.smtp.helo_domain localhost
concrete.cache.enabled true
concrete.cache.lifetime 21600
concrete.cache.overrides true
concrete.cache.blocks true
concrete.cache.assets true
concrete.cache.theme_css true
concrete.cache.pages blocks
concrete.cache.doctrine_dev_mode false
concrete.cache.full_page_lifetime default
concrete.cache.full_page_lifetime_value null
concrete.cache.full_contents_assets_hash false
concrete.cache.directory /var/www/strutt_public/application/files/cache
concrete.cache.directory_relative null
concrete.cache.page.directory /var/www/strutt_public/application/files/cache/pages
concrete.cache.page.adapter file
concrete.cache.levels.overrides.drivers.core_ephemeral.class \Stash\Driver\Ephemeral
concrete.cache.levels.overrides.drivers.core_filesystem.class Concrete\Core\Cache\Driver\FileSystemStashDriver
concrete.cache.levels.overrides.drivers.core_filesystem.options.path /var/www/strutt_public/application/files/cache/overrides
concrete.cache.levels.overrides.drivers.core_filesystem.options.dirPermissions 508
concrete.cache.levels.overrides.drivers.core_filesystem.options.filePermissions 436
concrete.cache.levels.overrides.drivers.redis.class Concrete\Core\Cache\Driver\RedisStashDriver
concrete.cache.levels.overrides.drivers.redis.options.prefix c5_overrides
concrete.cache.levels.overrides.drivers.redis.options.database 0
concrete.cache.levels.overrides.preferred_driver core_filesystem
concrete.cache.levels.expensive.drivers.core_ephemeral.class \Stash\Driver\Ephemeral
concrete.cache.levels.expensive.drivers.core_filesystem.class \Stash\Driver\FileSystem
concrete.cache.levels.expensive.drivers.core_filesystem.options.path /var/www/strutt_public/application/files/cache/expensive
concrete.cache.levels.expensive.drivers.core_filesystem.options.dirPermissions 509
concrete.cache.levels.expensive.drivers.core_filesystem.options.filePermissions 509
concrete.cache.levels.expensive.drivers.redis.class Concrete\Core\Cache\Driver\RedisStashDriver
concrete.cache.levels.expensive.drivers.redis.options.prefix c5_expensive
concrete.cache.levels.expensive.drivers.redis.options.database 0
concrete.cache.levels.expensive.preferred_driver core_filesystem
concrete.cache.levels.object.drivers.core_ephemeral.class \Stash\Driver\Ephemeral
concrete.cache.levels.object.drivers.redis.class Concrete\Core\Cache\Driver\RedisStashDriver
concrete.cache.levels.object.drivers.redis.options.prefix c5_object
concrete.cache.levels.object.drivers.redis.options.database 0
concrete.cache.levels.object.preferred_driver core_ephemeral
concrete.cache.clear.thumbnails false
concrete.cache.clear.last_cleared 1648642409
concrete.design.enable_custom true
concrete.design.enable_layouts true
concrete.log.emails 1
concrete.log.errors 1
concrete.log.spam false
concrete.log.api false
concrete.log.enable_dashboard_report true
concrete.log.configuration.mode simple
concrete.log.configuration.simple.core_logging_level NOTICE
concrete.log.configuration.simple.handler database
concrete.log.configuration.simple.file.file
concrete.log.queries.log 0
concrete.log.queries.clear_on_reload 0
concrete.jobs.enable_scheduling true
concrete.filesystem.temp_directory null
concrete.filesystem.permissions.file 509
concrete.filesystem.permissions.directory 509
concrete.email.enabled true
concrete.email.default.address ************************
concrete.email.default.name Strutt & Parker
concrete.email.form_block.address ***
concrete.email.forgot_password.address ***
concrete.email.forgot_password.name null
concrete.email.validate_registration.address ***
concrete.email.validate_registration.name null
concrete.email.workflow_notification.address ***
concrete.email.workflow_notification.name null
concrete.form.store_form_submissions auto
concrete.marketplace.enabled true
concrete.marketplace.request_timeout 30
concrete.marketplace.token null
concrete.marketplace.site_token null
concrete.marketplace.intelligent_search true
concrete.marketplace.log_requests false
concrete.external.intelligent_search_help false
concrete.external.news false
concrete.external.news_overlay false
concrete.misc.user_timezones false
concrete.misc.package_backup_directory /var/www/strutt_public/application/files/trash
concrete.misc.enable_progressive_page_reindex true
concrete.misc.mobile_theme_id 0
concrete.misc.sitemap_approve_immediately true
concrete.misc.enable_translate_locale_en_us true
concrete.misc.page_search_index_lifetime 259200
concrete.misc.enable_trash_can true
concrete.misc.default_jpeg_image_compression 80
concrete.misc.default_png_image_compression 9
concrete.misc.default_thumbnail_format auto
concrete.misc.inplace_image_operations_limit 4194304
concrete.misc.basic_thumbnailer_generation_strategy now
concrete.misc.help_overlay true
concrete.misc.require_version_comments false
concrete.misc.enable_move_blocktypes_across_sets false
concrete.misc.image_editor_cors_policy.enable_cross_origin false
concrete.misc.image_editor_cors_policy.anonymous_request true
concrete.misc.generator_tag_display_in_header true
concrete.misc.latest_version 8.5.13
concrete.misc.do_page_reindex_check false
concrete.misc.access_entity_updated 1698900652
concrete.misc.login_redirect DESKTOP
concrete.theme.compress_preprocessor_output true
concrete.theme.generate_less_sourcemap false
concrete.updates.enable_auto_update_packages false
concrete.updates.enable_permissions_protection true
concrete.updates.check_threshold 172800
concrete.updates.services.get_available_updates https://marketplace.concretecms.com/tools/update_core
concrete.updates.services.inspect_update https://marketplace.concretecms.com/tools/inspect_update
concrete.updates.skip_core false
concrete.paths.trash /!trash
concrete.paths.drafts /!drafts
concrete.icons.page_template.width 120
concrete.icons.page_template.height 90
concrete.icons.theme_thumbnail.width 120
concrete.icons.theme_thumbnail.height 90
concrete.icons.file_manager_listing.handle file_manager_listing
concrete.icons.file_manager_listing.width 60
concrete.icons.file_manager_listing.height 60
concrete.icons.file_manager_detail.handle file_manager_detail
concrete.icons.file_manager_detail.width 400
concrete.icons.file_manager_detail.height 400
concrete.icons.user_avatar.width 80
concrete.icons.user_avatar.height 80
concrete.icons.user_avatar.default /concrete/images/avatar_none.png
concrete.file_manager.images.use_exif_data_to_rotate_images false
concrete.file_manager.images.manipulation_library gd
concrete.file_manager.images.create_high_dpi_thumbnails true
concrete.file_manager.images.preview_image_size small
concrete.file_manager.images.preview_image_popover true
concrete.file_manager.images.svg_sanitization.action sanitize
concrete.file_manager.images.svg_sanitization.allowed_tags
concrete.file_manager.images.svg_sanitization.allowed_attributes
concrete.file_manager.images.image_editor_save_area_background_color
concrete.file_manager.items_per_page_options.0 10
concrete.file_manager.items_per_page_options.1 25
concrete.file_manager.items_per_page_options.2 50
concrete.file_manager.items_per_page_options.3 100
concrete.file_manager.items_per_page_options.4 250
concrete.file_manager.results 10
concrete.search_users.results 10
concrete.sitemap_xml.file sitemap.xml
concrete.sitemap_xml.frequency weekly
concrete.sitemap_xml.priority 0.5
concrete.accessibility.toolbar_titles true
concrete.accessibility.toolbar_large_font false
concrete.accessibility.display_help_system true
concrete.accessibility.toolbar_tooltips true
concrete.i18n.choose_language_login false
concrete.i18n.auto_install_package_languages true
concrete.i18n.community_translation.entry_point https://translate.concretecms.org/api
concrete.i18n.community_translation.api_token
concrete.i18n.community_translation.progress_limit 60
concrete.i18n.community_translation.cache_lifetime 3600
concrete.i18n.community_translation.package_url https://translate.concretecms.org/translate/package
concrete.urls.concrete5 http://marketplace.concretecms.com
concrete.urls.concrete5_secure https://marketplace.concretecms.com
concrete.urls.newsflow http://newsflow.concrete5.org
concrete.urls.background_feed //backgroundimages.concrete5.org/wallpaper
concrete.urls.privacy_policy //www.concretecms.com/about/legal/privacy-policy
concrete.urls.background_feed_secure https://backgroundimages.concrete5.org/wallpaper
concrete.urls.background_info http://backgroundimages.concrete5.org/get_image_data.php
concrete.urls.videos https://www.youtube.com/user/concrete5cms/videos
concrete.urls.help.developer http://documentation.concrete5.org/developers
concrete.urls.help.user http://documentation.concrete5.org/editors
concrete.urls.help.forum http://www.concrete5.org/community/forums
concrete.urls.help.slack https://www.concrete5.org/slack
concrete.urls.paths.menu_help_service /tools/get_remote_help_list/
concrete.urls.paths.site_page /private/sites
concrete.urls.paths.newsflow_slot_content /tools/slot_content/
concrete.urls.paths.marketplace.projects /profile/projects/
concrete.urls.paths.marketplace.connect /marketplace/connect
concrete.urls.paths.marketplace.connect_success /marketplace/connect/-/connected
concrete.urls.paths.marketplace.connect_validate /marketplace/connect/-/validate
concrete.urls.paths.marketplace.connect_new_token /marketplace/connect/-/generate_token
concrete.urls.paths.marketplace.checkout /cart/-/add
concrete.urls.paths.marketplace.purchases /marketplace/connect/-/get_available_licenses
concrete.urls.paths.marketplace.item_information /marketplace/connect/-/get_item_information
concrete.urls.paths.marketplace.item_free_license /marketplace/connect/-/enable_free_license
concrete.urls.paths.marketplace.remote_item_list /marketplace/
concrete.white_label.logo /application/themes/rawnet/images/rawnet.png
concrete.white_label.name Rawnet Ltd
concrete.white_label.background_image none
concrete.session.name CONCRETE5
concrete.session.handler file
concrete.session.redis.database 1
concrete.session.save_path null
concrete.session.max_lifetime 7200
concrete.session.gc_probability 1
concrete.session.gc_divisor 100
concrete.session.cookie.cookie_path false
concrete.session.cookie.cookie_lifetime 0
concrete.session.cookie.cookie_domain false
concrete.session.cookie.cookie_secure true
concrete.session.cookie.cookie_httponly true
concrete.session.cookie.cookie_raw false
concrete.session.cookie.cookie_samesite null
concrete.session.remember_me.lifetime 1209600
concrete.user.registration.enabled true
concrete.user.registration.type validate_email
concrete.user.registration.captcha false
concrete.user.registration.email_registration true
concrete.user.registration.display_username_field true
concrete.user.registration.display_confirm_password_field true
concrete.user.registration.validate_email true
concrete.user.registration.approval false
concrete.user.registration.notification null
concrete.user.registration.notification_email false
concrete.user.group.badge.default_point_value 50
concrete.user.username.maximum 64
concrete.user.username.minimum 3
concrete.user.username.allowed_characters.boundary A-Za-z0-9
concrete.user.username.allowed_characters.middle A-Za-z0-9_\.
concrete.user.username.allowed_characters.requirement_string A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end).
concrete.user.username.allowed_characters.error_string A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end).
concrete.user.username.allow_spaces_migrated true
concrete.user.username.allow_spaces true
concrete.user.password.maximum 128
concrete.user.password.minimum 5
concrete.user.password.required_special_characters 0
concrete.user.password.required_lower_case 0
concrete.user.password.required_upper_case 0
concrete.user.password.reuse 0
concrete.user.password.hash_portable false
concrete.user.password.hash_cost_log2 12
concrete.user.password.legacy_salt
concrete.user.email.test_mx_record false
concrete.user.email.strict true
concrete.user.private_messages.throttle_max 20
concrete.user.private_messages.throttle_max_timespan 15
concrete.user.deactivation.enable_login_threshold_deactivation false
concrete.user.deactivation.login.threshold 120
concrete.user.deactivation.authentication_failure.enabled false
concrete.user.deactivation.authentication_failure.amount 5
concrete.user.deactivation.authentication_failure.duration 300
concrete.user.deactivation.message This user is inactive. Please contact us regarding this account.
concrete.spam.whitelist_group 0
concrete.spam.notify_email
concrete.calendar.colors.text #ffffff
concrete.calendar.colors.background #3A87AD
concrete.security.session.invalidate_on_user_agent_mismatch true
concrete.security.session.invalidate_on_ip_mismatch true
concrete.security.session.invalidate_inactive_users.enabled false
concrete.security.session.invalidate_inactive_users.time 300
concrete.security.misc.x_frame_options SAMEORIGIN
concrete.security.ban.ip.enabled false
concrete.security.trusted_proxies.ips.0 10.190.254.6
concrete.security.trusted_proxies.ips.1 10.181.64.147
concrete.security.trusted_proxies.ips.2 10.189.247.3
concrete.permissions.forward_to_login true
concrete.permissions.model simple
concrete.seo.exclude_words
concrete.seo.url_rewriting 1
concrete.seo.url_rewriting_all false
concrete.seo.redirect_to_canonical_url 0
concrete.seo.canonical_url http://www.struttandparker.com
concrete.seo.canonical_url_alternative null
concrete.seo.trailing_slash false
concrete.seo.title_format %2$s | %1$s
concrete.seo.title_segment_separator |
concrete.seo.page_path_separator -
concrete.seo.group_name_separator /
concrete.seo.segment_max_length 128
concrete.seo.paging_string ccm_paging_p
concrete.seo.canonical_ssl_url https://www.struttandparker.com
concrete.seo.tracking.code <style> .important-message-banner--fixed.important-message-banner--bottom { visibility: hidden!important; } .important-message-banner--fixed { visibility: hidden!important; } </style>
concrete.seo.tracking.code_position top
concrete.statistics.track_downloads true
concrete.limits.sitemap_pages 100
concrete.limits.delete_pages 100
concrete.limits.copy_pages 10
concrete.limits.page_search_index_batch 200
concrete.limits.job_queue_batch 10
concrete.limits.style_customizer.size_min -50
concrete.limits.style_customizer.size_max 200
concrete.page.search.always_reindex false
concrete.composer.idle_timeout 1
concrete.api.enabled false
concrete.api.grant_types.client_credentials true
concrete.api.grant_types.authorization_code true
concrete.api.grant_types.password_credentials false
concrete.api.grant_types.refresh_token true
concrete.mutex.semaphore.priority 100
concrete.mutex.semaphore.class Concrete\Core\System\Mutex\SemaphoreMutex
concrete.mutex.file_lock.priority 50
concrete.mutex.file_lock.class Concrete\Core\System\Mutex\FileLockMutex
concrete.style_customizer.updater.ignored_values.preset-fonts-file Concrete\Core\StyleCustomizer\Style\Value\BasicValue
concrete.site Strutt & Parker
concrete.version_db_installed 20220319043123
empty
empty
empty
empty
Key Value
_sf2_attributes Array ( [formify_current_page_key] => 34552 )
_symfony_flashes Array ( )
_sf2_meta Array ( [u] => 1711622240 [c] => 1711622240 [l] => 0 )
Key Value
REDIRECT_SCRIPT_URL ****************
REDIRECT_SCRIPT_URI **********************************************
REDIRECT_HTTPS **
REDIRECT_STATUS ***
SCRIPT_URL ****************
SCRIPT_URI **********************************************
HTTPS **
HTTP_USER_AGENT *********
HTTP_X_FORWARDED_FOR **************
HTTP_ACCEPT ***
HTTP_SSLCLIENTCERTSTATUS ************
HTTP_X_FORWARDED_PROTO *****
HTTP_SSLCLIENTCIPHER *************************************************
HTTP_HOST ***********************
HTTP_REFERER **********************************************
HTTP_SSLSESSIONID
HTTP_X_CLUSTER_CLIENT_IP **************
HTTP_X_FORWARDED_PORT ***
HTTP_CONNECTION **********
CONTENT_LENGTH *
PATH **********************************************************************
SERVER_SIGNATURE
SERVER_SOFTWARE ******
SERVER_NAME ***********************
SERVER_ADDR *************
SERVER_PORT **
REMOTE_ADDR ************
DOCUMENT_ROOT **********************
REQUEST_SCHEME ****
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT **********************
SERVER_ADMIN ******************
SCRIPT_FILENAME ********************************
REMOTE_PORT *****
REDIRECT_URL ****************
GATEWAY_INTERFACE *******
SERVER_PROTOCOL ********
REQUEST_METHOD ***
QUERY_STRING
REQUEST_URI ****************
SCRIPT_NAME **********
PHP_SELF **********
REQUEST_TIME_FLOAT ***
REQUEST_TIME ***
empty
0. Concrete\Core\Error\Handler\ErrorHandler
1. Concrete\Core\Error\Handler\JsonErrorHandler