View source
<?php
namespace Drupal\photos\Form;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Database\Connection;
use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\photos\PhotosAlbum;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PhotosImageEditForm extends ContentEntityForm {
protected $connection;
protected $dateFormatter;
protected $entityTypeManager;
protected $messenger;
protected $moduleHandler;
protected $renderer;
protected $currentUser;
public function __construct(Connection $connection, DateFormatterInterface $date_formatter, EntityTypeManagerInterface $entity_type_manager, MessengerInterface $messenger, ModuleHandlerInterface $module_handler, RendererInterface $renderer, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityRepositoryInterface $entity_repository, TimeInterface $time = NULL, AccountInterface $current_user) {
parent::__construct($entity_repository, $entity_type_bundle_info, $time);
$this->connection = $connection;
$this->dateFormatter = $date_formatter;
$this->entityTypeManager = $entity_type_manager;
$this->messenger = $messenger;
$this->moduleHandler = $module_handler;
$this->renderer = $renderer;
$this->currentUser = $current_user;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('database'), $container
->get('date.formatter'), $container
->get('entity_type.manager'), $container
->get('messenger'), $container
->get('module_handler'), $container
->get('renderer'), $container
->get('entity_type.bundle.info'), $container
->get('entity.repository'), $container
->get('datetime.time'), $container
->get('current_user'));
}
public function form(array $form, FormStateInterface $form_state) {
$photosImage = $this->entity;
$type = 'album';
$user = $this
->currentUser();
$form['#title'] = $this
->t('Edit @title', [
'@title' => $photosImage
->getTitle(),
]);
$form['changed'] = [
'#type' => 'hidden',
'#default_value' => $photosImage
->getChangedTime(),
];
$node = $this->entityTypeManager
->getStorage('node')
->load($photosImage
->getAlbumId());
$nid = $node
->id();
$cover = [];
if (isset($node->album) && isset($node->album['cover_id']) && !empty($node->album['cover_id'])) {
$photos_album = new PhotosAlbum($node
->id());
$cover = $photos_album
->getCover($node->album['cover_id']);
$cover['id'] = $node->album['cover_id'];
}
$photosImage->info = [
'cover' => $cover,
'pid' => $node
->id(),
'title' => $node
->getTitle(),
'uid' => $node
->getOwnerId(),
];
$imageView = [];
$imageView['photos_image'] = $photosImage;
$album_update = '';
if ($photosImage && $user
->id() != $photosImage->info['uid']) {
$title = isset($photosImage->info['title']) ? $photosImage->info['title'] : '';
$album_update = [
$nid,
$photosImage->info['title'],
];
}
$uid = $photosImage ? $photosImage
->getOwnerId() : $user
->id();
$form['old_uid'] = [
'#type' => 'hidden',
'#default_value' => $uid,
];
if (isset($node->album) && isset($node->album['cover_id'])) {
$form['cover_id'] = [
'#type' => 'hidden',
'#default_value' => $node->album['cover_id'],
];
}
$form['old_album_id'] = [
'#type' => 'hidden',
'#default_value' => $nid,
];
$form['nid'] = [
'#type' => 'hidden',
'#default_value' => $nid,
];
$account = $this->entityTypeManager
->getStorage('user')
->load($photosImage
->getOwnerId());
$imageView['href'] = 'photos/' . $photosImage
->getAlbumId() . '/' . $photosImage
->id();
$item = [];
if ($type == 'album' && (!isset($cover['id']) || isset($cover['id']) && $photosImage
->id() != $cover['id'])) {
$cover_url = Url::fromRoute('photos.album.update.cover', [
'node' => $photosImage
->getAlbumId(),
'photos_image' => $photosImage
->id(),
], [
'attributes' => [
'target' => '_blank',
],
]);
$item[] = Link::fromTextAndUrl($this
->t('Set to Cover'), $cover_url);
}
$form['cover_items'] = [
'#theme' => 'item_list',
'#items' => $item,
];
$username = [
'#theme' => 'username',
'#account' => $account,
];
$upload_info = $this
->t('Uploaded on @time by @name', [
'@name' => $this->renderer
->renderPlain($username),
'@time' => $this->dateFormatter
->format($photosImage
->getCreatedTime(), 'short'),
]);
$form['time']['#markup'] = $upload_info;
$form['oldtitle'] = [
'#type' => 'hidden',
'#default_value' => $photosImage
->getTitle(),
];
return parent::form($form, $form_state);
}
public function save(array $form, FormStateInterface $form_state) {
$photosImage = $this->entity;
$photosImage
->save();
$form_state_values = $form_state
->getValues();
$album_id = $form_state_values['album_id'][0]['target_id'];
$old_album_id = $form_state_values['old_album_id'];
$uid = $form_state_values['uid'][0]['target_id'];
$old_uid = $form_state_values['old_uid'];
Cache::invalidateTags([
'photos:image:' . $photosImage
->id(),
]);
if ($nid = $form_state
->getValue('nid')) {
Cache::invalidateTags([
'photos:album:' . $nid,
'node:' . $nid,
]);
}
if ($album_id) {
PhotosAlbum::setCount('node_album', $album_id);
Cache::invalidateTags([
'photos:album:' . $album_id,
'node:' . $album_id,
]);
if ($old_album_id && $old_album_id != $album_id) {
PhotosAlbum::setCount('node_album', $old_album_id);
Cache::invalidateTags([
'photos:album:' . $old_album_id,
'node:' . $old_album_id,
]);
}
}
if ($uid) {
PhotosAlbum::setCount('user_image', $uid);
if ($old_uid != $uid) {
PhotosAlbum::setCount('user_image', $old_uid);
}
}
$this->messenger
->addMessage($this
->t('Changes saved.'));
}
}