Ejemplo n.º 1
0
 public function update()
 {
     $this->output->set_header('Content-Type: application/json; charset=utf-8');
     $this->load->helper('slug');
     $user = $this->ion_auth->user()->row();
     $this->load->library('form_validation');
     if ($this->input->post('song_id')) {
         $song_row = $this->Song_model->get_song($this->input->post('song_id'));
         $real_user_id = $song_row->user_id;
         $real_file_uid = $song_row->file_uid;
     } else {
         redirect('manage/songs', 'refresh');
     }
     if ($this->input->post('user_id') != $user->id && !$this->ion_auth->is_admin() && $this->input->post('song') != $real_file_uid) {
         redirect('manage/songs', 'refresh');
     } else {
         //modal form validaiton
         $this->form_validation->set_rules('artist', 'Artist', 'trim|required|min_length[2]|max_length[100]|xss_clean');
         $this->form_validation->set_rules('title', 'Title', 'trim|required|min_length[2]|max_length[100]|xss_clean');
         $this->form_validation->set_rules('featuring', 'Featuring', 'trim||min_length[2]|max_length[255]|xss_clean');
         $this->form_validation->set_rules('producer', 'Producer', 'trim|min_length[2]|max_length[255]|xss_clean');
         $this->form_validation->set_rules('album', 'Album', 'trim|min_length[2]|max_length[255]|xss_clean');
         $this->form_validation->set_rules('video', 'Video', 'trim|min_length[2]|xss_clean');
         $this->form_validation->set_rules('image', 'Image', 'trim|min_length[2]|xss_clean');
         $this->form_validation->set_rules('description', 'Description', 'trim|min_length[2]|max_length[10000]|xss_clean');
         $this->form_validation->set_rules('song_url', 'Song URL', 'trim|min_length[2]|max_length[255]|xss_clean');
         //hidden inputs
         $file_uid = $this->input->post('song');
         $song_id = $this->input->post('song_id');
         $file_name = $this->input->post('file_name');
         $user_id = $this->input->post('user_id');
         $artist = $this->input->post('artist', TRUE);
         $title = $this->input->post('title', TRUE);
         $featuring = $this->input->post('featuring', TRUE);
         $producer = $this->input->post('producer', TRUE);
         $album = $this->input->post('album', TRUE);
         $video = $this->input->post('video', TRUE);
         $buy_link = $this->input->post('buy_link', TRUE);
         $can_download = $this->input->post('can_download', TRUE);
         $description = $this->input->post('description', TRUE);
         $soundcloud_url = $this->input->post('soundcloud_url', TRUE);
         $published = 'published';
         $song = $this->Song_model->get_song($song_id);
         $username = $song->username;
         $urlslug = $song->song_url;
         $sfname = $song->sfname;
         $visibility = $this->input->post('make_private', TRUE) == 'yes' ? 'unlisted' : 'public';
         // if the user changed the soundcloud URL
         if ($soundcloud_url != $song->external_url) {
             $this->load->helper('soundcloud');
             $sc = json_decode(_resolveSoundcloud($soundcloud_url));
             if (!empty($sc->id)) {
                 $external_file = $sc->id;
             } else {
                 $external_file = $song->external_file;
             }
             $external_url = $soundcloud_url;
         } else {
             $external_file = $song->external_file;
             $external_url = $song->external_url;
         }
         if ($this->input->post('song_url') !== $song->song_url) {
             $urlslug = url_slug($this->input->post('song_url', TRUE));
         }
         //make sure its a youtube video
         if (preg_match('/^(?:https?:\\/\\/)?(?:www\\.)?youtube\\.com\\/watch\\?(?=.*v=((\\w|-){11}))(?:\\S+)?$/', $video)) {
             parse_str(parse_url($video, PHP_URL_QUERY), $my_array_of_vars);
             $video = $my_array_of_vars['v'];
         } else {
             $video = $video;
         }
         if ($this->form_validation->run() == FALSE) {
             //validation errors
             $output_array = array('validation' => 'error', 'message' => validation_errors('<div class="alert alert-error"><strong>Error!</strong> ', '</div>'));
             $this->output->set_output(json_encode($output_array));
         } else {
             if (!$this->Song_model->valid_song_exists(array('file_uid' => $file_uid, 'user_id' => $user_id, 'song_id' => $song_id))) {
                 //couldn't find song that matches the file_uid/user_id/file_name
                 $output_array = array('validation' => 'valid', 'response' => 'error', 'message' => 'It appears the song doesnt exist.');
                 $this->output->set_output(json_encode($output_array));
             } else {
                 if (isset($_FILES['image_file'])) {
                     $uploads = $_FILES['image_file'];
                     if ($uploads['error'] == 0) {
                         $this->load->library('images');
                         $this->images->uploadLocalFile($uploads, $sfname, $urlslug, $user_id);
                         $ext = pathinfo($uploads['name']);
                         $ext = $ext['extension'];
                         $image_dir = FCPATH . 'asset_uploads/' . $song->username . '/' . $urlslug . '/';
                         $size_array = array('64', '150', '300', '500');
                         foreach ($size_array as $size) {
                             $resize = $this->images->resizeImage($image_dir, $sfname, $ext, $size);
                         }
                         if (!$resize) {
                             $output_array = array('validation' => 'valid', 'response' => 'error', 'message' => 'Unable to resize image');
                             $this->output->set_output(json_encode($output_array));
                         }
                         $song_image = $sfname . '.' . $ext;
                     }
                 } else {
                     $song_image = $song->song_image;
                 }
                 $song_data = array('song_artist' => $artist, 'song_title' => $title, 'song_description' => $description, 'featuring' => $featuring, 'song_url' => $urlslug, 'song_producer' => $producer, 'album' => $album, 'file_name' => $file_name, 'video' => $video, 'song_image' => $song_image, 'external_file' => $external_file, 'external_url' => $external_url, 'buy_link' => $buy_link, 'status' => $published, 'visibility' => $visibility, 'can_download' => $can_download);
                 $update_where = array('file_uid' => $file_uid, 'user_id' => $user_id, 'song_id' => $song_id);
                 $song_row_updated = $this->Song_model->update($update_where, $song_data);
                 if (!$song_row_updated) {
                     $output_array = array('validation' => 'valid', 'response' => 'error', 'message' => 'The song was not updated. Did you make any changes?');
                     $this->output->set_output(json_encode($output_array));
                 } else {
                     //paydirt
                     if ($external_file != $song->external_file) {
                         //upload SC Image
                         $this->load->library('images');
                         $this->images->uploadRemoteFile($sc->artwork_url, $sfname, $urlslug);
                         $song_image = $sfname . '.jpg';
                         $image_dir = FCPATH . 'asset_uploads/' . $username . '/' . $urlslug . '/';
                         $size_array = array('64', '150', '300');
                         foreach ($size_array as $size) {
                             $this->images->resizeImage($image_dir, $sfname, 'jpg', $size);
                         }
                     }
                     //used to add more output to the returned json
                     $urlUpdated = NULL;
                     if ($this->input->post('song_url') !== $song->song_url) {
                         $urldata = array('old_url' => $song->song_url, 'current_url' => $urlslug, 'song_id' => $song->song_id, 'date_created' => time());
                         $updateUrl = $this->Song_model->addUpdatedUrl($urldata);
                         if ($updateUrl) {
                             $urlUpdated = "<br /><span style='font-weight:bold;font-size:1em'>The Song URL was updated as well. Please update your links accordingly.</span>";
                         }
                     }
                     //delete existing post cache
                     $sqlWhere = array('username' => $song->username, 'song_url' => $song->song_url);
                     $this->cache->model('Song_model', 'get_song_where', array($sqlWhere), -1);
                     $output_array = array('validation' => 'valid', 'response' => 'success', 'message' => 'Song updated. <a href="' . base_url('song/' . $username . '/' . $urlslug) . '">Click here to view</a>' . $urlUpdated);
                     $this->output->set_output(json_encode($output_array));
                 }
             }
         }
     }
     //end form_validation and JSON returns
 }
Ejemplo n.º 2
0
 public function init_soundcloud()
 {
     if (!$this->input->post()) {
         redirect('upload', 'refresh');
     }
     $this->output->set_header('Content-Type: application/json; charset=utf-8');
     $this->load->helper('soundcloud');
     $sc = json_decode(_resolveSoundcloud($this->input->post('scLink')));
     if (empty($sc->id)) {
         $output_array = array('response' => 'error', 'message' => 'Not a valid Soundcloud Link');
     } else {
         $trackNum = $sc->id;
         $artist = substr($sc->title, 0, strpos($sc->title, " - "));
         $title = substr($sc->title, strpos($sc->title, ' - ') + 3);
         // if no soundcloud artwork, use the users avatar
         if (empty($sc->artwork_url)) {
             $scimg = str_replace('large.jpg', 't500x500.jpg', $sc->user->avatar_url);
         } else {
             $scimg = str_replace('large.jpg', 't500x500.jpg', $sc->artwork_url);
         }
         $uid = 'soundcloud_' . md5($sc->title);
         $data = array('user_id' => $this->data['user']->id, 'file_uid' => $uid, 'file_name' => htmlspecialchars($artist . ' - ' . $title, ENT_QUOTES), 'song_artist' => $artist, 'song_title' => $title, 'external_source' => 'soundcloud', 'external_file' => $trackNum, 'external_url' => $this->input->post('scLink'), 'song_image' => $scimg, 'upload_date' => date('Y-m-d H:i:s'), 'status' => 'incomplete');
         if ($sc->streamable != 1) {
             $output_array = array('response' => 'error', 'message' => 'Valid Song but there doesnt seem to be a streamable URL available. Unable to upload. Please try again');
         } else {
             //send data to DB
             $song_id = $this->Song_model->add($data);
             if (!$song_id) {
                 $output_array = array('response' => 'error', 'message' => 'Song Not Uploaded. Try Again');
             } else {
                 $output_array = array('response' => 'success', 'song' => array('song_id' => $song_id, 'id' => $uid, 'title' => $title, 'artist' => $artist, 'scimg' => $scimg, 'file' => htmlspecialchars($artist . ' - ' . $title, ENT_QUOTES), 'size' => '5', 'date' => date('Y-m-d H:i:s'), 'source' => 'soundcloud'));
             }
             //if song uploaded
         }
         //if song isn't streamable
     }
     // if song exists
     $this->output->set_output(json_encode($output_array));
 }