Guest User

Untitled

a guest
May 23rd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.49 KB | None | 0 0
  1. <?php
  2.  
  3. // force l'utilisation d'UTF8
  4. header('Content-type: text/html; charset=UTF-8');
  5.  
  6. include_once '../lib/pog/objects/class.element.php';
  7. include_once '../lib/pog/objects/class.champ.php';
  8. include_once '../lib/pog/objects/class.categorie.php';
  9. include_once '../lib/pog/objects/class.type.php';
  10. include_once '../lib/pog/objects/class.valeur.php';
  11. include_once '../lib/pog/objects/class.champ.php';
  12. include_once '../lib/Zend/Search/Lucene.php';
  13.  
  14. /**
  15. * Met à disposition les métodes qui permettent à l'interface utilisateur
  16. * de communiquer avec les objets générés par POG.
  17. *
  18. */
  19. class Services
  20. {
  21.  
  22. /**
  23. * Chemin complet des fichiers d'index
  24. *
  25. */
  26. private $INDEX_PATH = "/Users/rdewolff/Documents/TD/dev/OpsIndexer/_index";
  27.  
  28. /**
  29. * Retourne la liste des éléements les plus récent
  30. *
  31. * @return la liste des éléments
  32. */
  33. public function getElements()
  34. {
  35. $e = new Element();
  36.  
  37. return $e->GetList(); // TODO : limit?
  38. }
  39.  
  40. public function addValeur(Valeur $valeur)
  41. {
  42. $valeur->Save();
  43. }
  44.  
  45. public function addUri(Uri $uri)
  46. {
  47. $uri->Save();
  48. }
  49.  
  50. /**
  51. * Retourne la liste des catégories
  52. *
  53. * @return la liste des catégories
  54. */
  55. public function getCategories()
  56. {
  57. $c = new Categorie();
  58. return $c->GetList(null, null, false, null);
  59. }
  60.  
  61. /**
  62. * Retourne la liste des champs
  63. *
  64. * @return la liste des champs
  65. */
  66. public function getFields()
  67. {
  68. $f = new Champ();
  69. return $f->GetList();
  70. }
  71.  
  72. /**
  73. * Retourne la structure d'une catégorie, c'est à dire la liste des champs
  74. * qu'il peut contenir
  75. *
  76. * TODO : si edit, renvoyer la valeur du champs
  77. *
  78. * @return la liste des champs que comporte cette catégorie
  79. */
  80. public function getCategorieFields($id)
  81. {
  82. // récupère la catégorie passée en paramètre
  83. $cat = new Categorie();
  84. $cat->Get($id);
  85.  
  86. // construit un tableau avec l'id de chaque champs, son nom et son type
  87. $arr = array();
  88. foreach ($cat->GetChampList() as $champ)
  89. {
  90. $arr[] = array(
  91. "champId" => $champ->champId,
  92. "nom" => $champ->nom,
  93. "type" => $champ->GetType()->nom
  94. );
  95. }
  96.  
  97. // retourne le tableau
  98. return $arr;
  99. }
  100.  
  101.  
  102. /**
  103. * Ajoute un élément dans l'application
  104. *
  105. * @param Element $e
  106. */
  107. public function addElement(Element $e)
  108. {
  109. $e->Save();
  110. // renvoie l'id de l'element
  111. return $e->elementId;
  112. }
  113.  
  114. /**
  115. * Retoune un tableau avec les tags ainsi que leur score
  116. *
  117. */
  118. public function getTags()
  119. {
  120.  
  121. // récupère la liste des éléments
  122. $e = new Element();
  123. $elems = $e->GetList();
  124.  
  125. // tableau de score des tags
  126. $tags = Array();
  127.  
  128. // compteur de tags
  129. $tagsTotal = 0;
  130.  
  131. // parcours chaque élément
  132. foreach ($elems as $el)
  133. {
  134. // et sa liste de tag
  135. $t = explode(" ", $el->tags);
  136. foreach($t as $name) {
  137. $tagsTotal++;
  138. // incrément la table de hashage qui stock le nombre d'occurence du tag
  139. $name = strtolower($name);
  140. if ($tags[$name]) {
  141. $tags[$name]++;
  142. } else {
  143. $tags[$name] = 1;
  144. }
  145. }
  146. }
  147.  
  148. // calcul le score de chaque terme
  149. // et prépare un tableau a retourner
  150. $tagToReturn = Array();
  151. $i = 0; // limite
  152. $keys = array_keys($tags);
  153. foreach ($tags as $t)
  154. {
  155. $tagToReturn[] = Array($keys[$i], $t/$tagsTotal);
  156. $i++;
  157. // TODO : limite
  158. /*
  159. if ($i > 1)
  160. break; */
  161. }
  162.  
  163. // renvoie les tags
  164. return $tagToReturn;
  165. }
  166.  
  167. /**
  168. * Non implémenté
  169. * Futur : ajouter un service permettant de vérifier le chemin des fichiers
  170. * et ressource sur le réseau.
  171. */
  172. public function checkValidPath($pathName)
  173. {
  174. // -> "\\\\ServeurOnline\\Backup\\Efface.bat.old"
  175. return fopen($pathName, 'r');
  176. // file_exists("\\\\192.168.1.35\\TD_TO_INDEX\\testFiles\\testHTML.html");
  177. //fopen($pathName, 'r');
  178. }
  179.  
  180. /**
  181. * Retourne la liste des utilisateur disponible dans la base de données
  182. * externe.
  183. */
  184. public function getUserListFromExternalDatabase()
  185. {
  186. return $this->externalDatabaseQuery("Online","SELECT ID, CONCAT(Visa, ' (', Nom, ' ', Prenom, ')') AS Nom FROM temployes WHERE Actif=1 AND Categorie=0 ORDER BY Nom");
  187. }
  188.  
  189. /**
  190. * Retourne les informations sur l'identifiant de l'utilisateur passé en paramètre
  191. *
  192. * @param int $id l'identifiant de l'utilisateur recherché
  193. * @return un recordset avec les informations trouvées
  194. */
  195. public function getUserNameFromId($id)
  196. {
  197. return $this->externalDatabaseQuery("Online", "SELECT Prenom, Nom, Visa FROM temployes WHERE ID=" . $id);
  198. }
  199.  
  200. public function getProjectListFromExternalDatabase()
  201. {
  202. return $this->externalDatabaseQuery("Projets", "SELECT stNumProjet FROM tprojets ORDER BY stNumProjet");
  203. }
  204.  
  205. /**
  206. * Requete sur la base de données externes qui contient les informations sur
  207. * les utilisateurs et sur les projets.
  208. *
  209. * @param String $query la requete
  210. * @return un recordset contenant les résultats de la requête.
  211. */
  212. private function externalDatabaseQuery($database, $query)
  213. {
  214. // paramètres de configuration
  215. $configExtern['host'] = "localhost";
  216. $configExtern['username'] = "root";
  217. $configExtern['password'] = "xou5quuc";
  218. $configExtern['database_port'] = "3306";
  219.  
  220. // connexion a la base de données
  221. $dbExtern = mysql_connect($configExtern['host'], $configExtern['username'], $configExtern['password']);
  222. mysql_select_db($database, $dbExtern);
  223.  
  224. // execute et renvoie le resultat de la requête
  225. return ( mysql_query($query) );
  226.  
  227. }
  228.  
  229. /**
  230. * Recherche général
  231. *
  232. * @param String $keyword le ou les mots clés recherchés
  233. */
  234. public function search ($keyword)
  235. {
  236. // param par default
  237. $mode = "OR";
  238.  
  239. // on cherche
  240. $keyword = '%' . $keyword . '%';
  241.  
  242. // le tableau des elements correspondant trouvés
  243. $result = Array();
  244.  
  245. /**
  246. * recherche dans les éléments
  247. */
  248. $e = new Element();
  249. $elemFound = $e->GetList(array(
  250. array("titre", "LIKE", $keyword),
  251. array($mode),
  252. array("tags", "LIKE", $keyword),
  253. array($mode),
  254. array("description", "LIKE", $keyword)
  255. ));
  256.  
  257. // met la liste de résultat dans le tableau d'éléments trouvés
  258. foreach ($elemFound as $elem)
  259. {
  260. $result[] = $elem->elementId;
  261. }
  262.  
  263. /**
  264. * recherche dans les valeurs des champs
  265. */
  266. $v = new Valeur();
  267. $valFound = $v->GetList(array(
  268. array("valeur", "LIKE", $keyword)
  269. ));
  270.  
  271. // met la liste des résultats dans le tableau d'éléments trouvés
  272. foreach ($valFound as $valeur)
  273. {
  274. $result[] = $valeur->elementId;
  275. }
  276.  
  277. /**
  278. * Recherche dans les fichiers indexés
  279. */
  280. // ouvre les fichiers d'index
  281. $index = Zend_Search_Lucene::open($this->INDEX_PATH);
  282.  
  283. // effectue la recherche
  284. $hits = $index->find(strtolower($keyword));
  285.  
  286. // parcours les résutat et les stocks
  287. foreach ($hits as $hit)
  288. {
  289. // chaque document comporte les champs : 'ID_OPS', 'chemin' et 'contents'.
  290. // $result[] = array($hit->getDocument()->ID_OPS, $hit->getDocument()->chemin);
  291. $result[] = $hit->getDocument()->ID_OPS;
  292. }
  293.  
  294. /**
  295. * Normalisation des resultat
  296. * Chaque élément a pu être retourné plusieurs fois. On va attribuer un
  297. * score meilleurs au éléments qui sont revenu le plus souvent.
  298. */
  299.  
  300. /**
  301. * tableau, les indices sont les identifiant des éléments, la valeur est
  302. * le nombre d'occurence dans les résultat de cet élément
  303. */
  304. $resultWithScore = Array();
  305. $total = count($result); // nombre total de résultat trouvés
  306.  
  307. // calcul le nombre d'occurence de chaque element
  308. foreach ($result as $r)
  309. {
  310. if (!$resultWithScore[$r])
  311. $resultWithScore[$r] = 1;
  312. else
  313. $resultWithScore[$r]++;
  314. }
  315.  
  316. // normalise le resultat de chaque élément
  317. // $keys correspond a l'identifiant d'un élément
  318. // et ajoute la liste des fichiers liés a cet élément
  319. $keys = array_keys($resultWithScore);
  320. $i = 0;
  321. $final = Array();
  322. foreach ($resultWithScore as $r)
  323. {
  324. $uri = Array(); // tableau d'URI pour cet élément
  325. foreach ($hits as $hit)
  326. {
  327. if ($hit->getDocument()->ID_OPS == $keys[$i])
  328. $uri[] = array($hit->score, $hit->getDocument()->chemin);
  329. }
  330.  
  331. // ajoute ces éléments dans le tableau
  332. $final[] = array($keys[$i], $r/$total, $uri);
  333.  
  334. $i++;
  335. }
  336.  
  337. /**
  338. * Retourne le tableau d'éléments trouvés avec les scores
  339. */
  340. return $final;
  341. }
  342.  
  343. /**
  344. * Effectue une recherche avancée dans la base de données
  345. *
  346. * @param array $query le tableau de requêtes
  347. */
  348. public function advancedSearch(Array $query)
  349. {
  350.  
  351. }
  352.  
  353. }
  354.  
  355. ?>
Add Comment
Please, Sign In to add comment