/**
  * Adds the post to the relevant site
  *
  * @param $post
  *
  * @param $blog
  *
  * @return int|\WP_Error
  */
 public function add_post($post, $blog)
 {
     if (!$blog || $this->post_exists($post, $blog)) {
         return FALSE;
     }
     $original_post_id = $post->ID;
     // store temp so that we can return it to the original post
     $source_content_id = Wpml2mlp_Helper::get_default_post_ID($post);
     $meta = get_post_meta($post->ID);
     $post->ID = NULL;
     // reset the post_id, new one will be created
     switch_to_blog((int) $blog['blog_id']);
     $new_post_id = wp_insert_post((array) $post);
     if ($new_post_id > 0) {
         foreach ($meta as $key => $value) {
             update_post_meta($new_post_id, $key, $value[0]);
         }
     }
     restore_current_blog();
     if (0 < $new_post_id) {
         $this->content_relations->set_relation(Wpml2mlp_Helper::get_default_blog(), (int) $blog['blog_id'], $source_content_id, $new_post_id, $post->post_type);
     }
     $post->ID = $original_post_id;
     return $new_post_id;
 }
 /**
  * @param array $existing
  * @param int   $source_term_taxonomy_id
  * @param int   $target_site_id
  * @param int   $target_term_taxonomy_id
  *
  * @return bool
  */
 private function update_terms(array $existing, $source_term_taxonomy_id, $target_site_id, $target_term_taxonomy_id)
 {
     if (isset($existing[$target_site_id]) && $existing[$target_site_id] === $target_term_taxonomy_id) {
         return TRUE;
     }
     if (0 !== $target_term_taxonomy_id) {
         return $this->content_relations->set_relation($this->current_site_id, $target_site_id, $source_term_taxonomy_id, $target_term_taxonomy_id, 'term');
     }
     $translation_ids = $this->content_relations->get_translation_ids($this->current_site_id, $target_site_id, $source_term_taxonomy_id, $target_term_taxonomy_id, 'term');
     return $this->content_relations->delete_relation($translation_ids['ml_source_blogid'], $target_site_id, $translation_ids['ml_source_elementid'], 0, 'term');
 }
 /**
  * @param array $existing
  * @param int   $source_term_taxonomy_id
  * @param int   $target_site_id
  * @param int   $target_term_taxonomy_id
  *
  * @return bool
  */
 private function update_terms(array $existing, $source_term_taxonomy_id, $target_site_id, $target_term_taxonomy_id)
 {
     // There's nothing to do here
     if (-1 === $target_term_taxonomy_id) {
         return TRUE;
     }
     if (isset($existing[$target_site_id]) && $existing[$target_site_id] === $target_term_taxonomy_id) {
         return TRUE;
     }
     $translation_ids = $this->content_relations->get_translation_ids($this->current_site_id, $target_site_id, $source_term_taxonomy_id, $target_term_taxonomy_id, 'term');
     if ($translation_ids['ml_source_blogid'] !== $this->current_site_id) {
         $target_site_id = $this->current_site_id;
         if (0 !== $target_term_taxonomy_id) {
             $target_term_taxonomy_id = $source_term_taxonomy_id;
         }
     }
     // Delete a relation
     if (0 === $target_term_taxonomy_id) {
         return $this->content_relations->delete_relation($translation_ids['ml_source_blogid'], $target_site_id, $translation_ids['ml_source_elementid'], 0, 'term');
     }
     return $this->content_relations->set_relation($translation_ids['ml_source_blogid'], $target_site_id, $translation_ids['ml_source_elementid'], $target_term_taxonomy_id, 'term');
 }
 /**
  * set the source id of the element
  *
  * @param   int $source_content_id   ID of current element
  * @param   int $remote_site_id      ID of remote site
  * @param   int $remote_content_id   ID of remote content
  * @return  void
  */
 public function set_linked_element($source_content_id, $remote_site_id, $remote_content_id)
 {
     $this->content_relations->set_relation($this->source_site_id, $remote_site_id, $source_content_id, $remote_content_id, 'post');
 }