OSDN Git Service

- fixed bug Ethna_Session#isAnonymous returns invalid result (thanks:longkey1)
[ethna/ethna.git] / class / Ethna_AppSearchObject.php
1 <?php
2 // vim: foldmethod=marker
3 /**
4  *  Ethna_AppSearchObject.php
5  *
6  *  @author     Masaki Fujimoto <fujimoto@php.net>
7  *  @license    http://www.opensource.org/licenses/bsd-license.php The BSD License
8  *  @package    Ethna
9  *  @version    $Id$
10  */
11
12 /** アプリケーションオブジェクト検索条件: != */
13 define('OBJECT_CONDITION_NE', 0);
14
15 /** アプリケーションオブジェクト検索条件: == */
16 define('OBJECT_CONDITION_EQ', 1);
17
18 /** アプリケーションオブジェクト検索条件: LIKE */
19 define('OBJECT_CONDITION_LIKE', 2);
20
21 /** アプリケーションオブジェクト検索条件: > */
22 define('OBJECT_CONDITION_GT', 3);
23
24 /** アプリケーションオブジェクト検索条件: < */
25 define('OBJECT_CONDITION_LT', 4);
26
27 /** アプリケーションオブジェクト検索条件: >= */
28 define('OBJECT_CONDITION_GE', 5);
29
30 /** アプリケーションオブジェクト検索条件: <= */
31 define('OBJECT_CONDITION_LE', 6);
32
33 /** アプリケーションオブジェクト検索条件: AND */
34 define('OBJECT_CONDITION_AND', 7);
35
36 /** アプリケーションオブジェクト検索条件: OR */
37 define('OBJECT_CONDITION_OR', 8);
38
39
40
41 // {{{ Ethna_AppSearchObject
42 /**
43  *  アプリケーションオブジェクト検索条件クラス
44  *
45  *  @author     Masaki Fujimoto <fujimoto@php.net>
46  *  @access     public
47  *  @package    Ethna
48  */
49 class Ethna_AppSearchObject
50 {
51     /**#@+
52      *  @access private
53      */
54
55     /** @var    string  検索値 */
56     var $value;
57
58     /** @var    int     検索条件 */
59     var $condition;
60
61     /**
62      *  @var    array   追加検索条件を保持したEthna_AppSearchObjectの一覧
63      */
64     var $object_list = array();
65
66     /**#@-*/
67
68
69     /**
70      *  Ethna_AppSearchObjectのコンストラクタ
71      *
72      *  @access public
73      *  @param  string  $value      検索値
74      *  @param  int     $condition  検索条件(OBJECT_CONDITION_NE,...)
75      */
76     function Ethna_AppSearchObject($value, $condition)
77     {
78         $this->value = $value;
79         $this->condition = $condition;
80     }
81
82     /**
83      *  検索条件をOR/ANDで追加する
84      *
85      *  @access public
86      *  @param  string                          $name           検索対象カラム名
87      *  @param  object  Ethna_AppSearchObject   $search_object  追加する検索条件
88      *  @param  int                             $condition      追加条件(OR/AND)
89      */
90     function addObject($name, $search_object, $condition)
91     {
92         $tmp = array();
93         $tmp['name'] = $name;
94         $tmp['object'] =& $search_object;
95         $tmp['condition'] = $condition;
96         $this->object_list[] = $tmp;
97     }
98
99     /**
100      *  指定されたフィールドが検索対象となっているかどうかを返す
101      *
102      *  @access public
103      */
104     function isTarget($field)
105     {
106         foreach ($this->object_list as $object) {
107             if ($object['name'] == $field) {
108                 return true;
109             }
110             if (is_object($object['object'])) {
111                 $r = $object['object']->isTarget($field);
112                 if ($r) {
113                     return true;
114                 }
115             }
116         }
117         return false;
118     }
119
120     /**
121      *  検索条件SQL文を返す
122      *
123      *  @access public
124      *  @param  string  検索対象カラム名
125      *  @return SQL文
126      */
127     function toString($column)
128     {
129         $condition = "(";
130         $tmp_value = $this->value;
131         Ethna_AppSQL::escapeSQL($tmp_value);
132         $condition .= Ethna_AppSQL::getCondition("$column", $tmp_value, $this->condition);
133
134         foreach ($this->object_list as $elt) {
135             if ($elt['condition'] == OBJECT_CONDITION_OR) {
136                 $condition .= " OR ";
137             } else {
138                 $condition .= " AND ";
139             }
140             $condition .= $elt['object']->toString($elt['name']);
141         }
142
143         return $condition . ")";
144     }
145 }
146 // }}}
147 ?>