让uc接口支持按用户名删除用户

admin 发表于 [PHP] 分类,标签: PHP代码 同步登录 UCenter
0

由 Comsenz 开发的 UCenter 客户端 uc_client (一个包含接口程序的文件夹)  让我们可以在自己的项目中使用 uc_user_delete()  函数同步删除UCenter中的用户,但是该函数只能接受 按用户的UID来删除用户,不能按会员名来删除,实在是有点遗憾,下面我就通过自己修改其源代码来修补这个遗憾。

第一步:修改 uc_client/client.php 文件

把文件中的 uc_user_delete() 函数修改为:

function uc_user_delete($uid,$isusername=0) { #[ADMPUB]+ ,$isusername=0
	return call_user_func(UC_API_FUNC, 'user', 'delete', array('uid'=>$uid,'isusername'=>$isusername)); #[ADMPUB]+ ,'isusername'=>$isusername
}

第二步:修改 uc_client/control/user.php 文件

把文件中的 ondelete() 函数修改为:

	function ondelete() {
		$this->init_input();
		$uid = $this->input('uid');
        $isusername = $this->input('isusername'); #[ADMPUB]+
		return $_ENV['user']->delete_user($uid,$isusername); #[ADMPUB]+ ,$isusername
	}

第三步:修改 uc_client/model/user.php 文件

在文件中 delete_user() 函数内的代码:

$uidsarr = (array)$uidsarr;

后面添加:

        #[ADMPUB]---------------------------------\
        if($isusername) {
            $uidsarr = $this->name2id($uidsarr);
        }
        #[ADMPUB]---------------------------------/

同时,在 delete_user 函数中添加第二个传入参数 $isusername

添加后完整的 delete_user() 函数代码应该是这个样子的:

	function delete_user($uidsarr,$isusername) { #[ADMPUB]+ ,$isusername
		$uidsarr = (array)$uidsarr;
        #[ADMPUB]---------------------------------\
        if($isusername) {
            $uidsarr = $this->name2id($uidsarr);
        }
        #[ADMPUB]---------------------------------/
		if(!$uidsarr) {
			return 0;
		}
		$uids = $this->base->implode($uidsarr);
		$arr = $this->db->fetch_all("SELECT uid FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid IN ($uids)");
		$puids = array();
		foreach((array)$arr as $member) {
			$puids[] = $member['uid'];
		}
		$uids = $this->base->implode(array_diff($uidsarr, $puids));
		if($uids) {
			$this->db->query("DELETE FROM ".UC_DBTABLEPRE."members WHERE uid IN($uids)");
			$this->db->query("DELETE FROM ".UC_DBTABLEPRE."memberfields WHERE uid IN($uids)");
			uc_user_deleteavatar($uidsarr);
			$this->base->load('note');
			$_ENV['note']->add('deleteuser', "ids=$uids");
			return $this->db->affected_rows();
		} else {
			return 0;
		}
	}

通过以上修改后,在我们的项目中就可以使用 uc_user_delete('要删除的用户名或用户名数组',1) 来删除用户了。

发表我的评论