/** * Imports snippets from an XML file * * @since 2.0 * * @uses save_snippet() to add the snippets to the database * * @param string $file The path to the XML file to import * @param bool|null $multisite Import into network-wide table or site-wide table? * @return array|bool An array of imported snippet IDs on success, false on failure */ function import_snippets($file, $multisite = null) { if (!file_exists($file) || !is_file($file)) { return false; } $dom = new DOMDocument('1.0', get_bloginfo('charset')); $dom->load($file); $snippets_xml = $dom->getElementsByTagName('snippet'); $fields = array('name', 'description', 'code', 'tags', 'scope'); $exported_snippets = array(); /* Loop through all snippets */ /** @var DOMElement $snippet_xml */ foreach ($snippets_xml as $snippet_xml) { $snippet = new Snippet(); $snippet->network = $multisite; /* Build a snippet object by looping through the field names */ foreach ($fields as $field_name) { /* Fetch the field element from the document */ $field = $snippet_xml->getElementsByTagName($field_name)->item(0); /* If the field element exists, add it to the snippet object */ if (isset($field->nodeValue)) { $snippet->{$field_name} = $field->nodeValue; } } /* Get scope from attribute */ $scope = $snippet_xml->getAttribute('scope'); if (!empty($scope)) { $snippet->scope = $scope; } /* Save the snippet and increase the counter if successful */ if ($snippet_id = save_snippet($snippet)) { $exported_snippets[] = $snippet_id; } } do_action('code_snippets/import', $dom, $multisite); return $exported_snippets; }
/** * Save the posted snippet data to the database and redirect */ private function save_posted_snippet() { /* Build snippet object from fields with 'snippet_' prefix */ $snippet = new Snippet(); foreach ($_POST as $field => $value) { if ('snippet_' === substr($field, 0, 8)) { /* Remove 'snippet_' prefix from field name */ $field = substr($field, 8); $snippet->{$field} = stripslashes($value); } } /* Activate or deactivate the snippet before saving if we clicked the button */ // Shared network snippets cannot be network activated if (isset($_POST['snippet_sharing']) && 'on' === $_POST['snippet_sharing']) { $snippet->active = 0; unset($_POST['save_snippet_activate'], $_POST['save_snippet_deactivate']); } elseif (isset($_POST['save_snippet_activate'])) { $snippet->active = 1; } elseif (isset($_POST['save_snippet_deactivate'])) { $snippet->active = 0; } /* Deactivate snippet if code contains errors */ if ($snippet->active) { if ($code_error = $this->validate_code($snippet)) { $snippet->active = 0; } } /* Save the snippet to the database */ $snippet_id = save_snippet($snippet); /* Update the shared network snippets if necessary */ if ($snippet_id && get_current_screen()->in_admin('network')) { if (isset($_POST['snippet_sharing']) && 'on' === $_POST['snippet_sharing']) { $shared_snippets = get_site_option('shared_network_snippets', array()); /* Add the snippet ID to the array if it isn't already */ if (!in_array($snippet_id, $shared_snippets)) { $shared_snippets[] = $snippet_id; update_site_option('shared_network_snippets', array_values($shared_snippets)); } } else { $this->unshare_network_snippet($snippet_id); } } /* If the saved snippet ID is invalid, display an error message */ if (!$snippet_id || $snippet_id < 1) { /* An error occurred */ wp_redirect(add_query_arg('result', 'save-error', code_snippets_get_menu_url('add'))); exit; } /* Display message if a parse error occurred */ if (isset($code_error) && $code_error) { wp_redirect(add_query_arg(array('id' => $snippet_id, 'result' => 'code-error'), code_snippets_get_menu_url('edit'))); exit; } /* Set the result depending on if the snippet was just added */ $result = isset($_POST['snippet_id']) ? 'updated' : 'added'; /* Append a suffix if the snippet was activated or deactivated */ if (isset($_POST['save_snippet_activate'])) { $result .= '-and-activated'; } elseif (isset($_POST['save_snippet_deactivate'])) { $result .= '-and-deactivated'; } /* Redirect to edit snippet page */ wp_redirect(add_query_arg(array('id' => $snippet_id, 'result' => $result), code_snippets_get_menu_url('edit'))); exit; }
/** * Save the posted snippet to the database * @uses wp_redirect() to pass the results to the page * @uses save_snippet() to save the snippet to the database */ private function save_posted_snippet() { /* Make sure the nonce validates before we do any snippet ops */ if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'save_snippet')) { return; } /* Save the snippet if one has been submitted */ if (isset($_POST['save_snippet']) || isset($_POST['save_snippet_activate']) || isset($_POST['save_snippet_deactivate'])) { /* Build snippet object from fields with 'snippet_' prefix */ $snippet = new Snippet(); foreach ($_POST as $field => $value) { if ('snippet_' === substr($field, 0, 8)) { /* Remove 'snippet_' prefix from field name */ $field = substr($field, 8); $snippet->{$field} = stripslashes($value); } } /* Activate or deactivate the snippet before saving if we clicked the button */ // Shared network snippets cannot be network activated if (isset($_POST['snippet_sharing']) && 'on' === $_POST['snippet_sharing']) { $snippet->active = 0; unset($_POST['save_snippet_activate'], $_POST['save_snippet_deactivate']); } elseif (isset($_POST['save_snippet_activate'])) { $snippet->active = 1; } elseif (isset($_POST['save_snippet_deactivate'])) { $snippet->active = 0; } /* Save the snippet to the database */ $snippet_id = save_snippet($snippet); /* Update the shared network snippets if necessary */ if ($snippet_id && get_current_screen()->in_admin('network')) { $shared_snippets = get_site_option('shared_network_snippets', array()); if (isset($_POST['snippet_sharing']) && 'on' === $_POST['snippet_sharing']) { /* Add the snippet ID to the array if it isn't already */ if (!in_array($snippet_id, $shared_snippets)) { $shared_snippets[] = $snippet_id; update_site_option('shared_network_snippets', array_values($shared_snippets)); } } elseif (in_array($snippet_id, $shared_snippets)) { /* Remove the snippet ID from the array */ $shared_snippets = array_diff($shared_snippets, array($snippet_id)); update_site_option('shared_network_snippets', array_values($shared_snippets)); /* Deactivate on all sites */ global $wpdb; if ($sites = $wpdb->get_col("SELECT blog_id FROM {$wpdb->blogs}")) { foreach ($sites as $site) { switch_to_blog($site); $active_shared_snippets = get_option('active_shared_network_snippets'); if (is_array($active_shared_snippets)) { $active_shared_snippets = array_diff($active_shared_snippets, array($snippet_id)); update_option('active_shared_network_snippets', $active_shared_snippets); } } restore_current_blog(); } } } /* If the saved snippet ID is invalid, display an error message */ if (!$snippet_id || $snippet_id < 1) { /* An error occurred */ wp_redirect(add_query_arg('result', 'error', code_snippets_get_menu_url('add'))); exit; } /* Set the result depending on if the snippet was just added */ $result = isset($_POST['snippet_id']) ? 'updated' : 'added'; /* Append a suffix if the snippet was activated or deactivated */ if (isset($_POST['save_snippet_activate'])) { $result .= '-and-activated'; } elseif (isset($_POST['save_snippet_deactivate'])) { $result .= '-and-deactivated'; } /* Redirect to edit snippet page */ wp_redirect(add_query_arg(array('id' => $snippet_id, 'result' => $result), code_snippets_get_menu_url('edit'))); exit; } elseif (isset($_POST['snippet_id'], $_POST['delete_snippet'])) { delete_snippet($_POST['snippet_id']); wp_redirect(add_query_arg('result', 'delete', code_snippets_get_menu_url('manage'))); exit; } elseif (isset($_POST['snippet_id'], $_POST['export_snippet'])) { export_snippets($_POST['snippet_id']); } }
/** * Loads the help tabs for the Edit Snippets page * * @since 1.0 * @access private * @uses wp_redirect To pass the results to the page */ function code_snippets_load_single_menu() { /* Make sure the user has permission to be here */ if (!current_user_can(get_snippets_cap())) { wp_die(__('You are not authorized to access this page.', 'code-snippets')); } /* Create the snippet tables if they don't exist */ create_code_snippets_tables(); /* Load the screen help tabs */ require plugin_dir_path(__FILE__) . 'admin-help.php'; /* Enqueue the code editor and other scripts and styles */ add_action('admin_enqueue_scripts', 'code_snippets_enqueue_codemirror', 9); /* Don't allow visiting the edit snippet page without a valid ID */ if (code_snippets_get_menu_slug('edit') === $_REQUEST['page']) { if (!isset($_REQUEST['id']) || 0 == $_REQUEST['id']) { wp_redirect(code_snippets_get_menu_url('add')); exit; } } /* Make sure the nonce validates before we do any snippet ops */ if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'save_snippet')) { return; } /* Save the snippet if one has been submitted */ if (isset($_POST['save_snippet']) || isset($_POST['save_snippet_activate']) || isset($_POST['save_snippet_deactivate'])) { /* Activate or deactivate the snippet before saving if we clicked the button */ if (isset($_POST['save_snippet_activate'])) { $_POST['snippet_active'] = 1; } elseif (isset($_POST['save_snippet_deactivate'])) { $_POST['snippet_active'] = 0; } /* Save the snippet to the database */ $result = save_snippet(stripslashes_deep($_POST)); /* Build the status message and redirect */ $query_args = array(); if ($result && isset($_POST['save_snippet_activate'])) { /* Snippet was activated addition to saving*/ $query_args['activated'] = true; } elseif ($result && isset($_POST['save_snippet_deactivate'])) { /* Snippet was deactivated addition to saving*/ $query_args['deactivated'] = true; } if (!$result || $result < 1) { /* An error occurred */ $query_args['invalid'] = true; } elseif (isset($_POST['snippet_id'])) { /* Existing snippet was updated */ $query_args['id'] = $result; $query_args['updated'] = true; } else { /* New snippet was added */ $query_args['id'] = $result; $query_args['added'] = true; } /* Redirect to edit snippet page */ wp_redirect(add_query_arg($query_args, code_snippets_get_menu_url('edit'))); } elseif (isset($_POST['snippet_id'], $_POST['delete_snippet'])) { delete_snippet($_POST['snippet_id']); wp_redirect(add_query_arg('delete', true, code_snippets_get_menu_url('manage'))); } elseif (isset($_POST['snippet_id'], $_POST['export_snippet'])) { export_snippets($_POST['snippet_id']); } }
/** * Imports snippets from an XML file * * @since 2.0 * @uses save_snippet() To add the snippets to the database * * @param string $file The path to the XML file to import * @param boolean|null $multisite Import into network-wide table or site-wide table? * @return integer|boolean The number of snippets imported on success, false on failure */ function import_snippets($file, $multisite = null) { if (!file_exists($file) || !is_file($file)) { return false; } $dom = new DOMDocument('1.0', get_bloginfo('charset')); $dom->load($file); $snippets_xml = $dom->getElementsByTagName('snippet'); $fields = array('name', 'description', 'code', 'tags', 'scope'); $count = 0; /* Loop through all snippets */ foreach ($snippets_xml as $snippet_xml) { $snippet = new stdClass(); /* Build a snippet object by looping through the field names */ foreach ($fields as $field_name) { /* Fetch the field element from the document */ $field = $snippet_xml->getElementsByTagName($field_name)->item(0); /* If the field element exists, add it to the snippet object */ if (isset($field->nodeValue)) { $snippet->{$field_name} = $field->nodeValue; } } /* Save the snippet and increase the counter if successful */ if (save_snippet($snippet, $multisite)) { $count += 1; } } do_action('code_snippets/import', $dom, $multisite); return $count; }