source: trunk/www/ports.php @ 35130

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

Quit switching in and out of PHP for such simple stuff as some tiny html markup, use print statements instead.

  • 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.1 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 35130 2008-03-18 03:19:46Z 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            print "<h3>Port Categories</h3>\n<div id=\"categories\">\n<ul>";
60            $max_entries_per_column = floor($portsdb_info['num_categories']/4);
61            $columns = 0;
62            while ($columns < 4) {
63                print "<li>\n<ul>\n";
64                $entries_per_colum = 0;
65                while ($row = mysql_fetch_assoc($result)) {
66                    print '<li><a href="' . $_SERVER['PHP_SELF'] . '?by=cat&amp;substr=' . urlencode($row['category']) . '">'
67                    . htmlspecialchars($row['category']) . '</a></li>';
68                    if ($entries_per_colum == $max_entries_per_column) break;
69                    $entries_per_colum++;
70                }
71                print "</ul>\n</li>";
72                $columns++;
73            }
74            print "</ul>\n\n</div>";
75        }
76    }
77
78    if ($by && ($substr || $by == "all")) {
79        $fields = "name, path, version, description";
80        $query = "1";
81        $tables = "$portsdb_name.portfiles p";
82        if ($by == "name") {
83            $query .= " AND p.name LIKE '%" . mysql_real_escape_string($substr) . "%'";
84        }
85        if ($by == "library") {
86            $query .= " AND p.name='" . mysql_real_escape_string($substr) . "'";
87        }
88        if ($by == "desc") {
89            $query .= " AND p.description LIKE '%" . mysql_real_escape_string($substr) . "%'";
90        }
91        if ($by == "cat") {
92            $tables .= ", $portsdb_name.categories c";
93            $query .= " AND c.portfile=p.name AND c.category='" . mysql_real_escape_string($substr) . "'";
94        }
95        if ($by == "variant") {
96            $tables .= ", $portsdb_name.variants v";
97            $query .= " AND v.portfile=p.name AND v.variant='" . mysql_real_escape_string($substr) . "'";
98        }
99        if ($by == "platform") {
100            $tables .= ", $portsdb_name.platforms pl";
101            $query .= " AND pl.portfile=p.name AND pl.platform ='" . mysql_real_escape_string($substr) . "'";
102        }
103        if ($by == "maintainer") {
104            $tables .= ", $portsdb_name.maintainers m";
105            $query .= " AND m.portfile=p.name AND m.maintainer LIKE '%" . mysql_real_escape_string($substr) . "%'";
106        }
107        $query = "SELECT DISTINCT $fields FROM $tables WHERE $query ORDER BY name";
108        $result = mysql_query($query);
109        if ($result) {
110?>
111            <h3>Query Results</h3>
112
113            <p><i><?php print mysql_num_rows($result) . ' ' . (mysql_num_rows($result) == 1 ? 'Portfile' : 'Portfiles') . 
114            ' Selected'; ?></i></p>
115
116            <dl>
117<?php
118            while ($row = mysql_fetch_assoc($result)) {
119?>
120                <dt><b><a href="<?php print $trac_url . 'browser/trunk/dports/' . $row['path'] . '/Portfile'; ?>"><?php print
121                htmlspecialchars($row['name']); ?></a></b> <?php print htmlspecialchars($row['version']); ?></dt>
122                <dd>
123                    <?php print htmlspecialchars($row['description']); ?>
124                    <br />
125<?php
126/* MAINTAINERS */
127                    $nquery = "SELECT maintainer FROM $portsdb_name.maintainers WHERE portfile='" . mysql_real_escape_string($row['name']) .
128                    "' ORDER BY is_primary DESC, maintainer";
129                    $nresult = mysql_query($nquery);
130                    if ($nresult) {
131?>
132                        <i>Maintained by:</i>
133<?php
134                        $primary = 1;
135                        while ($nrow = mysql_fetch_array($nresult)) {
136                            if ($primary) { print "<b>"; }
137                            else { print " "; }
138                            $addr = obfuscate_email($nrow[0]);
139                            print $addr;
140                            if ($primary) { print "</b>"; }
141                            $primary = 0;
142                        }
143                    }
144
145/* CATEGORIES */
146                    $nquery = "SELECT category FROM $portsdb_name.categories WHERE portfile='" . mysql_real_escape_string($row['name']) .
147                    "' ORDER BY is_primary DESC, category";
148                    $nresult = mysql_query($nquery);
149                    if ($nresult) {
150?>
151                        <br />
152                        <i>Categories:</i>
153<?php
154                        $primary = 1;
155                        while ($nrow = mysql_fetch_assoc($nresult)) {
156                            if ($primary) { print "<b>"; }
157?>
158                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=cat&amp;substr=<?php print urlencode($nrow['category']); ?>">
159                            <?php print htmlspecialchars($nrow['category']); ?></a>
160<?php
161                            if ($primary) { print "</b>"; }
162                            $primary = 0;
163                        }
164                    }
165
166/* PLATFORMS */
167                    $nquery = "SELECT platform FROM $portsdb_name.platforms WHERE portfile='" . mysql_real_escape_string($row['name']) .
168                    "' ORDER BY platform";
169                    $nresult = mysql_query($nquery);
170                    if ($nresult && mysql_num_rows($nresult) > 0) {
171?>
172                        <br />
173                        <i>Platforms:</i>
174<?php
175                        while ($nrow = mysql_fetch_array($nresult)) {
176                            $platform = $nrow[0];
177?>
178                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=platform&amp;substr=<?php print urlencode($platform); ?>">
179                            <?php print htmlspecialchars($platform); ?></a>
180<?php
181                        }
182                    }
183
184/* DEPENDENCIES */
185                    $nquery = "SELECT library FROM $portsdb_name.dependencies WHERE portfile='" . mysql_real_escape_string($row['name']) .
186                    "' ORDER BY library";
187                    $nresult = mysql_query($nquery);
188                    if ($nresult && mysql_num_rows($nresult) > 0) {
189?>
190                        <br />
191                        <i>Dependencies:</i>
192<?php
193                        while ($nrow = mysql_fetch_array($nresult)) {
194                            // lib:libpng.3:libpng -> libpng
195                            // might need adapting to the new port: depspec
196                            $library = eregi_replace("^([^:]*:[^:]*:|[^:]*:)", "", $nrow[0]);
197?>
198                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=library&amp;substr=<?php print urlencode($library); ?>">
199                            <?php print htmlspecialchars($library); ?></a>
200<?php
201                        }
202                    }
203
204/* VARIANTS */
205                    $nquery = "SELECT variant FROM $portsdb_name.variants WHERE portfile='" . mysql_real_escape_string($row['name']) .
206                    "' ORDER BY variant";
207                    $nresult = mysql_query($nquery);
208                    if ($nresult && mysql_num_rows($nresult) > 0) {
209?>
210                        <br />
211                        <i>Variants:</i>
212<?php
213                        while ($nrow = mysql_fetch_array($nresult)) {
214                            $variant = $nrow[0];
215?>
216                            <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=variant&amp;substr=<?php print urlencode($variant); ?>">
217                            <?php print htmlspecialchars($variant); ?></a>
218<?php
219                        }
220                    }
221?>
222                    <br />
223                    <br />
224                </dd>
225
226<?php
227            }
228
229        } else {
230            print "An Error Occurred. (501)";
231        }
232?>
233        </dl>
234
235<?php
236    }
237?>
238
239</div>
240
241
242<?php
243    print_footer();
244    mysql_close($portsdb_info['connection_stream']);
245?>
Note: See TracBrowser for help on using the repository browser.