function json_save_media()
 {
     global $wpdb;
     $defaults = array('_method' => 'create', 'type' => 'image', 'description' => '', 'attachment_id' => '', 'embed' => '', 'featured' => 0, 'published' => 1);
     if (isset($_POST['test'])) {
         // Temp workaround for mysterious issue
         if ($_POST['test'] == '\\"') {
             foreach ($_POST as $key => $value) {
                 $_POST[$key] = stripslashes($value);
             }
         }
     }
     $args = array_merge($defaults, $_POST);
     $nonce = isset($_GET['nonce']) ? $_GET['nonce'] : '';
     if (!wp_verify_nonce($nonce, 'portfolio_media_nonce')) {
         echo 'Error: permission denied';
         die(1);
     }
     // create new
     if ($args['_method'] == 'create') {
         $media_item = PortfolioMedia::create($this->post_id);
         if ($media_item->exists()) {
             $media_item->meta_type = $args['type'];
             $media_item->meta_attachment_id = $args['attachment_id'];
             /**
              * Set menu order to current page's ID, it will be the highest
              * for the newest post.
              */
             $media_item->menu_order = $media_item->post->ID;
             echo json_encode($media_item->save()->to_array());
             die(0);
         }
         echo 'Error: unable to create media file.';
         die(1);
     }
     // update existing
     if ($args['_method'] == 'update' && is_numeric($_GET['id'])) {
         $media_item = new PortfolioMedia($args['id']);
         if ($media_item->exists()) {
             /**
              * If `featured` attribute has changed,
              * then let's remove it from any other media item.
              */
             if ($args['featured'] != $media_item->meta_featured) {
                 // Remove featured from every other object.
                 foreach (PortfolioMedia::all($this->post_id) as $item) {
                     if ($item->post->ID != $args['id']) {
                         $item->meta_featured = 0;
                         $item->save();
                     }
                 }
             }
             $media_item->meta_description = $args['description'];
             $media_item->meta_attachment_id = $args['attachment_id'];
             $media_item->meta_screenshot_id = $args['screenshot_id'];
             $media_item->meta_embed = $args['embed'];
             $media_item->meta_featured = $args['featured'];
             $media_item->meta_published = $args['published'];
             $media_item->post->menu_order = $args['order'];
             $media_item->save();
             echo json_encode($media_item->to_array());
             //echo '0';
             die(0);
         } else {
             echo 'Error: media item with ID ' . $args['id'] . ' cannot be found.';
             die(1);
         }
     }
     // delete record
     if ($args['_method'] == 'delete' && is_numeric($_GET['id'])) {
         $media_item = new PortfolioMedia($_GET['id'], $this->post_id);
         $media_item->delete();
         echo '0';
         die(0);
     }
     die('1');
 }