Skip to content
Snippets Groups Projects

Added a new option to prevent auto_open on mobile devices

Merged Dave Mentens requested to merge issue/oswald-3418829:3418829-option-to-prevent into 4.0.x
5 files
+ 90
2
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -2,6 +2,7 @@
namespace Drupal\oswald\Entity;
use Detection\MobileDetect;
use Drupal\Core\Entity\Annotation\ContentEntityType;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Entity\ContentEntityBase;
@@ -119,6 +120,23 @@ class OswaldChatbot extends ContentEntityBase implements OswaldChatbotInterface
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['prevent_auto_open_mobile'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Prevent automatic opening on mobile devices'))
->setDescription(t('Enabling this checkbox will ensure the widget won\'t open automatically on mobile devices.'))
->setRequired(FALSE)
->setDefaultValue(FALSE)
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'boolean',
'weight' => 3,
])
->setDisplayOptions('form', [
'type' => 'boolean_checkbox',
'weight' => 3,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['environment'] = BaseFieldDefinition::create('list_string')
->setLabel(t('Environment'))
->setRequired(TRUE)
@@ -140,7 +158,7 @@ class OswaldChatbot extends ContentEntityBase implements OswaldChatbotInterface
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['request_path'] = BaseFieldDefinition::create('string')
$fields['request_path'] = BaseFieldDefinition::create('string')
->setLabel(t('Request Path'))
->setDefaultValue('')
->setRequired(FALSE)
@@ -185,10 +203,38 @@ class OswaldChatbot extends ContentEntityBase implements OswaldChatbotInterface
*/
public function getAutoOpen(): string {
if ($this->get('auto_open')->value) {
return ($this->isMobileRequest() && $this->getPreventAutoOpenMobile() == 'true') ? 'false' : 'true';
}
return 'false';
}
/**
* {@inheritdoc}
*/
public function getPreventAutoOpenMobile(): string {
if ($this->hasField('prevent_auto_open_mobile') && $this->get('prevent_auto_open_mobile')->value) {
return 'true';
}
return 'false';
}
/**
* Determine if the request if made from a mobile device.
*
* @return bool
* Returns true if the request is made from a mobile device.
*/
protected function isMobileRequest(): bool {
/** @var \Symfony\Component\HttpFoundation\RequestStack $request_stack */
$request_stack = \Drupal::service('request_stack');
$request = $request_stack->getCurrentRequest();
$detect = new MobileDetect();
$detect->setUserAgent($request->headers->get('User-Agent'));
return $detect->isMobile();
}
}
Loading