Phalcon Framework 3.2.2

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

/var/www/iLove2.0/apps/frontend/controllers/IndexController.php (125)
#0SolrClient->query(Object(SolrQuery))
/var/www/iLove2.0/apps/frontend/controllers/IndexController.php (125)
<?php
namespace Multiple\Frontend\Controllers;
 
use Phalcon\Mvc\Controller;
use Phalcon\Http\Request;
use Phalcon\Cache\Backend\File as BackFile;
use Phalcon\Cache\Frontend\Data as FrontData;
use Multiple\Helpers\Helpers as Helper;
 
 
class IndexController extends Controller {
 
 
  public function loadmorestories($offset,$categoria=false){
 
    $offset = $offset*2;
    $materia = $this->materiasAction('*',false,false,false,2,false,$offset,$categoria,'-post_tipo_s:Look');
 
    if ($materia["Error"]){  return;  }
 
    $viewmateria = $this->view->getPartial("blocos/storie",[
                      "storiesgrande"=> $materia
                    ]);
 
    return $viewmateria;
  }
 
  public function indexAction(){
 
 
    $frontCache = new FrontData([
      "lifetime" => 3600,
    ]);
 
    $cache = new BackFile($frontCache,[
      "cacheDir" => APPLICATION_PATH . "/cache/",
    ]);
 
    $cachehome = $cache->get("home");
    if ($cachehome === null) {
 
      $cachehome = $this->dados();
      $cache->save("home", $cachehome);
    }
 
    $this->view->dados = $cachehome;
 
    $this->view->likes = array_filter(unserialize($this->cookies->get("likes")->getValue()));
    $this->view->page   = $this->dispatcher->getParam("page");
    $this->view->url    = $this->helper->url(false);
 
    $this->view->render("index","index");
  }
 
  public function categoriaAction($slug=false)
  {
    if(!$slug){ return; }
 
    $helper = new Helper();
 
    $client = $helper->solrConnect('categorias');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
    $query->addFilterQuery("categoria_status_i:1");
    $query->addFilterQuery("categoria_nomeseo_s:".$slug);
    $query->setRows(1);
 
    $response = $client->query($query)->getResponse();
 
    $categorias = $response->response->docs;
 
    if (!$categorias){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
    return $categorias;
 
  }
 
  public function ordemAction($slug=false)
  {
    if(!$slug){ return; }
 
    $helper = new Helper();
 
    $client = $helper->solrConnect('ordenar');
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
    $query->addFilterQuery("ordenar_pagina_s:".$slug);
    $query->addSortField("ordenar_ordem_i",0);
    $query->setRows(9999);
 
    $response = $client->query($query)->getResponse();
 
    $ordem = $response->response->docs;
 
    if (!$ordem){
      return array("Error"=>"Nenhuma ordem encontrado");
    }
 
    return $ordem;
 
  }
 
  public function bannersAction($tipo=3){
    $helper = new Helper();
 
    $client = $helper->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:'.$tipo);
    $query->addFilterQuery('banner_status_s:1');
    $query->addSortField("banner_ordem_i",0);
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
    $query->setRows(100);
 
    $response = $client->query($query)->getResponse();
 
    $banners = $response->response->docs;
 
    if (!$banners){
      return array("Error"=>"Nenhum banner encontrado");
    }
 
    return $banners;
  }
 
  public function galeriasAction($id=false,$imagem=false,$total=90){
 
    $helper = new Helper();
 
    $client = $helper->solrConnect('galeriaprodutos');
 
    $request = new Request();
 
    $query = new \SolrQuery();
 
    $query->setQuery('*');
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
 
    // PEGA PRODUTO QUE ESTA DISPONIVEL, NÃO FOI REMOVIDO DA VITRINE E COM IMAGEM
    $query->addFilterQuery('produto_disponivel_i:1');
    $query->addFilterQuery('galeriaproduto_ativo_i:1');
    if($imagem){
      $query->addFilterQuery("(produto_imagem_link_sm:* OR produto_imagem_linkexterno_sm:*)");
    }else{
      $query->addFilterQuery("produto_imagem_link_sm:*");
    }
 
    $query->addSortField("galeriaproduto_ordem_i",0);
 
    if ($id){
      $query->addFilterQuery('galeriaproduto_postid_i:'.$id);
    }
    else if ($request->get("postid")){
      $query->addFilterQuery('galeriaproduto_postid_i:'.$request->get("postid"));
    }
    else if ($request->get("galeriaid")){
      $query->addFilterQuery('galeriaproduto_galeriaid_s:'.$request->get("galeriaid"));
    }
 
    $query->setRows($total);
 
    $response = $client->query($query)->getResponse();
 
    $galerias = $response->response->docs;
 
    if (!$galerias){
      return array("Error"=>"Nenhuma galeria encontrada");
    }
 
    return $galerias;
  }
 
  public function materiasAction($tipo="*",$tag=false,$grande=false,$produtos=false,$limit=9999,$termo=false,$offset=false,$categoria=false,$extraFilter = false){
 
    $helper = new Helper();
 
    $client = $helper->solrConnect('posts');
 
    $request = new Request();
 
    $query = new \SolrQuery();
 
    if ($termo){
      $query->setQuery("post_nome_poss:".$termo);
    }
    else{
      $query->setQuery("*");
    }
 
    $query->addParam("NOW", (round(microtime(true) * 1000) - 10800000));
 
    if ($categoria){
      $query->addFilterQuery('categoriapost_nomeseo_sm:'.$categoria);
    }
    if ($tag){
      $query->addFilterQuery('tag_nomeseo_sm:'.$tag);
    }
 
    $query->addSortField("post_agendamento_dt",1);
 
    $query->addFilterQuery('post_tipo_s:'.$tipo);
    $query->addFilterQuery('post_status_i:1');
    $query->addFilterQuery('-post_status_i:9');
    $query->addFilterQuery('-categoriapost_nome_sm:hide');
    $query->addFilterQuery('post_agendamento_dt:[* TO NOW]');
    if($extraFilter){
      $query->addFilterQuery($extraFilter);
    }
 
    if(!$termo){
      if ($grande){
        $query->addFilterQuery('post_imgcapa_grande_s:*');
      }
      else
      {
        $query->addFilterQuery('post_imgcapa_pequena_s:*');
      }
    }
 
 
    $query->setRows($limit);
 
    if($offset){
      $query->setStart($offset);
    }
 
    $response = $client->query($query)->getResponse();
 
    $materias = $response->response->docs;
 
    if (!$materias){
      return array("Error"=>"Nenhuma matéria encontrada");
    }
 
    if ($produtos){
      $matsprods = [];
      $cont = 0;
      foreach($materias as $materia){
 
        $gal = $this->galeriasAction($materia->id,false,15);
        if (!$gal["Error"]){
          $matsprods[$cont]["produtos"]   = $gal;
          $matsprods[$cont]["materia"]   = $materia;
 
        }
 
        $cont++;
      }
 
      return $matsprods;
    }
    else{
      return $materias;
    }
  }
 
  public function dados(){
    $index = [];
 
    $index["imageog"] = $this->tag->getUrlImage($index['bannertopo'][0]->banner_arquivo_s,0,'bannerhome');
 
      $index['novidades']       = $this->galeriasAction(37,false,15);  //passar o id correto do post
      $index['inspiration']    = array (
                        "tudo" => $this->materiasAction('*',false,false,false,10,false,0,false,'-post_tipo_s:Look'),
                        "moda" => $this->materiasAction('*',false,false,false,10,false,false,'moda','-post_tipo_s:Look'),
                        "beleza" => $this->materiasAction('*',false,false,false,10,false,false,'beleza','-post_tipo_s:Look'),
                        "decoracao" => $this->materiasAction('*',false,false,false,10,false,false,'decoracao','-post_tipo_s:Look'),
                        "lifestyle" => $this->materiasAction('*',false,false,false,10,false,false,'lifestyle','-post_tipo_s:Look'),
                        );
      $index['inspirationgrande']  = $this->materiasAction('*',false,false,false,4,false,4,false,'-post_tipo_s:Look');
      $index['TrendIn']      = $this->materiasAction("TrendIn",false,false,true,1);
      $index['looks']        = $this->materiasAction("Look",false,true,false,15);
      $index['logos']        = $this->bannersAction(4);
      $index['vitrine']      = $this->materiasAction("Vitrine",false,true);
      $index['vitrinetematica']  = $this->materiasAction("Vitrine",false,true,true,6);
      $index['mood']        = $this->materiasAction("Mood",false,true,false,1);
      $index['promobanner']     = $this->bannersAction(6);
      $index['categorias']      = array(
                          array($this->categoriaAction("moda/sapatos")),
                          array($this->categoriaAction("casa/decoracao/muranos")),
                          array($this->categoriaAction("moda/roupas/vestidos")),
                          array($this->categoriaAction("beauty")),
                          array($this->categoriaAction("casa/moveis"))
                        );
 
 
      $index["ordem"]        = $this->ordemAction("index");
 
      $index['footertopcategorias']  = $this->helper->footer(8);
 
      $index['footermarcas']  = $this->helper->footer(9);
 
      $index['footerlojas']  = $this->helper->footer(10);
 
      $index['novaslojasmarcas']      = $this->helper->footer(7);
 
      return $index;
    }
}
#1Multiple\Frontend\Controllers\IndexController::bannersAction(7)
/var/www/iLove2.0/apps/helpers/Helpers.php (611)
<?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;
use Dotenv\Dotenv;
class Helpers {
  public $_Page;
 
  public function __construct() {
    $this->session = new SessionFiles();
    $this->session->start();
    $this->detect = new MobileDetect();
 
  }
 
  public function solrConnect($core){
    $dotenv = new Dotenv(__DIR__."/../../");
    $dotenv->load();
    
    $options = [
    'hostname' => getenv('SOLR_HOSTNAME'),
    'login'    => getenv('SOLR_LOGIN'),
    'password' => getenv('SOLR_PASSWORD'),
    'port'     => getenv('SOLR_PORT'),
    'path'     => '/solr/'.$core,
    'timeout'  =>  500
    ];
 
    $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);
 
    if(strpos($uriFinal, "http://") === false && strpos($uriFinal, "https://") === false ){
        $uriFinal =   "http://".$uriFinal;
    }
 
 
    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/".$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 = false){
    if(!$seo){
      return "";
    }
    $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=false){
    if(!$seo){
          return false;
    }
    $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" && $param["lojas"]){
      $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 = $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){
    if(!$parceiro){
      return "";
    }
    $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){
 
    if(!$parceiro){
      return "";
    }
    $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_marcaseo_s :".$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;
  }
  public function getCanonical($url){
    $search = strpos($url, "?");
 
    if($search === false){
      return $url;
    }
 
    $canonical = explode('?',$url);
 
    return $canonical[0];
 
  }
 
 
}
#2Multiple\Helpers\Helpers->footer(7)
/var/www/iLove2.0/apps/frontend/controllers/ProdutoController.php (15)
<?php
namespace Multiple\Frontend\Controllers;
 
use Phalcon\Mvc\Controller;
use Phalcon\Http\Request;
use Multiple\Api\Models\Produtos;
use Multiple\Frontend\Controllers\IndexController as IndexActions;
 
class ProdutoController extends Controller
{
  public function indexAction(){
 
    //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)
    );
 
    $id = $this->dispatcher->getParam("id");
    $slug  = $this->helper->slugify($this->dispatcher->getParam("nome"));
 
    $this->view->produto =  $this->produto($id,false,1,false,$slug)[0];
    $this->view->cupom = $this->cupom($this->view->produto);
    $this->view->url    = $this->helper->url(false);
    $this->view->titulo = $this->view->produto->produto_nome_s;
 
    $this->view->coresprod = $this->coresprodutos($this->view->produto);
 
    $this->view->relacionados = $this->relacionados($this->view->produto);
 
    //Visitados
    $this->viewProd($id);
 
    $this->view->visitados = $this->visitados($id);
 
    $this->view->likes = array_filter(unserialize($this->cookies->get("likes")->getValue()));
 
    $index = new IndexActions();
 
    $this->view->breads = $this->breadcrumb($this->view->produto);
 
    $this->view->inspiration =   array (  "tudo" => $index->materiasAction() );
 
 
    // $this->view->likes = array_filter(unserialize($this->cookies->get("likes")->getValue()));
    // $this->view->render("index","index");
  }
 
  public function visitados($id){
    $visitados = unserialize($this->cookies->get("visitados")->getValue());
    $visit = array();
 
    $visitados = array_unique($visitados);
 
    foreach ($visitados as $visitado){
      if ($visitado!=$id){
        $prodvisi = $this->produto($visitado,false,1,false)[0];
        if($prodvisi){
          array_push($visit,$prodvisi);
        }
      }
    }
 
 
    return array_reverse($visit);
  }
  function OrdenarMaiorValor($a,$b){
      return strlen($b)-strlen($a);
  }
 
  public function breadcrumb($produto){
    return array(
        array(
          "categoria"  =>"Lojas",
          "seo"    => "lojas"
        ),
        array(
          "categoria"  => $this->helper->capitalizar($produto->parceiro_nome_s),
          "seo"    => "loja/".$produto->parceiro_nomeseo_s
        ),
        array(
          "categoria"  => $this->helper->capitalizar($produto->produto_marca_s),
          "seo"    => $produto->produto_marcaseo_s
        ),
        array(
          "categoria"  => $this->helper->capitalizar($produto->produto_nome_s),
          "seo"    => ""
        )
      );
  }
 
 
 
  public function relacionados($produto){
 return "";
    $client = $this->helper->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
    $catsseo = $produto->produto_categoria_nomeseo_sm;
 
    usort($catsseo,'sort');
 
    if ($produto->produto_precofinal_f<1000){
      $valorminimo = $produto->produto_precofinal_f-100;
      $valormaximo = $produto->produto_precofinal_f+100;
    }
 
    if ($valormaximo){
      $query->addFilterQuery('produto_precofinal_f:[* TO '. $valormaximo. ']');
      $query->addFilterQuery('produto_precofinal_f:['. $valorminimo. ' TO *]');
    }
 
    $marcaSEO = ($produto->produto_marcaseo_s)?"produto_marcaseo_s:".$produto->produto_marcaseo_s."^10":"";
    $parceiroSEO = ($produto->parceiro_nomeseo_s)?" AND parceiro_nomeseo_s:".$produto->parceiro_nomeseo_s."^8 ":"";
 
    if(!$marcaSEO)
    $query->setQuery(
      "((produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* ) AND produto_disponivel_i:1) AND ".
      "(".
        "(".
          $marcaSEO.
          ($catsseo[0] ? "AND produto_categoria_nomeseo_sm:".$catsseo[0]."^10" : "" ).
        " ) OR ( " .
          $marcaSEO.
          ($catsseo[1] ? " AND produto_categoria_nomeseo_sm:".$catsseo[1]."^9 " : "") .
          $parceiroSEO.
        ")".
      ")"
    );
 
    $query->addSortField("score desc, random_".date("W"),0);
 
    $query->addFilterQuery("-produto_id_i:".$produto->produto_id_i);
 
    $query->setRows(12);
 
    $response = $client->query($query)->getResponse();
 
    $prod = $response->response->docs;
 
    $qtd = $response->response->numFound;
 
    if (!$prod){
      return;
    }
 
    return array("produtos"=>$prod,"qtdprod"=>$qtd);
  }
 
  public function viewProd($id){
    $produto = Produtos::findFirst($id);
    if(!$produto){ return false;}
 
    $produto->produto_alteracao = date("Y-m-d H:i:s");
    $produto->produto_views = $produto->produto_views+1;
    $produto->save();
 
 
    $cookie = unserialize($this->cookies->get("visitados")->getValue());
 
    if (!$cookie){
      $cookie = [];
    }
 
    if (!in_array($id,$cookie)){
      array_push($cookie,$id);
    }
 
    $this->cookies->set(
            "visitados",
            serialize($cookie),
            time() + 15 * 86400
        );
 
  }
 
 
  public function produto($id=false,$groupid=false,$rows=1,$debug=false,$slug=false){
 
    $client = $this->helper->solrConnect('produtos');
 
    $query = new \SolrQuery();
 
//    $query->setQuery('produto_id_i:'.$id);
 
    if ($id ){
      $query->setQuery("produto_id_i:".$id);
    }
 
    if ($groupid){
      $query->setQuery("produto_groupid_s:".$groupid);
    }
 
    $query->addFilterQuery("(produto_imagem_linkexterno_sm:* OR produto_imagem_link_sm:* )");
 
    $query->setRows($rows);
 
    $response = $client->query($query)->getResponse();
 
    if ($debug)
    {
      return $response;
    }
    $prod = $response->response->docs;
 
    if (!$prod){
      return;
    }
 
    return $prod;
 
 
  }
 
  public function coresProdutos($produto){
 
    $coresProd = $this->produto(false,$produto[0]->produto_groupid_s,99);
 
 
    $corp = array();
 
    foreach ($coresProd as $corprod){
      foreach ($corprod->produto_cor_sm as $cor){
        $corp[$cont]["cor"] = $cor;
        $corp[$cont]["link"] = "/produto/".$corprod->parceiro_nomeseo_s . "/". $corprod->produto_marcaseo_s . "/" . $corprod->produto_nomeseo_s . "/" . $corprod->produto_id_i;
 
        $cont++;
      }
    }
 
    return $corp;
  }
  public function cupom($produto){
 
    $client = $this->helper->solrConnect('cupons');
 
    $request = new Request();
    $query = new \SolrQuery();
 
    $parceiroSeo = ($produto->parceiro_nomeseo_s)?$produto->parceiro_nomeseo_s:"";
 
    $query->setQuery('parceiro_nomeseo_s:"'.$parceiroSeo.'"');
    $currentDate =  time();
    $now =  strtotime(date("Y-m-d H:i:s", $currentDate) . " +3 hours") . "000";
 
    $query->addParam("NOW", (round(microtime(true) * 1000) + 10800000));
 
    $query->addFilterQuery("parceirocupom_textoproduto_s:*");
    $query->addFilterQuery("parceirocupom_ativo_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;
 
 
    return $cupom[0]->parceirocupom_textoproduto_s;
 
  }
 
 
}
#3Multiple\Frontend\Controllers\ProdutoController->indexAction(produto, produto, blusa-cetim-acinturada-azul, 3194642)
#4Phalcon\Dispatcher->callActionMethod(Object(Multiple\Frontend\Controllers\ProdutoController), indexAction, Array([page] => produto, [nomeseo] => produto, [nome] => blusa-cetim-acinturada-azul, [id] => 3194642))
#5Phalcon\Dispatcher->_dispatch()
#6Phalcon\Dispatcher->dispatch()
#7Phalcon\Mvc\Application->handle()
/var/www/iLove2.0/public/index.php (455)
<?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",
               "Dotenv"    => APPLICATION_PATH . "/../vendor/vlucas/phpdotenv/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 (460)
<?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",
               "Dotenv"    => APPLICATION_PATH . "/../vendor/vlucas/phpdotenv/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/produto/blusa-cetim-acinturada-azul/3194642
idblusa-cetim-acinturada-azul
KeyValue
REDIRECT_UNIQUE_IDWpLdEYC6papsYDTeZUppHgAAADQ
REDIRECT_STATUS200
UNIQUE_IDWpLdEYC6papsYDTeZUppHgAAADQ
HTTP_HOSTwww.ilovee.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_NAMEwww.ilovee.com.br
SERVER_ADDR169.63.72.146
SERVER_PORT80
REMOTE_ADDR54.163.53.153
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_PORT37424
REDIRECT_QUERY_STRING_url=/produto/blusa-cetim-acinturada-azul/3194642&id=blusa-cetim-acinturada-azul
REDIRECT_URL/produto/blusa-cetim-acinturada-azul/3194642
GATEWAY_INTERFACECGI/1.1
SERVER_PROTOCOLHTTP/1.0
REQUEST_METHODGET
QUERY_STRING_url=/produto/blusa-cetim-acinturada-azul/3194642&id=blusa-cetim-acinturada-azul
REQUEST_URI/produto/blusa-cetim-acinturada-azul/3194642?id=blusa-cetim-acinturada-azul
SCRIPT_NAME/index.php
PHP_SELF/index.php
REQUEST_TIME_FLOAT1519574289.912
REQUEST_TIME1519574289
SOLR_HOSTNAMElocalhost
SOLR_LOGINiloveesolaris
SOLR_PASSWORDfWVq5dNCBU0yeHST
SOLR_PORT8983
DB_HOSTlocalhost
DB_USERroot
DB_PASSWORDQb8Mqyfh
DB_NAMEilove2
DB_CHARSETutf8
#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-hostname-parser/src/functions_include.php
8/var/www/iLove2.0/vendor/league/uri-hostname-parser/src/functions.php
9/var/www/iLove2.0/vendor/league/uri-parser/src/functions_include.php
10/var/www/iLove2.0/vendor/league/uri-parser/src/functions.php
11/var/www/iLove2.0/vendor/guzzlehttp/promises/src/functions_include.php
12/var/www/iLove2.0/vendor/guzzlehttp/promises/src/functions.php
13/var/www/iLove2.0/vendor/league/uri-components/src/functions_include.php
14/var/www/iLove2.0/vendor/league/uri-components/src/functions.php
15/var/www/iLove2.0/vendor/league/uri-schemes/src/functions_include.php
16/var/www/iLove2.0/vendor/league/uri-schemes/src/functions.php
17/var/www/iLove2.0/vendor/league/uri-schemes/src/Schemes/deprecated.php
18/var/www/iLove2.0/vendor/league/uri-schemes/src/AbstractUri.php
19/var/www/iLove2.0/vendor/league/uri-interfaces/src/Uri.php
20/var/www/iLove2.0/vendor/league/uri-schemes/src/Data.php
21/var/www/iLove2.0/vendor/league/uri-schemes/src/File.php
22/var/www/iLove2.0/vendor/league/uri-schemes/src/Ftp.php
23/var/www/iLove2.0/vendor/league/uri-schemes/src/Http.php
24/var/www/iLove2.0/vendor/psr/http-message/src/UriInterface.php
25/var/www/iLove2.0/vendor/league/uri-schemes/src/Uri.php
26/var/www/iLove2.0/vendor/league/uri-schemes/src/UriException.php
27/var/www/iLove2.0/vendor/league/uri-parser/src/Exception.php
28/var/www/iLove2.0/vendor/league/uri-schemes/src/Ws.php
29/var/www/iLove2.0/vendor/guzzlehttp/guzzle/src/functions_include.php
30/var/www/iLove2.0/vendor/guzzlehttp/guzzle/src/functions.php
31/var/www/iLove2.0/vendor/league/uri-manipulations/src/functions_include.php
32/var/www/iLove2.0/vendor/league/uri-manipulations/src/Modifiers/functions.php
33/var/www/iLove2.0/vendor/league/uri-manipulations/src/functions.php
34/var/www/iLove2.0/vendor/mtdowling/jmespath.php/src/JmesPath.php
35/var/www/iLove2.0/vendor/swiftmailer/swiftmailer/lib/swift_required.php
36/var/www/iLove2.0/vendor/swiftmailer/swiftmailer/lib/classes/Swift.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/vendor/vlucas/phpdotenv/src/Dotenv.php
40/var/www/iLove2.0/vendor/vlucas/phpdotenv/src/Loader.php
41/var/www/iLove2.0/apps/helpers/StageVerification.php
42/var/www/iLove2.0/apps/frontend/controllers/ProdutoController.php
43/var/www/iLove2.0/apps/helpers/Helpers.php
44/var/www/iLove2.0/vendor/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php
45/var/www/iLove2.0/vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php
46/var/www/iLove2.0/apps/frontend/controllers/IndexController.php
Memory
Usage2097152