diff --git a/composer.json b/composer.json index d2fcf4da59..3440eae570 100644 --- a/composer.json +++ b/composer.json @@ -139,7 +139,6 @@ "package-zj-sonymusic": "dev-fall", "pm-platform": "dev-fall", "package-zj-nas": "dev-fall", - "package-plg": "0.16.11", "package-zj-birmingham": "dev-main", "package-tce": "dev-master", "package-case-overview": "dev-main", @@ -169,6 +168,7 @@ "package-files": "1.23.6", "package-googleplaces": "1.12.1", "package-photo-video": "1.6.3", + "package-plg": "1.7.0", "package-pm-blocks": "1.12.11", "package-process-documenter": "1.12.1", "package-process-optimization": "1.10.2", diff --git a/helpers.php b/helpers.php index 1611f418f4..cfcc0bc6cf 100644 --- a/helpers.php +++ b/helpers.php @@ -90,6 +90,32 @@ function color($key) } } +if (!function_exists('color_rgb')) { + /** + * Returns the comma-separated RGB values for a theme color. + * + * @param string $key + * + * @return string + */ + function color_rgb($key) + { + $hex = ltrim(color($key), '#'); + + if (strlen($hex) === 3) { + $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; + } + + if (strlen($hex) !== 6 || !ctype_xdigit($hex)) { + return '39, 115, 243'; + } + + return hexdec(substr($hex, 0, 2)) + . ', ' . hexdec(substr($hex, 2, 2)) + . ', ' . hexdec(substr($hex, 4, 2)); + } +} + if (!function_exists('sidebar_class')) { /** * Returns the class for the sidebar based on admin settings. @@ -374,6 +400,7 @@ function feelExpression(string $expression, array $data) $formalExp = new FormalExpression(); $formalExp->setLanguage('FEEL'); $formalExp->setBody($expression); + return $formalExp($data); } } diff --git a/resources/img/decisions-bg-pattern.svg b/resources/img/decisions-bg-pattern.svg new file mode 100644 index 0000000000..9f43dcce6e --- /dev/null +++ b/resources/img/decisions-bg-pattern.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/img/gradient-wave-left.svg b/resources/img/gradient-wave-left.svg deleted file mode 100644 index 118094a8a4..0000000000 --- a/resources/img/gradient-wave-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/img/gradient-wave-right.svg b/resources/img/gradient-wave-right.svg deleted file mode 100644 index 13b9834b60..0000000000 --- a/resources/img/gradient-wave-right.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/resources/img/processmaker-about.svg b/resources/img/processmaker-about.svg new file mode 100644 index 0000000000..f50338d878 --- /dev/null +++ b/resources/img/processmaker-about.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/img/processmaker-icon.svg b/resources/img/processmaker-icon.svg index 5458260a80..944136ba27 100644 --- a/resources/img/processmaker-icon.svg +++ b/resources/img/processmaker-icon.svg @@ -1,19 +1,11 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/resources/img/processmaker-login.svg b/resources/img/processmaker-login.svg index 3d4a34cf8d..a2f5b692ef 100644 --- a/resources/img/processmaker-login.svg +++ b/resources/img/processmaker-login.svg @@ -1,30 +1,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/img/processmaker-logo.svg b/resources/img/processmaker-logo.svg index 744ec505e4..91f712adf3 100644 --- a/resources/img/processmaker-logo.svg +++ b/resources/img/processmaker-logo.svg @@ -1,28 +1,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/resources/img/processmaker_icon.png b/resources/img/processmaker_icon.png old mode 100755 new mode 100644 index 4342e6c362..9e421bb9be Binary files a/resources/img/processmaker_icon.png and b/resources/img/processmaker_icon.png differ diff --git a/resources/img/processmaker_login.png b/resources/img/processmaker_login.png index 8c9314cf12..40897b6428 100644 Binary files a/resources/img/processmaker_login.png and b/resources/img/processmaker_login.png differ diff --git a/resources/img/processmaker_logo.png b/resources/img/processmaker_logo.png index e121e235f5..52077dd90a 100644 Binary files a/resources/img/processmaker_logo.png and b/resources/img/processmaker_logo.png differ diff --git a/resources/lang/en.json b/resources/lang/en.json index c9aec9738c..f5747fc4d6 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -269,6 +269,7 @@ "Available Processes": "Available Processes", "Avatar": "Avatar", "Back to Login": "Back to Login", + "Back To Login": "Back To Login", "Back": "Back", "Background Color": "Background Color", "Base DN": "Base DN", @@ -1533,6 +1534,7 @@ "PARTICIPANTS": "PARTICIPANTS", "Participants": "Participants", "participants": "participants", + "Password Assistance": "Password Assistance", "Password expiration": "Password expiration", "Password Grant Client ID": "Password Grant Client ID", "Password Grant Secret": "Password Grant Secret", @@ -1576,6 +1578,7 @@ "Please choose the tasks in your inbox that this new rule should apply to. Use the column filters to achieve this.": "Please choose the tasks in your inbox that this new rule should apply to. Use the column filters to achieve this.", "Please contact your administrator to get started.": "Please contact your administrator to get started.", "Please enter Tab Name": "Please enter Tab Name", + "Please enter your email address and we'll send you a reset link.": "Please enter your email address and we'll send you a reset link.", "Please provide a valid URL (e.g., https://example.com ) to specify the allowed origin(s) permitted to embed ProcessMaker.": "Please provide a valid URL (e.g., https://example.com ) to specify the allowed origin(s) permitted to embed ProcessMaker.", "Please log in to continue your work on this page.": "Please log in to continue your work on this page.", "Please select a Saved Search": "Please select a Saved Search", diff --git a/resources/sass/sidebar/sidebar.scss b/resources/sass/sidebar/sidebar.scss index 079cbfdb00..31d4cfa646 100644 --- a/resources/sass/sidebar/sidebar.scss +++ b/resources/sass/sidebar/sidebar.scss @@ -10,7 +10,7 @@ } &.sidebar-default { - background-color: #20242A; + background-color: #002D59; } #custom_icon{ diff --git a/resources/views/about/index.blade.php b/resources/views/about/index.blade.php index e37ab1c1ec..2552043944 100644 --- a/resources/views/about/index.blade.php +++ b/resources/views/about/index.blade.php @@ -18,7 +18,7 @@
- +
{{ __('ProcessMaker Platform') }} {{ $versionTitle }}

diff --git a/resources/views/auth/layouts/auth.blade.php b/resources/views/auth/layouts/auth.blade.php new file mode 100644 index 0000000000..c7d88f958b --- /dev/null +++ b/resources/views/auth/layouts/auth.blade.php @@ -0,0 +1,77 @@ + + + + + + + + + + + @yield('title') - {{ __('ProcessMaker') }} + + @include('auth.partials.login-critical-styles') + @include('auth.partials.auth-styles') + + @if (hasPackage('package-accessibility')) + @include('package-accessibility::userway') + @endif + @yield('css') + + +
+ @hasSection('skip-language-selector') + @else + @include('auth.partials.language-selector') + @endif +
+
+
+ +
+ @php + $loginFooterSetting = \ProcessMaker\Models\Setting::byKey('login-footer'); + @endphp + @if ($loginFooterSetting) + + @endif +
+
+ @yield('js') + @stack('scripts') + @hasSection('skip-auth-language-scripts') + @else + @include('auth.partials.auth-language-scripts') + @endif + + diff --git a/resources/views/auth/newLogin.blade.php b/resources/views/auth/newLogin.blade.php index ba45536b0c..c42ff4f81a 100644 --- a/resources/views/auth/newLogin.blade.php +++ b/resources/views/auth/newLogin.blade.php @@ -10,6 +10,9 @@ {{ __('Login') }} - {{ __('ProcessMaker') }} + @include('auth.partials.login-critical-styles') + @include('auth.partials.auth-styles') + @include('auth.partials.login-extra-styles') @if (hasPackage('package-accessibility')) @include('package-accessibility::userway') @@ -18,41 +21,15 @@
- -
+ @include('auth.partials.language-selector')
-
- - -
-
-
- @php - $isMobile = ( - isset($_SERVER['HTTP_USER_AGENT']) - && \ProcessMaker\Helpers\MobileHelper::isMobile($_SERVER['HTTP_USER_AGENT']) - ) ? true : false; - @endphp - @if (!$isMobile) -
-

{{ __("Business process automation") }}

-

{{ __("made") }} {{ __("efficient") }}

-
- {{ __("All the tools to empower anyone to quickly automate processes, from custom forms to unique enterprise workflows and complex business rules.") }} -
-
- @endif -
-
- @php @@ -136,182 +150,29 @@ class="d-flex justify-content-end position-absolute language-button-container"> const togglePassword = document.querySelector('#togglePassword'); const password = document.querySelector('#password'); + const capsLockWarning = document.querySelector('#capsLockWarning'); togglePassword.addEventListener('click', function (e) { const type = password.getAttribute('type') === 'password' ? 'text' : 'password'; password.setAttribute('type', type); this.classList.toggle('fa-eye-slash'); -}); - - - - -@foreach(GlobalScripts::getScripts() as $script) - @if (strpos($script, '/vendor/processmaker/packages/package-dynamic-ui/js/global.js') !== 0) - - @endif -@endforeach - - - + +@include('auth.partials.auth-language-scripts') diff --git a/resources/views/auth/partials/auth-language-scripts-minimal.blade.php b/resources/views/auth/partials/auth-language-scripts-minimal.blade.php new file mode 100644 index 0000000000..ffd2e23558 --- /dev/null +++ b/resources/views/auth/partials/auth-language-scripts-minimal.blade.php @@ -0,0 +1,10 @@ +@foreach(GlobalScripts::getScripts() as $script) + @if (strpos($script, '/vendor/processmaker/packages/package-dynamic-ui/js/global.js') !== 0) + + @endif +@endforeach + + diff --git a/resources/views/auth/partials/auth-language-scripts.blade.php b/resources/views/auth/partials/auth-language-scripts.blade.php new file mode 100644 index 0000000000..691bb566d0 --- /dev/null +++ b/resources/views/auth/partials/auth-language-scripts.blade.php @@ -0,0 +1,4 @@ + + + +@include('auth.partials.auth-language-scripts-minimal') diff --git a/resources/views/auth/partials/auth-styles.blade.php b/resources/views/auth/partials/auth-styles.blade.php new file mode 100644 index 0000000000..c3da7e4abf --- /dev/null +++ b/resources/views/auth/partials/auth-styles.blade.php @@ -0,0 +1,375 @@ + diff --git a/resources/views/auth/partials/language-selector.blade.php b/resources/views/auth/partials/language-selector.blade.php new file mode 100644 index 0000000000..f41d2bc710 --- /dev/null +++ b/resources/views/auth/partials/language-selector.blade.php @@ -0,0 +1,8 @@ +
+ + +
diff --git a/resources/views/auth/partials/login-critical-styles.blade.php b/resources/views/auth/partials/login-critical-styles.blade.php new file mode 100644 index 0000000000..414cf61815 --- /dev/null +++ b/resources/views/auth/partials/login-critical-styles.blade.php @@ -0,0 +1,11 @@ + diff --git a/resources/views/auth/partials/login-extra-styles.blade.php b/resources/views/auth/partials/login-extra-styles.blade.php new file mode 100644 index 0000000000..a4ced842e2 --- /dev/null +++ b/resources/views/auth/partials/login-extra-styles.blade.php @@ -0,0 +1,107 @@ + diff --git a/resources/views/auth/passwords/change.blade.php b/resources/views/auth/passwords/change.blade.php index 7216d85de6..1f36c391d6 100644 --- a/resources/views/auth/passwords/change.blade.php +++ b/resources/views/auth/passwords/change.blade.php @@ -1,67 +1,64 @@ -@extends('layouts.minimal') +@extends('auth.layouts.auth') + +@section('skip-auth-language-scripts', 'skip') + @section('title') {{ __('Change Password') }} @endsection -@section('content') -
-
-
- @php - $loginLogo = \ProcessMaker\Models\Setting::getLogin(); - $isDefault = \ProcessMaker\Models\Setting::loginIsDefault(); - $class = $isDefault ? 'login-logo-default' : 'login-logo-custom'; - @endphp - {{ config('logo-alt-text', 'ProcessMaker') }} -
-
-
-
-
-
- -
{{ __('Welcome', ['name' => $user->fullname]) }}
-
-
{{ __('Please change your account password') }}
-
{{ __('Password Requirements') }}: -
    -
  • {{ __('Minimum of 8 characters in length') }}
  • -
  • {{ __('Contains an uppercase letter') }}
  • -
  • {{ __('Contains a number or symbol') }}
  • -
-
- @if (session()->has('timeout')) -
{{ __("Your account has been timed out for security.") }}
- @endif - @if (session()->has('login-error')) -
{{ session()->get('login-error')}}
- @endif -
- - -
- {{ html()->password('password')->id('password')->attribute('rows', 4)->class('form-control')->attribute('v-model', 'formData.password')->attribute('autocomplete', 'new-password')->attribute('@input', 'props.updatePassword($event.target.value)')->attribute('v-bind:class', '{\'form-control\':true, \'is-invalid\':errors.password}') }} -
-
- - @{{ error }} - -
-
- {{ html()->label(__('Confirm Password'), 'confpassword') }}* - {{ html()->password('confpassword')->class('form-control')->attribute('v-model', 'formData.confpassword')->attribute('v-bind:class', '{\'form-control\':true}')->attribute('autocomplete', 'new-password') }} -
-
- -
-
-
-
+@section('content') +
+
+
+ +
{{ __('Welcome', ['name' => $user->fullname]) }}
+
+
+

{{ __('Please change your account password') }}

+
+
{{ __('Password Requirements') }}: +
    +
  • {{ __('Minimum of 8 characters in length') }}
  • +
  • {{ __('Contains an uppercase letter') }}
  • +
  • {{ __('Contains a number or symbol') }}
  • +
+
+ @if (session()->has('timeout')) +
{{ __("Your account has been timed out for security.") }}
+ @endif + @if (session()->has('login-error')) +
{{ session()->get('login-error') }}
+ @endif +
+ + +
+ {{ html()->password('password')->id('password')->attribute('rows', 4)->class('form-control form-control-login')->attribute('v-model', 'formData.password')->attribute('autocomplete', 'new-password')->attribute('@input', 'props.updatePassword($event.target.value)')->attribute('v-bind:class', '{\'form-control\':true, \'form-control-login\':true, \'is-invalid\':errors.password}') }}
+
+ + @{{ error }} +
+
+ {{ html()->label(__('Confirm Password'), 'confpassword') }}* + {{ html()->password('confpassword')->class('form-control form-control-login')->attribute('v-model', 'formData.confpassword')->attribute('v-bind:class', '{\'form-control\':true, \'form-control-login\':true}')->attribute('autocomplete', 'new-password') }} +
+
+ +
+
@endsection +@section('css') + +@endsection + @section('js') @@ -71,82 +68,66 @@ -@endsection -@section('css') - + ProcessMaker.apiClient.put('password/change', this.formData) + .then(response => { + if (response.status === 200) { + window.location.href = '/'; + } + }) + .catch(error => { + this.errors = error.response.data.errors; + }); + }, + } + }); + +@include('auth.partials.auth-language-scripts-minimal') @endsection diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php index 5467fdc25b..255675788c 100644 --- a/resources/views/auth/passwords/email.blade.php +++ b/resources/views/auth/passwords/email.blade.php @@ -1,72 +1,44 @@ -@extends('layouts.minimal') +@extends('auth.layouts.auth') @section('title') -{{__('Forgot Your Password?')}} +{{ __('Password Assistance') }} @endsection @section('content') +
+

{{ __('Password Assistance') }}

+

{{ __("Please enter your email address and we'll send you a reset link.") }}

+
-
-
- @component('components.logo') - @endcomponent -

{{__('Forgot Your Password?')}}

-

{{__("Enter your email address and we'll send you a reset link.")}}

+
+ @csrf + @if (session('status')) +
+ {{ session('status') }}
- -
-
-
- - @if (session('status')) -
- {{ session('status') }} -
- @endif - @csrf -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif -
-
- -
- - -
- + @endif +
+ +
+ + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif
- -
-
-@endsection -@section('css') - +
+ +
+ + @endsection diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php index 69d6f0b67c..b8257a549d 100644 --- a/resources/views/auth/passwords/reset.blade.php +++ b/resources/views/auth/passwords/reset.blade.php @@ -1,74 +1,131 @@ -@extends('layouts.minimal') +@extends('auth.layouts.auth') @section('title') -{{__('Welcome', ['name' => $username])}} +{{ __('Reset Your Password') }} @endsection @section('content') -
-
- @component('components.logo') - @endcomponent -

{{__('Reset Your Password')}}

-
- {{ csrf_field() }} - -
- - - @if ($errors->has('email')) - - {{ $errors->first('email') }} - - @endif - -
-
- - -
-
- - - @if ($errors->has('password')) - - {{ $errors->first('password') }} - - @endif - -
-
- - -
-
- -
-
-
+
+

{{ __('Reset Your Password') }}

+
+ @csrf + +
+ +
+ + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif +
+
+
+ +
+ +
+
+
+
+ + +
+
+ + + @if ($errors->has('password')) + + {{ $errors->first('password') }} + + @endif +
+
+
+ +
+ + +
+
+
+ +
+
@endsection -@section('css') - -@endsection + +@endpush diff --git a/resources/views/auth/passwords/success.blade.php b/resources/views/auth/passwords/success.blade.php index b54b239b35..b0454894ea 100644 --- a/resources/views/auth/passwords/success.blade.php +++ b/resources/views/auth/passwords/success.blade.php @@ -1,37 +1,15 @@ -@extends('layouts.minimal') - -@section('content') -
-
- @component('components.logo') - @endcomponent -
-
- - {{__('Success!')}} {{__('Your password has been updated.')}} - -
- -
-
-
+@extends('auth.layouts.auth') +@section('title') +{{ __('Success!') }} @endsection -@section('css') - +@section('content') +
+ {{ __('Success!') }} + {{ __('Your password has been updated.') }} +
+ @endsection