Esempio n. 1
0
 /**
  * To add a new node somewhere in the tree. 
  * It creates the WP page and insert it in the tree.
  * Handles multiple insertions at once.
  */
 public static function tree_add_new_node()
 {
     $tree = new ApmTreeData();
     $tree->load_last_tree();
     switch ($_POST['node_type']) {
         case 'page':
             $new_node_name = trim(stripslashes($_POST['node_id']));
             $default_node_data = array('node_template' => '');
             $new_node_data = isset($_POST['node_data']) && !empty($_POST['node_data']) ? $_POST['node_data'] : $default_node_data;
             $new_node_template = array_key_exists('node_template', $new_node_data) ? $new_node_data['node_template'] : '';
             parent::$json_data['insert_type'] = $_POST['edit_action'];
             if (isset($_POST['nodes_number']) && !empty($_POST['nodes_number']) && is_numeric($_POST['nodes_number']) && $_POST['nodes_number'] > 1) {
                 if (!empty($new_node_name)) {
                     $new_node_ids = array();
                     $nb_digits = strlen(strval($_POST['nodes_number']));
                     if ($nb_digits == 1) {
                         $nb_digits = 2;
                         //We still want 01, 02, 03 ... if nodes_number < 10
                     }
                     for ($i = 1; $i <= $_POST['nodes_number']; $i++) {
                         $insert_after = $_POST['edit_action'] == 'insert_after';
                         $node_name = sprintf($new_node_name . ' - %0' . $nb_digits . 'd', !$insert_after ? $i : $_POST['nodes_number'] - $i + 1);
                         $new_page_id = ApmTreeData::insert_wp_page($node_name, $new_node_template);
                         if (!empty($new_page_id)) {
                             if (is_numeric($_POST['index_node'])) {
                                 $new_node_ids[] = $tree->add_new_node($_POST['edit_action'], $_POST['index_node'], 'page', $new_page_id);
                                 ApmTreeData::force_wp_page_slug_from_title($new_page_id);
                                 //Call this after WP tree synchronisation
                             }
                         }
                     }
                     parent::$json_data['new_nodes'] = $insert_after ? array_reverse($new_node_ids) : $new_node_ids;
                 }
             } else {
                 if (!empty($new_node_name)) {
                     $new_page_id = ApmTreeData::insert_wp_page($new_node_name, $new_node_template);
                     if (!empty($new_page_id)) {
                         if (is_numeric($_POST['index_node'])) {
                             $new_node_id = $tree->add_new_node($_POST['edit_action'], $_POST['index_node'], 'page', $new_page_id);
                             ApmTreeData::force_wp_page_slug_from_title($new_page_id);
                             //Call this after WP tree synchronisation
                         }
                     }
                     parent::$json_data['new_node'] = $new_node_id;
                 }
             }
             break;
     }
     parent::send_json();
 }
Esempio n. 2
0
 public static function handle_actions()
 {
     //Check nonce:
     if (!empty($_REQUEST['apm_options_action']) && !wp_verify_nonce($_REQUEST['_wpnonce'], self::save_options_nonce)) {
         wp_die(__("Could not save plugin settings : security check failed.", ApmConfig::i18n_domain));
         exit;
     }
     $redirect_url = self::get_base_url(true);
     if (!empty($_GET['apm_options_action'])) {
         //Bugfix "Headers already sent" on action in Pages > Settings > Plugin data management for some configs.
         //TODO : see if we can identify more precisely what is causing this to find a more targeted fix.
         $buffer = ob_get_clean();
         switch ($_GET['apm_options_action']) {
             case 'delete_all_data':
                 ApmTreeData::delete_database_data(false);
                 wp_redirect(add_query_arg(array('apm_options_msg' => 2), $redirect_url));
                 exit;
                 break;
             case 'delete_options':
                 ApmOptions::delete_database_data();
                 wp_redirect(add_query_arg(array('apm_options_msg' => 3), $redirect_url));
                 exit;
                 break;
             case 'delete_folding_infos':
                 ApmTreeState::delete_all();
                 wp_redirect(add_query_arg(array('apm_options_msg' => 4), $redirect_url));
                 exit;
                 break;
             case 'restore_page':
                 if (!empty($_GET['wp_id'])) {
                     //Check if the page is still lost :
                     $lost_pages = self::get_lost_pages();
                     if (array_key_exists($_GET['wp_id'], $lost_pages)) {
                         $tree = new ApmTreeData();
                         $tree->load_last_tree();
                         $apm_id = $tree->add_new_node('insert_child', ApmTreeData::root_id, 'page', $_GET['wp_id']);
                         self::$feedback['msg'] = sprintf(__('The page "%s" has been successful restored to the end of the tree', ApmConfig::i18n_domain), $lost_pages[$_GET['wp_id']]->post_title);
                         if (!empty($_GET['redirect_to_page_in_tree'])) {
                             wp_redirect(ApmBoContext::get_reach_node_url($apm_id));
                             exit;
                         }
                     } else {
                         self::$feedback['type'] = 'error';
                         self::$feedback['msg'] = sprintf(__('The page to restore (wp_id = %s) is not in lost pages.', ApmConfig::i18n_domain), $_GET['wp_id']);
                     }
                 }
                 break;
             case 'reset_tree_from_wp_pages':
                 //Restore apm tree from WP pages tree
                 $tree = new ApmTreeData();
                 $tree->reset_tree_and_data();
                 wp_redirect(add_query_arg(array('apm_options_msg' => 5), $redirect_url));
                 exit;
                 break;
             case 'apm_tree_to_wp_pages_tree':
                 $tree = new ApmTreeData();
                 $tree->load_last_tree();
                 $tree->synchronize_tree_with_wp_entities();
                 wp_redirect(add_query_arg(array('apm_options_msg' => 6), $redirect_url));
                 exit;
                 break;
         }
         //Bugfix "Headers already sent" on action in Pages > Settings > Plugin data management for some configs.
         //TODO : see if we can identify more precisely what is causing this to find a more targeted fix.
         echo $buffer;
         do_action('apm_options_handle_get_action', $_GET['apm_options_action'], $redirect_url);
     } elseif (!empty($_POST['apm_options_action'])) {
         switch ($_POST['apm_options_action']) {
             case 'save_admin_options':
                 self::save_options($_POST);
                 self::$feedback['msg'] = __('Admin options saved successfuly', ApmConfig::i18n_domain);
                 break;
         }
         do_action('apm_options_handle_post_action', $_POST['apm_options_action'], $redirect_url);
     }
 }
Esempio n. 3
0
 /**
  * Insert a given page in the APM tree
  * @param object $post
  */
 public static function insert_page_from_outside($page)
 {
     $tree = new ApmTreeData();
     $tree->load_last_tree();
     if (!$tree->is_wp_page_in_tree($page->ID) && in_array($page->post_status, ApmConfig::$allowed_post_status)) {
         $parent_id = empty($page->post_parent) ? ApmTreeData::root_id : $page->post_parent;
         $insert_infos = $tree->get_new_page_insert_infos_from_sibling($parent_id, $page->menu_order);
         $tree->add_new_node($insert_infos['action'], $insert_infos['index_node'], 'page', $page->ID);
     }
 }