source: trunk/www/ports.php @ 35222

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

You did miss one! :-P
Also moved the print_header() function call to just above the beginning of the page, as it makes more sense there.

  • 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 35222 2008-03-21 05:34:48Z jmpp@macports.org $ */
5    /* Copyright (c) 2004, OpenDarwin. */
6    /* Copyright (c) 2004-2007, The MacPorts Project. */
7   
8    $MPWEB = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['SCRIPT_NAME']);
9    include_once("$MPWEB/includes/common.inc");
10   
11    $portsdb_info = portsdb_connect($portsdb_host, $portsdb_user, $portsdb_passwd);
12    $sql = "SELECT UNIX_TIMESTAMP(activity_time) FROM $portsdb_name.log ORDER BY UNIX_TIMESTAMP(activity_time) DESC";
13    $result = mysql_query($sql);
14    if ($result && $row = mysql_fetch_row($result)) {
15        $date = date('Y-m-d', $row[0]);
16        $time = date('H:i:s e', $row[0]);
17    } else {
18        $date = '(unknown)';
19        $time = '(unknown)';
20    }
21    $by = isset($_GET['by']) ? $_GET['by'] : '';
22    $substr = isset($_GET['substr']) ? $_GET['substr'] : '';
23
24    print_header('The MacPorts Project -- Available Ports', 'utf-8');
25?>
26
27<div id="content">
28
29    <h2 class="hdr">MacPorts Portfiles</h2>
30
31    <p>The MacPorts Project currently distributes <b><?php print $portsdb_info['num_ports']; ?></b> ports, organized across
32    <?php print $portsdb_info['num_categories']; ?> different categories and available below for viewing. This form allows
33    you to search the MacPorts software index, last updated on <?php print '<b>' . $date . '</b> at <b>' . $time . '</b>'; ?>.
34    </p>
35   
36    <br />
37
38    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="get">
39        <p>
40            <label>Search by:</label>
41            <select name="by">
42                <option value="name"<?php if ($by == 'name') { print ' selected="selected"'; } ?>>Software Title</option>
43                <option value="category"<?php if ($by == 'category') { print ' selected="selected"'; } ?>>Category</option>
44                <option value="maintainer"<?php if ($by == 'maintainer') { print ' selected="selected"'; } ?>>Maintainer</option>
45<!--                <option value="library"<?php if ($by == 'dependency') { print ' selected="selected"'; } ?>>Dependency</option> -->
46                <option value="variant"<?php if ($by == 'variant') { print ' selected="selected"'; } ?>>Variant</option>
47                <option value="platform"<?php if ($by == 'platform') { print ' selected="selected"'; } ?>>Platform</option>
48            </select>
49            <input type="text" name="substr" size="40" />
50            <input type="submit" value="Search" />
51        </p>
52    </form>
53
54    <p>Or view the complete <a href="<?php print $_SERVER['PHP_SELF']; ?>?by=all">ports list (<?php print $portsdb_info['num_ports']; ?>
55    ports)</a>.</p>
56    <br />
57
58<?php
59    /* If no valid search criteria is specified (by set and not equal to all and a valid substring) we output port categories
60     as possible searches */
61    if (!$by || ($by != 'all' && !$substr)) {
62        $query = "SELECT DISTINCT category FROM $portsdb_name.categories ORDER BY category";
63        $result = mysql_query($query);
64        if ($result) {
65            $max_entries_per_column = floor($portsdb_info['num_categories']/4);
66            $columns = 0;
67            print '<h3>Port Categories</h3><div id="categories"><ul>';
68            while ($columns < 4) {
69                $entries_per_colum = 0;
70                print '<li><ul>';
71                while ($row = mysql_fetch_assoc($result)) {
72                    print "<li><a href=\"$_SERVER[PHP_SELF]?by=category&amp;substr=" . urlencode($row['category']) . '">'
73                    . htmlspecialchars($row['category']) . '</a></li>';
74                    if ($entries_per_colum == $max_entries_per_column) break;
75                    $entries_per_colum++;
76                }
77                print '</ul></li>';
78                $columns++;
79            }
80            print '</ul></div>';
81        }
82    }
83
84    /* If valid criteria is specified (by set and a valid substring, or by set to all) we poll the db and display the results */
85    if ($by && ($substr || $by == 'all')) {
86        $fields = 'name, path, version, description';
87        $tables = "$portsdb_name.portfiles AS p";
88        switch ($by) {
89        case 'name':
90            $criteria = "p.name LIKE '%" . mysql_real_escape_string($substr) . "%'";
91            break;
92        case 'category':
93            $tables .= ", $portsdb_name.categories AS c";
94            $criteria = "c.portfile = p.name AND c.category = '" . mysql_real_escape_string($substr) . "'";
95            break;
96        case 'maintainer':
97            $tables .= ", $portsdb_name.maintainers AS m";
98            $criteria = "m.portfile = p.name AND m.maintainer LIKE '%" . mysql_real_escape_string($substr) . "%'";
99            break;
100        case 'library':
101            $criteria = "p.name = '" . mysql_real_escape_string($substr) . "'";
102            break;
103        case 'variant':
104            $tables .= ", $portsdb_name.variants AS v";
105            $criteria = "v.portfile = p.name AND v.variant = '" . mysql_real_escape_string($substr) . "'";
106            break;
107        case 'platform':
108            $tables .= ", $portsdb_name.platforms AS pl";
109            $criteria = "pl.portfile = p.name AND pl.platform = '" . mysql_real_escape_string($substr) . "'";
110            break;
111        case 'all':
112            $criteria = '';
113            break;
114        default:
115            $criteria = '0';
116            break;
117        }
118        $where = ($criteria == '' ? '' : "WHERE $criteria");
119        $query = "SELECT DISTINCT $fields FROM $tables $where ORDER BY name";
120        $result = mysql_query($query);
121       
122        /* Main query sent to the DB */
123        if ($result) {
124            print '<h3>Query Results</h3><p><i>' . mysql_num_rows($result) . ' ' . (mysql_num_rows($result) == 1 ? 'Portfile' : 'Portfiles')
125            . ' Selected</i></p>';
126
127            print '<dl>';
128            /* Iterate over the entire set of returned ports */
129            while ($row = mysql_fetch_assoc($result)) {
130
131                /* Port name and Portfile URL */
132                print "<dt><b><a href=\"${trac_url}browser/trunk/dports/$row[path]/Portfile\">" . htmlspecialchars($row['name'])
133                . '</a></b> ' . htmlspecialchars($row['version']) . '</dt>';
134               
135                print '<dd>';
136                /* Port short description */
137                print htmlspecialchars($row['description']) . '<br />';
138               
139                /* Maintainers */
140                $nquery = "SELECT maintainer FROM $portsdb_name.maintainers WHERE portfile='" . mysql_real_escape_string($row['name']) .
141                "' ORDER BY is_primary DESC, maintainer";
142                $nresult = mysql_query($nquery);
143                if ($nresult) {
144                    $primary = 1;
145                    print '<i>Maintained by:</i>';
146                    while ($nrow = mysql_fetch_row($nresult)) {
147                        if ($primary) { print ' <b>'; }
148                        else { print ' '; }
149                        print obfuscate_email($nrow[0]);;
150                        if ($primary) { print '</b>'; }
151                        $primary = 0;
152                    }
153                }
154
155                /* Categories */
156                $nquery = "SELECT category FROM $portsdb_name.categories WHERE portfile='" . mysql_real_escape_string($row['name']) .
157                "' ORDER BY is_primary DESC, category";
158                $nresult = mysql_query($nquery);
159                if ($nresult) {
160                    $primary = 1;
161                    print '<br /><i>Categories:</i>';
162                    while ($nrow = mysql_fetch_row($nresult)) {
163                        if ($primary) { print ' <b>'; }
164                        else { print ' '; }
165                        print "<a href=\"$_SERVER[PHP_SELF]?by=category&amp;substr=" . urlencode($nrow[0]) . '">'
166                        . htmlspecialchars($nrow[0]) . '</a>';
167                        if ($primary) { print '</b>'; }
168                        $primary = 0;
169                    }
170                }
171
172                /* Platforms */
173                $nquery = "SELECT platform FROM $portsdb_name.platforms WHERE portfile='" . mysql_real_escape_string($row['name']) .
174                "' ORDER BY platform";
175                $nresult = mysql_query($nquery);
176                if ($nresult) {
177                    print '<br /><i>Platforms:</i> ';
178                    while ($nrow = mysql_fetch_row($nresult)) {
179                        print "<a href=\"$_SERVER[PHP_SELF]?by=platform&amp;substr=" . urlencode($nrow[0]) . '">'
180                        . htmlspecialchars($nrow[0]) . '</a> ';
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                    print '<br /><i>Dependencies:</i> ';
190                    while ($nrow = mysql_fetch_row($nresult)) {
191                        $library = eregi_replace('^([^:]*:[^:]*:|[^:]*:)', '', $nrow[0]);
192                        print "<a href=\"$_SERVER[PHP_SELF]?by=library&amp;substr=" . urlencode($library) . '">'
193                        . htmlspecialchars($library) . '</a> ';
194                    }
195                }
196
197                /* Variants */
198                $nquery = "SELECT variant FROM $portsdb_name.variants WHERE portfile='" . mysql_real_escape_string($row['name']) .
199                "' ORDER BY variant";
200                $nresult = mysql_query($nquery);
201                if ($nresult && mysql_num_rows($nresult) > 0) {
202                    print '<br /><i>Variants:</i> ';
203                    while ($nrow = mysql_fetch_row($nresult)) {
204                        print "<a href=\"$_SERVER[PHP_SELF]?by=variant&amp;substr=" . urlencode($nrow[0]) . '">'
205                        . htmlspecialchars($nrow[0]) . '</a> ';
206                    }
207                }
208                print '<br /><br /></dd>';
209               
210            } /* while (listing of macthing ports) */
211            print '</dl>';
212
213        /* When we hit this else, the query failed for some reason */
214        } else {
215            print '<p>An Error Occurred: '. mysql_error($portsdb_info['connection_handler']) . '</p>';
216        }
217       
218    } /* if (main query sent to the DB) */
219?>
220
221</div>
222
223
224<?php
225    print_footer();
226    mysql_close($portsdb_info['connection_handler']);
227?>
Note: See TracBrowser for help on using the repository browser.