Description links should not have an indent class
[gitphp.git] / include / display.git_search_files.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php
/*
 *  display.git_search_files.php
 *  gitphp: A PHP git repository browser
 *  Component: Display - search in files
 *
 *  Copyright (C) 2009 Christopher Han <xiphux@gmail.com>
 */
 
require_once('defs.constants.php');
require_once('util.highlight.php');
require_once('gitutil.git_filesearch.php');
require_once('gitutil.git_read_commit.php');
 
function git_search_files($projectroot, $project, $hash, $search, $page = 0)
{
        global $tpl,$gitphp_conf;
 
        if (!($gitphp_conf['search'] && $gitphp_conf['filesearch'])) {
                $tpl->clear_all_assign();
                $tpl->assign("message","File search has been disabled");
                $tpl->display("message.tpl");
                return;
        }
 
        if (!isset($search) || (strlen($search) < 2)) {
                $tpl->clear_all_assign();
                $tpl->assign("error",TRUE);
                $tpl->assign("message","You must enter search text of at least 2 characters");
                $tpl->display("message.tpl");
                return;
        }
        if (!isset($hash)) {
                //$hash = git_read_head($projectroot . $project);
                $hash = "HEAD";
        }
 
        $co = git_read_commit($projectroot . $project, $hash);
 
        $filesearch = git_filesearch($projectroot . $project, $hash, $search, false, ($page * 100), 101);
 
        if (count($filesearch) < 1) {
                $tpl->clear_all_assign();
                $tpl->assign("message","No matches for '" . $search . "'.");
                $tpl->display("message.tpl");
                return;
        }
 
        $tpl->clear_all_assign();
        $tpl->assign("project",$project);
        $tpl->assign("hash",$hash);
        $tpl->assign("treehash",$co['tree']);
        $tpl->display("search_nav.tpl");
 
        $tpl->assign("search",$search);
        $tpl->assign("searchtype","file");
        if ($page > 0) {
                $tpl->assign("firstlink",TRUE);
                $tpl->assign("prevlink",TRUE);
                if ($page > 1)
                        $tpl->assign("prevpage",$page-1);
        }
        if (count($filesearch) > 100) {
                $tpl->assign("nextlink",TRUE);
                $tpl->assign("nextpage",$page+1);
        }
        $tpl->display("search_pagenav.tpl");
 
        $tpl->assign("title",$co['title']);
        $tpl->display("search_header.tpl");
 
        $alternate = FALSE;
        $i = 0;
        foreach ($filesearch as $file => $data) {
                $tpl->clear_all_assign();
                if ($alternate)
                        $tpl->assign("class","dark");
                else
                        $tpl->assign("class","light");
                $alternate = !$alternate;
                $tpl->assign("project",$project);
                $tpl->assign("hashbase",$hash);
                $tpl->assign("file",$file);
                if (strpos($file,"/") !== false) {
                        $f = basename($file);
                        $d = dirname($file);
                        if ($d == "/")
                                $d = "";
                        $hlt = highlight($f, $search, "searchmatch");
                        if ($hlt)
                                $hlt = $d . "/" . $hlt;
                } else
                        $hlt = highlight($file, $search, "searchmatch");
                if ($hlt)
                        $tpl->assign("filename",$hlt);
                else
                        $tpl->assign("filename",$file);
                $tpl->assign("hash",$data['hash']);
                if ($data['type'] == "tree")
                        $tpl->assign("tree",TRUE);
                if (isset($data['lines'])) {
                        $matches = array();
                        foreach ($data['lines'] as $line) {
                                $hlt = highlight($line,$search,"searchmatch",floor(GITPHP_TRIM_LENGTH*1.5),true);
                                if ($hlt)
                                        $matches[] = $hlt;
                        }
                        if (count($matches) > 0)
                                $tpl->assign("matches",$matches);
                }
                $tpl->display("search_fileitem.tpl");
                $i++;
                if ($i >= 100)
                        break;
        }
 
        $tpl->clear_all_assign();
        $tpl->assign("project",$project);
        $tpl->assign("hash",$hash);
        $tpl->assign("search",$search);
        $tpl->assign("searchtype","file");
        if (count($filesearch) > 100) {
                $tpl->assign("nextlink",TRUE);
                $tpl->assign("nextpage",$page+1);
        }
        $tpl->display("search_footer.tpl");
}
 
?>
 
comments