/**
  * Handle post requests
  *
  * @access public
  * @return void
  */
 public function handle_post()
 {
     if (isset($_POST['sp_save_check'])) {
         // Check if user is allowed to do this
         if (!current_user_can('manage_options')) {
             return;
         }
         // Check nonce
         if (!isset($_POST['sp_edit_nonce']) || !wp_verify_nonce($_POST['sp_edit_nonce'], plugin_basename(__FILE__))) {
             return;
         }
         $connection = new SP_Connection();
         // Check the id
         $id = isset($_POST['id']) && $_POST['id'] != '' ? $_POST['id'] : null;
         $connection->set_id($id);
         // Check the title
         if (isset($_POST['title']) && $_POST['title'] != '') {
             $connection->set_title($_POST['title']);
         }
         // Check the slug
         $slug = '';
         if (isset($_POST['slug']) && $_POST['slug'] != '') {
             $slug = $_POST['slug'];
         } else {
             $slug = sanitize_title_with_dashes($_POST['title']);
         }
         $connection->set_slug($slug);
         // Parent
         $connection->set_parent(trim($_POST['parent']));
         // Child
         $connection->set_child(trim($_POST['child']));
         // Check the add new
         $add_new = 0;
         if (isset($_POST['add_new']) && $_POST['add_new'] == '1') {
             $add_new = 1;
         }
         $connection->set_add_new($add_new);
         // Check the add existing
         $add_existing = 0;
         if (isset($_POST['add_existing']) && $_POST['add_existing'] == '1') {
             $add_existing = 1;
         }
         $connection->set_add_existing($add_existing);
         // Check the display children
         $after_post_display_children = 0;
         if (isset($_POST['after_post_display_children']) && $_POST['after_post_display_children'] == '1') {
             $after_post_display_children = 1;
         }
         $connection->set_after_post_display_children($after_post_display_children);
         /**
          * Action: 'pc_connection_catch_post' - Action that is ran after the connection form data is post but before the connection is saved
          *
          * @api SP_Connection $connection The Connection
          */
         $connection = apply_filters('pc_connection_catch_post', $connection);
         // Save the link
         $pt_link_manager = new SP_Connection_Manager();
         $pt_link_manager->save($connection);
         wp_redirect(get_admin_url() . 'admin.php?page=post_connector');
         exit;
     }
 }
 /**
  * This function is used to create a connection between two post types.
  *
  * The following parameters should be passed when create a post type link:
  *
  * Slug (string) – The new slug of the PTL
  * Title (string) – The new title of the PTL
  * Parent (string) – The parent post type id
  * Child (string) – The child post type id
  * Sortable (int) – Whether the item is sortable. 1 = yes, 0 = no.
  * Add new (int) – Whether the user can add and link new items. 1 = yes, 0 = no.
  * Add existing (int) – Whether the user can link existing items. 1 = yes, 0 = no.
  * After post display children - Display child posts automatically on post. 1 = yes, 0 = no.
  * After post display parents - Display parent posts automatically on post. 1 = yes, 0 = no.
  * Backwards Linking - Set to 1 if you want to allow backwards linking. 1 = enabled, 2 = disabled.
  * Related - Whether this connection is a related conection or not. 1 = enabled, 2 = disabled.
  *
  * The function will return a SP_Connection object.
  *
  * @since  1.5.0
  * @access public
  *
  * @param $slug
  * @param $title
  * @param $parent
  * @param $child
  * @param $sortable
  * @param $add_new
  * @param $add_existing
  * @param $after_post_display_children
  * @param $after_post_display_parents
  * @param $backwards_linking
  * @param $deprecated
  *
  * @return SP_Connection
  */
 public function add_connection($slug, $title, $parent, $child, $sortable, $add_new, $add_existing, $after_post_display_children = 0, $after_post_display_parents = 0, $backwards_linking = 0, $deprecated = false)
 {
     // Create the Connection Manager
     $connection_manager = new SP_Connection_Manager();
     // Create the connection
     $connection = new SP_Connection();
     $connection->set_slug($slug);
     $connection->set_title($title);
     $connection->set_parent($parent);
     $connection->set_child($child);
     $connection->set_add_new($add_new);
     $connection->set_add_existing($add_existing);
     $connection->set_after_post_display_children($after_post_display_children);
     $connection->set_sortable($sortable);
     $connection->set_after_post_display_parents($after_post_display_parents);
     $connection->set_backwards_linking($backwards_linking);
     // Save the connection
     return $connection_manager->save($connection);
 }
 /**
  * Method to get a Connection by id
  *
  * @access public
  *
  * @param int $id
  *
  * @return SP_Connection
  */
 public function get_connection($id)
 {
     $connection = null;
     $connection_query = new WP_Query(array('p' => $id, 'post_type' => SP_Constants::CPT_PT_LINK, 'posts_per_page' => '1'));
     if ($connection_query->have_posts()) {
         $connection_query->next_post();
         // Create the connection
         $connection = new SP_Connection();
         // Set the connection properties
         $connection->set_id($connection_query->post->ID);
         $connection->set_slug(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_SLUG, true));
         $connection->set_title(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_TITLE, true));
         $connection->set_parent(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_PARENT, true));
         $connection->set_child(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_CHILD, true));
         $connection->set_add_new(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_ADD_NEW, true));
         $connection->set_add_existing(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_ADD_EXISTING, true));
         $connection->set_after_post_display_children(get_post_meta($connection_query->post->ID, SP_Constants::PM_PTL_APDC, true));
         /**
          * Action: 'pc_connection_init' - Action that is ran after the connection is initialized
          *
          * @api SP_Connection $connection The Connection
          */
         $connection = apply_filters('pc_connection_init', $connection);
     }
     return $connection;
 }