source: trunk/www/ports.php @ 34796

Last change on this file since 34796 was 34796, checked in by jmpp@…, 12 years ago

Be clear about the transfer method we're using to submit this form.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-php
File size: 10.4 KB
Line 
1<?php
2    /* -*- coding: utf-8; mode: php; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=php:et:sw=4:ts=4:sts=4 */
3    /* Web client to the PortIndex2MySQL script located in MacPorts base/portmgr/jobs svn directory. */
4    /* $Id: ports.php 34796 2008-03-06 07:01:17Z jmpp@macports.org $ */
5    /* Copyright (c) 2004, OpenDarwin. */
6    /* Copyright (c) 2004-2007, The MacPorts Project. */
7    $MPWEB = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['SCRIPT_NAME']);
8    include_once("$MPWEB/includes/common.inc");
9    print_header('The MacPorts Project -- Available Ports', 'utf-8');
10    $portsdb_info = portsdb_connect($portsdb_host, $portsdb_user, $portsdb_passwd);
11    $by = isset($_GET['by']) ? $_GET['by'] : '';
12    $substr = isset($_GET['substr']) ? $_GET['substr'] : '';
13?>
14
15
16<div id="content">
17
18    <h2 class="hdr">MacPorts Portfiles</h2>
19
20<?php
21    $sql = "SELECT UNIX_TIMESTAMP(activity_time) FROM $portsdb_name.log ORDER BY UNIX_TIMESTAMP(activity_time) DESC";
22    $result = mysql_query($sql);
23    if ($result && $row = mysql_fetch_row($result)) {
24        $date = date('Y-m-d', $row[0]);
25        $time = date('H:i:s e', $row[0]);
26    }
27?>
28    <p>The MacPorts Project currently distributes <b><?php print $portsdb_info['num_ports']; ?></b> ports, organized across
29    <?php print $portsdb_info['num_categories']; ?> different categories and available below for viewing. This form allows
30    you to search the MacPorts software index, last updated on <b><?php print $date; ?></b> at <b><?php print $time; ?></b>.
31    </p>
32   
33    <br />
34
35    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="get">
36        <p>
37            <label>Search by:</label>
38            <select name="by">
39                <option value="name"<?php if ($by == "name") { print " selected=\"selected\""; } ?>>Software Title</option>
40                <option value="desc"<?php if ($by == "desc") { print " selected=\"selected\""; } ?>>Description</option>
41                <option value="cat"<?php if ($by == "cat") { print " selected=\"selected\""; } ?>>Category</option>
42                <option value="maintainer"<?php if ($by == "maintainer") { print " selected=\"selected\""; } ?>>Maintainer</option>
43            </select>
44            <input type="text" name="substr" size="40" />
45            <input type="submit" value="Search" />
46        </p>
47    </form>
48
49    <p>Or view the complete <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=all">ports list (<?php print $portsdb_info['num_ports']; ?>
50    ports)</a>.</p>
51    <br />
52
53
54<?php
55    if (!$by || (!$substr && $by != "all")) {
56        $query = "SELECT DISTINCT category FROM $portsdb_name.categories ORDER BY category";
57        $result = mysql_query($query);
58        if ($result) {
59?>
60            <h3>Port Categories</h3>
61
62            <div id="categories">
63           
64                <ul>
65
66<?php
67                    $max_entries_per_column = floor($portsdb_info['num_categories']/4);
68                    $columns = 0;
69                    while ($columns < 4) {
70?>
71                        <li>
72                            <ul>
73<?php
74                                $entries_per_colum = 0;
75                                while ($row = mysql_fetch_assoc($result)) {
76?>
77                                    <li><a href="<?php print $_SERVER['PHP_SELF']; ?>?by=cat&amp;substr=<?php print urlencode($row['category']); ?>">
78                                    <?php print htmlspecialchars($row['category']); ?></a></li>
79<?php
80                                    if ($entries_per_colum == $max_entries_per_column) break;
81                                    $entries_per_colum++;
82                                }
83?>
84                            </ul>
85                        </li>
86<?php
87                        $columns++;
88                    }
89?>
90
91                </ul>
92
93            </div>
94<?php
95        }
96    }
97?>
98
99<?php
100    if ($by && ($substr || $by == "all")) {
101        $fields = "name, path, version, description";
102        $query = "1";
103        $tables = "$portsdb_name.portfiles p";
104        if ($by == "name") {
105            $query .= " AND p.name LIKE '%" . mysql_real_escape_string($substr) . "%'";
106        }
107        if ($by == "library") {
108            $query .= " AND p.name='" . mysql_real_escape_string($substr) . "'";
109        }
110        if ($by == "desc") {
111            $query .= " AND p.description LIKE '%" . mysql_real_escape_string($substr) . "%'";
112        }
113        if ($by == "cat") {
114            $tables .= ", $portsdb_name.categories c";
115            $query .= " AND c.portfile=p.name AND c.category='" . mysql_real_escape_string($substr) . "'";
116        }
117        if ($by == "variant") {
118            $tables .= ", $portsdb_name.variants v";
119            $query .= " AND v.portfile=p.name AND v.variant='" . mysql_real_escape_string($substr) . "'";
120        }
121        if ($by == "platform") {
122            $tables .= ", $portsdb_name.platforms pl";
123            $query .= " AND pl.portfile=p.name AND pl.platform ='" . mysql_real_escape_string($substr) . "'";
124        }
125        if ($by == "maintainer") {
126            $tables .= ", $portsdb_name.maintainers m";
127            $query .= " AND m.portfile=p.name AND m.maintainer LIKE '%" . mysql_real_escape_string($substr) . "%'";
128        }
129        $query = "SELECT DISTINCT $fields FROM $tables WHERE $query ORDER BY name";
130        $result = mysql_query($query);
131        if ($result) {
132?>
133            <h3>Query Results</h3>
134
135            <p><i><?php print mysql_num_rows($result) . ' ' . (mysql_num_rows($result) == 1 ? 'Portfile' : 'Portfiles') . 
136            ' Selected'; ?></i></p>
137
138            <dl>
139<?php
140            while ($row = mysql_fetch_assoc($result)) {
141?>
142                <dt><b><a href="<?php print $trac_url . 'browser/trunk/dports/' . $row['path'] . '/Portfile'; ?>"><?php print
143                htmlspecialchars($row['name']); ?></a></b> <?php print htmlspecialchars($row['version']); ?></dt>
144                <dd>
145                    <?php print htmlspecialchars($row['description']); ?>
146                    <br />
147<?php
148/* MAINTAINERS */
149                    $nquery = "SELECT maintainer FROM $portsdb_name.maintainers WHERE portfile='" . mysql_real_escape_string($row['name']) .
150                    "' ORDER BY is_primary DESC, maintainer";
151                    $nresult = mysql_query($nquery);
152                    if ($nresult) {
153?>
154                        <i>Maintained by:</i>
155<?php
156                        $primary = 1;
157                        while ($nrow = mysql_fetch_array($nresult)) {
158                            if ($primary) { print "<b>"; }
159                            else { print " "; }
160                            $addr = obfuscate_email($nrow[0]);
161                            print $addr;
162                            if ($primary) { print "</b>"; }
163                            $primary = 0;
164                        }
165                    }
166
167/* CATEGORIES */
168                    $nquery = "SELECT category FROM $portsdb_name.categories WHERE portfile='" . mysql_real_escape_string($row['name']) .
169                    "' ORDER BY is_primary DESC, category";
170                    $nresult = mysql_query($nquery);
171                    if ($nresult) {
172?>
173                        <br />
174                        <i>Categories:</i>
175<?php
176                        $primary = 1;
177                        while ($nrow = mysql_fetch_assoc($nresult)) {
178                            if ($primary) { print "<b>"; }
179?>
180                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=cat&amp;substr=<?php print urlencode($nrow['category']); ?>">
181                            <?php print htmlspecialchars($nrow['category']); ?></a>
182<?php
183                            if ($primary) { print "</b>"; }
184                            $primary = 0;
185                        }
186                    }
187
188/* PLATFORMS */
189                    $nquery = "SELECT platform FROM $portsdb_name.platforms WHERE portfile='" . mysql_real_escape_string($row['name']) .
190                    "' ORDER BY platform";
191                    $nresult = mysql_query($nquery);
192                    if ($nresult && mysql_num_rows($nresult) > 0) {
193?>
194                        <br />
195                        <i>Platforms:</i>
196<?php
197                        while ($nrow = mysql_fetch_array($nresult)) {
198                            $platform = $nrow[0];
199?>
200                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=platform&amp;substr=<?php print urlencode($platform); ?>">
201                            <?php print htmlspecialchars($platform); ?></a>
202<?php
203                        }
204                    }
205
206/* DEPENDENCIES */
207                    $nquery = "SELECT library FROM $portsdb_name.dependencies WHERE portfile='" . mysql_real_escape_string($row['name']) .
208                    "' ORDER BY library";
209                    $nresult = mysql_query($nquery);
210                    if ($nresult && mysql_num_rows($nresult) > 0) {
211?>
212                        <br />
213                        <i>Dependencies:</i>
214<?php
215                        while ($nrow = mysql_fetch_array($nresult)) {
216                            // lib:libpng.3:libpng -> libpng
217                            // might need adapting to the new port: depspec
218                            $library = eregi_replace("^([^:]*:[^:]*:|[^:]*:)", "", $nrow[0]);
219?>
220                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=library&amp;substr=<?php print urlencode($library); ?>">
221                            <?php print htmlspecialchars($library); ?></a>
222<?php
223                        }
224                    }
225
226/* VARIANTS */
227                    $nquery = "SELECT variant FROM $portsdb_name.variants WHERE portfile='" . mysql_real_escape_string($row['name']) .
228                    "' ORDER BY variant";
229                    $nresult = mysql_query($nquery);
230                    if ($nresult && mysql_num_rows($nresult) > 0) {
231?>
232                        <br />
233                        <i>Variants:</i>
234<?php
235                        while ($nrow = mysql_fetch_array($nresult)) {
236                            $variant = $nrow[0];
237?>
238                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=variant&amp;substr=<?php print urlencode($variant); ?>">
239                            <?php print htmlspecialchars($variant); ?></a>
240<?php
241                        }
242                    }
243?>
244                    <br />
245                    <br />
246                </dd>
247
248<?php
249            }
250
251        } else {
252            print "An Error Occurred. (501)";
253        }
254?>
255        </dl>
256
257<?php
258    }
259?>
260
261</div>
262
263
264<?php
265    print_footer();
266    mysql_close($portsdb_info['connection_stream']);
267?>
Note: See TracBrowser for help on using the repository browser.