• File: class-revisions.php
  • Full Path: /home/matthif/www/wp-content/plugins/wpforms-lite/includes/admin/builder/panels/class-revisions.php
  • Date Modified: 02/16/2024 11:45 AM
  • File size: 4.61 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

if ( ! defined'ABSPATH' ) ) {
    exit;
}

/**
 * Revisions management panel.
 *
 * @since 1.7.3
 */
class WPForms_Builder_Panel_Revisions extends WPForms_Builder_Panel {

    
/**
     * All systems go.
     *
     * @since 1.7.3
     */
    
public function init() {

        
// Define panel information.
        
$this->name    esc_html__'Revisions''wpforms-lite' );
        
$this->slug    'revisions';
        
$this->icon    'fa-history';
        
$this->order   10;
        
$this->sidebar true;

        
$this->hooks();
    }

    
/**
     * Hook into WordPress lifecycle.
     *
     * @since 1.7.3
     */
    
private function hooks() {

        
// Add a notice above all panels if revision is loaded.
        
add_action'wpforms_builder_panels', [ $this'panel_notice' ], 100);
    }

    
/**
     * Primary panel button in the left panel navigation.
     *
     * @since 1.7.3
     *
     * @param mixed  $form The form object.
     * @param string $view Current view/panel.
     */
    
public function button$form$view ) {

        
$classes 'wpforms-panel-revisions-button';

        if ( 
$view === $this->slug ) {
            
$classes .= ' active';
        }

        
$badge '';

        if ( 
$this->form && ! wp_revisions_enabled$this->form ) && ! wpforms()->get'revisions' )->panel_viewed() ) {
            
$badge '
                <span class="badge-exclamation">
                    <svg width="4" height="10" fill="none">
                        <path fill="#fff" fill-rule="evenodd" d="M3.5 8.1c0-.8-.7-1.5-1.5-1.5S.5 7.3.5 8.1 1.2 9.6 2 9.6 3.5 8.9 3.5 8ZM1 .9c-.3 0-.5.2-.4.4l.2 4.4c0 .2.2.3.4.3h1.6c.2 0 .3-.1.4-.3l.2-4.4c0-.2-.2-.4-.4-.4H1Z" clip-rule="evenodd"/>
                    </svg>
                </span>'
;
        }

        
printf(
            
'<div class="wpforms-panel-revisions-button-spacer"></div>
            <button class="%1$s" data-panel="%2$s" title="%6$s">
                %3$s
                <i class="fa %4$s"></i>
                <span class="screen-reader-text">%5$s</span>
            </button>'
,
            
esc_attr$classes ),
            
esc_attr$this->slug ),
            
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
            
$badge,
            
esc_attr$this->icon ),
            
esc_html$this->name ),
            
esc_html__'Form Revisions''wpforms-lite' )
        );
    }

    
/**
     * Output the Settings panel sidebar.
     *
     * @since 1.7.3
     */
    
public function panel_sidebar() {

        
// Sidebar contents are not valid unless we have a form.
        
if ( ! $this->form ) {
            return;
        }

        
printf(
            
'<div class="wpforms-revisions-header">
                <h3>%s</h3>
                <p>%s</p>
            </div>'
,
            
esc_html__'Form Revisions''wpforms-lite' ),
            
esc_html__'Select a revision to roll back to that version. All changes, including settings, will be reverted.''wpforms-lite' )
        );

        
// Render a list of form revisions, including current version. All data is safe, escaped in the template.
        // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
        
echo wpforms()->get'revisions' )->render_revisions_list();

        
$revisions_to_keep wp_revisions_to_keep$this->form );

        if ( 
$revisions_to_keep === ) {
            
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
            
echo wpforms_render'builder/revisions/notice-disabled' );
        }

        if ( 
$revisions_to_keep ) {
            
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
            
echo wpforms_render(
                
'builder/revisions/notice-limited',
                [
                    
'revisions_to_keep' => $revisions_to_keep,
                ],
                
true
            
);
        }
    }

    
/**
     * Output revision notice above the panels.
     *
     * @since 1.7.3
     *
     * @return void
     */
    
public function panel_notice() {

        
$revision wpforms()->get'revisions' )->get_revision();

        if ( ! 
$revision ) {
            return;
        }

        
$restore_link sprintf(
            
'<a href="%1$s">%2$s</a>',
            
esc_url(
                
wp_nonce_url(
                    
wpforms()->get'revisions' )->get_url(
                        [
                            
'revision_id' => $revision->ID,
                            
'action'      => 'restore_revision',
                        ]
                    ),
                    
'restore_revision',
                    
'wpforms_nonce'
                
)
            ),
            
__'Restore this revision''wpforms-lite' )
        );

        
$back_link sprintf(
            
'<a href="%1$s">%2$s</a>',
            
esc_urlwpforms()->get'revisions' )->get_url() ),
            
__'go back to the current version''wpforms-lite' )
        );

        
$message sprintf/* translators: %1$s - revision date, %2$s - revision time, %3$s - "Restore this revision" link, %4$s - "go back to the current version" link. */
            
__'You’re currently viewing a form revision from %1$s at %2$s. %3$s or %4$s.''wpforms-lite' ),
            
wpforms()->get'revisions' )->get_formatted_datetime$revision->post_modified_gmt ),
            
wpforms()->get'revisions' )->get_formatted_datetime$revision->post_modified_gmt'time' ),
            
$restore_link,
            
$back_link
        
);

        
printf(
            
'<div class="wpforms-revision-notice">
                <p><i class="fa fa-history"></i>%s</p>
            </div>'
,
            
wp_kses(
                
$message,
                [
                    
'a' => [
                        
'href' => [],
                    ],
                ]
            )
        );
    }
}

new 
WPForms_Builder_Panel_Revisions();