WordPress.org

Plugin Directory

Changeset 627924


Ignore:
Timestamp:
11/20/12 21:35:07 (17 months ago)
Author:
eskapism
Message:

create pages

Location:
cms-tree-page-view/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • cms-tree-page-view/trunk/functions.php

    r626506 r627924  
    11<?php 
     2 
     3/** 
     4 * Use the ajax action-thingie to catch our form with new pages 
     5 * Add pages and then redirect to...? 
     6 */ 
     7function cms_tpv_add_pages() { 
     8 
     9    #sf_d($_POST);exit; 
     10    /* 
     11    Array 
     12    ( 
     13        [action] => cms_tpv_add_pages 
     14        [cms_tpv_add_new_pages_names] => Array 
     15            ( 
     16                [0] => xxxxx 
     17                [1] => yyyy 
     18                [2] =>  
     19            ) 
     20 
     21        [cms_tpv_add_type] => inside 
     22        [cms_tpv_add_status] => draft 
     23    ) 
     24    */ 
     25 
     26    $post_position  = $_POST["cms_tpv_add_type"]; 
     27    $post_status    = $_POST["cms_tpv_add_status"]; 
     28    $post_names     = (array) $_POST["cms_tpv_add_new_pages_names"]; 
     29    $ref_post_id    = (int) $_POST["ref_post_id"]; 
     30     
     31    if ("published" === $post_status) $post_status = "publish"; 
     32 
     33    // remove possibly empty posts 
     34    $arr_post_names = array(); 
     35    foreach ($post_names as $one_post_name) { 
     36        if ( trim($one_post_name) ) { 
     37            $arr_post_names[] = $one_post_name; 
     38        } 
     39    } 
     40 
     41    $arr_post_names_count = sizeof($arr_post_names); 
     42     
     43    // check that there are pages left 
     44    if (empty($arr_post_names)) die("Error: no pages to add."); 
     45 
     46    $ref_post = get_post($ref_post_id); 
     47    if (NULL === $ref_post) die("Error: could not load reference post."); 
     48     
     49    // Make room for our new pages 
     50    // Get all pages at a level level and loop until our reference page 
     51    // and then all pages after that one will get it's menu_order  
     52    // increased by the same number as the number of new posts we're gonna add 
     53     
     54    $post_parent = 0; 
     55    if ("after" === $post_position) { 
     56        $post_parent = $ref_post->post_parent; 
     57    } elseif ("inside" === $post_position) { 
     58        $post_parent = $ref_post->ID; 
     59    } 
     60 
     61    $args = array( 
     62        "post_status" => "any", 
     63        "post_type" => $ref_post->post_type, 
     64        "numberposts" => -1, 
     65        "offset" => 0, 
     66        "orderby" => 'menu_order', 
     67        'order' => 'asc', 
     68        'post_parent' => $post_parent 
     69    ); 
     70    $posts = get_posts($args); 
     71 
     72    // If posts exist at this level, make room for our new pages by increasing the menu order 
     73    if (sizeof($posts) > 0)  { 
     74 
     75        if ("after" === $post_position) { 
     76         
     77            $has_passed_ref_post = FALSE; 
     78            foreach ($posts as $one_post) { 
     79                 
     80                if ($has_passed_ref_post) { 
     81                     
     82                    $post_update = array( 
     83                        "ID" => $one_post->ID, 
     84                        "menu_order" => $one_post->menu_order + $arr_post_names_count 
     85                    ); 
     86                    $return_id = wp_update_post($post_update); 
     87                    if (0 ===$return_id) die("Error: could not update post with id " . $post_update->ID); 
     88 
     89                } 
     90 
     91                if ( ! $has_passed_ref_post && $ref_post->ID === $one_post->ID) { 
     92                    $has_passed_ref_post = TRUE; 
     93                }            
     94 
     95            } 
     96             
     97            $new_menu_order = $ref_post->menu_order; 
     98 
     99        }  elseif ("inside" === $post_position) { 
     100 
     101            // in inside, place at beginning 
     102            // so just get first post and use that menu order as base 
     103            $new_menu_order = $posts[0]->menu_order - $arr_post_names_count; 
     104             
     105        } 
     106 
     107 
     108    } else { 
     109 
     110        // no posts, start at 0 
     111        $new_menu_order = 0; 
     112 
     113    } 
     114 
     115    $post_parent_id = NULL; 
     116    if ("after" === $post_position) { 
     117        $post_parent_id = $ref_post->post_parent; 
     118    } elseif ("inside" === $post_position) { 
     119        $post_parent_id = $ref_post->ID; 
     120    } 
     121 
     122    // Done maybe updating menu orders, add the new pages 
     123    $arr_added_pages_ids = array(); 
     124    foreach ($arr_post_names as $one_new_post_name) { 
     125 
     126        $new_menu_order++; 
     127        $newpost_args = array( 
     128            "menu_order" => $new_menu_order, 
     129            "post_parent" => $post_parent_id, 
     130            "post_status" => $post_status, 
     131            "post_title" => $one_new_post_name, 
     132            "post_type" => $ref_post->post_type 
     133        ); 
     134        $new_post_id = wp_insert_post($newpost_args); 
     135 
     136        if (0 === $new_post_id) { 
     137            die("Error: could not add post"); 
     138        } 
     139 
     140        $arr_added_pages_ids[] = $new_post_id; 
     141 
     142 
     143    } 
     144 
     145    echo "done. now what?"; 
     146 
     147    // Done. Redirect to the first page created. 
     148    $first_post_edit_link = get_edit_post_link($arr_added_pages_ids[0]); 
     149    wp_redirect($first_post_edit_link); 
     150 
     151    exit; 
     152 
     153} 
    2154 
    3155// for debug, remember to comment out (yes.. i *know* i will forget this later on...) 
     
    443595                    <a href="#" title='<?php _e("View page", "cms-tree-page-view")?>' class='cms_tpv_action_view'><?php _e("View", "cms-tree-page-view")?></a> 
    444596                </p> 
     597 
     598                <!-- links to add page --> 
    445599                <p class="cms_tpv_action_add_and_edit_page"> 
     600 
    446601                    <span class='cms_tpv_action_add_page'><?php echo $post_type_object->labels->add_new_item ?></span> 
     602                     
    447603                    <a href="#" title='<?php _e("Add new page after", "cms-tree-page-view")?>' class='cms_tpv_action_add_page_after'><?php _e("After", "cms-tree-page-view")?></a> 
     604                     
    448605                    <?php 
    449606                    // if post type is hierarchical we can add pages inside 
     
    454611                    ?> 
    455612                    <!-- <span class="cms_tpv_action_add_page_inside_disallowed"><?php _e("Can not create page inside of a page with draft status", "cms-tree-page-view")?></span> --> 
     613 
    456614                </p> 
     615 
     616                <div class="cms_tpv_action_add_doit"> 
     617                     
     618                    <form method="post" action="<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>"> 
     619 
     620                        <input type="hidden" name="action" value="cms_tpv_add_pages"> 
     621                        <input type="hidden" name="ref_post_id" value=""> 
     622 
     623                        <!-- <fieldset> --> 
     624 
     625                            <h4>Add page(s)</h4> 
     626 
     627                            <div> 
     628                                <!-- Pages<br> --> 
     629                                <ul class="cms_tpv_action_add_doit_pages"> 
     630                                    <li><span></span><input placeholder="Enter title here" type="text" name="cms_tpv_add_new_pages_names[]"></li> 
     631                                </ul> 
     632                            </div> 
     633 
     634                            <div> 
     635                                Position<br> 
     636                                <label><input type="radio" name="cms_tpv_add_type" value="after"> After</label> 
     637                                <label><input type="radio" name="cms_tpv_add_type" value="inside"> Inside</label> 
     638                            </div> 
     639 
     640 
     641                            <div> 
     642                                Status<br> 
     643                                <label><input type="radio" name="cms_tpv_add_status" value="draft" checked> Draft</label> 
     644                                <label><input type="radio" name="cms_tpv_add_status" value="published"> Published</label> 
     645                            </div> 
     646 
     647                            <div> 
     648                                <input type="submit" value="Add" class="button-primary"> 
     649                                or 
     650                                <a href="#" class="cms_tpv_add_cancel">cancel</a> 
     651                            </div> 
     652 
     653                        <!-- </fieldset> --> 
     654 
     655                    </form> 
     656 
     657                </div> 
     658 
    457659                <dl> 
    458660                    <dt><?php  _e("Last modified", "cms-tree-page-view") ?></dt> 
     
    464666                    <dd><span class="cms_tpv_page_actions_page_id"></span></dd> 
    465667                </dl> 
     668 
    466669                <div class="cms_tpv_page_actions_columns"></div> 
    467670                <span class="cms_tpv_page_actions_arrow"></span> 
  • cms-tree-page-view/trunk/index.php

    r626506 r627924  
    6464add_action('wp_ajax_cms_tpv_move_page', 'cms_tpv_move_page'); 
    6565add_action('wp_ajax_cms_tpv_add_page', 'cms_tpv_add_page'); 
     66add_action('wp_ajax_cms_tpv_add_pages', 'cms_tpv_add_pages'); 
    6667 
    6768// activation 
  • cms-tree-page-view/trunk/scripts/cms_tree_page_view.js

    r626506 r627924  
    1515 * Should have a module for all instead... 
    1616 */ 
    17 var cms_tree_page_view = (function () { 
     17var cms_tree_page_view = (function ($) { 
    1818     
    1919    var my = {}, 
     
    2525      
    2626    my.moduleProperty = 1; 
    27     my.moduleMethod = function () { 
    28         // ... 
     27    my.elements = {}; 
     28     
     29    my.selectors = { 
     30        containers: "div.cms_tpv_container", 
     31        action_div: "div.cms_tpv_page_actions", 
     32        action_doit: "div.cms_tpv_action_add_doit" 
    2933    }; 
    3034 
    3135    my.init = function() { 
    3236        my.log("init cms tree page view"); 
     37        my.setup_elements(); 
     38        my.setup_listeners(); 
     39    }; 
     40 
     41    my.setup_elements = function() { 
     42        for (var elm in my.selectors) { 
     43            if (my.selectors.hasOwnProperty(elm)) 
     44                my.elements[elm] = $(my.selectors[elm]); 
     45        } 
     46    }; 
     47 
     48    my.setup_listeners = function() { 
     49         
     50        // When something has been written in one of the page titles: show another row 
     51        // Also: if more than one row are empty at the end, remove all but the last 
     52        $(document).on("keyup", "ul.cms_tpv_action_add_doit_pages li:last input", function(e) { 
     53 
     54            var $t = $(this); 
     55            var $li = $t.closest("li"); 
     56 
     57            if ($.trim($t.val()) !== "") { 
     58             
     59                var $new_li = $li.clone(); 
     60                $new_li.find("input").val(""); 
     61                $li.after( $new_li ); 
     62             
     63            } 
     64 
     65        }); 
     66 
     67        // Click on cancel-link = hide add-div 
     68        jQuery(document).on("click", "a.cms_tpv_add_cancel", function(e) { 
     69 
     70            e.preventDefault(); 
     71            cms_tree_page_view.elements.action_doit.slideUp("fast", function() { 
     72 
     73                // Reset status back to draft 
     74                $("input[name='cms_tpv_add_status'][value='draft']").attr("checked", true); 
     75 
     76                // Remove all LIs except the last one 
     77                $("ul.cms_tpv_action_add_doit_pages").find("li:not(:last)").remove(); 
     78 
     79 
     80            }); 
     81 
     82 
     83        }); 
     84 
     85        // Click on link to add pages 
     86        jQuery(document).on("click", "a.cms_tpv_action_add_page_after, a.cms_tpv_action_add_page_inside", function(e) { 
     87 
     88            e.preventDefault(); 
     89            var $this = jQuery(this); 
     90            var post_type = cms_tpv_get_post_type(this); 
     91            var selected_lang = cms_tpv_get_wpml_selected_lang(this); 
     92            var post_status = $this.closest("li").data("post_status"); 
     93 
     94            var add_type = ""; 
     95            if ($this.hasClass("cms_tpv_action_add_page_after")) { 
     96                add_type = "after"; 
     97            } else if ($this.hasClass("cms_tpv_action_add_page_inside")) { 
     98                add_type = "inside"; 
     99            } 
     100 
     101            // cms_tree_page_view.log("add page " + add_type); 
     102 
     103            // not allowed when status is trash 
     104            if (post_status == "trash") { 
     105                jAlert(cmstpv_l10n.Can_not_add_page_after_when_status_is_trash); 
     106                return; 
     107            } 
     108 
     109            // if status is draft then it's not ok to add sub pages 
     110            if (post_status == "draft") { 
     111                jAlert(cmstpv_l10n.Can_not_add_sub_page_when_status_is_draft); 
     112                return false; 
     113            } 
     114 
     115            var cms_tpv_action_add_doit_div = div_actions.find("div.cms_tpv_action_add_doit"); 
     116 
     117            // Make the list sortable 
     118            $("ul.cms_tpv_action_add_doit_pages").sortable({ 
     119                "axis": "y", 
     120                "items": "> li:not(:last)", 
     121                "containment": 'parent', 
     122                "forceHelperSize": true, 
     123                "forcePlaceholderSize": true, 
     124                "handle": "span:first", 
     125                "placeholder": "ui-state-highlight" 
     126            }); 
     127 
     128            // Set up correct values for input fields and radio buttons and then show form/section 
     129            cms_tpv_action_add_doit_div.find("[name='cms_tpv_add_type'][value='"+add_type+"']").attr("checked", "checked"); 
     130            cms_tpv_action_add_doit_div.find("[name='ref_post_id']").val( div_actions.data("post_id") ); 
     131            cms_tpv_action_add_doit_div.slideDown("fast", function() { 
     132                cms_tpv_action_add_doit_div.find("[name='cms_tpv_add_new_pages_names[]']").focus(); 
     133            }); 
     134 
     135            // 
     136            /* 
     137            jPrompt(cmstpv_l10n.Enter_title_of_new_page, "", "CMS Tree Page View", function(new_page_title) { 
     138                if (new_page_title) { 
     139                    var pageID = $this.parents("li:first").attr("id"); 
     140                    jQuery(".cms_tpv_message").html("<p>"+cmstpv_l10n.Adding_page+"</p>").slideDown("fast"); 
     141                    jQuery.post(ajaxurl, { 
     142                        "action": "cms_tpv_add_page", 
     143                        "pageID": pageID, 
     144                        "type": "after", 
     145                        "page_title": new_page_title, 
     146                        "post_type": post_type, 
     147                        "wpml_lang": selected_lang 
     148                    }, function(data, textStatus) { 
     149                        document.location = data; 
     150                    }); 
     151                } 
     152            }); 
     153            */ 
     154 
     155             
     156        }); // click add page 
     157 
     158        // submit form with new pages 
     159        jQuery(document).on("submit", "div.cms_tpv_action_add_doit form", function(e) { 
     160 
     161            //e.preventDefault(); 
     162 
     163            //console.log("submit baby"); 
     164 
     165 
     166 
     167        }); 
     168         
     169 
     170 
    33171    }; 
    34172 
     
    43181      
    44182    return my; 
    45 }()); 
    46  
    47 cms_tree_page_view.init(); 
     183 
     184}(jQuery)); 
     185 
     186// Bott it up on domready 
     187jQuery(function() { 
     188    cms_tree_page_view.init(); 
     189}); 
    48190 
    49191 
     
    179321    jQuery($container).on("mouseenter", "a", function(e) { 
    180322 
     323        // Don't activate if entered on ins-tag. We use that only for drag and drop 
     324        // if (e.relatedTarget && e.relatedTarget.tagName === "INS") return; 
     325 
    181326        cms_tree_page_view.log("mouseenter container"); 
    182327 
     
    192337        } 
    193338 
    194         // create new timer, no matter if one exists already 
     339        // create new timer to show action div, no matter if one exists already 
     340        // but not if we are creating new pages 
    195341        cms_tree_page_view.log("add timer for mousover on link"); 
    196         var timeoutID = setTimeout(function(e) { 
    197             cms_tpv_mouseover_li(e); 
    198         }, 500, e); 
    199  
    200         $container.data("cmstpv_global_link_timer", timeoutID); 
     342        if ( ! cms_tree_page_view.elements.action_doit.is(":visible") ) { 
     343             
     344            var timeoutID = setTimeout(function(e) { 
     345                cms_tpv_mouseover_li(e); 
     346            }, 500, e); 
     347 
     348            $container.data("cmstpv_global_link_timer", timeoutID); 
     349 
     350        } 
    201351 
    202352    }); 
     
    244394 
    245395 
    246 // Click on link to add page after the current page 
    247 jQuery(document).on("click", "a.cms_tpv_action_add_page_after", function(e) { 
     396 
     397// Click on link to add page insde another page 
     398/* 
     399jQuery(document).on("click", "a.cms_tpv_action_add_page_inside", function(e) { 
    248400 
    249401    var $this = jQuery(this); 
    250402    var post_type = cms_tpv_get_post_type(this); 
    251403    var selected_lang = cms_tpv_get_wpml_selected_lang(this); 
    252  
    253     var post_status = $this.closest("li").data("post_status"); 
    254  
    255     // not allowed when status is trash 
    256     if (post_status == "trash") { 
    257         jAlert(cmstpv_l10n.Can_not_add_page_after_when_status_is_trash); 
    258         return false; 
    259     } 
    260  
    261     jPrompt(cmstpv_l10n.Enter_title_of_new_page, "", "CMS Tree Page View", function(new_page_title) { 
    262         if (new_page_title) { 
    263             var pageID = $this.parents("li:first").attr("id"); 
    264             jQuery(".cms_tpv_message").html("<p>"+cmstpv_l10n.Adding_page+"</p>").slideDown("fast"); 
    265             jQuery.post(ajaxurl, { 
    266                 "action": "cms_tpv_add_page", 
    267                 "pageID": pageID, 
    268                 "type": "after", 
    269                 "page_title": new_page_title, 
    270                 "post_type": post_type, 
    271                 "wpml_lang": selected_lang 
    272             }, function(data, textStatus) { 
    273                 document.location = data; 
    274             }); 
    275         } 
    276     }); 
    277  
    278     return false; 
    279 }); 
    280  
    281 // Click on link to add page insde another page 
    282 jQuery(document).on("click", "a.cms_tpv_action_add_page_inside", function(e) { 
    283     var $this = jQuery(this); 
    284     var post_type = cms_tpv_get_post_type(this); 
    285     var selected_lang = cms_tpv_get_wpml_selected_lang(this); 
    286      
    287404    var post_status = $this.closest("li").data("post_status"); 
    288405 
     
    318435        } 
    319436    }); 
    320     return false; 
    321 }); 
    322  
     437     
     438}); 
     439*/ 
    323440 
    324441 
     
    375492            // add post title as headline 
    376493            div_actions_for_post_type.find(".cms_tpv_page_actions_headline").html( $li.data("post_title") ); 
     494 
     495            // add post id to data 
     496            div_actions_for_post_type.data("post_id", $li.data("post_id")); 
    377497             
    378498            // position and show action div 
    379  
    380             //console.log( jQuery(window).position() ); 
    381             //console.log( jQuery(window).offset() ); 
    382  
    383499            var $a = $li.find("a"); 
    384500            var width = $a.outerWidth(true); 
     
    435551    var t = this; 
    436552     
    437     // reset global timer 
     553    // Reset global timer 
    438554    var global_timer = $container.data("cmstpv_global_link_timer"); 
    439555    if (global_timer) { 
     
    442558    } 
    443559 
    444     // hide popup after a short while 
     560    // Don't hide if in add-pages-mode 
     561    if ( cms_tree_page_view.elements.action_doit.is(":visible") ) 
     562        return; 
     563 
     564    // Maybe hide popup after a short while 
    445565    var hideTimer = setTimeout(function() { 
    446566         
     
    462582    }, 500); 
    463583 
    464     // $container.data("cmstpv_global_hide_timer", hideTimer); 
    465  
    466 }); 
    467  
    468 /// When mouse enters actions div then cancel possibly global hide timer 
    469 /* 
     584    $container.data("cmstpv_global_link_timer", hideTimer); 
     585 
     586}); 
     587 
     588// When mouse enters actions div then cancel possibly global hide timer 
     589// If moved outside container and then back, cancel possibly global timer 
    470590jQuery(document).on("mouseenter", "div.cms_tpv_page_actions", function(e) { 
    471591     
     
    473593    var $wrapper = $this.closest("div.cms_tpv_wrapper"); 
    474594    var $container = $wrapper.find("div.cms_tpv_container"); 
    475     var hideTimer = $container.data("cmstpv_global_hide_timer"); 
    476     console.log(hideTimer, "hidetimer"); 
    477     if (hideTimer) { 
    478         console.log("clearedIt!"); 
    479         clearTimeout(hideTimer); 
    480     } 
    481  
    482 }); 
    483 */ 
     595    var timer = $container.data("cmstpv_global_link_timer"); 
     596    // console.log("back to action div"); 
     597    clearTimeout(timer); 
     598 
     599}); 
    484600 
    485601 
  • cms-tree-page-view/trunk/styles/styles.css

    r625420 r627924  
    230230    /*transition: all .25s ease-in-out; -webkit-transition: all .25s ease-in-out; -moz-transition: all .25s ease-in-out; -o-transition: all .25s ease-in-out; -ms-transition: all .25s ease-in-out;*/ 
    231231    width: auto; 
    232     min-width: 175px; 
    233     width: 175px; 
     232    width: 200px; 
    234233    height: auto; 
    235234    background-color: white; 
     
    358357.cms_tpv_page_actions_arrow { 
    359358    display: none; 
    360     /* 
    361     width: 8px; 
    362     height: 15px; 
    363     background: url(images/arrow-left.gif) no-repeat top left; 
    364     position: absolute; 
    365     display: block; 
    366     left: -8px; 
    367     left: 0px; 
    368     */ 
    369359} 
    370360 
     
    377367    padding-right: 2px; 
    378368    vertical-align: middle; 
    379 } 
    380 .cms_tpv_page_actions_columns .post-com-count-wrapper { 
    381 } 
    382 .cms_tpv_wrapper .cms_tpv_page_actions_columns a.post-com-count { 
    383369} 
    384370 
     
    404390} 
    405391 
     392.cms_tpv_action_add_doit { 
     393    /*background-color: lightyellow;*/ 
     394    display: none; 
     395} 
     396 
     397.cms_tpv_action_add_doit fieldset { 
     398    border: 1px solid #ddd; 
     399    border-left-width: 0; 
     400    border-right-width: 0; 
     401    padding: .75em .25em .75em 0; 
     402} 
     403 
     404.cms_tpv_action_add_doit h4, 
     405.cms_tpv_action_add_doit legend { 
     406    margin: 0; 
     407} 
     408 
     409.cms_tpv_action_add_doit form > div { 
     410    margin-top: .75em; 
     411} 
     412.cms_tpv_action_add_doit form > div:first-of-type { 
     413    margin-top: 0; 
     414} 
     415 
     416.cms_tpv_action_add_doit label { 
     417    margin-right: .5em; 
     418} 
     419 
     420ul.cms_tpv_action_add_doit_pages .ui-state-highlight { 
     421    display: block; 
     422} 
     423 
     424ul.cms_tpv_action_add_doit_pages { 
     425    position: relative; 
     426    margin: 0 0 0 -10px; 
     427    padding: 0; 
     428    overflow: auto; 
     429} 
     430.cms_tpv_action_add_doit_pages li { 
     431    display: block; 
     432    position: relative; 
     433    float: left; 
     434    padding: 0 0 0 0; 
     435    margin: 1px 0 1px 0; 
     436} 
     437.cms_tpv_action_add_doit_pages input { 
     438    float: left; 
     439    width: 90%; 
     440    transition: all .25s ease-in-out; -webkit-transition: all .25s ease-in-out; -moz-transition: all .25s ease-in-out; -o-transition: all .25s ease-in-out; -ms-transition: all .25s ease-in-out; 
     441} 
     442.cms_tpv_action_add_doit_pages span:first-child { 
     443    background: transparent url(https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.3/themes/ui-darkness/images/ui-icons_222222_256x240.png) no-repeat -2px -228px; 
     444    margin-top: 7px; 
     445    margin-right: 3px; 
     446    float: left; 
     447    width: 8px; 
     448    height: 10px; 
     449    cursor: move; 
     450} 
     451 
     452.cms_tpv_action_add_doit_pages li:last-child span:first-child { 
     453    visibility: hidden; 
     454} 
Note: See TracChangeset for help on using the changeset viewer.