Phalcon Framework 3.2.2

SolrClientException: Solr HTTP Error 7: 'Couldn't connect to server'

/var/www/iLove2.0/apps/helpers/Helpers.php (919)
#0SolrClient->query(Object(SolrQuery))
/var/www/iLove2.0/apps/helpers/Helpers.php (919)
<?php
 
namespace Multiple\Helpers;
 
use Phalcon\Http\Request;
use Phalcon\Http\Response;
use Cocur\Slugify\Slugify;
use Detection\MobileDetect;
use Phalcon\Session\Adapter\Files;
use Multiple\Api\Models\Categorias;
use Multiple\Frontend\Controllers\IndexController as IndexActions;
use Multiple\Api\Models\Produtos;
use Phalcon\Cache\Backend\File as BackFile;
use Phalcon\Cache\Frontend\Data as FrontData;
use League\Uri\Schemes\Http;
use League\Uri\Components\Query;
use Phalcon\Session\Adapter\Files as SessionFiles;
 
class Helpers {
  public $_Page;
 
  public function __construct() {
    $this->session = new SessionFiles();
    $this->session->start();
    $this->detect = new MobileDetect();
 
  }
 
  public function solrConnect($core){
    $options = [
    'hostname' => 'localhost',
    'login'    => 'iloveesolaris',
    'password' => 'fWVq5dNCBU0yeHST',
    'port'     => '8983',
    'path'     => '/solr/'.$core
    ];
 
 
    $client = new \SolrClient($options);
 
 
    return $client;
  }
 
  public function debug(){
    if(isset($_GET['debug'])){
      echo "<pre>";
      echo "<p><strong>URL</strong></p>";
      print_r($this->url(array('oioi'=>1,"page"=>"categoria" )));
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>GETs</strong></p>";
      print_r($_GET);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>POSTs</strong></p>";
      print_r($_POST);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Página</strong></p>";
      print_r($this->getPage());
      print_r($this->getPage('string'));
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Title</strong></p>";
      print_r($this->getTitle());
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Pagina</strong></p>";
      print_r($this->_Page);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>UTMs</strong></p>";
      echo "utm_source=".($this->session->get("utm_source")).'<br />';
      echo "utm_medium=".($this->session->get("utm_medium")).'<br />';
      echo "utm_campaign=".($this->session->get("utm_campaign")).'<br />';
      echo "utm_term=".($this->session->get("utm_term")).'<br />';
      echo "utm_content=".($this->session->get("utm_content")).'<br />';
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Server</strong></p>";
      print_r($_SERVER);
      echo "</pre>";
    }
  }
 
  public function imgProd($img,$position,$imgParceiro=false){
    if(!$img){
      $img = $imgParceiro;
      if(!$img){
        return false;
      }else{
        if(gettype($img) =="array"){
          if ($img[$position]){
            return $img[$position];
          }
          return $img[0];
        }
        return $img;
      }
    }
    if(!$position){
      return  $img[0];
    }
 
    if ($img[$position]){
      return $img[$position];
    }
    return $img[0];
  }
 
  public function url($parametros){
    return $_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
  }
 
  public function tipoMateria($item){
    switch ($item->post_tipo_s) {
      case "Stories":
      $nome = "Matéria";
      $tipo = "materias";
      break;
      case "Look":
      $nome = "Look";
      $tipo = "looks";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $nome = "Vitrine";
      $tipo = "vitrines";
      break;
      case "Mood":
      $nome = "Mood";
      $tipo = "moods";
      break;
    }
    return array("nome"=>$nome,"tipo"=>$tipo);
  }
 
  public function tipoMateriaBypage($item){
    switch ($item['page']) {
      case "materias":
      $nome = "Matérias";
      break;
      case "looks":
      $nome = "Looks";
      break;
      case "vitrines":
      $nome = "Vitrines";
      break;
      case "moods":
      $nome = "Moodboards";
      break;
      default:
      $nome = false;
 
    }
    return $nome;
  }
 
  public function linkmaterias($item){
    switch ($item->post_tipo_s) {
      case "Stories":
      $tipo = "materia";
      break;
      case "Look":
      $tipo = "look";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $tipo = "vitrine";
      break;
      case "Mood":
      $tipo = "mood";
      break;
    }
    return "/".$tipo."/".$item->post_slug_s;
  }
 
  public function linkmateriasBD($slug,$tipo){
    switch ($tipo) {
      case "Stories":
      $tipo = "materia";
      break;
      case "Look":
      $tipo = "look";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $tipo = "vitrine";
      break;
      case "Mood":
      $tipo = "mood";
      break;
    }
    return "/".$tipo."/".$slug;
  }
 
  public function bannerCategoria($tipo,$parametros=false){
 
    $client = $this->solrConnect('banners');
    $request = new Request();
    $query = new \SolrQuery();
 
    $query->setQuery("*");
 
    if($parametros["bannerPromocional"]){
      $parametros["bannerPromocional"]=rtrim($parametros["bannerPromocional"],",");
      $bannerpromocional = explode(",",$parametros["bannerPromocional"]);
      foreach ($bannerpromocional as $materia){
        $query->addFilterQuery("-id:".$materia);
      }
    }
 
    $query->addFilterQuery("banner_tipo_s:".$tipo);
    if($parametros["categoria"]){
      $query->addFilterQuery("banner_categoria_nomeseo_sm:".$parametros["categoria"]);
    }
 
    $query->addFilterQuery("banner_status_s:1");
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return false;
    }
 
    return $banners[0];
  }
 
  public function bannerMateria($materias=false,$categoria=false,$catpost=false,$tag=false,$parametros=false,$extraFilter = false){
 
    $client = $this->solrConnect('posts');
 
    $request = new Request();
 
    $query = new \SolrQuery();
 
    $query->setQuery("*");
    $query->addSortField("post_agendamento_dt",1);
 
    if($parametros["materiaPromocional"]){
      $parametros["materiaPromocional"]=rtrim($parametros["materiaPromocional"],",");
      $materiapromocional = explode(",",$parametros["materiaPromocional"]);
      foreach ($materiapromocional as $materia){
        $query->addFilterQuery("-id:".$materia);
      }
    }
 
    if ($categoria){
      $query->addFilterQuery("categoria_nomeseo_sm:".$categoria);
    }
 
    if ($catpost){
      foreach($catpost as $cat){
        $query->addFilterQuery("categoriapost_nomeseo_sm:".$cat);
      }
    }
    if($extraFilter){
      $query->addFilterQuery($extraFilter);
    }
 
    if($tag){
      $filter= '';
      foreach($tag as $key => $tagg){
        if($filter != ''){
          $filter .= " OR ";
        }
        $filter .= " tag_nomeseo_sm:".$tagg;
      }
      $query->addFilterQuery($filter);
    }
 
 
    if ($materias){
      foreach ($materias as $materia){
        $query->addFilterQuery("-post_id_i:".$materia);
      }
    }
 
    $query->addFilterQuery('post_status_i:1');
    $query->addFilterQuery('post_tipo_s:*');
    $query->addFilterQuery('-categoriapost_nome_sm:hide');
    $query->addFilterQuery('post_agendamento_dt:[* TO NOW]');
 
    $query->addFilterQuery('post_imgcapa_pequena_s:*');
 
    $query->setRows(7);
 
    $response = $client->query($query)->getResponse();
 
    $materias = $response->response->docs;
 
    if (!$materias){
      return false;
    }
 
    return $materias;
  }
 
 
 
  public function maisDetalhes($produto){
    return "/produto/".$produto->parceiro_nomeseo_s."/".$produto->produto_marcaseo_s."/".$produto->produto_nomeseo_s."/".$produto->produto_id_i;
  }
  public function linkprod($produto,$path=false){
    $utm           = $this->getUTMS();
    $pagina       = $this->getPage('string');
 
    //=================================================
    //
    // utm_source   = iLovee
    // utm_campaign = (utm_campaign)/campanha_do_banner
    // utm_content  = (utm_source)-(utm_medium)
    // utm_medium   = xml/banner
    // utm_term     = (pagina)
    //
    //===============================================
 
    $utm_source   = "ilovee";
    $utm_campaign = $utm["utm_campaign"];
    $utm_content  = $utm["utm_source"].'_'.$utm["utm_medium"];
    $utm_medium    = "xml";
    $utm_term      = ($path)?$path:$pagina['string'];
 
    $utm_term  = str_replace('/','\\',$utm_term);
 
    $utm = "utm_source=".$utm_source."&utm_medium=".$utm_medium."&utm_campaign=" . $utm_campaign. '&utm_term='.$utm_term.'&utm_content='.$utm_content;
    $uriFinal =  $this->mergeLink($produto->produto_link_s,$utm);
 
    return  $uriFinal;
  }
 
  public function linkBanner($banner,$path=false){
 
    $utm           = $this->getUTMS();
    $pagina       = $this->getPage('string');
 
    //=================================================
    //
    // utm_source   = iLovee
    // utm_campaign = (utm_campaign)/campanha_do_banner
    // utm_content  = (utm_source)-(utm_medium)
    // utm_medium   = xml/banner
    // utm_term     = (pagina)
    //
    //===============================================
 
    $utm_source   = "ilovee";
    $utm_campaign = $banner->banner_utmcampaign_s;
    $utm_content  = $utm["utm_source"].'_'.$utm["utm_medium"];
    $utm_medium    = "banner";
    $utm_term      = ($path)?$path:$pagina['string'];
 
 
    $utm = "utm_source=".$utm_source."&utm_medium=".$utm_medium."&utm_campaign=" . $utm_campaign. '&utm_term='.$utm_term.'&utm_content='.$utm_content;
 
    $uriFinal = $this->mergeLink($banner->banner_link_s,$utm);
    return  $uriFinal;
  }
 
  public function mergeLink($link,$merge){
    $uri = Http::createFromString(trim($link));
 
    $query    = new Query($uri->getQuery());
    $newQuery = $query->merge($merge);
    $newQuery=  $newQuery->__toString();
    $url = $uri->withQuery($newQuery)->__toString();
 
    return $url;
  }
 
  public function buscaTips($termo){
 
    $tips=[];
 
    $letterCount = strlen($termo) - 2;
 
 
    switch ($letterCount) {
      case 0;
      case 1;
      case 2:
        $field = false;
        break;
      case 3:
        $field = "_bk3";
        break;
      case 4:
        $field = "_bk4";
        break;
      case 5:
        $field = "_bk5";
        break;
 
      default:
        $field = "_bk6";
        break;
    }
 
 
    $termoExato = $this->buscaTipsByTermo($termo);
 
    if($termoExato){
      $marcas     = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'marca');
      $lojas       = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'loja');
      $categorias = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'categoria');
 
      foreach ($marcas as $marca){
        array_push($tips,$marca);
      }
      foreach ($lojas as $loja) {
        array_push($tips,$loja);
      }
      foreach ($categorias as $categoria) {
        array_push($tips,$categoria);
      }
    }else{
 
      $tips = array_merge($tips,$this->categoriasQuery($termo,1,$field));
 
      if(!is_array($tips)){
        $tips = [];
      }
 
      $lojas = $this->Montalojamarca($this->parceiroBusca($termo,$field),$termo,1,'loja');
 
      $marcas = $this->Montalojamarca($this->brandBusca($termo,$field),$termo,1,'marca');
 
      foreach ($marcas as $marca) {
        array_push($tips,$marca);
      }
      foreach ($lojas as $loja) {
        array_push($tips,$loja);
      }
    }
 
    $postField = ($field) ? "post_nome".$field : "post_nome_poss";
 
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Vitrine"),$termo,2,$this->texto("Vitrine")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Stories"),$termo,2,$this->texto("Stories")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Mood"),$termo,2,$this->texto("Mood")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Look"),$termo,2,$this->texto("Look")));
 
    return array_filter($tips);
  }
 
  public function buscaTipsByTermo($termo){
 
    $client = $this->solrConnect("termos");
 
    $query = new \SolrQuery();
 
    $query->setQuery('termo_valor_s:"'.strtolower($termo).'"');
 
 
    $response = $client->query($query)->getResponse();
 
    $termo = $response->response->docs[0];
 
    return $termo;
  }
 
  public function highlight($text, $words) {
    $re = '~(' .  $words . ')~i';
    return preg_replace($re, '<strong>$0</strong>', $text);
  }
 
  public function matQuery($materias,$termo,$rows,$tipo){
 
    $mats = [];
 
    foreach ($materias as $mat){
      $link = $this->linkmaterias($mat);
      $texto = '<dd>'.$this->highlight($mat->post_nome_s,$termo).'</dd>';
 
      $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
      if($mat->post_slug_s){
        array_push($mats,$arr);
      }
    }
 
    return $mats[0];
  }
 
  public function MontalojamarcaCategoriaExato($lojasmarcas,$termo,$tipo){
 
    $mats = [];
 
    if ($tipo=="loja"){
      foreach ($lojasmarcas->termobusca_loja_sm as $value) {
        $link = "/loja/".$this->slugify($value);
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
        if($value){
          array_push($mats,$arr);
        }
      }
 
    }
    if($tipo=="marca"){
      foreach ($lojasmarcas->termobusca_marca_sm as $value) {
        $link = $this->slugify($value);
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
 
        if($value){
          array_push($mats,$arr);
        }
      }
    }
    if($tipo=="categoria"){
      foreach ($lojasmarcas->termobusca_categoria_sm as $key => $value) {
        $link = $lojasmarcas->termobusca_categoriaseo_sm[$key];
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
 
        if($value){
          array_push($mats,$arr);
        }
      }
    }
 
    return $mats;
  }
  public function Montalojamarca($lojasmarcas,$termo,$rows,$tipo){
 
    $mats = [];
 
    foreach ($lojasmarcas as $ljmc){
 
    if ($tipo=="loja"){
 
        $link = "/loja/".$this->slugify($ljmc->parceiro_nome_s);
        $texto = $this->highlight($ljmc->parceiro_nome_s,$termo);
      }
      else
      {
        $link = "/".$this->slugify($ljmc->produto_marca_s);
        $texto = $this->highlight($ljmc->produto_marca_s,$termo);
      }
 
      $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
      if($ljmc){
        array_push($mats,$arr);
      }
    }
 
    return $mats;
  }
 
  public function categoriasQuery($termo,$rows,$field=false){
 
    $client = $this->solrConnect('categorias');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery("categoria_nome_poss:".$termo);
    }
    else{
      $query->setQuery("categoria_nome".$field.":".$termo);
    }
    $query->setRows($rows);
 
    $response = $client->query($query)->getResponse();
 
    //return $response;
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return;
    }
 
    $cats = [];
 
    foreach ($categorias as $cat){
      $link = "/categoria/".str_replace("-","/",$cat->categoria_nomeseo_s);
      $texto = $this->highlight($cat->categoria_nome_s,$termo);
      $arr = array("texto"=>$texto,"tipo"=>"categoria","link"=>$link);
 
      array_push($cats,$arr);
    }
 
 
    return $cats;
  }
 
  public function footer($id){
    return IndexActions::bannersAction($id);
  }
  public function serverUrl(){
    return (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
  }
  public function contagem($numero){
    $qtd = strlen($numero)-1;
 
    $numero = substr($numero, 0,1);
 
    for ($i=0;$i<$qtd;$i++)
    {
      $numero .= 0 ;
    }
 
    if (strlen($numero)>1){
      $numero="+".$numero;
    }
    return $numero;
  }
  public function BreadJsonLd($breads){
 
    $bread_json = [];
    $count_bread = 0 ;
 
    $bread_json["@context"] = "http://schema.org";
    $bread_json["@type"]    = "BreadcrumbList";
    $bread_json["itemListElement"] = array();
    foreach($breads as $bread)
    {
      $sub_bread["@type"] = "ListItem";
      $sub_bread["position"] = $count_bread;
      $sub_bread["item"]["@id"] = $this->serverUrl() . '/categoria/'.$bread['seo'];
      $sub_bread["item"]["name"] = $bread["categoria"];
 
      $count_bread++;
 
      $bread_json["itemListElement"][] = $sub_bread;
    }
 
    return str_replace('\/','/',json_encode($bread_json));
  }
 
  public function leitorCategoriasPai_seo($categoria,$conteudo=""){
 
    $categorias=Categorias::findFirst(["conditions" => "categoria_nomeseo = ?1", "bind" => ["1" => $categoria]]);
 
    $conteudo .= "," . $categorias->categoria_id;
 
    $catpai=Categorias::findFirst([
      "conditions" => "categoria_id = ?1",
      "bind" => [
      "1" => $categorias->categoria_pai
      ],
      ]);
 
 
    if ($categorias->categoria_pai!=0) {
      $conteudo = $this->leitorCategoriasPai_seo($catpai->categoria_nomeseo,$conteudo);
    }
 
    return $conteudo;
  }
  public function capitalizar($str=0)
  {
    $str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
    return $str;
  }
  public function maiuscula($str=0)
  {
    $str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
    return $str;
  }
 
  public function touchurl($url)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_TIMEOUT,2);
    curl_exec($ch);
 
    return false;
  }
  public function downloader($url,$timeout=600){
    $tentativas = 0;
 
    $headers[] = 'Connection: keep-alive';
    $headers[] = 'Pragma: no-cache';
    $headers[] = 'Cache-Control: no-cache';
    $headers[] = 'Accept-Encoding: gzip';
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
    // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3600);
    // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36');
    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // curl_setopt($ch, CURLOPT_HEADER, false);
    // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    // curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    // curl_setopt($ch, CURLOPT_MAXREDIRS, 15);
    // curl_setopt($ch, CURLOPT_ENCODING , 'gzip');
    // curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    // curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    ///curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    //curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/../cacert.pem');
 
    while($tentativas<10)
    {
      $output = curl_exec($ch);
 
      $tentativas++;
      $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if ($response_code == '200') {
        return $output;
      }
    }
    return false;
  }
  public function logger($log)
  {
    $session = new Files();
    $session->start();
 
    $auth = $session->get("auth");
 
    if ($auth['administrador_id']){
      $user = $auth['administrador_nome'] . "(" . $auth['administrador_id'] . ")";
    }
    else{
      $user = "System(0)";
    }
 
    $ano = LOGS_FOLDER . date("Y");
 
    if(!file_exists($ano)){
      mkdir($ano);
    }
 
    $mes = LOGS_FOLDER . date("Y") .'/'. date("m");
 
    if(!file_exists($mes)){
      mkdir($mes);
    }
 
    $arquivo = LOGS_FOLDER . date("Y") .'/'. date("m") .'/'. date("d") . ".log";
 
    $log = "[" . date("F j, Y, g:i a") . " - " . $user . "] " . $log . PHP_EOL;
 
    $fp = fopen($arquivo, "a");
 
    $escreve = fwrite($fp, $log);
 
    fclose($fp);
  }
  public function getMethod()
  {
    $request = new Request();
 
    $header = $request->getHeaders();
 
    $method = $header['X-Http-Method-Override'];
 
    return $method;
  }
 
  public function uploadFiles()
  {
    $request = new Request();
 
    if($request->hasFiles()){
 
      foreach($request->getUploadedFiles() as $file){
 
        if($file->moveTo('./images/ilovee_'.$file->getName())){
          return "Arquivo carregado!";
        }
        else{
          return "Erro: O arquivo não pode ser carregado :(";
        }
      }
    }
    else{
      return "Não existem arquivos para serem carregados.";
    }
  }
  public function utf8ize($d)
  {
    if (is_array($d)) {
      foreach ($d as $k => $v) {
        $d[$k] = $this->utf8ize($v);
      }
    } else if (is_string ($d)) {
      return utf8_encode($d);
    }
    return $d;
  }
 
  public function getDados()
  {
    $request = new Request();
 
    $dados = $request->getPost();
 
    return json_decode($dados['model']);
  }
 
  public function sendError($message)
  {
    $response = new Response();
    $response->setStatusCode(401);
    $response->send();
    $this->logger("Erro: " . $message);
    return json_encode(["error"=>true,"message"=>$message]);
  }
 
  public function sendSuccess($message,$params = array(),$id=false){
    $response = new Response();
    $response->setStatusCode(200);
    $response->send();
    $this->logger("Sucesso: " . $message);
    $return = array_merge(["success"=>true,"message"=>$message],$params);
 
 
    if ($id){
      $return = array_merge(["success"=>true,"message"=>$message,"id"=>$id],$params);
    }
 
    return json_encode($return);
  }
 
  public function slugify($data,$separador='-')
  {
    $slugify = new Slugify();
    return $slugify->slugify($data,$separador);
  }
  public function checkprivilege($privilege)
  {
    $session = new Files();
    $session->start();
    $auth = $session->get("auth");
 
    if ($auth["administrador_nivel"] != $privilege)
    {
      return $this->sendError("Você não possui acesso!" . $auth["administrador_nivel"]);
      exit();
 
    }
  }
  public function tolower($string)
  {
    return mb_strtolower($string,"UTF-8");
  }
 
  public function getParametros(){
 
    $request = new Request();
    return $request->getQuery();
 
  }
 
  public function datetimeBD($data){
    $date = \DateTime::createFromFormat("d-m-Y H:i:s", $data);
    return $date->format("Y-m-d H:i:s");
  }
  public function datetimeView($data){
    $date = \DateTime::createFromFormat("Y-m-d H:i:s", $data);
    return $date->format("d-m-Y H:i:s");
  }
 
  /* funções monta categorias */
 
  public function categorias($id=false) {
 
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addSortField("categoria_ordem_i",0);
 
    if (!$id){
      $query->addFilterQuery('categoria_pai_i:0');
      $query->addFilterQuery('categoria_ocultar_i:0');
    } else {
      $query->addFilterQuery('categoria_pai_i:'.$id);
      $query->addFilterQuery('categoria_ocultar_i:0');
    }
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada");
    }
 
    return $categorias;
 
  }
  public function categorias_seo($catseo){
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addSortField("categoria_ordem_i",0);
    $query->addFilterQuery('categoria_nomeseo_s:'.$catseo);
 
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada 1");
    }
 
    return $categorias;
  }
 
  public function categorias_id($id){
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addFilterQuery('categoria_id_i:'.$id);
 
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada 1");
    }
 
    return $categorias;
  }
 
  public function parceiroBusca($seo,$field=false){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nome_poss:'.$seo);
    }
    else{
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nome'.$field.':'.$seo);
    }
 
    $query->setRows(1);
 
    $query->addField('parceiro_nome_s');
 
    $response = $client->query($query)->getResponse();
 
    $lojas = $response->response->docs;
 
    return $lojas;
  }
 
  public function brandBusca($seo,$field=false){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marca_poss:'.$seo);
    }else{
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marca'.$field.':'.$seo);
    }
 
    $query->setRows(1);
 
    $query->addField('produto_marca_s');
 
    $response = $client->query($query)->getResponse();
 
    $marcas = $response->response->docs;
 
    return $marcas;
  }
 
 
 
  public function parceiroNomebySEO($seo){
 
    $client = $this->solrConnect('parceiros');
 
    $query = new \SolrQuery();
 
    $query->setQuery('parceiro_nomeseo_s:'.$seo);
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $loja = $response->response->docs;
 
    return $loja[0];
  }
  public function parceiroCatsNomebySEO($seo){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    $query->setQuery('parceiro_nomeseo_s:'.$seo);
 
    $query->setRows(1);
 
    $query->setFacet(true);
 
    $query->addFacetField("produto_categoria_nome_sm");
    $query->setFacetMinCount(1);
 
    $response = $client->query($query)->getResponse();
 
    $facetacat = $response->facet_counts->facet_fields->produto_categoria_nome_sm;
 
    return $facetacat;
  }
  public function brandSEONomebySEO($seo){
 
    $client = $this->solrConnect('marcasseo');
 
    $query = new \SolrQuery();
 
    $query->setQuery('marcaseo_marcaseo_s:'.$seo);
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $marca = $response->response->docs;
 
    return $marca[0];
  }
 
 
  public function brandNomebySEO($seo){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    $query->setQuery('produto_marcaseo_s:'.$seo);
 
    $query->setRows(1);
 
    $query->setFacet(true);
 
    $query->addFacetField("produto_categoria_nome_sm");
    $query->setFacetMinCount(1);
 
    $response = $client->query($query)->getResponse();
 
    $marca = $response->response->docs;
    $facetacat = $response->facet_counts->facet_fields->produto_categoria_nome_sm;
 
    return array(0=>$marca[0],1=>$facetacat);
  }
 
  public function categoria_bread($page=false,$params=false) {
 
    $bread = [];
    $bread1 = [];
    $allcats = [];
 
    if ($page == "loja"){
      $loja = $this->parceiroNomebySEO($params["lojas"]);
      $lojaseo = $this->parceiroCatsNomebySEO($params["lojas"]);
      array_push($bread1,["categoria"=>$loja->parceiro_nome_s,"seo"=>$params["lojas"] ]);
      array_push($bread1,["categoria"=>"Lojas","seo"=>"lojas"]);
    }
    else if ($page == "marca"){
 
      $marca = $this->brandNomebySEO($params["marcas"]);
      $marca["categorias"] = $marca[1];
      $marca["marca"] = $marca[0];
      $marcaseo = $this->brandSEONomebySEO($params["marcas"]);
      array_push($bread1,["categoria"=>$marca["marca"]->produto_marca_s,"seo"=>$params["marcas"] ]);
      array_push($bread1,["categoria"=>"Marcas","seo"=>"marcas"]);
    }
 
    if ($params["categoria"]){
      $seo = $params["categoria"];
      $categorias = $this->categorias_seo($seo);
      $categorias = $categorias[0];
    }
 
    if ($page=="categoria" || $page=="outlet" || $page=="novidades"){
      array_push($bread1, array("categoria"=>$categorias->categoria_nome_s,"seo"=>""));
    }
 
    if($page=="busca"){
      array_push($bread1,["categoria"=>"Busca: ".$params["termo"],"seo"=>"/busca/".$params["termo"] ]);
    }
    array_push($allcats,array("categoria"=>$categorias->categoria_nome_s,"seo"=>$params["categoria"]));
 
 
    $catpai = $categorias->categoria_pai_i;
 
    while($catpai!=0){
 
      $cat = $this->categorias_id($catpai);
      $cat = $cat[0];
      $catpai = $cat->categoria_pai_i;
 
      $catseo = str_replace("-","/",$cat->categoria_nomeseo_s);
 
      if ($page=="categoria" || $page=="outlet" || $page=="novidades"){
        array_push($bread1,array("categoria"=>$cat->categoria_nome_s,"seo"=>$page."/".$catseo));
      }
 
      array_push($allcats,array("categoria"=>$cat->categoria_nome_s,"seo"=>$cat->categoria_nomeseo_s));
 
 
    }
 
    $bread["categoria"] = $categorias; //pega todas as informações da categoria
    $bread["allcats"] = $allcats;
    $bread["parceiro"] = $loja;
    $bread["breads"]   = array_reverse($bread1);
    $bread["marca"] = $marcaseo;
    $bread["catmarca"] = $marca["categorias"];
    $bread["catloja"] = $lojaseo;
 
    return $bread;
 
 
  }
  public function getCategorias($cacheNome='menu.cache',$liSub = 'closeMenu',$ul='menu-acordion menu-close',$catativa=false,$pagina,$parametros,$contador,$seoativas,$mobileLateral=false){
 
    $frontCache = new FrontData(
      [
      "lifetime" => 172800,
      ]
      );
 
    $cache = new BackFile(
      $frontCache,
      [
      "cacheDir" => APPLICATION_PATH . "/cache/",
      ]
      );
 
    $cacheKey = $cacheNome;
    $cats = $cache->get($cacheKey);
    if ($cats === null) {
 
      $cats = $this->montaCategorias(0);
      $cache->save($cacheKey, $cats);
    }
    $menuHtml = $this->montaHtmlMenu($cats,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral);
    //die;
    return $menuHtml;
 
  }
  public function montaCategorias($id){
 
    $allcats = $this->categorias($id);
    if($allcats['Error']){return;}
 
    foreach ($allcats as $key => $acat){
      $subcat = $this->montaCategorias($acat->id);
      if ($subcat){
        $allcats[$key]['sub'] = $subcat;
      }
    }
 
    return $allcats;
 
  }
 
  public function contador($section="categoria",$param=false){
 
    $client = $this->solrConnect('produtos');
 
    $request = new Request();
    $query = new \SolrQuery();
 
    if ($section == "busca"){
      $query->setQuery($param["termo"]);
      $query->addFilterQuery("produto_categoria_nomeseo_sm:*");
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    if ($section == "categoria"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    if ($section == "loja"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("parceiro_nomeseo_s:" . $param["lojas"]);
    }
 
    if ($section == "marca"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("produto_marcaseo_s:" . $param["marcas"]);
    }
 
    if ($section == "outlet"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("-produto_precocomparativo_f:0");
    }
 
    if ($section == "novidades"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    $query->setFacet(true);
    $query->addFacetField('produto_categoria_nomeseo_sm');
 
    $response = $client->query($query)->getResponse();
 
    $produtos = $response->facet_counts->facet_fields->produto_categoria_nomeseo_sm;
    return $produtos;
  }
 
 
  public function montaHtmlMenu($array,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral){
 
    $menuHtml = "";
    $break = 0;
 
    foreach ($array as $key => $value){
 
      if ($pagina == "categoria" || $pagina == "outlet" || $pagina == "novidades"){
        $link = "/categoria/".$value->categoria_nomeseo_s;
      }
      else if ($pagina == "busca")
      {
        $link = "?s=".$parametros["termo"]."&categoria=".$value->categoria_nomeseo_s;
      }
      else
      {
        $link = "?categoria=".$value->categoria_nomeseo_s;
      }
 
      $sub = $this->montaHtmlMenu($value->sub,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral);
 
      $categoriaAtivaPai = explode("/",$catativa)[0];
      $valueCatPai = explode("/", $value->categoria_nomeseo_s)[0];
 
      if( ($categoriaAtivaPai == 'moda' && ($valueCatPai == 'beauty') ) ||  ($categoriaAtivaPai == 'moda' && ($valueCatPai == 'casa')) ){
        $display = "display:none;";
      }
      elseif( ($categoriaAtivaPai == 'beauty' && ($valueCatPai == 'casa') ) ||  ($categoriaAtivaPai == 'beauty' && ($valueCatPai == 'moda')) ){
        $display = "display:none;";
      }
      elseif( ($categoriaAtivaPai == 'casa' && ($valueCatPai == 'beauty') ) ||  ($categoriaAtivaPai == 'casa' && ($valueCatPai == 'moda')) ) {
        $display = "display:none;";
      }else{
        $display = "";
      }
 
      $menuHtml .= "<li  style='".$display."' class='".(in_array($value->categoria_nomeseo_s, $seoativas) && $sub?"openMenu ":"").($sub ? $liSub  : "")."'>"."<span class='".($catativa == $value->categoria_nomeseo_s?'active':'')."' ><a ".($sub && $mobileLateral ? "" : " href='".$link."'").">".$value->categoria_nome_s . "<span style='display:none'> (" . $contador[$value->categoria_nomeseo_s] .")</span>". "</a></span>" ;
      $menuHtml .= $sub ? "<ul style='".((in_array($value->categoria_nomeseo_s, $seoativas) || $this->openFirstChild($catativa,$value->categoria_nome_s) )?"display:block ":"")."' class='".$ul."'>" : "";
      $menuHtml .= $sub && $mobileLateral ? "<li><span class=''><a href=".$link.">Todos</a></span></li>" : "";
      $menuHtml .= $sub;
      $menuHtml .= $sub ? "</ul>" : "";
      $menuHtml .= "</li>";
 
      $break++;
    }
 
    return $menuHtml;
  }
  public function openFirstChild($catativa,$value){
    if($catativa == "moda" && $value == "Roupas"){
      return true;
    }
    elseif($catativa == "beauty" && $value == "Olhos"){
      return true;
    }
    elseif($catativa == "casa" && $value == "Mesa"){
      return true;
    }
    else{
      return false;
    }
  }
  public function menu($id=false){
    if($id){
      return $this->categorias($id);
    }
    else{
      return $this->categorias();
    }
  }
 
  public function submenu($categoria,$id){
 
    $client = $this->solrConnect('banners');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
    if($categoria){
      $query->addFilterQuery("banner_categoria_nome_sm:".$categoria);
    }
    else{
      $query->addFilterQuery("id:".$id);
    }
    $query->addFilterQuery('banner_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('banner_termino_dt:[NOW TO *]');
    $query->addFilterQuery('banner_tipo_s:11');
    $query->addFilterQuery('banner_status_s:1');
    $query->addSortField("banner_ordem_i",0);
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
    $query->setRows(9999);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
    return $banners[0];
  }
 
  public function removeAcento($termo){
    $replace = array(
      'ъ'=>'-', 'Ь'=>'-', 'Ъ'=>'-', 'ь'=>'-',
      'Ă'=>'A', 'Ą'=>'A', 'À'=>'A', 'Ã'=>'A', 'Á'=>'A', 'Æ'=>'A', 'Â'=>'A', 'Å'=>'A', 'Ä'=>'Ae',
      'Þ'=>'B',
      'Ć'=>'C', 'ץ'=>'C', 'Ç'=>'C',
      'È'=>'E', 'Ę'=>'E', 'É'=>'E', 'Ë'=>'E', 'Ê'=>'E',
      'Ğ'=>'G',
      'İ'=>'I', 'Ï'=>'I', 'Î'=>'I', 'Í'=>'I', 'Ì'=>'I',
      'Ł'=>'L',
      'Ñ'=>'N', 'Ń'=>'N',
      'Ø'=>'O', 'Ó'=>'O', 'Ò'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'Oe',
      'Ş'=>'S', 'Ś'=>'S', 'Ș'=>'S', 'Š'=>'S',
      'Ț'=>'T',
      'Ù'=>'U', 'Û'=>'U', 'Ú'=>'U', 'Ü'=>'Ue',
      'Ý'=>'Y',
      'Ź'=>'Z', 'Ž'=>'Z', 'Ż'=>'Z',
      'â'=>'a', 'ǎ'=>'a', 'ą'=>'a', 'á'=>'a', 'ă'=>'a', 'ã'=>'a', 'Ǎ'=>'a', 'а'=>'a', 'А'=>'a', 'å'=>'a', 'à'=>'a', 'א'=>'a', 'Ǻ'=>'a', 'Ā'=>'a', 'ǻ'=>'a', 'ā'=>'a', 'ä'=>'ae', 'æ'=>'ae', 'Ǽ'=>'ae', 'ǽ'=>'ae',
      'б'=>'b', 'ב'=>'b', 'Б'=>'b', 'þ'=>'b',
      'ĉ'=>'c', 'Ĉ'=>'c', 'Ċ'=>'c', 'ć'=>'c', 'ç'=>'c', 'ц'=>'c', 'צ'=>'c', 'ċ'=>'c', 'Ц'=>'c', 'Č'=>'c', 'č'=>'c', 'Ч'=>'ch', 'ч'=>'ch',
      'ד'=>'d', 'ď'=>'d', 'Đ'=>'d', 'Ď'=>'d', 'đ'=>'d', 'д'=>'d', 'Д'=>'D', 'ð'=>'d',
      'є'=>'e', 'ע'=>'e', 'е'=>'e', 'Е'=>'e', 'Ə'=>'e', 'ę'=>'e', 'ĕ'=>'e', 'ē'=>'e', 'Ē'=>'e', 'Ė'=>'e', 'ė'=>'e', 'ě'=>'e', 'Ě'=>'e', 'Є'=>'e', 'Ĕ'=>'e', 'ê'=>'e', 'ə'=>'e', 'è'=>'e', 'ë'=>'e', 'é'=>'e',
      'ф'=>'f', 'ƒ'=>'f', 'Ф'=>'f',
      'ġ'=>'g', 'Ģ'=>'g', 'Ġ'=>'g', 'Ĝ'=>'g', 'Г'=>'g', 'г'=>'g', 'ĝ'=>'g', 'ğ'=>'g', 'ג'=>'g', 'Ґ'=>'g', 'ґ'=>'g', 'ģ'=>'g',
      'ח'=>'h', 'ħ'=>'h', 'Х'=>'h', 'Ħ'=>'h', 'Ĥ'=>'h', 'ĥ'=>'h', 'х'=>'h', 'ה'=>'h',
      'î'=>'i', 'ï'=>'i', 'í'=>'i', 'ì'=>'i', 'į'=>'i', 'ĭ'=>'i', 'ı'=>'i', 'Ĭ'=>'i', 'И'=>'i', 'ĩ'=>'i', 'ǐ'=>'i', 'Ĩ'=>'i', 'Ǐ'=>'i', 'и'=>'i', 'Į'=>'i', 'י'=>'i', 'Ї'=>'i', 'Ī'=>'i', 'І'=>'i', 'ї'=>'i', 'і'=>'i', 'ī'=>'i', 'ij'=>'ij', 'IJ'=>'ij',
      'й'=>'j', 'Й'=>'j', 'Ĵ'=>'j', 'ĵ'=>'j', 'я'=>'ja', 'Я'=>'ja', 'Э'=>'je', 'э'=>'je', 'ё'=>'jo', 'Ё'=>'jo', 'ю'=>'ju', 'Ю'=>'ju',
      'ĸ'=>'k', 'כ'=>'k', 'Ķ'=>'k', 'К'=>'k', 'к'=>'k', 'ķ'=>'k', 'ך'=>'k',
      'Ŀ'=>'l', 'ŀ'=>'l', 'Л'=>'l', 'ł'=>'l', 'ļ'=>'l', 'ĺ'=>'l', 'Ĺ'=>'l', 'Ļ'=>'l', 'л'=>'l', 'Ľ'=>'l', 'ľ'=>'l', 'ל'=>'l',
      'מ'=>'m', 'М'=>'m', 'ם'=>'m', 'м'=>'m',
      'ñ'=>'n', 'н'=>'n', 'Ņ'=>'n', 'ן'=>'n', 'ŋ'=>'n', 'נ'=>'n', 'Н'=>'n', 'ń'=>'n', 'Ŋ'=>'n', 'ņ'=>'n', 'ʼn'=>'n', 'Ň'=>'n', 'ň'=>'n',
      'о'=>'o', 'О'=>'o', 'ő'=>'o', 'õ'=>'o', 'ô'=>'o', 'Ő'=>'o', 'ŏ'=>'o', 'Ŏ'=>'o', 'Ō'=>'o', 'ō'=>'o', 'ø'=>'o', 'ǿ'=>'o', 'ǒ'=>'o', 'ò'=>'o', 'Ǿ'=>'o', 'Ǒ'=>'o', 'ơ'=>'o', 'ó'=>'o', 'Ơ'=>'o', 'œ'=>'oe', 'Œ'=>'oe', 'ö'=>'oe',
      'פ'=>'p', 'ף'=>'p', 'п'=>'p', 'П'=>'p',
      'ק'=>'q',
      'ŕ'=>'r', 'ř'=>'r', 'Ř'=>'r', 'ŗ'=>'r', 'Ŗ'=>'r', 'ר'=>'r', 'Ŕ'=>'r', 'Р'=>'r', 'р'=>'r',
      'ș'=>'s', 'с'=>'s', 'Ŝ'=>'s', 'š'=>'s', 'ś'=>'s', 'ס'=>'s', 'ş'=>'s', 'С'=>'s', 'ŝ'=>'s', 'Щ'=>'sch', 'щ'=>'sch', 'ш'=>'sh', 'Ш'=>'sh', 'ß'=>'ss',
      'т'=>'t', 'ט'=>'t', 'ŧ'=>'t', 'ת'=>'t', 'ť'=>'t', 'ţ'=>'t', 'Ţ'=>'t', 'Т'=>'t', 'ț'=>'t', 'Ŧ'=>'t', 'Ť'=>'t', '™'=>'tm',
      'ū'=>'u', 'у'=>'u', 'Ũ'=>'u', 'ũ'=>'u', 'Ư'=>'u', 'ư'=>'u', 'Ū'=>'u', 'Ǔ'=>'u', 'ų'=>'u', 'Ų'=>'u', 'ŭ'=>'u', 'Ŭ'=>'u', 'Ů'=>'u', 'ů'=>'u', 'ű'=>'u', 'Ű'=>'u', 'Ǖ'=>'u', 'ǔ'=>'u', 'Ǜ'=>'u', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'У'=>'u', 'ǚ'=>'u', 'ǜ'=>'u', 'Ǚ'=>'u', 'Ǘ'=>'u', 'ǖ'=>'u', 'ǘ'=>'u', 'ü'=>'ue',
      'в'=>'v', 'ו'=>'v', 'В'=>'v',
      'ש'=>'w', 'ŵ'=>'w', 'Ŵ'=>'w',
      'ы'=>'y', 'ŷ'=>'y', 'ý'=>'y', 'ÿ'=>'y', 'Ÿ'=>'y', 'Ŷ'=>'y',
      'Ы'=>'y', 'ž'=>'z', 'З'=>'z', 'з'=>'z', 'ź'=>'z', 'ז'=>'z', 'ż'=>'z', 'ſ'=>'z', 'Ж'=>'zh', 'ж'=>'zh'
      );
    return mb_strtolower(strtr($termo, $replace));
  }
 
  public function getCupomHeader(){
 
    $client = $this->solrConnect('cupons');
 
    $request = new Request();
    $query = new \SolrQuery();
 
    $query->setQuery('parceirocupom_textoheader_s:*');
 
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
 
    $query->addFilterQuery("parceirocupom_ativo_i:1");
    $query->addFilterQuery("parceirocupom_destaquehome_i:1");
    $query->addFilterQuery('parceirocupom_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('parceirocupom_termino_dt:[NOW TO *]');
    $query->addSortField('parceirocupom_ordem_i', 0);
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $cupom = $response->response->docs;
 
    if(!$cupom){
      return false;
    }
    $html = $this->montaCupomHeader($cupom[0]);
 
    return $html;
  }
  public function montaCupomHeader($cupom){
    $estrutura  = '';
    $estrutura .= '<div class="container-fluid topAlert">';
    $estrutura .= '  <div class="row ">';
    $estrutura .= '    <div class="col-xs-16 text-center">';
    $estrutura .= '      <p>'.$cupom->parceirocupom_textoheader_s. ' - <a href="/cupom/'.$cupom->parceiro_nomeseo_s.'">Ver condições</a></p>';
    $estrutura .= '    </div>';
    $estrutura .= '  </div>';
    $estrutura .= '</div>';
 
    return $estrutura;
  }
 
  public function getPopup(){
 
    $client = $this->solrConnect('banners');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
 
    $query->addFilterQuery('banner_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('banner_termino_dt:[NOW TO *]');
    $query->addFilterQuery('banner_tipo_s:(1 or 16 or 17)');
    $query->addFilterQuery('banner_status_s:1');
    $query->addSortField("banner_cadastro_dt",1);
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
 
    $popup = $banners[0];
 
    $templates = [
    1 => "popups/blocoImagem",
    16 => "popups/cadastroNews",
    17 => "popups/blocoFooter",
    ];
 
 
    $dados = [
    "template" => $templates[$popup->banner_tipo_s],
    "data" => $popup,
    ];
 
    return $dados;
 
  }
 
  public function montafilterLetter($marcas){
    $alfa = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
    $letras = array_keys($marcas);
 
    $filtro = "";
    foreach ($alfa as $key => $value) {
      if(in_array($value,$letras)){
        $filtro .= "<li class='hasContent'>".strtoupper($value)."</li>";
      }
      else{
        $filtro .= "<li>".strtoupper($value)."</li>";
      }
    }
 
    return $filtro;
 
  }
 
  public function mergeArrays($array1, $array2, $array3) {
    $result = array();
 
    foreach ( $array1 as $key=>$value ) {
      $result[] = array( 'nome' => $value, 'nomeseo' => $array2[$key], 'icone' => $array3[$key] );
    }
 
    return $result;
  }
 
 
  public function getDevice(){
    // Basic detection.
    if($this->detect->isAndroidOS()){
      $sistema = '-Android';
    }
    if($this->detect->isiOS()){
      $sistema = '-iOS';
    }
 
    if($this->detect->isTablet()){
      return "Tablet ".$sistema;
    }
 
    if($this->detect->isMobile()){
      return "Mobile" .$sistema ;
    }
 
    return "Desktop";
  }
  public function sets($page) {
    $this->setReferal();
    $this->_Page = $page;
  }
 
  public function texto($slug=false,$id=false,$returnNull=false){
 
    $client = $this->solrConnect('textos');
 
    $query = new \SolrQuery();
    if ($slug){
      $slug = str_replace('/','\/',$slug);
      $query->setQuery('texto_slug_s:("'.$slug.'") AND texto_status_i:1');
 
      $cacheKey = md5($slug);
    }
    if ($id){
      $query->setQuery('texto_id_i:'.$id.' AND texto_status_i:1');
      $cacheKey = $id;
    }
 
    $frontCache = new FrontData(["lifetime" => 10800, ]);
    $cache = new BackFile($frontCache, ["cacheDir" => APPLICATION_PATH . "/cache/", ] );
 
    $txts = null;//''$cache->get($cacheKey);
    if ($txts === null) {
      $query->setRows(1);
      $response = $client->query($query)->getResponse();
      $txts = $response->response->docs;
      $cache->save($cacheKey, $txts);
    }
 
    if (!$txts){
      return ($returnNull)? "" :$slug;
    }
 
    return $txts[0]->texto_valor_s;
  }
 
  public function getCategoriaData($search) {
 
    $client = $this->solrConnect('categorias');
 
    $query = new \SolrQuery();
    if(is_numeric($search)){
      $query->setQuery("categoria_id_i :".$search);
 
    }else{
      $query->setQuery("categoria_nomeseo_s :".$search);
    }
 
    $response = $client->query($query)->getResponse();
 
    $categoria = $response->response->docs;
 
    return $categoria;
  }
 
  public function getMarcaData($search) {
    $client = $this->solrConnect('marcasseo');
    $query = new \SolrQuery();
    if(is_numeric($search)){
      $query->setQuery("marcaseo_id_i :".$search);
    }else{
      $query->setQuery("marcaseo_marcaseo_s :".$search);
    }
    $response = $client->query($query)->getResponse();
    $marca = $response->response->docs;
 
    return $marca;
  }
 
  public function getParceirosData($parceiro=false){
 
    $client = $this->solrConnect('parceiros');
 
    $query = new \SolrQuery();
 
    $query->setQuery("parceiro_nomeseo_s:{$parceiro}");
 
    $response = $client->query($query)->getResponse();
 
    $parceiro = $response->response->docs;
 
    return $parceiro;
  }
 
  public function getCupomData($parceiro=false){
    $client = $this->solrConnect('cupons');
 
    $query = new \SolrQuery();
 
    $query->setQuery("parceiro_nomeseo_s:{$parceiro}");
    $query->addFilterQuery("parceirocupom_ativo_i:1");
    $query->addSortField("parceirocupom_destaque_i",0);
    $response = $client->query($query)->getResponse();
 
    $cupons = $response->response->docs;
 
    return $cupons;
  }
 
  public function getPostData($slug,$field='post_slug_s',$type= '*'){
    $client = $this->solrConnect('posts');
    $query = new \SolrQuery();
 
    $query->setQuery($field.":".$slug."^2");
 
    $query->addFilterQuery("post_tipo_s:".$type);
    $query->addFilterQuery("-categoriapost_nome_sm:hide");
 
    $query->addSortField("post_agendamento_dt",1);
 
    $response = $client->query($query)->getResponse();
    $post = $response->response->docs;
    return $post;
  }
 
  public function getProdutoData($id){
    $client = $this->solrConnect('produtos');
    $query = new \SolrQuery();
    $query->setQuery("produto_id_i :".$id);
    $response = $client->query($query)->getResponse();
    $produto = $response->response->docs;
    return $produto;
  }
 
 
  public function getTitle(){
 
    $page  = $this->getPage();
    $texto = $this->texto($page[0],false,true);
 
    if(!$texto){
      switch ($this->_Page) {
        case 'categoria':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopagina_s)?$categoria->categoria_titulopagina_s:$categoria->categoria_nome_s;
          break;
        case 'outlet':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopaginaoutlet_s)?$categoria->categoria_titulopaginaoutlet_s:$categoria->categoria_nome_s;
          break;
        case 'novidades':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopaginanovidades_s)?$categoria->categoria_titulopaginanovidades_s:$categoria->categoria_nome_s;
          break;
        case 'marca':
            $marca = $this->getMarcaData(str_replace('/', '',$this->getPage()[0]))[0];
            $texto = ($marca->marcaseo_titulo_s)?$marca->marcaseo_titulo_s:"";
 
            if($texto == ""){
              $texto = $this->getMarcaNomeEmProduto(str_replace('/', '',$this->getPage()[0]))." - Encontre no iLovee" ;
            }
 
          break;
        case 'loja':
            $parceiro = $this->getParceirosData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($parceiro->parceiro_titulopagina_s !== "#") ? $parceiro->parceiro_titulopagina_s : $parceiro->parceiro_nome_s." - Encontre no iLovee";
          break;
        case 'cupom':
            $cupom = $this->getCupomData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = $this->texto("prefixo-cupom-seo")." ". $cupom->parceiro_nome_s;
          break;
        case 'materia':
        case 'look':
        case 'mood':
            $post = $this->getPostData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = $post->post_nome_s;
          break;
        case 'produto':
            $produto_id = explode('/',$this->getPage()[0]);
            $produto_id =  $produto_id[count($produto_id)-1];
            $produto = $this->getProdutoData($produto_id)[0];
            $texto = $produto->produto_nome_s;
          break;
        case '404':
            $texto = $this->texto("title-404");
          break;
 
      }
    }
 
    $texto = ($texto)?$texto: "+ de 130 mil achados em Moda, Beleza e Decoração" ;
    return $texto." ".$this->texto('titulo-sufixo-seo');
  }
 
  public function getMarcaNomeEmProduto($marca){
    $client = $this->solrConnect('produtos');
    $query = new \SolrQuery();
    $query->setQuery("produto_marca_poss :".$marca);
    $response = $client->query($query)->getResponse();
    $prodMarca = $response->response->docs;
    return $prodMarca[0]->produto_marca_s;
  }
 
  public function getUTMS($item = 'all') {
 
    $utm['utm_source']    = $this->session->get("utm_source");
    $utm['utm_medium']    = $this->session->get("utm_medium");
    $utm['utm_campaign']  = $this->session->get("utm_campaign");
    $utm['utm_term']    = $this->session->get("utm_term");
    $utm['utm_content']    = $this->session->get("utm_content");
 
    if($item == 'all'){ return $utm;}
 
    return $utm[$item];
  }
 
 
  public function getPage($tipo = false){
    $uri = explode('?',$_SERVER['REQUEST_URI']);
    parse_str($uri[1],$uri[1]);
 
    if($tipo == 'string'){
      $url = $uri[0]
      .(($uri[1]['s'])?'-Busca por:'.$uri[1]['s']:'')
      .(($uri[1]['pagina'])?'-Página:'.$uri[1]['pagina']:'');
 
      $urlString['string'] = $url;
      $urlString['code'] = rawurlencode($url);
 
      return $urlString;
    }
    return  $uri;
  }
 
 
  public function getDominio($ref){
    $dominio = str_replace("http://","",$ref);
    $dominio = str_replace("https://","",$dominio);
    $dominio = explode("/",$dominio);
    $dominio = $dominio[0];
    $dominio = str_replace("www.","",$dominio);
    $dominio = str_replace(".com","",$dominio);
    $dominio = str_replace(".br","",$dominio);
    $dominio = str_replace(".net","",$dominio);
    $dominio = str_replace(".","",$dominio);
    $dominio = str_replace("/","",$dominio);
    return $dominio;
 
  }
  public function setReferal() {
 
    // ----- Old referal ----
    // $referal = $this->session->get("referal");
    // if (!$referal['referal'] || isset($_GET['campanha'])){
    //   echo $ref;
 
    //   if (isset($_REQUEST['campanha'])) {
    //     if (isset($campanha)){
    //       $name = "adw-".$campanha;
    //     }else{
    //       $name = "adw-".$_GET['campanha'];
    //     }
    //     $campanha = "adw-".$_GET['campanha'];
    //   }elseif(!isset($_GET['campanha']) && $_SERVER['HTTP_REFERER'] != "" ){
    //     $ref = $_SERVER['HTTP_REFERER'];
    //     $dominio = str_replace("http://","",$ref);
    //     $dominio = str_replace("https://","",$dominio);
    //     $dominio = explode("/",$dominio);
    //     $dominio = $dominio[0];
    //     $dominio = str_replace("www.","",$dominio);
    //     $dominio = str_replace(".com","",$dominio);
    //     $dominio = str_replace(".br","",$dominio);
    //     $dominio = str_replace(".net","",$dominio);
    //     $dominio = str_replace(".","",$dominio);
    //     $dominio = str_replace("/","",$dominio);
 
    //     if ($dominio=="google"){
    //       if (isset($_GET['campanha'])) {
    //         $dominio = "adw-".$_GET['campanha'];
    //       }else{
    //         $dominio='organic';
    //       }
    //     }
 
    //     if ($dominio=="iloveecommerce"){$dominio='direct';}
    //     if ($dominio=="lmfacebook" || $dominio=="mfacebook" || $dominio=="lfacebook"){$dominio='facebook';}
    //     if ($dominio=="linstagram"){$dominio='instagram';}
    //     if ($dominio=="s3s-br1"){$dominio='newsletter';}
 
    //     $name = $dominio;
    //   }else{
    //     $name = "direct";
    //     if (isset($_GET['utm_source'])) {
    //       if ($_GET['utm_source']=="notification"){
    //         $name = "notification_".$_GET['utm_campaign'];
    //       }
    //     }
    //   }
 
    // }
 
 
    if(!$this->session->get("utm_source")){ $this->session->set('utm_source','direct');}
    if(!$this->session->get("utm_medium")){ $this->session->set('utm_medium','none');}
    if(!$this->session->get("utm_campaign")){ $this->session->set('utm_campaign','none');}
    if(!$this->session->get("utm_term")){ $this->session->set('utm_term','none');}
    if(!$this->session->get("utm_content")){ $this->session->set('utm_content','none');}
 
    if($this->getDominio($_SERVER['HTTP_REFERER']) == 'linstagram'){
      $this->session->set('utm_source','Instagram');
      $this->session->set('utm_medium','Redes sociais' );
    }
 
    if (isset($_GET['utm_source']) || isset($_GET['gclid'])){
      $source = $_GET['utm_source'];
 
      if(isset($_GET['gclid'])){ $source = 'google'; }
 
      $this->session->set('utm_source',$source);
    }
 
    if (isset($_GET['utm_medium']) || isset($_GET['gclid'])){
      $medium = $_GET['utm_medium'];
 
      if(isset($_GET['gclid'])){ $medium = 'cpc'; }
      $this->session->set('utm_medium',$medium );
    }
 
    if (isset($_GET['utm_campaign'])){
      $this->session->set('utm_campaign',$_GET['utm_campaign']);
    }
 
    if (isset($_GET['utm_term'])){
      $this->session->set('utm_term',$_GET['utm_term']);
    }
 
    if (isset($_GET['utm_content'])){
      $this->session->set('utm_content',$_GET['utm_content']);
    }
  }
 
  public function clearCache(){
    array_map('unlink', glob('/var/www/iLove2.0/apps/cache/*'));
    return;
  }
 
  public function getTermoLink($termo){
 
    $client = $this->solrConnect("termos");
 
    $query = new \SolrQuery();
 
    $query->setQuery('termo_valor_s:"'.strtolower($termo).'"');
 
    $response = $client->query($query)->getResponse();
 
    $termo = $response->response->docs;
 
    return $termo[0]->termobusca_link_s;
  }
 
 
}
#1Multiple\Helpers\Helpers->categorias_seo(moda/roupas/gym/leggings-e-etc)
/var/www/iLove2.0/apps/helpers/Helpers.php (1101)
<?php
 
namespace Multiple\Helpers;
 
use Phalcon\Http\Request;
use Phalcon\Http\Response;
use Cocur\Slugify\Slugify;
use Detection\MobileDetect;
use Phalcon\Session\Adapter\Files;
use Multiple\Api\Models\Categorias;
use Multiple\Frontend\Controllers\IndexController as IndexActions;
use Multiple\Api\Models\Produtos;
use Phalcon\Cache\Backend\File as BackFile;
use Phalcon\Cache\Frontend\Data as FrontData;
use League\Uri\Schemes\Http;
use League\Uri\Components\Query;
use Phalcon\Session\Adapter\Files as SessionFiles;
 
class Helpers {
  public $_Page;
 
  public function __construct() {
    $this->session = new SessionFiles();
    $this->session->start();
    $this->detect = new MobileDetect();
 
  }
 
  public function solrConnect($core){
    $options = [
    'hostname' => 'localhost',
    'login'    => 'iloveesolaris',
    'password' => 'fWVq5dNCBU0yeHST',
    'port'     => '8983',
    'path'     => '/solr/'.$core
    ];
 
 
    $client = new \SolrClient($options);
 
 
    return $client;
  }
 
  public function debug(){
    if(isset($_GET['debug'])){
      echo "<pre>";
      echo "<p><strong>URL</strong></p>";
      print_r($this->url(array('oioi'=>1,"page"=>"categoria" )));
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>GETs</strong></p>";
      print_r($_GET);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>POSTs</strong></p>";
      print_r($_POST);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Página</strong></p>";
      print_r($this->getPage());
      print_r($this->getPage('string'));
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Title</strong></p>";
      print_r($this->getTitle());
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Pagina</strong></p>";
      print_r($this->_Page);
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>UTMs</strong></p>";
      echo "utm_source=".($this->session->get("utm_source")).'<br />';
      echo "utm_medium=".($this->session->get("utm_medium")).'<br />';
      echo "utm_campaign=".($this->session->get("utm_campaign")).'<br />';
      echo "utm_term=".($this->session->get("utm_term")).'<br />';
      echo "utm_content=".($this->session->get("utm_content")).'<br />';
      echo "</pre>";
 
      echo "<pre>";
      echo "<p><strong>Server</strong></p>";
      print_r($_SERVER);
      echo "</pre>";
    }
  }
 
  public function imgProd($img,$position,$imgParceiro=false){
    if(!$img){
      $img = $imgParceiro;
      if(!$img){
        return false;
      }else{
        if(gettype($img) =="array"){
          if ($img[$position]){
            return $img[$position];
          }
          return $img[0];
        }
        return $img;
      }
    }
    if(!$position){
      return  $img[0];
    }
 
    if ($img[$position]){
      return $img[$position];
    }
    return $img[0];
  }
 
  public function url($parametros){
    return $_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
  }
 
  public function tipoMateria($item){
    switch ($item->post_tipo_s) {
      case "Stories":
      $nome = "Matéria";
      $tipo = "materias";
      break;
      case "Look":
      $nome = "Look";
      $tipo = "looks";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $nome = "Vitrine";
      $tipo = "vitrines";
      break;
      case "Mood":
      $nome = "Mood";
      $tipo = "moods";
      break;
    }
    return array("nome"=>$nome,"tipo"=>$tipo);
  }
 
  public function tipoMateriaBypage($item){
    switch ($item['page']) {
      case "materias":
      $nome = "Matérias";
      break;
      case "looks":
      $nome = "Looks";
      break;
      case "vitrines":
      $nome = "Vitrines";
      break;
      case "moods":
      $nome = "Moodboards";
      break;
      default:
      $nome = false;
 
    }
    return $nome;
  }
 
  public function linkmaterias($item){
    switch ($item->post_tipo_s) {
      case "Stories":
      $tipo = "materia";
      break;
      case "Look":
      $tipo = "look";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $tipo = "vitrine";
      break;
      case "Mood":
      $tipo = "mood";
      break;
    }
    return "/".$tipo."/".$item->post_slug_s;
  }
 
  public function linkmateriasBD($slug,$tipo){
    switch ($tipo) {
      case "Stories":
      $tipo = "materia";
      break;
      case "Look":
      $tipo = "look";
      break;
      case "Vitrine":
      case "VitrineTematica":
      $tipo = "vitrine";
      break;
      case "Mood":
      $tipo = "mood";
      break;
    }
    return "/".$tipo."/".$slug;
  }
 
  public function bannerCategoria($tipo,$parametros=false){
 
    $client = $this->solrConnect('banners');
    $request = new Request();
    $query = new \SolrQuery();
 
    $query->setQuery("*");
 
    if($parametros["bannerPromocional"]){
      $parametros["bannerPromocional"]=rtrim($parametros["bannerPromocional"],",");
      $bannerpromocional = explode(",",$parametros["bannerPromocional"]);
      foreach ($bannerpromocional as $materia){
        $query->addFilterQuery("-id:".$materia);
      }
    }
 
    $query->addFilterQuery("banner_tipo_s:".$tipo);
    if($parametros["categoria"]){
      $query->addFilterQuery("banner_categoria_nomeseo_sm:".$parametros["categoria"]);
    }
 
    $query->addFilterQuery("banner_status_s:1");
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return false;
    }
 
    return $banners[0];
  }
 
  public function bannerMateria($materias=false,$categoria=false,$catpost=false,$tag=false,$parametros=false,$extraFilter = false){
 
    $client = $this->solrConnect('posts');
 
    $request = new Request();
 
    $query = new \SolrQuery();
 
    $query->setQuery("*");
    $query->addSortField("post_agendamento_dt",1);
 
    if($parametros["materiaPromocional"]){
      $parametros["materiaPromocional"]=rtrim($parametros["materiaPromocional"],",");
      $materiapromocional = explode(",",$parametros["materiaPromocional"]);
      foreach ($materiapromocional as $materia){
        $query->addFilterQuery("-id:".$materia);
      }
    }
 
    if ($categoria){
      $query->addFilterQuery("categoria_nomeseo_sm:".$categoria);
    }
 
    if ($catpost){
      foreach($catpost as $cat){
        $query->addFilterQuery("categoriapost_nomeseo_sm:".$cat);
      }
    }
    if($extraFilter){
      $query->addFilterQuery($extraFilter);
    }
 
    if($tag){
      $filter= '';
      foreach($tag as $key => $tagg){
        if($filter != ''){
          $filter .= " OR ";
        }
        $filter .= " tag_nomeseo_sm:".$tagg;
      }
      $query->addFilterQuery($filter);
    }
 
 
    if ($materias){
      foreach ($materias as $materia){
        $query->addFilterQuery("-post_id_i:".$materia);
      }
    }
 
    $query->addFilterQuery('post_status_i:1');
    $query->addFilterQuery('post_tipo_s:*');
    $query->addFilterQuery('-categoriapost_nome_sm:hide');
    $query->addFilterQuery('post_agendamento_dt:[* TO NOW]');
 
    $query->addFilterQuery('post_imgcapa_pequena_s:*');
 
    $query->setRows(7);
 
    $response = $client->query($query)->getResponse();
 
    $materias = $response->response->docs;
 
    if (!$materias){
      return false;
    }
 
    return $materias;
  }
 
 
 
  public function maisDetalhes($produto){
    return "/produto/".$produto->parceiro_nomeseo_s."/".$produto->produto_marcaseo_s."/".$produto->produto_nomeseo_s."/".$produto->produto_id_i;
  }
  public function linkprod($produto,$path=false){
    $utm           = $this->getUTMS();
    $pagina       = $this->getPage('string');
 
    //=================================================
    //
    // utm_source   = iLovee
    // utm_campaign = (utm_campaign)/campanha_do_banner
    // utm_content  = (utm_source)-(utm_medium)
    // utm_medium   = xml/banner
    // utm_term     = (pagina)
    //
    //===============================================
 
    $utm_source   = "ilovee";
    $utm_campaign = $utm["utm_campaign"];
    $utm_content  = $utm["utm_source"].'_'.$utm["utm_medium"];
    $utm_medium    = "xml";
    $utm_term      = ($path)?$path:$pagina['string'];
 
    $utm_term  = str_replace('/','\\',$utm_term);
 
    $utm = "utm_source=".$utm_source."&utm_medium=".$utm_medium."&utm_campaign=" . $utm_campaign. '&utm_term='.$utm_term.'&utm_content='.$utm_content;
    $uriFinal =  $this->mergeLink($produto->produto_link_s,$utm);
 
    return  $uriFinal;
  }
 
  public function linkBanner($banner,$path=false){
 
    $utm           = $this->getUTMS();
    $pagina       = $this->getPage('string');
 
    //=================================================
    //
    // utm_source   = iLovee
    // utm_campaign = (utm_campaign)/campanha_do_banner
    // utm_content  = (utm_source)-(utm_medium)
    // utm_medium   = xml/banner
    // utm_term     = (pagina)
    //
    //===============================================
 
    $utm_source   = "ilovee";
    $utm_campaign = $banner->banner_utmcampaign_s;
    $utm_content  = $utm["utm_source"].'_'.$utm["utm_medium"];
    $utm_medium    = "banner";
    $utm_term      = ($path)?$path:$pagina['string'];
 
 
    $utm = "utm_source=".$utm_source."&utm_medium=".$utm_medium."&utm_campaign=" . $utm_campaign. '&utm_term='.$utm_term.'&utm_content='.$utm_content;
 
    $uriFinal = $this->mergeLink($banner->banner_link_s,$utm);
    return  $uriFinal;
  }
 
  public function mergeLink($link,$merge){
    $uri = Http::createFromString(trim($link));
 
    $query    = new Query($uri->getQuery());
    $newQuery = $query->merge($merge);
    $newQuery=  $newQuery->__toString();
    $url = $uri->withQuery($newQuery)->__toString();
 
    return $url;
  }
 
  public function buscaTips($termo){
 
    $tips=[];
 
    $letterCount = strlen($termo) - 2;
 
 
    switch ($letterCount) {
      case 0;
      case 1;
      case 2:
        $field = false;
        break;
      case 3:
        $field = "_bk3";
        break;
      case 4:
        $field = "_bk4";
        break;
      case 5:
        $field = "_bk5";
        break;
 
      default:
        $field = "_bk6";
        break;
    }
 
 
    $termoExato = $this->buscaTipsByTermo($termo);
 
    if($termoExato){
      $marcas     = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'marca');
      $lojas       = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'loja');
      $categorias = $this->MontalojamarcaCategoriaExato($termoExato,$termo,'categoria');
 
      foreach ($marcas as $marca){
        array_push($tips,$marca);
      }
      foreach ($lojas as $loja) {
        array_push($tips,$loja);
      }
      foreach ($categorias as $categoria) {
        array_push($tips,$categoria);
      }
    }else{
 
      $tips = array_merge($tips,$this->categoriasQuery($termo,1,$field));
 
      if(!is_array($tips)){
        $tips = [];
      }
 
      $lojas = $this->Montalojamarca($this->parceiroBusca($termo,$field),$termo,1,'loja');
 
      $marcas = $this->Montalojamarca($this->brandBusca($termo,$field),$termo,1,'marca');
 
      foreach ($marcas as $marca) {
        array_push($tips,$marca);
      }
      foreach ($lojas as $loja) {
        array_push($tips,$loja);
      }
    }
 
    $postField = ($field) ? "post_nome".$field : "post_nome_poss";
 
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Vitrine"),$termo,2,$this->texto("Vitrine")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Stories"),$termo,2,$this->texto("Stories")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Mood"),$termo,2,$this->texto("Mood")));
    array_push($tips,$this->matQuery($this->getPostData($termo,$postField,"Look"),$termo,2,$this->texto("Look")));
 
    return array_filter($tips);
  }
 
  public function buscaTipsByTermo($termo){
 
    $client = $this->solrConnect("termos");
 
    $query = new \SolrQuery();
 
    $query->setQuery('termo_valor_s:"'.strtolower($termo).'"');
 
 
    $response = $client->query($query)->getResponse();
 
    $termo = $response->response->docs[0];
 
    return $termo;
  }
 
  public function highlight($text, $words) {
    $re = '~(' .  $words . ')~i';
    return preg_replace($re, '<strong>$0</strong>', $text);
  }
 
  public function matQuery($materias,$termo,$rows,$tipo){
 
    $mats = [];
 
    foreach ($materias as $mat){
      $link = $this->linkmaterias($mat);
      $texto = '<dd>'.$this->highlight($mat->post_nome_s,$termo).'</dd>';
 
      $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
      if($mat->post_slug_s){
        array_push($mats,$arr);
      }
    }
 
    return $mats[0];
  }
 
  public function MontalojamarcaCategoriaExato($lojasmarcas,$termo,$tipo){
 
    $mats = [];
 
    if ($tipo=="loja"){
      foreach ($lojasmarcas->termobusca_loja_sm as $value) {
        $link = "/loja/".$this->slugify($value);
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
        if($value){
          array_push($mats,$arr);
        }
      }
 
    }
    if($tipo=="marca"){
      foreach ($lojasmarcas->termobusca_marca_sm as $value) {
        $link = $this->slugify($value);
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
 
        if($value){
          array_push($mats,$arr);
        }
      }
    }
    if($tipo=="categoria"){
      foreach ($lojasmarcas->termobusca_categoria_sm as $key => $value) {
        $link = $lojasmarcas->termobusca_categoriaseo_sm[$key];
        $texto = $this->highlight($value,$termo);
 
        $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
 
        if($value){
          array_push($mats,$arr);
        }
      }
    }
 
    return $mats;
  }
  public function Montalojamarca($lojasmarcas,$termo,$rows,$tipo){
 
    $mats = [];
 
    foreach ($lojasmarcas as $ljmc){
 
    if ($tipo=="loja"){
 
        $link = "/loja/".$this->slugify($ljmc->parceiro_nome_s);
        $texto = $this->highlight($ljmc->parceiro_nome_s,$termo);
      }
      else
      {
        $link = "/".$this->slugify($ljmc->produto_marca_s);
        $texto = $this->highlight($ljmc->produto_marca_s,$termo);
      }
 
      $arr = array("texto"=>$texto,"tipo"=>$tipo,"link"=>$link);
      if($ljmc){
        array_push($mats,$arr);
      }
    }
 
    return $mats;
  }
 
  public function categoriasQuery($termo,$rows,$field=false){
 
    $client = $this->solrConnect('categorias');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery("categoria_nome_poss:".$termo);
    }
    else{
      $query->setQuery("categoria_nome".$field.":".$termo);
    }
    $query->setRows($rows);
 
    $response = $client->query($query)->getResponse();
 
    //return $response;
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return;
    }
 
    $cats = [];
 
    foreach ($categorias as $cat){
      $link = "/categoria/".str_replace("-","/",$cat->categoria_nomeseo_s);
      $texto = $this->highlight($cat->categoria_nome_s,$termo);
      $arr = array("texto"=>$texto,"tipo"=>"categoria","link"=>$link);
 
      array_push($cats,$arr);
    }
 
 
    return $cats;
  }
 
  public function footer($id){
    return IndexActions::bannersAction($id);
  }
  public function serverUrl(){
    return (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
  }
  public function contagem($numero){
    $qtd = strlen($numero)-1;
 
    $numero = substr($numero, 0,1);
 
    for ($i=0;$i<$qtd;$i++)
    {
      $numero .= 0 ;
    }
 
    if (strlen($numero)>1){
      $numero="+".$numero;
    }
    return $numero;
  }
  public function BreadJsonLd($breads){
 
    $bread_json = [];
    $count_bread = 0 ;
 
    $bread_json["@context"] = "http://schema.org";
    $bread_json["@type"]    = "BreadcrumbList";
    $bread_json["itemListElement"] = array();
    foreach($breads as $bread)
    {
      $sub_bread["@type"] = "ListItem";
      $sub_bread["position"] = $count_bread;
      $sub_bread["item"]["@id"] = $this->serverUrl() . '/categoria/'.$bread['seo'];
      $sub_bread["item"]["name"] = $bread["categoria"];
 
      $count_bread++;
 
      $bread_json["itemListElement"][] = $sub_bread;
    }
 
    return str_replace('\/','/',json_encode($bread_json));
  }
 
  public function leitorCategoriasPai_seo($categoria,$conteudo=""){
 
    $categorias=Categorias::findFirst(["conditions" => "categoria_nomeseo = ?1", "bind" => ["1" => $categoria]]);
 
    $conteudo .= "," . $categorias->categoria_id;
 
    $catpai=Categorias::findFirst([
      "conditions" => "categoria_id = ?1",
      "bind" => [
      "1" => $categorias->categoria_pai
      ],
      ]);
 
 
    if ($categorias->categoria_pai!=0) {
      $conteudo = $this->leitorCategoriasPai_seo($catpai->categoria_nomeseo,$conteudo);
    }
 
    return $conteudo;
  }
  public function capitalizar($str=0)
  {
    $str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
    return $str;
  }
  public function maiuscula($str=0)
  {
    $str = mb_convert_case($str, MB_CASE_UPPER, "UTF-8");
    return $str;
  }
 
  public function touchurl($url)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_TIMEOUT,2);
    curl_exec($ch);
 
    return false;
  }
  public function downloader($url,$timeout=600){
    $tentativas = 0;
 
    $headers[] = 'Connection: keep-alive';
    $headers[] = 'Pragma: no-cache';
    $headers[] = 'Cache-Control: no-cache';
    $headers[] = 'Accept-Encoding: gzip';
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
    // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3600);
    // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36');
    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // curl_setopt($ch, CURLOPT_HEADER, false);
    // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    // curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
    // curl_setopt($ch, CURLOPT_MAXREDIRS, 15);
    // curl_setopt($ch, CURLOPT_ENCODING , 'gzip');
    // curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
    // curl_setopt($ch, CURLOPT_SSLVERSION, 6);
    ///curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    //curl_setopt($ch, CURLOPT_CAINFO, getcwd().'/../cacert.pem');
 
    while($tentativas<10)
    {
      $output = curl_exec($ch);
 
      $tentativas++;
      $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if ($response_code == '200') {
        return $output;
      }
    }
    return false;
  }
  public function logger($log)
  {
    $session = new Files();
    $session->start();
 
    $auth = $session->get("auth");
 
    if ($auth['administrador_id']){
      $user = $auth['administrador_nome'] . "(" . $auth['administrador_id'] . ")";
    }
    else{
      $user = "System(0)";
    }
 
    $ano = LOGS_FOLDER . date("Y");
 
    if(!file_exists($ano)){
      mkdir($ano);
    }
 
    $mes = LOGS_FOLDER . date("Y") .'/'. date("m");
 
    if(!file_exists($mes)){
      mkdir($mes);
    }
 
    $arquivo = LOGS_FOLDER . date("Y") .'/'. date("m") .'/'. date("d") . ".log";
 
    $log = "[" . date("F j, Y, g:i a") . " - " . $user . "] " . $log . PHP_EOL;
 
    $fp = fopen($arquivo, "a");
 
    $escreve = fwrite($fp, $log);
 
    fclose($fp);
  }
  public function getMethod()
  {
    $request = new Request();
 
    $header = $request->getHeaders();
 
    $method = $header['X-Http-Method-Override'];
 
    return $method;
  }
 
  public function uploadFiles()
  {
    $request = new Request();
 
    if($request->hasFiles()){
 
      foreach($request->getUploadedFiles() as $file){
 
        if($file->moveTo('./images/ilovee_'.$file->getName())){
          return "Arquivo carregado!";
        }
        else{
          return "Erro: O arquivo não pode ser carregado :(";
        }
      }
    }
    else{
      return "Não existem arquivos para serem carregados.";
    }
  }
  public function utf8ize($d)
  {
    if (is_array($d)) {
      foreach ($d as $k => $v) {
        $d[$k] = $this->utf8ize($v);
      }
    } else if (is_string ($d)) {
      return utf8_encode($d);
    }
    return $d;
  }
 
  public function getDados()
  {
    $request = new Request();
 
    $dados = $request->getPost();
 
    return json_decode($dados['model']);
  }
 
  public function sendError($message)
  {
    $response = new Response();
    $response->setStatusCode(401);
    $response->send();
    $this->logger("Erro: " . $message);
    return json_encode(["error"=>true,"message"=>$message]);
  }
 
  public function sendSuccess($message,$params = array(),$id=false){
    $response = new Response();
    $response->setStatusCode(200);
    $response->send();
    $this->logger("Sucesso: " . $message);
    $return = array_merge(["success"=>true,"message"=>$message],$params);
 
 
    if ($id){
      $return = array_merge(["success"=>true,"message"=>$message,"id"=>$id],$params);
    }
 
    return json_encode($return);
  }
 
  public function slugify($data,$separador='-')
  {
    $slugify = new Slugify();
    return $slugify->slugify($data,$separador);
  }
  public function checkprivilege($privilege)
  {
    $session = new Files();
    $session->start();
    $auth = $session->get("auth");
 
    if ($auth["administrador_nivel"] != $privilege)
    {
      return $this->sendError("Você não possui acesso!" . $auth["administrador_nivel"]);
      exit();
 
    }
  }
  public function tolower($string)
  {
    return mb_strtolower($string,"UTF-8");
  }
 
  public function getParametros(){
 
    $request = new Request();
    return $request->getQuery();
 
  }
 
  public function datetimeBD($data){
    $date = \DateTime::createFromFormat("d-m-Y H:i:s", $data);
    return $date->format("Y-m-d H:i:s");
  }
  public function datetimeView($data){
    $date = \DateTime::createFromFormat("Y-m-d H:i:s", $data);
    return $date->format("d-m-Y H:i:s");
  }
 
  /* funções monta categorias */
 
  public function categorias($id=false) {
 
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addSortField("categoria_ordem_i",0);
 
    if (!$id){
      $query->addFilterQuery('categoria_pai_i:0');
      $query->addFilterQuery('categoria_ocultar_i:0');
    } else {
      $query->addFilterQuery('categoria_pai_i:'.$id);
      $query->addFilterQuery('categoria_ocultar_i:0');
    }
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada");
    }
 
    return $categorias;
 
  }
  public function categorias_seo($catseo){
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addSortField("categoria_ordem_i",0);
    $query->addFilterQuery('categoria_nomeseo_s:'.$catseo);
 
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada 1");
    }
 
    return $categorias;
  }
 
  public function categorias_id($id){
    $client = $this->solrConnect('categorias');
    $query = new \SolrQuery();
 
    $query->setQuery('categoria_status_i:1');
    $query->addFilterQuery('categoria_id_i:'.$id);
 
    $query->setRows(999);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhuma categoria encontrada 1");
    }
 
    return $categorias;
  }
 
  public function parceiroBusca($seo,$field=false){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nome_poss:'.$seo);
    }
    else{
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nome'.$field.':'.$seo);
    }
 
    $query->setRows(1);
 
    $query->addField('parceiro_nome_s');
 
    $response = $client->query($query)->getResponse();
 
    $lojas = $response->response->docs;
 
    return $lojas;
  }
 
  public function brandBusca($seo,$field=false){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    if(!$field){
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marca_poss:'.$seo);
    }else{
      $query->setQuery('(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marca'.$field.':'.$seo);
    }
 
    $query->setRows(1);
 
    $query->addField('produto_marca_s');
 
    $response = $client->query($query)->getResponse();
 
    $marcas = $response->response->docs;
 
    return $marcas;
  }
 
 
 
  public function parceiroNomebySEO($seo){
 
    $client = $this->solrConnect('parceiros');
 
    $query = new \SolrQuery();
 
    $query->setQuery('parceiro_nomeseo_s:'.$seo);
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $loja = $response->response->docs;
 
    return $loja[0];
  }
  public function parceiroCatsNomebySEO($seo){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    $query->setQuery('parceiro_nomeseo_s:'.$seo);
 
    $query->setRows(1);
 
    $query->setFacet(true);
 
    $query->addFacetField("produto_categoria_nome_sm");
    $query->setFacetMinCount(1);
 
    $response = $client->query($query)->getResponse();
 
    $facetacat = $response->facet_counts->facet_fields->produto_categoria_nome_sm;
 
    return $facetacat;
  }
  public function brandSEONomebySEO($seo){
 
    $client = $this->solrConnect('marcasseo');
 
    $query = new \SolrQuery();
 
    $query->setQuery('marcaseo_marcaseo_s:'.$seo);
 
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $marca = $response->response->docs;
 
    return $marca[0];
  }
 
 
  public function brandNomebySEO($seo){
 
    $client = $this->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    $query->setQuery('produto_marcaseo_s:'.$seo);
 
    $query->setRows(1);
 
    $query->setFacet(true);
 
    $query->addFacetField("produto_categoria_nome_sm");
    $query->setFacetMinCount(1);
 
    $response = $client->query($query)->getResponse();
 
    $marca = $response->response->docs;
    $facetacat = $response->facet_counts->facet_fields->produto_categoria_nome_sm;
 
    return array(0=>$marca[0],1=>$facetacat);
  }
 
  public function categoria_bread($page=false,$params=false) {
 
    $bread = [];
    $bread1 = [];
    $allcats = [];
 
    if ($page == "loja"){
      $loja = $this->parceiroNomebySEO($params["lojas"]);
      $lojaseo = $this->parceiroCatsNomebySEO($params["lojas"]);
      array_push($bread1,["categoria"=>$loja->parceiro_nome_s,"seo"=>$params["lojas"] ]);
      array_push($bread1,["categoria"=>"Lojas","seo"=>"lojas"]);
    }
    else if ($page == "marca"){
 
      $marca = $this->brandNomebySEO($params["marcas"]);
      $marca["categorias"] = $marca[1];
      $marca["marca"] = $marca[0];
      $marcaseo = $this->brandSEONomebySEO($params["marcas"]);
      array_push($bread1,["categoria"=>$marca["marca"]->produto_marca_s,"seo"=>$params["marcas"] ]);
      array_push($bread1,["categoria"=>"Marcas","seo"=>"marcas"]);
    }
 
    if ($params["categoria"]){
      $seo = $params["categoria"];
      $categorias = $this->categorias_seo($seo);
      $categorias = $categorias[0];
    }
 
    if ($page=="categoria" || $page=="outlet" || $page=="novidades"){
      array_push($bread1, array("categoria"=>$categorias->categoria_nome_s,"seo"=>""));
    }
 
    if($page=="busca"){
      array_push($bread1,["categoria"=>"Busca: ".$params["termo"],"seo"=>"/busca/".$params["termo"] ]);
    }
    array_push($allcats,array("categoria"=>$categorias->categoria_nome_s,"seo"=>$params["categoria"]));
 
 
    $catpai = $categorias->categoria_pai_i;
 
    while($catpai!=0){
 
      $cat = $this->categorias_id($catpai);
      $cat = $cat[0];
      $catpai = $cat->categoria_pai_i;
 
      $catseo = str_replace("-","/",$cat->categoria_nomeseo_s);
 
      if ($page=="categoria" || $page=="outlet" || $page=="novidades"){
        array_push($bread1,array("categoria"=>$cat->categoria_nome_s,"seo"=>$page."/".$catseo));
      }
 
      array_push($allcats,array("categoria"=>$cat->categoria_nome_s,"seo"=>$cat->categoria_nomeseo_s));
 
 
    }
 
    $bread["categoria"] = $categorias; //pega todas as informações da categoria
    $bread["allcats"] = $allcats;
    $bread["parceiro"] = $loja;
    $bread["breads"]   = array_reverse($bread1);
    $bread["marca"] = $marcaseo;
    $bread["catmarca"] = $marca["categorias"];
    $bread["catloja"] = $lojaseo;
 
    return $bread;
 
 
  }
  public function getCategorias($cacheNome='menu.cache',$liSub = 'closeMenu',$ul='menu-acordion menu-close',$catativa=false,$pagina,$parametros,$contador,$seoativas,$mobileLateral=false){
 
    $frontCache = new FrontData(
      [
      "lifetime" => 172800,
      ]
      );
 
    $cache = new BackFile(
      $frontCache,
      [
      "cacheDir" => APPLICATION_PATH . "/cache/",
      ]
      );
 
    $cacheKey = $cacheNome;
    $cats = $cache->get($cacheKey);
    if ($cats === null) {
 
      $cats = $this->montaCategorias(0);
      $cache->save($cacheKey, $cats);
    }
    $menuHtml = $this->montaHtmlMenu($cats,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral);
    //die;
    return $menuHtml;
 
  }
  public function montaCategorias($id){
 
    $allcats = $this->categorias($id);
    if($allcats['Error']){return;}
 
    foreach ($allcats as $key => $acat){
      $subcat = $this->montaCategorias($acat->id);
      if ($subcat){
        $allcats[$key]['sub'] = $subcat;
      }
    }
 
    return $allcats;
 
  }
 
  public function contador($section="categoria",$param=false){
 
    $client = $this->solrConnect('produtos');
 
    $request = new Request();
    $query = new \SolrQuery();
 
    if ($section == "busca"){
      $query->setQuery($param["termo"]);
      $query->addFilterQuery("produto_categoria_nomeseo_sm:*");
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    if ($section == "categoria"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    if ($section == "loja"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("parceiro_nomeseo_s:" . $param["lojas"]);
    }
 
    if ($section == "marca"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("produto_marcaseo_s:" . $param["marcas"]);
    }
 
    if ($section == "outlet"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
      $query->addFilterQuery("-produto_precocomparativo_f:0");
    }
 
    if ($section == "novidades"){
      $query->setQuery('produto_categoria_nomeseo_sm:*');
      $query->addFilterQuery("produto_disponivel_i:1");
      $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
    }
 
    $query->setFacet(true);
    $query->addFacetField('produto_categoria_nomeseo_sm');
 
    $response = $client->query($query)->getResponse();
 
    $produtos = $response->facet_counts->facet_fields->produto_categoria_nomeseo_sm;
    return $produtos;
  }
 
 
  public function montaHtmlMenu($array,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral){
 
    $menuHtml = "";
    $break = 0;
 
    foreach ($array as $key => $value){
 
      if ($pagina == "categoria" || $pagina == "outlet" || $pagina == "novidades"){
        $link = "/categoria/".$value->categoria_nomeseo_s;
      }
      else if ($pagina == "busca")
      {
        $link = "?s=".$parametros["termo"]."&categoria=".$value->categoria_nomeseo_s;
      }
      else
      {
        $link = "?categoria=".$value->categoria_nomeseo_s;
      }
 
      $sub = $this->montaHtmlMenu($value->sub,$liSub,$ul,$catativa,$pagina,$parametros,$contador,$seoativas,$mobileLateral);
 
      $categoriaAtivaPai = explode("/",$catativa)[0];
      $valueCatPai = explode("/", $value->categoria_nomeseo_s)[0];
 
      if( ($categoriaAtivaPai == 'moda' && ($valueCatPai == 'beauty') ) ||  ($categoriaAtivaPai == 'moda' && ($valueCatPai == 'casa')) ){
        $display = "display:none;";
      }
      elseif( ($categoriaAtivaPai == 'beauty' && ($valueCatPai == 'casa') ) ||  ($categoriaAtivaPai == 'beauty' && ($valueCatPai == 'moda')) ){
        $display = "display:none;";
      }
      elseif( ($categoriaAtivaPai == 'casa' && ($valueCatPai == 'beauty') ) ||  ($categoriaAtivaPai == 'casa' && ($valueCatPai == 'moda')) ) {
        $display = "display:none;";
      }else{
        $display = "";
      }
 
      $menuHtml .= "<li  style='".$display."' class='".(in_array($value->categoria_nomeseo_s, $seoativas) && $sub?"openMenu ":"").($sub ? $liSub  : "")."'>"."<span class='".($catativa == $value->categoria_nomeseo_s?'active':'')."' ><a ".($sub && $mobileLateral ? "" : " href='".$link."'").">".$value->categoria_nome_s . "<span style='display:none'> (" . $contador[$value->categoria_nomeseo_s] .")</span>". "</a></span>" ;
      $menuHtml .= $sub ? "<ul style='".((in_array($value->categoria_nomeseo_s, $seoativas) || $this->openFirstChild($catativa,$value->categoria_nome_s) )?"display:block ":"")."' class='".$ul."'>" : "";
      $menuHtml .= $sub && $mobileLateral ? "<li><span class=''><a href=".$link.">Todos</a></span></li>" : "";
      $menuHtml .= $sub;
      $menuHtml .= $sub ? "</ul>" : "";
      $menuHtml .= "</li>";
 
      $break++;
    }
 
    return $menuHtml;
  }
  public function openFirstChild($catativa,$value){
    if($catativa == "moda" && $value == "Roupas"){
      return true;
    }
    elseif($catativa == "beauty" && $value == "Olhos"){
      return true;
    }
    elseif($catativa == "casa" && $value == "Mesa"){
      return true;
    }
    else{
      return false;
    }
  }
  public function menu($id=false){
    if($id){
      return $this->categorias($id);
    }
    else{
      return $this->categorias();
    }
  }
 
  public function submenu($categoria,$id){
 
    $client = $this->solrConnect('banners');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
    if($categoria){
      $query->addFilterQuery("banner_categoria_nome_sm:".$categoria);
    }
    else{
      $query->addFilterQuery("id:".$id);
    }
    $query->addFilterQuery('banner_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('banner_termino_dt:[NOW TO *]');
    $query->addFilterQuery('banner_tipo_s:11');
    $query->addFilterQuery('banner_status_s:1');
    $query->addSortField("banner_ordem_i",0);
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
    $query->setRows(9999);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
    return $banners[0];
  }
 
  public function removeAcento($termo){
    $replace = array(
      'ъ'=>'-', 'Ь'=>'-', 'Ъ'=>'-', 'ь'=>'-',
      'Ă'=>'A', 'Ą'=>'A', 'À'=>'A', 'Ã'=>'A', 'Á'=>'A', 'Æ'=>'A', 'Â'=>'A', 'Å'=>'A', 'Ä'=>'Ae',
      'Þ'=>'B',
      'Ć'=>'C', 'ץ'=>'C', 'Ç'=>'C',
      'È'=>'E', 'Ę'=>'E', 'É'=>'E', 'Ë'=>'E', 'Ê'=>'E',
      'Ğ'=>'G',
      'İ'=>'I', 'Ï'=>'I', 'Î'=>'I', 'Í'=>'I', 'Ì'=>'I',
      'Ł'=>'L',
      'Ñ'=>'N', 'Ń'=>'N',
      'Ø'=>'O', 'Ó'=>'O', 'Ò'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'Oe',
      'Ş'=>'S', 'Ś'=>'S', 'Ș'=>'S', 'Š'=>'S',
      'Ț'=>'T',
      'Ù'=>'U', 'Û'=>'U', 'Ú'=>'U', 'Ü'=>'Ue',
      'Ý'=>'Y',
      'Ź'=>'Z', 'Ž'=>'Z', 'Ż'=>'Z',
      'â'=>'a', 'ǎ'=>'a', 'ą'=>'a', 'á'=>'a', 'ă'=>'a', 'ã'=>'a', 'Ǎ'=>'a', 'а'=>'a', 'А'=>'a', 'å'=>'a', 'à'=>'a', 'א'=>'a', 'Ǻ'=>'a', 'Ā'=>'a', 'ǻ'=>'a', 'ā'=>'a', 'ä'=>'ae', 'æ'=>'ae', 'Ǽ'=>'ae', 'ǽ'=>'ae',
      'б'=>'b', 'ב'=>'b', 'Б'=>'b', 'þ'=>'b',
      'ĉ'=>'c', 'Ĉ'=>'c', 'Ċ'=>'c', 'ć'=>'c', 'ç'=>'c', 'ц'=>'c', 'צ'=>'c', 'ċ'=>'c', 'Ц'=>'c', 'Č'=>'c', 'č'=>'c', 'Ч'=>'ch', 'ч'=>'ch',
      'ד'=>'d', 'ď'=>'d', 'Đ'=>'d', 'Ď'=>'d', 'đ'=>'d', 'д'=>'d', 'Д'=>'D', 'ð'=>'d',
      'є'=>'e', 'ע'=>'e', 'е'=>'e', 'Е'=>'e', 'Ə'=>'e', 'ę'=>'e', 'ĕ'=>'e', 'ē'=>'e', 'Ē'=>'e', 'Ė'=>'e', 'ė'=>'e', 'ě'=>'e', 'Ě'=>'e', 'Є'=>'e', 'Ĕ'=>'e', 'ê'=>'e', 'ə'=>'e', 'è'=>'e', 'ë'=>'e', 'é'=>'e',
      'ф'=>'f', 'ƒ'=>'f', 'Ф'=>'f',
      'ġ'=>'g', 'Ģ'=>'g', 'Ġ'=>'g', 'Ĝ'=>'g', 'Г'=>'g', 'г'=>'g', 'ĝ'=>'g', 'ğ'=>'g', 'ג'=>'g', 'Ґ'=>'g', 'ґ'=>'g', 'ģ'=>'g',
      'ח'=>'h', 'ħ'=>'h', 'Х'=>'h', 'Ħ'=>'h', 'Ĥ'=>'h', 'ĥ'=>'h', 'х'=>'h', 'ה'=>'h',
      'î'=>'i', 'ï'=>'i', 'í'=>'i', 'ì'=>'i', 'į'=>'i', 'ĭ'=>'i', 'ı'=>'i', 'Ĭ'=>'i', 'И'=>'i', 'ĩ'=>'i', 'ǐ'=>'i', 'Ĩ'=>'i', 'Ǐ'=>'i', 'и'=>'i', 'Į'=>'i', 'י'=>'i', 'Ї'=>'i', 'Ī'=>'i', 'І'=>'i', 'ї'=>'i', 'і'=>'i', 'ī'=>'i', 'ij'=>'ij', 'IJ'=>'ij',
      'й'=>'j', 'Й'=>'j', 'Ĵ'=>'j', 'ĵ'=>'j', 'я'=>'ja', 'Я'=>'ja', 'Э'=>'je', 'э'=>'je', 'ё'=>'jo', 'Ё'=>'jo', 'ю'=>'ju', 'Ю'=>'ju',
      'ĸ'=>'k', 'כ'=>'k', 'Ķ'=>'k', 'К'=>'k', 'к'=>'k', 'ķ'=>'k', 'ך'=>'k',
      'Ŀ'=>'l', 'ŀ'=>'l', 'Л'=>'l', 'ł'=>'l', 'ļ'=>'l', 'ĺ'=>'l', 'Ĺ'=>'l', 'Ļ'=>'l', 'л'=>'l', 'Ľ'=>'l', 'ľ'=>'l', 'ל'=>'l',
      'מ'=>'m', 'М'=>'m', 'ם'=>'m', 'м'=>'m',
      'ñ'=>'n', 'н'=>'n', 'Ņ'=>'n', 'ן'=>'n', 'ŋ'=>'n', 'נ'=>'n', 'Н'=>'n', 'ń'=>'n', 'Ŋ'=>'n', 'ņ'=>'n', 'ʼn'=>'n', 'Ň'=>'n', 'ň'=>'n',
      'о'=>'o', 'О'=>'o', 'ő'=>'o', 'õ'=>'o', 'ô'=>'o', 'Ő'=>'o', 'ŏ'=>'o', 'Ŏ'=>'o', 'Ō'=>'o', 'ō'=>'o', 'ø'=>'o', 'ǿ'=>'o', 'ǒ'=>'o', 'ò'=>'o', 'Ǿ'=>'o', 'Ǒ'=>'o', 'ơ'=>'o', 'ó'=>'o', 'Ơ'=>'o', 'œ'=>'oe', 'Œ'=>'oe', 'ö'=>'oe',
      'פ'=>'p', 'ף'=>'p', 'п'=>'p', 'П'=>'p',
      'ק'=>'q',
      'ŕ'=>'r', 'ř'=>'r', 'Ř'=>'r', 'ŗ'=>'r', 'Ŗ'=>'r', 'ר'=>'r', 'Ŕ'=>'r', 'Р'=>'r', 'р'=>'r',
      'ș'=>'s', 'с'=>'s', 'Ŝ'=>'s', 'š'=>'s', 'ś'=>'s', 'ס'=>'s', 'ş'=>'s', 'С'=>'s', 'ŝ'=>'s', 'Щ'=>'sch', 'щ'=>'sch', 'ш'=>'sh', 'Ш'=>'sh', 'ß'=>'ss',
      'т'=>'t', 'ט'=>'t', 'ŧ'=>'t', 'ת'=>'t', 'ť'=>'t', 'ţ'=>'t', 'Ţ'=>'t', 'Т'=>'t', 'ț'=>'t', 'Ŧ'=>'t', 'Ť'=>'t', '™'=>'tm',
      'ū'=>'u', 'у'=>'u', 'Ũ'=>'u', 'ũ'=>'u', 'Ư'=>'u', 'ư'=>'u', 'Ū'=>'u', 'Ǔ'=>'u', 'ų'=>'u', 'Ų'=>'u', 'ŭ'=>'u', 'Ŭ'=>'u', 'Ů'=>'u', 'ů'=>'u', 'ű'=>'u', 'Ű'=>'u', 'Ǖ'=>'u', 'ǔ'=>'u', 'Ǜ'=>'u', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'У'=>'u', 'ǚ'=>'u', 'ǜ'=>'u', 'Ǚ'=>'u', 'Ǘ'=>'u', 'ǖ'=>'u', 'ǘ'=>'u', 'ü'=>'ue',
      'в'=>'v', 'ו'=>'v', 'В'=>'v',
      'ש'=>'w', 'ŵ'=>'w', 'Ŵ'=>'w',
      'ы'=>'y', 'ŷ'=>'y', 'ý'=>'y', 'ÿ'=>'y', 'Ÿ'=>'y', 'Ŷ'=>'y',
      'Ы'=>'y', 'ž'=>'z', 'З'=>'z', 'з'=>'z', 'ź'=>'z', 'ז'=>'z', 'ż'=>'z', 'ſ'=>'z', 'Ж'=>'zh', 'ж'=>'zh'
      );
    return mb_strtolower(strtr($termo, $replace));
  }
 
  public function getCupomHeader(){
 
    $client = $this->solrConnect('cupons');
 
    $request = new Request();
    $query = new \SolrQuery();
 
    $query->setQuery('parceirocupom_textoheader_s:*');
 
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
 
    $query->addFilterQuery("parceirocupom_ativo_i:1");
    $query->addFilterQuery("parceirocupom_destaquehome_i:1");
    $query->addFilterQuery('parceirocupom_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('parceirocupom_termino_dt:[NOW TO *]');
    $query->addSortField('parceirocupom_ordem_i', 0);
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $cupom = $response->response->docs;
 
    if(!$cupom){
      return false;
    }
    $html = $this->montaCupomHeader($cupom[0]);
 
    return $html;
  }
  public function montaCupomHeader($cupom){
    $estrutura  = '';
    $estrutura .= '<div class="container-fluid topAlert">';
    $estrutura .= '  <div class="row ">';
    $estrutura .= '    <div class="col-xs-16 text-center">';
    $estrutura .= '      <p>'.$cupom->parceirocupom_textoheader_s. ' - <a href="/cupom/'.$cupom->parceiro_nomeseo_s.'">Ver condições</a></p>';
    $estrutura .= '    </div>';
    $estrutura .= '  </div>';
    $estrutura .= '</div>';
 
    return $estrutura;
  }
 
  public function getPopup(){
 
    $client = $this->solrConnect('banners');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
 
    $query->addFilterQuery('banner_inicio_dt:[* TO NOW]');
    $query->addFilterQuery('banner_termino_dt:[NOW TO *]');
    $query->addFilterQuery('banner_tipo_s:(1 or 16 or 17)');
    $query->addFilterQuery('banner_status_s:1');
    $query->addSortField("banner_cadastro_dt",1);
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
 
    $popup = $banners[0];
 
    $templates = [
    1 => "popups/blocoImagem",
    16 => "popups/cadastroNews",
    17 => "popups/blocoFooter",
    ];
 
 
    $dados = [
    "template" => $templates[$popup->banner_tipo_s],
    "data" => $popup,
    ];
 
    return $dados;
 
  }
 
  public function montafilterLetter($marcas){
    $alfa = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
    $letras = array_keys($marcas);
 
    $filtro = "";
    foreach ($alfa as $key => $value) {
      if(in_array($value,$letras)){
        $filtro .= "<li class='hasContent'>".strtoupper($value)."</li>";
      }
      else{
        $filtro .= "<li>".strtoupper($value)."</li>";
      }
    }
 
    return $filtro;
 
  }
 
  public function mergeArrays($array1, $array2, $array3) {
    $result = array();
 
    foreach ( $array1 as $key=>$value ) {
      $result[] = array( 'nome' => $value, 'nomeseo' => $array2[$key], 'icone' => $array3[$key] );
    }
 
    return $result;
  }
 
 
  public function getDevice(){
    // Basic detection.
    if($this->detect->isAndroidOS()){
      $sistema = '-Android';
    }
    if($this->detect->isiOS()){
      $sistema = '-iOS';
    }
 
    if($this->detect->isTablet()){
      return "Tablet ".$sistema;
    }
 
    if($this->detect->isMobile()){
      return "Mobile" .$sistema ;
    }
 
    return "Desktop";
  }
  public function sets($page) {
    $this->setReferal();
    $this->_Page = $page;
  }
 
  public function texto($slug=false,$id=false,$returnNull=false){
 
    $client = $this->solrConnect('textos');
 
    $query = new \SolrQuery();
    if ($slug){
      $slug = str_replace('/','\/',$slug);
      $query->setQuery('texto_slug_s:("'.$slug.'") AND texto_status_i:1');
 
      $cacheKey = md5($slug);
    }
    if ($id){
      $query->setQuery('texto_id_i:'.$id.' AND texto_status_i:1');
      $cacheKey = $id;
    }
 
    $frontCache = new FrontData(["lifetime" => 10800, ]);
    $cache = new BackFile($frontCache, ["cacheDir" => APPLICATION_PATH . "/cache/", ] );
 
    $txts = null;//''$cache->get($cacheKey);
    if ($txts === null) {
      $query->setRows(1);
      $response = $client->query($query)->getResponse();
      $txts = $response->response->docs;
      $cache->save($cacheKey, $txts);
    }
 
    if (!$txts){
      return ($returnNull)? "" :$slug;
    }
 
    return $txts[0]->texto_valor_s;
  }
 
  public function getCategoriaData($search) {
 
    $client = $this->solrConnect('categorias');
 
    $query = new \SolrQuery();
    if(is_numeric($search)){
      $query->setQuery("categoria_id_i :".$search);
 
    }else{
      $query->setQuery("categoria_nomeseo_s :".$search);
    }
 
    $response = $client->query($query)->getResponse();
 
    $categoria = $response->response->docs;
 
    return $categoria;
  }
 
  public function getMarcaData($search) {
    $client = $this->solrConnect('marcasseo');
    $query = new \SolrQuery();
    if(is_numeric($search)){
      $query->setQuery("marcaseo_id_i :".$search);
    }else{
      $query->setQuery("marcaseo_marcaseo_s :".$search);
    }
    $response = $client->query($query)->getResponse();
    $marca = $response->response->docs;
 
    return $marca;
  }
 
  public function getParceirosData($parceiro=false){
 
    $client = $this->solrConnect('parceiros');
 
    $query = new \SolrQuery();
 
    $query->setQuery("parceiro_nomeseo_s:{$parceiro}");
 
    $response = $client->query($query)->getResponse();
 
    $parceiro = $response->response->docs;
 
    return $parceiro;
  }
 
  public function getCupomData($parceiro=false){
    $client = $this->solrConnect('cupons');
 
    $query = new \SolrQuery();
 
    $query->setQuery("parceiro_nomeseo_s:{$parceiro}");
    $query->addFilterQuery("parceirocupom_ativo_i:1");
    $query->addSortField("parceirocupom_destaque_i",0);
    $response = $client->query($query)->getResponse();
 
    $cupons = $response->response->docs;
 
    return $cupons;
  }
 
  public function getPostData($slug,$field='post_slug_s',$type= '*'){
    $client = $this->solrConnect('posts');
    $query = new \SolrQuery();
 
    $query->setQuery($field.":".$slug."^2");
 
    $query->addFilterQuery("post_tipo_s:".$type);
    $query->addFilterQuery("-categoriapost_nome_sm:hide");
 
    $query->addSortField("post_agendamento_dt",1);
 
    $response = $client->query($query)->getResponse();
    $post = $response->response->docs;
    return $post;
  }
 
  public function getProdutoData($id){
    $client = $this->solrConnect('produtos');
    $query = new \SolrQuery();
    $query->setQuery("produto_id_i :".$id);
    $response = $client->query($query)->getResponse();
    $produto = $response->response->docs;
    return $produto;
  }
 
 
  public function getTitle(){
 
    $page  = $this->getPage();
    $texto = $this->texto($page[0],false,true);
 
    if(!$texto){
      switch ($this->_Page) {
        case 'categoria':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopagina_s)?$categoria->categoria_titulopagina_s:$categoria->categoria_nome_s;
          break;
        case 'outlet':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopaginaoutlet_s)?$categoria->categoria_titulopaginaoutlet_s:$categoria->categoria_nome_s;
          break;
        case 'novidades':
            $categoria = $this->getCategoriaData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($categoria->categoria_titulopaginanovidades_s)?$categoria->categoria_titulopaginanovidades_s:$categoria->categoria_nome_s;
          break;
        case 'marca':
            $marca = $this->getMarcaData(str_replace('/', '',$this->getPage()[0]))[0];
            $texto = ($marca->marcaseo_titulo_s)?$marca->marcaseo_titulo_s:"";
 
            if($texto == ""){
              $texto = $this->getMarcaNomeEmProduto(str_replace('/', '',$this->getPage()[0]))." - Encontre no iLovee" ;
            }
 
          break;
        case 'loja':
            $parceiro = $this->getParceirosData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = ($parceiro->parceiro_titulopagina_s !== "#") ? $parceiro->parceiro_titulopagina_s : $parceiro->parceiro_nome_s." - Encontre no iLovee";
          break;
        case 'cupom':
            $cupom = $this->getCupomData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = $this->texto("prefixo-cupom-seo")." ". $cupom->parceiro_nome_s;
          break;
        case 'materia':
        case 'look':
        case 'mood':
            $post = $this->getPostData(str_replace('/'.$this->_Page.'/', '',$this->getPage()[0]))[0];
            $texto = $post->post_nome_s;
          break;
        case 'produto':
            $produto_id = explode('/',$this->getPage()[0]);
            $produto_id =  $produto_id[count($produto_id)-1];
            $produto = $this->getProdutoData($produto_id)[0];
            $texto = $produto->produto_nome_s;
          break;
        case '404':
            $texto = $this->texto("title-404");
          break;
 
      }
    }
 
    $texto = ($texto)?$texto: "+ de 130 mil achados em Moda, Beleza e Decoração" ;
    return $texto." ".$this->texto('titulo-sufixo-seo');
  }
 
  public function getMarcaNomeEmProduto($marca){
    $client = $this->solrConnect('produtos');
    $query = new \SolrQuery();
    $query->setQuery("produto_marca_poss :".$marca);
    $response = $client->query($query)->getResponse();
    $prodMarca = $response->response->docs;
    return $prodMarca[0]->produto_marca_s;
  }
 
  public function getUTMS($item = 'all') {
 
    $utm['utm_source']    = $this->session->get("utm_source");
    $utm['utm_medium']    = $this->session->get("utm_medium");
    $utm['utm_campaign']  = $this->session->get("utm_campaign");
    $utm['utm_term']    = $this->session->get("utm_term");
    $utm['utm_content']    = $this->session->get("utm_content");
 
    if($item == 'all'){ return $utm;}
 
    return $utm[$item];
  }
 
 
  public function getPage($tipo = false){
    $uri = explode('?',$_SERVER['REQUEST_URI']);
    parse_str($uri[1],$uri[1]);
 
    if($tipo == 'string'){
      $url = $uri[0]
      .(($uri[1]['s'])?'-Busca por:'.$uri[1]['s']:'')
      .(($uri[1]['pagina'])?'-Página:'.$uri[1]['pagina']:'');
 
      $urlString['string'] = $url;
      $urlString['code'] = rawurlencode($url);
 
      return $urlString;
    }
    return  $uri;
  }
 
 
  public function getDominio($ref){
    $dominio = str_replace("http://","",$ref);
    $dominio = str_replace("https://","",$dominio);
    $dominio = explode("/",$dominio);
    $dominio = $dominio[0];
    $dominio = str_replace("www.","",$dominio);
    $dominio = str_replace(".com","",$dominio);
    $dominio = str_replace(".br","",$dominio);
    $dominio = str_replace(".net","",$dominio);
    $dominio = str_replace(".","",$dominio);
    $dominio = str_replace("/","",$dominio);
    return $dominio;
 
  }
  public function setReferal() {
 
    // ----- Old referal ----
    // $referal = $this->session->get("referal");
    // if (!$referal['referal'] || isset($_GET['campanha'])){
    //   echo $ref;
 
    //   if (isset($_REQUEST['campanha'])) {
    //     if (isset($campanha)){
    //       $name = "adw-".$campanha;
    //     }else{
    //       $name = "adw-".$_GET['campanha'];
    //     }
    //     $campanha = "adw-".$_GET['campanha'];
    //   }elseif(!isset($_GET['campanha']) && $_SERVER['HTTP_REFERER'] != "" ){
    //     $ref = $_SERVER['HTTP_REFERER'];
    //     $dominio = str_replace("http://","",$ref);
    //     $dominio = str_replace("https://","",$dominio);
    //     $dominio = explode("/",$dominio);
    //     $dominio = $dominio[0];
    //     $dominio = str_replace("www.","",$dominio);
    //     $dominio = str_replace(".com","",$dominio);
    //     $dominio = str_replace(".br","",$dominio);
    //     $dominio = str_replace(".net","",$dominio);
    //     $dominio = str_replace(".","",$dominio);
    //     $dominio = str_replace("/","",$dominio);
 
    //     if ($dominio=="google"){
    //       if (isset($_GET['campanha'])) {
    //         $dominio = "adw-".$_GET['campanha'];
    //       }else{
    //         $dominio='organic';
    //       }
    //     }
 
    //     if ($dominio=="iloveecommerce"){$dominio='direct';}
    //     if ($dominio=="lmfacebook" || $dominio=="mfacebook" || $dominio=="lfacebook"){$dominio='facebook';}
    //     if ($dominio=="linstagram"){$dominio='instagram';}
    //     if ($dominio=="s3s-br1"){$dominio='newsletter';}
 
    //     $name = $dominio;
    //   }else{
    //     $name = "direct";
    //     if (isset($_GET['utm_source'])) {
    //       if ($_GET['utm_source']=="notification"){
    //         $name = "notification_".$_GET['utm_campaign'];
    //       }
    //     }
    //   }
 
    // }
 
 
    if(!$this->session->get("utm_source")){ $this->session->set('utm_source','direct');}
    if(!$this->session->get("utm_medium")){ $this->session->set('utm_medium','none');}
    if(!$this->session->get("utm_campaign")){ $this->session->set('utm_campaign','none');}
    if(!$this->session->get("utm_term")){ $this->session->set('utm_term','none');}
    if(!$this->session->get("utm_content")){ $this->session->set('utm_content','none');}
 
    if($this->getDominio($_SERVER['HTTP_REFERER']) == 'linstagram'){
      $this->session->set('utm_source','Instagram');
      $this->session->set('utm_medium','Redes sociais' );
    }
 
    if (isset($_GET['utm_source']) || isset($_GET['gclid'])){
      $source = $_GET['utm_source'];
 
      if(isset($_GET['gclid'])){ $source = 'google'; }
 
      $this->session->set('utm_source',$source);
    }
 
    if (isset($_GET['utm_medium']) || isset($_GET['gclid'])){
      $medium = $_GET['utm_medium'];
 
      if(isset($_GET['gclid'])){ $medium = 'cpc'; }
      $this->session->set('utm_medium',$medium );
    }
 
    if (isset($_GET['utm_campaign'])){
      $this->session->set('utm_campaign',$_GET['utm_campaign']);
    }
 
    if (isset($_GET['utm_term'])){
      $this->session->set('utm_term',$_GET['utm_term']);
    }
 
    if (isset($_GET['utm_content'])){
      $this->session->set('utm_content',$_GET['utm_content']);
    }
  }
 
  public function clearCache(){
    array_map('unlink', glob('/var/www/iLove2.0/apps/cache/*'));
    return;
  }
 
  public function getTermoLink($termo){
 
    $client = $this->solrConnect("termos");
 
    $query = new \SolrQuery();
 
    $query->setQuery('termo_valor_s:"'.strtolower($termo).'"');
 
    $response = $client->query($query)->getResponse();
 
    $termo = $response->response->docs;
 
    return $termo[0]->termobusca_link_s;
  }
 
 
}
#2Multiple\Helpers\Helpers->categoria_bread(categoria, Array(12))
/var/www/iLove2.0/apps/frontend/controllers/CategoriaController.php (32)
<?php
namespace Multiple\Frontend\Controllers;
 
use Phalcon\Mvc\Controller;
use Phalcon\Http\Request;
use Multiple\Frontend\Controllers\IndexController as IndexActions;
use Phalcon\Cache\Backend\File as BackFile;
use Phalcon\Cache\Frontend\Data as FrontData;
 
 
class CategoriaController extends Controller{
  public function indexAction(){
 
    $request = new Request;
 
    $query = $this->RouteCategoriaSeo($this->dispatcher);
 
    $this->view->page       = $this->dispatcher->getParam("page");
    $this->view->nomeseo     = $this->dispatcher->getParam("nomeseo");
    $this->view->numeropagina  = $request->getQuery("pagina");
 
    $this->view->newsDegubMode = (isset($_GET['newsdebug']))?true:false ;
    $parametros = $viewParametros = $this->parametrosProdutos($this->dispatcher,$request,$this->view->page,$query);
 
    $this->view->likes = array_filter(unserialize($this->cookies->get("likes")->getValue()));
    $this->view->categoria = $viewParametros['categoria'];
 
    $viewParametros['categoria'] = base64_encode($viewParametros['categoria']);
    $this->view->parametros = $viewParametros;
 
 
    $breads = $this->helper->categoria_bread($this->view->page,$parametros);
 
    $this->view->breads = $breads["breads"];
 
    $this->view->headerlojamarca = $this->headerlojamarca($parametros,$breads["parceiro"]);
 
    $this->view->allcatsbread = array_column($breads["allcats"],"seo");
 
    $this->view->tituloPage = $this->tituloPage($parametros,$breads);
 
    $this->view->descPage = $this->descPage($parametros,$breads);
 
    $this->view->textoVendedor = $this->textVend($parametros,$breads);
 
    $this->view->tituloCat = end($breads["breads"])["categoria"];
 
    $this->view->allInfoCat = $breads["categoria"];
 
    $this->view->categoria  = $parametros["categoria"];
 
    $this->view->debug      = $parametros["debug"];
 
    $frontCache = new FrontData([
      "lifetime" => 20000,
    ]);
 
    $cache = new BackFile($frontCache,[
      "cacheDir" => APPLICATION_PATH . "/cache/",
    ]);
 
 
    $cacheProdutos = $cache->get(base64_encode('PRODUTOS-'.md5($_SERVER['REQUEST_URI'])));
 
    if($cacheProdutos === null){
      $cacheProdutos = $this->produtos($parametros,$this->view->numeropagina);
      $cache->save(base64_encode('PRODUTOS-'.md5($_SERVER['REQUEST_URI'])), $cacheProdutos);
    }
 
    $this->view->produtos   = $cacheProdutos;
 
    $this->view->ranges = $this->ranges($this->view->produtos["ranges"]);
 
    $this->view->qtdprod   = $this->helper->contagem($this->view->produtos["contagem"]);
 
    $this->view->lateralCats = $this->helper->getCategorias(
      'menu.categoria',
      'closeMenu',
      'menu-acordion menu-close',
      $this->view->categoria,
      $this->view->page,
      $parametros,
      $this->helper->contador($this->view->page,$parametros),
      $this->view->allcatsbread
    );
 
    //footer
      $this->view->dados = array (
      'novaslojasmarcas'     => $this->helper->footer(7),
      'footertopcategorias'  => $this->helper->footer(8),
      'footermarcas'      => $this->helper->footer(9),
      'footerlojas'      => $this->helper->footer(10)
    );
 
    if ($request->getQuery("debug")){
      $this->view->param = $this->view->produtos;
    }
    else{
      $this->view->param = $parametros;
    }
 
    $this->view->render("categoria",'index');
  }
 
  public function ranges($ranges){
    $rang = [];
    foreach($ranges as $key => $range){
      if ($range!=0){
        $rang[$key] =$range;
 
      }
    }
    return $rang;
  }
 
  public function headerlojamarca($params,$parceiro){
 
    if ($params["page"]=="marca"){
      $client = $this->helper->solrConnect('marcasseo');
      $query = new \SolrQuery();
      $query->setQuery('marcaseo_marcaseo_s:'.$params['marcas']);
      $query->addFilterQuery("marcaseo_status_i:1");
      $query->setRows(1);
      $response = $client->query($query)->getResponse();
      $headermarca = $response->response->docs;
      return $headermarca[0];
    }
    if ($params["page"]=="loja"){
      return $parceiro;
    }
    return false;
  }
 
 
  public function menuContent($parametros=false){
    return $parametros;
  }
 
  public function cores(){
    $client = $this->helper->solrConnect('cores');
    $request = new Request();
    $query = new \SolrQuery();
 
    $query->setQuery("*");
 
    $query->addFilterQuery("cor_status_i:1");
 
    $response = $client->query($query)->getResponse();
 
    $cores = $response->response->docs;
 
    return $cores;
  }
 
  public function RouteCategoriaSeo($dispatcher){
    $cat = [];
    $cat[] = $dispatcher->getParam("categoria");
    $cat[] = $dispatcher->getParam("categoria2");
    $cat[] = $dispatcher->getParam("categoria3");
    $cat[] = $dispatcher->getParam("categoria4");
 
    $cat = array_filter($cat);
 
    $query = implode("/",$cat);
 
    return $query;
  }
 
  public function produtos($parametros,$offset=false,$filtros=false){
 
    $client = $this->helper->solrConnect('produtosdisponiveis');
    $rows = 50;
    $request = new Request();
    $query = new \SolrQuery();
 
    if ($offset){
      $startpoint = $rows*$offset;
      $query->setStart($startpoint);
    }
 
    if(!$parametros["ordem"]){
      if ($parametros["page"]=="novidades"){
        $query->addSortField("score desc, produto_alteracao_dt",1);
      }else{
        $query->addSortField("score desc, random_".date("d"),0);
      }
    }else{
      $ordem = $parametros["ordem"];
      $ord = $this->lerOrdem($ordem);
      $query->addSortField("score desc,".$ord['campo'],$ord['ordem']);
    }
 
    if($parametros["page"]=="outlet"){
      $query->addFilterQuery("-produto_desconto_i:0");
    }
 
    if ($parametros["page"]=="busca"){
 
      if(!$parametros["termo"]){ return"{}";}
      $query->setQuery('"'.$parametros["termo"].'"');
    $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:*");
 
      $query->addFilterQuery('+produto_nome_poss:"'.$parametros["termo"].'"');
 
      //$query->addFilterQuery('-produto_nomeseo_s:"'.$slugified.'"');
    }
 
    if ($parametros['categoria']){
      if ($parametros["page"]=="categoria" OR $parametros["page"]=="outlet" OR $parametros["page"]=="novidades"){
        $query->setQuery("((produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:". $parametros['categoria']." AND produto_news_nomeseo_sm:". $parametros['categoria'].") OR ((produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:".$parametros['categoria'].")");
      }else{
        $query->addFilterQuery("produto_categoria_nomeseo_sm:(". $parametros["categoria"] . ")");
      }
    }
 
    if ($parametros['marcas']){
 
      $marcas = str_replace(","," OR ",$parametros["marcas"]);
      $marcas = trim($marcas);
 
      if ($parametros["page"]=="marca"){
        $query->setQuery('((produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marcaseo_s:'. $marcas.' AND produto_news_nomeseo_sm:*) OR (produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND produto_marcaseo_s:'. $marcas);
      }else{
        $query->addFilterQuery('{!tag=marcas}produto_marcaseo_s:('. $marcas . ")");
      }
 
    }
 
    if ($parametros['lojas']){
 
      $lojas = str_replace(","," OR ",$parametros["lojas"]);
      $lojas = trim($lojas);
 
      if ($parametros["page"]=="loja"){
        $query->setQuery('((produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nomeseo_s:'. $lojas.' AND produto_news_nomeseo_sm:*) OR (produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:* AND parceiro_nomeseo_s:'. $lojas);
      }else{
        $query->addFilterQuery('{!tag=lojas}parceiro_nomeseo_s:('. $lojas . ")");
      }
    }
 
 
    if ($parametros['preco-max']){
      $query->addFilterQuery('produto_precofinal_f:[* TO '. $parametros["preco-max"]. ']');
    }
 
    if ($parametros['preco-min']){
      $query->addFilterQuery('produto_precofinal_f:['. $parametros["preco-min"]. ' TO *]');
    }
 
    if ($parametros['cores']){
 
      $cores = str_replace(","," OR ",$parametros["cores"]);
 
      $query->addFilterQuery('{!tag=cor}produto_corseo_sm:('. $cores . " )");
    }
 
    if ($parametros['desconto']){
      $query->addFilterQuery('{!tag=desc}produto_desconto_i:['. $parametros["desconto"]. ' TO *]');
 
    }
 
    if ($parametros['tamanhos']){
 
      $tamanhos = str_replace(","," OR ",$parametros["tamanhos"]);
 
      $query->addFilterQuery('{!tag=tamanho}produto_tamanhoseo_s:('. $tamanhos . ")");
    }
 
    if($parametros["excluirIds"]){
      foreach ($parametros["excluirIds"] as $id) {
        $query->addFilterQuery("-produto_id_i:".$id);
      }
    }
 
    $query->addFilterQuery("parceiro_status_i:1");
 
 
    $query->setGroup(true);
 
    $query->setGroupMain(true);
 
    $query->addGroupField("produto_groupid_s");
 
    $query->setRows($rows);
 
    $query->setFacet(true);
 
    $query->setFacetMinCount(1);
 
    $query->addFacetField('{!ex=marcas}produto_marcaseo_s')->
        addFacetField('{!ex=marcas}produto_marca_s')->
        addFacetField('produto_material_s')->
        // addFacetField('{!ex=tamanho}produto_tamanho_s')->
        // addFacetField('{!ex=tamanho}produto_tamanhoseo_s')->
        addFacetField('{!ex=lojas}parceiro_nomeseo_s')->
        addFacetField('{!ex=lojas}parceiro_nome_s')->
        // addFacetField('{!ex=cor}produto_cor_sm')->
        // addFacetField("{!ex=cor}produto_corseo_sm")->
        addFacetField("{!ex=desc}produto_desconto_i");
 
    $query->addParam("facet.interval","produto_desconto_i");
    $query->addParam("f.produto_desconto_i.facet.interval.set","{!key=20}[20,100]");
    $query->addParam("f.produto_desconto_i.facet.interval.set","{!key=40}[40,100]");
    $query->addParam("f.produto_desconto_i.facet.interval.set","{!key=70}[70,100]");
 
    // if($filtros){
    //   // $query->addParam("facet.pivot","{!ex=produto_tamanho_s key=tamanhos}produto_tamanho_s,produto_disponivel_i,produto_tamanhoseo_s");
    //   $query->addParam("facet.pivot","{!ex=produto_marca_s key=marcas}produto_marcaseo_s,produto_marca_s,produto_disponivel_i");
    //   $query->addParam("facet.pivot","{!ex=parceiro_nome_s key=lojas}parceiro_nome_s,parceiro_nomeseo_s,produto_disponivel_i");
    //   // $query->addParam("facet.pivot","{!ex=produto_cor_sm key=cores}produto_cor_sm,produto_corseo_sm,produto_disponivel_i");
 
    // }else{
    //   // $query->addParam("facet.pivot","{!ex=produto_tamanho_s key=tamanhos}produto_tamanhoseo_s");
    //   $query->addParam("facet.pivot","{!ex=produto_marca_s key=marcas}produto_marcaseo_s");
    //   $query->addParam("facet.pivot","{!ex=parceiro_nome_s key=lojas}parceiro_nomeseo_s");
    //   // $query->addParam("facet.pivot","{!ex=produto_cor_sm key=cores}produto_corseo_sm");
    // }
 
    $query->addParam("facet.pivot","{!ex=produto_marca_s key=marcas}produto_marcaseo_s");
     $query->addParam("facet.pivot","{!ex=parceiro_nome_s key=lojas}parceiro_nomeseo_s");
 
     $query->addParam("facet.pivot","{!ex=produto_marca_s key=filtrosmarcas}produto_marcaseo_s,produto_marca_s,produto_disponivel_i");
    $query->addParam("facet.pivot","{!ex=parceiro_nome_s key=filtroslojas}parceiro_nome_s,parceiro_nomeseo_s,produto_disponivel_i");
 
    $query->addParam("facet.limit","1000000");
    $query->addParam("facet.sort","index");
 
 
    $response = $client->query($query)->getResponse();
 
    if ($parametros['debug']){
      echo '<pre>';
      print_r($response);
      die;
    }
 
    if(!$filtros){
      $produtos["produtos"] = $response->response->docs;
      $produtos["facets"] = $response->facet_counts->facet_fields;
      $produtos["contagem"] = $response->response->numFound;
      $produtos["ranges"]  = $response->facet_counts->facet_intervals->produto_desconto_i;
    }
 
    //$produtos["filtros"] = $this->limpaFiltros($response->facet_counts->facet_pivot,$filtros);
    $produtos["filtros"] = $response->facet_counts->facet_pivot;
 
    if (!$produtos){
      return array("Error"=>"Nenhuma Produto encontrado");
    }
    return $produtos;
  }
 
  public function buscaExata($parametros,$offset=false){
 
    $client = $this->helper->solrConnect('produtos');
    $rows = 50;
    $request = new Request();
    $query = new \SolrQuery();
 
    if($offset){
      $startpoint = $rows*$offset;
      $query->setStart($startpoint);
    }
 
    if(!$parametros["ordem"]){
      $query->addSortField("score desc, random_".date("d"),0);
    }else{
      $ordem = $parametros["ordem"];
      $ord = $this->lerOrdem($ordem);
      $query->addSortField("score desc,".$ord['campo'],$ord['ordem']);
    }
 
    if(!$parametros["termo"]){ return"{}";}
 
    //$slugified = $this->helper->slugify($parametros["termo"]);
    $query->setQuery('"'. $parametros["termo"] .'"');
 
    //$querySyntax =   '(produto_marcaseo_s:'.$slugified.'^8 OR parceiro_nomeseo_s:'.$slugified.'^7 OR produto_nomeseo_s:"'.$slugified.'"^6)';
 
//    $query->setQuery("((".$querySyntax." AND produto_news_nomeseo_sm:*) OR ".$querySyntax.")");
 
    $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1 AND produto_categoria_nomeseo_sm:*");
 
    if ($parametros['categoria']){
      $query->addFilterQuery("produto_categoria_nomeseo_sm:(". $parametros["categoria"] . ")");
    }
 
    if ($parametros['marcas']){
 
      $marcas = str_replace(","," OR ",$parametros["marcas"]);
      $marcas = trim($marcas);
 
      $query->addFilterQuery('{!tag=marcas}produto_marcaseo_s:('. $marcas . ")");
    }
 
    if ($parametros['lojas']){
 
      $lojas = str_replace(","," OR ",$parametros["lojas"]);
      $lojas = trim($lojas);
 
      $query->addFilterQuery('{!tag=lojas}parceiro_nomeseo_s:('. $lojas . ")");
    }
 
 
    if ($parametros['preco-max']){
      $query->addFilterQuery('produto_precofinal_f:[* TO '. $parametros["preco-max"]. ']');
    }
 
    if ($parametros['preco-min']){
      $query->addFilterQuery('produto_precofinal_f:['. $parametros["preco-min"]. ' TO *]');
    }
 
    if ($parametros['desconto']){
      $query->addFilterQuery('{!tag=desc}produto_desconto_i:['. $parametros["desconto"]. ' TO *]');
 
    }
 
    $query->addFilterQuery("parceiro_status_i:1");
 
    $query->setGroup(true);
 
    $query->setGroupMain(true);
 
    $query->addGroupField("produto_groupid_s");
 
    $query->setRows($rows);
 
 
    $response = $client->query($query)->getResponse();
 
    $produtos["produtos"] = $response->response->docs;
    $produtos["contagem"] = $response->response->numFound;
 
    if (!$produtos){
      return array("Error"=>"Nenhuma Produto encontrado");
    }
    return $produtos;
  }
  public function limpaFiltros($lista,$return = false){
    if($return){
      return $lista;
    }
 
    foreach ($lista as $filtro => $valores) {
      foreach ($valores as $i => $filtroItem) {
        $lista->$filtro[$i] = $filtroItem->value ;
      }
    }
    return $lista;
  }
 
  public function parametrosProdutos($routeParams,$requestParams,$page,$query){
 
    $parametros["page"]       = $page;
    $parametros["marcas"]       = $routeParams->getParam("marcas") ? $routeParams->getParam("marcas") : $requestParams->getQuery("marcas");
    $parametros["lojas"]       = $routeParams->getParam("lojas") ? $routeParams->getParam("lojas") : $requestParams->getQuery("lojas");
    $parametros["categoria"]   = $query ? $query : $requestParams->getQuery("categoria");
    $parametros["preco-min"]  = $requestParams->getQuery("preco-min");
    $parametros["preco-max"]   = $requestParams->getQuery("preco-max");
    $parametros["ordem"]       = $requestParams->getQuery("ordem");
    $parametros["cores"]       = $requestParams->getQuery("cores");
    $parametros["tamanhos"]   = $requestParams->getQuery("tamanhos");
    $parametros["materiais"]   = $requestParams->getQuery("materiais");
    $parametros["desconto"]   = $requestParams->getQuery("desconto");
    $parametros["debug"]       = $requestParams->getQuery("debug");
    $page == "busca" ? $parametros["termo"] = $routeParams->getParam("termo") : "";
 
    return $parametros;
  }
 
  public function lerOrdem($ordem){
    switch ($ordem) {
        case "menor-preco":
            return array("campo"=>"produto_precofinal_f","ordem"=> 0 );
            break;
        case "maior-preco":
            return array("campo"=>"produto_precofinal_f","ordem"=> 1 );
            break;
        case "mais-novos": // Cadastro mais novos
            return array("campo"=>"produto_cadastro_dt","ordem"=> 1 );
            break;
        case "descontos":
            return array("campo"=>"produto_desconto_i","ordem"=> 1 );
            break;
        case "mais-curtidos":
            return array("campo"=>"produto_likes_i","ordem"=> 1 );
            break;
        case "mais-vendidos":
            return array("campo"=>"produto_views_i","ordem"=> 1 );
            break;
        default:
          return false;
    }
  }
  public function AgrupaNomeComSEO($array1,$array2){
 
      $newArray=[];
 
      foreach ($array2 as $key=> $seo){
        $newArray["grupo"][$key]['count'] = $seo;
        $newArray["grupo"][$key]['name'] = $this->helper->slugify($key);
        $newArray["chaves"][$newArray["grupo"][$key]['name']]=$key;
      }
      return $newArray;
  }
 
  public function apiProdutos($produtos,$likes, $erro=false,$parametros=false,$offset=false,$path=false){
 
    $prods = $this->view->getPartial("modulos/lista",[
      "exato"=> $produtos['exato'] ,
      "lista"=> $produtos['produtos'] ,
      "class"=>"produto",
      "itemClass"=>"",
      "bloco"=>"produto/produto",
      "likes" => $likes,
      "banners" => true,
      "path" => $path,
      "qtdprod" => $produtos['contagem'],
      "erro" => $erro,
      "parametros" => $parametros,
      "paginacao"  => $offset,
      "path" => $path
    ]);
 
    return $prods;
  }
 
  public function apiCores($parametros){
    $filtros   = $this->produtos([ "categoria" => $parametros["categoria"], "page" => $parametros["page"], 'debug'=> 0 ],0, true);
    $produtos   = $this->produtos($parametros,1);
    $cores = $this->view->getPartial("filtros/cores",["param_cores"=>$parametros, "filtros" =>$filtros, "produtos"=>$produtos]);
 
    return $cores;
  }
  public function apiDescontos($produtos,$parametros){
    $filtros   = $this->produtos([ "categoria" => $parametros["categoria"], "page" => $parametros["page"]],1, true)['filtros'];
    $produtos   = $this->produtos($parametros,1);
 
    $descontos = $this->view->getPartial("filtros/descontos",['ranges'=>$this->ranges($produtos["ranges"]),"param_desconto"=>$parametros, "filtros" =>$filtros, "produtos"=>$produtos]);
 
    return $descontos;
  }
  public function apiTamanhos($produtos,$parametros){
    $filtros   = $this->produtos([ "categoria" => $parametros["categoria"], "page" => $parametros["page"] ],1, true)['filtros'];
    $produtos   = $this->produtos($parametros,1);
 
    $tamanhos = $this->view->getPartial("filtros/tamanhos",['tamanhos'=>$produtos,"param_tamanhos"=>$parametros, "filtros" =>$filtros, "produtos"=>$produtos]);
 
    return $tamanhos;
  }
  public function apiMarcas($filtro,$parametros){
    // $filtros   = $this->produtos([ "categoria" => $parametros["categoria"], "page" => $parametros["page"] ],1, true)['filtros'];
    // $produtos   = $this->produtos($parametros,1);
    $parametros["marcas"] = explode(",",$parametros["marcas"]);
 
    $marcas = $this->view->getPartial("filtros/marcas",["param_marcas"=>$parametros["marcas"], "produtos_filtros" => $filtro]);
 
    return $marcas;
  }
  public function apiLojas($filtro,$parametros){
    // $filtros   = $this->produtos([ "categoria" => $parametros["categoria"], "page" => $parametros["page"] ],1, true)['filtros'];
    // $produtos   = $this->produtos($parametros,1);
    $parametros["lojas"] = explode(",",$parametros["lojas"]);
 
    $lojas = $this->view->getPartial("filtros/lojas",["param_lojas"=>$parametros["lojas"], "produtos_filtros"=>$filtro]);
 
    return $lojas;
  }
  public function apiPrecos($parametros){
    $precos = $this->view->getPartial("filtros/precos",["preco_min"=>$parametros["preco-min"],"preco_max"=>$parametros["preco-max"]]);
 
    return $precos;
  }
 
  public function tituloPage($param,$allcats){
    if ($param["page"]=="busca"){
      return $this->tag->texto("titulo-busca-seo") . " " . $this->tag->texto("titulo-sufixo-seo");
    }
    if ($param["page"]=="categoria"){
      if ($allcats["categoria"]->categoria_titulopagina_s){
        return $allcats["categoria"]->categoria_titulopagina_s;
      }
 
      return $allcats["categoria"]->categoria_nome_s . " " . $this->tag->texto("sufixo-titulo-categoria-seo");
    }
    if ($param["page"]=="outlet"){
      if ($allcats["categoria"]->categoria_titulopaginaoutlet_s){
        return $allcats["categoria"]->categoria_titulopaginaoutlet_s;
      }
 
      return
      $allcats["categoria"]->categoria_nome_s .
      " " .
      $this->tag->texto("sufixo-title-outlet-seo");
    }
    if ($param["page"]=="novidades"){
      if($allcats["categoria"]->categoria_titulopaginanovidades_s){
        return $allcats["categoria"]->categoria_titulopaginanovidades_s;
      }
      return
      $this->tag->texto("prefixo-title-novidades-seo"). " ".
      $allcats["categoria"]->categoria_nome_s .
      " " .
      $this->tag->texto("sufixo-title-novidades-seo");
 
    }
    if ($param["page"]=="loja"){
      return $allcats["parceiro"]->parceiro_titulopagina_s;
    }
    if ($param["page"]=="marca"){
      if ($allcats["marca"]->marcaseo_titulo_s){
        return $allcats["marca"]->marcaseo_titulo_s;
      }
 
      return $marca = end($allcats["breads"])["categoria"] ." ". $this->tag->texto("titulo-sufixo-seo");
    }
  }
  public function descPage($param,$allcats){
    if ($param["page"]=="busca"){
      return $this->tag->texto("description-busca-seo");
    }
    if ($param["page"]=="categoria"){
      if($allcats["categoria"]->categoria_descricaoseo_s){
        return $allcats["categoria"]->categoria_descricaoseo_s;
      }
 
      return
      $this->tag->texto("prefixo-description-categoria-seo") .
      " " .
      $allcats["categoria"]->categoria_nome_s .
      " " .
      $this->tag->texto("sufixo-description-categoria-seo");
    }
    if ($param["page"]=="outlet"){
      if($allcats["categoria"]->categoria_descricaoseooutlet_s){
        return $allcats["categoria"]->categoria_descricaoseooutlet_s;
      }
 
      return
      $this->tag->texto("prefixo-description-outlet-categorias-seo") .
      " " .
      $allcats["categoria"]->categoria_nome_s .
      " " .
      $this->tag->texto("sufixo-categorias-outlet-description-seo");
    }
    if ($param["page"]=="novidades"){
      if($allcats["categoria"]->categoria_descricaoseonovidades_s){
        return $allcats["categoria"]->categoria_descricaoseonovidades_s;
      }
 
      return
      $this->tag->texto("prefixo-description-novidades-seo") .
      " " .
      $allcats["categoria"]->categoria_nome_s .
      " " .
      $this->tag->texto("sufixo-description-novidades-seo");
 
    }
    if ($param["page"]=="loja"){
      if ($allcats["parceiro"]->parceiro_descricaoseo_t[0] && $allcats["parceiro"]->parceiro_descricaoseo_t[0] !== "#"){
        return $allcats["parceiro"]->parceiro_descricaoseo_t[0];
      }
 
      $loja = end($allcats["breads"])["categoria"];
 
      $ct=0;
      foreach($allcats["catloja"] as $key => $cats){
        if ($ct==0 || $ct==1){
          $ct++;
          continue;
        }
        $lojascats .= $key.", ";
 
        if($ct==6){
          break;
        }
 
        $ct++;
      }
 
      $lojascats = rtrim($lojascats,", ");
 
      $catprefix = "No iLovee você encontra o melhor da loja ".$loja." - ".$lojascats." e muito mais. Vem ver! ";
 
      return $catprefix;
    }
 
    if ($param["page"]=="marca"){
      if ($allcats["marca"]->marcaseo_description_t[0]){
        return $allcats["marca"]->marcaseo_description_t[0];
      }
 
      $marca = end($allcats["breads"])["categoria"];
 
      $ct=0;
      foreach($allcats["catmarca"] as $key => $cats){
        if ($ct==0 || $ct==1){
          $ct++;
          continue;
        }
        $marcascats .= $key.", ";
      }
 
      $marcascats = rtrim($marcascats,", ");
 
      $catprefix = "No iLovee você encontra o melhor da marca ".$marca." - ".$marcascats." e muito mais. Vem ver! ";
 
      return $catprefix;
    }
  }
 
  public function textVend($param,$allcats){
    if ($param["page"]=="busca"){
      return "iLovee | Busca: " . $param["termo"];
    }
    if ($param["page"]=="categoria"){
      return array("texto"=>$allcats["categoria"]->categoria_textovendedor_t[0],"titulo"=>$allcats["categoria"]->categoria_titulovendedor_s);
    }
    if ($param["page"]=="outlet"){
      return array("texto"=>$allcats["categoria"]->categoria_textovendedoroutlet_t[0],"titulo"=>$allcats["categoria"]->categoria_titulovendedor_s);
    }
    if ($param["page"]=="novidades"){
      return array("texto"=>$allcats["categoria"]->categoria_textovendedornovidades_t[0],"titulo"=>$allcats["categoria"]->categoria_titulovendedor_s);
    }
  }
}
#3Multiple\Frontend\Controllers\CategoriaController->indexAction(categoria, categoria, moda, roupas, gym, leggings-e-etc)
#4Phalcon\Dispatcher->callActionMethod(Object(Multiple\Frontend\Controllers\CategoriaController), indexAction, Array([page] => categoria, [nomeseo] => categoria, [categoria] => moda, [categoria2] => roupas, [categoria3] => gym, [categoria4] => leggings-e-etc))
#5Phalcon\Dispatcher->_dispatch()
#6Phalcon\Dispatcher->dispatch()
#7Phalcon\Mvc\Application->handle()
/var/www/iLove2.0/public/index.php (456)
<?php
 
error_reporting(E_ALL);
 
$debug = new \Phalcon\Debug();
$debug->listen();
 
use Phalcon\Loader;
use Phalcon\Mvc\Router;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Application as BaseApplication;
 
define('APPLICATION_PATH', __DIR__ . '/../apps');
define('PUBLIC_PATH', __DIR__ );
define('XML_FOLDER', PUBLIC_PATH . '/xml/');
define('LOGS_FOLDER', __DIR__ . '/../logs/');
define('IMAGES_FOLDER', __DIR__ . '/images/');
define('SOLRADDR', "localhost");
 
ini_set('memory_limit','4000M');
 
date_default_timezone_set('America/Sao_Paulo');
 
class Application extends BaseApplication
{
    /**
     * Register the services here to make them general or register in the ModuleDefinition to make them module-specific
     */
    protected function registerServices()
    {
 
        $di = new FactoryDefault();
 
        $loader = new Loader();
 
        /**
         * We're a registering a set of directories taken from the configuration file
         */
 
        $loader->registerNamespaces(
            [
               "Cocur\Slugify"    => APPLICATION_PATH . "/../vendor/slugify/src"
 
            ]
        );
 
        $loader
            ->registerDirs([__DIR__ . '/../apps/helpers/',__DIR__ . '/../apps/security/'])
            ->register();
 
        require_once APPLICATION_PATH . '/../vendor/autoload.php';
 
 
 
        // Registering a router
        $di->set('router', function () {
 
            $router = new Router(false);
 
            $router->setDefaultModule("frontend");
 
            $router->notFound(array(
              'module' => 'frontend',
              "controller" => "notfound",
              "action" => "index",
              "page"  => "404"
            ));
 
 
            //DEFAULT FRONTEND ROUTES
            // $router->add('/:controller/:action', [
            //     'module'     => 'frontend',
            //     'controller' => 1,
            //     'action'     => 2,
            // ])->setName('frontend');
 
 
            $router->add("/produto/{loja:[a-z0-9\-]+}/{marca:[a-z0-9\-]+}/{nome:[a-z0-9\-]+}/{id:[a-z0-9\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "produto",
                "page"       => "produto",
                "nomeseo"    => "produto"
            ]);
 
            $router->add("/produto/{nome:[a-z0-9\-]+}/{id:[a-z0-9\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "produto",
                "page"       => "produto",
                "nomeseo"    => "produto"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria",
                "pagina"     => "0"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-]+}/{categoria2:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}/{categoria3:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}/{categoria3:[a-z\-_]+}/{categoria4:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet",
                "pagina"     => "0"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}/{categoria4:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades",
                "pagina"     => "0"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}/{categoria4:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/loja/{loja}",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "loja",
                "nomeseo"    => "loja",
                "lojas"      => 1,
                "pagina"     => "0",
 
            ])->setName("frontend-loja");
 
            $router->add("/loja/{loja}/{pagina}",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "loja",
                "nomeseo"    => "loja",
                "lojas"      => 1,
                "pagina"     => 2,
 
            ])->setName("frontend-loja-pagina");
 
 
            $router->add("/",[
                "module"     => "frontend",
                "controller" => "index",
                "action"     => "index",
                "page"       => "home",
                "nomeseo"    => "home"
            ])->setName("frontend-home");
 
            $router->add("/([a-z0-9\-]+)",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "marca",
                "nomeseo"    => "marca",
                "marcas"  => 1
            ])->setName("frontend-marca");
 
 
            $router->add("/busca",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "busca",
                "page"       => "busca",
                "nomeseo"    => "busca",
                "pagina"     => "0",
            ]);
 
             $router->add("/buscaFoward",[
                "action"     => "buscaFoward",
                "module"     => "frontend",
                "controller" => "busca",
                "page"       => "busca",
                "nomeseo"    => "busca",
                "pagina"     => "0",
            ]);
 
            $router->add("/sobre-nos",[
                "module"     => "frontend",
                "controller" => "welcome",
                "action"     => "index",
            ])->setName("frontend-home");
 
            $router->add("/not-found",[
                "module"     => "frontend",
                "controller" => "Notfound",
                "action"     => "index",
            ])->setName("frontend-notFound");
 
            $router->add("/marcas",[
                "module"     => "frontend",
                "controller" => "lojasmarcas",
                "action"     => "index",
                "page"       => "marcas",
                "nomeseo"    => "marcas"
            ])->setName("frontend-marcas");
 
            $router->add("/lojas",[
                "module"     => "frontend",
                "controller" => "lojasmarcas",
                "action"     => "index",
                "page"       => "lojas",
                "nomeseo"    => "lojas"
            ])->setName("frontend-lojas");
 
            $router->add("/cupom",[
                "module"     => "frontend",
                "controller" => "Cupom",
                "action"     => "index",
                "page"       => "cupons",
            ])->setName("frontend-cupom");
 
            $router->add("/cupom/{parceiro}",[
                "module"     => "frontend",
                "controller" => "Cupom",
                "action"     => "interno",
                "parceiro"   => 1,
                "page"       => "cupom",
            ])->setName("frontend-cupom-interno");
 
            $router->add("/vitrine/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "vitrine",
                "nomeseo"    => "vitrine",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/materia/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "materia",
                "nomeseo"    => "materia",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/looks",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "looks",
                "nomeseo"    => "looks",
                "pagina"     => "0"
            ]);
 
            $router->add("/materias",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "materias",
                "nomeseo"    => "materias",
                "pagina"     => "0"
            ]);
 
            $router->add("/vitrines",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "vitrines",
                "nomeseo"    => "vitrines",
                "pagina"     => "0"
            ]);
 
            $router->add("/moods",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "moods",
                "nomeseo"    => "moods",
                "pagina"     => "0"
            ]);
 
             $router->add("/look/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "look",
                "nomeseo"    => "look",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
             $router->add("/mood/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "mood",
                "nomeseo"    => "mood",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/termos-de-uso",[
                "module"     => "frontend",
                "controller" => "politicas",
                "action"     => "index",
                "parceiro"   => 1
            ])->setName("frontend-cupom-interno");
 
            $router->add("/tags",[
                "module"     => "frontend",
                "controller" => "tags",
                "action"     => "index",
                "page"       => "tags",
                "nomeseo"    => "tags"
            ])->setName("frontend-tags");
 
 
            //API ROUTES
            $router->add("/api/:controller/:action/:params", [
                'module'     => 'api',
                'controller' => 1,
                'action'     => 2,
                'params'     => 3,
            ])->setName('api');
 
            $router->add("/api/:controller", [
                'module'     => 'api',
                'controller' => 1,
                'action'     => 'index',
            ])->setName('api');
 
            $router->add("/api", [
                'module'     => 'api',
                'controller' => 'index',
                'action'     => 'index',
            ])->setName('api');
 
 
            //BACKEND ROUTES
            $router->add("/backend/:controller/:action/:params", [
                'module'     => 'backend',
                'controller' => 1,
                'action'     => 2,
                'params'     => 3
            ])->setName('backend');
 
            $router->add("/backend/:controller", [
                'module'     => 'backend',
                'controller' => 1,
                'action'     => 'index',
 
            ])->setName('backend');
 
            $router->add("/backend", [
                'module'     => 'backend',
                'controller' => 'index',
                'action'     => 'index',
            ])->setName('backend');
 
            return $router;
        });
 
        $this->setDI($di);
    }
 
    public function main()
    {
 
        $this->registerServices();
 
        // Register the installed modules
        $this->registerModules([
            'frontend' => [
                'className' => 'Multiple\Frontend\Module',
                'path'      => '../apps/frontend/Module.php'
            ],
            'backend'  => [
                'className' => 'Multiple\Backend\Module',
                'path'      => '../apps/backend/Module.php'
            ],
            'api'  => [
                'className' => 'Multiple\api\Module',
                'path'      => '../apps/api/Module.php'
            ]
        ]);
 
        echo $this->handle()->getContent();
    }
}
 
$application = new Application();
$application->main();
#8Application->main()
/var/www/iLove2.0/public/index.php (461)
<?php
 
error_reporting(E_ALL);
 
$debug = new \Phalcon\Debug();
$debug->listen();
 
use Phalcon\Loader;
use Phalcon\Mvc\Router;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Application as BaseApplication;
 
define('APPLICATION_PATH', __DIR__ . '/../apps');
define('PUBLIC_PATH', __DIR__ );
define('XML_FOLDER', PUBLIC_PATH . '/xml/');
define('LOGS_FOLDER', __DIR__ . '/../logs/');
define('IMAGES_FOLDER', __DIR__ . '/images/');
define('SOLRADDR', "localhost");
 
ini_set('memory_limit','4000M');
 
date_default_timezone_set('America/Sao_Paulo');
 
class Application extends BaseApplication
{
    /**
     * Register the services here to make them general or register in the ModuleDefinition to make them module-specific
     */
    protected function registerServices()
    {
 
        $di = new FactoryDefault();
 
        $loader = new Loader();
 
        /**
         * We're a registering a set of directories taken from the configuration file
         */
 
        $loader->registerNamespaces(
            [
               "Cocur\Slugify"    => APPLICATION_PATH . "/../vendor/slugify/src"
 
            ]
        );
 
        $loader
            ->registerDirs([__DIR__ . '/../apps/helpers/',__DIR__ . '/../apps/security/'])
            ->register();
 
        require_once APPLICATION_PATH . '/../vendor/autoload.php';
 
 
 
        // Registering a router
        $di->set('router', function () {
 
            $router = new Router(false);
 
            $router->setDefaultModule("frontend");
 
            $router->notFound(array(
              'module' => 'frontend',
              "controller" => "notfound",
              "action" => "index",
              "page"  => "404"
            ));
 
 
            //DEFAULT FRONTEND ROUTES
            // $router->add('/:controller/:action', [
            //     'module'     => 'frontend',
            //     'controller' => 1,
            //     'action'     => 2,
            // ])->setName('frontend');
 
 
            $router->add("/produto/{loja:[a-z0-9\-]+}/{marca:[a-z0-9\-]+}/{nome:[a-z0-9\-]+}/{id:[a-z0-9\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "produto",
                "page"       => "produto",
                "nomeseo"    => "produto"
            ]);
 
            $router->add("/produto/{nome:[a-z0-9\-]+}/{id:[a-z0-9\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "produto",
                "page"       => "produto",
                "nomeseo"    => "produto"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria",
                "pagina"     => "0"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-]+}/{categoria2:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}/{categoria3:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/categoria/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}/{categoria3:[a-z\-_]+}/{categoria4:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "categoria",
                "nomeseo"    => "categoria"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet",
                "pagina"     => "0"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-_]+}/{categoria2:[a-z\-_]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/outlet/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}/{categoria4:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "outlet",
                "nomeseo"    => "outlet"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades",
                "pagina"     => "0"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/novidades/{categoria:[a-z\-]+}/{categoria2:[a-z\-]+}/{categoria3:[a-z\-]+}/{categoria4:[a-z\-]+}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "categoria",
                "page"       => "novidades",
                "nomeseo"    => "novidades"
            ]);
 
            $router->add("/loja/{loja}",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "loja",
                "nomeseo"    => "loja",
                "lojas"      => 1,
                "pagina"     => "0",
 
            ])->setName("frontend-loja");
 
            $router->add("/loja/{loja}/{pagina}",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "loja",
                "nomeseo"    => "loja",
                "lojas"      => 1,
                "pagina"     => 2,
 
            ])->setName("frontend-loja-pagina");
 
 
            $router->add("/",[
                "module"     => "frontend",
                "controller" => "index",
                "action"     => "index",
                "page"       => "home",
                "nomeseo"    => "home"
            ])->setName("frontend-home");
 
            $router->add("/([a-z0-9\-]+)",[
                "module"     => "frontend",
                "controller" => "categoria",
                "action"     => "index",
                "page"       => "marca",
                "nomeseo"    => "marca",
                "marcas"  => 1
            ])->setName("frontend-marca");
 
 
            $router->add("/busca",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "busca",
                "page"       => "busca",
                "nomeseo"    => "busca",
                "pagina"     => "0",
            ]);
 
             $router->add("/buscaFoward",[
                "action"     => "buscaFoward",
                "module"     => "frontend",
                "controller" => "busca",
                "page"       => "busca",
                "nomeseo"    => "busca",
                "pagina"     => "0",
            ]);
 
            $router->add("/sobre-nos",[
                "module"     => "frontend",
                "controller" => "welcome",
                "action"     => "index",
            ])->setName("frontend-home");
 
            $router->add("/not-found",[
                "module"     => "frontend",
                "controller" => "Notfound",
                "action"     => "index",
            ])->setName("frontend-notFound");
 
            $router->add("/marcas",[
                "module"     => "frontend",
                "controller" => "lojasmarcas",
                "action"     => "index",
                "page"       => "marcas",
                "nomeseo"    => "marcas"
            ])->setName("frontend-marcas");
 
            $router->add("/lojas",[
                "module"     => "frontend",
                "controller" => "lojasmarcas",
                "action"     => "index",
                "page"       => "lojas",
                "nomeseo"    => "lojas"
            ])->setName("frontend-lojas");
 
            $router->add("/cupom",[
                "module"     => "frontend",
                "controller" => "Cupom",
                "action"     => "index",
                "page"       => "cupons",
            ])->setName("frontend-cupom");
 
            $router->add("/cupom/{parceiro}",[
                "module"     => "frontend",
                "controller" => "Cupom",
                "action"     => "interno",
                "parceiro"   => 1,
                "page"       => "cupom",
            ])->setName("frontend-cupom-interno");
 
            $router->add("/vitrine/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "vitrine",
                "nomeseo"    => "vitrine",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/materia/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "materia",
                "nomeseo"    => "materia",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/looks",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "looks",
                "nomeseo"    => "looks",
                "pagina"     => "0"
            ]);
 
            $router->add("/materias",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "materias",
                "nomeseo"    => "materias",
                "pagina"     => "0"
            ]);
 
            $router->add("/vitrines",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "vitrines",
                "nomeseo"    => "vitrines",
                "pagina"     => "0"
            ]);
 
            $router->add("/moods",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "moods",
                "nomeseo"    => "moods",
                "pagina"     => "0"
            ]);
 
             $router->add("/look/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "look",
                "nomeseo"    => "look",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
             $router->add("/mood/{slug}",[
                "action"     => "index",
                "module"     => "frontend",
                "controller" => "conteudo",
                "page"       => "mood",
                "nomeseo"    => "mood",
                "tipo"       => 1,
                "slug"       => 2
            ]);
 
            $router->add("/termos-de-uso",[
                "module"     => "frontend",
                "controller" => "politicas",
                "action"     => "index",
                "parceiro"   => 1
            ])->setName("frontend-cupom-interno");
 
            $router->add("/tags",[
                "module"     => "frontend",
                "controller" => "tags",
                "action"     => "index",
                "page"       => "tags",
                "nomeseo"    => "tags"
            ])->setName("frontend-tags");
 
 
            //API ROUTES
            $router->add("/api/:controller/:action/:params", [
                'module'     => 'api',
                'controller' => 1,
                'action'     => 2,
                'params'     => 3,
            ])->setName('api');
 
            $router->add("/api/:controller", [
                'module'     => 'api',
                'controller' => 1,
                'action'     => 'index',
            ])->setName('api');
 
            $router->add("/api", [
                'module'     => 'api',
                'controller' => 'index',
                'action'     => 'index',
            ])->setName('api');
 
 
            //BACKEND ROUTES
            $router->add("/backend/:controller/:action/:params", [
                'module'     => 'backend',
                'controller' => 1,
                'action'     => 2,
                'params'     => 3
            ])->setName('backend');
 
            $router->add("/backend/:controller", [
                'module'     => 'backend',
                'controller' => 1,
                'action'     => 'index',
 
            ])->setName('backend');
 
            $router->add("/backend", [
                'module'     => 'backend',
                'controller' => 'index',
                'action'     => 'index',
            ])->setName('backend');
 
            return $router;
        });
 
        $this->setDI($di);
    }
 
    public function main()
    {
 
        $this->registerServices();
 
        // Register the installed modules
        $this->registerModules([
            'frontend' => [
                'className' => 'Multiple\Frontend\Module',
                'path'      => '../apps/frontend/Module.php'
            ],
            'backend'  => [
                'className' => 'Multiple\Backend\Module',
                'path'      => '../apps/backend/Module.php'
            ],
            'api'  => [
                'className' => 'Multiple\api\Module',
                'path'      => '../apps/api/Module.php'
            ]
        ]);
 
        echo $this->handle()->getContent();
    }
}
 
$application = new Application();
$application->main();
KeyValue
_url/categoria/moda/roupas/gym/leggings-e-etc
KeyValue
REDIRECT_UNIQUE_IDWjb7rn8y3x5rSIMaG@3PzQAAADM
REDIRECT_STATUS200
UNIQUE_IDWjb7rn8y3x5rSIMaG@3PzQAAADM
HTTP_HOSTilovee.com.br
HTTP_ACCEPT_ENCODINGx-gzip, gzip, deflate
HTTP_USER_AGENTCCBot/2.0 (http://commoncrawl.org/faq/)
HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
SERVER_SIGNATURE
SERVER_SOFTWAREApache/2.4.6 (CentOS) PHP/7.0.22
SERVER_NAMEilovee.com.br
SERVER_ADDR169.63.72.146
SERVER_PORT80
REMOTE_ADDR107.20.120.65
DOCUMENT_ROOT/var/www/iLove2.0/public
REQUEST_SCHEMEhttp
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT/var/www/iLove2.0/public
SERVER_ADMINwebmaster@localhost
SCRIPT_FILENAME/var/www/iLove2.0/public/index.php
REMOTE_PORT46052
REDIRECT_QUERY_STRING_url=/categoria/moda/roupas/gym/leggings-e-etc
REDIRECT_URL/categoria/moda/roupas/gym/leggings-e-etc
GATEWAY_INTERFACECGI/1.1
SERVER_PROTOCOLHTTP/1.0
REQUEST_METHODGET
QUERY_STRING_url=/categoria/moda/roupas/gym/leggings-e-etc
REQUEST_URI/categoria/moda/roupas/gym/leggings-e-etc
SCRIPT_NAME/index.php
PHP_SELF/index.php
REQUEST_TIME_FLOAT1513552814.252
REQUEST_TIME1513552814
#Path
0/var/www/iLove2.0/public/index.php
1/var/www/iLove2.0/vendor/autoload.php
2/var/www/iLove2.0/vendor/composer/autoload_real.php
3/var/www/iLove2.0/vendor/composer/ClassLoader.php
4/var/www/iLove2.0/vendor/composer/autoload_static.php
5/var/www/iLove2.0/vendor/guzzlehttp/psr7/src/functions_include.php
6/var/www/iLove2.0/vendor/guzzlehttp/psr7/src/functions.php
7/var/www/iLove2.0/vendor/league/uri-parser/src/functions_include.php
8/var/www/iLove2.0/vendor/league/uri-parser/src/functions.php
9/var/www/iLove2.0/vendor/guzzlehttp/promises/src/functions_include.php
10/var/www/iLove2.0/vendor/guzzlehttp/promises/src/functions.php
11/var/www/iLove2.0/vendor/league/uri-hostname-parser/src/functions_include.php
12/var/www/iLove2.0/vendor/league/uri-hostname-parser/src/functions.php
13/var/www/iLove2.0/vendor/league/uri-schemes/src/functions_include.php
14/var/www/iLove2.0/vendor/league/uri-schemes/src/functions.php
15/var/www/iLove2.0/vendor/league/uri-schemes/src/Schemes/deprecated.php
16/var/www/iLove2.0/vendor/league/uri-schemes/src/AbstractUri.php
17/var/www/iLove2.0/vendor/league/uri-interfaces/src/Uri.php
18/var/www/iLove2.0/vendor/league/uri-schemes/src/Data.php
19/var/www/iLove2.0/vendor/league/uri-schemes/src/File.php
20/var/www/iLove2.0/vendor/league/uri-schemes/src/Ftp.php
21/var/www/iLove2.0/vendor/league/uri-schemes/src/Http.php
22/var/www/iLove2.0/vendor/psr/http-message/src/UriInterface.php
23/var/www/iLove2.0/vendor/league/uri-schemes/src/Uri.php
24/var/www/iLove2.0/vendor/league/uri-schemes/src/UriException.php
25/var/www/iLove2.0/vendor/league/uri-parser/src/Exception.php
26/var/www/iLove2.0/vendor/league/uri-schemes/src/Ws.php
27/var/www/iLove2.0/vendor/league/uri-components/src/functions_include.php
28/var/www/iLove2.0/vendor/league/uri-components/src/functions.php
29/var/www/iLove2.0/vendor/mtdowling/jmespath.php/src/JmesPath.php
30/var/www/iLove2.0/vendor/swiftmailer/swiftmailer/lib/swift_required.php
31/var/www/iLove2.0/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php
32/var/www/iLove2.0/vendor/guzzlehttp/guzzle/src/functions_include.php
33/var/www/iLove2.0/vendor/guzzlehttp/guzzle/src/functions.php
34/var/www/iLove2.0/vendor/league/uri-manipulations/src/functions_include.php
35/var/www/iLove2.0/vendor/league/uri-manipulations/src/Modifiers/functions.php
36/var/www/iLove2.0/vendor/league/uri-manipulations/src/functions.php
37/var/www/iLove2.0/vendor/aws/aws-sdk-php/src/functions.php
38/var/www/iLove2.0/apps/frontend/Module.php
39/var/www/iLove2.0/apps/frontend/controllers/CategoriaController.php
40/var/www/iLove2.0/apps/helpers/Helpers.php
41/var/www/iLove2.0/vendor/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php
42/var/www/iLove2.0/vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php
Memory
Usage2097152