You are here

public function InstagramSettingsForm::buildForm in Social Feed 8

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides ConfigFormBase::buildForm

File

src/Form/InstagramSettingsForm.php, line 27

Class

InstagramSettingsForm
Class InstagramSettingsForm.

Namespace

Drupal\socialfeed\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('socialfeed.instagramsettings');
  $redirect_uri = Url::fromRoute('socialfeed.instagram_auth', [], [
    'absolute' => TRUE,
  ])
    ->toString();
  $form['header']['#markup'] = $this
    ->t('To get the App ID and App Secret you need to follow steps 1-3 <a href="@site" target="@blank">here</a> (command line not needed). Then add them here and save the page. Once the credentials are saved, a link to generate the Access Token will appear.', [
    '@site' => 'https://developers.facebook.com/docs/instagram-basic-display-api/getting-started',
    '@blank' => '_blank',
  ]);
  $form['client_id'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('App ID'),
    '#description' => $this
      ->t('App ID from Instagram account'),
    '#default_value' => $config
      ->get('client_id'),
    '#size' => 60,
    '#maxlength' => 100,
    '#required' => TRUE,
  ];
  $form['app_secret'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('App Secret'),
    '#description' => $this
      ->t('App Secret from Instagram account'),
    '#default_value' => $config
      ->get('app_secret'),
    '#size' => 60,
    '#maxlength' => 100,
    '#required' => TRUE,
  ];
  $form['redirect_uri'] = [
    '#type' => 'item',
    '#title' => $this
      ->t('Redirect URI'),
    '#markup' => $redirect_uri,
    '#default_value' => $redirect_uri,
  ];
  $token_message = $this
    ->t('Once the App ID and Secret Key have been saved, a link to generate the Access Key will appear.');
  if ($config
    ->get('client_id')) {
    $instagram = new InstagramBasicDisplay([
      'appId' => $config
        ->get('client_id'),
      'appSecret' => $config
        ->get('app_secret'),
      'redirectUri' => $redirect_uri,
    ]);
    $token_message = $this
      ->t('<a href="@this" target="_blank">Login with Instagram to generate the Access Token</a>', [
      '@this' => Url::fromUri($instagram
        ->getLoginUrl())
        ->toString(),
    ]);
  }
  $form['access_token'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Access Token'),
    '#field_prefix' => '<div>' . $token_message . '</div>',
    '#description' => $this
      ->t('This access token will automatically be renewed before the current one expires in 60 days.'),
    '#default_value' => $config
      ->get('access_token'),
    '#size' => 60,
    '#maxlength' => 300,
  ];
  $form['picture_count'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Default Picture Count'),
    '#default_value' => $config
      ->get('picture_count'),
    '#size' => 60,
    '#maxlength' => 100,
    '#min' => 1,
  ];
  $form['video_thumbnail'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Show video thumbnails instead of actual videos'),
    '#default_value' => $config
      ->get('video_thumbnail'),
  ];
  $form['post_link'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Show post URL'),
    '#default_value' => $config
      ->get('post_link'),
  ];
  if ($config
    ->get('access_token')) {
    $form['feed'] = [
      '#type' => 'item',
      '#title' => $this
        ->t('Feed URL'),
      '#markup' => $this
        ->t('https://graph.instagram.com/me/media?fields=id,media_type,media_url,username,timestamp&limit=@picture_count&access_token=@access_token', [
        '@access_token' => $config
          ->get('access_token'),
        '@picture_count' => $config
          ->get('picture_count'),
      ]),
    ];
  }
  return parent::buildForm($form, $form_state);
}