Exemple #1
0
 /**
  * Deletes a file by uri.
  */
 public static function deleteFileUri($uri, $ignore_usage = FALSE)
 {
     // Managed file
     if ($file = Imce::getFileEntity($uri)) {
         if (!$ignore_usage && ($usage = \Drupal::service('file.usage')->listUsage($file))) {
             unset($usage['imce']);
             if ($usage) {
                 drupal_set_message(t('%filename is in use by another application.', array('%filename' => $file->getFilename())), 'error');
                 return FALSE;
             }
         }
         $file->delete();
         return TRUE;
     }
     // Unmanaged file
     return file_unmanaged_delete($uri);
 }
 /**
  * Sets widget file id values by validating and processing the submitted data.
  * Runs before processor callbacks.
  */
 public static function setWidgetValue($element, &$input, FormStateInterface $form_state)
 {
     if (empty($input['imce_paths'])) {
         return;
     }
     $paths = $input['imce_paths'];
     $input['imce_paths'] = '';
     // Remove excess data.
     $paths = array_unique(array_filter(explode(':', $paths)));
     if (isset($element['#cardinality']) && $element['#cardinality'] > -1) {
         $paths = array_slice($paths, 0, $element['#cardinality']);
     }
     // Check if paths are accessible by the current user with Imce.
     if (!($paths = Imce::accessFilePaths($paths, \Drupal::currentUser(), $element['#scheme']))) {
         return;
     }
     // Validate paths as file entities.
     $file_usage = \Drupal::service('file.usage');
     $errors = array();
     foreach ($paths as $path) {
         // Get entity by uri
         $file = Imce::getFileEntity($element['#scheme'] . '://' . $path, TRUE);
         if ($new_errors = file_validate($file, $element['#upload_validators'])) {
             $errors = array_merge($errors, $new_errors);
         } else {
             // Save the file record.
             if ($file->isNew()) {
                 $file->save();
             }
             if ($fid = $file->id()) {
                 // Make sure the file has usage otherwise it will be denied.
                 if (!$file_usage->listUsage($file)) {
                     $file_usage->add($file, 'imce', 'file', $fid);
                 }
                 $input['fids'][] = $fid;
             }
         }
     }
     // Set error messages.
     if ($errors) {
         $errors = array_unique($errors);
         if (count($errors) > 1) {
             $errors = array('#theme' => 'item_list', '#items' => $errors);
             $message = \Drupal::service('renderer')->render($errors);
         } else {
             $message = array_pop($errors);
         }
         // May break the widget flow if set as a form error.
         drupal_set_message($message, 'error');
     }
 }
Exemple #3
0
 /**
  * Resizes a list of imce items and returns succeeded ones.
  */
 public function resizeItems(ImceFM $fm, array $items, $width, $height, $copy = FALSE)
 {
     $factory = \Drupal::service('image.factory');
     $fs = \Drupal::service('file_system');
     $success = array();
     foreach ($items as $item) {
         $uri = $item->getUri();
         $image = $factory->get($uri);
         // Check vallidity
         if (!$image->isValid()) {
             continue;
         }
         // Check if resizing is needed.
         $resize = $image->getWidth() != $width || $image->getHeight() != $height;
         if (!$resize && !$copy) {
             continue;
         }
         if ($resize && !$image->resize($width, $height)) {
             continue;
         }
         // Save
         $destination = $copy ? file_create_filename($fs->basename($uri), $fs->dirname($uri)) : $uri;
         if (!$image->save($destination)) {
             continue;
         }
         // Create a new file record.
         if ($copy) {
             $filename = $fs->basename($destination);
             $values = array('uid' => $fm->user->id(), 'status' => 1, 'filename' => $filename, 'uri' => $destination, 'filesize' => $image->getFileSize(), 'filemime' => $image->getMimeType());
             $file = \Drupal::entityTypeManager()->getStorage('file')->create($values);
             // Check quota
             if ($errors = file_validate_size($file, 0, $fm->getConf('quota'))) {
                 file_unmanaged_delete($destination);
                 $fm->setMessage($errors[0]);
             } else {
                 $file->save();
                 // Add imce item
                 $item->parent->addFile($filename)->addToJs();
             }
         } else {
             if ($file = Imce::getFileEntity($uri)) {
                 $file->setSize($image->getFileSize());
                 $file->save();
             }
             // Add to js
             $item->addToJs();
         }
         $success[] = $item;
     }
     return $success;
 }