Files
DzzOffice/admin/setting/wxsyn.php
2022-11-02 23:21:46 +08:00

252 lines
9.8 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* @copyright Leyun internet Technology(Shanghai)Co.,Ltd
* @license http://www.dzzoffice.com/licenses/license.txt
* @package DzzOffice
* @link http://www.dzzoffice.com
* @author zyx(zyx@dzz.cc)
*/
if (!defined('IN_DZZ') || !defined('IN_ADMIN')) {
exit('Access Denied');
}
//error_reporting(E_ALL);
include_once libfile('function/organization');
$navtitle = lang('data_synchronization');
$do = $_GET['do'];
$op = $_GET['op']?$_GET['op']:' ';
if (submitcheck('synsubmit')) {
}
elseif ($do == 'qiwechat_syn_org') {
$i = intval($_GET['i']);
$wx = new qyWechat( array('appid' => $_G['setting']['CorpID'], 'appsecret' => $_G['setting']['CorpSecret'], 'agentid' => 0));
if ($i < 1) {
$data = array("id" => 1, "name" => $_G['setting']['sitename'], //部门名称
);
if (!$wx -> updateDepartment($data)) {
runlog('wxlog', lang('update_top_department_name').', errCode:' . $wx -> errCode . '; errMsg:' . $wx -> errMsg);
}
}
$wd = array();
if ($wxdepart = $wx -> getDepartment()) {
foreach ($wxdepart['department'] as $value) {
$wd[$value['id']] = $value;
}
} else {
exit(json_encode(array('error' => lang('setting_wxsyn_weixin') . $wx -> errCode . ':' . $wx -> errMsg . '</p>')));
}
if ($org = DB::fetch_first("select * from %t where type=0 and orgid>%d order by orgid ", array('organization', $i))) {//type=0排除群组
if ($org['forgid']) {
if (($forg = C::t('organization') -> fetch($org['forgid'])) && !$forg['worgid']) {
if ($worgid = C::t('organization') -> wx_update($forg['orgid'])) {
$forg['worgid'] = $worgid;
} else {
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . lang('setting_wxsyn_organization'))));
}
}
}
$parentid = ($org['forgid'] == 0 ? 1 : $forg['worgid']);
if ($org['worgid'] && $wd[$org['worgid']] && $parentid == $wd[$org['worgid']]['parentid']) {//更新机构信息
$data = array("id" => $org['worgid']);
if ($wd[$org['worgid']]['name'] != $org['orgname'])
$data['name'] = $org['orgname'];
if ($wd[$org['worgid']]['parentid'] != $parentid)
$data['parentid'] = $parentid;
if ($wd[$org['worgid']]['order'] != $org['order'])
$data['order'] = $org['order'];
if ($data)
$data['id'] = $org['worgid'];
if ($data) {
if (!$wx -> updateDepartment($data)) {
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . ' <span class="danger">' . $wx -> errCode . ':' . $wx -> errMsg . '</span>')));
}
}
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . ' <span class="success">'.lang('update_success').'</span>')));
} else {//创建机构信息
$data = array("name" => $org['orgname'], //部门名称
"parentid" => $org['forgid'] == 0 ? 1 : $forg['worgid'], //父部门id
"order" => $org['disp'] + 1, //(非必须)在父部门中的次序。从1开始数字越大排序越靠后
);
if ($ret = $wx -> createDepartment($data)) {
C::t('organization') -> update($org['orgid'], array('worgid' => $ret['id']));
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . ' <span class="success">'.lang('creation_success').'</span>')));
} else {
if ($wx -> errCode == '60008') {//部门的worgid不正确导致的问题
foreach ($wd as $value) {
if ($value['name'] == $data['name'] && $value['parentid'] = $data['parentid']) {
C::t('organization') -> update($org['orgid'], array('worgid' => $value['id']));
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . ' <span class="success">'.lang('update_success').'</span>')));
}
}
}
exit(json_encode(array('msg' => 'continue', 'start' => $org['orgid'], 'message' => $org['orgname'] . ' <span class="danger">' . $wx -> errCode . ':' . $wx -> errMsg . '</span>')));
}
}
} else {
exit(json_encode(array('msg' => 'success')));
}
}
elseif ($do == 'qiwechat_syn_user') {
$i = intval($_GET['i']);
$syngids = array();
if ($syngid = getglobal('setting/synorgid')) {//设置的需要同步的部门
$syngids = getOrgidTree($syngid);
}
$wx = new qyWechat( array('appid' => $_G['setting']['CorpID'], 'appsecret' => $_G['setting']['CorpSecret'], 'agentid' => 0));
if ($user = DB::fetch_first("select u.*,o.orgid from " . DB::table('user') . " u LEFT JOIN " . DB::table('organization_user') . " o ON o.uid=u.uid where u.uid>$i and o.orgid>0 order by uid")) {
$worgids = array();
if ($orgids = C::t('organization_user') -> fetch_orgids_by_uid($user['uid'])) {
if ($syngids) {
$orgids = array_intersect($orgids, $syngids);
}
if ($orgids) {
foreach (C::t('organization')->fetch_all($orgids) as $value) {
if( $value['type']>0 ){//群主类型不同步至微信
continue;
}
if ($value['worgid'])
$worgids[] = $value['worgid'];
else {
if ($worgid = C::t('organization') -> wx_update($value['orgid'])) {
$worgids[] = $worgid;
}
}
}
}
}
if( !$worgids ) $worgids=array(1);//默认同步到企业微信的跟部门下
if (!$worgids) {
$data = array("userid" => "dzz-" . $user['uid'], "enable" => 0, "department" => 1, );
if ($wx -> updateUser($data)) {
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . '<span class="info">'.lang('setting_wxsyn_synchronization1').'</span>')));
} else {
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . ' <span class="info">'.lang('setting_wxsyn_synchronization2').'</span>')));
}
}
$profile = C::t('user_profile') -> fetch_all($user['uid']);
$wxuser =array();
if( $user["wechat_userid"] ){
$wxuser = $wx->getUserInfo( $user["wechat_userid"] );
}
if ( $wxuser ) {//更新用户信息
$data = array(
"userid" => $user["wechat_userid"],
"name" => $user['username'],
//"position" => '',
"email" => $user['email'],
"enable" => $user['status'] ? 0 : 1
);
if (array_diff($wxuser['department'], $worgids)) {
$data['department'] = $worgids;
}
if ($user['phone'] && $user['phone'] != $wxuser['mobile']) {
$data['mobile'] = $user['phone'];
}
/*if ($user['weixinid'] && $wxuser['wechat_status'] == 4) {
$data['weixinid'] = $user['weixinid'];
}*/
if ($profile['telephone'] && $profile['telephone'] != $wxuser['telephone']) {
$data['telephone'] = $profile['telephone'];
}
if ($profile['gender'] && ($profile['gender'] - 1) != $wxuser['gender']) {
$data['gender'] = $profile['gender'] - 1;
}
if ($wx -> updateUser($data)) {
//$setarr = array('wechat_status' => $wxuser['status']);
//$setarr['weixinid'] = empty($wxuser['weixinid']) ? $user['weixinid'] : $wxuser['weixinid'];
$setarr['phone'] = empty($user['phone']) ? $wxuser['phone'] : $user['phone'];
//$setarr['wechat_userid'] = 'dzz-' . $user['uid'];
C::t('user') -> update($user['uid'], $setarr);
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . ' <span class="success">'.lang('update_success').'</span>')));
} else {
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . ' <span class="danger">' . $wx -> errCode . ':' . $wx -> errMsg . '</span>')));
}
} else {//创建用户信息
$data = array(
"userid" => 10000+ $user['uid'],//"dzz-" . $user['uid'],
"name" => $user['username'],
"department" => $worgids,
//"position" => '',
"email" => $user['email'],
//"weixinid" => $user['wechat'],
"enable" => $user['status'] ? 0 : 1
);
if ($user['phone']) {
$data['mobile'] = $user['phone'];
}
if ($profile['telephone']) {
$data['telephone'] = $profile['telephone'];
}
if ($profile['gender']) {
$data['gender'] = $profile['gender'] - 1;
}
//创建用户前查询企业微信端所有用户,判断是否微信账户重名 如email 或者 mobile相同视为同一用户 则更新信息
$userlist =$wx->getUserListall(1,1);
$wxuser=array();
if( $userlist["userlist"] ){
foreach($userlist["userlist"] as $k=>$v ){
if($v["email"] && $data["email"]==$v["email"] ){
$wxuser=$v;
break;
}
if($v["mobile"] && $data["mobile"]==$v["mobile"] ){
$wxuser=$v;
break;
}
}
}
if( $wxuser ){//判断是否已存在手机号或者邮箱,如果又则认定为是同一个账户,不需要重新创建
$data["userid"]=$wxuser["userid"];
$result = $wx->updateUser($data);
}else{//查询不到企业微信,重新创建 重新创建时判断是否重名,如果重名重新命名,直到不重名
if( $userlist["userlist"] ){
$nowuserid = $data["userid"];
$noneunion=true;
$i=1;
while( $noneunion ){//检查是否和企业微信断已有用户重名
$isunion=false;
foreach($userlist["userlist"] as $k=>$v ){
if($v["userid"] == $nowuserid ){
$isunion=true;
break;
}
}
if( $isunion ){
$nowuserid = $data["userid"]."_".$i;
}else{
$data['userid']=$nowuserid;
$noneunion=false;
}
$i++;
}
}
$result = $wx->createUser($data);
}
if ( $result ) {
C::t('user') -> update($user['uid'], array('wechat_userid' => 'dzz-' . $user['uid']));
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . ' <span class="success">'.lang('creation_success').'</span>')));
} else {
exit(json_encode(array('msg' => 'continue', 'start' => $user['uid'], 'message' => $user['username'] . ' <span class="danger">' . $wx -> errCode . ':' . $wx -> errMsg . '</span>')));
}
}
} else {
exit(json_encode(array('msg' => 'success')));
}
} else {
include template('wxsyn');
}
?>