ok we will provide a zip of project with all latest changes you just need to place it to your server and just need to add Database details in .env file.
Solved Add Google recaptcha
-
Ok please take a backup of your current project and apply the changes for a new one.
For generating recaptcha site key and secret key for your domain take help from here.
Step 1.
Delete your core-framework and support-center-bundle under vendor/uvdesk folder of your project.
And clone both bundle using command below at the same place (under vendor/uvdesk folder)
git clone https://github.com/uvdesk/core-framework
git clone https://github.com/uvdesk/support-center-bundle -
Step 2.
Open config/packages folder of your project.
You will see two files here twig.yaml and uvdesk.yamlUpdate below 3 keys in twig.yaml
is_google_captcha_enabled: '%is_google_captcha_enabled%' recaptcha_site_key: '%recaptcha_site_key%' recaptcha_secret_key: '%recaptcha_secret_key%'
In uvdesk.yaml update below lines:
is_google_captcha_enabled: true recaptcha_site_key: 'site_key' recaptcha_secret_key: 'secret_key'
Finally clear your cache using below command:
php bin/console c:c
-
Step 3.
Require recaptcha package in your project using below command:
composer require google/recaptcha "^1.2"
Also update your site key and secret key of google recaptcha for your domain in uvdesk.yaml file.
Clear your cache:
php bin/console c:c -
The "ocramius/package-versions" plugin was skipped because it requires a Plugin API version ("^1.0.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option. The "uvdesk/composer-plugin" plugin was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option. The "symfony/flex" plugin was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option. ./composer.json has been updated The "ocramius/package-versions" plugin was skipped because it requires a Plugin API version ("^1.0.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option. The "uvdesk/composer-plugin" plugin was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option. The "symfony/flex" plugin was skipped because it requires a Plugin API version ("^1.0") that does not match your Composer installation ("2.0.0"). You may need to run composer update with the "--no-plugins" option.
Your requirements could not be resolved to an installable set of packages. Problem 1 - symfony/flex is locked to version v1.4.8 and an update of this package was not requested. - symfony/flex v1.4.8 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match the constraint. Problem 2 - uvdesk/composer-plugin is locked to version v1.0.1 and an update of this package was not requested. - uvdesk/composer-plugin v1.0.1 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match the constraint. Problem 3 - ocramius/package-versions 1.4.1 requires composer-plugin-api ^1.0.0 -> found composer-plugin-api[2.0.0] but it does not match the constraint. - doctrine/doctrine-migrations-bundle 2.1.2 requires doctrine/migrations ^2.2 -> satisfiable by doctrine/migrations[2.2.0]. - doctrine/migrations 2.2.0 requires ocramius/package-versions ^1.3 -> satisfiable by ocramius/package-versions[1.4.1]. - doctrine/doctrine-migrations-bundle is locked to version 2.1.2 and an update of this package was not requested. ocramius/package-versions only provides support for Composer 2 in 1.8+, which requires PHP 7.4. If you can not upgrade PHP you can require composer/package-versions-deprecated to resolve this with PHP 7.0+. You are using Composer 2, which some of your plugins seem to be incompatible with. Make sure you update your plugins or report a plugin-issue to ask them to support Composer 2.
I'm now resuming my backup as it not works.
The ReCaptcha is showed in the contact form but never work. -
Please downgrade your composer version to 1.6.5 and then try.
Also take a clone of core-framework again as recently we have updated some code there.
We have tested recaptcha and it is working perfectly now.
-
I have also an issue: cannot run
php bin/console c:c
because every time I get
Unable to write in the "/uvdesk/var/cache/prod" directory
and I need run this command as root. I change already all uvdesk folders and file to be on not root user and for a while I'm able to run but after some time I get again the same issue.
-
@Sanjeev Sorry I cannot downgrade the composer as I use other software that required composer 2 that is more safer and updated.
-
ok we will provide a zip of project with all latest changes you just need to place it to your server and just need to add Database details in .env file.
-
@Sanjeev ok. Hope you will keep in mind if you will send any update in the future my server will not use obsolete PHP or composer, etc. I always work to keep software updated so your project should support composer 2.
-
For that we always provide a project ZIP on official site where you don't need to do anything. But still we will look into it to resolve issues for composer 2
-
@Sanjeev OK will wait the zip file.
Have you also tested if a message of error is showed if no ReCaptcha is entered?
Be sure also this works and the error can be translated.In my partial test no error was showed but I was not able to do the latest steps in your latest post because of composer.
-
Download project from here.
Just add your Database details in .env file and run the project.
-
@Sanjeev thanks will try maybe now. I have to insert secret and site key I suppose.
-
@Sanjeev said in Add Google recaptcha:
Download project from here.
Just add your Database details in .env file and run the project.
delete uvdesk root folder, use all file you provided under uvdesk root folder and put the old .env file never work. The Help desk load a empty white page. Maybe all email and other settings are missed?
Maybe it's not enough restore just the .env file.
Waiting your feedback. -
I tried to replace only uvdesk folder (vendor/uvdesk) than replaced in config/packages folder the two files twig.yaml and uvdesk.yaml and inserted my ReCaptca site and secret key.
php bin/console c:c
I can see reCaptcha but doesn't let me login in the operator side, doesn't work if I try to create a ticket... no recpatcha error showed, the send button never work.
Seems also removing the two files twig.yaml and uvdesk.yaml than cleaning chache the operator login never work and give a red error system login error.
his update is not usable for me. Sorry, never work.
I see some server error logs
[Wed Mar 17 17:34:04.454789 2021] [proxy_fcgi:error] [pid 375516] [client [IP]:62507] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Symfony\\Component\\Debug\\Exception\\FatalThrowableError: Too few arguments to function Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate::__construct(), 1 passed in /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php on line 771 and exactly 3 expected in /uvdesk/vendor/uvdesk/core-framework/Dashboard/SearchTemplate.php:16\nStack trace:\n#0 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(771): Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate->__construct(Object(Twig\\Environment))\n#1 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(654): ContainerWSHmTL2\\srcApp_KernelProdContainer->getUvdesk_ExtensiblesService()\n#2 /uvdesk/var/cache/prod/Container...', [Wed Mar 17 17:34:02.338993 2021] [proxy_fcgi:error] [pid 429852] [client [IP]:62504] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Symfony\\Component\\Debug\\Exception\\FatalThrowableError: Too few arguments to function Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate::__construct(), 1 passed in /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php on line 771 and exactly 3 expected in /uvdesk/vendor/uvdesk/core-framework/Dashboard/SearchTemplate.php:16\nStack trace:\n#0 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(771): Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate->__construct(Object(Twig\\Environment))\n#1 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(654): ContainerWSHmTL2\\srcApp_KernelProdContainer->getUvdesk_ExtensiblesService()\n#2 /uvdesk/var/cache/prod/Container...', [Wed Mar 17 16:09:22.213396 2021] [proxy_fcgi:error] [pid 374845] [client [IP]:59410] AH01071: Got error 'PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 351PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 385PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 394PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 408PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 416PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 451PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 529PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 559PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 637PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 638PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 640PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 678PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 679PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 681PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 835PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 835PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 839PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 839PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 843PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 843PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 847PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 847PHP message: PHP Fatal error: Uncaught Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException: The service "security.context_listener.0" has a dependency on a non-existent service "Webkul\\UVDesk\\ApiBundle\\Providers\\ApiCredentials". in /uvdesk/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php:86\nStack trace:\n#0 /uvdesk/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php(82): Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass->processValue(Object(Symfony\\Component\\DependencyInjection\\Reference), false)\n#1 /uvdesk/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php(49): Symfony\\Component\\DependencyInjection\\Compiler\\AbstractRecursivePass->processValue(Array, false)\n#2 /home/piadm/public_html/helpd...', [Wed Mar 17 16:09:18.353219 2021] [proxy_fcgi:error] [pid 378757] [client [IP]:59406] AH01071: Got error 'PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 351PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 385PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 394PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 408PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 416PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 451PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 529PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 559PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 637PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 638PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 640PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 678PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 679PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 681PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 835PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 835PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 839PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 839PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 843PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 843PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 847PHP message: PHP Deprecated: Array and string offset access syntax with curly braces is deprecated in /uvdesk/vendor/uvdesk/core-framework/Utils/HTMLFilter.php on line 847PHP message: PHP Fatal error: Uncaught Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException: The service "security.context_listener.0" has a dependency on a non-existent service "Webkul\\UVDesk\\ApiBundle\\Providers\\ApiCredentials". in /uvdesk/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php:86\nStack trace:\n#0 /uvdesk/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php(82): Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass->processValue(Object(Symfony\\Component\\DependencyInjection\\Reference), false)\n#1 /uvdesk/vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php(49): Symfony\\Component\\DependencyInjection\\Compiler\\AbstractRecursivePass->processValue(Array, false)\n#2 /home/piadm/public_html/helpd...', [Wed Mar 17 13:44:31.474739 2021] [proxy_fcgi:error] [pid 378757] [client [IP]:55605] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Symfony\\Component\\Debug\\Exception\\FatalThrowableError: Too few arguments to function Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate::__construct(), 1 passed in /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php on line 771 and exactly 3 expected in /uvdesk/vendor/uvdesk/core-framework/Dashboard/SearchTemplate.php:16\nStack trace:\n#0 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(771): Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate->__construct(Object(Twig\\Environment))\n#1 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(654): ContainerWSHmTL2\\srcApp_KernelProdContainer->getUvdesk_ExtensiblesService()\n#2 /uvdesk/var/cache/prod/Container...' [Wed Mar 17 13:40:09.300680 2021] [proxy_fcgi:error] [pid 374845] [client [IP]:55429] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Symfony\\Component\\Debug\\Exception\\FatalThrowableError: Too few arguments to function Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate::__construct(), 1 passed in /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php on line 771 and exactly 3 expected in /uvdesk/vendor/uvdesk/core-framework/Dashboard/SearchTemplate.php:16\nStack trace:\n#0 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(771): Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate->__construct(Object(Twig\\Environment))\n#1 /uvdesk/var/cache/prod/ContainerWSHmTL2/srcApp_KernelProdContainer.php(654): ContainerWSHmTL2\\srcApp_KernelProdContainer->getUvdesk_ExtensiblesService()\n#2 /uvdesk/var/cache/prod/Container...' [Wed Mar 17 13:30:57.044574 2021] [proxy_fcgi:error] [pid 381382] [client [IP]:55070] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Error: Class 'Webkul\\UVDesk\\CoreFrameworkBundle\\UVDeskCoreFrameworkBundle' not found in /uvdesk/src/Kernel.php:23\nStack trace:\n#0 /uvdesk/vendor/symfony/http-kernel/Kernel.php(429): App\\Kernel->registerBundles()\n#1 /uvdesk/vendor/symfony/http-kernel/Kernel.php(130): Symfony\\Component\\HttpKernel\\Kernel->initializeBundles()\n#2 /uvdesk/vendor/symfony/http-kernel/Kernel.php(193): Symfony\\Component\\HttpKernel\\Kernel->boot()\n#3 /uvdesk/public/index.php(25): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#4 {main}\n thrown in /uvdesk/src/Kernel.php on line 23',
-
Please try this zip with your localhost first.
We will provide you test recaptcha credentials.As we have tested with a test recaptcha keys and also generated keys for localhost both are working perfectly.
If your PHP version is greater then greater then 7.3 then make is 7.2 or 7.3.
Still Quality analyst will check this Updated zip and will let you know.
-
@Sanjeev @peopleinside
I have verified the changes added for ReCaptcha and it's working fine on my system.
Rest you can see the updates here
https://www.loom.com/share/b6d6cd1f73f64e8da162712e84261c71 -
@Sanjeev Why I should use a PHP version that will deprecated in just some months?
I use PHP 7.4 as some updated software on my server require now the most updated version and is not PHP 8 that is the latest one but PHP 7.4PHP 7.3 is still supported but quite old and is near the end of life.
If PHP 7.4 is not supported I cannot use your patch.I use UvDesk with PHP 7.4 has no sense for me that you made a patch and this one is not compatible.
PHP 7.3 will be no more supported in about 8 months so some web application I use has been moved to PHP 7.4 that is not new but is supported for more long time.If UVdesk is not compatible with PHP 7.4 this should have the priority to resolve, fix and the next PHP that will be after that will be PHP 8.0 already released but not yet fully supported by different applications. They are working on compatibility.
If you are for releasing a new version not compatible with PHP 7.4 I will be unable to update... also how long we should wait for have another update with PHP compatibility if you will release an update after different months not yet compatible with PHP 7.4 that is at the moment the best solution on my point of view looking at the end of life date?!
Also in those days jQuery has been updated but I cannot update in UVdesk because code seems need to be updated as well... so I suppose there are some old code that is or will be soon not compatible with PHP recent versions.
Currently I'm using PHP 7.4 that is not old and not too new.
My issue will be how update the instance on my server, not in localhost. If work in localhost is ok but doesn't solve the issue on my server.
Did you test with PHP 7.4?
-
@bansalvaish thank you, I'm unable to update my instance at https://helpdesk.peopleinside.it/it/ for the error mentioned.
I use PHP 7.4 and cannot downgrade because some software require PHP 7.4 that is not really new.Hope you will help me understand why your patch doesn't work on my side.
Maybe you need to provide right step to follow or maybe the PHP error I give to you should give some indications of what is wrong. -
@Sanjeev I tested in localhost (PHP 7.4) and works also if the captcha show a warning.
Why I'm unable to apply the patch to my server with PHP 7.4?I need help.
Upload your zip file and just put the .env file is not correct as the system doesn't work and I can imagine why: miss email config and maybe other config.Please help.
Also you need think ReCaptcha should be not active as default for a new install.
I suggest to see if you can develop enable / disable from the UI interface