plugin install

This commit is contained in:
Tony Volpe
2024-06-18 17:29:05 -04:00
parent e1aaedd1ae
commit 41f50eacc4
5880 changed files with 1057631 additions and 39681 deletions

View File

@@ -0,0 +1,86 @@
<?php
namespace Gravity_Forms\Gravity_Forms\Util;
use Gravity_Forms\Gravity_Forms\GF_Service_Container;
use Gravity_Forms\Gravity_Forms\GF_Service_Provider;
use Gravity_Forms\Gravity_Forms\Transients\GF_WP_Transient_Strategy;
use Gravity_Forms\Gravity_Forms\Util\Colors\Color_Modifier;
class GF_Util_Service_Provider extends GF_Service_Provider {
const GF_CACHE = 'gf_cache';
const TRANSIENT_STRAT = 'gf_license_transient_strat';
const GF_COMMON = 'gf_common';
const GF_FORMS_MODEL = 'gf_forms_model';
const RG_FORMS_MODEL = 'rg_forms_model';
const GF_API = 'gf_api';
const GF_FORMS = 'gf_forms';
const GF_FORM_DETAIL = 'gf_form_detail';
const GF_COLORS = 'gf_colors';
public function register( GF_Service_Container $container ) {
require_once( \GFCommon::get_base_path() . '/includes/util/colors/class-color-modifier.php' );
$container->add(
self::GF_CACHE,
function () {
return new \GFCache;
}
);
$container->add(
self::TRANSIENT_STRAT,
function () {
return new GF_WP_Transient_Strategy();
}
);
$container->add(
self::GF_COMMON,
function () {
return new \GFCommon;
}
);
$container->add(
self::GF_FORMS_MODEL,
function () {
return new \GFFormsModel;
}
);
$container->add(
self::RG_FORMS_MODEL,
function () {
return new \RGFormsModel;
}
);
$container->add(
self::GF_API,
function () {
return new \GFAPI;
}
);
$container->add(
self::GF_FORMS,
function () {
return new \GFForms;
}
);
$container->add(
self::GF_FORM_DETAIL,
function () {
return new \GFFormDetail;
}
);
$container->add( self::GF_COLORS, function () {
return new Color_Modifier();
} );
}
}

View File

@@ -0,0 +1,335 @@
<?php
namespace Gravity_Forms\Gravity_Forms\Util\Colors;
class Color_Modifier {
const STEP_VALUE = 5;
public function rgb_to_hsv( $r, $g, $b ) {
// Convert to 0-1 ranges
$r = $r / 255;
$g = $g / 255;
$b = $b / 255;
// Get min, max, and delta
$maxRGB = max( $r, $g, $b );
$minRGB = min( $r, $g, $b );
$delta = $maxRGB - $minRGB;
// $v (value) as percentage
$v = 100 * $maxRGB;
// If chroma is zero, we don't need to calculate the other values. Return 0, 0, $v.
if ( $delta == 0 ) {
return array( 0, 0, $v );
}
// $s (saturation) as a percentage.
$s = 100 * ( $delta / $maxRGB );
// Calculate $h (hue) segment of 2D hexagonal plane based on maxRGB value
if ( $r == $maxRGB ) {
$h = ( $g - $b ) / $delta;
} elseif ( $g == $maxRGB ) {
$h = 2 + ( ( $b - $r ) / $delta );
} else { // $b == $maxRGB
$h = 4 + ( ( $r - $g ) / $delta );
}
// Multiple by 60 to get correct degrees.
$h *= 60;
return array( 'h' => $h, 's' => $s, 'v' => $v );
}
public function rgb_to_hsl( $r, $g, $b ) {
// Convert to 0-1 ranges
$r = $r / 255;
$g = $g / 255;
$b = $b / 255;
// Get min, max, and delta
$maxRGB = max( $r, $g, $b );
$minRGB = min( $r, $g, $b );
$delta = $maxRGB - $minRGB;
// $l value as percentage
$l = 100 * ($minRGB + $maxRGB) / 2;
// If delta is 0, no saturation. Otherwise, calculate based on lightness.
if ( $delta == 0 ) {
$s = 0;
} else {
if ( $l <= 50 ) {
$s = ( $maxRGB - $minRGB ) / ( $maxRGB + $minRGB );
} else {
$s = ( $maxRGB - $minRGB ) / ( 2.0 - $maxRGB - $minRGB );
}
}
// $s as percentage
$s = 100 * $s;
// Calculate $h (hue) segment of 2D hexagonal plane based on maxRGB value
if ( $r == $maxRGB ) {
$h = ( $g - $b ) / $delta;
} elseif ( $g == $maxRGB ) {
$h = 2 + ( ( $b - $r ) / $delta );
} else { // $b == $maxRGB
$h = 4 + ( ( $r - $g ) / $delta );
}
// Multiple by 60 to get correct degrees.
$h *= 60;
if ( $h < 0 ) {
$h += 360;
}
return array( 'h' => $h, 's' => $s, 'l' => $l );
}
public function hsv_to_rgb( $h, $s, $v ) {
$h = $h / 60;
$s = $s / 100;
$v = $v / 100;
$h_floor = floor( $h );
$chroma = $v * $s;
$m = $v - $chroma;
$x = $chroma * ( 1 - abs( fmod( $h, 2 ) - 1 ) );
switch( $h_floor ) {
case 0:
$r = $chroma;
$g = $x;
$b = 0;
break;
case 1:
$r = $x;
$g = $chroma;
$b = 0;
break;
case 2:
$r = 0;
$g = $chroma;
$b = $x;
break;
case 3:
$r = 0;
$g = $x;
$b = $chroma;
break;
case 4:
$r = $x;
$g = 0;
$b = $chroma;
break;
case 5:
default:
$r = $chroma;
$g = 0;
$b = $x;
break;
}
return array( 'r' => 255 * ( $r + $m ), 'g' => 255 * ( $g + $m ), 'b' => 255 * ( $b + $m ) );
}
public function hsl_to_rgb( $h, $s, $l ) {
$s = $s / 100;
$l = $l / 100;
// No saturation, just return values based on luminance.
if ( $s == 0 ) {
return array(
'r' => $l * 255,
'g' => $l * 255,
'b' => $l * 255
);
}
$temp1 = ( $l < 0.5 ) ? $l * ( 1.0 + $s ) : $l + $s - ( $l * $s );
$temp2 = 2 * $l - $temp1;
$h = ( $h / 360 );
$tempR = $h + 0.333;
$tempG = $h;
$tempB = $h - 0.333;
// force between 0 and 1
if ( $tempR < 0 ) {
$tempR += 1;
}
if ( $tempR > 1 ) {
$tempR -= 1;
}
if ( $tempG < 0 ) {
$tempG += 1;
}
if ( $tempG > 1 ) {
$tempG -= 1;
}
if ( $tempB < 0 ) {
$tempB += 1;
}
if ( $tempB > 1 ) {
$tempB -= 1;
}
if ( ( 6 * $tempR ) < 1 ) {
$r = $temp2 + ( $temp1 - $temp2 ) * 6 * $tempR;
} elseif ( ( 2 * $tempR ) < 1 ) {
$r = $temp1;
} elseif ( ( 3 * $tempR ) < 2 ) {
$r = $temp2 + ( $temp1 - $temp2 ) * ( 0.666 - $tempR ) * 6;
} else {
$r = $temp2;
}
if ( ( 6 * $tempG ) < 1 ) {
$g = $temp2 + ( $temp1 - $temp2 ) * 6 * $tempG;
} elseif ( ( 2 * $tempG ) < 1 ) {
$g = $temp1;
} elseif ( ( 3 * $tempG ) < 2 ) {
$g = $temp2 + ( $temp1 - $temp2 ) * ( 0.666 - $tempG ) * 6;
} else {
$g = $temp2;
}
if ( ( 6 * $tempB ) < 1 ) {
$b = $temp2 + ( $temp1 - $temp2 ) * 6 * $tempB;
} elseif ( ( 2 * $tempB ) < 1 ) {
$b = $temp1;
} elseif ( ( 3 * $tempB ) < 2 ) {
$b = $temp2 + ( $temp1 - $temp2 ) * ( 0.666 - $tempB ) * 6;
} else {
$b = $temp2;
}
return array( 'r' => $r * 255, 'g' => $g * 255, 'b' => $b * 255 );
}
public function make_variations_from_rgb( $r, $g, $b, $presets ) {
$hsl = $this->rgb_to_hsl( $r, $g, $b );
$variations = array();
foreach( $presets as $preset ) {
$new_s = $this->convert_from_preset( $preset['s'], $hsl['s'] / 100 );
$new_l = $this->convert_from_preset( $preset['l'], $hsl['l'] / 100 );
$variations[] = array( 'h' => $hsl['h'], 's' => $new_s, 'l' => $new_l );
}
array_walk( $variations, function( &$item ) {
$item = $this->hsl_to_rgb( $item['h'], $item['s'] * 100, $item['l'] * 100 );
});
return $variations;
}
private function convert_from_preset( $val, $base_val ) {
$x = $val + $base_val;
if ( $x > 1 ) {
return 1;
}
if ( $x < 0 ) {
return 0;
}
return $x;
}
public function convert_rgb_to_hex( $r, $g, $b ) {
return sprintf( "#%02x%02x%02x", $r, $g, $b );
}
/**
* Sanitize a color string to ensure it matches our required format.
*
* @param $color
*
* @return mixed|string
*/
public function sanitize_color_string( $color ) {
// Remove the preceding # sign
if ( strpos( $color, '#' ) !== false ) {
$color = ltrim( $color, '#' );
}
// Make all strings 6-digit
if ( strlen( $color ) === 3 ) {
$color = $color[0] . $color[0] . $color[1] . $color[1] . $color[2] . $color[2];
}
return $color;
}
public function convert_hex_to_rgb( $hex_code ) {
list( $r, $g, $b ) = sscanf( $hex_code, '#%02x%02x%02x' );
return array(
'r' => $r,
'g' => $g,
'b' => $b,
);
}
private function restrict_value_range( $val ) {
if ( $val > 255 ) {
return 255;
}
if ( $val < 0 ) {
return 0;
}
return $val;
}
/**
* Modify a color by the specified amount.
*
* @param $color_string
* @param int $steps
* @param string $format
*
* @return string
*/
public function modify( $color_string, $steps, $format = 'hex' ) {
$amount = $steps * self::STEP_VALUE;
$color = $this->sanitize_color_string( $color_string );
$num = intval( $color, 16 );
$r = ( $num >> 16 ) + $amount;
$r = $this->restrict_value_range( $r );
$g = ( $num & 0x0000FF ) + $amount;
$g = $this->restrict_value_range( $g );
$b = ( ( $num >> 8 ) & 0x00FF ) + $amount;
$b = $this->restrict_value_range( $b );
$dec_val = ( $g | ( $b << 8 ) | ( $r << 16 ) );
$new_val = sprintf( '%06X', $dec_val );
$modified = '#' . substr( $new_val, - 6 );
if ( $format === 'rgb' ) {
return $this->convert_hex_to_rgb( $modified );
}
return $modified;
}
}