File "AdminController.php"

Full Path: /home/vantageo/public_html/wp-admin/.wp-cli/wp-content/plugins/resmushit-image-optimizer/classes/Controller/AdminController.php
File size: 12.85 KB
MIME-type: text/x-php
Charset: utf-8

<?php
namespace Resmush\Controller;

use \reSmushitUI as reSmushitUI;
use \reSmushit as reSmushit;

use \Resmush\ShortPixelLogger\ShortPixelLogger as Log;


if (! defined('ABSPATH')) {
    exit; // Exit if accessed directly.
}

// EVerything to do with AdminActions / WordPress
class AdminController
{
  protected static $instance;


  public static function getInstance()
  {
    if (is_null(self::$instance))
     self::$instance = new AdminController();

    return self::$instance;
  }

  public function __construct()
  {
      if(!is_super_admin() && !current_user_can('administrator')) {
        return;
      }

      $this->initHooks();
  }

  protected function initHooks()
  {

      add_action( 'admin_menu', array($this, 'add_menu') );
      add_action( 'admin_init', array($this, 'settings_declare') );
      add_filter( 'manage_media_columns', array($this, 'media_list_add_column') );
    //  add_filter( 'manage_upload_sortable_columns', array($this,'media_list_sort_column') );
      add_action( 'manage_media_custom_column', array($this,'media_list_add_column_value'), 10, 2 );
    //  add_filter("attachment_fields_to_edit", array($this, 'image_attachment_add_status_button'), null, 2);

      add_action( 'add_meta_boxes_attachment', array( $this, 'addMetaBox') );

      add_action( 'admin_head', array($this,'register_plugin_assets') );

      add_filter('plugin_action_links_' . plugin_basename(RESMUSH_PLUGIN_FILE), array($this, 'add_plugin_page_settings_link'));
  }

  /**
  *
  * Create menu entries and routing
  *
  * @param none
  * @return none
  */
  public function add_menu() {
    if ( ! current_user_can( 'manage_options' ) ) {
  		return;
  	}

  		add_submenu_page( 'options-general.php', 'reSmush.it', 'reSmush.it', 'manage_options', 'resmushit_options', array($this, 'settings_page'));
  }

  /**
  *
  * Declares settings entries
  *
  * @param none
  * @return none
  */
  public function settings_declare() {
  	register_setting( 'resmushit-settings', 'resmushit_on_upload' );
  	register_setting( 'resmushit-settings', 'resmushit_qlty' );
  	register_setting( 'resmushit-settings', 'resmushit_statistics' );
  	register_setting( 'resmushit-settings', 'resmushit_logs' );
  	register_setting( 'resmushit-settings', 'resmushit_cron' );
  	register_setting( 'resmushit-settings', 'resmushit_preserve_exif' );
  	register_setting( 'resmushit-settings', 'resmushit_remove_unsmushed' );
  	register_setting( 'resmushit-settings', 'resmushit_notice_close' );
  }

  // Add metabox for editmediaview sie.
  public function addMetaBox()
  {
      add_meta_box(
          'rsi_info_box',          // this is HTML id of the box on edit screen
          __('reSmush.it', 'resmushit-image-optimizer'),    // title of the box
          array( $this, 'displayMetaBox'),   // function to be called to display the info
          null,//,        // on which edit screen the box should appear
          'side'//'normal',      // part of page where the box should appear
          //'default'      // priority of the box
      );
  }

  public function displayMetaBox($post)
  {
    $post_id = $post->ID;
    if (false === $this->isAllowedExtension($post_id))
    {
       return;
    }

    echo "<div>";
    reSmushitUI::mediaListCustomValuesStatus($post_id);
    echo "</div><div><br>";
    reSmushitUI::mediaListCustomValuesDisable($post_id);
    echo "</div>";

  }

  /**
  *
  * Add Columns to the media panel
  *
  * @param array $columns
  * @return $columns
  */
  public function media_list_add_column( $columns ) {
//  	$columns["resmushit_disable"] 	= __('Disable of reSmush.it', 'resmushit-image-optimizer');
	$columns["resmushit_status"] 	= __('reSmush.it Status', 'resmushit-image-optimizer');
  	return $columns;
  }



  /**
  *
  * Sort Columns to the media panel
  *
  * @param array $columns
  * @return $columns
  */
  public function media_list_sort_column( $columns ) {
  //	$columns["resmushit_disable"] 	= "resmushit_disable";
  	$columns["resmushit_status"] 	= "resmushit_status";
  	return $columns;
  }



  /**
  *
  * Add Value to Columns of the media panel
  *
  * @param string $column_name
  * @param string $identifier of the column
  * @return none
  */
  public function media_list_add_column_value( $column_name, $id ) {

      if ($column_name !== 'resmushit_status')
      {
         return;
      }

      if (false === $this->isAllowedExtension($id))
      {
         return;
      }


      echo "<div>";
  		reSmushitUI::mediaListCustomValuesStatus($id);
echo "</div><div>";
      reSmushitUI::mediaListCustomValuesDisable($id);
echo "</div>";
  }


  public function isAllowedExtension($id)
  {

    $file = get_attached_file($id);
    $fs = Resmush()->fs();

    $fileObj = $fs->getFile($file);
    if (false ===  in_array($fileObj->getExtension(), reSmushit::authorizedExtensions()))
    {
       return false;
    }

    return true;

  }


  /**
  *
  * Add custom field to attachment
  *
  * @param array $form_fields
  * @param object $post
  * @return array
  */
  public function image_attachment_add_status_button($form_fields, $post) {
  	if ( !preg_match("/image.*/", $post->post_mime_type) )
  		return $form_fields;

      if (false === $this->isAllowedExtension($post->ID))
      {
         return;
      }

  	$form_fields["rsmt-disabled-checkbox"] = array(
  		"label" => __("Disable of reSmush.it", "resmushit-image-optimizer"),
  		"input" => "html",
  		"value" => '',
  		"html"  => reSmushitUI::mediaListCustomValuesDisable($post->ID, true)
  	);

  	$form_fields["rsmt-status-button"] = array(
		"label" => __("reSmush.it Status", "resmushit-image-optimizer"),
		"input" => "html",
		"value" => '',
		"html"  => reSmushitUI::mediaListCustomValuesStatus($post->ID, true)
  	);
  	return $form_fields;
  }



  /**
  *
  * Settings page builder
  *
  * @param none
  * @return none
  */
  public function settings_page() {
  	?>
    <div class='rsmt-panels header-panel'>
  			<?php reSmushitUI::headerPanel();?>
    </div>
  	<div class='rsmt-panels resmush-settings-ui'>

     <div class="rsmt-cols w10 iln-block nav-block">
        <ul class='rsmt-tabs-nav'>
          <li data-tab='actions' class='active'><?php _e('Dashboard','resmushit-image-optimizer'); ?></li>
          <li data-tab='settings'><?php _e('Settings', 'resmushit-image-optimizer'); ?></li>
          <li data-tab='feedback'><?php _e('Support', 'resmushit-image-optimizer'); ?> </a></li>
          <li class='kofi-li'>
            <span class='kofi-support'>
              <a href="https://ko-fi.com/E1E51PW00" target="_blank">
                <img width=22 height=15 src="<?php echo plugins_url('images/kofi.png', RESMUSH_PLUGIN_FILE); ?>">
                <span class='text'><?php _e('Support Us', 'resmushit-image-optimizer'); ?></span>
              </a>
            </span>
          </li>
          <li>
          <span class="kofi-support">
              <a href="https://wordpress.org/support/plugin/resmushit-image-optimizer/reviews/#new-post" target="_blank">
                <img width="22" height="15" src="<?php echo plugins_url('images/star.png', RESMUSH_PLUGIN_FILE); ?>">
                <span class="text"><?php esc_html_e( 'Rate Us', 'resmushit-image-optimizer' ); ?></span>
              </a>
            </span>
          </li>
        </ul>

     </div>

  		<div class="rsmt-cols w60 iln-block rsmt-tab rsmt-tab-actions active">
  			<?php reSmushitUI::alertPanel();?>
  			<?php reSmushitUI::bulkPanel();?>
  			<?php reSmushitUI::bigFilesPanel();?>
  			<?php reSmushitUI::statisticsPanel();?>
  			<?php reSmushitUI::restorePanel();?>
  		</div>

      <div class='rsmt-cols w60 iln-block rsmt-tab rsmt-tab-settings' style='display:none'>
        <?php reSmushitUI::settingsPanel();?>
      </div>

      <div class='rsmt-cols w60 iln-block rsmt-tab rsmt-tab-feedback' style='display:none'>
        <?php reSmushitUI::feedbackPanel();?>
      </div>

      <div class="rsmt-cols w30 iln-block message-wrapper">
        <div class='shortpixel-message'>
          <img src='<?php echo RESMUSHIT_BASE_URL  ?>images/shortpixel-text-logo.svg' />
          <ul class='options'>
          <li><?php esc_html_e( 'Unlimited image optimization', 'resmushit-image-optimizer' ); ?></li>
          <li><?php esc_html_e( 'Unlimited domains', 'resmushit-image-optimizer' ); ?></li>
          <li><?php esc_html_e( 'WebP&amp;AVIF conversion', 'resmushit-image-optimizer' ); ?><li>
					<li><?php esc_html_e( '500GB CDN Traffic', 'resmushit-image-optimizer' ); ?></li>
          <li><?php esc_html_e( '$9.99 / month', 'resmushit-image-optimizer' ); ?></li>
        </ul>
        <div class='button-wrapper'>
          <a class='button' href="https://shortpixel.com/ms/af/C34DUIL28044" target="_blank"><?php esc_html_e( 'Buy now', 'resmushit-image-optimizer' ); ?></a>
        </div>
          <div class='link-under'>
            <a href="https://shortpixel.com/compare/resmushit-vs-shortpixel" target="_blank"><?php _e('Why is premium optimization better?', 'resmushit-image-optimizer'); ?></a>
          </div>
      </div>
    </div>

  	</div> <!-- // ui -->
  	<?php
  }



  /**
  *
  * Assets declaration
  *
  * @param none
  * @return none
  */
  public function register_plugin_assets(){
   	/*$allowed_pages = array(
  						//	'media_page_resmushit_options',
  							'settings_page_resmushit_options',
   							'upload',
   							'dashboard',
   							'post',
  							'plugins',
  							'edit-post',
  							'media',
   							'attachment');
    */
    $admin_pages = array(
              'settings_page_resmushit_options',
    );

    $media_pages = array(
      'upload',
      'post',
      'attachment',
      'media'
    );

  		$current_page = get_current_screen();

  		wp_register_style( 'resmushit-css', plugins_url( 'css/resmushit.css', RESMUSH_PLUGIN_FILE ), array(), RESMUSH_PLUGIN_VERSION);

      wp_register_style('resmushit-admin-css', plugins_url('css/resmush_admin.css', RESMUSH_PLUGIN_FILE), array(), RESMUSH_PLUGIN_VERSION);
      wp_register_style('resmushit-media-css', plugins_url('css/resmush_media.css', RESMUSH_PLUGIN_FILE), array(), RESMUSH_PLUGIN_VERSION);

  	    wp_register_script( 'resmushit-js', plugins_url( 'js/script.js?' . hash_file('crc32',  RESMUSH_PLUGIN_PATH . '/js/script.js'), RESMUSH_PLUGIN_FILE ) );

        $translations = array(
            'restore_all_confirm' => __("You are about to restore ALL your original image files. Are you sure you want to perform this operation?", "resmushit-image-optimizer"),
            'images_restored' => __('images successfully restored!', "resmushit-image-optimizer"),
            'backupfiles_removed' => __('backup files successfully removed!', "resmushit-image-optimizer"),
            'remove_backup_confirm' => __("You are about to delete your image backup files. Are you sure you want to perform this operation?", "resmushit-image-optimizer"),
            'removing_backups' => __('Removing backups...', "resmushit-image-optimizer"),
            'reduced_by' => __('Reduced by', "resmushit-image-optimizer"),
            'optimizing' => __('Optimizing...', "resmushit-image-optimizer"),
            'attachments_found' => __('image(s) found, starting optimization...', "resmushit-image-optimizer"),
            'no_attachments_found' => __('There are no images that need to be optimized.', "resmushit-image-optimizer"),
            'examing_attachments' => __('Checking existing images. This may take a few moments...', "resmushit-image-optimizer"),
            'picture_too_big' => __('image(s) cannot be optimized (>5MB). All others have been optimized.', "resmushit-image-optimizer"),
            'error_webservice' => __('An error occured when contacting the API. Please try again later.', "resmushit-image-optimizer"),
            'restoring' => __('Restoring...', 'resmushit-image-optimizer'),
            'stop_optimization' => __('Stop bulk optimization', 'resmushit-image-optimizer'),

        );
        wp_localize_script('resmushit-js', 'reSmush', array(
          'strings' => $translations,
        ));


        //Admin
        if (in_array( $current_page->id, $admin_pages ) ) {

          wp_enqueue_script( 'resmushit-js' );
          wp_enqueue_style( 'resmushit-css' );
          wp_enqueue_style('resmushit-admin-css');
          wp_enqueue_style( 'prefix-style', esc_url_raw( 'https://fonts.googleapis.com/css?family=Roboto+Slab:700' ), array(), null  );
  	     }
         elseif (in_array( $current_page->id, $media_pages ) )
         {
            wp_enqueue_script('resmushit-js');
            wp_enqueue_style('resmushit-media-css');
            wp_enqueue_style( 'resmushit-css' );

         }
  }

  /**
   * add 'Settings' link to options page from Plugins
   * @param array $links
   * @return string
   */
  public function add_plugin_page_settings_link($links) {
  	if(is_string($links)) {
  		$oneLink = $links;
  		$links = array();
  		$links[] = $oneLink;
  	}
	$links[] = '<a href="' . admin_url( 'options-general.php?page=resmushit_options' ) . '">' . __('Settings', "resmushit-image-optimizer") . '</a>';
  	return $links;
  }


} // class