"; $count = 0; foreach($data as $value) { $count++; $value = trim($value); if (preg_match("/^\[([A-Za-z]+)\]$/",$value,$matches)) { // If we have previous data put it into $results... if (isset($config_name) && isset(${$config_name}) && count(${$config_name})) { $results[$config_name] = ${$config_name}; } $config_name = $matches[1]; } // if it is a [section] name elseif (isset($config_name)) { // if it's not a comment if (preg_match("/^([\w\d]+)\s+=\s+[\"]{1}(.*?)[\"]{1}$/",$value,$matches) || preg_match("/^([\w\d]+)\s+=\s+[\']{1}(.*?)[\']{1}$/", $value, $matches) || preg_match("/^([\w\d]+)\s+=\s+[\'\"]{0}(.*)[\'\"]{0}$/",$value,$matches)) { if (isset(${$config_name}[$matches[1]]) && is_array(${$config_name}[$matches[1]]) && isset($matches[2]) ) { if($debug) echo "Adding value $matches[2] to existing key $matches[1]\n"; array_push(${$config_name}[$matches[1]], $matches[2]); } elseif (isset(${$config_name}[$matches[1]]) && isset($matches[2]) ) { if($debug) echo "Adding value $matches[2] to existing key $matches[1]\n"; ${$config_name}[$matches[1]] = array(${$config_name}[$matches[1]],$matches[2]); } elseif ($matches[2] !== "") { if($debug) echo "Adding value $matches[2] for key $matches[1]\n"; ${$config_name}[$matches[1]] = $matches[2]; } // if there is something there and it's not a comment elseif ($value{0} !== "#" AND strlen(trim($value)) > 0 AND !$test AND strlen($matches[2]) > 0) { echo "Error Invalid Config Entry --> Line:$count"; return false; } // elseif it's not a comment and there is something there else { if($debug) echo "Key $matches[1] defined, but no value set\n"; } } // end if it's not a comment } // elseif no config_name elseif (preg_match("/^([\w\d]+)\s+=\s+[\"]{1}(.*?)[\"]{1}$/",$value,$matches) || preg_match("/^([\w\d]+)\s+=\s+[\']{1}(.*?)[\']{1}$/", $value, $matches) || preg_match("/^([\w\d]+)\s+=\s+[\'\"]{0}(.*)[\'\"]{0}$/",$value,$matches)) { if (is_array($results[$matches[1]]) && isset($matches[2]) ) { if($debug) echo "Adding value $matches[2] to existing key $matches[1]\n"; array_push($results[$matches[1]], $matches[2]); } elseif (isset($results[$matches[1]]) && isset($matches[2]) ) { if($debug) echo "Adding value $matches[2] to existing key $matches[1]\n"; $results[$matches[1]] = array($results[$matches[1]],$matches[2]); } elseif ($matches[2] !== "") { if($debug) echo "Adding value $matches[2] for key $matches[1]\n"; $results[$matches[1]] = $matches[2]; } // if there is something there and it's not a comment elseif ($value{0} !== "#" AND strlen(trim($value)) > 0 AND !$test AND strlen($matches[2]) > 0) { echo "Error Invalid Config Entry --> Line:$count"; return false; } // elseif it's not a comment and there is something there else { if($debug) echo "Key $matches[1] defined, but no value set\n"; } } // end else } // foreach if (isset($config_name) && isset(${$config_name}) && count(${$config_name})) { $results[$config_name] = ${$config_name}; } if($debug) echo ""; return $results; } // read_config /* * Conf function by Robert Hopson * call it with a $parm name to retrieve * a var, pass it a array to set them * to reset a var pass the array plus * Clobber! replaces global $conf; */ function conf($param,$clobber=0) { static $params = array(); if(is_array($param)) //meaning we are setting values { foreach ($param as $key=>$val) { if(!$clobber && isset($params[$key])) { echo "Error: attempting to clobber $key = $val\n"; exit(); } $params[$key] = $val; } return true; } else //meaning we are trying to retrieve a parameter { if($params[$param]) return $params[$param]; else return; } } //conf function libglue_param($param,$clobber=0) { static $params = array(); if(is_array($param)) //meaning we are setting values { foreach ($param as $key=>$val) { if(!$clobber && isset($params[$key])) { echo "Error: attempting to clobber $key = $val\n"; exit(); } $params[$key] = $val; } return true; } else //meaning we are trying to retrieve a parameter { if(isset($params[$param])) return $params[$param]; else return false; } } function error_results($param,$clobber=0) { static $params = array(); if(is_array($param)) //meaning we are setting values { foreach ($param as $key=>$val) { if(!$clobber && isset($params[$key])) { echo "Error: attempting to clobber $key = $val\n"; exit(); } $params[$key] = $val; } return true; } else //meaning we are trying to retrieve a parameter { if($params[$param]) return $params[$param]; else return; } } //error_results /*! @function dbh @discussion retrieves the DBH */ function dbh() { return check_sess_db('local'); } /*! @function fix_preferences @discussion cleans up the preferences */ function fix_preferences($results) { foreach ($results as $key=>$data) { if (strcasecmp($data, "yes") == "0") { $data = 1; } if (strcasecmp($data,"true") == "0") { $data = 1; } if (strcasecmp($data,"enabled") == "0") { $data = 1; } if (strcasecmp($data,"disabled") == "0") { $data = 0; } if (strcasecmp($data,"false") == "0") { $data = 0; } if (strcasecmp($data,"no") == "0") { $data = 0; } $results[$key] = $data; } return $results; } // fix_preferences /*! @function session_exists @discussion checks to make sure they've specified a valid session */ function session_exists($sid) { $sql = "SELECT * FROM session WHERE id = '$sid'"; $db_results = mysql_query($sql, dbh()); if (!mysql_num_rows($db_results)) { return false; } return true; } // session_exists /*! @function extend_session @discussion just update the expire time */ function extend_session($sid) { $new_time = time() + conf('local_length'); if ($_COOKIE['amp_longsess'] == '1') { $new_time = time() + 86400*364; } $sql = "UPDATE session SET expire='$new_time' WHERE id='$sid'"; $db_results = mysql_query($sql, dbh()); } // extend_session /*! @function get_tag_type @discussion finds out what tag the audioinfo results returned */ function get_tag_type($results) { // Check and see if we are dealing with an ogg // If so order will be a little different if ($results['ogg']) { $order[0] = 'ogg'; } // end if ogg elseif ($results['rm']) { $order[0] = 'rm'; } elseif ($results['flac']) { $order[0] = 'flac'; } elseif ($results['asf']) { $order[0] = 'asf'; } elseif ($results['m4a']) { $order[0] = 'm4a'; } elseif ($results['mpc']) { $order[0] = 'mpc'; } else { $order = conf('id3tag_order'); } // end else if (!is_array($order)) { $order = array($order); } // set the $key to the first found tag style (according to their prefs) foreach($order as $key) { if ($results[$key]) { break; } } return $key; } // get_tag_type /*! @function clean_tag_info @discussion cleans up the tag information */ function clean_tag_info($results,$key,$filename) { $info = array(); $clean_array = array("\n","\t","\r","\0"); $wipe_array = array("","","",""); $info['file'] = $filename; $info['title'] = stripslashes(trim($results[$key]['title'])); $info['year'] = intval($results[$key]['year']); $info['comment'] = sql_escape(str_replace($clean_array,$wipe_array,$results[$key]['comment'])); $info['bitrate'] = intval($results['avg_bit_rate']); $info['rate'] = intval($results['sample_rate']); $info['mode'] = $results['bitrate_mode']; $info['size'] = filesize($filename); $info['time'] = intval($results['playing_time']); $info['track'] = intval($results[$key]['track']); /* These are used to generate the correct ID's later */ $info['artist'] = trim($results[$key]['artist']); $info['album'] = trim($results[$key]['album']); $info['genre'] = trim($results[$key]['genre']); return $info; } // clean_tag_info /*! @function scrub_in() @discussion Run on inputs, stuff that might get stuck in our db */ function scrub_in($str) { if (!is_array($str)) { return stripslashes( htmlspecialchars( strip_tags($str) ) ); } else { $ret = array(); foreach($str as $string) $ret[] = scrub_in($string); return $ret; } } // scrub_in /*! @function batch_ok() @discussion return boolean if user can batch download */ function batch_ok( ) { global $user; // i check this before showing any link // should make it easy to tie to a new pref if you choose to add it if (conf('allow_zip_download')) { return( $user->prefs['download'] ); } // if allowed zip downloads return false; } // batch_ok /*! @function set_memory_limit @discussion this function attempts to change the php memory limit using init_set but it will never reduce it */ function set_memory_limit($new_limit) { /* Check their PHP Vars to make sure we're cool here */ // Up the memory $current_memory = ini_get('memory_limit'); $current_memory = substr($current_memory,0,strlen($current_memory)-1); if ($current_memory < $new_limit) { $php_memory = $new_limit . "M"; ini_set (memory_limit, "$php_memory"); unset($php_memory); } } // set_memory_limit /*! @function get_random_songs @discussion Returns a random set of songs/albums or artists matchlist is an array of the WHERE mojo and options defines special unplayed,album,artist,limit info */ function get_random_songs( $options, $matchlist) { $dbh = dbh(); /* Define the options */ $limit = $options['limit']; $unplayed = $options['unplayed']; /* If they've passed -1 as limit then don't get everything */ if ($options['limit'] == "-1") { unset($options['limit']); } else { $options['limit'] = "LIMIT " . $limit; } $where = "1=1 "; if(is_array($matchlist)) foreach ($matchlist as $type => $value) { if (is_array($value)) { foreach ($value as $v) { $v = sql_escape($v); if ($v != $value[0]) { $where .= " OR $type='$v' "; } else { $where .= " AND ( $type='$v'"; } } $where .= " ) "; } else { $value = sql_escape($value); $where .= " AND $type='$value' "; } } if ($options['full_album'] == 1) { $query = "SELECT album.id FROM song,album WHERE song.album=album.id AND $where GROUP BY song.album ORDER BY RAND() " . $options['limit']; $db_results = mysql_query($query, $dbh); while ($data = mysql_fetch_row($db_results)) { $albums_where .= " OR song.album=" . $data[0]; } $albums_where = ltrim($albums_where," OR"); $query = "SELECT song.id FROM song WHERE $albums_where ORDER BY song.track ASC"; } elseif ($options['full_artist'] == 1) { $query = "SELECT artist.id FROM song,artist WHERE song.artist=artist.id AND $where GROUP BY song.artist ORDER BY RAND() " . $options['limit']; $db_results = mysql_query($query, $dbh); while ($data = mysql_fetch_row($db_results)) { $artists_where .= " OR song.artist=" . $data[0]; } $artists_where = ltrim($artists_where," OR"); $query = "SELECT song.id FROM song WHERE $artists_where ORDER BY RAND()"; } elseif ($options['unplayed'] == 1) { $uid = $_SESSION['userdata']['id']; $query = "SELECT song.id FROM song LEFT JOIN object_count ON song.id = object_count.object_id " . "WHERE ($where) AND ((object_count.object_type='song' AND userid = '$uid') OR object_count.count IS NULL ) " . "ORDER BY CASE WHEN object_count.count IS NULL THEN RAND() WHEN object_count.count > 4 THEN RAND()*RAND()*object_count.count " . "ELSE RAND()*object_count.count END " . $options['limit']; } // If unplayed else { $query = "SELECT id FROM song WHERE $where ORDER BY RAND() " . $options['limit']; } $db_result = mysql_query($query, $dbh); $songs = array(); while ( $r = mysql_fetch_array($db_result) ) { $songs[] = $r[0]; } return ($songs); } // get_random_songs /*! @function cleanup_and_exit @discussion used specificly for the play/index.php file this functions nukes now playing and then exits */ function cleanup_and_exit($playing_id) { /* Clear now playing */ // 900 = 15 min $expire = time() - 900; $sql = "DELETE FROM now_playing WHERE id='$lastid' OR start_time < $expire"; $db_results = mysql_query($sql, dbh()); exit(); } // cleanup_and_exit ?>