/wp-content/plugins/backwpup/vendor/WindowsAzure/Common/Internal/ServiceSettings.php
PHP | 287 lines | 127 code | 32 blank | 128 comment | 15 complexity | 60c4eb98db5af838263e73a1f0800cfb MD5 | raw file
- <?php
- /**
- * LICENSE: Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP version 5
- *
- * @category Microsoft
- * @package WindowsAzure\Common\Internal
- * @author Azure PHP SDK <azurephpsdk@microsoft.com>
- * @copyright 2012 Microsoft Corporation
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
- * @link https://github.com/windowsazure/azure-sdk-for-php
- */
-
- namespace WindowsAzure\Common\Internal;
- use WindowsAzure\Common\Internal\Resources;
- /**
- * Base class for all REST services settings.
- *
- * Derived classes must implement the following members:
- * 1- $isInitialized: A static property that indicates whether the class's static
- * members have been initialized.
- * 2- init(): A protected static method that initializes static members.
- * 3- $validSettingKeys: A static property that contains valid setting keys for this
- * service.
- * 4- createFromConnectionString($connectionString): A public static function that
- * takes a connection string and returns the created settings object.
- *
- * @category Microsoft
- * @package WindowsAzure\Common\Internal
- * @author Azure PHP SDK <azurephpsdk@microsoft.com>
- * @copyright 2012 Microsoft Corporation
- * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
- * @version Release: 0.4.1_2015-03
- * @link https://github.com/windowsazure/azure-sdk-for-php
- */
- abstract class ServiceSettings
- {
- /**
- * Throws an exception if the connection string format does not match any of the
- * available formats.
- *
- * @param type $connectionString The invalid formatted connection string.
- *
- * @return none
- *
- * @throws \RuntimeException
- */
- protected static function noMatch($connectionString)
- {
- throw new \RuntimeException(
- sprintf(Resources::MISSING_CONNECTION_STRING_SETTINGS, $connectionString)
- );
- }
-
- /**
- * Parses the connection string and then validate that the parsed keys belong to
- * the $validSettingKeys
- *
- * @param string $connectionString The user provided connection string.
- *
- * @return array The tokenized connection string keys.
- *
- * @throws \RuntimeException
- */
- protected static function parseAndValidateKeys($connectionString)
- {
- // Initialize the static values if they are not initialized yet.
- if (!static::$isInitialized) {
- static::init();
- static::$isInitialized = true;
- }
-
- $tokenizedSettings = ConnectionStringParser::parseConnectionString(
- 'connectionString',
- $connectionString
- );
-
- // Assure that all given keys are valid.
- foreach ($tokenizedSettings as $key => $value) {
- if (!Utilities::inArrayInsensitive($key, static::$validSettingKeys) ) {
- throw new \RuntimeException(
- sprintf(
- Resources::INVALID_CONNECTION_STRING_SETTING_KEY,
- $key,
- implode("\n", static::$validSettingKeys)
- )
- );
- }
- }
-
- return $tokenizedSettings;
- }
-
- /**
- * Creates an anonymous function that acts as predicate.
- *
- * @param array $requirements The array of conditions to satisfy.
- * @param boolean $isRequired Either these conditions are all required or all
- * optional.
- * @param boolean $atLeastOne Indicates that at least one requirement must
- * succeed.
- *
- * @return callable
- */
- protected static function getValidator($requirements, $isRequired, $atLeastOne)
- {
- // @codingStandardsIgnoreStart
-
- return function ($userSettings)
- use ($requirements, $isRequired, $atLeastOne) {
- $oneFound = false;
- $result = array_change_key_case($userSettings);
- foreach ($requirements as $requirement) {
- $settingName = strtolower($requirement[Resources::SETTING_NAME]);
-
- // Check if the setting name exists in the provided user settings.
- if (array_key_exists($settingName, $result)) {
- // Check if the provided user setting value is valid.
- $validationFunc = $requirement[Resources::SETTING_CONSTRAINT];
- $isValid = $validationFunc($result[$settingName]);
-
- if ($isValid) {
- // Remove the setting as indicator for successful validation.
- unset($result[$settingName]);
- $oneFound = true;
- }
- } else {
- // If required then fail because the setting does not exist
- if ($isRequired) {
- return null;
- }
- }
- }
-
- if ($atLeastOne) {
- // At least one requirement must succeed, otherwise fail.
- return $oneFound ? $result : null;
- } else {
- return $result;
- }
- };
-
- // @codingStandardsIgnoreEnd
- }
-
- /**
- * Creates at lease one succeed predicate for the provided list of requirements.
- *
- * @return callable
- */
- protected static function atLeastOne()
- {
- $allSettings = func_get_args();
- return self::getValidator($allSettings, false, true);
- }
-
- /**
- * Creates an optional predicate for the provided list of requirements.
- *
- * @return callable
- */
- protected static function optional()
- {
- $optionalSettings = func_get_args();
- return self::getValidator($optionalSettings, false, false);
- }
-
- /**
- * Creates an required predicate for the provided list of requirements.
- *
- * @return callable
- */
- protected static function allRequired()
- {
- $requiredSettings = func_get_args();
- return self::getValidator($requiredSettings, true, false);
- }
-
- /**
- * Creates a setting value condition using the passed predicate.
- *
- * @param string $name The setting key name.
- * @param callable $predicate The setting value predicate.
- *
- * @return array
- */
- protected static function settingWithFunc($name, $predicate)
- {
- $requirement = array();
- $requirement[Resources::SETTING_NAME] = $name;
- $requirement[Resources::SETTING_CONSTRAINT] = $predicate;
-
- return $requirement;
- }
-
- /**
- * Creates a setting value condition that validates it is one of the
- * passed valid values.
- *
- * @param string $name The setting key name.
- *
- * @return array
- */
- protected static function setting($name)
- {
- $validValues = func_get_args();
-
- // Remove $name argument.
- unset($validValues[0]);
-
- $validValuesCount = func_num_args();
-
- $predicate = function ($settingValue) use ($validValuesCount, $validValues) {
- if (empty($validValues)) {
- // No restrictions, succeed,
- return true;
- }
-
- // Check to find if the $settingValue is valid or not. The index must
- // start from 1 as unset deletes the value but does not update the array
- // indecies.
- for ($index = 1; $index < $validValuesCount; $index++) {
- if ($settingValue == $validValues[$index]) {
- // $settingValue is found in valid values set, succeed.
- return true;
- }
- }
-
- throw new \RuntimeException(
- sprintf(
- Resources::INVALID_CONFIG_VALUE,
- $settingValue,
- implode("\n", $validValues)
- )
- );
-
- // $settingValue is missing in valid values set, fail.
- return false;
- };
-
- return self::settingWithFunc($name, $predicate);
- }
-
- /**
- * Tests to see if a given list of settings matches a set of filters exactly.
- *
- * @param array $settings The settings to check.
- *
- * @return boolean If any filter returns null, false. If there are any settings
- * left over after all filters are processed, false. Otherwise true.
- */
- protected static function matchedSpecification($settings)
- {
- $constraints = func_get_args();
-
- // Remove first element which corresponds to $settings
- unset($constraints[0]);
-
- foreach ($constraints as $constraint) {
- $remainingSettings = $constraint($settings);
-
- if (is_null($remainingSettings)) {
- return false;
- } else {
- $settings = $remainingSettings;
- }
- }
-
- if (empty($settings)) {
- return true;
- }
-
- return false;
- }
- }