mirror of
https://github.com/Mibew/mattermost-plugin.git
synced 2024-11-15 00:34:13 +03:00
160 lines
4.5 KiB
PHP
160 lines
4.5 KiB
PHP
<?php
|
|
/*
|
|
* This file is a part of Mibew Mattermost Plugin.
|
|
*
|
|
* Copyright 2021 the original author or authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
namespace Mibew\Mibew\Plugin\Mattermost;
|
|
|
|
use Mibew\EventDispatcher\EventDispatcher;
|
|
use Mibew\EventDispatcher\Events;
|
|
|
|
class Plugin extends \Mibew\Plugin\AbstractPlugin implements \Mibew\Plugin\PluginInterface
|
|
{
|
|
/**
|
|
* List of the plugin configs.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $config;
|
|
|
|
/**
|
|
* Indicates if the plugin was initialized correctly.
|
|
*
|
|
* @var boolean
|
|
*/
|
|
protected $initialized = false;
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @param array $config List of the plugin config. The following options are
|
|
* supported:
|
|
* - "username": string, name of the Mattermost user
|
|
* - "channel": string, name of the Mattermost channel to post notification into
|
|
* - "mattermost_url": string, URL of the webhook from Setup Instructions in Mattermost
|
|
* - "custom_text": string, custom text to append after default notification.
|
|
* The default value is empty.
|
|
*/
|
|
public function __construct($config)
|
|
{
|
|
$bad_config = !isset($config['username'])
|
|
|| !isset($config['channel'])
|
|
|| !isset($config['mattermost_url']);
|
|
|
|
if ($bad_config) {
|
|
// Config is invalid the plugin cannot be used. Nevertheless
|
|
// the system should work well without the plugin.
|
|
trigger_error(
|
|
'Mattermost plugin is not properly configured',
|
|
E_USER_WARNING
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
$this->initialized = true;
|
|
|
|
parent::__construct($config + array('custom_text' => ''));
|
|
}
|
|
|
|
/**
|
|
* This creates the listener that listens for new
|
|
* threads to send out mattermost notifications
|
|
*/
|
|
public function run()
|
|
{
|
|
$dispatcher = EventDispatcher::getInstance();
|
|
$dispatcher->attachListener(Events::THREAD_CREATE, $this, 'sendMattermostNotification');
|
|
}
|
|
|
|
/**
|
|
* Sends notification to Mattermost.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
public function sendMattermostNotification(&$args)
|
|
{
|
|
// Convert to json
|
|
$data = array(
|
|
'username' => $this->config['username'],
|
|
'channel' => strtolower($this->config['channel']),
|
|
'text' => getlocal('You have a new user {0} waiting for response.', array($args['thread']->userName))
|
|
. ( ($this->config['custom_text'] != '') ? ' ' . $this->config['custom_text'] : '' )
|
|
);
|
|
$json = json_encode($data);
|
|
|
|
// Do the request
|
|
$curl = curl_init($this->config['mattermost_url']);
|
|
curl_setopt($curl, CURLOPT_HEADER, false);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
|
|
curl_setopt($curl, CURLOPT_POST, true);
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
|
|
|
|
$json_response = curl_exec($curl);
|
|
|
|
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
|
if ( $status != 201 ) {
|
|
trigger_error(
|
|
'Unable to send notification to Mattermost. Request failed with status ' . $status,
|
|
E_USER_WARNING
|
|
);
|
|
return false;
|
|
}
|
|
curl_close($curl);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Returns plugin's version.
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function getVersion()
|
|
{
|
|
return '1.1.0';
|
|
}
|
|
|
|
/**
|
|
* Returns plugin's dependencies.
|
|
*
|
|
* @return type
|
|
*/
|
|
public static function getDependencies()
|
|
{
|
|
return array();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public static function install()
|
|
{
|
|
// Initialize localization constants
|
|
$constants = array(
|
|
'You have a new user {0} waiting for response.'
|
|
);
|
|
|
|
foreach ($constants as $constant) {
|
|
getlocal($constant);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|