Вход Регистрация
Файл: concrete5.7.5.6/concrete/blocks/search/controller.php
Строк: 157
<?php

namespace ConcreteBlockSearch;

use 
Database;
use 
CollectionAttributeKey;
use 
ConcreteCorePagePageList;
use 
ConcreteCoreBlockBlockController;
use 
Page;
use 
Core;

class 
Controller extends BlockController
{
    protected 
$btTable 'btSearch';
    protected 
$btInterfaceWidth "400";
    protected 
$btInterfaceHeight "420";
    protected 
$btWrapperClass 'ccm-ui';
    protected 
$btExportPageColumns = array('postTo_cID');
    protected 
$btCacheBlockRecord true;
    protected 
$btCacheBlockOutput null;

    public 
$title "";
    public 
$buttonText ">";
    public 
$baseSearchPath "";
    public 
$resultsURL "";
    public 
$postTo_cID "";

    protected 
$hColor '#EFE795';

    public function 
highlightedMarkup($fulltext$highlight)
    {
        if (!
$highlight) {
            return 
$fulltext;
        }

        
$this->hText $fulltext;
        
$this->hHighlight $highlight;
        
$this->hText = @preg_replace('#' preg_quote($this->hHighlight'#') . '#ui''<span style="background-color:'$this->hColor .';">$0</span>'$this->hText);

        return 
$this->hText;
    }

    public function 
highlightedExtendedMarkup($fulltext$highlight)
    {
        
$text = @preg_replace("#n|r#"' '$fulltext);

        
$matches = array();
        
$highlight str_replace(array('"'"'""&quot;"), ''$highlight); // strip the quotes as they mess the regex

        
if (!$highlight) {
            
$text Core::make('helper/text')->shorten($fulltext180);
            if (
strlen($fulltext) > 180) {
                
$text .= '&hellip;<wbr>';
            }

            return 
$text;
        }

        
$regex '([[:alnum:]|'|.|_|s]{0,45})'. preg_quote($highlight, '#') .'([[:alnum:]|.|_|s]{0,45})';
        
preg_match_all("#$regex#ui"$text$matches);

        if (!empty(
$matches[0])) {
            
$body_length 0;
            
$body_string = array();
            foreach (
$matches[0] as $line) {
                
$body_length += strlen($line);

                
$r $this->highlightedMarkup($line$highlight);
                if (
$r) {
                    
$body_string[] = $r;
                }
                if (
$body_length 150) {
                    break;
                }
            }
            if (!empty(
$body_string)) {
                return @
implode("&hellip;<wbr>"$body_string);
            }
        }
    }

    public function 
setHighlightColor($color)
    {
        
$this->hColor $color;
    }

    
/**
     * Used for localization. If we want to localize the name/description we have to include this.
     */
    
public function getBlockTypeDescription()
    {
        return 
t("Add a search box to your site.");
    }

    public function 
getBlockTypeName()
    {
        return 
t("Search");
    }

    public function 
__construct($obj null)
    {
        
parent::__construct($obj);
    }

    public function 
indexExists()
    {
        
$db Database::connection();
        
$numRows $db->GetOne('select count(cID) from PageSearchIndex');

        return (
$numRows 0);
    }

    public function 
cacheBlockOutput()
    {
        if (
$this->btCacheBlockOutput === null) {
            
$this->btCacheBlockOutput = (($this->postTo_cID !== '' || $this->resultsURL !== '') && empty($_REQUEST['query']));
        }

        return 
$this->btCacheBlockOutput;
    }

    public function 
view()
    {
        
$c Page::getCurrentPage();
        
$this->set('title'$this->title);
        
$this->set('buttonText'$this->buttonText);
        
$this->set('baseSearchPath'$this->baseSearchPath);
        
$this->set('postTo_cID'$this->postTo_cID);

        
$resultsURL $c->getCollectionPath();

        if (
$this->resultsURL != '') {
            
$resultsURL $this->resultsURL;
        } elseif (
$this->postTo_cID != '') {
            
$resultsPage Page::getById($this->postTo_cID);
            
$resultsURL $resultsPage->cPath;
        }

        
$resultsURL Core::make('helper/text')->encodePath($resultsURL);

        
$this->set('resultTargetURL'$resultsURL);

        
//run query if display results elsewhere not set, or the cID of this page is set
        
if ($this->postTo_cID == '' && $this->resultsURL == '') {
            if (!empty(
$_REQUEST['query']) || isset($_REQUEST['akID']) || isset($_REQUEST['month'])) {
                
$this->do_search();
            }
        }
    }

    public function 
save($data)
    {
        
$data += array(
            
'title' => '',
            
'buttonText' => '',
            
'baseSearchPath' => '',
            
'searchUnderCID' => 0,
            
'postTo_cID' => 0,
            
'externalTarget' => 0,
            
'resultsURL' => '',
        );
        
$args = array();
        
$args['title'] = $data['title'];
        
$args['buttonText'] = $data['buttonText'];
        
$args['baseSearchPath'] = $data['baseSearchPath'];
        if (
$args['baseSearchPath'] == 'OTHER' && intval($data['searchUnderCID']) > 0) {
            
$customPathC Page::getByID(intval($data['searchUnderCID']));
            if (!
$customPathC) {
                
$args['baseSearchPath'] = '';
            } else {
                
$args['baseSearchPath'] = $customPathC->getCollectionPath();
            }
        }
        if (
trim($args['baseSearchPath']) == '/' || strlen(trim($args['baseSearchPath'])) == 0) {
            
$args['baseSearchPath'] = '';
        }

        if (
intval($data['postTo_cID']) > 0) {
            
$args['postTo_cID'] = intval($data['postTo_cID']);
        } else {
            
$args['postTo_cID'] = '';
        }

        
$args['resultsURL'] = ($data['externalTarget'] == && strlen($data['resultsURL']) > 0) ? trim($data['resultsURL']) : '';
        
parent::save($args);
    }

    public 
$reservedParams = array('page=','query=','search_paths[]=','submit=','search_paths%5B%5D=');

    public function 
do_search()
    {
        
$q $_REQUEST['query'];
        
// i have NO idea why we added this in rev 2000. I think I was being stupid. - andrew
        // $_q = trim(preg_replace('/[^A-Za-z0-9s']/i', ' ', $_REQUEST['query']));
        
$_q $q;

        
$ipl = new PageList();
        
$aksearch false;
        if (
is_array($_REQUEST['akID'])) {
            foreach (
$_REQUEST['akID'] as $akID => $req) {
                
$fak CollectionAttributeKey::getByID($akID);
                if (
is_object($fak)) {
                    
$type $fak->getAttributeType();
                    
$cnt $type->getController();
                    
$cnt->setAttributeKey($fak);
                    
$cnt->searchForm($ipl);
                    
$aksearch true;
                }
            }
        }

        if (isset(
$_REQUEST['month']) && isset($_REQUEST['year'])) {
            
$year = @intval($_REQUEST['year']);
            
$month abs(@intval($_REQUEST['month']));
            if (
strlen(abs($year)) < 4) {
                
$year = (($year 0) ? '-' '') . str_pad($year4'0'STR_PAD_LEFT);
            }
            if (
$month 12) {
                
$month str_pad($month2'0'STR_PAD_LEFT);
            }
            
$daysInMonth date('t'strtotime("$year-$month-01"));
            
$dh Core::make('helper/date');
            
/* @var $dh ConcreteCoreLocalizationServiceDate */
            
$start $dh->toDB("$year-$month-01 00:00:00"'user');
            
$end $dh->toDB("$year-$month-$daysInMonth 23:59:59"'user');
            
$ipl->filterByPublicDate($start'>=');
            
$ipl->filterByPublicDate($end'<=');
            
$aksearch true;
        }

        if (empty(
$_REQUEST['query']) && $aksearch == false) {
            return 
false;
        }

        if (isset(
$_REQUEST['query'])) {
            
$ipl->filterByKeywords($_q);
        }

        if (
is_array($_REQUEST['search_paths'])) {
            foreach (
$_REQUEST['search_paths'] as $path) {
                if (!
strlen($path)) {
                    continue;
                }
                
$ipl->filterByPath($path);
            }
        } elseif (
$this->baseSearchPath != '') {
            
$ipl->filterByPath($this->baseSearchPath);
        }

        
// TODO fix this
        //$ipl->filter(false, '(ak_exclude_search_index = 0 or ak_exclude_search_index is null)');

        
$pagination $ipl->getPagination();
        
$results $pagination->getCurrentPageResults();

        
$this->set('query'$q);
        
$this->set('results'$results);
        
$this->set('do_search'true);
        
$this->set('searchList'$ipl);
        
$this->set('pagination'$pagination);
    }
}
Онлайн: 3
Реклама