File "class-sidebar-generator.php"

Full Path: /home/siazco/grocery.siazco.se/wp-content/themes/kapee/inc/classes/class-sidebar-generator.php
File size: 4.19 KB
MIME-type: text/x-php
Charset: utf-8

<?php
if (!class_exists('Kapee_sidebar')) {

	class Kapee_sidebar{
		
		public $sidebars  = array();
		public $stored = "kapee_sidebars";
		public $paths  = array();
		public $title;

		function __construct() {

		    $this->title = esc_html__('Add Custom Widget Area', 'kapee');
			$this->stored = 'kapee_sidebars';

			add_action('load-widgets.php', array(&$this, 'enqueue_assets') , 4);
			add_action('load-widgets.php', array(&$this, 'add_sidebar'), 99);

			add_action('widgets_init', array(&$this, 'registerSidebars') , 900 );

			// ajax
			add_action('wp_ajax_delete_custom_sidebar', array(&$this, 'delete_sidebar') , 50);
		}

		public function registerSidebars() {
			if (empty($this->sidebars)) {
				$this->sidebars = get_option($this->stored);
			}
			$args = array(
				'before_widget' => '<div id="%1$s" class="widget %2$s">',
				'after_widget'  => '</div>',
				'before_title'  => '<h2 class="widget-title">',
				'after_title'   => '</h2>',
			);
			if (is_array($this->sidebars)) {
				foreach ($this->sidebars as $sidebar) {
					$args['class'] = 'kapee-custom';
					$args['name']  = $sidebar;
					$args['id']  = sanitize_title($sidebar);
					register_sidebar($args);
				}
			}
		}

		public function enqueue_assets() {
			add_action('admin_print_scripts', array(&$this, 'add_field') );
			wp_enqueue_script('kp-sidebar-script' , KAPEE_ADMIN_DIR_URI . 'assets/js/custom_sidebar.js');
			wp_enqueue_style( 'kp-sidebar-style' , KAPEE_ADMIN_DIR_URI . 'assets/css/custom_sidebar.css');
		}

		public function add_field() {
            $add_widget_js = "\n<script type='text/html' id='tmpl-add-widget'>";
			$add_widget_js .= "\n  <form class='form-add-widget' method='POST'>";
			$add_widget_js .= "\n  <h3>". $this->title ."</h3>";
			$add_widget_js .= "\n    <p><input size='30' type='text' value='' placeholder = '". esc_attr__('Enter Name for new Widget Area', 'kapee') ."' name='form-add-widget' /></p>";
			$add_widget_js .= "\n    <input class='button button-primary' type='submit' value='". esc_attr__('Add Widget Area', 'kapee') ."' />";
			$add_widget_js .= "\n    <input type='hidden' name='custom-sidebar-nonce' value='". wp_create_nonce('custom-sidebar-nonce') ."' />";
			$add_widget_js .= "\n  </form>";
			$add_widget_js .= "\n</script>\n";
			
			echo apply_filters( 'kapee_template_add_widget_js', $add_widget_js ); // WPCS: XSS OK.
		}

		public function add_sidebar() {
            if (!empty($_POST['form-add-widget'])) {
                $this->sidebars = get_option($this->stored);
                $name = $this->get_name($_POST['form-add-widget']);
				var_dump($this->sidebars);
                if (empty($this->sidebars)) {
                    $this->sidebars = array($name);
                } else {
                    $this->sidebars = array_merge($this->sidebars, array($name));
                }
                update_option($this->stored, $this->sidebars);
                wp_redirect(admin_url('widgets.php'));
                die();
            }
		}

		public function delete_sidebar() {

            check_ajax_referer('custom-sidebar-nonce');

			if (empty($_POST['name'])) return;

			$name = stripslashes($_POST['name']);
			$this->sidebars = get_option($this->stored);

			if (($key = array_search($name, $this->sidebars)) !== false) {
				unset($this->sidebars[$key]);
				update_option($this->stored, $this->sidebars);
			}

			die('widget-deleted');
		}

		public function get_name($name) {
			global $wp_registered_sidebars;
			$take = array();

			if (empty($this->sidebars)) $this->sidebars = array();
			if (empty($wp_registered_sidebars)) return $name;

            foreach ($wp_registered_sidebars as $sidebar) {
				$take[] = $sidebar['name'];
		    }
			$take = array_merge($take, $this->sidebars);

		    if (in_array($name, $take)) {

                 $counter = substr($name, -1);

                if (!is_numeric($counter))  {
					$newName = $name . " 1";
                } else {
					$newName = substr($name, 0, -1) . ((int) $counter + 1);
                }
                $name = $this->get_name($newName);
		    }
		    return $name;
		}

	}
	$obj_kp_custom_sidebar = new Kapee_sidebar();
}