<?php
if (!defined('ABSPATH'))
die('No direct access allowed');
//keeps current user data
final class WOOBE_STORAGE {
public $type = 'transient'; //session, transient, cookie
private $user_ip = null;
private $transient_key = null;
public function __construct($type = '') {
if (!empty($type)) {
$this->type = $type;
}
$this->type = apply_filters('woobe_storage_type', $this->type);
if ($this->type == 'session') {
if (!session_id()) {
try {
@session_start();
} catch (Exception $e) {
//***
}
}
}
$this->user_ip = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP);
$this->transient_key = md5($this->user_ip . 'woobe_salt');
}
public function set_val($key, $value) {
switch ($this->type) {
case 'session':
WC()->session->set($key, $value);
break;
case 'transient':
$data = get_transient($this->transient_key);
if (!is_array($data)) {
$data = array();
}
$data[$key] = $value;
set_transient($this->transient_key, $data, 1 * 24 * 3600); //1 day
break;
case 'cookie':
setcookie($key, $value, time() + 1 * 24 * 3600); //1 day
break;
default:
break;
}
}
public function get_val($key) {
$value = NULL;
switch ($this->type) {
case 'session':
if ($this->is_isset($key)) {
$value = WC()->session->__get($key);
}
break;
case 'transient':
$data = get_transient($this->transient_key);
if (!is_array($data)) {
$data = array();
}
if (isset($data[$key])) {
$value = $data[$key];
}
break;
case 'cookie':
if ($this->is_isset($key)) {
$value = $_COOKIE[$key];
}
break;
default:
break;
}
return $value;
}
public function unset_val($key) {
switch ($this->type) {
case 'session':
if ($this->is_isset($key)) {
if (!is_null(WC()->session)) {
WC()->session->__unset($key);
} else {
$sess = new WC_Session_Handler();
$sess->__unset($key);
}
}
break;
case 'transient':
$data = get_transient($this->transient_key);
if (isset($data[$key])) {
unset($data[$key]);
}
set_transient($this->transient_key, $data, 1 * 24 * 3600); //1 day
//delete_transient($this->transient_key);
break;
case 'cookie':
if ($this->is_isset($key)) {
unset($_COOKIE[$key]);
setcookie($key, '', time() - 3600, '/');
}
break;
default:
break;
}
return false;
}
public function is_isset($key) {
$isset = false;
switch ($this->type) {
case 'session':
if (!is_null(WC()->session)) {
$isset = WC()->session->__isset($key);
} else {
$sess = new WC_Session_Handler();
$isset = $sess->__isset($key);
}
break;
case 'transient':
$isset = (bool) $this->get_val($key);
break;
case 'cookie':
$isset = isset($_COOKIE[$key]);
break;
default:
break;
}
return $isset;
}
}