You are here

fasttoggle.module in Fasttoggle 8.3

Same filename and directory in other branches
  1. 5 fasttoggle.module
  2. 6 fasttoggle.module
  3. 7 fasttoggle.module

Main file for the fasttoggle module.

File

fasttoggle.module
View source
<?php

/**
 * @file
 * Main file for the fasttoggle module.
 */
use Drupal\comment\CommentInterface;
use Drupal\comment\CommentTypeInterface;
use Drupal\comment\Entity\CommentType;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\node\NodeInterface;
use Drupal\node\NodeTypeInterface;
use Drupal\node\Entity\NodeType;

/**
 * Create fastoggle node action link function.
 */
function _fasttoggle_create_node_link(NodeInterface $entity, $toggle, $link_name) {
  $config = \Drupal::config('fasttoggle.settings');
  $label_style = $config
    ->get('label_style');
  switch ($toggle) {
    case 'status':
      switch ($label_style) {
        case 0:
          $entity
            ->isPublished() ? $link_title = t('Published') : ($link_title = t('Not published'));
          break;
        case 1:
          $entity
            ->isPublished() ? $link_title = t('Unpublish') : ($link_title = t('Publish'));
          break;
      }
      break;
    case 'promote':
      switch ($label_style) {
        case 0:
          $entity
            ->isPromoted() ? $link_title = t('Promoted') : ($link_title = t('Not promoted'));
          break;
        case 1:
          $entity
            ->isPromoted() ? $link_title = t('Demote') : ($link_title = t('Promote'));
          break;
      }
      break;
    case 'sticky':
      switch ($label_style) {
        case 0:
          $entity
            ->isSticky() ? $link_title = t('Sticky') : ($link_title = t('Not sticky'));
          break;
        case 1:
          $entity
            ->isSticky() ? $link_title = t('Make not sticky') : ($link_title = t('Make sticky'));
          break;
      }
      break;
  }
  $link[$link_name] = [
    'title' => $link_title,
    'url' => Url::fromUserInput('/fasttoggle/node/' . $entity
      ->id() . '/' . $toggle),
    'attributes' => [
      'class' => [
        'use-ajax',
        'fasttoggle-node-' . $toggle,
      ],
    ],
  ];
  return $link[$link_name];
}

/**
 * Create fastoggle comment action link function.
 */
function _fasttoggle_create_comment_link(CommentInterface $entity, $toggle, $link_name) {
  $config = \Drupal::config('fasttoggle.settings');
  $label_style = $config
    ->get('label_style');
  switch ($toggle) {
    case 'status':
      switch ($label_style) {
        case 0:
          $entity
            ->isPublished() ? $link_title = t('Published') : ($link_title = t('Not published'));
          break;
        case 1:
          $entity
            ->isPublished() ? $link_title = t('Unpublish') : ($link_title = t('Publish'));
          break;
      }
      break;
  }
  $link[$link_name] = [
    'title' => $link_title,
    'url' => Url::fromUserInput('/fasttoggle/comment/' . $entity
      ->id() . '/' . $toggle),
    'attributes' => [
      'class' => [
        'use-ajax',
        'fasttoggle-comment-' . $entity
          ->id() . '-' . $toggle,
      ],
    ],
  ];
  return $link[$link_name];
}

/**
 * Implements hook_node_links_alter().
 */
function fasttoggle_node_links_alter(array &$links, NodeInterface $entity, array &$context) {
  $user = \Drupal::currentUser();
  if ($user
    ->hasPermission('use fasttoggle')) {
    $node_type = NodeType::load($entity
      ->bundle());
    $status_toggle = $node_type
      ->getThirdPartySetting('fasttoggle', 'status', 0);
    $promote_toggle = $node_type
      ->getThirdPartySetting('fasttoggle', 'promote', 0);
    $sticky_toggle = $node_type
      ->getThirdPartySetting('fasttoggle', 'sticky', 0);
    if ($status_toggle) {
      $link_name = 'fasttoggle-' . $entity
        ->bundle() . '-status';
      $links['node']['#links'][$link_name] = _fasttoggle_create_node_link($entity, 'status', $link_name);
    }
    if ($promote_toggle) {
      $link_name = 'fasttoggle-' . $entity
        ->bundle() . '-promote';
      $links['node']['#links'][$link_name] = _fasttoggle_create_node_link($entity, 'promote', $link_name);
    }
    if ($sticky_toggle) {
      $link_name = 'fasttoggle-' . $entity
        ->bundle() . '-sticky';
      $links['node']['#links'][$link_name] = _fasttoggle_create_node_link($entity, 'sticky', $link_name);
    }
  }
}

/**
 * Implements hook_comment_links_alter().
 */
function fasttoggle_comment_links_alter(array &$links, CommentInterface $entity, array &$context) {
  $user = \Drupal::currentUser();
  if ($user
    ->hasPermission('use fasttoggle')) {
    $comment_type = CommentType::load($entity
      ->bundle());
    $status_toggle = $comment_type
      ->getThirdPartySetting('fasttoggle', 'status', 0);
    if ($status_toggle) {
      $link_name = 'fasttoggle-' . $entity
        ->bundle() . '-comment-status';
      $links['comment']['#links'][$link_name] = _fasttoggle_create_comment_link($entity, 'status', $link_name);
    }
  }
}

/**
 * Implements hook_form_node_type_edit_form_alter().
 */
function fasttoggle_form_node_type_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $type = $form_state
    ->getFormObject()
    ->getEntity();
  $form['fasttoggle'] = [
    '#type' => 'details',
    '#title' => 'Fasttoggle',
    '#group' => 'additional_settings',
  ];
  $form['fasttoggle']['toggles_available'] = [
    '#type' => 'fieldset',
    '#title' => t('Toggles available'),
  ];
  $form['fasttoggle']['toggles_available']['status'] = [
    '#type' => 'checkbox',
    '#title' => t('Status (published/unpublished)'),
    '#default_value' => $type
      ->getThirdPartySetting('fasttoggle', 'status', 0),
  ];
  $form['fasttoggle']['toggles_available']['promote'] = [
    '#type' => 'checkbox',
    '#title' => t('Promoted to frontpage'),
    '#default_value' => $type
      ->getThirdPartySetting('fasttoggle', 'promote', 0),
  ];
  $form['fasttoggle']['toggles_available']['sticky'] = [
    '#type' => 'checkbox',
    '#title' => t('Sticky at top of lists'),
    '#default_value' => $type
      ->getThirdPartySetting('fasttoggle', 'sticky', 0),
  ];
  $form['#entity_builders'][] = 'fasttoggle_form_node_type_form_builder';
}

/**
 * Entity builder for the node type form.
 */
function fasttoggle_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) {
  $type
    ->setThirdPartySetting('fasttoggle', 'status', $form_state
    ->getValue('status'));
  $type
    ->setThirdPartySetting('fasttoggle', 'promote', $form_state
    ->getValue('promote'));
  $type
    ->setThirdPartySetting('fasttoggle', 'sticky', $form_state
    ->getValue('sticky'));
}

/**
 * Implements hook_form_comment_type_edit_form_alter().
 */
function fasttoggle_form_comment_type_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $type = $form_state
    ->getFormObject()
    ->getEntity();
  $form['fasttoggle'] = [
    '#type' => 'details',
    '#title' => 'Fasttoggle',
    '#group' => 'additional_settings',
  ];
  $form['fasttoggle']['toggles_available'] = [
    '#type' => 'fieldset',
    '#title' => t('Toggles available'),
  ];
  $form['fasttoggle']['toggles_available']['status'] = [
    '#type' => 'checkbox',
    '#title' => t('Status (published/unpublished)'),
    '#default_value' => $type
      ->getThirdPartySetting('fasttoggle', 'status', 0),
  ];
  $form['#entity_builders'][] = 'fasttoggle_form_comment_type_form_builder';
}

/**
 * Entity builder for the comment type form.
 */
function fasttoggle_form_comment_type_form_builder($entity_type, CommentTypeInterface $type, &$form, FormStateInterface $form_state) {
  $type
    ->setThirdPartySetting('fasttoggle', 'status', $form_state
    ->getValue('status'));
}

Functions

Namesort descending Description
fasttoggle_comment_links_alter Implements hook_comment_links_alter().
fasttoggle_form_comment_type_edit_form_alter Implements hook_form_comment_type_edit_form_alter().
fasttoggle_form_comment_type_form_builder Entity builder for the comment type form.
fasttoggle_form_node_type_edit_form_alter Implements hook_form_node_type_edit_form_alter().
fasttoggle_form_node_type_form_builder Entity builder for the node type form.
fasttoggle_node_links_alter Implements hook_node_links_alter().
_fasttoggle_create_comment_link Create fastoggle comment action link function.
_fasttoggle_create_node_link Create fastoggle node action link function.