<?php
/*
 * Classe qui étend la classe parente BaseSinequa utilisée dans le cadre de la recherche Article Stockée
 */
if (! class_exists('RechercheSynequaArtStock')) {

    class RechercheSynequaArtStock extends BaseSynequa
    {

        public $arr_designfam = null;

        public $arr_lib_rub = null;

        /*
         * Fonction réalisant la connexion à la base intuition : méthode qui surcharge la méthode de la classe mère
         */
        function connect()
        {
            global $elementSynequaStk;
            
            if (is_null($elementSynequaStk)) {
                BaseSynequa::$the_session = new iSession();
                if (BaseSynequa::$the_session->connect(array(
                    'host' => & $_SESSION['INTUITION_SERVER'],
                    'port' => & $_SESSION['INTUITION_PORT'],
                    'database' => & $_SESSION['INTUITION_STK'],
                    'user' => & $_SESSION['INTUITION_USER'],
                    'charset' => in_UTF8
                ))) {
                    $elementSynequaStk = BaseSynequa::$the_session;
                    return $elementSynequaStk;
                } else
                    return null;
            } else {
                BaseSynequa::$the_session = $elementSynequaStk;
                return BaseSynequa::$the_session;
            }
        }

        /*
         * Fonction retournant le jeux de résultats obtenu avec la recherche synequa
         * @param $page : page demandée par l'utilisateur
         * @param $nligne : nombre de ligne affichée par page
         * @param $texte : mots ou expressions recherchées
         */
        function &ReturnData($page, $nligne, $texte, $DESIGNFAM = '', $LIB_RUB = '')
        {
            // Permet d'indicer la profondeur de recherche de l'utilisateur afin de pouvoir faire "précédent" sur les recherches
            $indice = $_SESSION['nb_page_demande']; // indice de profondeur
            $_SESSION["req_syn_DESIGNFAM_{$indice}"] = $DESIGNFAM; // Recherche sur le libellé des sous-famille
            $_SESSION["req_syn_LIB_RUB_{$indice}"] = $LIB_RUB; // Recherche sur le libellé des rubriques
            
            $result = null; // Initialisation à null du tableau de résultat qui sera renvoyé
            
            $this->count_row = 0; // Compteur du nb de lignes retournées : initialisé à 0.
                                  // Si l'utilisateur utilise le panel de navigation, on ajoute un filtre supplémentaire relatif au panel utilisé
            if ($DESIGNFAM != '') { // panel sous-famille
                $condition = " and DESIGNFAM LIKE '" . ReplaceSqlPointeur($DESIGNFAM) . "' ";
            } elseif ($LIB_RUB != '') { // panel libéllé de rubrique
                $condition = " and LIB_RUB LIKE '" . ReplaceSqlPointeur($LIB_RUB) . "'   ";
            } else {
                $condition = '';
            }
            ;
            
            if ($this->connect()) {
                // Création de la requete SINEQUA : On filtre sur le site de stockage du profil utilisateur
                
                $requete = 'select query-expansion,' . "distribution('DESIGNFAM,order=freqdesc,separator=" . RechercheArticlesIntuition::separateur_a . ",innerseparator=" . RechercheArticlesIntuition::separateur_b . "') as famille," . "distribution('LIB_RUB,order=freqdesc,separator=" . RechercheArticlesIntuition::separateur_a . ",innerseparator=" . RechercheArticlesIntuition::separateur_b . "') as rubrique,";
                
                $requete .= ' * ' . " from {$_SESSION['INTUITION_STK']} " . " where TEXT CONTAINS '{$texte}'" . " and LANGUAGE = '{$this->LANGAGE}' " . $condition . ' and globalrelevance > ' . RechercheArticle::getTauxPertinence() . ' ' . // on précise le degré de pertinence recherché
" and SITE = '{$_SESSION['SiteStock']}' " . // on filtre ici sur le site de stockage du profil utilisateur
' order by globalrelevance desc SKIP ' . (($this->page_demande - 1) * $nligne) . " COUNT {$nligne}";
                
                // recherche sur des metas
                $the_query = BaseSynequa::$the_session->in_query($requete);
                
                if ($the_query) {
                    $this->count_row = $the_query->in_num_rows();
                    
                    while ($row = & $the_query->in_fetch_row()) {
                        
                        if (is_null($result)) {
                            
                            foreach (explode(RechercheArticlesIntuition::separateur_a, $row['famille']) as $element) {
                                list ($DESIGNFAM, $count, $autre) = explode(RechercheArticlesIntuition::separateur_b, $element);
                                $this->arr_designfam[] = array(
                                    '!DESIGNFAM' => $DESIGNFAM,
                                    '!count' => $count,
                                    '!href' => "javascript:Traite('BS_encours.php',document.form_BS_encours.famille,'{$DESIGNFAM}')"
                                );
                            }
                            
                            foreach (explode(RechercheArticlesIntuition::separateur_a, $row['rubrique']) as $element) {
                                list ($LIB_RUB, $count, $autre) = explode(RechercheArticlesIntuition::separateur_b, $element);
                                $this->arr_lib_rub[] = array(
                                    '!LIB_RUB' => $LIB_RUB,
                                    '!count' => $count,
                                    '!href' => "javascript:Traite('BS_encours.php',document.form_BS_encours.rubrique,'{$LIB_RUB}')"
                                );
                            }
                        }
                        
                        // On recupère des informations supplémentaires sur l'article
                        $r = & SqlBs::rqGetInfoCompl($row['code_art'])->Trouve1();
                        // On vérifie si la ligne est déjà dans la table et dans ce cas on initialise avec la quantité renseignée
                        $s = BS::getInfoOnLigneBs($row['code_art'], DB_OXAPROCDB);
                        
                        $result[] = array(
                            'CODE_ART' => & $row['code_art'],
                            'DESIGN' => & $row['design'],
                            'UNITE_STK' => & $row['unite_stk'],
                            'QTE_PHYS' => & $r['QTE_PHYS'],
                            'VAL_LOCAL' => & $r['VAL_LOCAL'],
                            'QTE_SORTIE' => & $s['QTE_SORTIE']
                        );
                    }
                }
                
                BaseSynequa::disconnect();
                
                return $result;
            }
        }
    }
}
