improved first step of create order form
This commit is contained in:
		@@ -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');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user