/** * 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'); } }
/** * 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; }