diff default/assets/vendors/theme-widgets/vendor/abraham/twitteroauth/src/Util.php @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/default/assets/vendors/theme-widgets/vendor/abraham/twitteroauth/src/Util.php	Sat May 31 09:21:51 2025 +0800
@@ -0,0 +1,115 @@
+<?php
+/**
+ * The MIT License
+ * Copyright (c) 2007 Andy Smith
+ */
+namespace Abraham\TwitterOAuth;
+
+class Util
+{
+    /**
+     * @param $input
+     *
+     * @return array|mixed|string
+     */
+    public static function urlencodeRfc3986($input)
+    {
+        $output = '';
+        if (is_array($input)) {
+            $output = array_map([__NAMESPACE__ . '\Util', 'urlencodeRfc3986'], $input);
+        } elseif (is_scalar($input)) {
+            $output = rawurlencode($input);
+        }
+        return $output;
+    }
+
+    /**
+     * @param string $string
+     *
+     * @return string
+     */
+    public static function urldecodeRfc3986($string)
+    {
+        return urldecode($string);
+    }
+
+    /**
+     * This function takes a input like a=b&a=c&d=e and returns the parsed
+     * parameters like this
+     * array('a' => array('b','c'), 'd' => 'e')
+     *
+     * @param string $input
+     *
+     * @return array
+     */
+    public static function parseParameters($input)
+    {
+        if (!is_string($input)) {
+            return [];
+        }
+
+        $pairs = explode('&', $input);
+
+        $parameters = [];
+        foreach ($pairs as $pair) {
+            $split = explode('=', $pair, 2);
+            $parameter = Util::urldecodeRfc3986($split[0]);
+            $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : '';
+
+            if (isset($parameters[$parameter])) {
+                // We have already recieved parameter(s) with this name, so add to the list
+                // of parameters with this name
+
+                if (is_scalar($parameters[$parameter])) {
+                    // This is the first duplicate, so transform scalar (string) into an array
+                    // so we can add the duplicates
+                    $parameters[$parameter] = [$parameters[$parameter]];
+                }
+
+                $parameters[$parameter][] = $value;
+            } else {
+                $parameters[$parameter] = $value;
+            }
+        }
+        return $parameters;
+    }
+
+    /**
+     * @param array $params
+     *
+     * @return string
+     */
+    public static function buildHttpQuery(array $params)
+    {
+        if (empty($params)) {
+            return '';
+        }
+
+        // Urlencode both keys and values
+        $keys = Util::urlencodeRfc3986(array_keys($params));
+        $values = Util::urlencodeRfc3986(array_values($params));
+        $params = array_combine($keys, $values);
+
+        // Parameters are sorted by name, using lexicographical byte value ordering.
+        // Ref: Spec: 9.1.1 (1)
+        uksort($params, 'strcmp');
+
+        $pairs = [];
+        foreach ($params as $parameter => $value) {
+            if (is_array($value)) {
+                // If two or more parameters share the same name, they are sorted by their value
+                // Ref: Spec: 9.1.1 (1)
+                // June 12th, 2010 - changed to sort because of issue 164 by hidetaka
+                sort($value, SORT_STRING);
+                foreach ($value as $duplicateValue) {
+                    $pairs[] = $parameter . '=' . $duplicateValue;
+                }
+            } else {
+                $pairs[] = $parameter . '=' . $value;
+            }
+        }
+        // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
+        // Each name-value pair is separated by an '&' character (ASCII code 38)
+        return implode('&', $pairs);
+    }
+}