93 lines
3.5 KiB
PHP
93 lines
3.5 KiB
PHP
<?php
|
||
declare(strict_types=1);
|
||
/**
|
||
* The zen file of webhook module of ZenTaoPMS.
|
||
*
|
||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||
* @author Sun Guangming<sunguangming@easysoft.ltd>
|
||
* @package webhook
|
||
* @link https://www.zentao.net
|
||
*/
|
||
class webhookZen extends webhook
|
||
{
|
||
/**
|
||
* 通过API获取人员列表。
|
||
* Get users by API.
|
||
*
|
||
* @param object $webhook
|
||
* @access public
|
||
* @return array
|
||
*/
|
||
protected function getResponse(object $webhook): array
|
||
{
|
||
$response = array();
|
||
$selectedDepts = $this->cookie->selectedDepts ? $this->cookie->selectedDepts : '';
|
||
if($webhook->type == 'dinguser')
|
||
{
|
||
$this->app->loadClass('dingapi', true);
|
||
$dingapi = new dingapi($webhook->secret->appKey, $webhook->secret->appSecret, $webhook->secret->agentId);
|
||
$response = $dingapi->getUsers($selectedDepts);
|
||
}
|
||
elseif($webhook->type == 'wechatuser')
|
||
{
|
||
$this->app->loadClass('wechatapi', true);
|
||
$wechatApi = new wechatapi($webhook->secret->appKey, $webhook->secret->appSecret, $webhook->secret->agentId);
|
||
$response = $wechatApi->getAllUsers();
|
||
}
|
||
elseif($webhook->type == 'feishuuser')
|
||
{
|
||
$this->app->loadClass('feishuapi', true);
|
||
$feishuApi = new feishuapi($webhook->secret->appId, $webhook->secret->appSecret);
|
||
$response = $feishuApi->getAllUsers($selectedDepts);
|
||
}
|
||
|
||
$this->view->selectedDepts = $selectedDepts;
|
||
return $response;
|
||
}
|
||
|
||
/**
|
||
* 获取已绑定的open_id键值对,并追加未查询出的open_id。
|
||
* Get bound open_id and name pairs, and append no fetch oauth users.
|
||
*
|
||
* @param object $webhook
|
||
* @param array $users
|
||
* @param array $boundUsers
|
||
* @param array $oauthUsers
|
||
* @access public
|
||
* @return array
|
||
*/
|
||
public function getBoundUseridPairs(object $webhook, array $users, array $boundUsers, array $oauthUsers): array
|
||
{
|
||
$boundUseridPairs = array();
|
||
$useridPairs = array_flip($oauthUsers);
|
||
$noFetchOauth = array();
|
||
foreach($users as $user)
|
||
{
|
||
if(isset($boundUsers[$user->account])) $userid = $boundUsers[$user->account];
|
||
if(isset($oauthUsers[$user->realname])) $userid = $oauthUsers[$user->realname];
|
||
if(!isset($userid)) continue;
|
||
if(!isset($useridPairs[$userid])) $noFetchOauth[$userid] = $userid;
|
||
$boundUseridPairs[$userid] = zget($useridPairs, $userid);
|
||
}
|
||
|
||
if($noFetchOauth)
|
||
{
|
||
if($webhook->type == 'dinguser')
|
||
{
|
||
$this->app->loadClass('dingapi', true);
|
||
$dingapi = new dingapi($webhook->secret->appKey, $webhook->secret->appSecret, $webhook->secret->agentId);
|
||
foreach($dingapi->batchGetUsers($noFetchOauth) as $userid => $name) $boundUseridPairs[$userid] = $name;
|
||
}
|
||
elseif($webhook->type == 'feishuuser')
|
||
{
|
||
$this->app->loadClass('feishuapi', true);
|
||
$feishuApi = new feishuapi($webhook->secret->appId, $webhook->secret->appSecret);
|
||
foreach($feishuApi->batchGetUsers($noFetchOauth) as $openid => $name) $boundUseridPairs[$openid] = $name;
|
||
}
|
||
}
|
||
|
||
return $boundUseridPairs;
|
||
}
|
||
}
|