root/trunk/midgard/apis/php5/php_midgard_reflection_property.c

Revision 13806, 6.2 kB (checked in by piotras, 1 year ago)

Added replicator bindings.
Added midgard_connection_set(get)_lang

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 /* Copyright (C) 2006,2007 Piotr Pokora <piotrek.pokora@gmail.com>
2  *
3  * This program is free software; you can redistribute it and/or modify it
4  * under the terms of the GNU Lesser General Public License as published
5  * by the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16  */
17
18 #include "php_midgard.h"
19 #include "php_midgard_gobject.h"
20
21 static zend_class_entry *php_midgard_reflection_property_class;
22
23 #define _NOSCHEMA_CLASS_ERR \
24         { php_error(E_WARNING,"%s method can not be called."\
25                         "midgard_reflection_property initialized with non schema class", \
26                         get_active_function_name(TSRMLS_C));\
27         RETURN_FALSE; }
28
29 /* Object constructor */
30 static PHP_METHOD(midgard_reflection_property, __construct)
31 {
32         RETVAL_FALSE;
33         CHECK_MGD;
34         gchar *classname = NULL;
35         guint classname_length;
36         zend_class_entry *ce;   
37         zval *zval_object = getThis();
38
39         if (zend_parse_parameters(1 TSRMLS_CC, "s",
40                                 &classname, &classname_length) == FAILURE)
41                 return;
42
43         ce = php_midgard_get_baseclass_ptr_by_name((const gchar *)classname);
44
45         MidgardObjectClass *klass =
46                 MIDGARD_OBJECT_GET_CLASS_BY_NAME(ce->name);
47        
48         if(!klass){
49                
50                 php_error(E_WARNING,
51                                 "%s is not registered Midgard schema class", ce->name);
52                 return;
53         }       
54
55         MidgardReflectionProperty *mrp =
56                 midgard_reflection_property_new(MIDGARD_DBOBJECT_CLASS(klass));
57
58         if(!mrp)
59                 return;
60
61         php_midgard_gobject *php_gobject =
62                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
63        
64         php_gobject->gobject = G_OBJECT(mrp);
65 }
66
67 static PHP_METHOD(midgard_reflection_property, get_midgard_type)
68 {
69         gchar *property_name;
70         guint property_name_length;
71         RETVAL_FALSE;
72         CHECK_MGD;
73         zval *zval_object = getThis();
74        
75         if (zend_parse_parameters(1 TSRMLS_CC, "s",
76                                 &property_name, &property_name_length) == FAILURE)
77                 return;
78
79         php_midgard_gobject *php_gobject =
80                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
81
82         MidgardReflectionProperty *mrp =
83                 MIDGARD_REFLECTION_PROPERTY(php_gobject->gobject);
84        
85         if(!mrp)
86                 _NOSCHEMA_CLASS_ERR;
87
88         RETURN_LONG(midgard_reflection_property_get_midgard_type(
89                                 mrp, property_name));                           
90 }
91
92 static PHP_METHOD(midgard_reflection_property, is_link)
93 {
94         gchar *property_name;
95         guint property_name_length;
96         RETVAL_FALSE;
97         CHECK_MGD;
98         zval *zval_object = getThis();
99        
100         if (zend_parse_parameters(1 TSRMLS_CC, "s",
101                                 &property_name, &property_name_length) == FAILURE)
102                 return;
103
104         php_midgard_gobject *php_gobject =
105                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
106        
107         MidgardReflectionProperty *mrp =
108                 MIDGARD_REFLECTION_PROPERTY(php_gobject->gobject);
109        
110         if(!mrp)
111                 _NOSCHEMA_CLASS_ERR;
112
113         RETURN_BOOL(midgard_reflection_property_is_link(
114                                 mrp, property_name));
115 }
116
117 static PHP_METHOD(midgard_reflection_property, get_link_name)
118 {
119         gchar *property_name;
120         guint property_name_length;
121         RETVAL_FALSE;
122         CHECK_MGD;
123         zval *zval_object = getThis();
124        
125         if (zend_parse_parameters(1 TSRMLS_CC, "s",
126                                 &property_name, &property_name_length) == FAILURE)
127                 return;
128        
129         php_midgard_gobject *php_gobject =
130                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
131        
132         MidgardReflectionProperty *mrp =
133                 MIDGARD_REFLECTION_PROPERTY(php_gobject->gobject);
134        
135         if(!mrp)
136                 _NOSCHEMA_CLASS_ERR;
137        
138         const gchar *linkname =
139                 midgard_reflection_property_get_link_name(
140                                 mrp, property_name);
141         if(linkname)
142                 RETURN_STRING((gchar *)linkname, 1);
143
144         RETURN_NULL();                                         
145 }
146
147 static PHP_METHOD(midgard_reflection_property, description)
148 {
149         gchar *property_name;
150         guint property_name_length;
151         RETVAL_FALSE;
152         CHECK_MGD;
153         zval *zval_object = getThis();
154        
155         if (zend_parse_parameters(1 TSRMLS_CC, "s",
156                                 &property_name, &property_name_length) == FAILURE)
157                 return;
158
159         php_midgard_gobject *php_gobject =
160                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
161        
162         MidgardReflectionProperty *mrp =
163                 MIDGARD_REFLECTION_PROPERTY(php_gobject->gobject);
164        
165         if(!mrp)
166                 _NOSCHEMA_CLASS_ERR;
167
168         const gchar *description =
169                 midgard_reflection_property_description(
170                                 mrp, property_name);
171         if(description)
172                 RETURN_STRING((gchar *)description, 1);
173        
174         RETURN_NULL();
175 }
176
177 static PHP_METHOD(midgard_reflection_property, is_multilang)
178 {
179         gchar *property_name;
180         guint property_name_length;
181         RETVAL_FALSE;
182         CHECK_MGD;
183         zval *zval_object = getThis();
184        
185         if (zend_parse_parameters(1 TSRMLS_CC, "s",
186                                 &property_name, &property_name_length) == FAILURE)
187                 return;
188        
189         php_midgard_gobject *php_gobject =
190                 (php_midgard_gobject *)zend_object_store_get_object(zval_object TSRMLS_CC);
191        
192         MidgardReflectionProperty *mrp =
193                 MIDGARD_REFLECTION_PROPERTY(php_gobject->gobject);
194        
195         if(!mrp)
196                 _NOSCHEMA_CLASS_ERR;
197        
198         RETURN_BOOL(midgard_reflection_property_is_multilang(
199                                 mrp, property_name));
200 }
201
202 void php_midgard_reflection_property_init(int module_number)
203 {
204         static function_entry reflection_property_methods[] = {
205                 PHP_ME(midgard_reflection_property,     __construct,
206                                 NULL,   ZEND_ACC_PUBLIC)
207                 PHP_ME(midgard_reflection_property,     get_midgard_type,
208                                 NULL,   ZEND_ACC_PUBLIC)
209                 PHP_ME(midgard_reflection_property,     is_link,
210                                 NULL,   ZEND_ACC_PUBLIC)
211                 PHP_ME(midgard_reflection_property,     get_link_name,
212                                 NULL,   ZEND_ACC_PUBLIC)
213                 PHP_ME(midgard_reflection_property,     description,
214                                 NULL,   ZEND_ACC_PUBLIC)
215                 PHP_ME(midgard_reflection_property,     is_multilang,
216                                 NULL,   ZEND_ACC_PUBLIC)
217                 {NULL, NULL, NULL}
218         };
219        
220         static zend_class_entry reflection_property_class_entry;
221
222         INIT_CLASS_ENTRY(
223                         reflection_property_class_entry,
224                         "midgard_reflection_property", reflection_property_methods);
225         php_midgard_reflection_property_class =
226                 zend_register_internal_class(&reflection_property_class_entry TSRMLS_CC);
227
228         /* Set function to initialize underlying data */
229         php_midgard_reflection_property_class->create_object = php_midgard_gobject_new;
230 }
Note: See TracBrowser for help on using the browser.