improved first step of create order form
This commit is contained in:
parent
a39da8fc36
commit
05b2621bc7
|
@ -40,13 +40,13 @@ content:
|
|||
override_labels: true
|
||||
label_singular: 'order item'
|
||||
label_plural: 'order items'
|
||||
allow_new: true
|
||||
match_operator: CONTAINS
|
||||
revision: false
|
||||
collapsible: false
|
||||
collapsed: false
|
||||
allow_new: false
|
||||
allow_existing: false
|
||||
allow_duplicate: false
|
||||
revision: false
|
||||
third_party_settings: { }
|
||||
region: content
|
||||
hidden:
|
||||
|
|
|
@ -8,4 +8,16 @@ function materio_commerce_form_alter(&$form, &$form_state, $form_id) {
|
|||
$form['actions']['next']['#value'] = t('Place your order');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function materio_commerce_form_commerce_order_add_form_alter(&$form, &$form_state, $form_id) {
|
||||
$currentUser = \Drupal::currentUser();
|
||||
$roles = $currentUser->getRoles();
|
||||
if (in_array("admin", $roles)){
|
||||
$t="t";
|
||||
$form['type']['#default_value'] = 'materio_order_type';
|
||||
$form['type']['#disabled'] = true;
|
||||
|
||||
$form['customer']['uid']['#selection_handler'] = 'default:user_by_email';
|
||||
}
|
||||
}
|
|
@ -2,4 +2,13 @@ services:
|
|||
materio_commerce.order_events_subscriber:
|
||||
class: Drupal\materio_commerce\EventSubscriber\MaterioCommerceOrderEventsSubscriber
|
||||
tags:
|
||||
- { name: 'event_subscriber' }
|
||||
- { name: 'event_subscriber' }
|
||||
|
||||
materio_commerce.route_subscriber:
|
||||
class: Drupal\materio_commerce\Routing\AutocompleteRouteSubscriber
|
||||
tags:
|
||||
- { name: event_subscriber }
|
||||
|
||||
materio_commerce.autocomplete_matcher:
|
||||
class: Drupal\materio_commerce\EntityAutocompleteMatcher
|
||||
arguments: ['@plugin.manager.entity_reference_selection']
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\materio_commerce\Controller;
|
||||
|
||||
use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
|
||||
use Drupal\materio_commerce\EntityAutocompleteMatcher;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
class EntityAutocompleteController extends \Drupal\system\Controller\EntityAutocompleteController {
|
||||
|
||||
/**
|
||||
* The autocomplete matcher for entity references.
|
||||
*/
|
||||
protected $matcher;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(EntityAutocompleteMatcher $matcher, KeyValueStoreInterface $key_value) {
|
||||
$this->matcher = $matcher;
|
||||
$this->keyValue = $key_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container) {
|
||||
return new static(
|
||||
$container->get('materio_commerce.autocomplete_matcher'),
|
||||
$container->get('keyvalue')->get('entity_autocomplete')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\materio_commerce;
|
||||
|
||||
use Drupal\Component\Utility\Html;
|
||||
use Drupal\Component\Utility\Tags;
|
||||
|
||||
class EntityAutocompleteMatcher extends \Drupal\Core\Entity\EntityAutocompleteMatcher {
|
||||
|
||||
/**
|
||||
* Gets matched labels based on a given search string.
|
||||
*/
|
||||
public function getMatches($target_type, $selection_handler, $selection_settings, $string = '') {
|
||||
|
||||
$matches = [];
|
||||
|
||||
$options = [
|
||||
'target_type' => $target_type,
|
||||
'handler' => $selection_handler,
|
||||
'handler_settings' => $selection_settings,
|
||||
];
|
||||
|
||||
$handler = $this->selectionManager->getInstance($options);
|
||||
|
||||
if (isset($string)) {
|
||||
// Get an array of matching entities.
|
||||
$match_operator = !empty($selection_settings['match_operator']) ? $selection_settings['match_operator'] : 'CONTAINS';
|
||||
$entity_labels = $handler->getReferenceableEntities($string, $match_operator, 10);
|
||||
|
||||
// Loop through the entities and convert them into autocomplete output.
|
||||
foreach ($entity_labels as $values) {
|
||||
foreach ($values as $entity_id => $label) {
|
||||
|
||||
$entity = \Drupal::entityTypeManager()->getStorage($target_type)->load($entity_id);
|
||||
$entity = \Drupal::entityManager()->getTranslationFromContext($entity);
|
||||
|
||||
$key = $label . ' (' . $entity_id . ')';
|
||||
// Strip things like starting/trailing white spaces, line breaks and tags.
|
||||
$key = preg_replace('/\s\s+/', ' ', str_replace("\n", '', trim(Html::decodeEntities(strip_tags($key)))));
|
||||
// Names containing commas or quotes must be wrapped in quotes.
|
||||
$key = Tags::encode($key);
|
||||
switch ($entity->getEntityType()->id()) {
|
||||
case 'node':
|
||||
$type = !empty($entity->type->entity) ? $entity->type->entity->label() : $entity->bundle();
|
||||
$status = ($entity->isPublished()) ? ", Published" : ", Unpublished";
|
||||
|
||||
break;
|
||||
case 'user':
|
||||
$email = $entity->getEmail();
|
||||
$label = $label . ' (' . $entity_id . ') [' . $email . ']';
|
||||
break;
|
||||
}
|
||||
|
||||
$matches[] = ['value' => $key, 'label' => $label];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $matches;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\materio_commerce\Plugin\EntityReferenceSelection;
|
||||
|
||||
use Drupal\Core\Database\Connection;
|
||||
use Drupal\Core\Database\Query\Condition;
|
||||
use Drupal\Core\Database\Query\SelectInterface;
|
||||
use Drupal\Core\Entity\EntityFieldManagerInterface;
|
||||
use Drupal\Core\Entity\EntityRepositoryInterface;
|
||||
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
use Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection;
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\user\RoleInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
use Drupal\user\Plugin\EntityReferenceSelection\UserSelection;
|
||||
|
||||
/**
|
||||
* Provides specific access control for the user entity type.
|
||||
*
|
||||
* @EntityReferenceSelection(
|
||||
* id = "default:user_by_email",
|
||||
* label = @Translation("User selection By Email"),
|
||||
* entity_types = {"user"},
|
||||
* group = "default",
|
||||
* weight = 3
|
||||
* )
|
||||
*/
|
||||
class UserByEmailSelection extends UserSelection {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function entityQueryAlter(SelectInterface $query) {
|
||||
parent::entityQueryAlter($query);
|
||||
|
||||
$conditions = &$query->conditions();
|
||||
foreach ($conditions as $key => $condition) {
|
||||
if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === 'users_field_data.name') {
|
||||
unset($conditions[$key]);
|
||||
|
||||
$or = new Condition('OR');
|
||||
$or->condition('users_field_data.name', $condition['value'], $condition['operator']);
|
||||
$or->condition('mail', $condition['value'], $condition['operator']);
|
||||
$query->condition($or);
|
||||
$t="t";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\materio_commerce\Routing;
|
||||
|
||||
use Drupal\Core\Routing\RouteSubscriberBase;
|
||||
use Symfony\Component\Routing\RouteCollection;
|
||||
|
||||
class AutocompleteRouteSubscriber extends RouteSubscriberBase {
|
||||
|
||||
public function alterRoutes(RouteCollection $collection) {
|
||||
if ($route = $collection->get('system.entity_autocomplete')) {
|
||||
$route->setDefault('_controller', '\Drupal\materio_commerce\Controller\EntityAutocompleteController::handleAutocomplete');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue