<?php
/**
@brief Xoops グローバルサーチのための検索コールバック関数の定義
@author minahito
@varsion $Id:$
*/

require_once XOOPS_ROOT_PATH."/modules/exFrame/frameloader.php";
require_once "xoops/search.php";

function bxParty_search ($queryarray, $andor, $limit, $offset, $userid) {
	$service = new bxPartyXoopsSearchService($queryarray,$andor,$limit,$offset,$userid);
	return $service->doService();
}

class bxPartyXoopsSearchService extends SimpleXoopsSearchService {
	var $filter_class_ = "bxPartySearchFilter";	///< フィルタのクラス名

	function startup() {
		// 検索対象テーブル名は bxparty です
		$this->setTable("bxparty");

		// title,time,uid にそれぞれ title, input_date, uid のフィールドを割り当てます
		$this->info_->setFields("title","input_date","uid");

		// 渡された文字列は、 title フィールド headline フィールド ex フィールドの検索に用います
		$this->info_->addQueryField("title");
		$this->info_->addQueryField("headline");
		$this->info_->addQueryField("ex");

		// 渡された uid は uid フィールドの検索に用います
		$this->info_->setUidField("uid");

		// ほか id を取得してください
		$this->info_->addExtra("id");

		// 新しく入力されたものから取得します
		$this->info_->setSort("input_date");
		$this->info_->setOrder("DESC");
	}
	
	function getResultArray(&$row) {
		// 追加で取得して貰ったフィールド id を使ってリンク URL を作成します
		$row['link']="detail.php?id=".$row['id'];
		return $row;
	}
}

/**
@brief bxParty の検索用のフィルタ
プライベートに設定された宴会は、管理者と所有者以外には検索に引っかからないよう条件を追加する
*/
class bxPartySearchFilter extends XoopsSearchFilter {
	function getDefaultCriteria(&$info) {
		global $xoopsUser;
		$criteria = parent::getDefaultCriteria($info);

		if(is_object($xoopsUser)) {
			if($xoopsUser->isAdmin()) {
				// 管理者はすべて見えるので、条件を追加せずに return する
				return $criteria;
			}
			else {
				// プライベートな宴会は見えないよう条件を追加する
        		$criteria_prv = new CriteriaCompo();
        		$criteria_prv->add(new Criteria('private',0));

				// しかし自分が uid の宴会は見えて構わない
				$criteria_prv2 = new CriteriaCompo();
				$criteria_prv2->add(new Criteria('private',1));
				$criteria_prv2->add(new Criteria('uid',$xoopsUser->uid()));
				
				$criteria_prv->add($criteria_prv2,"OR");
			}
		}
		else {
			// プライベートな宴会は見えないよう条件を追加する
       		$criteria_prv = new CriteriaCompo();
       		$criteria_prv->add(new Criteria('private',0));
		}

		$criteria->add($criteria_prv);

		return $criteria;
	}
}

?>