public function Acquiadam::getForm in Media: Acquia DAM 8
File
- src/Plugin/EntityBrowser/Widget/Acquiadam.php, line 167
Class
- Acquiadam
- Uses a view to provide entity listing in a browser's widget.
Namespace
Drupal\media_acquiadam\Plugin\EntityBrowser\Widget
Code
public function getForm(array &$original_form, FormStateInterface $form_state, array $additional_widget_parameters) {
$config = $this->config
->get('media_acquiadam.settings');
$media_type_storage = $this->entityTypeManager
->getStorage('media_type');
if (!$this->configuration['media_type'] || !($media_type = $media_type_storage
->load($this->configuration['media_type']))) {
return [
'#markup' => $this
->t('The media type is not configured correctly.'),
];
}
elseif ($media_type
->getSource()
->getPluginId() != 'acquiadam_asset') {
return [
'#markup' => $this
->t('The configured media type is not using the acquiadam_asset plugin.'),
];
}
elseif ($this
->uuid() != $form_state
->getStorage()['entity_browser_current_widget']) {
return [];
}
$auth = $this->acquiadam
->getAuthState();
if (empty($auth['valid_token'])) {
try {
$auth = $this->acquiadam
->checkAuth();
if (!empty($auth['valid_token'])) {
$this->userData
->set('media_acquiadam', $this->user
->id(), 'acquiadam_access_token', $auth['access_token']);
$this->userData
->set('media_acquiadam', $this->user
->id(), 'acquiadam_access_token_expiration', $auth['access_token_expiry']);
$this->userData
->set('media_acquiadam', $this->user
->id(), 'acquiadam_refresh_token', $auth['refresh_token']);
}
} catch (InvalidCredentialsException $x) {
$message = '';
if ($config
->get('samesite_cookie_disable') || $this->requestStack
->getCurrentRequest()
->getScheme() == "http") {
$message = $this
->t("You are not authenticated. %authenticate first, then re-open this modal to browse Acquia DAM assets..", [
'%authenticate' => Link::createFromRoute('authenticate', 'media_acquiadam.auth_start', [], [
'attributes' => [
'target' => '_blank',
],
])
->toString(),
]);
}
else {
$message = $this
->t('You are not authenticated. Please %authenticate to browse Acquia DAM assets.', [
'%authenticate' => Link::createFromRoute('authenticate', 'media_acquiadam.auth_start', [
'auth_finish_redirect' => $this->requestStack
->getCurrentRequest()
->getRequestUri(),
])
->toString(),
]);
}
$form['message'] = [
'#theme' => 'asset_browser_message',
'#message' => $message,
'#attached' => [
'library' => [
'media_acquiadam/asset_browser',
],
],
];
return $form;
}
}
$form = parent::getForm($original_form, $form_state, $additional_widget_parameters);
$form['#attached']['library'][] = 'core/drupal.dialog.ajax';
$trigger_elem = $form_state
->getTriggeringElement();
$current_folder = new Folder();
$current_folder->id = 0;
$current_folder->parent = 0;
$current_folder->name = 'Home';
$page = 0;
$num_per_page = $config
->get('num_images_per_page') ?? AcquiadamConfig::NUM_IMAGES_PER_PAGE;
$breadcrumbs = [
'0' => 'Home',
];
if (isset($form_state
->getCompleteForm()['widget']) && isset($trigger_elem) && $trigger_elem['#name'] != 'filter_sort_reset') {
$widget = $form_state
->getCompleteForm()['widget'];
if (isset($widget['pager-container']) && is_numeric($widget['pager-container']['#page'])) {
$page = intval($widget['pager-container']['#page']);
}
if (isset($widget['asset-container']) && is_numeric($widget['asset-container']['#acquiadam_folder_id'])) {
$current_folder->id = $widget['asset-container']['#acquiadam_folder_id'];
}
if (isset($widget['breadcrumb-container']) && is_array($widget['breadcrumb-container']['#breadcrumbs'])) {
$breadcrumbs = $widget['breadcrumb-container']['#breadcrumbs'];
}
if ($form_state
->getValue('assets')) {
$current_selections = $form_state
->getValue('current_selections', []) + array_filter($form_state
->getValue('assets', []));
$form['current_selections'] = [
'#type' => 'value',
'#value' => $current_selections,
];
}
}
if (isset($trigger_elem)) {
if ($trigger_elem['#name'] == 'acquiadam_folder') {
$current_folder->id = intval($trigger_elem['#acquiadam_folder_id']);
$page = 0;
}
if ($trigger_elem['#name'] == 'acquiadam_pager') {
$page = intval($trigger_elem['#acquiadam_page']);
}
if ($trigger_elem['#name'] == 'filter_sort_submit') {
$page = 0;
}
if ($trigger_elem['#name'] == 'filter_sort_reset') {
$user_input = $form_state
->getUserInput();
$clean_val_key = $form_state
->getCleanValueKeys();
foreach ($user_input as $key => $item) {
if (!in_array($key, $clean_val_key)) {
unset($user_input[$key]);
}
}
$form_state
->setUserInput($user_input);
$form_state
->setValues($user_input);
$form_state
->setRebuild();
$page = 0;
}
}
$offset = $num_per_page * $page;
$params = [
'limit' => $num_per_page,
'offset' => $offset,
'sortby' => $form_state
->getValue('sortby'),
'sortdir' => $form_state
->getValue('sortdir'),
'types' => $form_state
->getValue('types'),
'query' => $form_state
->getValue('query'),
'folderid' => $current_folder->id,
];
if ($current_folder->id) {
$current_folder = $this->acquiadam
->getFolder($current_folder->id);
$folders = $current_folder->folders;
$folder_assets = $this->acquiadam
->getFolderAssets($current_folder->id, $params);
$current_folder->numassets = $folder_assets->total_count;
if (!empty($params['types'])) {
$current_folder->numassets = $folder_assets->facets->types->{$params['types']};
}
$items = $folder_assets->items;
}
else {
$folders = $this->acquiadam
->getTopLevelFolders();
}
if (!empty($params['query'])) {
$search_results = $this->acquiadam
->searchAssets($params);
$current_folder->numassets = $search_results['total_count'];
$items = isset($search_results['assets']) ? $search_results['assets'] : [];
}
$form += $this
->getFilterSort();
$form += $this
->getBreadcrumb($current_folder, $breadcrumbs);
$form['asset-container'] = [
'#type' => 'container',
'#acquiadam_folder_id' => $current_folder->id,
'#attributes' => [
'class' => [
'acquiadam-asset-browser',
],
],
];
$modulePath = $this->moduleHandler
->getModule('media_acquiadam')
->getPath();
if (empty($params['query'])) {
foreach ($folders as $folder) {
$form['asset-container']['folders'][$folder->name] = [
'#type' => 'container',
'#attributes' => [
'class' => [
'acquiadam-browser-folder-link',
],
'style' => 'background-image:url("/' . $modulePath . '/img/folder.png")',
],
];
$backgroundImageStyle = '';
if (isset($folder->thumbnailurls) && !empty($folder->thumbnailurls[0]->url)) {
$backgroundImageStyle .= 'background-image:url("' . $folder->thumbnailurls[0]->url . '")';
}
$form['asset-container']['folders'][$folder->name][$folder->id] = [
'#type' => 'button',
'#value' => $folder->name,
'#name' => 'acquiadam_folder',
'#acquiadam_folder_id' => $folder->id,
'#acquiadam_parent_folder_id' => $current_folder->parent,
'#attributes' => [
'class' => [
'acquiadam-folder-link-button',
],
'style' => $backgroundImageStyle,
],
];
$form['asset-container']['folders'][$folder->name]['title'] = [
'#type' => 'html_tag',
'#tag' => 'p',
'#value' => $folder->name,
];
}
}
$assets = [];
$assets_status = [];
if (isset($items)) {
foreach ($items as $folder_item) {
$assets_status[$folder_item->id]['#disabled'] = $folder_item->status !== 'active';
$assets[$folder_item->id] = $this
->layoutMediaEntity($folder_item);
}
}
$form['asset-container']['assets'] = [
'#type' => 'checkboxes',
'#theme_wrappers' => [
'checkboxes__acquiadam_assets',
],
'#title_display' => 'invisible',
'#options' => $assets,
'#attached' => [
'library' => [
'media_acquiadam/asset_browser',
],
],
] + $assets_status;
if ($current_folder->numassets > $num_per_page) {
$form['actions'] += $this
->getPager($current_folder, $page, $num_per_page);
}
return $form;
}