Ticket #400: 2005-09-30_search_improvements.diff

File 2005-09-30_search_improvements.diff, 11.8 KB (added by Adam Di Carlo <aph@…>, 16 years ago)

patch against rev 7368 (0.18 branch)

  • mythweb/themes/Default/program_detail.php

     
    105105            <dl>
    106106<?php           if (strlen($program->category)) { ?>
    107107                <dt><?php echo t('Category') ?>:&nbsp;</dt>
    108                 <dd><?php echo $program->category ?></dd>
     108                <dd><a href="search.php?searchstr=<?php echo urlencode($program->category) ?>&search_category=1"><?php echo $program->category ?></a></dd>
    109109<?php           }
    110110               if (strlen($program->airdate)) {
    111111?>
    112112                <dt><?php echo t('Original Airdate') ?>:&nbsp;</dt>
    113                 <dd><?php echo $program->airdate ?></dd>
     113                <dd><a href="search.php?originalairdate=<?php echo urlencode($program->airdate) ?>"><?php echo $program->airdate ?></a></dd>
    114114<?php           }
    115115                if (strlen($program->rating)) {
    116116?>
     
    122122                    ?>:&nbsp;</dt>
    123123                <dd><?php echo $program->rating ?></dd>
    124124<?php           }
    125                 if ($program->get_credits('host')) {
     125                $credit_types = array('host'               => 'Hosted by',
     126                                      'presenter'          => 'Presented by',
     127                                      'actor'              => 'Cast',
     128                                      'guest_star'         => 'Guest Starring',
     129                                      'director'           => 'Directed by',
     130                                      'producer'           => 'Produced by',
     131                                      'executive_producer' => 'Exec. Producer',
     132                                      'writer'             => 'Written by');
     133                foreach (array_keys($credit_types) as $c) {
     134                    if ($program->get_credits($c)) {
    126135?>
    127                 <dt><?php echo t('Hosted by') ?>:&nbsp;</dt>
    128                 <dd><?php echo $program->get_credits('host') ?></dd>
    129 <?php           }
    130                 if ($program->get_credits('presenter')) {
     136                <dt><?php echo t($credit_types[$c]) ?>:&nbsp;</dt><dd>
     137<?php
     138                        $peeplist = array();
     139                        foreach (explode(',', $program->get_credits($c)) as $peep) {
     140                            $peep = trim($peep);
     141                            $peeplist[] = "<a href='search.php?name=" . urlencode($peep) . "'>$peep</a>";
     142                        }
     143                        print implode(', ', $peeplist);
     144?></dd>
     145<?php               }
     146                }
    131147?>
    132                 <dt><?php echo t('Presented by') ?>:&nbsp;</dt>
    133                 <dd><?php echo $program->get_credits('presenter') ?></dd>
    134 <?php           }
    135                 if ($program->get_credits('actor')) {
    136 ?>
    137                 <dt><?php echo t('Cast') ?>:&nbsp;</dt>
    138                 <dd><?php echo $program->get_credits('actor') ?></dd>
    139 <?php           }
    140                 if ($program->get_credits('guest_star')) {
    141 ?>
    142                 <dt><?php echo t('Guest Starring') ?>:&nbsp;</dt>
    143                 <dd><?php echo $program->get_credits('guest_star') ?></dd>
    144 <?php           }
    145                 if ($program->get_credits('director')) {
    146 ?>
    147                 <dt><?php echo t('Directed by') ?>:&nbsp;</dt>
    148                 <dd><?php echo $program->get_credits('director') ?></dd>
    149 <?php           }
    150                 if ($program->get_credits('producer')) {
    151 ?>
    152                 <dt><?php echo t('Produced by') ?>:&nbsp;</dt>
    153                 <dd><?php echo $program->get_credits('producer') ?></dd>
    154 <?php           }
    155                 if ($program->get_credits('executive_producer')) {
    156 ?>
    157                 <dt><?php echo t('Exec. Producer') ?>:&nbsp;</dt>
    158                 <dd><?php echo $program->get_credits('executive_producer') ?></dd>
    159 <?php           }
    160                 if ($program->get_credits('writer')) {
    161 ?>
    162                 <dt><?php echo t('Written by') ?>:&nbsp;</dt>
    163                 <dd><?php echo $program->get_credits('writer') ?></dd>
    164 <?php           } ?>
    165148            </dl>
    166149        </div>
    167150<?php   } ?>
  • mythweb/search.php

     
    1515// Load all channels
    1616    load_all_channels();
    1717
    18 // A single search string passed in
    19     if ($_GET['searchstr'] || $_POST['searchstr']) {
     18    $program_search_fields = array('title', 'subtitle', 'descr', 'category', 'category_type', 'originalairdate', 'name');
     19
     20// A single search string passed in, OR search
     21    if (array_key_exists('searchstr', $_REQUEST)) {
    2022        unset($_SESSION['search']);
    21         $_SESSION['search']['searchstr']            = _or($_GET['searchstr'],            $_POST['searchstr']);
    22         $_SESSION['search']['search_title']         = _or($_GET['search_title'],         $_POST['search_title']);
    23         $_SESSION['search']['search_subtitle']      = _or($_GET['search_subtitle'],      $_POST['search_subtitle']);
    24         $_SESSION['search']['search_description']   = _or($_GET['search_description'],   $_POST['search_description']);
    25         $_SESSION['search']['search_category']      = _or($_GET['search_category'],      $_POST['search_category']);
    26         $_SESSION['search']['search_category_type'] = _or($_GET['search_category_type'], $_POST['search_category_type']);
     23        $_SESSION['search']['searchstr'] = $_REQUST['searchstr'];
     24        foreach ($program_search_fields as $e) {
     25            $e = "search_$e";
     26            if (array_key_exists($e, $_REQUEST)) {
     27                $_SESSION['search'][$e] = $_REQUEST[$e];
     28            }
     29        }
    2730    }
    2831
    2932
    30 // Individual search strings for different fields
    31     elseif ($_GET['title'] || $_GET['subtitle'] || $_GET['description'] || $_GET['category'] || $_GET['category_type'] || $_GET['originalairdate']
    32             || $_POST['title'] || $_POST['subtitle'] || $_POST['description'] || $_POST['category'] || $_POST['category_type'] || $_POST['originalairdate'] ) {
    33         unset($_SESSION['search']);
    34         $_SESSION['search']['title']           = _or($_GET['title'],           $_POST['title']);
    35         $_SESSION['search']['subtitle']        = _or($_GET['subtitle'],        $_POST['subtitle']);
    36         $_SESSION['search']['description']     = _or($_GET['description'],     $_POST['description']);
    37         $_SESSION['search']['category']        = _or($_GET['category'],        $_POST['category']);
    38         $_SESSION['search']['category_type']   = _or($_GET['category_type'],   $_POST['category_type']);
    39         $_SESSION['search']['originalairdate'] = _or($_GET['originalairdate'], $_POST['originalairdate']);
     33// Individual search strings for different fields, AND search
     34    else {
     35        $first = 1;
     36        foreach ($program_search_fields as $e) {
     37            if (array_key_exists($e, $_REQUEST)) {
     38                if ($first) {
     39                    unset($_SESSION['search']);
     40                    $first = 0;
     41                }
     42                $_SESSION['search'][$e] = $_REQUEST[$e];
     43            }
     44        }
    4045    }
    4146// Update some universal search settings
    42     if ($_GET['search_exact'] || $_POST['search_exact'])
    43         $_SESSION['search']['search_exact'] = _or($_GET['search_exact'], $_POST['search_exact']);
    44     if ($_GET['search_hd'] || $_POST['search_hd'])
    45         $_SESSION['search']['search_hd'] = _or($_GET['search_hd'], $_POST['search_hd']);
     47    if ($_REQUEST['search_exact'])
     48        $_SESSION['search']['search_exact'] = $_REQUEST['search_exact'];
     49    if ($_REQUEST['search_hd'])
     50        $_SESSION['search']['search_hd'] = $_REQUEST['search_hd'];
    4651
    4752// Flags that apply in all cases
    48     $nodups = _or($_GET['nodups'], $_POST['nodups']);
     53    $nodups = $_REQUEST['nodups'];
    4954
    5055// Start the query
    5156    $search_name = '';
     
    99104        else
    100105            $search = search_escape($search_str);
    101106    // Build the query
    102         if ($_SESSION['search']['search_title'])
    103             $query[] = "program.title$compare$search";
    104         if ($_SESSION['search']['search_subtitle'])
    105             $query[] = "program.subtitle$compare$search";
    106         if ($_SESSION['search']['search_description'])
    107             $query[] = "program.description$compare$search";
    108         if ($_SESSION['search']['search_category'])
    109             $query[] = "program.category$compare$search";
    110         if ($_SESSION['search']['search_category_type'])
    111             $query[] = "program.category_type$compare$search";
     107        foreach ($program_search_fields as $e) {
     108            if (array_key_exists("search_$e", $_SESSION['search'])) {
     109                $query[] = "program.$e$compare$search";
     110            }
     111       }
    112112    // No query formed - default to quicksearch
    113113        if (!count($query)) {
    114114            $query[] = "program.title$compare$search";
     
    121121    // Individual-field search is an AND search
    122122        $joiner = ' AND ';
    123123    // Build the query
    124         if ($_SESSION['search']['title'])
    125             $query[] = "program.title$compare".search_escape($_SESSION['search']['title']);
    126         if (isset($_SESSION['search']['subtitle']))
    127             $query[] = "program.subtitle$compare".search_escape($_SESSION['search']['subtitle']);
    128         if (isset($_SESSION['search']['description']))
    129             $query[] = "program.description$compare".search_escape($_SESSION['search']['description']);
    130         if (isset($_SESSION['search']['category']))
    131             $query[] = "program.category$compare".search_escape($_SESSION['search']['category']);
    132         if (isset($_SESSION['search']['category_type']))
    133             $query[] = "program.category_type$compare".search_escape($_SESSION['search']['category_type']);
    134         if (isset($_SESSION['search']['originalairdate']))
    135             $query[] = "program.originalairdate > NOW()";
     124        foreach ($program_search_fields as $e) {
     125            if (isset($_SESSION['search'][$e])) {
     126                if ($e == 'originalairdate') {
     127                    if (strstr($_SESSION['search']['originalairdate'], '-')) {
     128                        $query[] = "program.originalairdate = '".$_SESSION['search']['originalairdate']."'";
     129                    } else {
     130                        $query[] = "program.originalairdate LIKE '".$_SESSION['search']['originalairdate']."-%'";
     131                    }
     132                } elseif ($e == 'name') {
     133                    $query[] = "people.$e$compare".search_escape($_SESSION['search'][$e]);
     134                } else {
     135                    $query[] = "program.$e$compare".search_escape($_SESSION['search'][$e]);
     136                }
     137            }
     138        }
    136139    }
    137140
    138141// No query?
  • mythweb/includes/programs.php

     
    107107            trigger_error("load_all_program_data() attempted with an empty \$Channels array", FATAL);
    108108        $these_channels = implode(',', $these_channels);
    109109    // Build the sql query, and execute it
    110         $query = 'SELECT program.*,'
     110        $query = 'SELECT distinct program.*,'
    111111                 .' UNIX_TIMESTAMP(program.starttime) AS starttime_unix,'
    112112                 .' UNIX_TIMESTAMP(program.endtime) AS endtime_unix,'
    113113                 .' CONCAT(repeat('.escape(star_character).', program.stars * '.escape(max_stars).'), IF((program.stars * '.escape(max_stars).' * 10) % 10, "&frac12;", "")) AS starstring,'
    114114                 .' IFNULL(programrating.system, "") AS rater,'
    115115                 .' IFNULL(programrating.rating, "") AS rating'
    116116                 .' FROM program LEFT JOIN programrating USING (chanid, starttime)'
     117                 .' LEFT JOIN credits USING (chanid, starttime)'
     118                 .' LEFT JOIN people USING (person)'
    117119                 .' WHERE';
    118120    // Only loading a single channel worth of information
    119121        if ($chanid > 0)