/** * @param \Drupal\file\FileInterface $fillpdf_file * @param array $context * An array representing the entities that were used to generate this file. * This array should match the format returned by * FillPdfLinkManipulator::parseLink(). * @see FillPdfLinkManipulatorInterface::parseLink() * @see FileFieldItemList::postSave() */ protected function rememberFileContext(FileInterface $fillpdf_file, array $context) { $fillpdf_link = $this->linkManipulator->generateLink($context); $fillpdf_file_context = FillPdfFileContext::create([ 'file' => $fillpdf_file, 'context' => $fillpdf_link->toUriString(), ]); // The file field will automatically add file usage information upon save. $fillpdf_file_context->save(); }
/** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $form = parent::form($form, $form_state); /** @var FillPdfFormInterface $entity */ $entity = $this->entity; $form['tokens'] = [ '#type' => 'details', '#title' => $this->t('Tokens'), '#weight' => 11, 'token_tree' => $this->adminFormHelper->getAdminTokenForm(), ]; $entity_types = []; $entity_type_definitions = $this->entityManager->getDefinitions(); foreach ($entity_type_definitions as $machine_name => $definition) { $label = $definition->getLabel(); $entity_types[$machine_name] = "$machine_name ($label)"; } // @todo: Encapsulate this logic into a ::getDefaultEntityType() method on FillPdfForm $default_entity_type = $entity->get('default_entity_type')->first()->value; if (empty($default_entity_type)) { $default_entity_type = 'node'; } $form['default_entity_type'] = [ '#type' => 'select', '#title' => $this->t('Default entity type'), '#options' => $entity_types, '#weight' => 12.5, '#default_value' => $default_entity_type, ]; $fid = $entity->id(); /** @var FileInterface $file_entity */ $file_entity = File::load($entity->get('file')->first()->target_id); $pdf_info_weight = 0; $form['pdf_info'] = [ '#type' => 'fieldset', '#title' => $this->t('PDF form information'), '#weight' => $form['default_entity_id']['#weight'] + 1, 'submitted_pdf' => [ '#type' => 'item', '#title' => $this->t('Uploaded PDF'), '#description' => $file_entity->getFileUri(), '#weight' => $pdf_info_weight++, ], 'upload_pdf' => [ '#type' => 'file', '#title' => 'Update PDF template', '#description' => $this->t('Update the PDF template used by this form'), '#weight' => $pdf_info_weight++, ], 'sample_populate' => [ '#type' => 'item', '#title' => 'Sample PDF', '#description' => $this->l($this->t('See which fields are which in this PDF.'), $this->linkManipulator->generateLink([ 'fid' => $fid, 'sample' => TRUE, ])) . '<br />' . $this->t('If you have set a custom path on this PDF, the sample will be saved there silently.'), '#weight' => $pdf_info_weight++, ], 'form_id' => [ '#type' => 'item', '#title' => 'Form Info', '#description' => $this->t("Form ID: [@fid]. Populate this form with entity IDs, such as /fillpdf?fid=$fid&entity_type=node&entity_id=10<br/>", ['@fid' => $fid]), '#weight' => $pdf_info_weight, ], ]; if (!empty($entity->get('default_entity_id')->first()->value)) { $parameters = [ 'fid' => $fid, ]; $form['pdf_info']['populate_default'] = [ '#type' => 'item', '#title' => 'Fill PDF from default node', '#description' => $this->l($this->t('Download this PDF filled with data from the default entity (@entity_type:@entity).', [ '@entity_type' => $entity->default_entity_type->value, '@entity' => $entity->default_entity_id->value, ] ), $this->linkManipulator->generateLink($parameters)) . '<br />' . $this->t('If you have set a custom path on this PDF, the sample will be saved there silently.'), '#weight' => $form['pdf_info']['form_id']['#weight'] - 0.1, ]; } $additional_setting_set = $entity->destination_path->value || $entity->destination_redirect->value; $form['additional_settings'] = [ '#type' => 'details', '#title' => $this->t('Additional settings'), '#weight' => $form['pdf_info']['#weight'] + 1, '#open' => $additional_setting_set, ]; $form['destination_path']['#group'] = 'additional_settings'; $form['scheme']['#group'] = 'additional_settings'; $form['destination_redirect']['#group'] = 'additional_settings'; $form['replacements']['#group'] = 'additional_settings'; $form['replacements']['#weight'] = 1; // @todo: Add a button to let them attempt re-parsing if it failed. $form['fillpdf_fields']['fields'] = FillPdf::embedView('fillpdf_form_fields', 'block_1', $entity->id()); $form['fillpdf_fields']['#weight'] = 100; $form['export_fields'] = [ '#prefix' => '<div>', '#markup' => $this->l($this->t('Export these field mappings'), Url::fromRoute('entity.fillpdf_form.export_form', ['fillpdf_form' => $entity->id()])), '#suffix' => '</div>', '#weight' => 100, ]; $form['import_fields'] = [ '#prefix' => '<div>', '#markup' => $this->l($this->t('Import a previous export into this PDF'), Url::fromRoute('entity.fillpdf_form.import_form', ['fillpdf_form' => $entity->id()])), '#suffix' => '</div>', '#weight' => 100, ]; return $form; }
public function checkLink() { $context = $this->linkManipulator->parseRequest($this->requestStack->getCurrentRequest()); $account = $this->currentUser; return $this->accessHelper->canGeneratePdfFromContext($context, $account); }