123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492 |
- <?php
- class Application_Model_StreamSetting
- {
- public static function setValue($key, $value, $type)
- {
- $con = Propel::getConnection();
- // Check if key already exists
- $sql = "SELECT COUNT(*) FROM cc_stream_setting"
- ." WHERE keyname = :key";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':key', $key);
-
- if ($stmt->execute()) {
- $result = $stmt->fetchColumn(0);
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- if ($result == 1) {
- $sql = "UPDATE cc_stream_setting"
- ." SET value = :value, type = :type"
- ." WHERE keyname = :key";
- } else {
- $sql = "INSERT INTO cc_stream_setting (keyname, value, type)"
- ." VALUES (:key, :value, :type)";
- }
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':key', $key);
- $stmt->bindParam(':value', $value);
- $stmt->bindParam(':type', $type);
-
- if ($stmt->execute()) {
- //do nothing
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- }
- public static function getValue($key)
- {
- $con = Propel::getConnection();
-
- //Check if key already exists
- $sql = "SELECT value FROM cc_stream_setting"
- ." WHERE keyname = :key";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':key', $key);
-
- if ($stmt->execute()) {
- $result = $stmt->fetchColumn(0);
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- return $result ? $result : "";
- }
- /* Returns the id's of all streams that are enabled in an array. An
- * example of the array returned in JSON notation is ["s1", "s2", "s3"] */
- public static function getEnabledStreamIds()
- {
- $con = Propel::getConnection();
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname LIKE '%_enable' "
- ."AND value='true'";
- $ids = array();
-
- $rows = Application_Common_Database::prepareAndExecute($sql, array(), 'all');
- foreach ($rows as $row) {
- $ids[] = substr($row["keyname"], 0, strpos($row["keyname"], "_"));
- }
- return $ids;
- }
- /* Returns only global data as array*/
- public static function getGlobalData()
- {
- $con = Propel::getConnection();
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname IN ('output_sound_device', 'icecast_vorbis_metadata')";
- $rows = Application_Common_Database::prepareAndExecute($sql, array(), 'all');
-
- $data = array();
- foreach ($rows as $row) {
- $data[$row["keyname"]] = $row["value"];
- }
- return $data;
- }
- /* Returns all information related to a specific stream. An example
- * of a stream id is 's1' or 's2'. */
- public static function getStreamData($p_streamId)
- {
- $con = Propel::getConnection();
- $streamId = pg_escape_string($p_streamId);
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname LIKE '{$streamId}_%'";
- $stmt = $con->prepare($sql);
-
- if ($stmt->execute()) {
- $rows = $stmt->fetchAll();
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- $data = array();
- foreach ($rows as $row) {
- $data[$row["keyname"]] = $row["value"];
- }
- return $data;
- }
- /* Similar to getStreamData, but removes all sX prefixes to
- * make data easier to iterate over */
- public static function getStreamDataNormalized($p_streamId)
- {
- $con = Propel::getConnection();
- $streamId = pg_escape_string($p_streamId);
- $sql = "SELECT * "
- ."FROM cc_stream_setting "
- ."WHERE keyname LIKE '{$streamId}_%'";
- $stmt = $con->prepare($sql);
-
- if ($stmt->execute()) {
- $rows = $stmt->fetchAll();
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- $data = array();
- foreach ($rows as $row) {
- list($id, $key) = explode("_", $row["keyname"], 2);
- $data[$key] = $row["value"];
- }
- return $data;
- }
- public static function getStreamSetting()
- {
- $con = Propel::getConnection();
- $sql = "SELECT *"
- ." FROM cc_stream_setting"
- ." WHERE keyname not like '%_error' AND keyname not like '%_admin_%'";
- $rows = Application_Common_Database::prepareAndExecute($sql, array(), 'all');
- $exists = array();
- foreach ($rows as $r) {
- if ($r['keyname'] == 'master_live_stream_port') {
- $exists['master_live_stream_port'] = true;
- } elseif ($r['keyname'] == 'master_live_stream_mp') {
- $exists['master_live_stream_mp'] = true;
- } elseif ($r['keyname'] == 'dj_live_stream_port') {
- $exists['dj_live_stream_port'] = true;
- } elseif ($r['keyname'] == 'dj_live_stream_mp') {
- $exists['dj_live_stream_mp'] = true;
- }
- }
- if (!isset($exists["master_live_stream_port"])) {
- $rows[] = array("keyname" =>"master_live_stream_port",
- "value"=>self::getMasterLiveStreamPort(),
- "type"=>"integer");
- }
- if (!isset($exists["master_live_stream_mp"])) {
- $rows[] = array("keyname" =>"master_live_stream_mp",
- "value"=>self::getMasterLiveStreamMountPoint(),
- "type"=>"string");
- }
- if (!isset($exists["dj_live_stream_port"])) {
- $rows[] = array("keyname" =>"dj_live_stream_port",
- "value"=>self::getDjLiveStreamPort(),
- "type"=>"integer");
- }
- if (!isset($exists["dj_live_stream_mp"])) {
- $rows[] = array("keyname" =>"dj_live_stream_mp",
- "value"=>self::getDjLiveStreamMountPoint(),
- "type"=>"string");
- }
- return $rows;
- }
- private static function saveStreamSetting($key, $value)
- {
- $stream_setting = CcStreamSettingQuery::create()->filterByDbKeyName($key)->findOne();
- if (is_null($stream_setting)) {
- throw new Exception("Keyname $key does not exist!");
- }
- $stream_setting->setDbValue($value);
- $stream_setting->save();
- }
- /*
- * function that take all the information of stream and sets them.
- * This is used by stream setting via UI.
- *
- * @param $data - array that contains all the data. $data is [][] which
- * contains multiple stream information
- */
- public static function setStreamSetting($data)
- {
- foreach ($data as $key => $d) {
- if ($key == "output_sound_device" || $key == "icecast_vorbis_metadata") {
- $v = ($d == 1) ? "true" : "false";
- self::saveStreamSetting($key, $v);
- } elseif ($key == "output_sound_device_type") {
- self::saveStreamSetting($key, $d);
- } elseif (is_array($d)) {
- $temp = explode('_', $key);
- $prefix = $temp[0];
- foreach ($d as $k => $v) {
- $keyname = $prefix . "_" . $k;
- if ($k == 'enable') {
- $v = $d['enable'] == 1 ? 'true' : 'false';
- }
- $v = trim($v);
- if ($k != 'admin_pass') {
- self::saveStreamSetting($keyname, $v);
- /* We use 'xxxxxx' as the admin password placeholder so we
- * only want to save it when it is a different string
- */
- } elseif ($v != 'xxxxxx') {
- self::saveStreamSetting($keyname, $v);
- }
- }
- }
- }
- }
- /*
- * Sets indivisual stream setting.
- *
- * $data - data array. $data is [].
- * TODO: Make this SQL a prepared statement!
- *
- * Do not remove this function. It is called by airtime-system.php
- */
- public static function setIndividualStreamSetting($data)
- {
- foreach ($data as $keyname => $v) {
- $sql = "UPDATE cc_stream_setting SET value=:v WHERE keyname=:keyname";
- $map = array(":v" => $v, ":keyname"=>$keyname);
- $res = Application_Common_Database::prepareAndExecute($sql, $map,
- Application_Common_Database::EXECUTE);
- }
- }
- /*
- * Stores liquidsoap status if $boot_time > save time.
- * save time is the time that user clicked save on stream setting page
- */
- public static function setLiquidsoapError($stream_id, $msg, $boot_time=null)
- {
- $con = Propel::getConnection();
- $update_time = Application_Model_Preference::GetStreamUpdateTimestemp();
-
- if ($boot_time == null || $boot_time > $update_time) {
- $keyname = "s".$stream_id."_liquidsoap_error";
- $sql = "SELECT COUNT(*) FROM cc_stream_setting"
- ." WHERE keyname = :keyname";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':keyname', $keyname);
- if ($stmt->execute()) {
- $result= $stmt->fetchColumn(0);
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- if ($result == 1) {
- $sql = "UPDATE cc_stream_setting"
- ." SET value = :msg"
- ." WHERE keyname = :keyname";
- } else {
- $sql = "INSERT INTO cc_stream_setting (keyname, value, type)"
- ." VALUES (:keyname, :msg, 'string')";
- }
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':keyname', $keyname);
- $stmt->bindParam(':msg', $msg);
-
- if ($stmt->execute()) {
- //do nothing
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- }
- }
- public static function getLiquidsoapError($stream_id)
- {
- $con = Propel::getConnection();
- $keyname = "s".$stream_id."_liquidsoap_error";
- $sql = "SELECT value FROM cc_stream_setting"
- ." WHERE keyname = :keyname";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':keyname', $keyname);
- if ($stmt->execute()) {
- $result= $stmt->fetchColumn(0);
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- return ($result !== false) ? $result : null;
- }
- public static function getStreamEnabled($stream_id)
- {
- $con = Propel::getConnection();
- $keyname = "s" . $stream_id . "_enable";
- $sql = "SELECT value FROM cc_stream_setting"
- ." WHERE keyname = :keyname";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':keyname', $keyname);
- if ($stmt->execute()) {
- $result= $stmt->fetchColumn(0);
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- return ($result != 'false');
- }
- /*
- * Only returns info that is needed for data collection
- * returns array('s1'=>array(keyname=>value))
- */
- public static function getStreamInfoForDataCollection()
- {
- $con = Propel::getConnection();
- $out = array();
- $enabled_stream = self::getEnabledStreamIds();
- foreach ($enabled_stream as $stream) {
- $keys = array("{$stream}_output", "{$stream}_type", "{$stream}_bitrate", "{$stream}_host");
- $key_csv = implode(',', $keys);
- $sql = "SELECT keyname, value FROM cc_stream_setting"
- ." WHERE keyname IN (:key_csv)";
- $stmt = $con->prepare($sql);
- $stmt->bindParam(':key_csv', $key_csv);
- if ($stmt->execute()) {
- $rows = $stmt->fetchAll();
- } else {
- $msg = implode(',', $stmt->errorInfo());
- throw new Exception("Error: $msg");
- }
- $info = array();
- foreach ($rows as $r) {
- $temp = explode("_", $r['keyname']);
- $info[$temp[1]] = $r['value'];
- $out[$stream] = $info;
- }
- }
- return $out;
- }
- public static function setMasterLiveStreamPort($value)
- {
- self::setValue("master_live_stream_port", $value, "integer");
- }
- public static function getMasterLiveStreamPort()
- {
- return self::getValue("master_live_stream_port");
- }
- public static function setMasterLiveStreamMountPoint($value)
- {
- self::setValue("master_live_stream_mp", $value, "string");
- }
- public static function getMasterLiveStreamMountPoint()
- {
- return self::getValue("master_live_stream_mp");
- }
- public static function setDjLiveStreamPort($value)
- {
- self::setValue("dj_live_stream_port", $value, "integer");
- }
- public static function getDjLiveStreamPort()
- {
- return self::getValue("dj_live_stream_port");
- }
- public static function setDjLiveStreamMountPoint($value)
- {
- self::setValue("dj_live_stream_mp", $value, "string");
- }
- public static function getDjLiveStreamMountPoint()
- {
- return self::getValue("dj_live_stream_mp");
- }
-
- public static function getAdminUser($stream){
- return self::getValue($stream."_admin_user");
- }
-
- public static function setAdminUser($stream, $v){
- self::setValue($stream."_admin_user", $v, "string");
- }
-
- public static function getAdminPass($stream){
- return self::getValue($stream."_admin_pass");
- }
-
- public static function setAdminPass($stream, $v){
- self::setValue($stream."_admin_pass", $v, "string");
- }
-
- public static function getOffAirMeta(){
- return self::getValue("off_air_meta");
- }
-
- public static function setOffAirMeta($offAirMeta){
- self::setValue("off_air_meta", $offAirMeta, "string");
- }
-
- public static function GetAllListenerStatErrors(){
- $sql = "SELECT * FROM cc_stream_setting WHERE keyname like :p1";
- $mounts = Application_Common_Database::prepareAndExecute($sql, array(':p1'=>'%_mount'));
-
- $mps = array();
-
- foreach($mounts as $mount) {
- $mps[] = "'" .$mount["value"] . "_listener_stat_error'";
- }
-
- $in = implode(",", $mps);
-
- $sql = "SELECT * FROM cc_stream_setting WHERE keyname IN ( $in )";
- return Application_Common_Database::prepareAndExecute($sql, array());
- }
-
- public static function SetListenerStatError($key, $v) {
- self::setValue($key, $v, 'string');
- }
- }
|