/home/arranoyd/energyclinic.com.hr/wp-content/plugins/docket-cache/includes/src/TransientDb.php
<?php
/**
 * Docket Cache.
 *
 * @author  Nawawi Jamili
 * @license MIT
 *
 * @see    https://github.com/nawawi/docket-cache
 */

/*
 * Store Transients in DB.
 */

namespace Nawawi\DocketCache;

\defined('ABSPATH') || exit;

final class TransientDb
{
    public function set($transient, $value, $group, $timeout)
    {
        $result = false;

        // we set autoload with 'no' to prevent it store in alloptions.
        // timeout in timestamp, always set expiration.
        if ('transient' === $group) {
            $transient_timeout = '_transient_timeout_'.$transient;
            $transient_option = '_transient_'.$transient;

            if (false === get_option($transient_option)) {
                add_option($transient_timeout, $timeout, '', 'no');
                $result = add_option($transient_option, $value, '', 'no');
            } else {
                update_option($transient_timeout, $timeout, 'no');
                $result = update_option($transient_option, $value, 'no');
            }
        } elseif ('site-transient' === $group) {
            $transient_timeout = '_site_transient_timeout_'.$transient;
            $option = '_site_transient_'.$transient;

            if (false === get_site_option($option)) {
                add_site_option($transient_timeout, $timeout);
                $result = add_site_option($option, $value);
            } else {
                update_site_option($transient_timeout, $timeout);
                $result = update_site_option($option, $value);
            }
        }

        return $result;
    }

    public function get($transient, $group)
    {
        if ('transient' === $group) {
            $transient_option = '_transient_'.$transient;
            if (!wp_installing()) {
                $alloptions = wp_load_alloptions();
                if (!isset($alloptions[$transient_option])) {
                    $transient_timeout = '_transient_timeout_'.$transient;
                    $timeout = get_option($transient_timeout);
                    if (false !== $timeout && $timeout < time()) {
                        delete_option($transient_option);
                        delete_option($transient_timeout);

                        return false;
                    }
                }
            }

            return get_option($transient_option);
        }

        if ('site-transient' === $group) {
            $transient_option = '_site_transient_'.$transient;
            $transient_timeout = '_site_transient_timeout_'.$transient;
            $timeout = get_site_option($transient_timeout);
            if (false !== $timeout && $timeout < time()) {
                delete_site_option($transient_option);
                delete_site_option($transient_timeout);

                return false;
            }

            return get_site_option($transient_option);
        }

        return false;
    }

    public function delete($transient, $group)
    {
        $result = false;

        if ('transient' === $group) {
            $option_timeout = '_transient_timeout_'.$transient;
            $option = '_transient_'.$transient;
            $result = delete_option($option);

            if ($result) {
                delete_option($option_timeout);
            }
        } elseif ('site-transient' === $group) {
            $option_timeout = '_site_transient_timeout_'.$transient;
            $option = '_site_transient_'.$transient;
            $result = delete_site_option($option);

            if ($result) {
                delete_site_option($option_timeout);
            }
        }

        return $result;
    }

    public function match_key($key)
    {
        return preg_match('@^(_site)?(_transient)(_timeout)?_@', $key);
    }
}