function photos_access_form_node_form_alter in Album Photos 8.4
Same name and namespace in other branches
- 8.5 photos_access/photos_access.module \photos_access_form_node_form_alter()
- 6.0.x photos_access/photos_access.module \photos_access_form_node_form_alter()
Implements hook_form_BASE_FORM_ID_alter() for form_node.
File
- photos_access/
photos_access.module, line 44 - Implementation of photos_access.module.
Code
function photos_access_form_node_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
// Get form node.
$node = $form_state
->getFormObject()
->getEntity();
if ($node && ($node_type = $node
->getType())) {
if (\Drupal::config('photos.settings')
->get('photos_access_' . $node_type)) {
$nid = $node
->id();
$form['privacy'] = [
'#type' => 'details',
'#title' => t('Privacy'),
'#open' => TRUE,
'#weight' => 1,
'#tree' => TRUE,
];
// Access record(s) id.
$form['privacy']['access_id'] = [
'#type' => 'value',
'#value' => isset($node->privacy['access_id']) ? $node->privacy['access_id'] : 0,
];
$form['privacy']['vid'] = [
'#type' => 'value',
'#value' => isset($node->privacy['vid']) ? $node->privacy['vid'] : 0,
];
$form['privacy']['eid'] = [
'#type' => 'value',
'#value' => isset($node->privacy['eid']) ? $node->privacy['eid'] : 0,
];
$old = [];
if ($nid) {
// Check collaborators and designated users.
if (!isset($node->privacy['access_id']) || !($photos_album_access_id = $node->privacy['access_id'])) {
$db = \Drupal::database();
$photos_album_access_id = $db
->query("SELECT id FROM {photos_access_album} WHERE nid = :nid", [
':nid' => $nid,
])
->fetchField();
}
if ($photos_album_access_id) {
$old['updateuser'] = _photos_access_userlist($photos_album_access_id, TRUE);
$old['viewuser'] = _photos_access_userlist($photos_album_access_id, FALSE);
}
}
$default_viewid = isset($node->privacy['viewid']) ? $node->privacy['viewid'] : 0;
$form['privacy']['viewid'] = [
'#type' => 'radios',
'#title' => t('Privacy'),
'#default_value' => $default_viewid,
'#options' => [
t('Open'),
t('Locked'),
t('Designated users'),
t('Password required'),
],
'#prefix' => '<div id="photos_access_privacy">',
'#suffix' => '</div>',
'#ajax' => [
'callback' => 'photos_access_privacy_form_ajax',
'event' => 'change',
'progress' => [
'type' => 'throbber',
'message' => NULL,
],
],
];
// Prep password field.
$classes = ' class="photos-access-password photos_access-hidden-field"';
if ($default_viewid == 3) {
$classes = ' class="photos-access-password"';
}
$form['privacy']['pass'] = [
'#type' => 'password',
'#title' => t('Password'),
'#default_value' => isset($node->privacy['pass']) ? $node->privacy['pass'] : '',
'#prefix' => '<div id="photos_access_password"' . $classes . '>',
'#suffix' => '</div>',
];
// Prep designated users field.
$classes = ' class="photos-access-view-users photos_access-hidden-field"';
if ($default_viewid == 2) {
$classes = ' class="photos-access-view-users"';
}
$userhelp = t('Separated by commas. eg: username1,username2,username3.');
$form['privacy']['viewuser'] = [
'#type' => 'entity_autocomplete',
'#title' => t('Designated users'),
'#description' => t('Add people who will have access to view this node.') . ' ' . (isset($old['viewuser']) ? t('@help The following users have access:', [
'@help' => $userhelp,
]) . ' ' : $userhelp),
'#target_type' => 'user',
'#tags' => TRUE,
'#default_value' => isset($node->privacy['viewuser']) && !is_array($node->privacy['viewuser']) ? $node->privacy['viewuser'] : NULL,
'#process_default_value' => FALSE,
'#prefix' => '<div id="photos_access_viewuser"' . $classes . '>',
'#suffix' => '</div>',
];
if (!empty($old['viewuser'])) {
foreach ($old['viewuser'] as $u) {
$form['privacy']['viewremove'][$u->uid] = [
'#type' => 'checkbox',
'#default_value' => isset($node->viewremove[$u->uid]) ? $node->viewremove[$u->uid] : '',
'#title' => t('Delete: @name', [
'@name' => $u->name,
]),
'#prefix' => '<div id="photos_access_remove"' . $classes . '>',
'#suffix' => '</div>',
];
}
}
$form['privacy']['updateuser'] = [
'#type' => 'entity_autocomplete',
'#title' => t('Add collaborators'),
'#target_type' => 'user',
'#tags' => TRUE,
'#default_value' => isset($node->privacy['updateuser']) && !is_array($node->privacy['updateuser']) ? $node->privacy['updateuser'] : NULL,
'#description' => t('Add people who will have the authority to edit this node.') . ' ' . (isset($old['updateuser']) ? t('@help collaboration users list:', [
'@help' => $userhelp,
]) . ' ' : $userhelp),
];
if (!empty($old['updateuser'])) {
// @todo add option to delete all collaborators.
foreach ($old['updateuser'] as $u) {
$form['privacy']['updateremove'][$u->uid] = [
'#type' => 'checkbox',
'#default_value' => isset($node->updateremove[$u->uid]) ? $node->updateremove[$u->uid] : '',
'#title' => t('Delete: @name', [
'@name' => $u->name,
]),
'#prefix' => '<div id="photos_access_updateremove" class="photos-access-update-remove">',
'#suffix' => '</div>',
];
}
}
$form['#attached']['library'][] = 'photos_access/photos_access.node.form';
// Make sure $node->privacy is available in node_insert and node_update.
$form['#entity_builders'][] = 'photos_access_node_builder';
// Validate password and users.
$form['#validate'][] = 'photos_access_node_validate';
}
if ($node_type == 'photos') {
// Move files if needed.
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions'][$action]['#submit'][] = 'photos_access_move_files_form_submit';
}
}
}
}
}