Coded something up in Couch in an interesting way? Have a snippet or shortcode to share? Post it here for the community to benefit.
4 posts Page 1 of 1
A solution to 1-click publish/unpublish (viewtopic.php?f=4&p=31327#p31322)

2018-07-27-001.png
2018-07-27-001.png (10.43 KiB) Viewed 1100 times


Code: Select all

<cms:config_list_view >

    <cms:html>
      
      <cms:if "<cms:get_flash 'publish_status_success' />" >
         <cms:admin_add_js>
            $(function() {
               toastr.success("Your changes have been saved", "Success", { // TODO: localize
                  "positionClass": "toast-bottom-right",
                  "showDuration": "250",
                  "hideDuration": "250",
                  "timeOut": "2500",
                  "extendedTimeOut": "500",
                  "icon": '<cms:show_icon 'check' />'
               });
            });
         </cms:admin_add_js>
      </cms:if>

      <cms:if "<cms:is_ajax />">
         
         <cms:set status = "<cms:gpc 'status' />" />
         <cms:set pageid = "<cms:gpc 'id' />" />
         
         <cms:if status eq '1' >
            <cms:set new_publish_date = "<cms:date format='Y-m-d H:i:s' />" />
         <cms:else />   
            <cms:set new_publish_date = "0000-00-00 00:00:00" />
         </cms:if>
         
         <cms:db_persist
            _masterpage=k_template_name
            _page_id = pageid
            _mode='edit'         
            k_publish_date=new_publish_date
         >
            <cms:if k_success>
               <cms:set result_msg = 'Success!' scope='global'/>
               <cms:set_flash name='publish_status_success' value='1' />
            </cms:if>
            
            <cms:if k_error>
               <cms:set result_msg = 'Error!' scope='global'/>
            </cms:if>
         </cms:db_persist>
         
         <cms:abort msg=result_msg />
         
      </cms:if>   
               
    </cms:html>

   
    <cms:script>
      
      function k_delete_single( id, name ){
         var msg;
         if( name ){
            msg = 'Are you sure you want to delete page: '+name+'?';
         }
         else{
            msg = 'Are you sure you want to delete page';
         }
         if( confirm(msg) ){
            $('body').css('cursor', 'wait');

            var form = $('#k_admin_frm_list');
            var checkboxes = form.find( '.checkbox-item' ).not( ':disabled' );
            checkboxes.prop( 'checked', false );

            var col = $('#page-selector-'+id);
            col.prop( 'checked', true );

            form.find('#k_bulk_action').val('batch_delete');
            form.submit();
         }
         return false;
      }
                   
      function change_publish_status( id, status, name ){
         var msg = '';
         if( status === '1'){
            msg = 'Are you sure you want to publish page: '+name+'?';
         }
         else{
            msg = 'Are you sure you want to un-publish page: '+name+'?';
         }   
         if( confirm(msg) ){

            $('body').css('cursor', 'wait');
            $.ajax({
               method: "POST",
               url: "<cms:show k_qs_link />",
               data: { id: id, status: status },
                  success: function(data) {

                     //console.log(data);
                     window.alert(data);
                     location.reload();

                  }
            })   
         }
      }
                      
    </cms:script>

   
   <cms:if k_template_is_clonable = '1' >   
      <cms:field 'k_selector_checkbox' />
      <cms:field 'k_page_title' />
      <cms:field 'k_comments_count' />
      <cms:field 'k_page_foldertitle' />
      <cms:field 'k_page_date' />
      <cms:field 'k_actions' >
      
            <a class="icon tt" href="<cms:show k_update_link />" title="" data-original-title="Edit">
               <cms:show_icon name='pencil' />
            </a>
            
            <cms:if k_page_date = '0000-00-00 00:00:00' >
               <a class="icon tt" href="#" title="" onclick="change_publish_status( '<cms:show k_page_id />', '1', '<cms:show k_page_title />' ); return false;" data-original-title="Publish" style="fill:red">
                  <cms:show_icon name='power-standby' />
               </a>
            <cms:else />
               <a class="icon tt" href="#" title="" onclick="change_publish_status( '<cms:show k_page_id />', '0', '<cms:show k_page_title />' ); return false;" data-original-title="Unpublish">
                  <cms:show_icon name='power-standby' />
               </a>         
            </cms:if>         

         
            <a class="icon tt delete-list" href="#" onclick="k_delete_single( '<cms:show k_page_id />', '<cms:show k_page_title />' ); return false;" title="" data-original-title="Delete">
               <cms:show_icon name='trash' />
            </a>
            <a class="icon tt" href="<cms:show k_view_link />" target="_blank" title="" data-original-title="View">
               <cms:show_icon name='magnifying-glass' />
            </a>
            <a class="btn btn-actions" role="button" tabindex="0">
               <cms:show_icon name='ellipses' />
            </a>

      </cms:field>
   </cms:if>
   
</cms:config_list_view>





Solution effectively recreates action buttons and adds an extra button there.
A click on new button sends an ajax request to the backend. A css trick marks the svg icon with color if page is unpublished. Various types of confirmations employed, so you can disable those you don't want.
Say `Please!` [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]..... Active topics [Forum posts from previous 7 days].... helpcouch@mail.ru [My email for friends]
@trendoman

Can this be implemented from the front end?

For example, If there is a clonable template creating employees and the employees need to be activated or deactivated. So can it be achieved by the front end as well? If so, how?

I could see the backend function, but can that entire function be replicated on frontend in extended user module?

Nevertheless, great work there!

Regards,
GenXCoders
Image
where innovation meets technology
@trendo

This has been working great, saving a lot of time!

Could you possibly extend the ability to toggle the pages publish status via selecting checkboxes and the batch drop down? :)
I can see a way to do it via dropdown and unpublish-publish in bulk.
A jQuery script could add another option to dropdown dynamically. Backend code should take care of submitted string of page ids. Code above only deals with a single id.
If you don't want to mess with js-ajax-coding, PM me for a quote.
Say `Please!` [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]..... Active topics [Forum posts from previous 7 days].... helpcouch@mail.ru [My email for friends]
4 posts Page 1 of 1

Who is online

In total there is 1 user online :: 0 registered, 0 hidden and 1 guest
(based on users active over the past 5 minutes)

Users browsing this forum: No registered users and 1 guest