Commit fdfd9e7d authored by Sumesh S's avatar Sumesh S

#1 - Drupal 9 updates

parent 818fd24a
{
"name": "sumeshsr/zendesk",
"type": "drupal-module",
"description": "Zendesk module",
"keywords": [
"Drupal"
],
"license": "GPL-2.0+",
"minimum-stability": "dev",
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"zendesk/zendesk_api_client_php": "dev-master"
}
......
<?php
/**
* @file
* Contains \Drupal\zendesk\Form\ZendeskAdminForm.
*/
namespace Drupal\zendesk\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Path\AliasManagerInterface;
use Drupal\Core\Form\ConfigFormBase;
/**
......@@ -17,6 +10,13 @@ use Drupal\Core\Form\ConfigFormBase;
*/
class ZendeskAdminForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return ['zendesk.settings'];
}
/**
* Implements \Drupal\Core\Form\FormInterface::getFormID().
*/
......@@ -29,72 +29,72 @@ class ZendeskAdminForm extends ConfigFormBase {
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('zendesk.settings');
$form['zendesk']['zendesk_api'] = array(
$form['zendesk']['zendesk_api'] = [
'#type' => 'fieldset',
'#title' => 'API configuration',
);
];
$form['zendesk']['zendesk_api']['zendesk_url'] = array(
$form['zendesk']['zendesk_api']['zendesk_url'] = [
'#type' => 'textfield',
'#required' => TRUE,
'#title' => t('Zendesk URL'),
'#description' => 'The url of your zendesk support page (e.g. http://yourdomain.zendesk.com).',
'#default_value' => $config->get('zendesk_url'),
);
];
$form['zendesk']['zendesk_api']['zendesk_subdomain'] = array(
$form['zendesk']['zendesk_api']['zendesk_subdomain'] = [
'#type' => 'textfield',
'#title' => t('Zendesk subdomain'),
'#default_value' => $config->get('zendesk_subdomain'),
'#description' => t('The subdomain of your zendesk page: if your zendesk is http://subdomain.zendesk.com, then you have to fil in "subdomain".'),
);
];
$form['zendesk']['zendesk_api']['zendesk_api_token'] = array(
$form['zendesk']['zendesk_api']['zendesk_api_token'] = [
'#type' => 'textfield',
'#required' => TRUE,
'#description' => 'The zendesk API token.',
'#default_value' => $config->get('zendesk_api_token'),
'#suffix' => t('Use the http://www.yourdomain.com/agent/#/admin/channels page in your zendesk configuration page. (Go to Account -> Channels'),
);
];
$form['zendesk']['zendesk_api']['zendesk_api_mail'] = array(
$form['zendesk']['zendesk_api']['zendesk_api_mail'] = [
'#type' => 'textfield',
'#title' => t('Mail address of the API user'),
'#default_value' => $config->get('zendesk_api_mail'),
'#description' => t('This is typically the mail address of the zendesk admin account'),
);
];
$role_options = [];
// Role-based visibility settings.
foreach (user_roles() as $machine_name => $role_object) {
$role_options[$machine_name] = $role_object->id();
}
$form['zendesk']['zendesk_permissions'] = array(
$form['zendesk']['zendesk_permissions'] = [
'#type' => 'fieldset',
'#description' => t('Restrict access to zendesk based on user roles. These rules will apply for both user synchronization as remote authentication.'),
);
];
$form['zendesk']['zendesk_permissions']['zendesk_roles'] = array(
$form['zendesk']['zendesk_permissions']['zendesk_roles'] = [
'#type' => 'checkboxes',
'#title' => t('Authenticate only for specific roles'),
'#default_value' => $config->get('zendesk_roles'),
'#options' => $role_options,
'#description' => t('Select which roles may be authenticated for zendesk. If you select no roles, all authenticated drupal users will be authenticated for Zendesk.'),
);
];
$form['zendesk']['zendesk_permissions']['zendesk_no_permission_page'] = array(
$form['zendesk']['zendesk_permissions']['zendesk_no_permission_page'] = [
'#type' => 'textfield',
'#title' => t('No permission page'),
'#default_value' => $config->get('zendesk_no_permission_page'),
'#description' => t('To what pages do you want to redirect user that have no permission to access Zendesk.'),
);
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}c
* {@inheritdoc}c.
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->config('zendesk.settings')
......@@ -108,5 +108,5 @@ class ZendeskAdminForm extends ConfigFormBase {
parent::submitForm($form, $form_state);
}
}
}
name: Zendesk
description: "Main module that handle Zendesk's API"
core: 8.x
core_version_requirement: ^8.8 || ^9
package: Zendesk
configure: admin/config/system/zendesk
configure: zendesk.zendesk_admin
type: module
......@@ -5,22 +5,18 @@
* The Zendesk module helps you to interact with zendesk using Drupal.
*/
require 'vendor/autoload.php';
use Drupal\zendesk;
use Zendesk\API\Client as ZendeskAPI;
use Drupal\user\Entity;
/**
* Implements hook_permission().
*/
function zendesk_permission() {
return array(
'configure zendesk' => array(
return [
'configure zendesk' => [
'title' => t('Configure Zendesk'),
'description' => t('Configure Drupal settings to communicate with Zendesk.'),
),
);
],
];
}
/**
......
zendesk_admin:
path: 'admin/config/system/zendesk'
path: '/admin/config/system/zendesk'
defaults:
_form: '\Drupal\zendesk\Form\ZendeskAdminForm'
requirements:
......
......@@ -45,9 +45,9 @@ class ZendeskSSOController extends ControllerBase {
$account = \Drupal::currentUser();
$token = array(
'jti' => sha1($account->id() . REQUEST_TIME . rand()),
'iat' => REQUEST_TIME,
'name' => $account->getUsername(),
'jti' => sha1($account->id() . \Drupal::time()->getRequestTime() . rand()),
'iat' => \Drupal::time()->getRequestTime(),
'name' => $account->getDisplayName(),
'email' => $account->getEmail(),
'external_id' => $account->id(),
);
......
name: Zendesk SSO
description: "Enable the Single Sing-on with Zendesk."
core: 8.x
core_version_requirement: ^8.8 || ^9
package: Zendesk
configure: admin/config/system/zendesk
type: module
dependencies:
- zendesk
- zendesk:zendesk
name: Zendesk users
name: Zendesk Users
description: "Sync users with Zendesk."
core: 8.x
core_version_requirement: ^8.8 || ^9
package: Zendesk
configure: admin/config/system/zendesk
type: module
dependencies:
- zendesk
- zendesk_sso
- zendesk:zendesk
- zendesk:zendesk_sso
......@@ -9,28 +9,28 @@
* Implements hook_schema().
*/
function zendesk_users_schema() {
$schema['zendesk_users'] = array(
$schema['zendesk_users'] = [
'description' => "Links the drupal user ids with the zendesk user id's",
'fields' => array(
'uid' => array(
'fields' => [
'uid' => [
'type' => 'int',
'unsigned' => TRUE,
'not null' => 0,
'default' => 0,
'description' => 'Drupal user id',
),
'zid' => array(
],
'zid' => [
'type' => 'int',
'unsigned' => TRUE,
'not null' => 0,
'default' => 0,
'description' => 'Zendesk user id',
),
),
'primary_key' => array('uid', 'zid'),
'indexes' => array(
'uid' => array('uid'),
),
);
],
],
'primary_key' => ['uid', 'zid'],
'indexes' => [
'uid' => ['uid'],
],
];
return $schema;
}
......@@ -5,11 +5,8 @@
* The Zendesk module helps you to interact with zendesk using Drupal.
*/
use Symfony\Component\HttpFoundation\RedirectResponse;
use Drupal\zendesk;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Component\Serialization\Json;
/**
* Implements hook_form_FORM_ID_alter().
......@@ -17,17 +14,17 @@ use Drupal\Component\Serialization\Json;
function zendesk_users_form_zendesk_admin_form_alter(array &$form, FormStateInterface $form_state) {
$config = \Drupal::config('zendesk.settings');
$form['zendesk']['zendesk_users'] = array(
$form['zendesk']['zendesk_users'] = [
'#type' => 'fieldset',
'#title' => 'Users configuration',
);
];
$form['zendesk']['zendesk_users']['zendesk_authed_user'] = array(
$form['zendesk']['zendesk_users']['zendesk_authed_user'] = [
'#type' => 'checkbox',
'#title' => t('Create user as verified users'),
'#default_value' => $config->get('zendesk_authed_user'),
'#description' => t('Check this is you want to create user as already verified users.'),
);
];
// We need tu save those values. So we add our own custom submit handler.
$form['#submit'][] = 'zendesk_admin_zendesk_users_submit';
}
......@@ -35,10 +32,10 @@ function zendesk_users_form_zendesk_admin_form_alter(array &$form, FormStateInte
/**
* Submit callback.
*
* @see zendesk_sso_form_zendesk_admin_form_alter().
* @see zendesk_sso_form_zendesk_admin_form_alter()
*
* @param array $form
* @param FormStateInterface $form_state
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function zendesk_admin_zendesk_users_submit(array &$form, FormStateInterface $form_state) {
\Drupal::config('zendesk.settings')
......@@ -61,18 +58,18 @@ function zendesk_user_insert(AccountInterface $account) {
function zendesk_users_user_update(AccountInterface $account) {
if (Drupal::config('zendesk.settings')->get('zendesk_api_sync_users') && zendesk_user_has_access($account)) {
if ($user_id = _zendesk_users_get_user($account->id())) {
$data = array(
$data = [
'id' => $user_id,
'name' => $account->getUsername(),
'name' => $account->getDisplayName(),
'email' => $account->getEmail(),
'role' => 'end-user',
);
];
// Invoke a alter call to allow other modules to pass data to ZenDesk.
\Drupal::moduleHandler()
->alter(array('zendesk_user', 'zendesk_user_update'), $data, $account);
->alter(['zendesk_user', 'zendesk_user_update'], $data, $account);
// Make the call
// Make the call.
$client = zendesk_initialize_library();
$client->users()->update($data);
}
......@@ -85,15 +82,14 @@ function zendesk_users_user_update(AccountInterface $account) {
function zendesk_users_user_delete(AccountInterface $account) {
if (Drupal::config('zendesk.settings')->get('zendesk_api_sync_users')) {
if ($user_id = _zendesk_users_get_user($account->id())) {
$data = array(
$data = [
'id' => $user_id,
'name' => $account->getUsername(),
'name' => $account->getDisplayName(),
'email' => $account->getEmail(),
'suspended' => TRUE,
);
];
// Alter call to omitted since we are destroying the User object.
// Make the call
// Make the call.
$client = zendesk_initialize_library();
$client->users()->delete($data);
}
......@@ -111,20 +107,20 @@ function zendesk_users_user_delete(AccountInterface $account) {
*/
function zendesk_users_create_user(AccountInterface $account) {
$client = zendesk_initialize_library();
$data = array(
'name' => $account->getUsername(),
$data = [
'name' => $account->getDisplayName(),
'email' => $account->getEmail(),
'role' => 'end-user',
);
];
if (\Drupal::config('zendesk.settings')->get('zendesk_authed_user')) {
$data['user']['verified'] = TRUE;
}
// Invoke a alter call to allow other modules to pass data to ZenDesk.
\Drupal::moduleHandler()
->alter(array('zendesk_user', 'zendesk_user_update'), $data, $account);
->alter(['zendesk_user', 'zendesk_user_update'], $data, $account);
// Make the call
// Make the call.
$result = $client->users()->create($data);
if (!empty($result->error)) {
......@@ -139,10 +135,10 @@ function zendesk_users_create_user(AccountInterface $account) {
}
else {
db_insert('zendesk_users')
->fields(array(
->fields([
'uid' => $account->id(),
'zid' => $result->user->id,
))
])
->execute();
return $result->user->id;
......@@ -155,7 +151,7 @@ function zendesk_users_create_user(AccountInterface $account) {
* If a user already exist on zendesk's side but not our the drupal side, add
* it in our database.
*
* @param AccountInterface $account
* @param \Drupal\Core\Session\AccountInterface $account
* An object containing the user account.
*
* @return mixed
......@@ -167,10 +163,10 @@ function zendesk_users_sync_user_back(AccountInterface $account) {
$result = $client->users()->search($account->getEmail());
if (isset($result->users[0]->id)) {
db_insert('zendesk_users')
->fields(array(
->fields([
'uid' => $account->id(),
'zid' => $result->users[0]->id,
))
])
->execute();
return $result->users[0]->id;
......@@ -185,7 +181,7 @@ function zendesk_users_sync_user_back(AccountInterface $account) {
*/
function _zendesk_users_get_user($uid) {
$result = db_select('zendesk_users', 'zu')
->fields('zu', array('uid', 'zid'))
->fields('zu', ['uid', 'zid'])
->condition('zu.uid', $uid, '=')
->execute();
if ($result->rowCount() <> 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment