<?
require_once('include/global.php');
require_once("include/mail_lib.php");
require_once('include/pager.php');
require_once('include/addr_lib.php');
require_once('include/member_group_lib.php');
require_once('conf.inc.php');

	// debug only
		#if (!$_POST['type']) $_POST['type'] = $_GET['type'];		 if (!$_POST['g_no']) $_POST['g_no'] = $_GET['g_no'];		 if (!$_POST['q']) $_POST['q'] = $_GET['q'];		 #echo '<xmp>';

	// search
		$q_where = '';
		if ($_POST['q'] != '' && strlen($_POST['q']) <= 50)
		{
			if (strtoupper($G_SYS[CHARSET]) != 'UTF-8')
				$_POST['q'] = iconv_fix('UTF-8', $_POST['q'], $G_SYS[CHARSET]);
			set_q_search($_POST['q']);
			to_db_str(&$_POST['q'], false, false);
			$_POST['q'] = strtolower($_POST['q']);
		} else
		{
			$_POST['q'] = '';
		}	// if()

	// db - select
		$DEBUG['db_select']['start'] = getmicrotime();

		$addr = array();

		switch ($_POST['type'])
		{
			case 'G':		// 조직도

				if ($G['DINFO']['d_mbrgrp_isuse'] == 'N')
				{
					echo '(조직도 사용 제한, 관리자에게 문의)';
					exit;					
				}	// if()

				if (member_group_deny_check())
				{
					echo "(조직도 사용 제한 [".$AUTH['auth_mg_name']."], 관리자에게 문의)";
					exit;					
				}	// if()

				// [2008-08-11] 편지쓰기시 조직도에서 최상위 그룹을 선택했을 때 전체 리스트가 나오지 않도록 제한함.
				if (!($G_SYS['MBR_GRP_ALL_LIST_HIDDEN'] && !$_POST['g_no'] && $_POST['q'] == ''))
				{
					// search
						// [2011-07-08] 가입대기, 탈퇴회원은 조직이 할당되어 있더라도 제외시킴.
						$q_where = " AND m.m_usertype IS NULL AND m.m_level > '" . $G[LEVEL][wait] . "' ";

						if ($_POST['g_no'])
						{
							require_once('include/member_group_lib.php');
							$cg = new NmailMemberGroup;

							// [2008-08-13] 조직도 - 특정 조직만 조직도에서 제외하고, 사용을 제한하기(기본그룹으로만 제한함).
							$q_where_cg = '';
							if (is_array($G_SYS['MBR_GRP_DENY_MG_NO']) && sizeof($G_SYS['MBR_GRP_DENY_MG_NO']) > 0)
								$q_where_cg = " AND mg_no NOT IN (".implode($G_SYS['MBR_GRP_DENY_MG_NO'], ',').") ";

							// [2011-12-09] 하위 조직까지 모두 보여주도록 수정.
							$q = "SELECT mg_depth FROM ".$TB['MEMBER_GROUP']." WHERE d_no='" . $AUTH['auth_d_no'] . "' AND mg_no='" . $_POST['g_no'] . "'";
							$s_mg_no_depth = db_get_one($q);

							$cg_data = $cg->getRowsByParent($_POST['g_no'], 255, $s_mg_no_depth+1, "AND d_no='".$AUTH['auth_d_no']."'".$q_where_cg);
							$cg_data['mg_no'][] = $_POST['g_no'];

							$q_where .= " AND mgr.mg_no IN (".implode(',', $cg_data['mg_no']).") ";
						} else 
						{
							// [2008-08-13] 조직도 - 특정 조직만 조직도에서 제외하고, 사용을 제한하기(기본그룹으로만 제한함).
							if (is_array($G_SYS['MBR_GRP_DENY_MG_NO']) && sizeof($G_SYS['MBR_GRP_DENY_MG_NO']) > 0)
								$q_where = " AND mgr.mg_no NOT IN (".implode($G_SYS['MBR_GRP_DENY_MG_NO'], ',').") ";
						}	// if()

						if ($_POST['q'] != '')
						{
							$q_m_id = '';
							if (strpos($_POST['q'], '@') !== false)
							{
								$_ex = explode('@', $_POST['q']);
								if ($_ex[1] == '')
								{
									$q_m_id = $_ex[0];
								} else if (strpos($G['DINFO']['d_name'], $_ex[1]) === 0)		// 다른 도메인일때는 회원테이블에서 검색할 필요없음.
								{
									$q_m_id = $_ex[0];
								}	// if()
								$q_m_id_like = " m.m_id = '" . $q_m_id . "' ";
							} else
							{
								$q_m_id = $_POST['q'];
								$q_m_id_like = " m.m_id LIKE '" . $q_m_id . "%' ";
							}	// if()

							$q_where .= " AND ( ".$q_m_id_like." OR m.m_name LIKE '%" . $_POST['q'] . "%' ) ";
						}	// if()


						// [2011-08-25] 회원직위
						if (is_numeric($_POST['s_mc_no']))
						{
							set_q_search($_POST['s_mc_no']);
							$q_where .= " AND m.mc_no = '" . $_POST['s_mc_no'] . "' ";
						}	// if()


					// 회원 목록
						if ($G_SYS[DB] == 'oracle')
						{
							$q = "
								SELECT *
								FROM (
									SELECT
										m_id, m_name, mc_name
										, ROW_NUMBER() OVER(PARTITION BY m.m_no ORDER BY m.m_no) rn
									FROM
										".$TB['MEMBER']." m,
										".$TB['MEMBER_CLASS']." mc,
										".$TB['MEMBER_GROUP_REL']." mgr
									WHERE
										m.d_no='" . $G['DINFO']['d_no'] . "'
										".$q_where."
										AND m.mc_no=mc.mc_no(+)
										AND m.m_no=mgr.m_no
									ORDER BY
										mc.d_no DESC, mc.mc_sort, m.m_name
								)
								 WHERE rn = 1
								";
						} else
						{
							// 직위, 이름 순서
							$q = "
								SELECT
									DISTINCT m_id, m_name, mc_name
								FROM
									".$TB['MEMBER']." m LEFT JOIN
									".$TB['MEMBER_CLASS']." mc ON (m.mc_no=mc.mc_no),
									".$TB['MEMBER_GROUP_REL']." mgr
								WHERE
									m.d_no='" . $G['DINFO']['d_no'] . "'
									AND m.m_no=mgr.m_no
									".$q_where."
								ORDER BY
									mc.d_no DESC, mc.mc_sort, m.m_name
								";
						}	// if()
						#header("HTTP/1.1 500"); echo $q;
						$rows = db_get_rows($q);

					// view
						// 이름 직위 <메일주소>
						for ($i=0; $i<sizeof($rows); $i++)
						{
							$_eml = $rows[$i]['m_id'].'@'.$G['DINFO']['d_name'];
							if ($rows[$i]['mc_name'] != '')
							{
								//$addr[] = '"'.htmlspecialchars_fix($rows[$i]['m_name'].' '.$rows[$i]['mc_name']).'" <'.$_eml.'>';
								$addr[] = '"'.htmlspecialchars_fix($rows[$i]['m_name']).'" <'.$_eml.'>';
							} else
							{
								$addr[] = '"'.htmlspecialchars_fix($rows[$i]['m_name']).'" <'.$_eml.'>';
							}	// if()
						}	// for()
				
				}	// if()

				break;

			case 'P':		// 개인주소록
			case 'S':		// 공용주소록
				// [2008-08-11] 편지쓰기시 주소록에서 최상위 그룹을 선택했을 때 전체 리스트가 나오지 않도록 제한함.
				if (!($G_SYS['ADDR_ALL_LIST_HIDDEN'] && !$_POST['g_no'] && $_POST['q'] == ''))
				{
					if ($_POST['type'] == 'S')
					{
						$_GET['share'] = 1;

						if ($G['DINFO']['d_shareaddr_isuse'] == 'N')
						{
							echo '(공용주소록 사용 제한, 관리자에게 문의)';
							exit;					
						}	// if()
					} else 
					{
						$_GET['share'] = 0;		
					}	// if()
					$_GET['s_adg_no'] = $_POST['g_no'];

					// [2006-07-11] 공용주소록 구분
					set_addr_no_isshare($_GET['s_adg_no'], $_GET['share']);

					// search
						$q_where = '';
						if ($_POST['q'] != '')
						{
							$q_where .= " AND ( ad.ad_name LIKE '%" . $_POST['q'] . "%' OR ad.ad_email LIKE '%" . $_POST['q'] . "%' OR ad.ad_mobile LIKE '%" . $_POST['q'] . "%' OR ad.ad_office LIKE '%" . $_POST['q'] . "%' ) ";
						}	// if()
						if ($_GET['s_adg_no'])
						{
							limit_adg_no($_GET['s_adg_no']);
							//$q_where .= " AND adg.adg_no = '" . $_GET['s_adg_no'] . "' ";

							// [2012-10-15] 주소록 그룹 트리 지원
							$cg = get_addr_group_tree_class();

							// 하위 그룹까지 모두 보여줌.
							$row = $cg->getRowByKey($_GET['s_adg_no']);

							$cg_data = $cg->getRowsByParent($_GET['s_adg_no'], 255, $row['adg_depth']+1, "AND " . get_addr_group_where());
							$cg_data['adg_no'][] = $_GET['s_adg_no'];

							$q_where .= " AND adg.adg_no IN (".implode(',', $cg_data['adg_no']).") ";
						}	// if()

					// db - select
						$sql = "
							SELECT
								ad.ad_name, ad.ad_email
							FROM
								" . $TB['ADDR_GROUP'] . " adg,
								" . $TB['ADDR'] . " ad
							WHERE
								adg." . get_addr_group_where() . "
								AND adg.adg_no=ad.adg_no
								" . $q_where . "
							ORDER BY
								ad.ad_name
							";
						$rows = db_get_rows($sql);

					// view
						// 이름 <메일주소>
						for ($i=0; $i<sizeof($rows); $i++)
						{
							$addr[] = '"'.htmlspecialchars_fix($rows[$i]['ad_name']).'" <'.$rows[$i]['ad_email'].'>';
						}	// for()
					
				}	// if()
				break;
		}	// switch()

		$DEBUG['db_select']['exec'] += getmicrotime() - $DEBUG['db_select']['start'];

	// process data
		$DEBUG['db_fetch_all']['start'] = getmicrotime();
		for ($i=0; $i<sizeof($addr); $i++)
		{
			echo $addr[$i];
			if ($i+1 != $rows_cnt)
				echo "|!|";
		}	// for()
		$DEBUG['db_fetch_all']['exec'] += getmicrotime() - $DEBUG['db_fetch_all']['start'];


//require_once('include/global_end.php');
?>