You are here

class RotateController in Insert 8

Same name and namespace in other branches
  1. 8.2 src/Controller/RotateController.php \Drupal\insert\Controller\RotateController

Hierarchy

Expanded class hierarchy of RotateController

File

src/Controller/RotateController.php, line 14

Namespace

Drupal\insert\Controller
View source
class RotateController extends ControllerBase {

  /**
   * Rotates an image regenerating image derivatives for every image style and
   * saving the corresponding entity with the updated image dimensions.
   *
   * @param Request $request
   * @return JsonResponse
   */
  public function rotate(Request $request) {
    $fid = $request->query
      ->get('fid', null);
    $degree = $request->query
      ->get('degree', null);
    $nid = $request->query
      ->get('nid', null);
    $absolute = !!$request->query
      ->get('absolute', FALSE);
    if ($fid === null || $degree === null || $nid === null) {
      return new JsonResponse([]);
    }
    $file = File::load($fid);
    if ($file === null) {
      return new JsonResponse([]);
    }

    /** @var ImageInterface $image */
    $image = \Drupal::service('image.factory')
      ->get($file
      ->getFileUri());
    if (!$image
      ->isValid()) {
      return new JsonResponse([]);
    }
    if ($image
      ->rotate(floatval($degree))) {
      $image
        ->save();
    }
    $styleUrls = [
      'image' => $this
        ->convertUrl(file_create_url($image
        ->getSource()), $absolute),
    ];

    /* @var ImageStyle $style */
    foreach (ImageStyle::loadMultiple() as $style) {
      $style
        ->flush($image
        ->getSource());
      $uri = $style
        ->buildUri($image
        ->getSource());
      $style
        ->createDerivative($file
        ->getFileUri(), $uri);
      $url = $style
        ->buildUrl($image
        ->getSource());
      $styleUrls[$style
        ->getName()] = $this
        ->convertUrl($url, $absolute);
    }
    $revision = null;

    // Update dimensions in node.
    $node = Node::load($nid);
    if ($node !== null) {

      /** @var FieldDefinitionInterface $definition */
      foreach ($node
        ->getFieldDefinitions() as $field_name => $definition) {
        if ($definition
          ->getType() === 'image') {
          $value = $node
            ->get($field_name)
            ->getValue();
          $found = FALSE;
          foreach ($value as &$item) {
            if ($item['target_id'] === $fid) {
              $width = $item['width'];
              $item['width'] = $item['height'];
              $item['height'] = $width;
              $node
                ->set($field_name, $value, FALSE);
              $node
                ->save();
              $found = TRUE;
              break;
            }
          }
          if ($found) {
            break;
          }
        }
      }
      $revision = $node
        ->getChangedTimeAcrossTranslations();
    }
    return new JsonResponse([
      'revision' => $revision,
      'data' => $styleUrls,
    ]);
  }

  /**
   * @param string $url
   * @param bool $absolute
   * @return string
   */
  protected function convertUrl($url, $absolute) {
    return $absolute || strpos($url, $GLOBALS['base_url']) !== 0 ? $url : base_path() . ltrim(str_replace($GLOBALS['base_url'], '', $url), '/');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::create public static function Instantiates a new instance of this class. Overrides ContainerInjectionInterface::create 40
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
RotateController::convertUrl protected function
RotateController::rotate public function Rotates an image regenerating image derivatives for every image style and saving the corresponding entity with the updated image dimensions.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.