public function search()
 {
     //if search with OSS has not been activated yet in module configuration page OSS is not used
     $searchEnabled = OpensearchserverConfigQuery::read('enable_search');
     if (!$searchEnabled) {
         //display results
         return $this->render('search');
     }
     //get keywords
     $request = $this->getRequest();
     $keywords = $request->query->get('q', null);
     $sort = $request->query->get('order', null);
     $page = $request->query->get('page', 1);
     $limit = $request->query->get('limit', 8);
     $offset = $limit == 100000 ? 0 : ($page - 1) * $limit;
     //get locale
     $locale = $request->getSession()->getLang()->getLocale();
     //fix bug with FR locale?
     if ($locale == 'fr_FR') {
         $locale = array('fr_FR', 'fr_Fr');
         $lang = \OpenSearchServer\Request::LANG_FR;
     }
     if (!isset($lang)) {
         switch ($locale) {
             case 'en_EN':
             case 'en_US':
                 $lang = \OpenSearchServer\Request::LANG_EN;
                 break;
             case 'es_ES':
                 $lang = \OpenSearchServer\Request::LANG_ES;
                 break;
             case 'it_IT':
                 $lang = \OpenSearchServer\Request::LANG_IT;
                 break;
             case 'ru_RU':
                 $lang = \OpenSearchServer\Request::LANG_RU;
                 break;
             default:
                 $lang = \OpenSearchServer\Request::LANG_UNDEFINED;
                 break;
         }
     }
     $index = OpensearchserverConfigQuery::read('index_name');
     $queryTemplate = OpensearchserverConfigQuery::read('query_template');
     //create handler for requests
     $oss_api = \OpenSearchServerSearch\Helper\OpenSearchServerSearchHelper::getHandler();
     //create search request
     $request = new \OpenSearchServer\Search\Field\Search();
     $request->index($index)->template($queryTemplate)->start($offset)->rows($limit)->lang($lang)->filterField('locale', $locale, \OpenSearchServer\Request::OPERATOR_OR)->enableLog()->query($keywords);
     //handle sorting
     switch ($sort) {
         case 'alpha':
             $request->sort('titleSort', \OpenSearchServer\Search\Search::SORT_ASC);
             break;
         case 'alpha_reverse':
             $request->sort('titleSort', \OpenSearchServer\Search\Search::SORT_DESC);
             break;
         case 'min_price':
             $request->sort('price', \OpenSearchServer\Search\Search::SORT_ASC);
             break;
         case 'max_price':
             $request->sort('price', \OpenSearchServer\Search\Search::SORT_DESC);
             break;
     }
     //send query
     $response = $oss_api->submit($request);
     $ids = array();
     foreach ($response->getResults() as $result) {
         $ids[] = $result->getField('id');
     }
     //number of pages
     $numberOfPages = $limit > 0 ? round($response->getTotalNumberFound() / $limit) : 1;
     //display results
     return $this->render('oss_results', array('module_code' => 'OpenSearchServerSearch', 'keywords' => $keywords, 'total' => $response->getTotalNumberFound(), 'results' => $response->getResults(), 'ids' => implode(',', $ids), 'numberOfPages' => $numberOfPages));
 }
 /**
  * Delete all products
  */
 private function deleteAllAction()
 {
     // Get name of index and handler to work with OSS API
     $index = OpensearchserverConfigQuery::read('index_name');
     $oss_api = OpenSearchServerSearchHelper::getHandler();
     //delete every documents from index
     $request = new \OpenSearchServer\Document\DeleteByQuery();
     $request->index($index)->query('id:[* TO *]');
     $response = $oss_api->submit($request);
     $this->getRequest()->getSession()->getFlashBag()->add('oss', $this->getTranslator()->trans('All data have been deleted.', [], OpenSearchServerSearch::MODULE_DOMAIN));
     return $this->redirectToHome();
 }
 public static function deleteProduct(Product $product)
 {
     /************************************
      * Get name of index and handler to work with OSS API
      ************************************/
     $index = OpensearchserverConfigQuery::read('index_name');
     $oss_api = OpenSearchServerSearchHelper::getHandler();
     //delete every versions of this product (all locales)
     $request = new \OpenSearchServer\Document\Delete();
     $request->index($index)->field('id')->value($product->getId());
     $response = $oss_api->submit($request);
     return $response->isSuccess();
 }
 protected function buildForm()
 {
     $this->formBuilder->add('hostname', 'text', array('constraints' => array(new NotBlank()), 'required' => true, 'label' => $this->trans('OpenSearchServer instance URL'), 'data' => OpensearchserverConfigQuery::read('hostname', 'http://localhost:9090'), 'label_attr' => array('for' => 'hostname', 'help' => $this->trans('URL to access your OpenSearchServer instance. Please include port information.'))))->add('login', 'text', array('constraints' => array(new NotBlank()), 'required' => true, 'label' => $this->trans('Login'), 'data' => OpensearchserverConfigQuery::read('login', ''), 'label_attr' => array('for' => 'login')))->add('apikey', 'text', array('constraints' => array(new NotBlank()), 'required' => true, 'label' => $this->trans('API Key'), 'data' => OpensearchserverConfigQuery::read('apikey', ''), 'label_attr' => array('for' => 'apikey')))->add('index_name', 'text', array('constraints' => array(new NotBlank()), 'required' => true, 'label' => $this->trans('Index to use'), 'data' => OpensearchserverConfigQuery::read('index_name', ''), 'label_attr' => array('for' => 'index_name', 'help' => $this->trans('Index will be automatically created if it does not already exist.'))))->add('query_template', 'text', array('constraints' => array(new NotBlank()), 'required' => true, 'label' => $this->trans('Query template'), 'data' => OpensearchserverConfigQuery::read('query_template', 'search'), 'label_attr' => array('for' => 'query_template', 'help' => $this->trans('Query template to use for searching products. If it does not already exists in index it will be automatically created from a basic template.'))))->add('enable_search', 'checkbox', array('required' => false, 'label' => $this->trans('Enable search with OpenSearchServer'), 'data' => (bool) OpensearchserverConfigQuery::read('enable_search', ''), 'label_attr' => array('for' => 'enable_search', 'help' => $this->trans('Enable this option when configuration is completed.'))));
 }