input; $id = $jinput->get('id', 0, 'int'); //check if ID exists on DB, otherwise show 404 $exists = true; $view = $jinput->get('view', '', 'cmd'); $db = JFactory::getDbo(); $form = false; $layout = $jinput->get('layout', '', 'string'); if($layout == "form" || $layout == "simpleform"){ $form = true; } $query = null; switch ($view) { case "album": $query = 'SELECT id FROM #__muscol_albums WHERE id = ' . $id ; break; case "artist": case "songs": $query = 'SELECT id FROM #__muscol_artists WHERE id = ' . $id ; break; case "song": $query = 'SELECT id FROM #__muscol_songs WHERE id = ' . $id ; break; case "file": $query = 'SELECT id FROM #__muscol_songs WHERE id = ' . $id ; $zip = JRequest::getInt( 'zip' ) ; if($zip){//is album $query = 'SELECT id FROM #__muscol_albums WHERE id = ' . $id ; } break; case "playlist": $query = 'SELECT 1 FROM #__muscol_playlists' ; break; case "artists": require_once(JPATH_SITE.DS.'components'.DS.'com_muscol'.DS.'helpers'.DS.'alphabets.php'); $letter = $jinput->get('letter', '', 'string'); $characters = MusColAlphabets::get_characters(); $inicials = $characters['internal'] ; if(!in_array($letter, $inicials) && $letter != "") $exists = false; break; case "search": case "playlists": break; default: JError::raiseError(404, JText::_('JERROR_PAGE_NOT_FOUND')); break; } if($query){ $db->setQuery($query); $exists = $db->loadResult(); } if(!$form){ if(!$exists){ JError::raiseError(404, JText::_('JERROR_PAGE_NOT_FOUND')); } } elseif($id){ if(!$exists){ JError::raiseError(404, JText::_('JERROR_PAGE_NOT_FOUND')); } } if ($form) { $user = JFactory::getUser(); $id = $jinput->get('id', '', 'int'); $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; if(!$user->id){ // not registered switch($view){ case "album": $msg = JText::_('NOT_AUTHORIZED_ALBUMS'); break; case "artist": $msg = JText::_('NOT_AUTHORIZED_ARTISTS'); break; case "song": $msg = JText::_('NOT_AUTHORIZED_SONGS'); break; default: $msg = JText::_('NOT_AUTHORIZED_ALBUMS'); } $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid); $this->setRedirect($link, $msg); } else{ // registered switch($view){ case "album": $can_edit = $this->check_album_permission($id); $msg = JText::_('NOT_AUTHORIZED_ALBUM'); $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $id . $itemid); break; case "song": $can_edit = $this->check_song_permission($id); $msg = JText::_('NOT_AUTHORIZED_SONG'); $link = JRoute::_('index.php?option=com_muscol&view=song&id='. $id . $itemid); break; case "artist": $can_edit = $this->check_artist_permission($id); $msg = JText::_('NOT_AUTHORIZED_ARTIST'); $link = JRoute::_('index.php?option=com_muscol&view=artist&id='. $id . $itemid); if(!$user->authorise('muscol.createartists', 'com_muscol')){ $can_edit = false ; $msg = JText::_('NOT_AUTHORIZED_ARTISTS'); $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid); } break; default: $can_edit = $this->check_album_permission($id); $msg = JText::_('NOT_AUTHORIZED_ALBUMS'); $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $id . $itemid); } if(!$can_edit){ if(!$id) $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid); $this->setRedirect($link, $msg); } else{ if($view == "album"){ $db = JFactory::getDbo(); if(!$user->authorise('muscol.createalbumsallartists', 'com_muscol')) $where_clause = ' WHERE user_id = ' . $user->id; else $where_clause = ''; $query = 'SELECT COUNT(*) FROM #__muscol_artists '. $where_clause ; $db->setQuery($query); $has_artists = $db->loadResult(); if(!$has_artists){ if($user->authorise('muscol.createartists', 'com_muscol')){ $msg = JText::_('ADD_ARTIST_FIRST'); $link = JRoute::_('index.php?option=com_muscol&view=artist&layout=form' . $itemid, false); } else{ $msg = JText::_('NO_ARTISTS_AVAILABLE'); $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid, false); } $this->setRedirect($link, $msg); } } parent::display($cachable,$urlparams); // OK } } } else { parent::display($cachable,$urlparams); } } function check_album_permission($album_id){ if(!$album_id) return true; // everybody can add an album if is a registered user $db = JFactory::getDbo(); $user = JFactory::getUser(); $query = 'SELECT user_id FROM #__muscol_albums WHERE id = ' . $album_id ; $db->setQuery($query); $album_creator = $db->loadResult(); if($album_creator == $user->id) return true; else return false; } function check_artist_permission($artist_id){ if(!$artist_id) return true; // everybody can add an album if is a registered user $db = JFactory::getDBO(); $user = JFactory::getUser(); $query = 'SELECT user_id FROM #__muscol_artists WHERE id = ' . $artist_id ; $db->setQuery($query); $artist_creator = $db->loadResult(); if($artist_creator == $user->id) return true; else return false; } function check_song_permission($song_id){ if(!$song_id) return true; // everybody can add a song if is a registered user $db = JFactory::getDbo(); $user = JFactory::getUser(); $query = 'SELECT user_id FROM #__muscol_songs WHERE id = ' . $song_id ; $db->setQuery($query); $song_creator = $db->loadResult(); if($song_creator == $user->id) return true; else return false; } function save_album() { $jinput = JFactory::getApplication()->input; $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $artist_id = 0; $new_artist = $jinput->get('newartist', '', 'string'); if($new_artist){ $model = $this->getModel('artist'); $artist_data['id'] = 0 ; $artist_data['artist_name'] = $new_artist ; $artist_data['genre_id'] = $jinput->get('genre_id', 0, 'int'); if ($artist_id = $model->store($artist_data)) { $msg_art = JText::_( 'ARTIST_SAVED' ); JRequest::setVar('artist_id', $artist_id); } else { $msg_art = JText::_( 'ERROR_SAVING_ARTIST' ); } } $model = $this->getModel('album'); if ($id = $model->store($artist_id)) { $msg = JText::_( 'ALBUM_SAVED' ); $saved_ok = true; } else { $msg = JText::_( 'ERROR_SAVING_ALBUM' ); $saved_ok = false; } $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $id . $itemid) ; $this->setRedirect($link, $msg . " " . $msg_art); } function save_artist() { $user = JFactory::getUser(); $model = $this->getModel('artist'); $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; if (!$user->authorise('muscol.createartists', 'com_muscol')) { $can_edit = false ; $msg = JText::_('NOT_AUTHORIZED_ARTISTS'); $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid); $this->setRedirect($link, $msg); } else { if ($id = $model->store()) { $msg = JText::_( 'ARTIST_SAVED' ); $saved_ok = true; } else { $msg = JText::_( 'ERROR_SAVING_ARTIST' ); $saved_ok = false; } $link = JRoute::_('index.php?option=com_muscol&view=artist&id='. $id . $itemid) ; $this->setRedirect($link, $msg); } } function save_song() { $jinput = JFactory::getApplication()->input; $model = $this->getModel('song'); if ($album_id = $model->store()) { $msg = JText::_( 'SONG_SAVED' ); } else { $msg = JText::_( 'ERROR_SAVING_SONG' ); } $params = JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $id = $jinput->get('id', 0, 'int'); switch($jinput->get('from', '', 'string')){ case "album": $link = JRoute::_('index.php?option=com_muscol&view=album&layout=form&id=' . $album_id . $itemid); break; default: if(!$id) $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $album_id . $itemid); else $link = JRoute::_('index.php?option=com_muscol&view=song&id='. $id . $itemid); } $this->setRedirect($link, $msg); } function save_comment() { $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $model = $this->getModel('album'); $comment = $model->store_comment() ; $comment->username = $user->name; if ($comment->id) { $msg = JText::_( 'COMMENT_SAVED' ); $saved_ok = true; $type = "message"; } else { $msg = JText::_( 'ERROR_SAVING_COMMENT' ); $saved_ok = false; $type = "error"; } $jinput = $mainframe->input; $album_id = $jinput->getInt('album_id', 0); $comment_type = $jinput->getCmd('comment_type'); if($saved_ok){ //new plugin access $dispatcher = JEventDispatcher::getInstance(); $plugin_ok = JPluginHelper::importPlugin('muscol'); $results = $dispatcher->trigger('onSaveComment', array ($album_id, $comment_type)); } $notifications = array(); $notifications[0] = new stdClass(); $notifications[0]->type = "message"; $notifications[0]->message = $msg; $return = new stdClass(); $return->notifications = $notifications; $returncomments = array(); $returncomments[] = $comment; $return->content = MusColHelper::prepareCommentsData($returncomments); //we return echo json_encode($return); $mainframe->close(); } function rate(){ $mainframe = JFactory::getApplication(); $model = $this->getModel('rating'); $user_id = JFactory::getUser()->id; $saved_ok = false; if ($user_id) { if ($model->store_rating()) { $msg = JText::_( 'RATING_SAVED' ); $saved_ok = true; } else { $msg = JText::_( 'ERROR_SAVING_RATING' ); $saved_ok = false; } } $jinput = $mainframe->input; $type = $jinput->get('type', 'album', 'string'); $album_id = $jinput->get('album_id', 0, 'int'); if($saved_ok){ //new plugin access $dispatcher = JEventDispatcher::getInstance(); $plugin_ok = JPluginHelper::importPlugin('muscol'); if ($type == 'album') $results = $dispatcher->trigger('onSaveRatingAlbum', array ($album_id)); else $results = $dispatcher->trigger('onSaveRatingSong', array ($album_id)); } $notifications = array(); $notifications[0] = new stdClass(); if (!$user_id) { $notifications[0]->type = "message"; $notifications[0]->message = JText::_('ERROR_LOGIN_FIRST'); } else { if ($saved_ok) { $notifications[0]->type = "message"; $notifications[0]->message = JText::_('RATING_SAVED'); } else { $notifications[0]->type = "warning"; $notifications[0]->message = JText::_('ERROR_SAVING_RATING'); } } echo json_encode(array( 'success' => $saved_ok, 'id' => $album_id, 'rating' => $model->getAlbumRating($album_id, $type), 'notifications' => $notifications )); $mainframe->close(); } //AJAX function to add a song to a playlist function add_song_to_playlist(){ $mainframe = JFactory::getApplication(); $db = JFactory::getDbo(); $jinput = $mainframe->input; $id = $jinput->get('id', 1, 'int'); $uri = JFactory::getUri(); if($this->check_playlist_permission( $id )){ $song_id = $jinput->get('song_id', 1, 'int'); $model = $this->getModel('playlist'); $return = $model->add_item($id,$song_id, 's'); $query = " SELECT s.*,al.name as album_name, al.image, ar.artist_name FROM #__muscol_songs as s LEFT JOIN #__muscol_artists AS ar ON ar.id = s.artist_id LEFT JOIN #__muscol_albums AS al ON al.id = s.album_id WHERE s.id = ".$song_id; $db->setQuery($query); $song = $db->loadObject(); $thefile = null; if (MusColHelper::isYoutubeFile($song->file)) { $thefile = MusColHelper::getYoutubeURL($song->file); } else { $thefile = MusColHelper::getSongFileURL($song); } $return = new stdClass(); $return->notifications = array(); $return->notifications[0] = new stdClass(); $return->notifications[0]->type = "message"; $return->notifications[0]->message = JText::_('SONG_ADDED_TO_PLAYLIST'); $return->playlistsong = new stdClass(); $return->playlistsong->title = $song->name ; $return->playlistsong->description = $song->artist_name ; $return->playlistsong->file = $thefile ; $return->playlistsong->image = $uri->base() . "images/albums/" . $song->image ; $songs = MusColHelper::prepareSongsData(array($song)); $song = $songs[0]; $return->content = $song; echo json_encode($return); } else echo 0; $mainframe->close(); } function remove_song_playlist(){ $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $id = $jinput->get('id', 0, 'int'); if ($this->check_playlist_permission($id)) { $model = $this->getModel('playlist'); if (!$model->remove_songs()) { $msg = JText::_( 'ERROR_SONGS_DELETED_PLAYLIST' ); $msg_type = "error"; $saved_ok = false; } else { $msg = JText::_( 'SONGS_DELETED_PLAYLIST' ); $msg_type = "message"; $saved_ok = true; } } else { $msg = JText::_('NOT_ALLOWED_EDIT_PLAYLIST'); $msg_type = "notice"; } echo json_encode($saved_ok); $mainframe->close(); } function save_playlist_order(){ $jinput = JFactory::getApplication()->input; $playlist_id = $jinput->post->get('id', 0, 'int'); if($this->check_playlist_permission($playlist_id)){ $model = $this->getModel('playlist'); if(!$model->save_playlist_order()) { $msg = JText::_( 'ERROR_PLAYLIST_ORDER_SAVED' ); $msg_type = "error"; } else { $msg = JText::_( 'PLAYLIST_ORDER_SAVED' ); $msg_type = "message"; } } else{ $msg = JText::_('NOT_ALLOWED_EDIT_PLAYLIST'); $msg_type = "notice"; } $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $this->setRedirect( 'index.php?option=com_muscol&view=playlist&id=' . $playlist_id . $itemid, $msg, $msg_type ); } function consolidate_playlist(){ $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $user = JFactory::getUser(); $params =JComponentHelper::getParams( 'com_muscol' ); if ($user->id && $user->authorise('muscol.allowcreateplaylists', 'com_muscol')) { $model = $this->getModel('playlist'); if (!$model->consolidate_playlist()) { $msg = JText::_( 'ERROR_SAVING_PLAYLIST' ); $msg_type = "error"; } else { $msg = JText::_( 'PLAYLIST_SAVED' ); $msg_type = "message"; $saved_ok = true; } } else { $msg = JText::_( 'ADMIN_DISABLED_PLAYLIST_SAVING' ); $msg_type = "message"; } $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; if($saved_ok){ /**** JOMSOCIAL INTEGRATION *******/ if(file_exists( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php') && $params->get('notify_jomsocial')){ $query = ' SELECT title as name,user_id, id FROM #__muscol_playlists ORDER BY id DESC ' ; $db = JFactory::getDbo(); $db->setQuery($query); $item = $db->loadObject() ; $link = JRoute::_('index.php?option=com_muscol&view=playlist&id='.$item->id . $itemid ); CFactory::load( 'libraries' , 'activities' ); $user = JFactory::getUser(); $act = new stdClass(); $act->actor = $user->id; $act->target = 0; $act->title = "{actor} ".JText::_('created a')." " . JText::_('new playlist') ."" ; $act->app = 'myalbums'; $act->cid = $user->id; CActivityStream::add($act); } /*************/ } $link = JRoute::_('index.php?option=com_muscol&view=playlists' . $itemid ); $this->setRedirect( $link, $msg, $msg_type ); } function save_playlist(){ $mainframe = JFactory::getApplication(); $user = JFactory::getUser(); $jinput = $mainframe->input; $playlist_id = $jinput->get('id', 0, 'int'); if ($playlist_id == 0) { $this->consolidate_playlist(); return; } if ($user->id && $this->check_playlist_permission($playlist_id)) { // only can save playlists registered users $model = $this->getModel('playlist'); if(!$model->save_playlist()) { $msg = JText::_( 'ERROR_SAVING_PLAYLIST' ); $msg_type = "error"; } else { $msg = JText::_( 'PLAYLIST_SAVED' ); $msg_type = "message"; } } else{ $msg = JText::_( 'You are not allowed to edit this playlist' ); $msg_type = "notice"; } $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $this->setRedirect( 'index.php?option=com_muscol&view=playlist&id=' . $playlist_id . $itemid, $msg, $msg_type ); } function new_playlist_ajax() { $mainframe = JFactory::getApplication(); $jinput = $mainframe->input; $data = array(); $data['title'] = $jinput->get->get('title', '', 'string'); $data['description'] = MusColHelper::getHTMLInput('description'); $data['user_id'] = JFactory::getUser()->id; $song = strval($jinput->get->get('song', 0, 'int')); if ($song) $data['songs'] = $song; $return = new stdClass(); $return->notifications = array(); $return->notifications[0] = new stdClass(); if ($data['user_id']) { $model = $this->getModel('playlist'); $playlist_id = $model->store($data); if ($playlist_id) { $return->notifications[0]->type = "message"; $return->notifications[0]->message = JText::_('PLAYLIST_CREATED'); } else { $return->notifications[0]->type = "error"; $return->notifications[0]->message = JText::_('ERROR_CREATING_PLAYLIST'); } $return->content = new stdClass(); $return->content->playlist_id = $playlist_id; $return->lastPlaylists = MusColHelper::getLastPlaylists(); } else { $return->notifications[0]->type = "error"; $return->notifications[0]->message = JText::_('REGISTER_BEFORE'); } echo json_encode($return); $mainframe->close(); } function remove_playlist(){ $jinput = JFactory::getApplication()->input; $user = JFactory::getUser(); if($user->id && $this->check_playlist_permission( $jinput->get('id', 0, 'int') ) ){ // only can delete playlists registered users $model = $this->getModel('playlist'); if(!$model->delete_playlist()) { $msg = JText::_( 'ERROR_ERASING_PLAYLIST' ); $msg_type = "error"; } else { $msg = JText::_( 'PLAYLIST_ERASED' ); $msg_type = "message"; } } else{ $msg = JText::_( 'NOT_ALLOWED_EDIT_PLAYLIST' ); $msg_type = "notice"; } $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $this->setRedirect( 'index.php?option=com_muscol&view=playlists' . $itemid, $msg, $msg_type ); } function edit_playlist() { $jinput = JFactory::getApplication()->input; $playlist_id = $jinput->get('id', 0, 'int'); if($this->check_playlist_permission($playlist_id)) JRequest::setVar( 'layout', 'form' ); else { $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $msg = JText::_('NOT_ALLOWED_EDIT_PLAYLIST'); $msg_type = "notice"; $this->setRedirect( 'index.php?option=com_muscol&view=playlist&id=' . $playlist_id . $itemid, $msg, $msg_type ); } parent::display(); } function check_playlist_permission($playlist_id){ if(!$playlist_id) return true; // everybody can edit his own on-the-go playlist $db = JFactory::getDbo(); $user = JFactory::getUser(); $query = 'SELECT user_id FROM #__muscol_playlists WHERE id = ' . $playlist_id ; $db->setQuery($query); $playlist_creator = $db->loadResult(); if($playlist_creator == $user->id) return true; else return false; } function remove_songs() { //this function is called only from the album form template $jinput = JFactory::getApplication()->input; $album_id = $jinput->get('id', 0, 'int'); $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $model = $this->getModel('song'); if(!$model->delete()) { $msg = JText::_( 'ERROR_DELETING_SONGS' ); } else { $msg = JText::_( 'SONGS_DELETED' ); } $this->setRedirect( 'index.php?option=com_muscol&view=album&layout=form&id=' . $album_id . $itemid, $msg ); } function erase_album() { $jinput = JFactory::getApplication()->input; $model = $this->getModel('album'); $id = $jinput->get('id', 0, 'int'); $confirm = JRequest::getVar('confirm'); if($confirm){ // delete for real $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $can_edit = $this->check_album_permission($id); $msg = JText::_('You are not authorized to delete this album'); $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $id . $itemid); if($can_edit){ if(!$model->delete()) { $msg = JText::_( 'ERROR_DELETING_ALBUMS' ); } else { $msg = JText::_( 'ALBUMS_DELETED' ); } $link = JRoute::_('index.php?option=com_muscol&view=artists' . $itemid); } $this->setRedirect( $link , $msg ); } else{ // ask for confirmation $params =JComponentHelper::getParams( 'com_muscol' ); $itemid = $params->get('itemid'); if($itemid != "") $itemid = "&Itemid=" . $itemid; $can_edit = $this->check_album_permission($id); $msg = JText::_('NOT_AUTHORIZED_DELETE_ALBUM'); $link = JRoute::_('index.php?option=com_muscol&view=album&id='. $id . $itemid); if($can_edit){ echo '