예제 #1
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     module_load_include('inc', 'uc_role', 'uc_role.admin');
     if ($form_state->get('step') == UC_FILE_FORM_ACTION) {
         return array('#validate' => array('uc_file_admin_files_form_action_validate'), '#submit' => array('uc_file_admin_files_form_action_submit')) + $form + uc_file_admin_files_form_action($form, $form_state);
     } else {
         // Refresh our file list before display.
         uc_file_refresh();
         return array('#theme' => 'uc_file_admin_files_form_show', '#validate' => array('uc_file_admin_files_form_show_validate'), '#submit' => array('uc_file_admin_files_form_show_submit')) + $form + uc_file_admin_files_form_show_files($form, $form_state);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     // No directory now; truncate the file list.
     if ($form_state->isValueEmpty('base_dir')) {
         uc_file_empty();
     } else {
         uc_file_refresh();
     }
     $file_config = $this->config('uc_file.settings');
     $file_config->set('base_dir', $form_state->getValue('base_dir'))->set('duplicate_warning', $form_state->getValue('duplicate_warning'))->set('download_limit_number', $form_state->getValue('download_limit_number'))->set('download_limit_addresses', $form_state->getValue('download_limit_addresses'))->set('download_limit_duration_qty', $form_state->getValue('download_limit_duration_qty'))->set('download_limit_duration_granularity', $form_state->getValue('download_limit_duration_granularity'))->save();
     parent::submitForm($form, $form_state);
 }
예제 #3
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state)
 {
     $module_handler = \Drupal::moduleHandler();
     //    $module_handler->loadInclude('uc_file', 'inc', 'uc_file.admin');
     //if ($form_state->get('step') == UC_FILE_FORM_ACTION) {
     //  return $form + \Drupal::formBuilder()->buildForm('Drupal\uc_file\Form\ActionForm', $form, $form_state);
     //}
     //else {
     // Refresh our file list before display.
     uc_file_refresh();
     // Rebuilds uc_file table from directory contents! I sure hope it's smart about it...
     // Render everything.
     //  return $form + \Drupal::formBuilder()->buildForm('Drupal\uc_file\Form\ShowForm', $form, $form_state);
     //}
     $form['#attached']['library'][] = 'uc_file/uc_file.styles';
     $form['help'] = array('#prefix' => '<p>', '#markup' => $this->t('File downloads can be attached to any Ubercart product as a product feature. For security reasons the <a href=":download_url">file downloads directory</a> is separated from the Drupal <a href=":file_url">file system</a>. Below is the list of files (and their associated Ubercart products, if any) that can be used for file downloads.', [':download_url' => Url::fromRoute('uc_product.settings', [], ['query' => ['destination' => 'admin/store/products/files']])->toString(), ':file_url' => Url::fromRoute('system.file_system_settings')->toString()]), '#suffix' => '<p>');
     $form['uc_file_action'] = array('#type' => 'fieldset', '#title' => $this->t('File options'));
     // Set our default actions.
     $file_actions = array('uc_file_upload' => $this->t('Upload file(s)'), 'uc_file_delete' => $this->t('Delete file(s)'));
     // Check if any hook_uc_file_action('info', $args) are implemented.
     foreach ($module_handler->getImplementations('uc_file_action') as $module) {
         $name = $module . '_uc_file_action';
         $result = $name('info', NULL);
         if (is_array($result)) {
             foreach ($result as $key => $action) {
                 if ($key != 'uc_file_delete' && $key != 'uc_file_upload') {
                     $file_actions[$key] = $action;
                 }
             }
         }
     }
     $form['uc_file_action']['action'] = array('#type' => 'select', '#title' => $this->t('Action'), '#prefix' => '<div class="duration">', '#options' => $file_actions, '#suffix' => '</div>');
     $form['uc_file_actions']['actions'] = array('#type' => 'actions');
     $form['uc_file_action']['actions']['submit'] = array('#type' => 'submit', '#prefix' => '<div class="duration">', '#value' => $this->t('Perform action'), '#suffix' => '</div>');
     return $form;
 }
예제 #4
0
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL, $feature = NULL)
 {
     $file_config = $this->config('uc_file.settings');
     if (!is_dir($file_config->get('base_dir'))) {
         drupal_set_message($this->t('A file directory needs to be configured in <a href=":url">product settings</a> under the file download settings tab before a file can be selected.', [':url' => Url::fromRoute('uc_product.settings')->toString()]), 'warning');
         return $form;
     }
     // Rescan the file directory to populate {uc_files} with the current list
     // because files uploaded via any method other than the Upload button
     // (e.g. by FTP) won'b be in {uc_files} yet.
     uc_file_refresh();
     if (!db_query_range('SELECT 1 FROM {uc_files}', 0, 1)->fetchField()) {
         $form['file']['file_message'] = array('#markup' => $this->t('You must add files at the <a href=":url">Ubercart file download administration page</a> in order to attach them to a model.', [':url' => Url::fromRoute('uc_file.downloads', [], ['query' => ['destination' => 'node/' . $node->id() . '/edit/features/file/add']])->toString()]));
         return $form;
     }
     // Grab all the models on this product.
     $models = uc_product_get_models($node->id());
     // Use the feature's values to fill the form, if they exist.
     if (!empty($feature)) {
         $file_product = db_query("SELECT * FROM {uc_file_products} p LEFT JOIN {uc_files} f ON p.fid = f.fid WHERE pfid = :pfid", [':pfid' => $feature['pfid']])->fetchObject();
         $default_feature = $feature['pfid'];
         $default_model = $file_product->model;
         $default_filename = $file_product->filename;
         $default_description = $file_product->description;
         $default_shippable = $file_product->shippable;
         $download_status = $file_product->download_limit != UC_FILE_LIMIT_SENTINEL;
         $download_value = $download_status ? $file_product->download_limit : NULL;
         $address_status = $file_product->address_limit != UC_FILE_LIMIT_SENTINEL;
         $address_value = $address_status ? $file_product->address_limit : NULL;
         $time_status = $file_product->time_granularity != UC_FILE_LIMIT_SENTINEL;
         $quantity_value = $time_status ? $file_product->time_quantity : NULL;
         $granularity_value = $time_status ? $file_product->time_granularity : 'never';
     } else {
         $default_feature = NULL;
         $default_model = '';
         $default_filename = '';
         $default_description = '';
         $default_shippable = $node->shippable->value;
         $download_status = FALSE;
         $download_value = NULL;
         $address_status = FALSE;
         $address_value = NULL;
         $time_status = FALSE;
         $quantity_value = NULL;
         $granularity_value = 'never';
     }
     $form['#attached']['library'][] = 'uc_file/uc_file.styles';
     $form['nid'] = array('#type' => 'value', '#value' => $node->id());
     $form['pfid'] = array('#type' => 'value', '#value' => $default_feature);
     $form['uc_file_model'] = array('#type' => 'select', '#title' => $this->t('SKU'), '#default_value' => $default_model, '#description' => $this->t('This is the SKU that will need to be purchased to obtain the file download.'), '#options' => $models);
     $form['uc_file_filename'] = array('#type' => 'textfield', '#title' => $this->t('File download'), '#default_value' => $default_filename, '#autocomplete_route_name' => 'uc_file.autocomplete_filename', '#description' => $this->t('The file that can be downloaded when product is purchased (enter a path relative to the %dir directory).', ['%dir' => $file_config->get('base_dir')]), '#maxlength' => 255, '#required' => TRUE);
     $form['uc_file_description'] = array('#type' => 'textfield', '#title' => $this->t('Description'), '#default_value' => $default_description, '#maxlength' => 255, '#description' => $this->t('A description of the download associated with the product.'));
     $form['uc_file_shippable'] = array('#type' => 'checkbox', '#title' => $this->t('Shippable product'), '#default_value' => $default_shippable, '#description' => $this->t('Check if this product model/SKU file download is also associated with a shippable product.'));
     $form['uc_file_limits'] = array('#type' => 'fieldset', '#description' => $this->t('Use these options to override any global download limits set at the :url.', [':url' => Link::createFromRoute($this->t('Ubercart product settings page'), 'uc_product.settings', [], ['query' => ['destination' => 'node/' . $node->id() . '/edit/features/file/add']])->toString()]), '#title' => $this->t('File limitations'));
     $form['uc_file_limits']['download_override'] = array('#type' => 'checkbox', '#title' => $this->t('Override download limit'), '#default_value' => $download_status);
     $form['uc_file_limits']['download_limit_number'] = array('#type' => 'textfield', '#title' => $this->t('Downloads'), '#default_value' => $download_value, '#description' => $this->t("The number of times this file can be downloaded."), '#maxlength' => 4, '#size' => 4, '#states' => array('visible' => array('input[name="download_override"]' => array('checked' => TRUE))));
     $form['uc_file_limits']['location_override'] = array('#type' => 'checkbox', '#title' => $this->t('Override IP address limit'), '#default_value' => $address_status);
     $form['uc_file_limits']['download_limit_addresses'] = array('#type' => 'textfield', '#title' => $this->t('IP addresses'), '#default_value' => $address_value, '#description' => $this->t("The number of unique IPs that a file can be downloaded from."), '#maxlength' => 4, '#size' => 4, '#states' => array('visible' => array('input[name="location_override"]' => array('checked' => TRUE))));
     $form['uc_file_limits']['time_override'] = array('#type' => 'checkbox', '#title' => $this->t('Override time limit'), '#default_value' => $time_status);
     $form['uc_file_limits']['download_limit_duration_qty'] = array('#type' => 'textfield', '#title' => $this->t('Time'), '#default_value' => $quantity_value, '#size' => 4, '#maxlength' => 4, '#prefix' => '<div class="duration">', '#suffix' => '</div>', '#states' => array('disabled' => array('select[name="download_limit_duration_granularity"]' => array('value' => 'never')), 'visible' => array('input[name="time_override"]' => array('checked' => TRUE))));
     $form['uc_file_limits']['download_limit_duration_granularity'] = array('#type' => 'select', '#default_value' => $granularity_value, '#options' => array('never' => $this->t('never'), 'day' => $this->t('day(s)'), 'week' => $this->t('week(s)'), 'month' => $this->t('month(s)'), 'year' => $this->t('year(s)')), '#description' => $this->t('How long after this product has been purchased until this file download expires.'), '#prefix' => '<div class="duration">', '#suffix' => '</div>', '#states' => array('visible' => array('input[name="time_override"]' => array('checked' => TRUE))));
     $form['actions'] = array('#type' => 'actions');
     $form['actions']['submit'] = array('#type' => 'submit', '#value' => $this->t('Save feature'));
     return $form;
 }
예제 #5
0
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     // Build the destination location. We start with the base directory,
     // then add any directory which was explicitly selected.
     $dir = $this->config('uc_file.settings')->get('base_dir') . '/' . $form_state->getValue('upload_dir');
     if (is_dir($dir)) {
         // Retrieve our uploaded files.
         $file_objects = $form_state->get('temp_files');
         foreach ($file_objects as $file_object) {
             // Copy the file to its final location.
             if (copy($file_object->getFileUri(), $dir . '/' . $file_object->getFilename())) {
                 // Check if any hook_uc_file_action('upload', $args) are implemented
                 $module_handler = \Drupal::moduleHandler();
                 foreach ($module_handler->getImplementations('uc_file_action') as $module) {
                     $name = $module . '_uc_file_action';
                     $name('upload', array('file_object' => $file_object, 'form_id' => $form_id, 'form_state' => $form_state));
                 }
                 // Update the file list
                 uc_file_refresh();
                 drupal_set_message($this->t('The file %file has been uploaded to %dir', ['%file' => $file_object->getFilename(), '%dir' => $dir]));
             } else {
                 drupal_set_message($this->t('An error occurred while copying the file to %dir', ['%dir' => $dir]), 'error');
             }
         }
     } else {
         drupal_set_message($this->t('Can not move file to %dir', ['%dir' => $dir]), 'error');
     }
     $form_state->setRedirect('uc_file.downloads');
 }
예제 #6
0
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     switch ($form_state->getValue('action')) {
         case 'uc_file_delete':
             // File deletion status.
             $status = TRUE;
             // Delete the selected file(s), with recursion if selected.
             $status = uc_file_remove_by_id($form_state->getValue('file_ids'), !$form_state->isValueEmpty('recurse_directories')) && $status;
             if ($status) {
                 drupal_set_message(t('The selected file(s) have been deleted.'));
             } else {
                 drupal_set_message(t('One or more files could not be deleted.'));
             }
             break;
         case 'uc_file_upload':
             // Build the destination location. We start with the base directory,
             // then add any directory which was explicitly selected.
             $dir = \Drupal::config('uc_file.settings')->get('base_dir') . '/' . $form_state->getValue('upload_dir');
             if (is_dir($dir)) {
                 // Retrieve our uploaded file.
                 $file_object = $form_state->get('temp_file');
                 // Copy the file to its final location.
                 if (copy($file_object->uri, $dir . '/' . $file_object->filename)) {
                     // Check if any hook_uc_file_action('upload', $args) are implemented
                     $module_handler = \Drupal::moduleHandler();
                     foreach ($module_handler->getImplementations('uc_file_action') as $module) {
                         $name = $module . '_uc_file_action';
                         $name('upload', array('file_object' => $file_object, 'form_id' => $form_id, 'form_state' => $form_state));
                     }
                     // Update the file list
                     uc_file_refresh();
                     drupal_set_message(t('The file %file has been uploaded to %dir', array('%file' => $file_object->filename, '%dir' => $dir)));
                 } else {
                     drupal_set_message(t('An error occurred while copying the file to %dir', array('%dir' => $dir)));
                 }
             } else {
                 drupal_set_message(t('Can not move file to %dir', array('%dir' => $dir)));
             }
             break;
         default:
             // This action isn't handled by us, so check if any
             // hook_uc_file_action('submit', $args) are implemented
             $module_handler = \Drupal::moduleHandler();
             foreach ($module_handler->getImplementations('uc_file_action') as $module) {
                 $name = $module . '_uc_file_action';
                 $name('submit', array('form_id' => $form_id, 'form_state' => $form_state));
             }
             break;
     }
     // Return to the original form state.
     $form_state->setRebuild(FALSE);
     drupal_goto('admin/store/products/files');
 }