| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | <?phpnamespace Drupal\materio_expo\Controller;use Drupal\Core\Controller\ControllerBase;use Symfony\Component\HttpFoundation\RedirectResponse;use Drupal\Core\Url;use Symfony\Component\HttpFoundation\Cookie;/** * Class QRController. */class QRController extends ControllerBase {  public function setcookie($ref) {    //? https://drupal.stackexchange.com/questions/278203/how-do-i-set-a-cookie-using-response-headers-setcookie-in-a-form-submission    // $form_state->setRedirect('materio_expo.qr_controller_getfile', ['ref'=>$ref]);    // $response = new RedirectResponse(!empty($destination) ? $destination : '/');    $url = Url::fromRoute('materio_expo.qr_controller_getfile', ['ref'=>$ref]);    $response = new RedirectResponse($url->toString());    $response->headers->setCookie(new Cookie('materio_expo_email', true, strtotime( '+3 days' ), '/'));    $response->send();    return $response;  }  /**   */  public function getfile($ref) {    //? https://drupal.stackexchange.com/questions/255216/how-to-do-a-redirectresponse-with-a-destination-query-parameter    //* check if email cookie is present (form submitted)    // $session = \Drupal::request()->getSession();    // $alreadysetemail = $session->get('materio_expo_email');    $alreadysetemail = \Drupal::request()->cookies->get('materio_expo_email', false);    if($alreadysetemail){      //* get node from ref      $entity_storage = \Drupal::entityTypeManager()->getStorage('node');      $query = $entity_storage->getQuery()        ->condition('type', 'materiau')        ->condition('status', '1')        ->accessCheck()        ->condition('field_reference', $ref);      $results = $query->execute();      $nid = array_pop($results);      $node = $entity_storage->load($nid);      //* get file from node      $file = $node->get('field_fiche_expo')->referencedEntities()[0];      //* redirect to file      return new RedirectResponse($file->createFileUrl());      // return [      //   '#type' => 'markup',      //   '#markup' => $this->t("Error, email not provided"),      // ];    } else {      // return [      //   '#type' => 'markup',      //   '#markup' => $this->t("Error, email not provided"),      // ];      $url = Url::fromRoute('materio_expo.get_email', ['ref'=>$ref]);      return new RedirectResponse($url->toString());    }  }}
 |