279 lines
11 KiB
PHP
279 lines
11 KiB
PHP
<?php
|
|
|
|
class LibraryController extends Zend_Controller_Action
|
|
{
|
|
|
|
protected $pl_sess = null;
|
|
protected $search_sess = null;
|
|
|
|
public function init()
|
|
{
|
|
$ajaxContext = $this->_helper->getHelper('AjaxContext');
|
|
$ajaxContext->addActionContext('contents', 'json')
|
|
->addActionContext('delete', 'json')
|
|
->addActionContext('delete-group', 'json')
|
|
->addActionContext('context-menu', 'json')
|
|
->addActionContext('get-file-meta-data', 'html')
|
|
->addActionContext('upload-file-soundcloud', 'json')
|
|
->addActionContext('get-upload-to-soundcloud-status', 'json')
|
|
->addActionContext('set-num-entries', 'json')
|
|
->initContext();
|
|
|
|
$this->pl_sess = new Zend_Session_Namespace(UI_PLAYLIST_SESSNAME);
|
|
$this->search_sess = new Zend_Session_Namespace("search");
|
|
}
|
|
|
|
public function indexAction() {
|
|
|
|
$this->_helper->layout->setLayout('library');
|
|
|
|
$this->view->headScript()->appendFile($this->view->baseUrl('/js/airtime/library/events/library_playlistbuilder.js'),'text/javascript');
|
|
|
|
$this->_helper->actionStack('library', 'library');
|
|
$this->_helper->actionStack('index', 'playlist');
|
|
}
|
|
|
|
public function libraryAction()
|
|
{
|
|
$request = $this->getRequest();
|
|
$baseUrl = $request->getBaseUrl();
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/contextmenu/jquery.contextMenu.js','text/javascript');
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/js/jquery.dataTables.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.pluginAPI.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.fnSetFilteringDelay.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColVis.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.ColReorderResize.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.FixedColumns.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/datatables/plugin/dataTables.TableTools.js','text/javascript');
|
|
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/library.js','text/javascript');
|
|
$this->view->headScript()->appendFile($baseUrl.'/js/airtime/library/advancedsearch.js','text/javascript');
|
|
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'/css/media_library.css');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'/css/jquery.contextMenu.css');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColVis.css');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'/css/datatables/css/ColReorder.css');
|
|
$this->view->headLink()->appendStylesheet($baseUrl.'/css/TableTools.css');
|
|
|
|
$this->_helper->viewRenderer->setResponseSegment('library');
|
|
|
|
$form = new Application_Form_AdvancedSearch();
|
|
$form->addGroup(1, 1);
|
|
|
|
$this->search_sess->next_group = 2;
|
|
$this->search_sess->next_row[1] = 2;
|
|
$this->view->form = $form;
|
|
$this->view->md = $this->search_sess->md;
|
|
}
|
|
|
|
public function contextMenuAction()
|
|
{
|
|
global $CC_CONFIG;
|
|
|
|
$id = $this->_getParam('id');
|
|
$type = $this->_getParam('type');
|
|
$request = $this->getRequest();
|
|
$baseUrl = $request->getBaseUrl();
|
|
|
|
$userInfo = Zend_Auth::getInstance()->getStorage()->read();
|
|
$user = new Application_Model_User($userInfo->id);
|
|
|
|
if ($type === "audioclip") {
|
|
|
|
$file = Application_Model_StoredFile::Recall($id);
|
|
|
|
$menu["edit"] = array("name"=> "Edit Metadata", "icon" => "edit", "url" => "/library/edit-file-md/id/{$id}");
|
|
|
|
if ($user->isAdmin()) {
|
|
$menu["delete"] = array("name"=> "Delete", "icon" => "delete");
|
|
}
|
|
|
|
$url = $file->getRelativeFileUrl($baseUrl).'/download/true';
|
|
$menu["download"] = array("name" => "Download", "url" => $url);
|
|
|
|
if (Application_Model_Preference::GetUploadToSoundcloudOption()) {
|
|
|
|
//create a menu separator
|
|
$menu["sep1"] = "-----------";
|
|
|
|
//create a sub menu for Soundcloud actions.
|
|
$menu["soundcloud"] = array("name" => "Soundcloud", "icon" => "soundcloud", "items" => array());
|
|
|
|
$scid = $file->getSoundCloudId();
|
|
|
|
if (!is_null($scid)){
|
|
$text = "Re-upload to SoundCloud";
|
|
}
|
|
else {
|
|
$text = "Upload to SoundCloud";
|
|
}
|
|
|
|
$menu["soundcloud"]["items"]["upload"] = array("name" => $text, "url" => "/library/upload-file-soundcloud/id/{$id}");
|
|
|
|
if ($scid > 0){
|
|
$url = $file->getSoundCloudLinkToFile();
|
|
$menu["soundcloud"]["items"]["view"] = array("name" => "View on Soundcloud", "url" => $url);
|
|
}
|
|
}
|
|
}
|
|
else if ($type === "playlist") {
|
|
|
|
if (!isset($this->pl_sess->id) || $this->pl_sess->id !== $id) {
|
|
$menu["edit"] = array("name"=> "Edit", "icon" => "edit");
|
|
}
|
|
|
|
$menu["delete"] = array("name"=> "Delete", "icon" => "delete");
|
|
}
|
|
|
|
$this->view->items = $menu;
|
|
}
|
|
|
|
public function deleteAction()
|
|
{
|
|
$ids = $this->_getParam('ids');
|
|
$userInfo = Zend_Auth::getInstance()->getStorage()->read();
|
|
$user = new Application_Model_User($userInfo->id);
|
|
|
|
if ($user->isAdmin()) {
|
|
|
|
if (!is_null($ids)) {
|
|
foreach ($ids as $key => $id) {
|
|
$file = Application_Model_StoredFile::Recall($id);
|
|
|
|
if (PEAR::isError($file)) {
|
|
$this->view->message = $file->getMessage();
|
|
return;
|
|
}
|
|
else if(is_null($file)) {
|
|
$this->view->message = "file doesn't exist";
|
|
return;
|
|
}
|
|
|
|
$res = $file->delete();
|
|
|
|
if (PEAR::isError($res)) {
|
|
$this->view->message = $res->getMessage();
|
|
return;
|
|
}
|
|
else {
|
|
$res = settype($res, "integer");
|
|
$data = array("filepath" => $file->getFilePath(), "delete" => $res);
|
|
Application_Model_RabbitMq::SendMessageToMediaMonitor("file_delete", $data);
|
|
}
|
|
}
|
|
|
|
$this->view->ids = $ids;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function contentsAction()
|
|
{
|
|
$params = $this->getRequest()->getParams();
|
|
$datatables = Application_Model_StoredFile::searchFilesForPlaylistBuilder($params);
|
|
|
|
/*
|
|
foreach($datatables["aaData"] as &$data){
|
|
if($data['ftype'] == 'audioclip'){
|
|
$file = Application_Model_StoredFile::Recall($data['id']);
|
|
$scid = $file->getSoundCloudId();
|
|
if($scid == "-2"){
|
|
$data['track_title'] .= '<span id="'.$data['id'].'" class="small-icon progress"></span>';
|
|
}else if($scid == "-3"){
|
|
$data['track_title'] .= '<span id="'.$data['id'].'" class="small-icon sc-error"></span>';
|
|
}else if(!is_null($scid)){
|
|
$data['track_title'] .= '<span id="'.$data['id'].'" class="small-icon soundcloud"></span>';
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|
|
die(json_encode($datatables));
|
|
}
|
|
|
|
public function editFileMdAction()
|
|
{
|
|
$request = $this->getRequest();
|
|
$form = new Application_Form_EditAudioMD();
|
|
|
|
$file_id = $this->_getParam('id', null);
|
|
$file = Application_Model_StoredFile::Recall($file_id);
|
|
$form->populate($file->getDbColMetadata());
|
|
|
|
if ($request->isPost()) {
|
|
if ($form->isValid($request->getPost())) {
|
|
|
|
$formdata = $form->getValues();
|
|
$file->setDbColMetadata($formdata);
|
|
|
|
$data = $file->getMetadata();
|
|
|
|
// set MDATA_KEY_FILEPATH
|
|
$data['MDATA_KEY_FILEPATH'] = $file->getFilePath();
|
|
Logging::log($data['MDATA_KEY_FILEPATH']);
|
|
Application_Model_RabbitMq::SendMessageToMediaMonitor("md_update", $data);
|
|
|
|
|
|
$this->_helper->redirector('index');
|
|
}
|
|
}
|
|
|
|
$this->view->form = $form;
|
|
}
|
|
|
|
public function getFileMetaDataAction()
|
|
{
|
|
$id = $this->_getParam('id');
|
|
$type = $this->_getParam('type');
|
|
|
|
if ($type == "audioclip") {
|
|
$file = Application_Model_StoredFile::Recall($id);
|
|
$this->view->type = $type;
|
|
$this->view->md = $file->getMetadata();
|
|
}
|
|
else if ($type == "playlist") {
|
|
$file = new Application_Model_Playlist($id);
|
|
$this->view->type = $type;
|
|
$this->view->md = $file->getAllPLMetaData();
|
|
$this->view->contents = $file->getContents();
|
|
}
|
|
|
|
}
|
|
|
|
public function uploadFileSoundcloudAction(){
|
|
$id = $this->_getParam('id');
|
|
$res = exec("/usr/lib/airtime/utils/soundcloud-uploader $id > /dev/null &");
|
|
// we should die with ui info
|
|
die();
|
|
}
|
|
|
|
public function getUploadToSoundcloudStatusAction(){
|
|
$id = $this->_getParam('id');
|
|
$type = $this->_getParam('type');
|
|
if($type == "show"){
|
|
$show_instance = new Application_Model_ShowInstance($id);
|
|
$this->view->sc_id = $show_instance->getSoundCloudFileId();
|
|
$file = $show_instance->getRecordedFile();
|
|
$this->view->error_code = $file->getSoundCloudErrorCode();
|
|
$this->view->error_msg = $file->getSoundCloudErrorMsg();
|
|
}else{
|
|
$file = Application_Model_StoredFile::Recall($id);
|
|
$this->view->sc_id = $file->getSoundCloudId();
|
|
$this->view->error_code = $file->getSoundCloudErrorCode();
|
|
$this->view->error_msg = $file->getSoundCloudErrorMsg();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stores the number of entries user chose to show in the Library
|
|
* to the pref db
|
|
*/
|
|
public function setNumEntriesAction() {
|
|
$request = $this->getRequest();
|
|
$numEntries = $request->getParam('numEntries');
|
|
Application_Model_Preference::SetLibraryNumEntries($numEntries);
|
|
}
|
|
}
|