# Source for file Indexer.php

Documentation is available at Indexer.php

1. <?php
2. /*
3. * $Id$
4. *
5. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16. *
17. * This software consists of voluntary contributions made by many individuals
18. * and is licensed under the LGPL. For more information, see
19. * <http://www.phpdoctrine.com>.
20. */
22. /**
23. * Doctrine_Search_Indexer
24. *
25. * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
26. * @package Doctrine
27. * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
28. * @version $Revision$
29. * @category Object Relational Mapping
30. * @link www.phpdoctrine.com
31. * @since 1.0
32. */
33. class Doctrine_Search_Indexer
34. {
35. public function indexDirectory($dir)
36. {
37. if ( ! file_exists($dir)) {
38. throw new Doctrine_Search_Indexer_Exception('Unknown directory ' . $dir);
39. }
41. $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY);
43. $files = array();
44. foreach ($it as $file) {
45. $name = $file->getPathName();
46. if (strpos($name, '.svn') === false) {
47. $files[] = $name;
48. }
49. }
51. $q = new Doctrine_Query();
52. $q->delete()
53. ->from('Doctrine_File f')
54. ->where('f.url LIKE ?', array($dir . '%'))
55. ->execute();
57. // clear the index
58. $q = new Doctrine_Query();
59. $q->delete()
60. ->from('Doctrine_File_Index i')
61. ->where('i.file_id = ?')
62. ->execute();
65. $conn = Doctrine_Manager::connection();
67. $coll = new Doctrine_Collection('Doctrine_File');
69. foreach ($files as $file) {
70. $coll[]->url = $file;
71. }
73. $coll->save();
74. }
75. }