function addProg($prg, $fileid = '')
 {
     if (empty($fileid)) {
         // find a file to listen
         $fileid = $prg->selectFileToListen();
         if (!$fileid) {
             raiseError("no_file_to_listen");
         }
     }
     $file = new sotf_NodeObject("sotf_media_files", $fileid);
     if (!$prg->isLocal()) {
         raiseError("Currently you can listen only to programmes of local stations");
     }
     if ($prg->get('published') != 't' || $file->get('stream_access') != 't') {
         raiseError("no_listen_access");
     }
     // add jingle
     $station = $prg->getStation();
     $jfile = $station->getJingle();
     if ($jfile) {
         $this->add(array('path' => $jfile, 'jingle' => 1));
     }
     // add program file
     $filepath = $prg->getFilePath($file);
     $this->add(array('path' => $filepath));
     // temp: set title
     $this->name = urlencode($prg->get("title"));
     // save stats
     $prg->addStat($file->get('filename'), 'listens');
 }
예제 #2
0
    $series->setWithParam('description');
    $series->update();
}
if ($finish || $finish2) {
    $page->redirect("closeAndRefresh.php?anchor=series");
}
if ($save) {
    $page->redirect("editSeries.php?seriesid={$seriesid}");
}
// manage roles
$delrole = sotf_Utils::getParameter('delrole');
if ($delrole) {
    checkPerm($series->id, "change");
    $roleid = sotf_Utils::getParameter('roleid');
    $role = new sotf_NodeObject('sotf_object_roles', $roleid);
    $c = new sotf_Contact($role->get('contact_id'));
    $role->delete();
    //$msg = $page->getlocalizedWithParams("deleted_contact", $c->get('name'));
    //$page->addStatusMsg($msg, false);
    $page->redirect("editSeries.php?seriesid={$seriesid}#roles");
    exit;
}
// manage permissions
$delperm = sotf_Utils::getParameter('delperm');
if ($delperm) {
    checkPerm($series->id, "authorize");
    $username = sotf_Utils::getParameter('username');
    $userid = $user->getUserid($username);
    if (empty($userid) || !is_numeric($userid)) {
        raiseError("Invalid username: {$username}");
    }
예제 #3
0
 function addProg($prg, $fileid = '')
 {
     if (empty($fileid)) {
         // find a file to listen
         $fileid = $prg->selectFileToListen();
         if (!$fileid) {
             raiseError("no_file_to_listen");
         }
     }
     $file = new sotf_NodeObject("sotf_media_files", $fileid);
     if (!$prg->isLocal()) {
         $node = sotf_Node::getNodeById($file->getNodeId());
         $path = $node->get('url') . "/listen.php?id=" . $prg->id . "&fileid=" . $file->id;
         $this->add(array('path' => $path, 'url' => $path));
         return;
     }
     if ($prg->get('published') != 't' || $file->get('stream_access') != 't') {
         raiseError("no_listen_access");
     }
     $filepath = $prg->getFilePath($file);
     $index = sotf_AudioCheck::getRequestIndex(new sotf_AudioFile($filepath));
     debug("audio index", $index);
     if (!$index) {
         $index = '0';
     }
     // add jingle for station (if exists)
     $station = $prg->getStation();
     $jfile = $station->getJingle($index);
     if ($jfile) {
         $this->add(array('id' => $station->id, 'path' => $jfile, 'jingle' => 1, 'name' => 'station_jingle'));
     }
     // add jingle for series (if exists)
     $series = $prg->getSeries();
     if ($series) {
         $jfile = $series->getJingle($index);
         if ($jfile) {
             $this->add(array('id' => $series->id, 'path' => $jfile, 'jingle' => 1, 'name' => 'series_jingle'));
         }
     }
     // add program file
     $filepath = $prg->getFilePath($file);
     $this->add(array('id' => $prg->id, 'path' => $filepath, 'name' => urlencode($prg->get('title'))));
     // temp: set title
     $title = $prg->get("title");
     $title = preg_replace('/\\s+/', '_', $title);
     $this->name = urlencode($title);
     // save stats
     $prg->addStat($file->get('id'), 'listens');
 }
 function delFromTopic($id)
 {
     global $db;
     // TODO: ha mar van, akkor ne adja hozza
     $obj = new sotf_NodeObject('sotf_prog_topics', $id);
     $topicId = $obj->get('topic_id');
     $progId = $obj->get('prog_id');
     $obj->delete();
     $query = "UPDATE sotf_topics_counter SET number = number-1 WHERE topic_id = '" . $topicId . "'";
     $result = $db->query($query);
     $query = "SELECT supertopic FROM sotf_topic_tree_defs WHERE id = '" . $topicId . "'";
     $supertopic = $db->getOne($query);
     if (!$supertopic) {
         $supertopic = $topicId;
     }
     $query = "UPDATE sotf_topics_counter SET total = total-1 WHERE topic_id = '" . $supertopic . "'";
     $result = $db->query($query);
 }
 function deleteFile($fid)
 {
     global $repository;
     $table = $repository->getTable($fid);
     $file = new sotf_NodeObject($table, $fid);
     if ($table == 'sotf_media_files' && $file->get('main_content') == 't') {
         $filepath = $this->getAudioDir() . '/' . $file->get('filename');
     } else {
         $filepath = $this->getOtherFilesDir() . '/' . $file->get('filename');
     }
     $file->delete();
     if (unlink($filepath)) {
         return 0;
     } else {
         raiseError("Could not remove file {$filepath}");
     }
 }
 function processPortalEvent($event)
 {
     debug("processing event", $event);
     $progId = $event['prog_id'];
     if ($progId) {
         if ($this->looksLikeId($progId)) {
             $prg =& $this->getObject($progId);
         }
         if (!$prg) {
             debug("Invalid prog_id arrived in portal event", $progId);
             return -1;
         }
     }
     switch ($event['name']) {
         case 'programme_added':
             $obj = new sotf_NodeObject('sotf_prog_refs');
             $obj->set('prog_id', $event['value']);
             $obj->set('url', $event['url']);
             $obj->find();
             $obj->set('station_id', $prg->get('station_id'));
             $obj->set('start_date', $event['timestamp']);
             $obj->set('portal_name', $event['portal_name']);
             $obj->save();
             break;
         case 'programme_deleted':
             $obj = new sotf_NodeObject('sotf_prog_refs');
             $obj->set('prog_id', $event['value']);
             $obj->set('url', $event['url']);
             $obj->find();
             if (!$obj->exists()) {
                 debug("unknown prog ref arrives: " . $event['value'] . ' - ' . $event['url']);
                 $obj->set('portal_name', $event['portal_name']);
             }
             $obj->set('station_id', $prg->get('station_id'));
             $obj->set('end_date', $event['timestamp']);
             //$obj->set('portal_name', $event['portal_name']);
             $obj->save();
             break;
         case 'visit':
             $obj = new sotf_NodeObject('sotf_prog_refs');
             $obj->set('prog_id', $event['value']['prog_id']);
             $obj->set('url', $event['url']);
             $obj->find();
             if (!$obj->exists()) {
                 // TODO: how can this happen? It happens too many times!
                 debug("unknown prog ref arrives: " . $event['value']['prog_id'] . ' - ' . $event['url']);
                 $obj->set('start_date', $event['timestamp']);
                 $obj->set('portal_name', $event['portal_name']);
             }
             $obj->set('station_id', $prg->get('station_id'));
             $obj->set('visits', (int) $obj->get('visits') + 1);
             // TODO: count unique accesses
             $obj->save();
             break;
         case 'page_impression':
             $obj = new sotf_NodeObject('sotf_portals');
             $obj->set('url', $event['url']);
             $obj->find();
             $obj->set('name', $event['portal_name']);
             $obj->set('page_impression', $event['value']);
             $obj->set('last_access', $event['timestamp']);
             $obj->save();
             break;
         case 'portal_updated':
             $obj = new sotf_NodeObject('sotf_portals');
             $obj->set('url', $event['url']);
             $obj->find();
             $obj->set('name', $event['portal_name']);
             $obj->set('last_update', $event['timestamp']);
             $obj->save();
             break;
         case 'users':
             $obj = new sotf_NodeObject('sotf_portals');
             $obj->set('url', $event['url']);
             $obj->find();
             if (!$obj->exists()) {
                 $obj->set('name', $event['portal_name']);
             }
             $obj->set('last_update', $event['timestamp']);
             $obj->set('reg_users', $event['value']);
             if (!$obj->get('name') || !$obj->get('url')) {
                 logError("Bad portal even teceived", implode(" | ", $event));
             } else {
                 $obj->save();
             }
             break;
         case 'rating':
             // first save in prog_refs
             $obj = new sotf_NodeObject('sotf_prog_refs');
             $obj->set('prog_id', $event['value']['prog_id']);
             $obj->set('url', $event['url']);
             $obj->find();
             if (!$obj->exists()) {
                 debug("unknown prog ref arrives: " . $event['url']);
                 $obj->set('start_date', $event['timestamp']);
                 $obj->set('portal_name', $event['portal_name']);
             }
             $obj->set('station_id', $prg->get('station_id'));
             $obj->set('rating', $event['value']['RATING_VALUE']);
             $obj->set('raters', $event['value']['RATING_COUNT']);
             $obj->save();
             // TODO second, put into global rating database
             /*
             $rating = new sotf_Rating();
             $id = $event['value']['prog_id'];
             $obj = & $this->getObject($id);
             if($obj->isLocal()) {
               $data = $event['value'];
               $rating->setRemoteRating($data);
             } else {
               logError("received rating for non-local object!");
             }
             */
             break;
         case 'comment':
             // first save in prog_refs
             $obj = new sotf_NodeObject('sotf_prog_refs');
             $obj->set('prog_id', $event['value']['prog_id']);
             $obj->set('url', $event['url']);
             $obj->find();
             if (!$obj->exists()) {
                 logError("unknown prog ref arrives: " . $event['value']['prog_id'] . ' - ' . $event['url']);
                 $obj->set('start_date', $event['timestamp']);
                 $obj->set('portal_name', $event['portal_name']);
             }
             $obj->set('station_id', $prg->get('station_id'));
             $obj->set('comments', (int) $obj->get('comments') + 1);
             $obj->save();
             // save comment
             $obj = new sotf_Object('sotf_comments');
             $obj->set('prog_id', $event['value']['prog_id']);
             $obj->set('portal', $event['url']);
             $obj->set('entered', $event['timestamp']);
             $obj->set('comment_title', $event['value']['title']);
             $obj->set('comment_text', $event['value']['comment']);
             $obj->set('from_name', $event['value']['user_name']);
             $obj->set('from_email', $event['value']['email']);
             $obj->create();
             // TODO forward to authors
             break;
         case 'query_added':
             //debug("query from portal", $event);
         //debug("query from portal", $event);
         case 'query_deleted':
         case 'file_uploaded':
             // silently ignored
             break;
         default:
             logError("unknown portal event: " . $event['name']);
     }
 }
예제 #7
0
if (empty($id)) {
    raiseError("Missing parameters!");
}
$prg = new sotf_Programme($id);
if (empty($fileid)) {
    // find a file to listen
    $fileid = $prg->selectFileToListen();
    if (!$fileid) {
        raiseError("no_file_to_listen");
    }
}
$file = new sotf_NodeObject("sotf_media_files", $fileid);
if (!$prg->isLocal()) {
    raiseError("Currently you can listen only to programmes of local stations");
}
if ($prg->get('published') != 't' || $file->get('stream_access') != 't') {
    raiseError("no_listen_access");
}
$filepath = $prg->getFilePath($file);
$tmpfile = $tmpdir . "/{$id_}{$fileid}.m3u";
//$name = "$id_$fileid";
$name = "{$id_}" . time();
$url = 'http://' . $iceServer . ':' . $icePort . '/' . $name . "\n";
debug("file", $filepath);
if (!is_file($filepath)) {
    raiseError("no_such_file");
}
// prepare playlist for streaming into icecast
$fp = fopen($tmpfile, 'wb');
/* TODO: add jingle
			$jinglefile = $repo->getStationJingle($station);