コード例 #1
0
ファイル: Form.c プロジェクト: dshum/Lemon-Tree-2.0
ONPHP_METHOD(Form, getInnerErrors)
{
	zval
		*result,
		*primitives = ONPHP_READ_PROPERTY(getThis(), "primitives"),
		**prm;
	
	ONPHP_CALL_METHOD_0(getThis(), "geterrors", &result);
	
	ONPHP_MAKE_ARRAY(result);
	
	ONPHP_FOREACH(primitives, prm) {
		zend_class_entry **pfl, **pf;
		zval *value;
		
		ONPHP_CALL_METHOD_0_NORET(*prm, "getvalue", &value);
		
		if (EG(exception)) {
			ZVAL_FREE(primitives);
			return;
		}
		
		ONPHP_FIND_FOREIGN_CLASS("PrimitiveFormsList", pfl);
		ONPHP_FIND_FOREIGN_CLASS("PrimitiveForm", pf);
		
		if (ONPHP_CHECK_EMPTY(value)) {
			if (
				instanceof_function(Z_OBJCE_PP(prm), *pfl TSRMLS_CC)
				|| instanceof_function(Z_OBJCE_PP(prm), *pf TSRMLS_CC)
			) {
				zval *name, *errors;
				
				ONPHP_CALL_METHOD_0_NORET(*prm, "getinnererrors", &errors);
				
				if (EG(exception)) {
					ZVAL_FREE(primitives);
					return;
				}
				
				ONPHP_CALL_METHOD_0(*prm, "getname", &name);
				
				if (zend_hash_num_elements(Z_ARRVAL_P(errors)) > 0) {
					ONPHP_ASSOC_SET(result, Z_STRVAL_P(name), errors);
				} else {
					ONPHP_ASSOC_UNSET(result, Z_STRVAL_P(name));
				}
			}
		}
	}
コード例 #2
0
ファイル: Joiner.c プロジェクト: suquant/soloweb-onphp
ONPHP_METHOD(Joiner, toDialectString)
{
	zval
		*dialect,
		*from = ONPHP_READ_PROPERTY(getThis(), "from"),
		*table;
	zend_class_entry **cep;
	smart_str string = {0};
	unsigned int i = 0, count = zend_hash_num_elements(Z_ARRVAL_P(from));
	
	if (!count) {
		RETURN_NULL();
	} else {
		smart_str_appendl(&string, " FROM ", 6);
	}
	
	ONPHP_GET_ARGS("O", &dialect, onphp_ce_Dialect);
	
	ONPHP_FIND_FOREIGN_CLASS("SelectQuery", cep);
	
	for (i = 0; i < count; ++i) {
		zval *out;
		
		ONPHP_ARRAY_GET(from, i, table);
		
		if (i == 0) {
			/* nop */
		} else {
			if (ONPHP_INSTANCEOF(from, FromTable)) {
				zval *name;
				
				ONPHP_CALL_METHOD_0(table, "gettable", &name);
				
				if (instanceof_function(Z_OBJCE_P(table), *cep TSRMLS_CC)) {
					smart_str_appendl(&string, ", ", 2);
				} else {
					smart_str_appendc(&string, ' ');
				}
				
				zval_ptr_dtor(&name);
			} else {
				smart_str_appendc(&string, ' ');
			}
		}
		
		ONPHP_CALL_METHOD_1(table, "todialectstring", &out, dialect);
		
		onphp_append_zval_to_smart_string(&string, out);
		
		zval_ptr_dtor(&out);
	}
	
	smart_str_0(&string);
	
	RETURN_STRINGL(string.c, string.len, 0);
}
コード例 #3
0
ファイル: ExtractPart.c プロジェクト: suquant/soloweb-onphp
ONPHP_METHOD(ExtractPart, __construct)
{
	zval *what, *from, *fromField;
	zend_class_entry **cep;
	
	ONPHP_GET_ARGS("zz", &what, &from);
	
	if (ONPHP_INSTANCEOF(from, DialectString)) {
		if (
			!(
				ONPHP_INSTANCEOF(from, DBValue)
				|| ONPHP_INSTANCEOF(from, DBField)
			)
		) {
			ONPHP_THROW(WrongArgumentException, NULL);
		}
	}
	
	ONPHP_MAKE_OBJECT(DBField, fromField);
	
	ONPHP_CALL_METHOD_1_NORET(fromField, "__construct", NULL, from);
	
	if (EG(exception)) {
		ZVAL_FREE(fromField);
		return;
	}
	
	ONPHP_UPDATE_PROPERTY(getThis(), "from", fromField);
	
	zval_ptr_dtor(&fromField);
	
	ONPHP_FIND_FOREIGN_CLASS("DatePart", cep);
	
	if (
		!(
			(Z_TYPE_P(what) == IS_OBJECT)
			&& instanceof_function(Z_OBJCE_P(what), *cep TSRMLS_CC)
		)
	) {
		zval *whatPart;
		
		ALLOC_INIT_ZVAL(whatPart);
		object_init_ex(whatPart, *cep);
		Z_TYPE_P(whatPart) = IS_OBJECT;
		
		ONPHP_CALL_METHOD_1_NORET(whatPart, "__construct", NULL, what);
		
		if (EG(exception)) {
			ZVAL_FREE(whatPart);
			return;
		}
		
		ONPHP_UPDATE_PROPERTY(getThis(), "what", whatPart);
		
		zval_ptr_dtor(&whatPart);
	} else {
		ONPHP_UPDATE_PROPERTY(getThis(), "what", what);
		
		zval_ptr_dtor(&what);
	}
}