function getUsername($user_id) { global $userdb; static $userNameCache; $storage =& sotf_User::getStorageObject(); if (is_numeric($user_id)) { if ($userNameCache[$user_id]) { return $userNameCache[$user_id]; } $data = $storage->userDbSelect(array('userid' => sotf_Utils::magicQuotes($user_id))); if (!$data) { return false; } $name = $data['username']; $userNameCache[$user_id] = $name; return $name; } return false; }
/** Search for users. */ function findUsers($pattern, $prefix = false) { global $userdb; $storage =& sotf_User::getStorageObject(); $fields['pattern'] = sotf_Utils::magicQuotes($pattern); if ($prefix) { $fields['prefix'] = 1; } $res = $storage->userDbFind($fields); if (DB::isError($res)) { raiseError($res); } return $res; }
} // define search box $properties = array(); // The name of the text input form field $properties["name"] = "pattern"; $properties["link"] = $config['rootUrl'] . "/search.php?language=any_language&station={$stationName}"; $properties["title"] = "Search for:"; $properties["description"] = $page->getlocalizedWithParams('search_in_station', $stationName); $rss_writer_object->addtextinput($properties); } elseif ($userName) { // user's saved query $userid = sotf_User::getUserid($userName); if (!$userid) { raiseError("no such user: {$userName}"); } $user2 = new sotf_User($userid); $prefs2 = $user2->getPreferences(); debug('saved queries', $prefs2->savedQueries); $query = $prefs2->getQuery($queryName); if (!$query) { raiseError("no such user query: {$userName}/{$queryName}"); } // Define the properties of the channel. $properties = array(); $properties["description"] = "Results of the StreamOnTheFly query {$userName}/{$queryName}"; $properties["link"] = $config['rootUrl'] . ""; $properties["title"] = "StreamOnTheFly query results"; //$properties["language"]="en"; $properties["dc:date"] = getW3CDate(); $rss_writer_object->addchannel($properties); // If your channel has a logo, before adding any channel items, specify the logo details this way.
<?php // -*- tab-width: 3; indent-tabs-mode: 1; -*- /* * $Id: login.php,v 1.4 2003/09/25 07:46:12 andras Exp $ * Created for the StreamOnTheFly project (IST-2001-32226) * Author: Martin Schmidt, ptmschmidt@fh-stpoelten.ac.at */ require "init.inc.php"; $username = sotf_Utils::getParameter('userid'); $email = sotf_Utils::getParameter('email'); $okURL = sotf_Utils::getParameter('okURL'); if ($username && $email) { $temp_user = new sotf_User(); $storage = $temp_user->getStorageObject(); $fields['userid'] = $temp_user->getUserid($username); if ($fields['userid'] != NULL) { $data = $storage->userDbSelect($fields); } if ($email == $data['email'] && $username == $data['username']) { $new_password = sotf_Utils::randString(6); global $page; $login_href = "http://" . $_SERVER['HTTP_HOST'] . $config['localPrefix'] . "/login.php"; $subject = $page->getlocalized("pass_mail_subject"); $message = $page->getlocalizedWithParams("pass_mail_message", $username, $new_password, $login_href); mail($email, $subject, $message, "From: no-reply@streamonthefly.org\r\nX-Mailer: PHP/" . phpversion() . "\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: 8bit\r\n\r\n"); $fields['password'] = $new_password; $fields['email'] = $email; $storage->userDbUpdate($fields); } else { $errorMsg = $page->getlocalized("new_pass_error");
} } // ------------------ if (!$error) { $page->setUILanguage($language); if ($change) { // existing user $user->realname = $realname; $user->language = $language; $user->email = $email; $user->save($password); } else { // new user $error = sotf_User::register($password, $username, $realname, $language, $email); if (!$error) { $error = sotf_User::login($username, $password); } if ($error) { $smarty->assign('ERRORMSG', $error); } } if (!$error) { if ($okURL) { $page->redirect($okURL); } else { $page->redirect('index.php'); } exit; } } } elseif (isset($user)) {
$db->begin(); $data['numNodes'] = sotf_Node::countAll(); if ($data['numNodes'] == 0) { $data['numNodes'] = 1; } $data['numStations'] = sotf_Station::countAll(); $data['numProgs'] = sotf_Programme::countAll(); $data['numProgs'] = sotf_Programme::countAll(); $allStats = sotf_Statistics::networkStats(); $allStats['l_and_d'] = $allStats['listens'] + $allStats['downloads']; $data['access'] = $allStats; $fileStats = sotf_Programme::getFileStats(); $fileStats['size_mb'] = sprintf('%d', $fileStats['filesize'] / 1024 / 1024); $fileStats['length_hour'] = sprintf('%d', $fileStats['play_length'] / 60 / 60); $data['files'] = $fileStats; $data['numUsers'] = sotf_User::countUsers(); $smarty->assign($data); $smarty->assign('STATIONS', sotf_Station::listStationNames()); $searchLangs = $config['languages']; array_unshift($searchLangs, "any_language"); for ($i = 0; $i < count($searchLangs); $i++) { $langNames[$i] = $page->getlocalized($searchLangs[$i]); } $smarty->assign('searchLangs', $searchLangs); $smarty->assign('langNames', $langNames); $now = getDate(); //$dayInThePast = mktime(0,0,0, $now['mon'], $now['mday']-10, $now['year']); $dayInThePast = time() - 60 * 60 * 24 * 30; // 30 days back $fromDay = date('Y-m-d', $dayInThePast); if ($page->loggedIn()) {
function listUsersAndPermissionsLocalized($objectId) { global $db, $page; $plist = $db->getAll("SELECT u.user_id AS id, p.permission AS perm FROM sotf_user_permissions u, sotf_permissions p WHERE p.id = u.permission_id AND u.object_id = '{$objectId}'"); if (DB::isError($plist)) { raiseError($plist); } $retval = array(); while (list(, $perm) = each($plist)) { $id = $perm['id']; if (!$retval[$id]['name']) { $retval[$id]['name'] = sotf_User::getUserName($id); } $retval[$id]['permissions'][] = $page->getlocalized('perm_' . $perm['perm']); } uasort($retval, array('sotf_Permission', 'sortUsersByName')); return $retval; }
if ($new) { // restart user search } elseif ($userid) { if ($userid[0] == 'g') { $gid = substr($userid, 1); $group = sotf_Group::getById($gid); $users[$userid] = $group->get('name'); $smarty->assign("USERS", $users); } else { $username = sotf_User::getUsername($userid); $users[$userid] = $username; $smarty->assign("USERS", $users); } } elseif ($pattern) { $smarty->assign("PATTERN", $pattern); $users = sotf_User::findUsers($pattern, $prefix); debug("USERS", $users); $groups = sotf_Group::findGroups($pattern, $prefix); debug("GROUPS", $groups); if (count($users) + count($groups) > 50) { $smarty->assign("TOO_MANY_MATCHES", count($users) + count($groups)); } elseif (empty($users) and empty($groups)) { $smarty->assign("NO_MATCHES", 1); } else { $smarty->assign("USERS", $users); $smarty->assign("GROUPS", $groups); } } checkPerm($objectid, "authorize"); if ($save) { if ($userid == $user->id) {
/** static: import a programme from the given XBMF archive */ function importXBMF($fileName, $publish = false, $console = false) { global $db, $config, $permissions, $repository, $vocabularies; $pathToFile = $config['xbmfInDir'] . '/'; // create temp folder with unique name $folderName = uniqid("xbmf"); if (!mkdir($pathToFile . $folderName)) { logError("Could not create dir for XBMF", $pathToFile . $folderName); return false; } // untar contents of file to folder $tar = new Archive_Tar($fileName, true); // create archive handler $tar->setErrorHandling(PEAR_ERROR_PRINT); // enable error reporting $result = $tar->extract($pathToFile . $folderName); // untar contents debug("untar result", $result); //parse the xml file $metaFile = $pathToFile . $folderName . "/XBMF/Metadata.xml"; if (!is_file($metaFile)) { $metaFile = $pathToFile . $folderName . "/XBMF/metadata.xml"; if (!is_file($metaFile)) { logError("no metadata file found in XBMF!", $folderName); return false; } } $myPack = new unpackXML($metaFile); if (!$myPack->error) { //if the file has been found $metadata = $myPack->process(); } if (!$metadata or $myPack->error) { //errors during import - stop execution sotf_Utils::delete($pathToFile . $folderName); echo "<font color=#FF0000><b>The import of {$fileName} did not succeed!</b></font>"; logError("XML processing failed within this XBMF", $folderName); return false; //did not succeed } else { /* echo "Came In: " . $myPack->encoding . "<br>"; echo "Went Out: " . $myPack->outencoding . "<br>"; echo "<pre>"; print_r($metadata); echo "</pre>"; */ dump($metadata, "METADATA"); debug("METADATA", $metadata); } $db->begin(); // Select station $stId = trim($metadata['stationid']); if (is_numeric($stId)) { $stId = $newPrg->makeId($config['nodeId'], 'sotf_stations', (int) $stId); } $station =& $repository->getObject($stId); if (!$station) { logError("invalid stationid: " . $metadata['stationid']); return false; // by default I put the programme into the first station //$stId = $db->getOne("SELECT id FROM sotf_stations ORDER BY id"); //$station = &$repository->getObject($stId); } // select/create programme entry if ($metadata['identifier']) { $prgId = sotf_Programme::getMapping($station->id, $metadata['identifier'], 'prg'); } if ($prgId) { // updating an exisiting programme debug("updating existing programme", $prgId); $newPrg = new sotf_Programme($prgId); if ($station->id != $newPrg->get('station_id')) { logError("station provided in metadata is different from the station saved previously!"); return false; } //$station = &$repository->getObject($newPrg->get('station_id')); $updatingPrg = 1; } else { // a new programme $newPrg = new sotf_Programme(); $track = $metadata['title']; debug("create new programme with track", $track); $newPrg->create($station->id, $track); sotf_Programme::addMapping($station->id, $metadata['identifier'], 'prg', $newPrg->id); } $newPrg->set('foreign_id', $metadata['identifier']); // select/create series if ($metadata['series'] && $metadata['series']['id']) { $seriesId = sotf_Programme::getMapping($station->id, $metadata['series']['id'], 'series'); if (!$seriesId) { $series1 = new sotf_Series(); $series1->set('name', $metadata['series']['title']); $series1->set('station_id', $station->id); $series1->find(); if ($series1->exists()) { $seriesId = $series1->id; } } if ($seriesId) { $newPrg->set('series_id', $seriesId); $series =& $repository->getObject($seriesId); } else { $newSeries = 1; $series = new sotf_Series(); $series->set('station_id', $station->id); } $series->set('name', $metadata['series']['title']); $series->set('description', $metadata['series']['description']); if ($series->exists()) { $series->update(); } else { $series->create(); sotf_Programme::addMapping($station->id, $metadata['series']['id'], 'series', $series->id); } } // permissions foreach (array($metadata['owner'], $metadata['publishedby']) as $foreignUser) { if (is_array($foreignUser)) { $userId = sotf_User::getUserid($foreignUser['login']); debug("owner/publisher", $foreignUser); if ($userId) { if ($permissions->hasPermission($station->id, 'admin', $userId) || $series && $permissions->hasPermission($series->id, 'create', $userId)) { // add permission for user $permissions->addPermission($newPrg->id, $userId, 'admin'); $admins[] = $userId; } } } } // if we did not get permission info, add permissions for all station/series admins debug("admins2", $admins); if (empty($admins)) { if ($series) { $admins1 = $permissions->listUsersWithPermission($series->id, 'admin'); } if (!$admins1) { $admins1 = $permissions->listUsersWithPermission($station->id, 'admin'); } while (list(, $admin) = each($admins1)) { $admins[] = $admin['id']; $permissions->addPermission($newPrg->id, $admin['id'], 'admin'); } } debug("admins3", $admins); // now create permissions while (list(, $adminId) = each($admins)) { $permissions->addPermission($newPrg->id, $adminId, 'admin'); if ($newSeries) { $permissions->addPermission($series->id, $adminId, 'admin'); } } /* * PART 2.2 - Insert all the relevant data from the xml file into the database */ // basic metadata $newPrg->set('title', sotf_Programme::normalizeText($metadata['title'], 255)); $newPrg->set('alternative_title', sotf_Programme::normalizeText($metadata['alternative'], 255)); $newPrg->set('episode_sequence', 0); if (!empty($metadata['episodesequence'])) { $epiSeq = sotf_Programme::normalizeText($metadata['episodesequence']); if (is_numeric($epiSeq)) { $newPrg->set('episode_sequence', (int) $epiSeq); } else { logError("Bad episode sequence: " . $metadata['episodesequence']); } } $newPrg->set('abstract', sotf_Programme::normalizeText($metadata['description'])); $newPrg->set('keywords', sotf_Programme::normalizeText($metadata['keywords'])); $newPrg->set("production_date", date('Y-m-d', strtotime($metadata['created']))); $newPrg->set("broadcast_date", date('Y-m-d', strtotime($metadata['issued']))); $newPrg->set("modify_date", date('Y-m-d', strtotime($metadata['modified']))); $newPrg->set('language', $metadata['language']); if ($metadata['language'] == 'ger') { $newPrg->set('language', 'deu'); } if ($metadata['language'] == 'English') { $newPrg->set('language', 'eng'); } $newPrg->update(); // topic if ($metadata['topic']) { $vocabularies->addToTopic($newPrg->id, $metadata['topic']); } // genre $genre = trim($metadata['genre']); if (is_numeric($genre)) { $newPrg->set('genre_id', $genre); } else { logError("invalid genre id: " . $genre); } // rights $rights = new sotf_NodeObject("sotf_rights"); $rights->set('prog_id', $newPrg->id); $rights->set('rights_text', $metadata['rights']); $rights->find(); $rights->save(); $db->commit(); // contacts //$role = 21; // Other foreach ($metadata['publisher'] as $contact) { $role = 23; // Publisher $id = sotf_Programme::importContact($contact, $role, $newPrg->id, $station->id, $admins); } foreach ($metadata['creator'] as $contact) { $role = 22; // Creator $id = sotf_Programme::importContact($contact, $role, $newPrg->id, $station->id, $admins); } if (is_array($metadata['contributor'])) { foreach ($metadata['contributor'] as $contact) { $role = 24; // Contributor $id = sotf_Programme::importContact($contact, $role, $newPrg->id, $station->id, $admins); } } /* * PART 2.1 - Move the audio data to the specified station folder */ // insert audio $dirPath = $pathToFile . $folderName . "/XBMF/audio"; $dir = dir($dirPath); while ($entry = $dir->read()) { if ($entry != "." && $entry != "..") { $currentFile = $dirPath . "/" . $entry; if (!is_dir($currentFile)) { if (is_file($currentFile)) { debug("insert audio", $currentFile); $newPrg->setAudio($currentFile, true); } } } } $dir->close(); // insert other files $dirPath = $pathToFile . $folderName . "/XBMF/files"; $dir = dir($dirPath); while ($entry = $dir->read()) { if ($entry != "." && $entry != "..") { $currentFile = $dirPath . "/" . $entry; if (!is_dir($currentFile)) { $id = $newPrg->setOtherFile($currentFile, true); debug("insert other", $currentFile); /* by default, no need for this if($id) { $fileInfo = &$repository->getObject($id); $fileInfo->set('public_access', 't'); $fileInfo->update(); } */ } } } $dir->close(); // insert metadata if (is_readable($metaFile)) { debug("insert meta", $metaFile); $target1 = $newPrg->getMetaDir() . '/metadata.xml'; $target2 = $newPrg->getMetaDir() . '/metadata-in.xml'; if (!copy($metaFile, $target1)) { logError("Could not copy metadata into {$target1}"); } if (!copy($metaFile, $target2)) { logError("Could not copy metadata into {$target2}"); } } // insert icon $logoFile = $pathToFile . $folderName . "/icon.png"; if (is_readable($logoFile)) { debug("insert icon", $logoFile); $newPrg->setIcon($logoFile); } // convert missing formats! $audioFiles =& new sotf_FileList(); $audioFiles->getAudioFromDir($newPrg->getAudioDir()); $checker =& new sotf_AudioCheck($audioFiles); $checker->console = $console; // if we don't want progress bars $targets = $checker->convertAll($newPrg->id); if (is_array($targets)) { foreach ($targets as $target) { $newPrg->setAudio($target); } } /* * PART 2.3 - Remove (unlink) the xbmf file and the temp dir */ //publish if needed if ($publish) { $newPrg->publish(); } sotf_Utils::delete($pathToFile . $folderName); //unlink($fileName); return $newPrg->id; }
<?php // -*- tab-width: 3; indent-tabs-mode: 1; -*- /* * $Id: admin.php 554 2006-04-12 10:37:20Z buddhafly $ * Authors: András Micsik */ require "init.inc.php"; $smarty->assign('PAGETITLE', $page->getlocalized('AdminPage')); $page->forceLogin(); //$page->errorURL = "admin.php"; checkPerm('node', 'change'); if (sotf_Utils::getParameter('del')) { $uid = sotf_Utils::getParameter('uid'); $user = new sotf_User($uid); debug("Deleting user {$uid}", $user->username); $user->delete(); $page->redirect('adminUsers.php'); $page->logRequest(); exit; } $pattern = sotf_Utils::getParameter('pattern'); $count = sotf_User::countUsers($pattern); $limit = $page->splitList($count, $scriptUrl . "?pattern=" . urlencode($pattern)); $users = sotf_User::listUsers($limit["from"], $limit["maxresults"], $pattern); foreach ($users as $user) { $user['groups'] = join(', ', sotf_Group::getGroupNames($user['id'])); $ulist[] = $user; } $smarty->assign('USERS', $ulist); $smarty->assign('PATTERN', $pattern);
<?php // -*- tab-width: 3; indent-tabs-mode: 1; -*- /* * $Id: logout.php,v 1.3 2003/05/14 15:30:39 andras Exp $ * Created for the StreamOnTheFly project (IST-2001-32226) * Authors: András Micsik, Máté Pataki, Tamás Déri * at MTA SZTAKI DSD, http://dsd.sztaki.hu */ require "init.inc.php"; $okURL = sotf_Utils::getParameter('okURL'); if (!$okURL) { $okURL = $config['localPrefix'] . '/'; } sotf_User::logout(); $page->redirect("login.php?okURL=" . urlencode($okURL));
<?php // -*- tab-width: 3; indent-tabs-mode: 1; -*- /* * $Id$ * Created for the StreamOnTheFly project (IST-2001-32226) * Authors: András Micsik, Máté Pataki, Tamás Déri * at MTA SZTAKI DSD, http://dsd.sztaki.hu */ require "init.inc.php"; $users = sotf_User::listUsers(); $smarty->assign('USERS', $users); $smarty->display("listUsers.htm");
} else { $aid = $user->id; $count = $db->getOne("SELECT count(*) FROM sotf_user_permissions WHERE user_id='{$aid}' AND object_id='node' AND permission_id='1'"); if ($count == 0) { $db->query("INSERT INTO sotf_user_permissions (object_id, user_id, permission_id) VALUES('node',{$aid},1)"); } $count = $db->getOne("SELECT count(*) FROM sotf_user_prefs WHERE id='{$aid}' OR username='******'"); if ($count == 0) { $db->query("INSERT INTO sotf_user_prefs (id,username) VALUES({$aid}, '{$admin_name}')"); } } } // check for correct node admin $adminId = $db->getOne("SELECT user_id FROM sotf_user_permissions WHERE object_id='node' AND permission_id='1'"); if ($adminId) { $adminName = sotf_User::getUsername($adminId); } //$adminName = $userdb->getOne("SELECT username FROM authenticate WHERE auth_id='$adminId'"); if (!$adminName) { $install_test_result[$id] = "Please select node administrator"; $install_color[$id] = $install_red; } else { $install_test_result[$id] = "OK"; $install_color[$id] = $install_green; if (!$admin_name) { $admin_name = $adminName; } } } PrintTitle($id); print '<div align="center">Please type in the username and password for the node administrator.</div';
function listUsers($start, $hitsPerPage, $pattern) { global $userdb; $storage =& sotf_User::getStorageObject(); $pattern = sotf_Utils::magicQuotes($pattern); $list = $storage->userDbList($start, $hitsPerPage, $pattern); return $list; }
/** * Adds the user to a group in a station. * * @param string $username Userid * @param string $group ID of the group * @param string $station Station * @return boolean Returns true if succeeded * @use $db */ function addUserToGroup($username, $group, $station) { global $db; $username = sotf_Utils::clean($username); $group = sotf_Utils::clean($group); $station = sotf_Utils::clean($station); $users = sotf_User::listUsers(); if (in_array($username, $users)) { $user = $db->getOne("SELECT username FROM sotf_user_group WHERE username='******' AND station='{$station}' AND group_id='{$group}'"); if (!$user) { $db->query("INSERT INTO sotf_user_group (username, station, group_id) VALUES('{$username}', '{$station}', '{$group}')"); return true; } } return false; }