diff --git a/.zfproject.xml b/.zfproject.xml index a3af0c944..5e3fee1e6 100644 --- a/.zfproject.xml +++ b/.zfproject.xml @@ -35,6 +35,7 @@ + @@ -45,6 +46,7 @@ + @@ -85,6 +87,7 @@ + @@ -229,6 +232,12 @@ + + + + + + diff --git a/CREDITS b/CREDITS index ffa2ce2b6..801f38ef4 100644 --- a/CREDITS +++ b/CREDITS @@ -6,7 +6,8 @@ Version 1.6.0 ------------- This version marks a major change to the project, completely replacing the custom audio player with liquidsoap, dropping the custom desktop GUI, and -completely rewriting the web interface. +completely rewriting the web interface. The project has also been renamed +from "Campcaster" to "Airtime" for this release. Paul Baranowski (paul.baranowski@sourcefabric.org) Role: Project Lead / Software Developer @@ -20,6 +21,12 @@ Naomi Aro (naomi.aro@sourcefabric.org) - New User Interface - Conversion to Propel DB backend +Martin Konecny (martin.konecny@sourcefabric.org) + Role:Software Developer + Highlights: + - New User Interface + - Scheduler + Daniel James Role: Documentor & QA diff --git a/INSTALL b/INSTALL index 654f8ff4e..9da745be8 100644 --- a/INSTALL +++ b/INSTALL @@ -2,22 +2,22 @@ Copyright (c) 2010 Sourcefabric O.P.S. - This file is part of the Campcaster project. + This file is part of the Airtime project. http://campcaster.sourcefabric.org/ To report bugs, send an e-mail to contact@sourcefabric.org - Campcaster is free software; you can redistribute it and/or modify + Airtime is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - Campcaster is distributed in the hope that it will be useful, + Airtime is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with Campcaster; if not, write to the Free Software + along with Airtime; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -------------------------------------------------------------------------------- diff --git a/README b/README index c1f2d1ff5..12d5f96e4 100644 --- a/README +++ b/README @@ -1,94 +1,45 @@ ========================================================================= -========================== CAMPCASTER =============================== +========================== AIRTIME ================================= ========================================================================= -Campcaster is the first free and open radio management software that -provides live studio broadcast capabilities as well as remote automation -in one integrated system. +Airtime is an open source application that provides remote automation +of a radio station. -Campcaster has three audio outputs: one for live broadcasting, one for -previewing audio, and one for automated scheduled playback. - -Major features of Campcaster: - * Live, in-studio playout. Campcaster Studio enables station personnel - to play out both individual sound files and playlists such as - advertising blocks or entire programs. +Major features: * Web-based remote station management. Authorized personnel can add program material, create playlists, and schedule programming all via - Campcaster's web interface. - * Automation. Campcaster has a scheduler function that enables users to + a web interface. + * Automation. Airtime has a scheduler function that enables users to set playlists for playback at a date and time of their choosing. Playlists can be played back multiple times. - * Playlists. Campcaster allows users to create playlists that can be + * Playlists. Airtime allows users to create playlists that can be either played on-demand in the Studio or in automated mode. Playlists can be nested inside each other, so for example, a playlist with a block of ads can be inside of a playlist with a music program. * Centralized archives of station program material. Station personnel have a searchable, browseable central archive that is accessible both in the office and via the web. - * Solid, fast playback. Campcaster uses the popular Gstreamer + * Solid, fast playback. Airtime uses the open source Liquidsoap multimedia framework for clean, reliable, fast playback. - * Program sharing. Stations can share both playlists and files with a - designated, centralized 'network hub.' This enables the creation of - 'virtual radio networks' connected via the Internet. - * Search-based backup. You can backup all station archives at the click - of a button, or only backup certain files based on search terms, so - that backup files can be made of only a certain program or of all - files created by a certain user. - * Localization. Campcaster is multilingual and supports Unicode. It - also is very easy to create language localizations. - * No restrictions. Multiple instances of the Campcaster Studio program - can access the same archive on the office network, and there are no - worries about hardware dongles or keys limiting access on multiple PCs. - * Innovative design. Campcaster's user interface – the product of - Parsons School of Design's “Design and Communication” program - - introduces a number of innovations, including the 'Scratchpad', - a list of recently-used files and playlists. * Open, extensible architecture. Stations are free to extend and alter - all parts of the Campcaster program code, which makes extensive use - of XML-RPC APIs. + all parts of the program code. INSTALLATION ------------ Please see this page for a typical user installation: -http://en.flossmanuals.net/Campcaster +http://en.flossmanuals.net/Airtime If you are a developer, please see this page: -http://wiki.sourcefabric.org/display/CC/Campcaster+Dev+Site +http://wiki.sourcefabric.org/display/CC/Airtime+Dev+Site Quick links to our resources ---------------------------- - User Manual: http://en.flossmanuals.net/Campcaster/Introduction + User Manual: http://en.flossmanuals.net/Airtime/Introduction Forums and mailing lists: http://forum.sourcefabric.org Bug Tracking: http://dev.sourcefabric.org Code view/review: http://code.sourcefabric.org Public source code hosting: http://github.com/sourcefabric - Download link: https://sourceforge.net/projects/campcaster/files/ + Download link: https://sourceforge.net/projects/airtime/files/ Developer's wiki: http://wiki.sourcefabric.org - -------------------------------------------------------------------------- - - Copyright (c) 2010 Sourcefabric O.P.S. - - This file is part of the Campcaster project. - http://campcaster.sourcefabric.org/ - To report bugs, send an e-mail to campcaster-support@lists.sourcefabric.org - - Campcaster is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - Campcaster is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Campcaster; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -------------------------------------------------------------------------- - diff --git a/application/Bootstrap.php b/application/Bootstrap.php index 43d6f69a0..a2b759a9d 100644 --- a/application/Bootstrap.php +++ b/application/Bootstrap.php @@ -53,6 +53,8 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap $view = $this->getResource('view'); $view->headScript()->appendFile('/js/libs/jquery-1.4.4.min.js','text/javascript'); $view->headScript()->appendFile('/js/libs/jquery-ui-1.8.7.custom.min.js','text/javascript'); + $view->headScript()->appendFile('/js/playlist/playlist.js','text/javascript'); + $view->headScript()->appendFile('/js/progressbar/jquery.progressbar.min.js','text/javascript'); } } diff --git a/application/configs/application.ini b/application/configs/application.ini index 88feac347..836d659da 100644 --- a/application/configs/application.ini +++ b/application/configs/application.ini @@ -12,9 +12,9 @@ resources.view[] = resources.db.adapter = "Pdo_Pgsql" resources.db.params.charset = "utf8" resources.db.params.host = "localhost" -resources.db.params.username = "campcaster" -resources.db.params.password = "campcaster" -resources.db.params.dbname = "campcaster" +resources.db.params.username = "airtime" +resources.db.params.password = "airtime" +resources.db.params.dbname = "airtime" [staging : production] diff --git a/application/configs/conf.php b/application/configs/conf.php index 7779721b5..c46d38b69 100644 --- a/application/configs/conf.php +++ b/application/configs/conf.php @@ -8,11 +8,11 @@ global $CC_CONFIG; $CC_CONFIG = array( // Database config 'dsn' => array( - 'username' => 'campcaster', - 'password' => 'campcaster', + 'username' => 'airtime', + 'password' => 'airtime', 'hostspec' => 'localhost', 'phptype' => 'pgsql', - 'database' => 'campcaster', + 'database' => 'airtime', ), // Name of the web server user @@ -173,4 +173,4 @@ set_include_path('.'.PATH_SEPARATOR.$CC_CONFIG['pearPath'] //$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC); -?> \ No newline at end of file +?> diff --git a/application/configs/propel-config.php b/application/configs/propel-config.php index 768c5b151..22571384c 100644 --- a/application/configs/propel-config.php +++ b/application/configs/propel-config.php @@ -1,6 +1,6 @@ array ( diff --git a/application/controllers/LibraryController.php b/application/controllers/LibraryController.php index 7af3b62fd..da98fae22 100644 --- a/application/controllers/LibraryController.php +++ b/application/controllers/LibraryController.php @@ -2,7 +2,9 @@ class LibraryController extends Zend_Controller_Action { + protected $pl_sess = null; + protected $search_sess = null; public function init() @@ -18,6 +20,7 @@ class LibraryController extends Zend_Controller_Action ->addActionContext('upload', 'json') ->addActionContext('delete', 'json') ->addActionContext('context-menu', 'json') + ->addActionContext('quick-search', 'json') ->initContext(); $this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME); @@ -26,16 +29,17 @@ class LibraryController extends Zend_Controller_Action public function indexAction() { - $this->view->headScript()->appendFile('/js/campcaster/onready/library.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/onready/library.js','text/javascript'); $this->view->headScript()->appendFile('/js/contextmenu/jjmenu.js','text/javascript'); $this->view->headLink()->appendStylesheet('/css/contextmenu.css'); $this->_helper->layout->setLayout('library'); + unset($this->search_sess->page); unset($this->search_sess->md); - unset($this->search_sess->order); - + $this->_helper->actionStack('contents', 'library'); + $this->_helper->actionStack('quick-search', 'library'); $this->_helper->actionStack('index', 'sideplaylist'); } @@ -59,7 +63,7 @@ class LibraryController extends Zend_Controller_Action } $menu[] = array('action' => array('type' => 'gourl', 'url' => '/Library/edit-file-md/id/#id#'), - 'title' => 'Info'); + 'title' => 'Edit Metadata'); } else if($type === "pl") { @@ -94,7 +98,7 @@ class LibraryController extends Zend_Controller_Action public function deleteAction() { $id = $this->_getParam('id'); - + if (!is_null($id)) { $file = StoredFile::Recall($id); @@ -120,17 +124,55 @@ class LibraryController extends Zend_Controller_Action public function contentsAction() { - $this->view->headScript()->appendFile('/js/campcaster/library/library.js','text/javascript'); - + $this->view->headScript()->appendFile('/js/airtime/library/library.js','text/javascript'); + $this->_helper->viewRenderer->setResponseSegment('library'); - $order["category"] = $this->_getParam('ob', "dc:creator"); - $order["order"] = $this->_getParam('order', "asc"); + $cat = $this->_getParam('ob', null); + $or = $this->_getParam('order', null); + $page = $this->_getParam('page', null); - $this->search_sess->order = $order; - $md = isset($this->search_sess->md) ? $this->search_sess->md : array(); + if(!is_null($cat) && !is_null($or)) { + $order["category"] = $cat; + $order["order"] = $or; + $this->search_sess->order = $order; + } + else if(isset($this->search_sess->order)){ + $order = $this->search_sess->order; + } + else{ + $order = null; + } - $this->view->files = StoredFile::searchFiles($md, $order); + if (isset($this->search_sess->page)) { + $last_page = $this->search_sess->page; + } + else{ + $last_page = null; + } + + if(isset($this->search_sess->md)){ + $md = $this->search_sess->md; + $quick = false; + } + else if(isset($this->search_sess->quick)) { + $md = $this->search_sess->quick; + $quick = true; + } + else { + $md = array(); + $quick = false; + } + + $currpage = isset($page) ? $page : $last_page; + $this->search_sess->page = $currpage; + + $count = StoredFile::searchFiles($md, $order, true, null, null, $quick); + + $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)); + $paginator->setCurrentPageNumber($currpage); + $this->view->paginator = $paginator; + $this->view->files = StoredFile::searchFiles($md, $order, false, $paginator->getCurrentPageNumber(), $paginator->getItemCountPerPage(), $quick); } public function editFileMdAction() @@ -156,7 +198,52 @@ class LibraryController extends Zend_Controller_Action $this->view->form = $form; } + public function quickSearchAction() + { + $this->view->headScript()->appendFile('/js/airtime/library/quicksearch.js','text/javascript'); + $this->_helper->viewRenderer->setResponseSegment('quick_search'); + + $this->view->qs_value = $this->search_sess->quick_string; + + $format = $this->_getParam('format', 'layout'); + + if($format !== 'json') + return; + + $search = $this->_getParam('search', null); + $this->search_sess->quick_string = $search; + + $categories = array("dc:title", "dc:creator", "dc:source", "ls:type"); + $keywords = explode(" ", $search); + + $md = array(); + + for($group_id=1; $group_id <= count($keywords); $group_id++) { + + for($row_id=1; $row_id <= count($categories); $row_id++) { + + $md["group_".$group_id]["row_".$row_id]["metadata"] = $categories[$row_id-1]; + $md["group_".$group_id]["row_".$row_id]["match"] = "0"; + $md["group_".$group_id]["row_".$row_id]["search"] = $keywords[$group_id-1]; + } + } + + $this->search_sess->quick = $md; + + $currpage = isset($this->search_sess->page) ? $this->search_sess->page : null; + $order = isset($this->search_sess->order) ? $this->search_sess->order : null; + $count = StoredFile::searchFiles($md, $order, true, null, null, true); + + $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Null($count)); + $paginator->setCurrentPageNumber($currpage); + $this->view->paginator = $paginator; + $this->view->files = StoredFile::searchFiles($md, $order, false, $paginator->getCurrentPageNumber(), $paginator->getItemCountPerPage(), true); + + $this->view->html = $this->view->render('library/contents.phtml'); + unset($this->view->files); + unset($this->view->paginator); + } } @@ -173,3 +260,5 @@ class LibraryController extends Zend_Controller_Action + + diff --git a/application/controllers/PlaylistController.php b/application/controllers/PlaylistController.php index d73ef2a06..bd1790e03 100644 --- a/application/controllers/PlaylistController.php +++ b/application/controllers/PlaylistController.php @@ -136,7 +136,7 @@ class PlaylistController extends Zend_Controller_Action public function editAction() { - $this->view->headScript()->appendFile('/js/campcaster/playlist/playlist.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/playlist/playlist.js','text/javascript'); $pl_id = $this->_getParam('id', null); $display = $this->_getParam('view', null); diff --git a/application/controllers/PluploadController.php b/application/controllers/PluploadController.php index ffaff33e8..9b1792e7c 100644 --- a/application/controllers/PluploadController.php +++ b/application/controllers/PluploadController.php @@ -165,7 +165,7 @@ class PluploadController extends Zend_Controller_Action $view->headScript()->appendFile('/js/plupload/plupload.full.min.js','text/javascript'); $view->headScript()->appendFile('/js/plupload/jquery.plupload.queue.min.js','text/javascript'); - $view->headScript()->appendFile('/js/campcaster/library/plupload.js','text/javascript'); + $view->headScript()->appendFile('/js/airtime/library/plupload.js','text/javascript'); $view->headLink()->appendStylesheet('/css/plupload.queue.css'); } diff --git a/application/controllers/ScheduleController.php b/application/controllers/ScheduleController.php index 651efb191..ec1aab5ac 100644 --- a/application/controllers/ScheduleController.php +++ b/application/controllers/ScheduleController.php @@ -29,7 +29,7 @@ class ScheduleController extends Zend_Controller_Action $this->view->headScript()->appendFile('/js/contextmenu/jquery.contextMenu.js','text/javascript'); $this->view->headScript()->appendFile('/js/qtip/jquery.qtip-1.0.0.min.js','text/javascript'); - $this->view->headScript()->appendFile('/js/campcaster/schedule/schedule.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/schedule/schedule.js','text/javascript'); $this->view->headLink()->appendStylesheet('/css/jquery.contextMenu.css'); $this->view->headLink()->appendStylesheet('/css/fullcalendar.css'); @@ -177,8 +177,7 @@ class ScheduleController extends Zend_Controller_Action public function viewPlaylistAction() { - $this->view->headScript()->appendFile('/js/playlist/playlist.js','text/javascript'); - $this->view->headScript()->appendFile('/js/progressbar/jquery.progressbar.min.js','text/javascript'); + //TODO: insert code for datagrid } public function getCurrentPlaylistAction() diff --git a/application/controllers/SearchController.php b/application/controllers/SearchController.php index a96248964..d31bbae12 100644 --- a/application/controllers/SearchController.php +++ b/application/controllers/SearchController.php @@ -2,23 +2,42 @@ class SearchController extends Zend_Controller_Action { + protected $search_sess = null; - protected $form; - protected $search_sess = null; + private function addGroup($group_id) { + + $form = new Application_Form_AdvancedSearch(); + + $form->addGroup($group_id, 1); + $group = $form->getSubForm('group_'.$group_id); + + return $group->__toString(); + } + + private function addFieldToGroup($group_id, $row_id) { + + $form = new Application_Form_AdvancedSearch(); + + $form->addGroup($group_id); + $group = $form->getSubForm('group_'.$group_id); + + $group->addRow($row_id); + + return $group->__toString(); + } public function init() { - if(!Zend_Auth::getInstance()->hasIdentity()) + if(!Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('login/index'); } $ajaxContext = $this->_helper->getHelper('AjaxContext'); - $ajaxContext->addActionContext('newfield', 'html') - ->addActionContext('display', 'json') + $ajaxContext->addActionContext('newfield', 'json') + ->addActionContext('newgroup', 'json') ->initContext(); - $this->form = new Application_Form_AdvancedSearch(); $this->search_sess = new Zend_Session_Namespace("search"); } @@ -26,80 +45,82 @@ class SearchController extends Zend_Controller_Action { $this->_helper->layout->setLayout('search'); - $this->view->headScript()->appendFile('/js/campcaster/onready/search.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/onready/search.js','text/javascript'); $this->view->headScript()->appendFile('/js/contextmenu/jjmenu.js','text/javascript'); $this->view->headLink()->appendStylesheet('/css/contextmenu.css'); - $this->_helper->actionStack('display', 'search'); $this->_helper->actionStack('contents', 'library'); + $this->_helper->actionStack('display', 'search'); $this->_helper->actionStack('index', 'sideplaylist'); } public function displayAction() { - $this->view->headScript()->appendFile('/js/campcaster/library/advancedsearch.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/library/advancedsearch.js','text/javascript'); $this->view->headLink()->appendStylesheet('/css/library_search.css'); $this->_helper->viewRenderer->setResponseSegment('search'); $request = $this->getRequest(); - $this->form = new Application_Form_AdvancedSearch(); - $form = $this->form; + $form = new Application_Form_AdvancedSearch(); + $this->view->form = $form; // Form has not been submitted - displayed using layouts if (!$request->isPost()) { - unset($this->search_sess->md); - unset($this->search_sess->order); + $form->addGroup(1, 1); - $sub = new Application_Form_AdvancedSearchRow(1); - $form->addSubForm($sub, 'row_1'); - $form->getSubForm('row_1')->removeDecorator('DtDdWrapper'); + $this->search_sess->next_group = 2; + $this->search_sess->next_row[1] = 2; - $this->view->form = $form; return; } - // Form has been submitted - run data through preValidation() + $this->view->md = $request->getPost(); + + // Form has been submitted $form->preValidation($request->getPost()); if (!$form->isValid($request->getPost())) { - $this->view->form = $form->__toString(); return; } - // form was submitted, send back strings to json response. - $info = $form->getValues(); - $this->search_sess->md = $info; - $order = isset($this->search_sess->order) ? $this->search_sess->order : NULL; + // valid form was submitted set as search criteria. + $this->view->md = $form->getValues(); + $this->search_sess->md = $form->getValues(); - $this->view->files = StoredFile::searchFiles($info, $order); - - if (count($this->view->files) > 0) { - $this->view->results = $this->view->render('library/update.phtml'); - } - else { - $this->view->results = "No Results"; - } - unset($this->view->files); + //make sure to start on first page of new results. + unset($this->search_sess->page); } public function newfieldAction() { - $id = $this->_getParam('id', 1); + $group_id = $this->_getParam('group', 1); + $row_id = $this->search_sess->next_row[$group_id]; - $this->form->addSubForm(new Application_Form_AdvancedSearchRow($id), 'row_'.$id, $id); + $this->view->html = $this->addFieldToGroup($group_id, $row_id); + $this->view->row = $row_id; - $this->form->getSubForm('row_'.$id)->removeDecorator('DtDdWrapper'); - $e = $this->form->getSubForm('row_'.$id); - - $this->view->field = $e->__toString(); + $this->search_sess->next_row[$group_id] = $row_id + 1; } + public function newgroupAction() + { + $group_id = $this->search_sess->next_group; + + $this->view->html = $this->addGroup($group_id); + + $this->search_sess->next_group = $group_id + 1; + $this->search_sess->next_row[$group_id] = 2; + } + + } + + diff --git a/application/controllers/SideplaylistController.php b/application/controllers/SideplaylistController.php index cebef65c7..6c9f31310 100644 --- a/application/controllers/SideplaylistController.php +++ b/application/controllers/SideplaylistController.php @@ -17,7 +17,7 @@ class SideplaylistController extends Zend_Controller_Action public function indexAction() { - $this->view->headScript()->appendFile('/js/campcaster/library/spl.js','text/javascript'); + $this->view->headScript()->appendFile('/js/airtime/library/spl.js','text/javascript'); $this->_helper->viewRenderer->setResponseSegment('spl'); diff --git a/application/forms/AdvancedSearch.php b/application/forms/AdvancedSearch.php index 4c915c38e..f8fae8705 100644 --- a/application/forms/AdvancedSearch.php +++ b/application/forms/AdvancedSearch.php @@ -5,12 +5,34 @@ class Application_Form_AdvancedSearch extends Zend_Form public function init() { - $this->addElement('hidden', 'search_next_id', array( - 'value' => 2 - )); - $this->getElement('search_next_id')->removeDecorator('Label')->removeDecorator('HtmlTag'); + // Add the add button + $this->addElement('button', 'search_add_group', array( + 'ignore' => true, + 'label' => 'Add', + 'order' => '-2' + )); + $this->getElement('search_add_group')->removeDecorator('DtDdWrapper'); + + // Add the submit button + $this->addElement('submit', 'search_submit', array( + 'ignore' => true, + 'label' => 'Submit', + 'order' => '-1' + )); + $this->getElement('search_submit')->removeDecorator('DtDdWrapper'); } + public function addGroup($group_id, $row_id=null) { + + $this->addSubForm(new Application_Form_AdvancedSearchGroup(), 'group_'.$group_id, $group_id); + $this->getSubForm('group_'.$group_id)->removeDecorator('DtDdWrapper'); + + if(!is_null($row_id)) { + $subGroup = $this->getSubForm('group_'.$group_id); + $subGroup->addRow($row_id); + } + } + public function preValidation(array $data) { function findId($name) { @@ -18,34 +40,26 @@ class Application_Form_AdvancedSearch extends Zend_Form return $t[1]; } - // array_filter callback function findFields($field) { - return strpos($field, 'row') !== false; + return strpos($field, 'group') !== false; } - $fields = array_filter(array_keys($data), 'findFields'); + $groups = array_filter(array_keys($data), 'findFields'); - foreach ($fields as $field) { - // use id to set new order - $id = findId($field); - $this->addNewField($data, $id); + foreach ($groups as $group) { + + $group_id = findId($group); + $this->addGroup($group_id); + + $subGroup = $this->getSubForm($group); + + foreach (array_keys($data[$group]) as $row) { + + $row_id = findId($row); + $subGroup->addRow($row_id, $data[$group][$row]); + } } + } - - public function addNewField($data, $id) { - - $sub = new Application_Form_AdvancedSearchRow($id); - - $values = array("metadata_".$id => $data["row_".$id]["metadata_".$id], - "match_".$id => $data["row_".$id]["match_".$id], - "search_".$id => $data["row_".$id]["search_".$id]); - - $sub->setDefaults($values); - - $this->addSubForm($sub, 'row_'.$id, $id); - $this->getSubForm('row_'.$id)->removeDecorator('DtDdWrapper'); - } - - } diff --git a/application/forms/AdvancedSearchGroup.php b/application/forms/AdvancedSearchGroup.php new file mode 100644 index 000000000..5a5541673 --- /dev/null +++ b/application/forms/AdvancedSearchGroup.php @@ -0,0 +1,29 @@ +addElement('button', 'search_add_row', array( + 'ignore' => true, + 'label' => 'Add', + 'order' => '-2' + )); + $this->getElement('search_add_row')->removeDecorator('DtDdWrapper'); + } + + public function addRow($row_id, $data=null) { + + $this->addSubForm(new Application_Form_AdvancedSearchRow(), 'row_'.$row_id, $row_id); + $row = $this->getSubForm('row_'.$row_id); + $row->removeDecorator('DtDdWrapper'); + + if(!is_null($data)) { + $row->setDefaults($data); + } + } + + +} + diff --git a/application/forms/AdvancedSearchRow.php b/application/forms/AdvancedSearchRow.php index a647e7656..b50cfb176 100644 --- a/application/forms/AdvancedSearchRow.php +++ b/application/forms/AdvancedSearchRow.php @@ -2,22 +2,11 @@ class Application_Form_AdvancedSearchRow extends Zend_Form_SubForm { - - protected $_rowid; - - public function __construct($id = null) - { - $this->_rowid = $id; - parent::__construct(); - } - public function init() { - $id = $this->_rowid; - $this->addElement( 'select', - 'metadata_'.$id, + 'metadata', array( 'required' => true, 'multiOptions' => array( @@ -50,11 +39,11 @@ class Application_Form_AdvancedSearchRow extends Zend_Form_SubForm ), ) ); - $this->getElement('metadata_'.$id)->removeDecorator('Label')->removeDecorator('HtmlTag'); + $this->getElement('metadata')->removeDecorator('Label')->removeDecorator('HtmlTag'); $this->addElement( 'select', - 'match_'.$id, + 'match', array( 'required' => true, 'multiOptions' => array( @@ -68,12 +57,12 @@ class Application_Form_AdvancedSearchRow extends Zend_Form_SubForm ), ) ); - $this->getElement('match_'.$id)->removeDecorator('Label')->removeDecorator('HtmlTag'); + $this->getElement('match')->removeDecorator('Label')->removeDecorator('HtmlTag'); - $this->addElement('text', 'search_'.$id, array( + $this->addElement('text', 'search', array( 'required' => true, )); - $this->getElement('search_'.$id)->removeDecorator('Label')->removeDecorator('HtmlTag'); + $this->getElement('search')->removeDecorator('Label')->removeDecorator('HtmlTag'); } diff --git a/application/layouts/scripts/layout.phtml b/application/layouts/scripts/layout.phtml index b85faa6b4..d9d756fec 100644 --- a/application/layouts/scripts/layout.phtml +++ b/application/layouts/scripts/layout.phtml @@ -3,7 +3,7 @@ - Campcaster + Airtime headScript() ?> headLink() ?> @@ -11,7 +11,17 @@ -
layout()->content ?>
- +
layout()->content ?>
+
+
 
+
Show:
Playlist:
Host:
+
Previous:
Current:
Upcoming:
+
+
+ diff --git a/application/layouts/scripts/library.phtml b/application/layouts/scripts/library.phtml index c54e6d9f5..6d7a40698 100644 --- a/application/layouts/scripts/library.phtml +++ b/application/layouts/scripts/library.phtml @@ -3,7 +3,7 @@ - Campcaster + Airtime headScript() ?> headLink() ?> @@ -11,6 +11,7 @@ +
layout()->library ?>
layout()->spl ?>
diff --git a/application/layouts/scripts/login.phtml b/application/layouts/scripts/login.phtml index ceee1db32..39793ecd3 100644 --- a/application/layouts/scripts/login.phtml +++ b/application/layouts/scripts/login.phtml @@ -3,7 +3,7 @@ - Campcaster + Airtime headScript() ?> headLink() ?> diff --git a/application/layouts/scripts/search.phtml b/application/layouts/scripts/search.phtml index 6d7ee53f1..2145a32e2 100644 --- a/application/layouts/scripts/search.phtml +++ b/application/layouts/scripts/search.phtml @@ -3,7 +3,7 @@ - Campcaster + Airtime headScript() ?> headLink() ?> diff --git a/application/models/AccessRecur.php b/application/models/AccessRecur.php index ae78c8807..e0fc2a008 100644 --- a/application/models/AccessRecur.php +++ b/application/models/AccessRecur.php @@ -5,7 +5,7 @@ * Handles recursive accessPlaylist/releasePlaylist. * Should be 'required_once' from LocStor.php only. * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -181,4 +181,4 @@ class AccessRecur { } } // class AccessRecur -?> \ No newline at end of file +?> diff --git a/application/models/Alib.php b/application/models/Alib.php index b9e16d6ca..f0dba6f89 100644 --- a/application/models/Alib.php +++ b/application/models/Alib.php @@ -8,7 +8,7 @@ define('ALIBERR_NOTEXISTS', 31); /** * Authentication/authorization class * - * @package Campcaster + * @package Airtime * @subpackage Alib * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -619,4 +619,4 @@ class Alib { } // fn test } // class Alib -?> \ No newline at end of file +?> diff --git a/application/models/Backup.php b/application/models/Backup.php index c05500264..f6ae4b9e5 100755 --- a/application/models/Backup.php +++ b/application/models/Backup.php @@ -3,7 +3,7 @@ define('BACKUP_EXT', 'tar'); define('ACCESS_TYPE', 'backup'); /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt diff --git a/application/models/BasicStor.php b/application/models/BasicStor.php index ed517eabd..744278440 100644 --- a/application/models/BasicStor.php +++ b/application/models/BasicStor.php @@ -106,9 +106,9 @@ require_once(dirname(__FILE__)."/Playlist.php"); // "dc:language" => "language"); /** - * Core of Campcaster file storage module + * Core of Airtime file storage module * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1494,7 +1494,7 @@ class BasicStor { * @param string $plid * Playlist gunid * @param string $aPath - * Absolute path part of imported file (e.g. /home/user/campcaster) + * Absolute path part of imported file (e.g. /home/user/airtime) * @param string $rPath * Relative path/filename part of imported file (e.g. playlists/playlist_1.smil) * @param string $ext @@ -2183,4 +2183,4 @@ class BasicStor { } } // class BasicStor - ?> \ No newline at end of file + ?> diff --git a/application/models/GreenBox.php b/application/models/GreenBox.php index a46ffa752..ded87bc8c 100644 --- a/application/models/GreenBox.php +++ b/application/models/GreenBox.php @@ -18,7 +18,7 @@ require_once("Transport.php"); * * File storage module. * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1723,4 +1723,4 @@ class GreenBox extends BasicStor { } // fn removePerm } // class GreenBox -?> \ No newline at end of file +?> diff --git a/application/models/LocStor.php b/application/models/LocStor.php index f7d2e0cbe..5e7b31778 100644 --- a/application/models/LocStor.php +++ b/application/models/LocStor.php @@ -16,7 +16,7 @@ if (isset($WHITE_SCREEN_OF_DEATH) && $WHITE_SCREEN_OF_DEATH) { * * Local storage interface * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1362,7 +1362,7 @@ class LocStor extends BasicStor { /*===================================================== auxiliary methods */ /** - * Dummy method - only returns Campcaster version + * Dummy method - only returns Airtime version * * @return string */ @@ -1746,4 +1746,4 @@ class LocStor extends BasicStor { /* ==================================================== auxiliary methods */ } // class LocStor -?> \ No newline at end of file +?> diff --git a/application/models/M3uPlaylist.php b/application/models/M3uPlaylist.php index 388c24aa5..963f3226c 100644 --- a/application/models/M3uPlaylist.php +++ b/application/models/M3uPlaylist.php @@ -4,7 +4,7 @@ define('INDCH', ' '); /** * M3uPlaylist class * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -59,7 +59,7 @@ class M3uPlaylist { * * @param GreenBox $gb * @param string $aPath - * absolute path part of imported file (e.g. /home/user/campcaster) + * absolute path part of imported file (e.g. /home/user/airtime) * @param string $rPath * relative path/filename part of imported file * (e.g. playlists/playlist_1.smil) @@ -141,7 +141,7 @@ class M3uPlaylist { * @param string $data * local path to M3U file * @return string - * XML playlist in Campcaster playlist format + * XML playlist in Airtime playlist format */ function convert2lspl(&$gb, $data) { @@ -196,7 +196,7 @@ class M3uPlaylist { /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -231,7 +231,7 @@ class M3uPlaylistBodyElement { /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -257,7 +257,7 @@ class M3uPlaylistParElement { /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -313,7 +313,7 @@ class M3uPlaylistAudioElement { /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -349,4 +349,4 @@ class M3uPlaylistAnimateElement { } } -?> \ No newline at end of file +?> diff --git a/application/models/Playlist.php b/application/models/Playlist.php index 674948b80..cb2700e0b 100644 --- a/application/models/Playlist.php +++ b/application/models/Playlist.php @@ -7,7 +7,7 @@ define('INDCH', ' '); * * remark: dcterms:extent format: hh:mm:ss.ssssss * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -155,8 +155,7 @@ class Playlist { { $con = Propel::getConnection("campcaster"); - $sql = "SELECT * FROM cc_playlist LEFT JOIN cc_playlisttimes USING(id) WHERE length <= '{$p_length}' "; - //AND state != 'edited' + $sql = "SELECT * FROM cc_playlist LEFT JOIN cc_playlisttimes USING(id) WHERE length <= '{$p_length}' AND state != 'edited' "; $r = $con->query($sql); return $r->fetchAll(); @@ -905,7 +904,7 @@ class Playlist { } // class Playlist /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1015,7 +1014,7 @@ class PlaylistTagExport /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1196,7 +1195,7 @@ class PlaylistElementExport { /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1270,7 +1269,7 @@ class PlaylistAudioClipExport /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1304,7 +1303,7 @@ class PlaylistFadeInfoExport /** - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt diff --git a/application/models/Prefs.php b/application/models/Prefs.php index c51a75402..c06385fe3 100644 --- a/application/models/Prefs.php +++ b/application/models/Prefs.php @@ -5,7 +5,7 @@ require_once("GreenBox.php"); /** * Preference storage class. * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -439,4 +439,4 @@ class Prefs { } } // class Prefs -?> \ No newline at end of file +?> diff --git a/application/models/Renderer.php b/application/models/Renderer.php index 81d636b70..a569fc8da 100644 --- a/application/models/Renderer.php +++ b/application/models/Renderer.php @@ -8,7 +8,7 @@ require_once("Playlist.php"); * * Playlist to file rendering - PHP layer, caller to the renderer executable * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -287,4 +287,4 @@ class Renderer } // class Renderer -?> \ No newline at end of file +?> diff --git a/application/models/Restore.php b/application/models/Restore.php index 892c0f19f..decbf728d 100644 --- a/application/models/Restore.php +++ b/application/models/Restore.php @@ -1,7 +1,7 @@ \ No newline at end of file +?> diff --git a/application/models/StoredFile.php b/application/models/StoredFile.php index 50fca75d7..d35a55800 100644 --- a/application/models/StoredFile.php +++ b/application/models/StoredFile.php @@ -6,6 +6,7 @@ require_once("Schedule.php"); global $g_metadata_xml_to_db_mapping; $g_metadata_xml_to_db_mapping = array( + "ls:type" => "ftype", "dc:format" => "format", "ls:bitrate" => "bit_rate", "ls:samplerate" => "sample_rate", @@ -312,14 +313,14 @@ function camp_get_audio_metadata($p_filename, $p_testonly = false) /** * StoredFile class * - * Campcaster file storage support class.
+ * Airtime file storage support class.
* Represents one virtual file in storage. Virtual file has up to two parts: *
    *
  • metadata in database - represented by MetaData class
  • *
  • binary media data in real file
  • *
* - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -1741,7 +1742,7 @@ class StoredFile { return $CC_CONFIG['accessDir']."/$p_token.$p_ext"; } - public static function searchFiles($md, $order=NULL) + public static function searchFiles($md, $order=NULL, $count=false, $page=null, $limit=null, $quick=false) { global $CC_CONFIG, $CC_DBC, $g_metadata_xml_to_db_mapping; @@ -1755,9 +1756,6 @@ class StoredFile { "6" => "!=", ); - //$sql = "SELECT * FROM ".$CC_CONFIG['filesTable']; - - $plSelect = "SELECT "; $fileSelect = "SELECT "; $_SESSION["br"] = ""; @@ -1766,6 +1764,10 @@ class StoredFile { if($key === "dc:title"){ $plSelect .= "name AS ".$val.", "; $fileSelect .= $val.", "; + } + else if ($key === "ls:type"){ + $plSelect .= "'playlist' AS ".$val.", "; + $fileSelect .= $val.", "; } else if ($key === "dc:creator"){ $plSelect .= "creator AS ".$val.", "; @@ -1785,45 +1787,79 @@ class StoredFile { } } - $sql = "SELECT * FROM ((".$plSelect."PL.id, 'playlist' AS ftype + if($count) { + $selector = "SELECT COUNT(*)"; + } + else { + $selector = "SELECT *"; + } + + $from = " FROM ((".$plSelect."PL.id FROM ".$CC_CONFIG["playListTable"]." AS PL LEFT JOIN ".$CC_CONFIG['playListTimeView']." PLT ON PL.id = PLT.id) UNION - (".$fileSelect."id, ftype FROM ".$CC_CONFIG["filesTable"]." AS FILES)) AS RESULTS "; + (".$fileSelect."id FROM ".$CC_CONFIG["filesTable"]." AS FILES)) AS RESULTS "; - $cond = array(); - foreach(array_keys($md) as $key) { - if(strpos($key, 'row') !== false){ - $t = explode("_", $key); - $row_num = $t[1]; + $sql = $selector." ".$from; - $string = $g_metadata_xml_to_db_mapping[$md[$key]["metadata_".$row_num]]; + $or_cond = array(); + $inner = $quick ? 'OR':'AND'; + $outer = $quick ? 'AND':'OR'; + foreach (array_keys($md) as $group) { - $string = $string ." ".$match[$md[$key]["match_".$row_num]]; + if(strpos($group, 'group') === false) { + continue; + } - if ($md[$key]["match_".$row_num] === "0") - $string = $string." '%". $md[$key]["search_".$row_num]."%'"; + $and_cond = array(); + foreach (array_keys($md[$group]) as $row) { + + $string = $g_metadata_xml_to_db_mapping[$md[$group][$row]["metadata"]]; + + $string = $string ." ".$match[$md[$group][$row]["match"]]; + + if ($md[$group][$row]["match"] === "0") + $string = $string." '%". $md[$group][$row]["search"]."%'"; else - $string = $string." '". $md[$key]["search_".$row_num]."'"; + $string = $string." '". $md[$group][$row]["search"]."'"; - $cond[] = $string; + $and_cond[] = $string; + } + + if(count($and_cond) > 0) { + $or_cond[] = "(".join(" ".$inner." ", $and_cond).")"; } } - if(count($cond) > 0) { - $where = " WHERE ". join(" AND ", $cond); + if(count($or_cond) > 0) { + $where = " WHERE ". join(" ".$outer." ", $or_cond); $sql = $sql . $where; } - if(!is_null($order)) { - $ob = " ORDER BY ".$g_metadata_xml_to_db_mapping[$order["category"]]; - $sql = $sql . $ob . " " .$order["order"]; + if($count) { + return $CC_DBC->getOne($sql); } + + if(!is_null($order)) { + $ob = " ORDER BY ".$g_metadata_xml_to_db_mapping[$order["category"]]." ".$order["order"].", id "; + $sql = $sql . $ob; + } + else{ + $ob = " ORDER BY artist_name asc, id"; + $sql = $sql . $ob; + } + + if(!is_null($page) && !is_null($limit)) { + $offset = $page * $limit - ($limit); + $paginate = " LIMIT ".$limit. " OFFSET " .$offset; + $sql = $sql . $paginate; + } + //echo var_dump($md); //echo $sql; - return $CC_DBC->getAll($sql); + return $CC_DBC->getAll($sql); } } diff --git a/application/models/Subjects.php b/application/models/Subjects.php index f99cea1c6..f307d47ac 100644 --- a/application/models/Subjects.php +++ b/application/models/Subjects.php @@ -9,7 +9,7 @@ define('ALIBERR_BADSMEMB', 21); * with "linearized recursive membership" ;) * (allow adding users to groups or groups to groups) * - * @package Campcaster + * @package Airtime * @subpackage Alib * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -680,4 +680,4 @@ class Subjects { } // fn test } // class Subjects -?> \ No newline at end of file +?> diff --git a/application/models/Transport.php b/application/models/Transport.php index c5e8ce5dd..151c75a29 100644 --- a/application/models/Transport.php +++ b/application/models/Transport.php @@ -38,7 +38,7 @@ include_once("TransportRecord.php"); *
  • file
  • * * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -401,7 +401,7 @@ class Transport /* ------------------------------------------------ remote-search methods */ /** - * Start search job on remote Campcaster instance. + * Start search job on remote Airtime instance. * * @param array $criteria * LS criteria format (see localSearch) @@ -1636,7 +1636,7 @@ class Transport /** - * Ping to remote Campcaster server + * Ping to remote Airtime server * * @return string * network hub response or error object diff --git a/application/models/TransportRecord.php b/application/models/TransportRecord.php index 6c804279c..deafd736f 100644 --- a/application/models/TransportRecord.php +++ b/application/models/TransportRecord.php @@ -5,7 +5,7 @@ define('TR_LEAVE_CLOSED', TRUE); /** * Auxiliary class for transport records * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -416,4 +416,4 @@ class TransportRecord } } // class TransportRecord -?> \ No newline at end of file +?> diff --git a/application/models/Validator.php b/application/models/Validator.php index d730aee10..87f1eef22 100644 --- a/application/models/Validator.php +++ b/application/models/Validator.php @@ -23,7 +23,7 @@ define('VAL_PREDXML', 121); * * It probably should be replaced by XML schema validation in the future. * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -382,4 +382,4 @@ class Validator { } // class Validator -?> \ No newline at end of file +?> diff --git a/application/models/XmlParser.php b/application/models/XmlParser.php index 7d440460b..8b6f0ef30 100644 --- a/application/models/XmlParser.php +++ b/application/models/XmlParser.php @@ -1,6 +1,6 @@ \ No newline at end of file +?> diff --git a/application/models/campcaster/map/CcShowScheduleTableMap.php b/application/models/campcaster/map/CcShowScheduleTableMap.php index 3edc93611..cdd6205b7 100644 --- a/application/models/campcaster/map/CcShowScheduleTableMap.php +++ b/application/models/campcaster/map/CcShowScheduleTableMap.php @@ -40,6 +40,8 @@ class CcShowScheduleTableMap extends TableMap { // columns $this->addPrimaryKey('ID', 'DbId', 'INTEGER', true, null, null); $this->addForeignKey('SHOW_ID', 'DbShowId', 'INTEGER', 'cc_show', 'ID', true, null, null); + $this->addColumn('SHOW_DAY', 'DbShowDay', 'DATE', true, null, null); + $this->addColumn('POSITION', 'DbPosition', 'INTEGER', false, null, null); $this->addColumn('GROUP_ID', 'DbGroupId', 'INTEGER', true, null, null); // validators } // initialize() diff --git a/application/models/campcaster/om/BaseCcShowSchedule.php b/application/models/campcaster/om/BaseCcShowSchedule.php index 4ac36f871..c3f5796df 100644 --- a/application/models/campcaster/om/BaseCcShowSchedule.php +++ b/application/models/campcaster/om/BaseCcShowSchedule.php @@ -36,6 +36,18 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent */ protected $show_id; + /** + * The value for the show_day field. + * @var string + */ + protected $show_day; + + /** + * The value for the position field. + * @var int + */ + protected $position; + /** * The value for the group_id field. * @var int @@ -81,6 +93,49 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent return $this->show_id; } + /** + * Get the [optionally formatted] temporal [show_day] column value. + * + * + * @param string $format The date/time format string (either date()-style or strftime()-style). + * If format is NULL, then the raw DateTime object will be returned. + * @return mixed Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL + * @throws PropelException - if unable to parse/validate the date/time value. + */ + public function getDbShowDay($format = '%x') + { + if ($this->show_day === null) { + return null; + } + + + + try { + $dt = new DateTime($this->show_day); + } catch (Exception $x) { + throw new PropelException("Internally stored date/time/timestamp value could not be converted to DateTime: " . var_export($this->show_day, true), $x); + } + + if ($format === null) { + // Because propel.useDateTimeClass is TRUE, we return a DateTime object. + return $dt; + } elseif (strpos($format, '%') !== false) { + return strftime($format, $dt->format('U')); + } else { + return $dt->format($format); + } + } + + /** + * Get the [position] column value. + * + * @return int + */ + public function getDbPosition() + { + return $this->position; + } + /** * Get the [group_id] column value. * @@ -135,6 +190,75 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent return $this; } // setDbShowId() + /** + * Sets the value of [show_day] column to a normalized version of the date/time value specified. + * + * @param mixed $v string, integer (timestamp), or DateTime value. Empty string will + * be treated as NULL for temporal objects. + * @return CcShowSchedule The current object (for fluent API support) + */ + public function setDbShowDay($v) + { + // we treat '' as NULL for temporal objects because DateTime('') == DateTime('now') + // -- which is unexpected, to say the least. + if ($v === null || $v === '') { + $dt = null; + } elseif ($v instanceof DateTime) { + $dt = $v; + } else { + // some string/numeric value passed; we normalize that so that we can + // validate it. + try { + if (is_numeric($v)) { // if it's a unix timestamp + $dt = new DateTime('@'.$v, new DateTimeZone('UTC')); + // We have to explicitly specify and then change the time zone because of a + // DateTime bug: http://bugs.php.net/bug.php?id=43003 + $dt->setTimeZone(new DateTimeZone(date_default_timezone_get())); + } else { + $dt = new DateTime($v); + } + } catch (Exception $x) { + throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); + } + } + + if ( $this->show_day !== null || $dt !== null ) { + // (nested ifs are a little easier to read in this case) + + $currNorm = ($this->show_day !== null && $tmpDt = new DateTime($this->show_day)) ? $tmpDt->format('Y-m-d') : null; + $newNorm = ($dt !== null) ? $dt->format('Y-m-d') : null; + + if ( ($currNorm !== $newNorm) // normalized values don't match + ) + { + $this->show_day = ($dt ? $dt->format('Y-m-d') : null); + $this->modifiedColumns[] = CcShowSchedulePeer::SHOW_DAY; + } + } // if either are not null + + return $this; + } // setDbShowDay() + + /** + * Set the value of [position] column. + * + * @param int $v new value + * @return CcShowSchedule The current object (for fluent API support) + */ + public function setDbPosition($v) + { + if ($v !== null) { + $v = (int) $v; + } + + if ($this->position !== $v) { + $this->position = $v; + $this->modifiedColumns[] = CcShowSchedulePeer::POSITION; + } + + return $this; + } // setDbPosition() + /** * Set the value of [group_id] column. * @@ -189,7 +313,9 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent $this->id = ($row[$startcol + 0] !== null) ? (int) $row[$startcol + 0] : null; $this->show_id = ($row[$startcol + 1] !== null) ? (int) $row[$startcol + 1] : null; - $this->group_id = ($row[$startcol + 2] !== null) ? (int) $row[$startcol + 2] : null; + $this->show_day = ($row[$startcol + 2] !== null) ? (string) $row[$startcol + 2] : null; + $this->position = ($row[$startcol + 3] !== null) ? (int) $row[$startcol + 3] : null; + $this->group_id = ($row[$startcol + 4] !== null) ? (int) $row[$startcol + 4] : null; $this->resetModified(); $this->setNew(false); @@ -198,7 +324,7 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent $this->ensureConsistency(); } - return $startcol + 3; // 3 = CcShowSchedulePeer::NUM_COLUMNS - CcShowSchedulePeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 5; // 5 = CcShowSchedulePeer::NUM_COLUMNS - CcShowSchedulePeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating CcShowSchedule object", $e); @@ -532,6 +658,12 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent return $this->getDbShowId(); break; case 2: + return $this->getDbShowDay(); + break; + case 3: + return $this->getDbPosition(); + break; + case 4: return $this->getDbGroupId(); break; default: @@ -560,7 +692,9 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent $result = array( $keys[0] => $this->getDbId(), $keys[1] => $this->getDbShowId(), - $keys[2] => $this->getDbGroupId(), + $keys[2] => $this->getDbShowDay(), + $keys[3] => $this->getDbPosition(), + $keys[4] => $this->getDbGroupId(), ); if ($includeForeignObjects) { if (null !== $this->aCcShow) { @@ -604,6 +738,12 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent $this->setDbShowId($value); break; case 2: + $this->setDbShowDay($value); + break; + case 3: + $this->setDbPosition($value); + break; + case 4: $this->setDbGroupId($value); break; } // switch() @@ -632,7 +772,9 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent if (array_key_exists($keys[0], $arr)) $this->setDbId($arr[$keys[0]]); if (array_key_exists($keys[1], $arr)) $this->setDbShowId($arr[$keys[1]]); - if (array_key_exists($keys[2], $arr)) $this->setDbGroupId($arr[$keys[2]]); + if (array_key_exists($keys[2], $arr)) $this->setDbShowDay($arr[$keys[2]]); + if (array_key_exists($keys[3], $arr)) $this->setDbPosition($arr[$keys[3]]); + if (array_key_exists($keys[4], $arr)) $this->setDbGroupId($arr[$keys[4]]); } /** @@ -646,6 +788,8 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent if ($this->isColumnModified(CcShowSchedulePeer::ID)) $criteria->add(CcShowSchedulePeer::ID, $this->id); if ($this->isColumnModified(CcShowSchedulePeer::SHOW_ID)) $criteria->add(CcShowSchedulePeer::SHOW_ID, $this->show_id); + if ($this->isColumnModified(CcShowSchedulePeer::SHOW_DAY)) $criteria->add(CcShowSchedulePeer::SHOW_DAY, $this->show_day); + if ($this->isColumnModified(CcShowSchedulePeer::POSITION)) $criteria->add(CcShowSchedulePeer::POSITION, $this->position); if ($this->isColumnModified(CcShowSchedulePeer::GROUP_ID)) $criteria->add(CcShowSchedulePeer::GROUP_ID, $this->group_id); return $criteria; @@ -709,6 +853,8 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent public function copyInto($copyObj, $deepCopy = false) { $copyObj->setDbShowId($this->show_id); + $copyObj->setDbShowDay($this->show_day); + $copyObj->setDbPosition($this->position); $copyObj->setDbGroupId($this->group_id); $copyObj->setNew(true); @@ -809,6 +955,8 @@ abstract class BaseCcShowSchedule extends BaseObject implements Persistent { $this->id = null; $this->show_id = null; + $this->show_day = null; + $this->position = null; $this->group_id = null; $this->alreadyInSave = false; $this->alreadyInValidation = false; diff --git a/application/models/campcaster/om/BaseCcShowSchedulePeer.php b/application/models/campcaster/om/BaseCcShowSchedulePeer.php index 966cf400e..83f2f63d6 100644 --- a/application/models/campcaster/om/BaseCcShowSchedulePeer.php +++ b/application/models/campcaster/om/BaseCcShowSchedulePeer.php @@ -26,7 +26,7 @@ abstract class BaseCcShowSchedulePeer { const TM_CLASS = 'CcShowScheduleTableMap'; /** The total number of columns. */ - const NUM_COLUMNS = 3; + const NUM_COLUMNS = 5; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -37,6 +37,12 @@ abstract class BaseCcShowSchedulePeer { /** the column name for the SHOW_ID field */ const SHOW_ID = 'cc_show_schedule.SHOW_ID'; + /** the column name for the SHOW_DAY field */ + const SHOW_DAY = 'cc_show_schedule.SHOW_DAY'; + + /** the column name for the POSITION field */ + const POSITION = 'cc_show_schedule.POSITION'; + /** the column name for the GROUP_ID field */ const GROUP_ID = 'cc_show_schedule.GROUP_ID'; @@ -56,12 +62,12 @@ abstract class BaseCcShowSchedulePeer { * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('DbId', 'DbShowId', 'DbGroupId', ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbShowId', 'dbGroupId', ), - BasePeer::TYPE_COLNAME => array (self::ID, self::SHOW_ID, self::GROUP_ID, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID', 'SHOW_ID', 'GROUP_ID', ), - BasePeer::TYPE_FIELDNAME => array ('id', 'show_id', 'group_id', ), - BasePeer::TYPE_NUM => array (0, 1, 2, ) + BasePeer::TYPE_PHPNAME => array ('DbId', 'DbShowId', 'DbShowDay', 'DbPosition', 'DbGroupId', ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId', 'dbShowId', 'dbShowDay', 'dbPosition', 'dbGroupId', ), + BasePeer::TYPE_COLNAME => array (self::ID, self::SHOW_ID, self::SHOW_DAY, self::POSITION, self::GROUP_ID, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID', 'SHOW_ID', 'SHOW_DAY', 'POSITION', 'GROUP_ID', ), + BasePeer::TYPE_FIELDNAME => array ('id', 'show_id', 'show_day', 'position', 'group_id', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) ); /** @@ -71,12 +77,12 @@ abstract class BaseCcShowSchedulePeer { * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbShowId' => 1, 'DbGroupId' => 2, ), - BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbShowId' => 1, 'dbGroupId' => 2, ), - BasePeer::TYPE_COLNAME => array (self::ID => 0, self::SHOW_ID => 1, self::GROUP_ID => 2, ), - BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'SHOW_ID' => 1, 'GROUP_ID' => 2, ), - BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'show_id' => 1, 'group_id' => 2, ), - BasePeer::TYPE_NUM => array (0, 1, 2, ) + BasePeer::TYPE_PHPNAME => array ('DbId' => 0, 'DbShowId' => 1, 'DbShowDay' => 2, 'DbPosition' => 3, 'DbGroupId' => 4, ), + BasePeer::TYPE_STUDLYPHPNAME => array ('dbId' => 0, 'dbShowId' => 1, 'dbShowDay' => 2, 'dbPosition' => 3, 'dbGroupId' => 4, ), + BasePeer::TYPE_COLNAME => array (self::ID => 0, self::SHOW_ID => 1, self::SHOW_DAY => 2, self::POSITION => 3, self::GROUP_ID => 4, ), + BasePeer::TYPE_RAW_COLNAME => array ('ID' => 0, 'SHOW_ID' => 1, 'SHOW_DAY' => 2, 'POSITION' => 3, 'GROUP_ID' => 4, ), + BasePeer::TYPE_FIELDNAME => array ('id' => 0, 'show_id' => 1, 'show_day' => 2, 'position' => 3, 'group_id' => 4, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, ) ); /** @@ -150,10 +156,14 @@ abstract class BaseCcShowSchedulePeer { if (null === $alias) { $criteria->addSelectColumn(CcShowSchedulePeer::ID); $criteria->addSelectColumn(CcShowSchedulePeer::SHOW_ID); + $criteria->addSelectColumn(CcShowSchedulePeer::SHOW_DAY); + $criteria->addSelectColumn(CcShowSchedulePeer::POSITION); $criteria->addSelectColumn(CcShowSchedulePeer::GROUP_ID); } else { $criteria->addSelectColumn($alias . '.ID'); $criteria->addSelectColumn($alias . '.SHOW_ID'); + $criteria->addSelectColumn($alias . '.SHOW_DAY'); + $criteria->addSelectColumn($alias . '.POSITION'); $criteria->addSelectColumn($alias . '.GROUP_ID'); } } diff --git a/application/models/campcaster/om/BaseCcShowScheduleQuery.php b/application/models/campcaster/om/BaseCcShowScheduleQuery.php index c2e4db1ca..cd64bba1d 100644 --- a/application/models/campcaster/om/BaseCcShowScheduleQuery.php +++ b/application/models/campcaster/om/BaseCcShowScheduleQuery.php @@ -8,10 +8,14 @@ * * @method CcShowScheduleQuery orderByDbId($order = Criteria::ASC) Order by the id column * @method CcShowScheduleQuery orderByDbShowId($order = Criteria::ASC) Order by the show_id column + * @method CcShowScheduleQuery orderByDbShowDay($order = Criteria::ASC) Order by the show_day column + * @method CcShowScheduleQuery orderByDbPosition($order = Criteria::ASC) Order by the position column * @method CcShowScheduleQuery orderByDbGroupId($order = Criteria::ASC) Order by the group_id column * * @method CcShowScheduleQuery groupByDbId() Group by the id column * @method CcShowScheduleQuery groupByDbShowId() Group by the show_id column + * @method CcShowScheduleQuery groupByDbShowDay() Group by the show_day column + * @method CcShowScheduleQuery groupByDbPosition() Group by the position column * @method CcShowScheduleQuery groupByDbGroupId() Group by the group_id column * * @method CcShowScheduleQuery leftJoin($relation) Adds a LEFT JOIN clause to the query @@ -27,10 +31,14 @@ * * @method CcShowSchedule findOneByDbId(int $id) Return the first CcShowSchedule filtered by the id column * @method CcShowSchedule findOneByDbShowId(int $show_id) Return the first CcShowSchedule filtered by the show_id column + * @method CcShowSchedule findOneByDbShowDay(string $show_day) Return the first CcShowSchedule filtered by the show_day column + * @method CcShowSchedule findOneByDbPosition(int $position) Return the first CcShowSchedule filtered by the position column * @method CcShowSchedule findOneByDbGroupId(int $group_id) Return the first CcShowSchedule filtered by the group_id column * * @method array findByDbId(int $id) Return CcShowSchedule objects filtered by the id column * @method array findByDbShowId(int $show_id) Return CcShowSchedule objects filtered by the show_id column + * @method array findByDbShowDay(string $show_day) Return CcShowSchedule objects filtered by the show_day column + * @method array findByDbPosition(int $position) Return CcShowSchedule objects filtered by the position column * @method array findByDbGroupId(int $group_id) Return CcShowSchedule objects filtered by the group_id column * * @package propel.generator.campcaster.om @@ -189,6 +197,68 @@ abstract class BaseCcShowScheduleQuery extends ModelCriteria return $this->addUsingAlias(CcShowSchedulePeer::SHOW_ID, $dbShowId, $comparison); } + /** + * Filter the query on the show_day column + * + * @param string|array $dbShowDay The value to use as filter. + * Accepts an associative array('min' => $minValue, 'max' => $maxValue) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcShowScheduleQuery The current query, for fluid interface + */ + public function filterByDbShowDay($dbShowDay = null, $comparison = null) + { + if (is_array($dbShowDay)) { + $useMinMax = false; + if (isset($dbShowDay['min'])) { + $this->addUsingAlias(CcShowSchedulePeer::SHOW_DAY, $dbShowDay['min'], Criteria::GREATER_EQUAL); + $useMinMax = true; + } + if (isset($dbShowDay['max'])) { + $this->addUsingAlias(CcShowSchedulePeer::SHOW_DAY, $dbShowDay['max'], Criteria::LESS_EQUAL); + $useMinMax = true; + } + if ($useMinMax) { + return $this; + } + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + return $this->addUsingAlias(CcShowSchedulePeer::SHOW_DAY, $dbShowDay, $comparison); + } + + /** + * Filter the query on the position column + * + * @param int|array $dbPosition The value to use as filter. + * Accepts an associative array('min' => $minValue, 'max' => $maxValue) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return CcShowScheduleQuery The current query, for fluid interface + */ + public function filterByDbPosition($dbPosition = null, $comparison = null) + { + if (is_array($dbPosition)) { + $useMinMax = false; + if (isset($dbPosition['min'])) { + $this->addUsingAlias(CcShowSchedulePeer::POSITION, $dbPosition['min'], Criteria::GREATER_EQUAL); + $useMinMax = true; + } + if (isset($dbPosition['max'])) { + $this->addUsingAlias(CcShowSchedulePeer::POSITION, $dbPosition['max'], Criteria::LESS_EQUAL); + $useMinMax = true; + } + if ($useMinMax) { + return $this; + } + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + return $this->addUsingAlias(CcShowSchedulePeer::POSITION, $dbPosition, $comparison); + } + /** * Filter the query on the group_id column * diff --git a/application/models/cron/Cron.php b/application/models/cron/Cron.php index fba702b62..b4b0eb723 100755 --- a/application/models/cron/Cron.php +++ b/application/models/cron/Cron.php @@ -18,7 +18,7 @@ require_once (dirname(__FILE__).'/../../conf.php'); * ); * $cron->closeCrontab(); * - * @package Campcaster + * @package Airtime * @subpackage StorageServer.Cron */ class Cron { @@ -211,4 +211,4 @@ class Cron { return $this->cronfile.' "'.str_replace('"','\"',serialize($this->params)).'"'; } } -?> \ No newline at end of file +?> diff --git a/application/models/cron/CronJob.php b/application/models/cron/CronJob.php index bcd1c82d6..3f6697121 100755 --- a/application/models/cron/CronJob.php +++ b/application/models/cron/CronJob.php @@ -2,7 +2,7 @@ /** * Cron jobs handling abstract class * - * @package Campcaster + * @package Airtime * @subpackage StorageServer.Cron */ class CronJob @@ -14,4 +14,4 @@ class CronJob { } } -?> \ No newline at end of file +?> diff --git a/application/models/cron/Crontab.php b/application/models/cron/Crontab.php index 92b40ac38..3bd1f655c 100755 --- a/application/models/cron/Crontab.php +++ b/application/models/cron/Crontab.php @@ -11,7 +11,7 @@ define('CRON_EMPTY', 4); * This class lets you manipulate a user's crontab. * It lets you add delete update entries easily. * - * @package Campcaster + * @package Airtime * @subpackage StorageServer.Cron */ class Crontab @@ -281,4 +281,4 @@ class Crontab return $returnar; } } -?> \ No newline at end of file +?> diff --git a/application/models/playlistFormat.php b/application/models/playlistFormat.php index 457feb938..367d5c391 100644 --- a/application/models/playlistFormat.php +++ b/application/models/playlistFormat.php @@ -1,6 +1,6 @@ \ No newline at end of file +?> diff --git a/application/models/tests/pdoTest.php b/application/models/tests/pdoTest.php index 3aae4465b..2037d5506 100644 --- a/application/models/tests/pdoTest.php +++ b/application/models/tests/pdoTest.php @@ -1,8 +1,11 @@ query($sql3); var_dump($result3->fetchAll()); -?> \ No newline at end of file +?> diff --git a/application/models/xmlrpc/XR_LocStor.php b/application/models/xmlrpc/XR_LocStor.php index f8df60978..50077dd39 100644 --- a/application/models/xmlrpc/XR_LocStor.php +++ b/application/models/xmlrpc/XR_LocStor.php @@ -4,7 +4,7 @@ require_once(dirname(__FILE__).'/../LocStor.php'); /** * XML-RPC interface for LocStor class * - * @package Campcaster + * @package Airtime * @subpackage StorageServer * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -12,7 +12,7 @@ require_once(dirname(__FILE__).'/../LocStor.php'); class XR_LocStor extends LocStor { /* ----------------------------------------------------------- getVersion */ /** - * Dummy method - only returns Campcaster version + * Dummy method - only returns Airtime version * * The XML-RPC name of this method is "locstor.getVersion". * @@ -242,7 +242,7 @@ class XR_LocStor extends LocStor { * (returned by subsequent storeAudioClipClose call) * *
  • metadata : string - metadata XML string - * (as defined in Campcaster::Core::AudioClip Class Reference, + * (as defined in Airtime::Core::AudioClip Class Reference, * examples are in storageServer/var/tests/*.xml) *
  • *
  • fname : string - human readable mnemonic file name @@ -3830,4 +3830,4 @@ class XR_LocStor extends LocStor { } // class XR_LocStor -?> \ No newline at end of file +?> diff --git a/application/models/xmlrpc/put.php b/application/models/xmlrpc/put.php index 650a5880a..57b9bae93 100644 --- a/application/models/xmlrpc/put.php +++ b/application/models/xmlrpc/put.php @@ -23,7 +23,7 @@ * * * @see XR_LocStor - * @package Campcaster + * @package Airtime * @subpackage storageServer */ @@ -96,4 +96,4 @@ fclose($fp); fclose($putdata); header("HTTP/1.1 200"); -?> \ No newline at end of file +?> diff --git a/application/models/xmlrpc/xrLocStor.php b/application/models/xmlrpc/xrLocStor.php index fb9acf702..4bfb50fca 100644 --- a/application/models/xmlrpc/xrLocStor.php +++ b/application/models/xmlrpc/xrLocStor.php @@ -61,7 +61,7 @@ $locStor = new XR_LocStor(); $methods = array( 'test' => 'Tests toupper and checks sessid, params: '. 'teststring, sessid.', - 'getVersion' => 'Get version of Campcaster.', + 'getVersion' => 'Get version of Airtime.', // 'authenticate' => 'Checks authentication.', 'login' => 'Login to storage.', 'logout' => 'Logout from storage.', @@ -169,4 +169,4 @@ foreach ($methods as $method => $description) { $s = new XML_RPC_Server($defs); -?> \ No newline at end of file +?> diff --git a/application/views/scripts/library/contents.phtml b/application/views/scripts/library/contents.phtml index 4cee3f9bb..526bd37b8 100644 --- a/application/views/scripts/library/contents.phtml +++ b/application/views/scripts/library/contents.phtml @@ -8,6 +8,7 @@ Album Track Length + Type partialLoop('library/libraryTablePartial.phtml', $this->files); @@ -20,3 +21,12 @@ } ?> +paginationControl($this->paginator, + 'Sliding', + 'library/paginator.phtml'); + + +?> + diff --git a/application/views/scripts/library/libraryTablePartial.phtml b/application/views/scripts/library/libraryTablePartial.phtml index 52074462d..7f8502fbe 100644 --- a/application/views/scripts/library/libraryTablePartial.phtml +++ b/application/views/scripts/library/libraryTablePartial.phtml @@ -5,4 +5,5 @@ album_title ?> track_number ?> length ?> + ftype ?> diff --git a/application/views/scripts/library/paginator.phtml b/application/views/scripts/library/paginator.phtml new file mode 100644 index 000000000..95bf42d87 --- /dev/null +++ b/application/views/scripts/library/paginator.phtml @@ -0,0 +1,56 @@ +
    +

    + pageCount): ?> + + firstItemNumber; ?> - lastItemNumber; ?> + of totalItemCount; ?> +

    +

    + + previous)): ?> + + First + | + + First | + + + + previous)): ?> + + < Previous + | + + < Previous | + + + + pagesInRange as $page): ?> + current != $page): ?> + + + + + + + + next)): ?> + + Next > + | + + Next > | + + + + next)): ?> + + Last + + + Last + + + +

    +
    diff --git a/application/views/scripts/library/quick-search.phtml b/application/views/scripts/library/quick-search.phtml new file mode 100644 index 000000000..d8bbabb76 --- /dev/null +++ b/application/views/scripts/library/quick-search.phtml @@ -0,0 +1,2 @@ + + diff --git a/application/views/scripts/library/update.phtml b/application/views/scripts/library/update.phtml index 113029e1d..52eb9608b 100644 --- a/application/views/scripts/library/update.phtml +++ b/application/views/scripts/library/update.phtml @@ -1,2 +1,3 @@ partialLoop('library/libraryTablePartial.phtml', $this->files); + + echo $this->partialLoop('library/libraryTablePartial.phtml', $this->files); diff --git a/application/views/scripts/schedule/view-playlist.phtml b/application/views/scripts/schedule/view-playlist.phtml index 49ba61b1c..51580a791 100644 --- a/application/views/scripts/schedule/view-playlist.phtml +++ b/application/views/scripts/schedule/view-playlist.phtml @@ -2,8 +2,8 @@ -
    +
    diff --git a/application/views/scripts/search/display.phtml b/application/views/scripts/search/display.phtml index d742638df..a527a6ec8 100644 --- a/application/views/scripts/search/display.phtml +++ b/application/views/scripts/search/display.phtml @@ -1,6 +1,7 @@ form->setAction($this->url()); echo $this->form; +echo var_dump($this->md); ?> -Add -Submit + diff --git a/application/views/scripts/search/newfield.ajax.phtml b/application/views/scripts/search/newfield.ajax.phtml deleted file mode 100644 index 1dd0f7359..000000000 --- a/application/views/scripts/search/newfield.ajax.phtml +++ /dev/null @@ -1 +0,0 @@ -field; ?> diff --git a/application/views/scripts/search/newgroup.phtml b/application/views/scripts/search/newgroup.phtml new file mode 100644 index 000000000..0dbc342f4 --- /dev/null +++ b/application/views/scripts/search/newgroup.phtml @@ -0,0 +1 @@ +

    View script for controller Search and script/action name newgroup
    \ No newline at end of file diff --git a/build/build.properties b/build/build.properties index 3e7d17c6b..02554bf8b 100644 --- a/build/build.properties +++ b/build/build.properties @@ -1,9 +1,9 @@ -project.home = /home/naomiaro/dev-campcaster/campcaster +project.home = /path/to/airtime project.build = ${project.home}/build #Database driver propel.database = pgsql -propel.database.url = pgsql:host=localhost dbname=campcaster user=campcaster password=campcaster +propel.database.url = pgsql:host=localhost dbname=airtime user=airtime password=airtime #Project name propel.project = campcaster diff --git a/build/schema.xml b/build/schema.xml index 599b679e4..720e7126a 100644 --- a/build/schema.xml +++ b/build/schema.xml @@ -153,6 +153,8 @@ + + diff --git a/build/sql/schema.sql b/build/sql/schema.sql index ea794a500..d8d18744d 100644 --- a/build/sql/schema.sql +++ b/build/sql/schema.sql @@ -224,6 +224,8 @@ CREATE TABLE "cc_show_schedule" ( "id" serial NOT NULL, "show_id" INTEGER NOT NULL, + "show_day" DATE NOT NULL, + "position" INTEGER, "group_id" INTEGER NOT NULL, PRIMARY KEY ("id") ); diff --git a/build/sql/triggers.sql b/build/sql/triggers.sql index c059ffe80..a190be622 100644 --- a/build/sql/triggers.sql +++ b/build/sql/triggers.sql @@ -21,3 +21,27 @@ CREATE FUNCTION calculate_position() RETURNS trigger AS CREATE TRIGGER calculate_position AFTER INSERT OR DELETE ON cc_playlistcontents FOR EACH ROW EXECUTE PROCEDURE calculate_position(); + +---------------------------------------------------------------------------------- +--show_content() +---------------------------------------------------------------------------------- +DROP FUNCTION show_content() CASCADE; + +CREATE FUNCTION show_content() RETURNS trigger AS + ' + BEGIN + IF(TG_OP=''INSERT'') THEN + UPDATE cc_show_schedule SET position = (position + 1) + WHERE (id = new.id AND position >= new.position AND id != new.id); + END IF; + IF(TG_OP=''DELETE'') THEN + UPDATE cc_show_schedule SET position = (position - 1) + WHERE (id = old.id AND position > old.position); + END IF; + RETURN NULL; + END; + ' + LANGUAGE 'plpgsql'; + +CREATE TRIGGER show_content AFTER INSERT OR DELETE ON cc_show_schedule +FOR EACH ROW EXECUTE PROCEDURE show_content(); diff --git a/debian/rules b/debian/rules index 54c51876e..057f36fa9 100755 --- a/debian/rules +++ b/debian/rules @@ -139,7 +139,7 @@ override_dh_install: override_dh_fixperms: dh_fixperms # - chmod +x debian/campcaster-data/usr/share/campcaster/www/storageServer/var/install/campcaster-user.php + chmod +x debian/campcaster-data/usr/share/campcaster/www/storageServer/var/install/airtime-user.php chmod -x debian/campcaster-data/usr/share/campcaster/www/storageServer/var/cron/Crontab.php \ debian/campcaster-data/usr/share/campcaster/www/storageServer/var/cron/CronJob.php \ debian/campcaster-data/usr/share/campcaster/www/htmlUI/var/templates/popup/PLAYLIST.downloadExportedFile.tpl \ diff --git a/docs/README.txt b/docs/README.txt index 1e3c6df4d..f66f64d0f 100644 --- a/docs/README.txt +++ b/docs/README.txt @@ -14,13 +14,13 @@ Setting Up Your VHOST The following is a sample VHOST you might want to consider for your project. - DocumentRoot "/home/naomiaro/campcaster-refactor/campcaster/public" - ServerName campcaster.local + DocumentRoot "/home/naomiaro/campcaster-refactor/airtime/public" + ServerName airtime.local # This should be omitted in the production environment SetEnv APPLICATION_ENV development - + Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny diff --git a/install/campcaster-user.php b/install/airtime-user.php similarity index 95% rename from install/campcaster-user.php rename to install/airtime-user.php index 399887da1..ea591fd7e 100644 --- a/install/campcaster-user.php +++ b/install/airtime-user.php @@ -17,9 +17,9 @@ if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) { function printUsage() { echo "\n"; - echo "campcaster-user\n"; + echo "airtime-user\n"; echo "===============\n"; - echo " This program allows you to manage Campcaster users.\n"; + echo " This program allows you to manage Airtime users.\n"; echo "\n"; echo "OPTIONS:\n"; echo " --addupdate \n"; @@ -99,4 +99,4 @@ if (PEAR::isError($r)) { die($r->getMessage()); } exit(0); -?> \ No newline at end of file +?> diff --git a/install/postInstallStation.sh b/install/postInstallStation.sh index 0539ec713..adbff96d2 100755 --- a/install/postInstallStation.sh +++ b/install/postInstallStation.sh @@ -1,23 +1,23 @@ #!/bin/bash #------------------------------------------------------------------------------- -# Copyright (c) 2010 Sourcefabric O.P.S. +# Copyright (c) 2010 Airtime O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # To report bugs, send an e-mail to bugs@campware.org # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- @@ -404,7 +404,7 @@ if [ "$storage_is_local" = "yes" ]; then grep -q 'ls_scheduler_storage_pass' $install_etc/campcaster-scheduler.xml if [ $? = 0 ]; then SCHEDULER_STORAGE_PASS=`pwgen -N1 -c -n -s` - php -q $install_var_ls/storageServer/var/install/campcaster-user.php \ + php -q $install_var_ls/storageServer/var/install/airtime-user.php \ --addupdate scheduler ${SCHEDULER_STORAGE_PASS} sed -i -e "s/ls_scheduler_storage_pass/${SCHEDULER_STORAGE_PASS}/" \ $install_etc/campcaster-scheduler.xml diff --git a/install/propel-install.php b/install/propel-install.php index 861b004aa..8a24e659e 100644 --- a/install/propel-install.php +++ b/install/propel-install.php @@ -1,6 +1,6 @@ propel-error.log"; //echo $command."\n"; @exec($command, $output, $results); @@ -201,7 +206,7 @@ install_setDirPermissions($CC_CONFIG["storageDir"]); //echo " Done.\n"; echo " * Importing sample audio clips \n"; -$command = __DIR__."/../utils/campcaster-import --copy ../audio_samples/ > /dev/null"; +$command = __DIR__."/../utils/airtime-import --copy ../audio_samples/ > /dev/null"; @exec($command, $output, $results); echo "****************************** Install Complete ******************************\n"; diff --git a/install/uninstall.php b/install/uninstall.php index bef99bb8c..7a2fef3cf 100644 --- a/install/uninstall.php +++ b/install/uninstall.php @@ -1,6 +1,6 @@ \ No newline at end of file +?> diff --git a/library/getid3/bin/autogen.sh b/library/getid3/bin/autogen.sh index 89c606735..f2f0a70d8 100755 --- a/library/getid3/bin/autogen.sh +++ b/library/getid3/bin/autogen.sh @@ -2,21 +2,21 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- diff --git a/library/getid3/configure b/library/getid3/configure index 0c58cc366..2c4a059eb 100755 --- a/library/getid3/configure +++ b/library/getid3/configure @@ -2,21 +2,21 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. -# http://campcaster.campware.org/ +# This file is part of the Airtime project. +# http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- diff --git a/library/getid3/etc/Makefile.in b/library/getid3/etc/Makefile.in index 0e42713e1..460a967ab 100644 --- a/library/getid3/etc/Makefile.in +++ b/library/getid3/etc/Makefile.in @@ -2,21 +2,21 @@ # getID3 - read and writes tags in media files - see getid3.readme.txt # getID3 by James Heinrich # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # Copyright (c) 2010 Sourcefabric O.P.S. # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # @configure_input@ diff --git a/library/getid3/etc/configure.ac b/library/getid3/etc/configure.ac index 196f64df4..15e716f45 100644 --- a/library/getid3/etc/configure.ac +++ b/library/getid3/etc/configure.ac @@ -1,21 +1,21 @@ dnl----------------------------------------------------------------------------- dnl Copyright (c) 2010 Sourcefabric O.P.S. dnl -dnl This file is part of the Campcaster project. +dnl This file is part of the Airtime project. dnl http://campcaster.sourcefabric.org/ dnl -dnl Campcaster is free software; you can redistribute it and/or modify +dnl Airtime is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl -dnl Campcaster is distributed in the hope that it will be useful, +dnl Airtime is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License -dnl along with Campcaster; if not, write to the Free Software +dnl along with Airtime; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl dnl----------------------------------------------------------------------------- diff --git a/library/getid3/etc/doxygen.config b/library/getid3/etc/doxygen.config index 6244f1311..2db2ff22b 100644 --- a/library/getid3/etc/doxygen.config +++ b/library/getid3/etc/doxygen.config @@ -2,20 +2,20 @@ # doxygen.config # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- diff --git a/public/js/airtime/library/advancedsearch.js b/public/js/airtime/library/advancedsearch.js new file mode 100644 index 000000000..85ae0b85a --- /dev/null +++ b/public/js/airtime/library/advancedsearch.js @@ -0,0 +1,48 @@ +function addRemove(el) { + var id, span; + + id = $(el).attr("id").split("_").pop(); + + span = $('Remove').click(function(){ + $(this).parent().parent().remove(); + }); + + $(el).find("dl input").after(span); +} + +function ajaxAddRow() { + var group_id; + + group_id = $(this).parent().parent().attr("id").split("_").pop(); + + var url = '/Search/newfield/format/json'; + + $.post(url, {group: group_id}, function(json) { + + var newRow = $(json.html).find("#fieldset-row_"+json.row); + + $("#fieldset-group_"+group_id+" dl:first").append(newRow); + }); +} + +function ajaxAddGroup() { + + var url = '/Search/newgroup/format/json'; + + $.post(url, function(json) { + + $(".zend_form").append(json.html); + $('[id$="search_add_row"]').click(ajaxAddRow); + }); +} + +function setUpSearch() { + + $("#search_add_group").click(ajaxAddGroup); + + $('[id$="search_add_row"]').click(ajaxAddRow); + + $('[id^="fieldset-row_"]').each(function(i, el){ + addRemove(el); + }); +} diff --git a/public/js/campcaster/library/context-menu.js b/public/js/airtime/library/context-menu.js similarity index 100% rename from public/js/campcaster/library/context-menu.js rename to public/js/airtime/library/context-menu.js diff --git a/public/js/campcaster/library/library.js b/public/js/airtime/library/library.js similarity index 95% rename from public/js/campcaster/library/library.js rename to public/js/airtime/library/library.js index 258278022..12ea190d5 100644 --- a/public/js/campcaster/library/library.js +++ b/public/js/airtime/library/library.js @@ -66,6 +66,7 @@ function setUpLibrary() { $("#library_display tr:first-child span.album").data({'ob': 'dc:source', 'order' : 'asc'}); $("#library_display tr:first-child span.track").data({'ob': 'ls:track_num', 'order' : 'asc'}); $("#library_display tr:first-child span.length").data({'ob': 'dcterms:extent', 'order' : 'asc'}); + $("#library_display tr:first-child span.type").data({'ob': 'dcterms:extent', 'order' : 'asc'}); $("#library_display tr:first-child span").click(function(){ var url = "/Library/contents/format/html", diff --git a/public/js/campcaster/library/plupload.js b/public/js/airtime/library/plupload.js similarity index 100% rename from public/js/campcaster/library/plupload.js rename to public/js/airtime/library/plupload.js diff --git a/public/js/airtime/library/quicksearch.js b/public/js/airtime/library/quicksearch.js new file mode 100644 index 000000000..2cb84d12c --- /dev/null +++ b/public/js/airtime/library/quicksearch.js @@ -0,0 +1,28 @@ +function setUpQuickSearch() { + + $("#library_quick_search input").keyup(function(ev){ + var url, string; + //alert(x); + + url = "/Library/quick-search/format/json"; + string = $(this).val(); + + $.post(url, {search: string}, function(json){ + var html, data; + //hacky way until I can figure out paginator better. + html = json.html.replace(/quick-search\/format\/json/g, "index"); + + var el = $(html); + + data = el.find("tr:not(:first-child)"); + setLibraryContents(data); + + var lib = $("#library_content"); + + lib.find("div.paginationControl").remove(); + lib.append(el[2]); + + }); + }); + +} diff --git a/public/js/campcaster/library/spl.js b/public/js/airtime/library/spl.js similarity index 100% rename from public/js/campcaster/library/spl.js rename to public/js/airtime/library/spl.js diff --git a/public/js/campcaster/onready/library.js b/public/js/airtime/onready/library.js similarity index 76% rename from public/js/campcaster/onready/library.js rename to public/js/airtime/onready/library.js index 045656421..00eb895bb 100644 --- a/public/js/campcaster/onready/library.js +++ b/public/js/airtime/onready/library.js @@ -1,5 +1,6 @@ $(document).ready(function() { + setUpQuickSearch(); setUpLibrary(); setUpSPL(); diff --git a/public/js/campcaster/onready/search.js b/public/js/airtime/onready/search.js similarity index 100% rename from public/js/campcaster/onready/search.js rename to public/js/airtime/onready/search.js diff --git a/public/js/campcaster/playlist/playlist.js b/public/js/airtime/playlist/playlist.js similarity index 100% rename from public/js/campcaster/playlist/playlist.js rename to public/js/airtime/playlist/playlist.js diff --git a/public/js/campcaster/schedule/schedule.js b/public/js/airtime/schedule/schedule.js similarity index 99% rename from public/js/campcaster/schedule/schedule.js rename to public/js/airtime/schedule/schedule.js index a85ca6587..072c5d219 100644 --- a/public/js/campcaster/schedule/schedule.js +++ b/public/js/airtime/schedule/schedule.js @@ -255,7 +255,7 @@ function eventMenu(action, el, pos) { length = event.end.getTime() - event.start.getTime(); - h = length / (1000*60*60); + h = Math.floor(length / (1000*60*60)); m = (length % (1000*60*60)) / (1000*60); s = ((length % (1000*60*60)) % (1000*60)) / 1000; diff --git a/public/js/campcaster/library/advancedsearch.js b/public/js/campcaster/library/advancedsearch.js deleted file mode 100644 index 07b9ea9cb..000000000 --- a/public/js/campcaster/library/advancedsearch.js +++ /dev/null @@ -1,65 +0,0 @@ -function addRemove(el) { - var id, span; - - id = $(el).attr("id").split("_").pop(); - - span = $('Remove').click(function(){ - $(this).parent().parent().remove(); - }); - - $(el).find("dl input").after(span); -} - -function ajaxAddField() { - - var id = $("#search_next_id").val(); - - var url = '/Search/newfield'; - url = url + '/format/html'; - url = url + '/id/' + id; - - $.post(url, function(newElement) { - - var el = $(newElement); - addRemove(el); - - $(".zend_form").append(el); - $("#search_next_id").val(++id); - }); -} - -function searchLibrary() { - var url, data; - - url = '/Search/display/format/json'; - data = $("form").serializeArray(); - - $.post(url, data, function(json){ - - if(json.form) { - $("#search") - .empty() - .append(json.form); - } - - - if(json.results) { - $("#library_display tr:not(:first-child)").remove(); - $("#library_display tbody").append(json.results); - - //in campcaster/library.js - addLibraryItemEvents(); - } - - }); -} - -function setUpSearch() { - - $("#search_add").click(ajaxAddField); - $("#search_submit").click(searchLibrary); - - $('[id^="fieldset-row_"]').each(function(i, el){ - addRemove(el); - }); -} diff --git a/public/js/playlist/playlist.js b/public/js/playlist/playlist.js index 064864205..bddca6f60 100644 --- a/public/js/playlist/playlist.js +++ b/public/js/playlist/playlist.js @@ -21,7 +21,6 @@ $(cc.currentElem).append(prevDiv); var currParentDiv = document.createElement('div'); - currParentDiv.setAttribute("style", "background-color:#bbbbbb;"); $(cc.currentElem).append(currParentDiv); var currDiv = document.createElement('div'); @@ -145,7 +144,7 @@ } function getScheduleFromServer(){ - $.ajax({ url: "http://localhost/Schedule/get-current-playlist/format/json", dataType:"json", success:function(data){ + $.ajax({ url: "/Schedule/get-current-playlist/format/json", dataType:"json", success:function(data){ parseItems(data.entries); }}); setTimeout(getScheduleFromServer, 5000); diff --git a/pypo/api_clients/api_client.py b/pypo/api_clients/api_client.py index 8a625a68b..98abcaa28 100644 --- a/pypo/api_clients/api_client.py +++ b/pypo/api_clients/api_client.py @@ -20,8 +20,8 @@ from urlparse import urlparse def api_client_factory(config): - if config["api_client"] == "campcaster": - return CampcasterApiClient(config) + if config["api_client"] == "airtime": + return AirTimeApiClient(config) elif config["api_client"] == "obp": return ObpApiClient(config) else: @@ -100,15 +100,15 @@ class ApiClientInterface: # nil ################################################################################ -# Campcaster API Client +# Airtime API Client ################################################################################ -class CampcasterApiClient(ApiClientInterface): +class AirTimeApiClient(ApiClientInterface): def __init__(self, config): self.config = config - def __get_campcaster_version(self, verbose = True): + def __get_airtime_version(self, verbose = True): logger = logging.getLogger() url = self.config["base_url"] + self.config["api_base"] + self.config["version_url"] url = url.replace("%%api_key%%", self.config["api_key"]) @@ -120,7 +120,7 @@ class CampcasterApiClient(ApiClientInterface): logger.debug("Data: %s", data) response_json = json.read(data) version = response_json['version'] - logger.debug("Campcaster Version %s detected", version) + logger.debug("Airtime Version %s detected", version) except Exception, e: try: if e[1] == 401: @@ -137,7 +137,7 @@ class CampcasterApiClient(ApiClientInterface): if e[1] == 404: if (verbose): print '#####################################' - print '# Unable to contact the Campcaster-API' + print '# Unable to contact the Airtime-API' print '# ' + url print '#####################################' return False @@ -145,7 +145,7 @@ class CampcasterApiClient(ApiClientInterface): pass version = 0 - logger.error("Unable to detect Campcaster Version - %s, Response: %s", e, response) + logger.error("Unable to detect Airtime Version - %s, Response: %s", e, response) return version @@ -168,22 +168,22 @@ class CampcasterApiClient(ApiClientInterface): def is_server_compatible(self, verbose = True): - version = self.__get_campcaster_version(verbose) + version = self.__get_airtime_version(verbose) if (version == 0 or version == False): if (verbose): - print 'Unable to get Campcaster version number.' + print 'Unable to get Airtime version number.' print return False elif (version[0:4] != "1.6."): if (verbose): - print 'Campcaster version: ' + str(version) - print 'pypo not compatible with this version of Campcaster.' + print 'Airtime version: ' + str(version) + print 'pypo not compatible with this version of Airtime.' print return False else: if (verbose): - print 'Campcaster version: ' + str(version) - print 'pypo is compatible with this version of Campcaster.' + print 'Airtime version: ' + str(version) + print 'pypo is compatible with this version of Airtime.' print return True diff --git a/pypo/api_clients/api_client_factory.py b/pypo/api_clients/api_client_factory.py index 2bc97dc45..4762b0fc7 100644 --- a/pypo/api_clients/api_client_factory.py +++ b/pypo/api_clients/api_client_factory.py @@ -1,9 +1,9 @@ -import campcaster_api_client +import airtime_api_client import obp_api_client def create_api_client(config): - if config["api_client"] == "campcaster": - return campcaster_api_client.CampcasterApiClient(config) + if config["api_client"] == "airtime": + return campcaster_api_client.AirtimeApiClient(config) elif config["api_client"] == "obp": return obp_api_client.ObpApiClient(config) - \ No newline at end of file + diff --git a/pypo/config.cfg b/pypo/config.cfg index 09ca3d2a7..cbe7f38d7 100644 --- a/pypo/config.cfg +++ b/pypo/config.cfg @@ -5,9 +5,9 @@ # Set the type of client you are using. # Currently supported types: # 1) "obp" = Open Broadcast Platform -# 2) "campcaster" +# 2) "airtime" # -api_client = "campcaster" +api_client = "airtime" ############################################ # Directories / Hosts # @@ -66,7 +66,7 @@ cue_style = 'pre' ################################################################################ ##################### -# Campcaster Config # +# Airtime Config # ##################### # Value needed to access the API api_key = 'AAA' diff --git a/pypo/tests/campcaster-schedule-insert.php b/pypo/tests/campcaster-schedule-insert.php deleted file mode 100644 index 4f17c14dc..000000000 --- a/pypo/tests/campcaster-schedule-insert.php +++ /dev/null @@ -1,97 +0,0 @@ -getMessage()." ".$CC_DBC->getUserInfo()."\n"; - exit(1); -} -$CC_DBC->setFetchMode(DB_FETCHMODE_ASSOC); - - -$playlistName = "pypo_playlist_test"; -$minutesFromNow = 1; - -echo " ************************************************************** \n"; -echo " This script schedules a playlist to play $minutesFromNow minute(s) from now.\n"; -echo " This is a utility to help you debug the scheduler.\n"; -echo " ************************************************************** \n"; -echo "\n"; -echo "Deleting playlists with the name '$playlistName'..."; -// Delete any old playlists -$pl2 = Playlist::findPlaylistByName($playlistName); -foreach ($pl2 as $playlist) { - //var_dump($playlist); - $playlist->delete(); -} -echo "done.\n"; - -// Create a new playlist -echo "Creating new playlist '$playlistName'..."; -$pl = new Playlist(); -$pl->create($playlistName); - -// Add a media clip -$mediaFile = StoredFile::findByOriginalName("ACDC_-_Back_In_Black-sample.ogg"); -if (is_null($mediaFile)) { - echo "Adding test audio clip to the database.\n"; - $v = array("filepath" => __DIR__."/../../audio_samples/OpSound/ACDC_-_Back_In_Black-sample.ogg"); - $mediaFile = StoredFile::Insert($v); - if (PEAR::isError($mediaFile)) { - var_dump($mediaFile); - exit(); - } -} -$pl->addAudioClip($mediaFile->getId()); - -$mediaFile = StoredFile::findByOriginalName("Peter Rudenko - Opening.mp3"); -if (is_null($mediaFile)) { - echo "Adding test audio clip to the database.\n"; - $v = array("filepath" => __DIR__."/../../audio_samples/OpSound/Peter Rudenko - Opening.mp3"); - $mediaFile = StoredFile::Insert($v); - if (PEAR::isError($mediaFile)) { - var_dump($mediaFile); - exit(); - } -} -$pl->addAudioClip($mediaFile->getId()); -echo "done.\n"; - -//$pl2 = Playlist::findPlaylistByName("pypo_playlist_test"); -//var_dump($pl2); - -// Get current time -// In the format YYYY-MM-DD HH:MM:SS.nnnnnn -$startTime = date("Y-m-d H:i:s"); -$endTime = date("Y-m-d H:i:s", time()+(60*60)); - -echo "Removing everything from the scheduler between $startTime and $endTime..."; -// Scheduler: remove any playlists for the next hour -Schedule::RemoveItemsInRange($startTime, $endTime); -// Check for succcess -$scheduleClear = Schedule::isScheduleEmptyInRange($startTime, "01:00:00"); -if (!$scheduleClear) { - echo "\nERROR: Schedule could not be cleared.\n\n"; - var_dump(Schedule::GetItems($startTime, $endTime)); - exit; -} -echo "done.\n"; - -// Schedule the playlist for two minutes from now -echo "Scheduling new playlist...\n"; -$playTime = date("Y-m-d H:i:s", time()+(60*$minutesFromNow)); -$scheduleGroup = new ScheduleGroup(); -$scheduleGroup->add($playTime, null, $pl->getId()); - -echo " SUCCESS: Playlist scheduled at $playTime\n\n"; -?> diff --git a/utils/CleanStor.sh b/utils/CleanStor.sh index 5a5ac5bd8..859f67fb0 100755 --- a/utils/CleanStor.sh +++ b/utils/CleanStor.sh @@ -2,25 +2,25 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- -# This script cleans audio files in the Campcaster storageServer. +# This script cleans audio files in the Airtime storageServer. php -q CleanStor.php "$@" || exit 1 diff --git a/utils/campcaster-backup b/utils/airtime-backup similarity index 88% rename from utils/campcaster-backup rename to utils/airtime-backup index fbfe430c3..fd681b8dc 100755 --- a/utils/campcaster-backup +++ b/utils/airtime-backup @@ -2,26 +2,26 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- -# This script creates a tgz archive of the Campcaster storage. +# This script creates a tgz archive of the Airtime storage. # # To get usage help, try the -h option #------------------------------------------------------------------------------- @@ -44,7 +44,7 @@ destfile="storage$datestr.tar" #------------------------------------------------------------------------------- printUsage() { - echo "This script creates a tgz archive of the Campcaster storage."; + echo "This script creates a tgz archive of the Airtime storage."; echo "parameters:"; echo ""; echo " -d, --destination Destination directory [default:$tmpmaindir]."; @@ -91,7 +91,7 @@ tmpdir=`mktemp -d $tmpmaindir/tmp.XXXXXX` echo "Backuping to $destdir/$destfile :" echo "Dumping database ..." cd $phpdir -php -q campcaster_backup.php > $tmpdir/$dbxml +php -q airtime_backup.php > $tmpdir/$dbxml echo "Packaging stored files ..." cd $phpdir storpath=`php -q getStorPath.php` diff --git a/utils/campcaster-backup.php b/utils/airtime-backup.php similarity index 100% rename from utils/campcaster-backup.php rename to utils/airtime-backup.php diff --git a/utils/campcaster-import b/utils/airtime-import similarity index 79% rename from utils/campcaster-import rename to utils/airtime-import index 55c6b3628..38713c60b 100755 --- a/utils/campcaster-import +++ b/utils/airtime-import @@ -2,26 +2,26 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- -# This script imports audio files to the Campcaster storageServer. +# This script imports audio files to the Airtime storageServer. # # To get usage help, try the -h option #------------------------------------------------------------------------------- @@ -40,4 +40,4 @@ invokePwd=$PWD #echo $invokePwd cd $phpdir -php -q campcaster-import.php --dir "$invokePwd" "$@" || exit 1 +php -q airtime-import.php --dir "$invokePwd" "$@" || exit 1 diff --git a/utils/campcaster-import.php b/utils/airtime-import.php similarity index 96% rename from utils/campcaster-import.php rename to utils/airtime-import.php index 8cb92dcf3..21d47e2de 100644 --- a/utils/campcaster-import.php +++ b/utils/airtime-import.php @@ -2,7 +2,7 @@ /** * Mass import of audio files. * - * @package Campcaster + * @package Airtime * @subpackage StorageAdmin * @copyright 2010 Sourcefabric O.P.S. * @license http://www.gnu.org/licenses/gpl.txt @@ -27,7 +27,7 @@ function camp_import_error_handler() function printUsage() { global $CC_CONFIG; - echo "There are two ways to import audio files into Campcaster: linking\n"; + echo "There are two ways to import audio files into Airtime: linking\n"; echo "or copying.\n"; echo "\n"; echo "Linking has the advantage that it will not duplicate any files,\n"; @@ -40,13 +40,13 @@ function printUsage() echo "your files.\n"; echo "\n"; echo "Usage:\n"; - echo " campcaster-import [OPTIONS] FILES_OR_DIRS\n"; + echo " airtime-import [OPTIONS] FILES_OR_DIRS\n"; echo "\n"; echo "Options:\n"; echo " -l, --link Link to specified files.\n"; echo " Saves storage space, but you cannot move, delete,\n"; echo " or rename the original files, otherwise there will\n"; - echo " be dead air when Campcaster tries to play the file.\n"; + echo " be dead air when Airtime tries to play the file.\n"; echo "\n"; echo " -c, --copy Copy the specified files.\n"; echo " This is useful if you are importing from removable media.\n"; @@ -228,7 +228,7 @@ function camp_import_audio_file($p_filepath, $p_importMode = null, $p_testOnly = $DEBUG_IMPORT = false; echo "========================\n"; -echo "Campcaster Import Script\n"; +echo "Airtime Import Script\n"; echo "========================\n"; $g_errors = 0; //print_r($argv); @@ -238,11 +238,11 @@ if ($DEBUG_IMPORT) { $testonly = false; $importMode = "link"; $files = array("/path/to/your/test/file.mp3"); - $dsn = array('username' => 'campcaster', - 'password' => 'campcaster', + $dsn = array('username' => 'airtime', + 'password' => 'airtime', 'hostspec' => 'localhost', 'phptype' => 'pgsql', - 'database' => 'campcaster'); + 'database' => 'airtime'); } else { $dsn = $CC_CONFIG['dsn']; } @@ -350,4 +350,4 @@ if ($g_errors > 0) { echo " *** Total: ".($g_fileCount+$g_duplicates)." files in $time seconds = $speed files/second.\n"; echo "==========================================================================\n"; -?> \ No newline at end of file +?> diff --git a/utils/campcaster-restore b/utils/airtime-restore similarity index 90% rename from utils/campcaster-restore rename to utils/airtime-restore index 69bfe8383..066c36050 100755 --- a/utils/campcaster-restore +++ b/utils/airtime-restore @@ -2,26 +2,26 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- -# This script restores the data which was backed up with campcaster-backup. +# This script restores the data which was backed up with airtime-backup. # # To get usage help, try the -h option #------------------------------------------------------------------------------- @@ -42,7 +42,7 @@ tarfile0="xmls.tar" #------------------------------------------------------------------------------- printUsage() { - echo "This script restores the data which was backed up with campcaster-backup." + echo "This script restores the data which was backed up with airtime-backup." echo "parameters:"; echo ""; echo " -f, --file File with the backed up data, required."; diff --git a/utils/resetStorage.sh b/utils/resetStorage.sh index af1448766..1006e1295 100755 --- a/utils/resetStorage.sh +++ b/utils/resetStorage.sh @@ -2,22 +2,22 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # To report bugs, send an e-mail to bugs@campware.org # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #------------------------------------------------------------------------------- diff --git a/utils/serbianLatinToCyrillicConverter.py b/utils/serbianLatinToCyrillicConverter.py index e68118995..3cb49283d 100755 --- a/utils/serbianLatinToCyrillicConverter.py +++ b/utils/serbianLatinToCyrillicConverter.py @@ -3,22 +3,22 @@ #------------------------------------------------------------------------------- # Copyright (c) 2010 Sourcefabric O.P.S. # -# This file is part of the Campcaster project. +# This file is part of the Airtime project. # http://campcaster.sourcefabric.org/ # To report bugs, send an e-mail to bugs@campware.org # -# Campcaster is free software; you can redistribute it and/or modify +# Airtime is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # -# Campcaster is distributed in the hope that it will be useful, +# Airtime is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with Campcaster; if not, write to the Free Software +# along with Airtime; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #