Example #1
0
function jz_db_leading_digit($var)
{
    global $compare_ignores_the;
    $LEADING_DIGIT = "{$var} LIKE '0%' OR {$var} LIKE '1%' OR {$var} LIKE '2%'";
    $LEADING_DIGIT .= " OR {$var} LIKE '3%' OR {$var} LIKE '4%' OR {$var} LIKE '5%'";
    $LEADING_DIGIT .= " OR {$var} LIKE '6%' OR {$var} LIKE '7%' OR {$var} LIKE '8%'";
    $LEADING_DIGIT .= " OR {$var} LIKE '9%'";
    if ($compare_ignores_the != "false") {
        $LIKE = jz_db_case_insensitive();
        $LEADING_DIGIT .= " OR {$var} {$LIKE} 'the 0%' OR {$var} {$LIKE} 'the 1%' OR {$var} {$LIKE} 'the 2%'";
        $LEADING_DIGIT .= " OR {$var} {$LIKE} 'the 3%' OR {$var} {$LIKE} 'the 4%' OR {$var} {$LIKE} 'the 5%'";
        $LEADING_DIGIT .= " OR {$var} {$LIKE} 'the 6%' OR {$var} {$LIKE} 'the 7%' OR {$var} {$LIKE} 'the 8%'";
        $LEADING_DIGIT .= " OR {$var} {$LIKE} 'the 9%'";
    }
    return $LEADING_DIGIT;
}
Example #2
0
 /**
  * Searches media
  * 
  * @author Ben Dodson
  * @version 12/26/04
  * @since 9/21/04
  */
 function search($searchArray2, $type = 'both', $depth = -1, $limit = 0, $op = "and", $metasearch = array(), $exclude = array())
 {
     global $sql_type, $sql_pw, $sql_usr, $sql_socket, $sql_db, $backend;
     // alias:
     if ($type == "tracks") {
         $type = "leaves";
     }
     if ($depth === false) {
         $depth = $this->getNaturalDepth();
     }
     // allow strings as well as arrays for searching:
     if (is_string($searchArray2) && $op != "exact") {
         if (stristr($searchArray2, "\"") === false) {
             if ($searchArray2 == "") {
                 $searchArray = array();
             } else {
                 $searchArray = explode(" ", $searchArray2);
             }
         } else {
             // gets nasty..
             $open_quote = false;
             $searchArray = array();
             $word = "";
             for ($i = 0; $i < strlen($searchArray2); $i++) {
                 if ($searchArray2[$i] == ' ' && $open_quote == false) {
                     $searchArray[] = $word;
                     $word = "";
                 } else {
                     if ($searchArray2[$i] == '"') {
                         $open_quote = !$open_quote;
                     } else {
                         $word .= $searchArray2[$i];
                     }
                 }
             }
             if ($word != "") {
                 $searchArray[] = jz_db_escape($word);
             }
         }
     } else {
         $searchArray = $searchArray2;
     }
     // exclude array, too:
     if (is_string($exclude)) {
         if ($exclude == "") {
             $excludeArray = array();
         } else {
             if (stristr($exclude, "\"") === false) {
                 if ($exclude == "") {
                     $excludeArray = array();
                 } else {
                     $excludeArray = explode(" ", $exclude);
                 }
             } else {
                 // gets nasty..
                 $open_quote = false;
                 $excludeArray = array();
                 $word = "";
                 for ($i = 0; $i < strlen($exclude); $i++) {
                     if ($exclude[$i] == ' ' && $open_quote == false) {
                         $excludeArray[] = $word;
                         $word = "";
                     } else {
                         if ($exclude[$i] == '"') {
                             $open_quote = !$open_quote;
                         } else {
                             $word .= jz_db_escape($exclude[$i]);
                         }
                     }
                 }
                 if ($word != "") {
                     $excludeArray[] = $word;
                 }
             }
         }
     } else {
         $excludeArray = $exclude;
     }
     // Now that we have search array, let's jz_db_escape here so we don't have to later.
     for ($i = 0; $i < sizeof($searchArray); $i++) {
         $searchArray[$i] = jz_db_escape($searchArray[$i]);
     }
     // Clean up:
     $tmp = array();
     if (is_array($searchArray)) {
         foreach ($searchArray as $term) {
             if (!($term == "" || $term == " ")) {
                 $tmp[] = $term;
             }
         }
         $searchArray = $tmp;
     }
     $tmp = array();
     foreach ($excludeArray as $term) {
         if (!($term == "" || $term == " ")) {
             $tmp[] = $term;
         }
     }
     $excludeArray = $tmp;
     // INSENSITIVE OPERATION:
     $INSOP = jz_db_case_insensitive();
     // SEARCH:
     $constraints = array();
     // LYRICS: a different kind of search.
     if ($type == "lyrics") {
         if ($this->getLevel() > 0) {
             $constraints[] = "path LIKE '" . jz_db_escape($this->getPath("String")) . "/%'";
         }
         // Level
         if ($depth < 0) {
             $lvl = $this->getLevel();
             $constraints[] = "level > {$lvl}";
         } else {
             $lvl = $this->getLevel() + $depth;
             $constraints[] = "level = {$lvl}";
         }
         if ($op == "exact") {
             $constraints[] = "lyrics {$INSOP} '%{$searchArray2}'%";
         } else {
             if ($op == "or") {
                 $OPR = "OR";
             } else {
                 // and
                 $OPR = "AND";
             }
             $string = "";
             if (sizeof($searchArray) > 0) {
                 $string .= "lyrics {$INSOP} '%{$searchArray['0']}%'";
             }
             for ($i = 1; $i < sizeof($searchArray); $i++) {
                 $string .= "{$OPR} lyrics {$INSOP} '%{$searchArray[$i]}%'";
             }
             $constraints[] = $string;
         }
         // TERMS TO EXCLUDE
         if ($excludeArray != array()) {
             $string = "(lyrics NOT {$INSOP}";
             $string .= " '%{$excludeArray['0']}%'";
             for ($i = 1; $i < sizeof($excludeArray); $i++) {
                 $string .= " AND lyrics NOT {$INSOP} '%{$excludeArray[$i]}%'";
             }
             $string .= ")";
             $constraints[] = $string;
         }
         if ($constraints == array()) {
             die("Error: no constraints in search.");
         }
         $sql = "SELECT path FROM jz_tracks WHERE";
         $sql .= " ({$constraints['0']})";
         for ($i = 1; $i < sizeof($constraints); $i++) {
             $sql .= " AND ({$constraints[$i]})";
         }
         if ($limit > 0) {
             $sql .= " LIMIT {$limit}";
         }
         if (!($link = jz_db_connect())) {
             die("could not connect to database.");
         }
         $results = jz_db_query($link, $sql);
         jz_db_close($link);
         $return = array();
         if ($results === false) {
             return $return;
         }
         foreach ($results->data as $row) {
             $return[] =& new jzMediaTrack(jz_db_unescape($row['path']));
         }
         return $return;
     }
     // MEDIA SEARCH (not lyrics)
     if ($this->getLevel() > 0) {
         $constraints[] = "path LIKE '" . jz_db_escape($this->getPath("String")) . "/%'";
     }
     // Type
     if ($type == "leaves") {
         $constraints[] = "leaf = 'true'";
     } else {
         if ($type == "nodes") {
             $constraints[] = "leaf = 'false'";
         }
     }
     // Level
     if ($depth < 0) {
         $lvl = $this->getLevel();
         $constraints[] = "level > {$lvl}";
     } else {
         $lvl = $this->getLevel() + $depth;
         $constraints[] = "level = {$lvl}";
     }
     // ID search:
     if ($type == "id") {
         if (sizeof($searchArray) > 1) {
             // for now. Maybe search on all terms?
             return array();
         }
         $mid = jz_db_escape($searchArray[0]);
         $string = "my_id = '{$mid}'";
         $constraints[] = $string;
     } else {
         // String search:
         if ($op == "exact") {
             $searchArray2 = str_replace("\"", "", $searchArray2);
             $constraints[] = "name {$INSOP} '{$searchArray2}'";
         } else {
             if ($op == "or") {
                 // "or"
                 if (sizeof($searchArray) > 0) {
                     $string = "name {$INSOP}";
                     $string .= " '%{$searchArray['0']}%'";
                     for ($i = 1; $i < sizeof($searchArray); $i++) {
                         $string .= " OR name {$INSOP} '%{$searchArray[$i]}%'";
                     }
                 }
                 $constraints[] = $string;
             } else {
                 // "and"
                 // first match at least part in our name:
                 if (sizeof($searchArray) > 0) {
                     $string = "((name {$INSOP}";
                     // if at a specific level, don't worry about full path:
                     if ($lvl > 0) {
                         $string .= " '%{$searchArray['0']}%')";
                         // Otherwise, let's try to avoid repeat results:
                     } else {
                         $string .= " '%{$searchArray['0']}%' AND path NOT {$INSOP} '%{$searchArray['0']}%/%')";
                     }
                     for ($i = 1; $i < sizeof($searchArray); $i++) {
                         $string .= " OR (name {$INSOP} '%{$searchArray[$i]}%' AND path NOT {$INSOP} '%{$searchArray[$i]}%/%')";
                     }
                     $string .= ")";
                     // Now require the rest to be in the path.
                     $string .= " AND (path {$INSOP}";
                     $string .= " '%{$searchArray['0']}%'";
                     for ($i = 1; $i < sizeof($searchArray); $i++) {
                         $string .= " AND path {$INSOP} '%{$searchArray[$i]}%'";
                     }
                     $string .= ")";
                     $constraints[] = $string;
                 }
             }
         }
         // Stuff to exclude:
         if ($excludeArray != array()) {
             $string = "(path NOT {$INSOP}";
             $string .= " '%{$excludeArray['0']}%'";
             for ($i = 1; $i < sizeof($excludeArray); $i++) {
                 $string .= " AND path NOT {$INSOP} '%{$excludeArray[$i]}%'";
             }
             $string .= ")";
             $constraints[] = $string;
         }
     }
     // Put it all together.
     if ($constraints == array()) {
         die("Error: no constraints in search.");
     }
     $sql = "SELECT path,leaf FROM jz_nodes WHERE";
     $sql .= " ({$constraints['0']})";
     for ($i = 1; $i < sizeof($constraints); $i++) {
         $sql .= " AND ({$constraints[$i]})";
     }
     if ($limit > 0) {
         $sql .= " LIMIT {$limit}";
     }
     if (!($link = jz_db_connect())) {
         die("could not connect to database.");
     }
     $results = jz_db_query($link, $sql);
     jz_db_close($link);
     $return = array();
     $hash = array();
     if ($results === false) {
         return $return;
     }
     for ($i = 0; $i < $results->rows; $i++) {
         if ($results->data[$i]['leaf'] == "true") {
             $me =& new jzMediaTrack(jz_db_unescape($results->data[$i]['path']));
         } else {
             $me =& new jzMediaNode(jz_db_unescape($results->data[$i]['path']));
         }
         if ($default_importer == "id3tags") {
             if (!isset($hash[pathize(strtolower($me->getName()))])) {
                 $return[] = $me;
                 $hash[pathize(strtolower($me->getName()))] = true;
             }
         } else {
             $return[] = $me;
         }
     }
     if ($type == "leaves" && $metasearch != array()) {
         $return = filterSearchResults($return, $metasearch);
     }
     return $return;
 }