<?php
namespace Concrete\Core\Utility\Service;

use Loader;

class Url
{
    public function setVariable($variable, $value = false, $url = false)
    {
        // either it's key/value as variables, or it's an associative array of key/values

        if ($url == false) {
            $url = Loader::helper('security')->sanitizeString($_SERVER['REQUEST_URI']);
        } elseif (!strstr($url, '?')) {
            $url = $url . '?' . Loader::helper('security')->sanitizeString(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '');
        }

        $vars = array();
        if (!is_array($variable)) {
            $vars[$variable] = $value;
        } else {
            $vars = $variable;
        }

        foreach ($vars as $variable => $value) {
            $url = preg_replace('/(.*)(\?|&)' . $variable . '=[^&]*?(&)(.*)/i', '$1$2$4', $url . '&');
            $url = substr($url, 0, -1);
            if (strpos($url, '?') === false) {
                $url = $url . '?' . $variable . '=' . $value;
            } else {
                $url = $url . '&' . $variable . '=' . $value;
            }
        }

        // THIS DOES NOT WORK. SOMEONE WILL NEED TO FIX THIS PROPERLY IF THE W3C FOLKS WANT IT TO WORK
        //$url = str_replace('&', '&amp;', $url);
        return $url;
    }

    public function unsetVariable($variable, $url = false)
    {
        // either it's key/value as variables, or it's an associative array of key/values

        if ($url == false) {
            $url = $_SERVER['REQUEST_URI'];
        } elseif (!strstr($url, '?')) {
            $url = $url . '?' . $_SERVER['QUERY_STRING'];
        }

        $vars = array();
        if (!is_array($variable)) {
            $vars[] = $variable;
        } else {
            $vars = $variable;
        }

        foreach ($vars as $variable) {
            $url = preg_replace('/(.*)(\?|&)' . $variable . '=[^&]*?(&)(.*)/i', '$1$2$4', $url . '&');
            $url = substr($url, 0, -1);
        }

        // THIS DOES NOT WORK. SOMEONE WILL NEED TO FIX THIS PROPERLY IF THE W3C FOLKS WANT IT TO WORK
        //$url = str_replace('&', '&amp;', $url);
        return $url;
    }
    public function buildQuery($url, $params)
    {
        return $url . '?' . http_build_query($params, '', '&');
    }

    /**
     * Shortens a given url with the tiny url api.
     *
     * @param string $strURL
     *
     * @return string $url
     */
    public function shortenURL($strURL)
    {
        $file = Loader::helper('file');
        $url = $file->getContents("http://tinyurl.com/api-create.php?url=".$strURL);

        return $url;
    }
}
