Base = $uiBase; $this->activeId =& $_SESSION[UI_PLAYLIST_SESSNAME]['activeId']; $this->title = $this->Base->gb->getPLMetadataValue($this->activeId, UI_MDATA_KEY_TITLE); $this->duration = $this->Base->gb->getPLMetadataValue($this->activeId, UI_MDATA_KEY_DURATION); $this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close'; $this->redirectUrl = UI_BROWSER.'?popup[]=_2PL.simpleManagement&popup[]=_close'; $this->returnUrl = UI_BROWSER.'?act=PL.simpleManagement'; } // constructor public function setReload($url=NULL) { if($url) $this->Base->redirUrl = $url; else $this->Base->redirUrl = $this->reloadUrl; } // fn setReload public function setRedirect($target=FALSE) { if ($target !== FALSE) { $this->Base->redirUrl = UI_BROWSER."?popup[]=$target&popup[]=_close"; } else { $this->Base->redirUrl = $this->redirectUrl; } } // fn setRedirect public function setReturn() { $this->Base->redirUrl = $this->returnUrl; } // fn setReturn private function getPLArray($id) { $res = $this->Base->gb->getPlaylistArray($id); $_SESSION['pl'] = $res; return $res; } // fn getPLArray public function getActiveArr() { if (!$this->activeId) { return FALSE; } return $this->getPLArray($this->activeId); } // fn getActiveArr public function getActiveId() { if (!$this->activeId) { return FALSE; } return $this->activeId; } // fn getActiveId public function activate($plid, $msg=TRUE) { // test if PL available // look PL // store access token to ls_pref abd session // load PL into session if ($this->activeId) { $this->release(); } $userid = $this->Base->gb->playlistIsAvailable($plid, $this->Base->sessid); if ($userid !== TRUE) { if (UI_WARNING) { $this->Base->_retMsg('Playlist has been locked by "$1".', Subjects::GetSubjName($userid)); } return FALSE; } $res = $this->Base->gb->lockPlaylistForEdit($plid, $this->Base->sessid); if (PEAR::isError($res) || $res === FALSE) { if (UI_VERBOSE === TRUE) { print_r($res); } $this->Base->_retMsg('Unable to open playlist "$1".', $this->Base->getMetadataValue($plid, UI_MDATA_KEY_TITLE)); return FALSE; } $this->Base->gb->savePref($this->Base->sessid, UI_PL_ACCESSTOKEN_KEY, $plid); $this->activeId = $plid; if ($msg && UI_VERBOSE) { $this->Base->_retMsg('Playlist "$1" opened.', $this->Base->getMetadataValue($plid, UI_MDATA_KEY_TITLE)); } return TRUE; } public function release($msg=TRUE) { // release PL // delete PL from session if (!$this->activeId) { if (UI_WARNING) { $this->Base->_retMsg('There is no playlist available to unlock.'); } return FALSE; } $res = $this->Base->gb->releaseLockedPlaylist($this->activeId, $this->Base->sessid); if (PEAR::isError($res) || $res === FALSE) { if (UI_VERBOSE === TRUE) { print_r($res); } if (UI_WARNING) { $this->Base->_retMsg('Unable to release playlist.'); } return FALSE; } $this->activeId = NULL; $this->Base->gb->delPref($this->Base->sessid, UI_PL_ACCESSTOKEN_KEY); return TRUE; } // fn release public function reportLookedPL($setMsg=FALSE) { if (is_string($this->Base->gb->loadPref($this->Base->sessid, UI_PL_ACCESSTOKEN_KEY))) { if ($setMsg == TRUE) { $this->Base->_retMsg('Found locked playlist.'); } return TRUE; } return FALSE; } // fn reportLookedPL public function loadLookedFromPref() { if (is_string($plid = $this->Base->gb->loadPref($this->Base->sessid, UI_PL_ACCESSTOKEN_KEY))) { if (!$this->Base->gb->existsPlaylist($plid)) { $this->Base->gb->delPref($this->Base->sessid, UI_PL_ACCESSTOKEN_KEY); $this->Base->_retMsg('Playlist not found in database.'); $this->Base->redirUrl = UI_BROWSER.'?popup[]=_2PL.simpleManagement&popup[]=_close'; return FALSE; } $this->activeId = $plid; $this->Base->redirUrl = UI_BROWSER.'?popup[]=_2PL.simpleManagement&popup[]=_close'; return TRUE; } return FALSE; } // fn loadLookedFromPref /** * Add item to playlist * * @param int $elemIds * @param array $duration * @return unknown */ public function addItem($elemIds, $pos=NULL, $duration=NULL) { $fadeIn = NULL; $fadeOut = NULL; $cliplength = NULL; $cueIn = NULL; $cueIn = NULL; /* gstreamer bug: Warning: The clipEnd can't be bigger than ninety nine percent (99%) of the clipLength, this means also if no clipEnd is defined it should be 00:00:00.000000 and not the clipLength. $clipend = '00:00:00.000000'; */ if (!$elemIds) { if (UI_WARNING) { $this->Base->_retMsg('No item(s) selected.'); } return FALSE; } if (!is_array($elemIds)) { $elemIds = array($elemIds); } if (isset($duration)) { $length = sprintf('%02d', $duration['H']).':'.sprintf('%02d', $duration['i']).':'.sprintf('%02d', $duration['s']).'.000000'; } foreach ($elemIds as $elemId) { $r = $this->Base->gb->addAudioClipToPlaylist($this->activeId, $elemId, $pos, $fadeIn, $fadeOut, $cliplength, $cueIn, $cueOut); if (PEAR::isError($r)) { if (UI_VERBOSE === TRUE) { print_r($r); } $this->Base->_retMsg('Error while trying to add item to playlist.'); return FALSE; } } $this->Base->SCRATCHPAD->reloadActivePLMetadata($this->activeId); return TRUE; } // fn addItem public function removeItem($positions) { if (!$positions) { if (UI_WARNING) { $this->Base->_retMsg('No item(s) selected.'); } return FALSE; } if (!is_array($positions)) $positions = array($positions); //so the automatic updating of playlist positioning doesn't affect removal. sort($positions); $positions = array_reverse($positions); foreach ($positions as $pos) { if ($this->Base->gb->delAudioClipFromPlaylist($this->activeId, $pos) !== TRUE) { $this->Base->_retMsg('Cannot remove item from playlist.'); return FALSE; } } $this->Base->SCRATCHPAD->reloadActivePLMetadata($this->activeId); return TRUE; } // fn removeItem /** * Create a playlist. * * @param array $ids * Optional list of media files to be added to the playlist * after it is created. * @return FALSE|int */ public function create($ids = null) { // create PL // activate // add clip if $id is set if ($this->activeId) { $this->release(); } $datetime = strftime('%Y-%m-%d %H:%M:%S'); $plid = $this->Base->gb->createPlaylist($datetime, $this->Base->sessid); if (!$plid) { $this->Base->_retMsg('Cannot create playlist.'); return FALSE; } $this->Base->gb->setPLMetadataValue($plid, UI_MDATA_KEY_CREATOR, $this->Base->login); $this->Base->gb->setPLMetadataValue($plid, UI_MDATA_KEY_DESCRIPTION, tra('created at $1', $datetime)); if ($this->activate($plid)===FALSE) { $this->Base->_retMsg('Cannot activate playlist.'); return FALSE; } if ($ids) { if ($this->addItem($ids)!==TRUE) { return FALSE; } } return $plid; } // fn create public function moveItem($oldPos, $newPos) { $response = array(); $r = $this->Base->gb->moveAudioClipInPlaylist($this->activeId, $oldPos, $newPos); if (PEAR::isError($r) || $r === FALSE) { $response["error"] = "Failed to Move file."; $response["oldPos"] = $oldPos; $response["newPos"] = $newPos; } else{ $response["error"] = FALSE; } die(json_encode($response)); } // fn moveItem public function setClipLength($pos, $cueIn, $cueOut) { $response = array(); $res = $this->Base->gb->changeClipLength($this->activeId, $pos, $cueIn, $cueOut); $response = $res; die(json_encode($response)); } public function setFadeLength($pos, $fadeIn, $fadeOut) { $response = array(); $res = $this->Base->gb->changeFadeInfo($this->activeId, $pos, $fadeIn, $fadeOut); $response = $res; die(json_encode($response)); } // fn setFade public function metaDataForm($langid) { include(dirname(__FILE__).'/formmask/metadata.inc.php'); $id = $this->activeId; $langid = $langid ? $langid : UI_DEFAULT_LANGID; foreach ($mask['playlist'] as $k=>$v) { $mask['playlist'][$k]['element'] = uiBase::formElementEncode($v['element']); $getval = $this->Base->gb->getPLMetadataValue($id, $v['element'], $langid); if ($getval) { $mask['playlist'][$k]['default'] = $getval; //$mask['playlist'][$k]['attributes']['onFocus'] = 'MData_confirmChange(this)'; }; } $form = new HTML_QuickForm('editMetaData', UI_STANDARD_FORM_METHOD, UI_HANDLER); uiBase::parseArrayToForm($form, $mask['basics']); uiBase::parseArrayToForm($form, $mask['playlist']); uiBase::parseArrayToForm($form, $mask['buttons']); $form->setConstants(array('act' => 'PL.editMetaData', 'id' => $id, 'curr_langid' => $langid ) ); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); $output['main'] = $renderer->toArray(); $form = new HTML_QuickForm('langswitch', UI_STANDARD_FORM_METHOD, UI_BROWSER); uiBase::parseArrayToForm($form, $mask['langswitch']); $form->setConstants(array('target_langid' => $langid)); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); $output['langswitch'] = $renderer->toArray(); #print_r($output); return $output; } // fn metadataForm public function editMetaData($formdata) { include(dirname(__FILE__).'/formmask/metadata.inc.php'); $id = $this->activeId; $curr_langid = $formdata['curr_langid']; ## if language switched stay on metadataform ## if ($curr_langid === $formdata['target_langid']) { $this->Base->redirUrl = UI_BROWSER."?act=PL.simpleManagement"; } else { $this->Base->redirUrl = UI_BROWSER."?act=PL.editMetaData&id=$id&curr_langid=".$formdata['target_langid']; } foreach ($mask['playlist'] as $k=>$v) { $formdata[uiBase::formElementEncode($v['element'])] ? $mData[uiBase::formElementDecode($v['element'])] = $formdata[uiBase::formElementEncode($v['element'])] : NULL; } if (!count($mData)) { return; } foreach ($mData as $key => $val) { $r = $this->Base->gb->setPLMetadataValue($id, $key, $val, $curr_langid); if (PEAR::isError($r)) { if (UI_VERBOSE === TRUE) { print_r($r); } $this->Base->_retMsg('Unable to set "$1" to value "$2".', $key, $val); } } if (UI_VERBOSE) { $this->Base->_retMsg('Metadata saved.'); } $this->Base->SCRATCHPAD->reloadMetadata(); } // fn editMetadata public function deleteActive() { $id = $this->activeId; $this->release(FALSE); $res = $this->Base->gb->deletePlaylist($id); if ($res === TRUE) { return $id; } $this->Base->_retMsg('Cannot delete this playlist.'); return FALSE; } // fn deleteActive public function delete($id) { $res = $this->Base->gb->deletePlaylist($id); if ($res === TRUE) { return $id; } $this->Base->_retMsg('Cannot delete this playlist.'); return FALSE; } public function isAvailable($id) { if ($this->Base->gb->playlistIsAvailable($id, $this->Base->sessid) === TRUE) { return TRUE; } return FALSE; } // fn isAvailable function isUsedBy($id) { if (($userid = $this->Base->gb->playlistIsAvailable($id, $this->Base->sessid)) !== TRUE) { return Subjects::GetSubjName($userid); } return FALSE; } // fn isUsedBy public function exportForm($id,$mask) { $mask['act']['constant'] = 'PL.export'; $mask['id']['constant'] = $id; $form = new HTML_QuickForm('PL_exportForm', UI_STANDARD_FORM_METHOD, UI_HANDLER); uiBase::parseArrayToForm($form, $mask); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); return $renderer->toArray(); } // fn exportForm public function importForm($id, $mask) { $form = new HTML_QuickForm('PL_importForm', UI_STANDARD_FORM_METHOD, UI_HANDLER); //print_r($mask); uiBase::parseArrayToForm($form, $mask); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); return $renderer->toArray(); } // fn importForm } // class uiPlaylist ?>