⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 insenz.func.php

📁 Discuz_7.0.0 是一款社区程序源码!! 国内80 的站长使用此程序
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php

/*
	[Discuz!] (C)2001-2009 Comsenz Inc.
	This is NOT a freeware, use is subject to license terms

	$Id: insenz.func.php 17311 2008-12-12 09:43:53Z liuqiang $
*/

if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
        exit('Access Denied');
}

function insenz_checkfiles() {
	global $file;
	if(INSENZ_CHECKFILES) {
		$insenzfiles = array(
			'727ee8758b60a8d281f9d4a7e9778fbc' => './api/insenz.php',
			'b19e7fd23c85e4612674d144b20fb95c' => './include/insenz.func.php',
			'7a283729f138829bfd3eeae975338ed3' => './include/insenz_cron.func.php',
			'e1b1d72d90ef300dedac7c8c8f872fd8' => './include/xmlparser.class.php'
		);
		foreach($insenzfiles as $md5 => $file) {
			if(!file_exists($file) || $md5 != md5_file(DISCUZ_ROOT.$file)) {
				cpmsg('insenz_upload_failed', '', 'error');
			}
		}
	}
}

function checkusername($username) {
	$username = trim($username);
	if(strlen($username) < 4 || strlen($username) > 20) {
		insenz_alert('insenz_username_length_outof_range', 'username');
	} elseif(!preg_match("/^\w+$/i", $username)) {
		insenz_alert('insenz_username_length_out_of_ranger', 'username');
	}
	return $username;
}

function checkpassword($password, $password2) {
	if($password != $password2) {
		insenz_alert('insenz_password_twice_diffenrent', 'password2');
	} elseif(strlen($password) < 6 || strlen($password) > 20) {
		insenz_alert('insenz_password_length_outof_range', 'password');
	} elseif(!preg_match("/^[0-9a-z!#$%&()+\\-.\\[\\]\\/\\\\@?{}|:;]+$/i", $password)) {
		insenz_alert('insenz_password_include_special_character', 'password');
	}
        return $password;
}

function checkname($name) {
	$name = trim($name);
	if(strlen($name) < 4 || strlen($name) > 30) {
		insenz_alert('insenz_name_length_outof_range', 'name');
	} elseif(htmlspecialchars($name) != $name) {
		insenz_alert('insenz_name_illegal', 'name');
	}
	return $name;
}

function checkemail($email, $emailname) {
	$email = trim($email);
	if(strlen($email) < 7 || !preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email)) {
		insenz_alert('insenz_'.$emailname.'_illegal', $emailname);
	}
	return htmlspecialchars($email);
}

function checkidcard($idcard) {
	$idcard = htmlspecialchars(trim($idcard));

	if(strlen($idcard) == 18) {
		if(idcard_verify_number(substr($idcard, 0, 17)) == strtoupper($idcard{17})) {
			return $idcard;
		}
	}
	insenz_alert('insenz_idcard_illegal', 'idcard');
}

function checktel($tel1, $tel2, $tel3, $telname) {
	if(!preg_match("/^\d{2,4}$/", $tel1) || !preg_match("/^\d{5,10}$/", $tel2) || ($tel3 && !preg_match("/^\d{1,5}$/", $tel3))) {
		insenz_alert($telname.'insenz_illegal', $telname);
	}
	return $tel1.'-'.$tel2.'-'.$tel3;
}

function checkqq($qq) {
	if(!(preg_match("/^([0-9]+)$/", $qq) && strlen($qq) >= 5 && strlen($qq) <= 12)) {
		insenz_alert('insenz_qq_illegal', 'qq');
	}
	return $qq;
}

function checkmobile($mobile) {
	if(!preg_match("/^1(3|5)\d{9}$/", $mobile)) {
		insenz_alert('insenz_mobile_illegal', 'mobile');
	}
	return $mobile;
}

function checkcpc($country, $province, $city) {
	$country = intval($country);
	if($country < 10000 || $country > 70300) {
		insenz_alert('insenz_country_illegal', 'country');
	}
	$province = intval($province);
	if($country == 10000 && ($province < 10100 || $province > 13100)) {
		insenz_alert('insenz_province_illegal', 'province');
	}
	$city = intval($city);
	if($country == 10000 && ($city < 10101 || $city > 13107)) {
		insenz_alert('insenz_city_illegal', 'city');
	}
	return array($country, $province, $city);
}

function checkaddress($address) {
	$address = htmlspecialchars(trim($address));
	if(strlen($address) < 8) {
		insenz_alert('insenz_real_address_illegal', 'address');
	}
	return cutstr($address, 200);
}

function checkpostcode($postcode) {
	if(!preg_match("/^\d{6}$/", $postcode)) {
		insenz_alert('insenz_post_code_illegal', 'postcode');
	}
	return $postcode;
}

function idcard_verify_number($idcard_base) {
	$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
	$checksum = 0;
	for($i = 0; $i < strlen($idcard_base); $i++) {
		$checksum += substr($idcard_base, $i, 1) * $factor[$i];
	}
	$mod = $checksum % 11;
	$verify_number = $verify_number_list[$mod];
	return $verify_number;
}

function checkmasks($return = FALSE) {
	global $insenz, $db, $tablepre, $admins, $members, $noneexistusers, $member;

	if(!$admins = trim($admins)) {
		$return ? cpmsg('insenz_require_one_admin', '', 'error') : insenz_alert('insenz_require_one_admin', 'admins');
	} else {
		$admins = array_unique(explode("\n", str_replace(array("\r\n", "\r"), array("\n", "\n"), $admins)));
	}

	$admin_masks = $member_masks = array();
	$query = $db->query("SELECT uid, username, adminid FROM {$tablepre}members WHERE username IN ('".implode("','", $admins)."')");
	while($member = $db->fetch_array($query)) {
		if($member['adminid'] <= 0) {
			$return ? cpmsg('insenz_illegal_admin', '', 'error') : insenz_alert('insenz_illegal_admin', 'admins');
		}
		$admin_masks[$member['uid']] = addslashes($member['username']);
	}
	if($noneexistusers = array_diff($admins, $admin_masks)) {
		$noneexistusers = stripslashes(implode(', ', $noneexistusers));
		$return ? cpmsg('insenz_user_not_exists', '', 'error') : insenz_alert('insenz_user_not_exists', 'admins');
	}

	$members = array_unique(explode("\n", str_replace(array("\r\n", "\r"), array("\n", "\n"), trim($members))));
	if(count($members) < 2) {
		$return ? cpmsg('insenz_require_two_normal_poster', '', 'error') : insenz_alert('insenz_require_two_normal_poster', 'members');
	}

	$query = $db->query("SELECT uid, username, adminid FROM {$tablepre}members WHERE username IN ('".implode("','", $members)."')");
	while($member = $db->fetch_array($query)) {
		if($member['adminid'] > 0) {
			$return ? cpmsg('insenz_not_normal_user', '', 'error') : insenz_alert('insenz_not_normal_user', 'members');
		}
		$member_masks[$member['uid']] = addslashes($member['username']);
	}
	if($noneexistusers = array_diff($members, $member_masks)) {
		$noneexistusers = stripslashes(implode(', ', $noneexistusers));
		$return ? cpmsg('insenz_user_not_exists', '', 'error') : insenz_alert('insenz_user_not_exists', 'members');
	}

	$modified = $insenz['admin_masks'] != $admin_masks || $insenz['member_masks'] != $member_masks;

	if(INSENZ_SAFEMODE && $insenz['member_masks'] != $member_masks) {
		if(!empty($insenz['groupid'])) {
			$query = $db->query("SELECT COUNT(*) FROM {$tablepre}usergroups WHERE groupid='$insenz[groupid]'");
			if(!$db->result($query, 0)) {
				unset($insenz['groupid']);
			}
		}
		if(empty($insenz['groupid'])) {
			$query = $db->query("SELECT groupid, grouptitle FROM {$tablepre}usergroups WHERE type='member' ORDER BY creditslower DESC LIMIT 5");
			$groups = array();
			while($group = $db->fetch_array($query)) {
				$groups[$group['groupid']] = $group['grouptitle'];
			}
			$randgid = array_rand($groups);
			$grouptitle = $groups[$randgid] ? $groups[$randgid] : 'Member';
			$query = $db->query("SELECT * FROM {$tablepre}usergroups WHERE groupid='$randgid'");
			$fieldnums = mysql_num_fields($query);
			$group = $db->fetch_array($query);
			$fields = '';
			for($i = 0; $i < $fieldnums; $i++) {
				$field = mysql_field_name($query, $i);
				if(!in_array($field, array('groupid', 'type', 'grouptitle', 'allowpost', 'allowreply'))) {
					$fields .= ", $field='$group[$field]'";
				}
			}
			$db->query("INSERT INTO {$tablepre}usergroups SET type='special', grouptitle='$grouptitle', allowpost='1', allowreply='1' $fields");
			$insenz['groupid'] = $db->insert_id();
			require_once DISCUZ_ROOT.'./include/cache.func.php';
			updatecache('usergroups');
		}
		$db->query("UPDATE {$tablepre}members SET adminid=-1, groupid='$insenz[groupid]' WHERE uid IN (".implodeids(array_keys($member_masks)).")");
	}

	$insenz['admin_masks'] = array_keys($admin_masks);
	$insenz['member_masks'] = array_keys($member_masks);

	if($return) {
		return $modified;
	}

}

function checkip() {
	global $boardurl, $onlineip;

	if(INSENZ_CHECKIP) {
		$longip = ip2long($onlineip);
		if(substr($onlineip, 0, 1) == '0' || substr($onlineip, 0, 3) == '127' || isInRange($longip, 167772160, 184549375) || isInRange($longip, -1408237568, -1407188993) || isInRange($longip, -1062731776, -1062666241)) {
			cpmsg('insenz_intranet_not_allowed', '', 'error');
		}
	}

}

function isInRange($x, $min, $max) {
        return $x >= $min && $x <= $max;
}

function insenz_register($type) {
	global $insenz, $db, $tablepre, $_DCACHE, $boardurl, $timestamp, $authkey, $discuz_uid, $discuz_user, $response, $BASESCRIPT;

	checkip();
	if($type == 1) {
		@extract($insenz['profile']);
		foreach(array('username', 'password', 'name', 'idcard', 'email1', 'email2', 'qq', 'msn', 'tel1', 'tel2', 'tel3', 'mobile', 'fax1', 'fax2', 'fax3', 'country', 'province', 'city', 'address', 'postcode', 'alipay') as $item) {
			$$item = stripslashes($$item);
		}
	} else {
		$username = $insenz['profile']['username'];
		$password = $insenz['profile']['password'];
	}

	$insenz['notify'] = is_array($insenz['notify']) ? $insenz['notify'] : array(2);
	$insenz['hardadstatus'] = is_array($insenz['hardadstatus']) ? $insenz['hardadstatus'] : array(1, 2, 3, 4, 5);

	$query = $db->query("SELECT COUNT(*) FROM {$tablepre}members");
	$members = $db->result($query, 0);
	$query = $db->query("SELECT COUNT(*) FROM {$tablepre}members WHERE posts>0");
	$post_members = $db->result($query, 0);
	$query = $db->query("SELECT COUNT(*) FROM {$tablepre}threads WHERE displayorder>='0'");
	$threads = $db->result($query, 0);
	$query = $db->query("SELECT COUNT(*) FROM {$tablepre}posts WHERE invisible='0'");
	$posts = $db->result($query, 0);

	$date = getdate($timestamp);
	$yesterday_end = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
	$lastweek_start = $yesterday_end - 7*86400;

	$lastweek_pertopics = $lastweek_perposts = $forumstats = array();

	$query = $db->query("SELECT DISTINCT(fid) AS fid, COUNT(tid) AS topics FROM {$tablepre}threads WHERE dateline BETWEEN $lastweek_start AND $yesterday_end GROUP BY fid ORDER BY topics DESC");
	while($p = $db->fetch_array($query)) {
		$lastweek_pertopics[$p['fid']] = ceil($p['topics'] / 7);
	}

	$query = $db->query("SELECT DISTINCT(fid) AS fid, COUNT(pid) AS posts FROM {$tablepre}posts WHERE dateline BETWEEN $lastweek_start AND $yesterday_end GROUP BY fid ORDER BY posts DESC");
	while($p = $db->fetch_array($query)) {
		$lastweek_perposts[$p['fid']] = ceil($p['posts'] / 7);
	}

	$query = $db->query("SELECT f.fid, f.fup, f.type, f.name, f.threads, f.posts, f.displayorder, f.status, f.simple, ff.description, ff.redirect FROM {$tablepre}forums f LEFT JOIN {$tablepre}forumfields ff ON f.fid=ff.fid");
	while($forum = $db->fetch_array($query)) {
		$fid = $forum['fid'];
		unset($forum['fid']);
		$forum['lastweek_pertopics'] = intval($lastweek_pertopics[$fid]);
		$forum['lastweek_perposts'] = intval($lastweek_perposts[$fid]);
		$forumstats[$fid] = $forum;
	}

	$postdata = '<cmd id="register"><handle>'.insenz_convert($username).'</handle>
		<passwd>'.$password.'</passwd>';

	if($type == 1) {
		$postdata .= '<name>'.insenz_convert($name).'</name>
			<idcard>'.$idcard.'</idcard>
			<tel>'.$tel1.'-'.$tel2.'-'.$tel3.'</tel>
			<mobile>'.$mobile.'</mobile>
			<fax>'.$fax1.'-'.$fax2.'-'.$fax3.'</fax>
			<email>'.$email1.'</email>
			<email2>'.$email2.'</email2>
			<qq>'.$qq.'</qq>
			<msn>'.$msn.'</msn>
			<alipay>'.$alipay.'</alipay>
			<country>'.$country.'</country>
			<province>'.$province.'</province>
			<city>'.$city.'</city>
			<addr>'.insenz_convert($address).'</addr>
			<postcode>'.$postcode.'</postcode>';
	}

	$postdata .= '<url>'.$boardurl.'</url>
		<s_key>'.md5($authkey.'Discuz!INSENZ').'</s_key>
		<bbname>'.insenz_convert($_DCACHE['settings']['bbname']).'</bbname>
		<members>'.$members.'</members>
		<post_members>'.$post_members.'</post_members>
		<topics>'.$threads.'</topics>
		<posts>'.$posts.'</posts>
		<softadstatus>'.intval($insenz['softadstatus']).'</softadstatus>
		<notify>'.implode(',', $insenz['notify']).'</notify>
		<autoextend>'.intval($insenz['autoextend']).'</autoextend>
		<hardadstatus>'.implode(',', $insenz['hardadstatus']).'</hardadstatus>
		<relatedadstatus>'.intval($insenz['relatedadstatus']).'</relatedadstatus>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -